понимание __libc_init_array
Я просмотрел исходный код __libc_init_array изhttp://newlib.sourcearchive.com/documentation/1.18.0/init_8c-source.html .
Но я не совсем понимаю, что делает эта функция.
Я знаю что эти символы
/* 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
...
и затем я искал с помощью ключа "init_array" в документах ELF-v1.1, gcc 4.7.2, ld и Cossourcery (я использую CodeSource G ++ Lite) только, чтобы ничего не получить.
Где я могу найти спецификацию этих символов?