我从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”进行搜索,但一无所获。
我在哪里可以找到这些符号的规格?