| #include <string.h> |
| #include <unistd.h> |
| |
| static void |
| preinit_0 (int argc __attribute__ ((unused)), char **argv) |
| { |
| char *p = strrchr (argv [0], '/'); |
| |
| if (p == NULL) |
| return; |
| |
| p++; |
| size_t len = strlen (p); |
| write (STDOUT_FILENO, "preinit array in executable: ", 29); |
| write (STDOUT_FILENO, p, len); |
| write (STDOUT_FILENO, "\n", 1); |
| } |
| |
| void (*const preinit_array []) (int, char **) |
| __attribute__ ((section (".preinit_array"), aligned (sizeof (void *)))) = |
| { |
| &preinit_0, |
| }; |
| |
| static void |
| init_0 (int argc __attribute__ ((unused)), char **argv) |
| { |
| char *p = strrchr (argv [0], '/'); |
| |
| if (p == NULL) |
| return; |
| |
| p++; |
| size_t len = strlen (p); |
| write (STDOUT_FILENO, "init array in executable: ", 26); |
| write (STDOUT_FILENO, p, len); |
| write (STDOUT_FILENO, "\n", 1); |
| } |
| |
| void (*const init_array []) (int, char **) |
| __attribute__ ((section (".init_array"), aligned (sizeof (void *)))) = |
| { |
| &init_0, |
| }; |
| |
| int |
| main (void) |
| { |
| return 0; |
| } |