понимание __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 и кодов источника (I 'Я использую CodeSourcery G ++ Lite) только, чтобы ничего не получить.



Где я могу найти спецификацию этих символов?

Ответы на вопрос(3)

Ваш ответ на вопрос