Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
* include/link.h (FORCED_DYNAMIC_TLS_OFFSET): Define.
* elf/dl-close.c (_dl_close): Check for it. * elf/dl-reloc.c (CHECK_STATIC_TLS): Likewise. (_dl_allocate_static_tls): Likewise. * elf/dl-tls.c (_dl_allocate_tls_init): Likewise. (__tls_get_addr): Protect from race conditions in setting l_tls_offset to it. * elf/tst-tls16.c: New file. * elf/tst-tlsmod16a.c: New file. * elf/tst-tlsmod16b.c: New file. * elf/Makefile: Add rules to build and run tst-tls16.
- Loading branch information
Ulrich Drepper
committed
Jan 17, 2008
1 parent
a0f6c23
commit 4c53356
Showing
9 changed files
with
138 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
#include <dlfcn.h> | ||
#include <stdio.h> | ||
|
||
static int | ||
do_test (void) | ||
{ | ||
void *h = dlopen ("tst-tlsmod16a.so", RTLD_LAZY | RTLD_GLOBAL); | ||
if (h == NULL) | ||
{ | ||
puts ("unexpectedly failed to open tst-tlsmod16a.so"); | ||
exit (1); | ||
} | ||
|
||
void *p = dlsym (h, "tlsvar"); | ||
|
||
/* This dlopen should indeed fail, because tlsvar was assigned to | ||
dynamic TLS, and the new module requests it to be in static TLS. | ||
However, there's a possibility that dlopen succeeds if the | ||
variable is, for whatever reason, assigned to static TLS, or if | ||
the module fails to require static TLS, or even if TLS is not | ||
supported. */ | ||
h = dlopen ("tst-tlsmod16b.so", RTLD_NOW | RTLD_GLOBAL); | ||
if (h == NULL) | ||
{ | ||
return 0; | ||
} | ||
|
||
puts ("unexpectedly succeeded to open tst-tlsmod16b.so"); | ||
|
||
|
||
void *(*fp) (void) = (void *(*) (void)) dlsym (h, "in_dso"); | ||
if (fp == NULL) | ||
{ | ||
puts ("cannot find in_dso"); | ||
exit (1); | ||
} | ||
|
||
/* If the dlopen passes, at least make sure the address returned by | ||
dlsym is the same as that returned by the initial-exec access. | ||
If the variable was assigned to dynamic TLS during dlsym, this | ||
portion will fail. */ | ||
if (fp () != p) | ||
{ | ||
puts ("returned values do not match"); | ||
exit (1); | ||
} | ||
|
||
return 0; | ||
} | ||
|
||
#define TEST_FUNCTION do_test () | ||
#include "../test-skeleton.c" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
#include <tls.h> | ||
|
||
#if defined HAVE___THREAD && defined HAVE_TLS_MODEL_ATTRIBUTE | ||
int __thread tlsvar; | ||
#else | ||
int tlsvar; | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
#include <tls.h> | ||
|
||
#if defined HAVE___THREAD && defined HAVE_TLS_MODEL_ATTRIBUTE | ||
extern __thread int tlsvar __attribute__((tls_model("initial-exec"))); | ||
#else | ||
extern int tlsvar; | ||
#endif | ||
|
||
void * | ||
in_dso (void) | ||
{ | ||
return &tlsvar; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters