Mention IFUNC enhancements to testsuite in NEWS.
[platform/upstream/glibc.git] / elf / tst-audit2.c
1 /* Test case for early TLS initialization in dynamic linker.  */
2
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6
7 #define MAGIC1 0xabcdef72
8 #define MAGIC2 0xd8675309
9 static __thread unsigned int magic[] = { MAGIC1, MAGIC2 };
10
11 #undef calloc
12
13 /* This calloc definition will be called by the dynamic linker itself.
14    We test that it has initialized our TLS block by the time it does so.  */
15
16 void *
17 calloc (size_t n, size_t m)
18 {
19   if (magic[0] != MAGIC1 || magic[1] != MAGIC2)
20     {
21       printf ("{%x, %x} != {%x, %x}\n", magic[0], magic[1], MAGIC1, MAGIC2);
22       abort ();
23     }
24   magic[0] = MAGIC2;
25   magic[1] = MAGIC1;
26
27   n *= m;
28   void *ptr = malloc (n);
29   if (ptr != NULL)
30     memset (ptr, '\0', n);
31   return ptr;
32 }
33
34 int
35 main (void)
36 {
37   if (magic[1] != MAGIC1 || magic[0] != MAGIC2)
38     {
39       printf ("{%x, %x} != {%x, %x}\n", magic[0], magic[1], MAGIC2, MAGIC1);
40       return 1;
41     }
42
43   return 0;
44 }