diff options
| author | "Steven J. Hill" <sjhill@realitydiluted.com> | 2005-10-30 04:33:48 +0000 |
|---|---|---|
| committer | "Steven J. Hill" <sjhill@realitydiluted.com> | 2005-10-30 04:33:48 +0000 |
| commit | 4fc0cd60dfa59fbd89f9f6737db69d3794701dfc (patch) | |
| tree | 53b0181c20035ed05aa5a9def6dad0e7a50dcc7f /test/tls/tst-tls14.c | |
| parent | c82f7be400838c99fdbf7635610f799a1154ccdd (diff) | |
| download | uClibc-alpine-4fc0cd60dfa59fbd89f9f6737db69d3794701dfc.tar.bz2 uClibc-alpine-4fc0cd60dfa59fbd89f9f6737db69d3794701dfc.tar.xz | |
Add TLS test suite for testing TLS relocation functionality in the dynamic loader. Make sure your read the README file before asking any questions, and then read it again.
Diffstat (limited to 'test/tls/tst-tls14.c')
| -rw-r--r-- | test/tls/tst-tls14.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/test/tls/tst-tls14.c b/test/tls/tst-tls14.c new file mode 100644 index 000000000..428fd5293 --- /dev/null +++ b/test/tls/tst-tls14.c @@ -0,0 +1,66 @@ +/* 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 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 () + +#else + +#define TEST_FUNCTION 0 + +#endif + +#include "../test-skeleton.c" |
