Verständnis der __libc_init_array

Ich habe mir den Quellcode von __libc_init_array von angesehenhttp://newlib.sourcearchive.com/documentation/1.18.0/init_8c-source.html .
Aber ich verstehe nicht ganz, was diese Funktion macht.

Ich kenne diese Symbole

/* 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));

wird im Linker-Skript definiert.
Ein Teil des Linker-Skripts könnte folgendermaßen aussehen:

  .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
  ...

und dann habe ich mit dem Schlüssel "init_array" in den Dokumenten von ELF-v1.1, gcc 4.7.2, ld und codesourcery (ich verwende codesourcery g ++ lite) gesucht, nur um nichts zu bekommen.

Wo finde ich die technischen Daten dieser Symbole?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage