C プログラムでは、テスト目的でプログラムを開始するときに、すべてのグローバル変数を再初期化する必要があります。
GCCライブラリで行われるロードメモリアドレス、LMAからVMA(ランタイムアドレス)へのデータコピーを再初期化機能で再現したい。たとえば、foo 変数がグローバルとして宣言され、初期化されているとします。そして、再初期化関数が re_init() の場合:
#include <stdio.h>
int foo1 = 42;
int foo2 = 777;
int main(){
foo1 = 0;
foo2 = 0;
re_init();
printf("foo1:%d and foo2:%d",foo1,foo2);
return 0;
}
次に、出力として持ちたい:
foo1:42 and foo2:777
これを行う正しい方法は、デフォルトのリンカ ファイルと、初期値を RAM にコピーするスタートアップ コードを使用することだと思います。では、GCC (cygwin) では、これを達成するにはどうすればよいでしょうか?
編集: このページはより正確に表示されているようです: http://sources.redhat.com/binutils/docs-2.12/ld.info/Output-Section-LMA.html#Output%20Section%20LMA