about summary refs log tree commit diff
path: root/elf/tst-tlsalign-vars.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@hack.frob.com>2015-06-02 16:55:36 -0700
committerRoland McGrath <roland@hack.frob.com>2015-06-02 16:55:36 -0700
commit1a1a6bde63e0af0d5f2f3465ba45338e7513c4e4 (patch)
tree803e197475a78b73bf77681e0e7264e3ed487b05 /elf/tst-tlsalign-vars.c
parente0c349b40c4f51589c2adb63ccdaaf4dcc0fb1ea (diff)
downloadglibc-1a1a6bde63e0af0d5f2f3465ba45338e7513c4e4.tar.gz
glibc-1a1a6bde63e0af0d5f2f3465ba45338e7513c4e4.tar.xz
glibc-1a1a6bde63e0af0d5f2f3465ba45338e7513c4e4.zip
BZ#18383: Another test case, with TLS refs and defs in separate TUs.
Diffstat (limited to 'elf/tst-tlsalign-vars.c')
-rw-r--r--elf/tst-tlsalign-vars.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/elf/tst-tlsalign-vars.c b/elf/tst-tlsalign-vars.c
new file mode 100644
index 0000000000..01b3501d3b
--- /dev/null
+++ b/elf/tst-tlsalign-vars.c
@@ -0,0 +1,28 @@
+/* This is for tst-tlsalign-extern.c, which see.  It's essential for the
+   purpose of the test that these definitions be in a separate translation
+   unit from the code using the variables.  */
+
+__thread int tdata1 = 1;
+__thread int tdata2 __attribute__ ((aligned (0x10))) = 2;
+__thread int tdata3 __attribute__ ((aligned (0x1000))) = 4;
+__thread int tbss1;
+__thread int tbss2 __attribute__ ((aligned (0x10)));
+__thread int tbss3 __attribute__ ((aligned (0x1000)));
+
+/* This function is never called.  But its presence in this translation
+   unit makes GCC emit the variables above in the order defined (perhaps
+   because it's the order in which they're used here?) rather than
+   reordering them into descending order of alignment requirement--and so
+   keeps it more similar to the tst-tlsalign-static.c case--just in case
+   that affects the bug (though there is no evidence that it does).  */
+
+void
+unused (void)
+{
+  tdata1 = -1;
+  tdata2 = -2;
+  tdata3 = -3;
+  tbss1 = -4;
+  tbss2 = -5;
+  tbss3 = -6;
+}