| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | /* Check alignment of TLS variable.  */#include <dlfcn.h>#include <stdint.h>#include <stdio.h>#include <stdlib.h>#include <tls.h>#if USE_TLS && HAVE___THREAD#define AL 4096struct foo{  int i;} __attribute ((aligned (AL)));static __thread struct foo f;static struct foo g;extern int in_dso1 (void);static intdo_test (void){  int result = 0;  int fail = (((uintptr_t) &f) & (AL - 1)) != 0;  printf ("&f = %p %s\n", &f, fail ? "FAIL" : "OK");  result |= fail;  fail = (((uintptr_t) &g) & (AL - 1)) != 0;  printf ("&g = %p %s\n", &g, fail ? "FAIL" : "OK");  result |= fail;  result |= in_dso1 ();  void *h = dlopen ("tst-tlsmod14b.so", RTLD_LAZY);  if (h == NULL)    {      printf ("cannot open tst-tlsmod14b.so: %m\n");      exit (1);    }  int (*fp) (void) = (int (*) (void)) dlsym (h, "in_dso2");  if (fp == NULL)    {      puts ("cannot find in_dso2");      exit (1);    }  result |= fp ();  return result;}#define TEST_FUNCTION do_test ()#else#define TEST_FUNCTION 0#endif#include "../test-skeleton.c"
 |