我观察__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
...
然后我搜索与ELF-V1.1,GCC 4.7.2,LD和CodeSourcery的的文档的关键“init_array”(我使用CodeSourcery的G ++精简版)只得到什么。
我在哪里可以找到这些符号的规范?