http://newlib.sourcearchive.com/documentation/1.18.0/init_8c-source.htmlから__libc_init_arrayのソースコードを表示しました。
しかし、私はこの関数が何をするのかよくわかりません。
私はこれらのシンボルが
/* These magic symbols are provided by the linker. */
extern void (*__preinit_array_start []) (void) __attribute__((weak));
extern void (*__preinit_array_end []) (void) __attribute__((weak));
extern void (*__init_array_start []) (void) __attribute__((weak));
extern void (*__init_array_end []) (void) __attribute__((weak));
extern void (*__fini_array_start []) (void) __attribute__((weak));
extern void (*__fini_array_end []) (void) __attribute__((weak));
リンカスクリプトで定義されています。
リンカスクリプトの一部は次のようになります。
.preinit_array :
{
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array*))
PROVIDE_HIDDEN (__preinit_array_end = .);
} >FLASH
.init_array :
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array*))
PROVIDE_HIDDEN (__init_array_end = .);
} >FLASH
...
次に、ELF-v1.1、gcc 4.7.2、ld、およびcodesourcery(codesourcery g ++ liteを使用しています)のドキュメントでキー「init_array」を使用して検索したところ、何も得られませんでした。
これらの記号の仕様はどこにありますか?