|  | /* Check alignment of TLS variable.  */ | 
|  | #include <dlfcn.h> | 
|  | #include <stdint.h> | 
|  | #include <stdio.h> | 
|  | #include <stdlib.h> | 
|  |  | 
|  | #define AL 4096 | 
|  | struct foo | 
|  | { | 
|  | int i; | 
|  | } __attribute ((aligned (AL))); | 
|  |  | 
|  | static __thread struct foo f; | 
|  | static struct foo g; | 
|  |  | 
|  |  | 
|  | extern int in_dso1 (void); | 
|  |  | 
|  |  | 
|  | static int | 
|  | do_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 () | 
|  | #include "../test-skeleton.c" |