1#include <string.h>
2#include <unistd.h>
3
4static void
5preinit_0 (int argc __attribute__ ((unused)), char **argv)
6{
7 char *p = strrchr (s: argv [0], c: '/');
8
9 if (p == NULL)
10 return;
11
12 p++;
13 size_t len = strlen (s: p);
14 write (STDOUT_FILENO, buf: "preinit array in executable: ", n: 29);
15 write (STDOUT_FILENO, buf: p, n: len);
16 write (STDOUT_FILENO, buf: "\n", n: 1);
17}
18
19void (*const preinit_array []) (int, char **)
20 __attribute__ ((section (".preinit_array"), aligned (sizeof (void *)))) =
21{
22 &preinit_0,
23};
24
25static void
26init_0 (int argc __attribute__ ((unused)), char **argv)
27{
28 char *p = strrchr (s: argv [0], c: '/');
29
30 if (p == NULL)
31 return;
32
33 p++;
34 size_t len = strlen (s: p);
35 write (STDOUT_FILENO, buf: "init array in executable: ", n: 26);
36 write (STDOUT_FILENO, buf: p, n: len);
37 write (STDOUT_FILENO, buf: "\n", n: 1);
38}
39
40void (*const init_array []) (int, char **)
41 __attribute__ ((section (".init_array"), aligned (sizeof (void *)))) =
42{
43 &init_0,
44};
45
46int
47main (void)
48{
49 return 0;
50}
51

source code of glibc/elf/tst-array5.c