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-tls2.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-tls2.c')
| -rw-r--r-- | test/tls/tst-tls2.c | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/test/tls/tst-tls2.c b/test/tls/tst-tls2.c new file mode 100644 index 000000000..417489968 --- /dev/null +++ b/test/tls/tst-tls2.c @@ -0,0 +1,91 @@ +/* glibc test for TLS in ld.so. */ +#include <stdio.h> + +#include <tls.h> + +#ifdef USE_TLS +# include "tls-macros.h" + + +/* Two 'int' variables in TLS. */ +VAR_INT_DEF(foo); +VAR_INT_DEF(bar); +#endif + + +#define TEST_FUNCTION do_test () +static int +do_test (void) +{ +#ifdef USE_TLS + int result = 0; + int *ap, *bp; + + + /* Set the variable using the local exec model. */ + puts ("set bar to 1 (LE)"); + ap = TLS_LE (bar); + *ap = 1; + + + /* Get variables using initial exec model. */ + fputs ("get sum of foo and bar (IE)", stdout); + ap = TLS_IE (foo); + bp = TLS_IE (bar); + printf (" = %d\n", *ap + *bp); + result |= *ap + *bp != 1; + if (*ap != 0) + { + printf ("foo = %d\n", *ap); + result = 1; + } + if (*bp != 1) + { + printf ("bar = %d\n", *bp); + result = 1; + } + + + /* Get variables using local dynamic model. */ + fputs ("get sum of foo and bar (LD)", stdout); + ap = TLS_LD (foo); + bp = TLS_LD (bar); + printf (" = %d\n", *ap + *bp); + result |= *ap + *bp != 1; + if (*ap != 0) + { + printf ("foo = %d\n", *ap); + result = 1; + } + if (*bp != 1) + { + printf ("bar = %d\n", *bp); + result = 1; + } + + + /* Get variables using generic dynamic model. */ + fputs ("get sum of foo and bar (GD)", stdout); + ap = TLS_GD (foo); + bp = TLS_GD (bar); + printf (" = %d\n", *ap + *bp); + result |= *ap + *bp != 1; + if (*ap != 0) + { + printf ("foo = %d\n", *ap); + result = 1; + } + if (*bp != 1) + { + printf ("bar = %d\n", *bp); + result = 1; + } + + return result; +#else + return 0; +#endif +} + + +#include "../test-skeleton.c" |
