|  | #include <unistd.h> | 
|  |  | 
|  | /* Give init non-default priority so that it runs before init_array.  */ | 
|  | static void init (void) __attribute__ ((constructor (1000))); | 
|  |  | 
|  | static void | 
|  | init (void) | 
|  | { | 
|  | write (STDOUT_FILENO, "init\n", 5); | 
|  | } | 
|  |  | 
|  | /* Give fini the same priority as init.  */ | 
|  | static void fini (void) __attribute__ ((destructor (1000))); | 
|  |  | 
|  | static void | 
|  | fini (void) | 
|  | { | 
|  | write (STDOUT_FILENO, "fini\n", 5); | 
|  | } | 
|  |  | 
|  | static void | 
|  | preinit_0 (void) | 
|  | { | 
|  | write (STDOUT_FILENO, "preinit array 0\n", 16); | 
|  | } | 
|  |  | 
|  | static void | 
|  | preinit_1 (void) | 
|  | { | 
|  | write (STDOUT_FILENO, "preinit array 1\n", 16); | 
|  | } | 
|  |  | 
|  | static void | 
|  | preinit_2 (void) | 
|  | { | 
|  | write (STDOUT_FILENO, "preinit array 2\n", 16); | 
|  | } | 
|  |  | 
|  | void (*const preinit_array []) (void) | 
|  | __attribute__ ((section (".preinit_array"), aligned (sizeof (void *)))) = | 
|  | { | 
|  | &preinit_0, | 
|  | &preinit_1, | 
|  | &preinit_2 | 
|  | }; | 
|  |  | 
|  | static void | 
|  | init_0 (void) | 
|  | { | 
|  | write (STDOUT_FILENO, "init array 0\n", 13); | 
|  | } | 
|  |  | 
|  | static void | 
|  | init_1 (void) | 
|  | { | 
|  | write (STDOUT_FILENO, "init array 1\n", 13); | 
|  | } | 
|  |  | 
|  | static void | 
|  | init_2 (void) | 
|  | { | 
|  | write (STDOUT_FILENO, "init array 2\n", 13); | 
|  | } | 
|  |  | 
|  | void (*init_array []) (void) | 
|  | __attribute__ ((section (".init_array"), aligned (sizeof (void *)))) = | 
|  | { | 
|  | &init_0, | 
|  | &init_1, | 
|  | &init_2 | 
|  | }; | 
|  |  | 
|  | static void | 
|  | fini_0 (void) | 
|  | { | 
|  | write (STDOUT_FILENO, "fini array 0\n", 13); | 
|  | } | 
|  |  | 
|  | static void | 
|  | fini_1 (void) | 
|  | { | 
|  | write (STDOUT_FILENO, "fini array 1\n", 13); | 
|  | } | 
|  |  | 
|  | static void | 
|  | fini_2 (void) | 
|  | { | 
|  | write (STDOUT_FILENO, "fini array 2\n", 13); | 
|  | } | 
|  |  | 
|  | void (*fini_array []) (void) | 
|  | __attribute__ ((section (".fini_array"), aligned (sizeof (void *)))) = | 
|  | { | 
|  | &fini_0, | 
|  | &fini_1, | 
|  | &fini_2 | 
|  | }; | 
|  |  | 
|  | int | 
|  | main (void) | 
|  | { | 
|  | return 0; | 
|  | } |