我從http://newlib.sourcearchive.com/documentation/1.18.0/init_8c-source.html查看了__libc_init_array的源代碼。
但我不太明白這個功能的作用。瞭解__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的的文檔的關鍵 「init_array」(我'使用codesourcery g ++ lite)只能得不到任何東西。
我在哪裏可以找到這些符號的規格?
感謝您的回覆。我只是谷歌編輯它。 .init_array部分是由System V ABI指定的特殊部分,我想它是由gcc自動生成的。 – Pony279 2013-03-07 08:46:43