diff options
Diffstat (limited to 'elf')
-rw-r--r-- | elf/Makefile | 20 | ||||
-rw-r--r-- | elf/tst-tls9-static.c | 1 | ||||
-rw-r--r-- | elf/tst-tls9.c | 43 | ||||
-rw-r--r-- | elf/tst-tlsmod5.c | 7 | ||||
-rw-r--r-- | elf/tst-tlsmod6.c | 7 |
5 files changed, 77 insertions, 1 deletions
diff --git a/elf/Makefile b/elf/Makefile index 5fdcec46df..f490b2587d 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -69,6 +69,7 @@ distribute := rtld-Rules \ unwind-dw2.c unwind-dw2-fde.c unwind.h unwind-pe.h \ unwind-dw2-fde.h dwarf2.h dl-procinfo.c tls.h dl-tls.h \ tst-tlsmod1.c tst-tlsmod2.c tst-tlsmod3.c tst-tlsmod4.c \ + tst-tlsmod5.c tst-tlsmod6.c \ circlemod1.c circlemod1a.c circlemod2.c circlemod2a.c \ circlemod3.c circlemod3a.c nodlopenmod2.c \ tls-macros.h @@ -115,9 +116,14 @@ vpath %.c ../locale/programs endif endif -tests = tst-tls1 tst-tls2 +tests = tst-tls1 tst-tls2 tst-tls9 ifeq (yes,$(build-static)) tests-static = tst-tls1-static tst-tls2-static +ifeq (yesyesyes,$(build-static)$(build-shared)$(elf)) +tests-static += tst-tls9-static +tst-tls9-static-ENV = \ + LD_LIBRARY_PATH=$(objpfx):$(common-objpfx):$(common-objpfx)dlfcn +endif tests += $(tests-static) endif ifeq (yes,$(build-shared)) @@ -147,6 +153,7 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \ reldep6mod0 reldep6mod1 reldep6mod2 reldep6mod3 reldep6mod4 \ reldep7mod1 reldep7mod2 \ tst-tlsmod1 tst-tlsmod2 tst-tlsmod3 tst-tlsmod4 \ + tst-tlsmod5 tst-tlsmod6 \ circlemod1 circlemod1a circlemod2 circlemod2a \ circlemod3 circlemod3a modules-vis-yes = vismod1 vismod2 vismod3 @@ -347,6 +354,9 @@ $(objpfx)reldep6mod3.so: $(objpfx)reldep6mod2.so $(objpfx)reldep6mod4.so: $(objpfx)reldep6mod1.so $(objpfx)tst-tlsmod3.so: $(objpfx)tst-tlsmod2.so +LDFLAGS-tst-tlsmod5.so = -nostdlib +LDFLAGS-tst-tlsmod6.so = -nostdlib + # filtmod1.so has a special rule $(filter-out $(objpfx)filtmod1.so, $(test-modules)): $(objpfx)%.so: $(objpfx)%.os $(build-module) @@ -523,3 +533,11 @@ $(objpfx)tst-tls7.out: $(objpfx)tst-tlsmod3.so $(objpfx)tst-tls8: $(libdl) $(objpfx)tst-tls8.out: $(objpfx)tst-tlsmod3.so $(objpfx)tst-tlsmod4.so + +$(objpfx)tst-tls9: $(libdl) +$(objpfx)tst-tls9.out: $(objpfx)tst-tlsmod5.so $(objpfx)tst-tlsmod6.so + +ifdef libdl +$(objpfx)tst-tls9-static: $(common-objpfx)dlfcn/libdl.a +$(objpfx)tst-tls9-static.out: $(objpfx)tst-tlsmod5.so $(objpfx)tst-tlsmod6.so +endif diff --git a/elf/tst-tls9-static.c b/elf/tst-tls9-static.c new file mode 100644 index 0000000000..51812ccc7d --- /dev/null +++ b/elf/tst-tls9-static.c @@ -0,0 +1 @@ +#include "tst-tls9.c" diff --git a/elf/tst-tls9.c b/elf/tst-tls9.c new file mode 100644 index 0000000000..cd958e47fb --- /dev/null +++ b/elf/tst-tls9.c @@ -0,0 +1,43 @@ +#include <dlfcn.h> +#include <stdio.h> +#include <stdlib.h> + +#include <link.h> +#include <tls.h> + + +#define TEST_FUNCTION do_test () +static int +do_test (void) +{ +#ifdef USE_TLS + static const char modname1[] = "tst-tlsmod5.so"; + static const char modname2[] = "tst-tlsmod6.so"; + int result = 0; + + void *h1 = dlopen (modname1, RTLD_LAZY); + if (h1 == NULL) + { + printf ("cannot open '%s': %s\n", modname1, dlerror ()); + result = 1; + } + void *h2 = dlopen (modname2, RTLD_LAZY); + if (h2 == NULL) + { + printf ("cannot open '%s': %s\n", modname2, dlerror ()); + result = 1; + } + + if (h1 != NULL) + dlclose (h1); + if (h2 != NULL) + dlclose (h2); + + return result; +#else + return 0; +#endif +} + + +#include "../test-skeleton.c" diff --git a/elf/tst-tlsmod5.c b/elf/tst-tlsmod5.c new file mode 100644 index 0000000000..2ec69e13b3 --- /dev/null +++ b/elf/tst-tlsmod5.c @@ -0,0 +1,7 @@ +#include <tls.h> + +#ifdef USE_TLS +#include "tls-macros.h" + +COMMON_INT_DEF(foo); +#endif diff --git a/elf/tst-tlsmod6.c b/elf/tst-tlsmod6.c new file mode 100644 index 0000000000..0fda51b226 --- /dev/null +++ b/elf/tst-tlsmod6.c @@ -0,0 +1,7 @@ +#include <tls.h> + +#ifdef USE_TLS +#include "tls-macros.h" + +COMMON_INT_DEF(bar); +#endif |