[glibc] 01/02: debian/patches/powerpc/submitted-tst-tlsopt-powerpc.diff: new proposed patch to fix tst-tlsopt-powerpc when built with binutils >= 2.29.
This is an automated email from the git hooks/post-receive script.
aurel32 pushed a commit to branch sid
in repository glibc.
commit d31f6b3de39563a20a93fe6705390da2ef252017
Author: Aurelien Jarno <aurelien@aurel32.net>
Date: Mon Jul 31 21:23:04 2017 +0200
debian/patches/powerpc/submitted-tst-tlsopt-powerpc.diff: new proposed patch to fix tst-tlsopt-powerpc when built with binutils >= 2.29.
---
debian/changelog | 4 +-
.../powerpc/submitted-tst-tlsopt-powerpc.diff | 164 +++++++++++++++++++++
debian/patches/series | 1 +
3 files changed, 168 insertions(+), 1 deletion(-)
diff --git a/debian/changelog b/debian/changelog
index 4a53767..f7125a0 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,8 @@
glibc (2.24-14) UNRELEASED; urgency=medium
- *
+ [ Aurelien Jarno ]
+ * debian/patches/powerpc/submitted-tst-tlsopt-powerpc.diff: new proposed
+ patch to fix tst-tlsopt-powerpc when built with binutils >= 2.29.
-- Aurelien Jarno <aurel32@debian.org> Mon, 31 Jul 2017 18:34:04 +0200
diff --git a/debian/patches/powerpc/submitted-tst-tlsopt-powerpc.diff b/debian/patches/powerpc/submitted-tst-tlsopt-powerpc.diff
new file mode 100644
index 0000000..ef019d4
--- /dev/null
+++ b/debian/patches/powerpc/submitted-tst-tlsopt-powerpc.diff
@@ -0,0 +1,164 @@
+2017-07-31 Alan Modra <amodra@gmail.com>
+
+ * sysdeps/powerpc/mod-tlsopt-powerpc.c: Extract from
+ tst-tlsopt-powerpc.c with function name change and no test harness.
+ * sysdeps/powerpc/tst-tlsopt-powerpc.c: Remove body of test.
+ Call tls_get_addr_opt_test.
+ * sysdeps/powerpc/Makefile (LDFLAGS-tst-tlsopt-powerpc): Don't define.
+ (modules-names): Add mod-tlsopt-powerpc.
+ (mod-tlsopt-powerpc.so-no-z-defs): Define.
+ (tst-tlsopt-powerpc): Depend on .so.
+ * sysdeps/powerpc/powerpc64/tls-macros.h (__TLS_GET_ADDR): Don't
+ define. Expand use in TLS_GD and TLS_LD.
+
+--- a/sysdeps/powerpc/Makefile
++++ b/sysdeps/powerpc/Makefile
+@@ -8,9 +8,11 @@
+ sysdep_routines += dl-machine hwcapinfo
+ # extra shared linker files to link only into dl-allobjs.so
+ sysdep-rtld-routines += dl-machine hwcapinfo
+-# Don't optimize GD tls sequence to LE.
+-LDFLAGS-tst-tlsopt-powerpc += -Wl,--no-tls-optimize
++
++modules-names += mod-tlsopt-powerpc
++mod-tlsopt-powerpc.so-no-z-defs = yes
+ tests += tst-tlsopt-powerpc
++$(objpfx)tst-tlsopt-powerpc: $(objpfx)mod-tlsopt-powerpc.so
+ endif
+
+ ifeq ($(subdir),setjmp)
+--- /dev/null
++++ b/sysdeps/powerpc/mod-tlsopt-powerpc.c
+@@ -0,0 +1,49 @@
++/* shared library to test for __tls_get_addr optimization. */
++#include <stdio.h>
++
++#include "../../elf/tls-macros.h"
++#include "dl-tls.h"
++
++/* common 'int' variable in TLS. */
++COMMON_INT_DEF(foo);
++
++
++int
++tls_get_addr_opt_test (void)
++{
++ int result = 0;
++
++ /* Get variable using general dynamic model. */
++ int *ap = TLS_GD (foo);
++ if (*ap != 0)
++ {
++ printf ("foo = %d\n", *ap);
++ result = 1;
++ }
++
++ tls_index *tls_arg;
++#ifdef __powerpc64__
++ register unsigned long thread_pointer __asm__ ("r13");
++ asm ("addi %0,2,foo@got@tlsgd" : "=r" (tls_arg));
++#else
++ register unsigned long thread_pointer __asm__ ("r2");
++ asm ("bcl 20,31,1f\n1:\t"
++ "mflr %0\n\t"
++ "addis %0,%0,_GLOBAL_OFFSET_TABLE_-1b@ha\n\t"
++ "addi %0,%0,_GLOBAL_OFFSET_TABLE_-1b@l\n\t"
++ "addi %0,%0,foo@got@tlsgd" : "=b" (tls_arg));
++#endif
++
++ if (tls_arg->ti_module != 0)
++ {
++ printf ("tls_index not optimized, binutils too old?\n");
++ result = 1;
++ }
++ else if (tls_arg->ti_offset + thread_pointer != (unsigned long) ap)
++ {
++ printf ("tls_index->ti_offset wrong value\n");
++ result = 1;
++ }
++
++ return result;
++}
+--- a/sysdeps/powerpc/powerpc64/tls-macros.h
++++ b/sysdeps/powerpc/powerpc64/tls-macros.h
+@@ -18,13 +18,11 @@
+ __result; \
+ })
+
+-#define __TLS_GET_ADDR "__tls_get_addr"
+-
+ /* PowerPC64 Local Dynamic TLS access. */
+ #define TLS_LD(x) \
+ ({ int * __result; \
+ asm ("addi 3,2," #x "@got@tlsld\n\t" \
+- "bl " __TLS_GET_ADDR "\n\t" \
++ "bl __tls_get_addr\n\t" \
+ "nop \n\t" \
+ "addis %0,3," #x "@dtprel@ha\n\t" \
+ "addi %0,%0," #x "@dtprel@l" \
+@@ -36,7 +34,7 @@
+ #define TLS_GD(x) \
+ ({ register int *__result __asm__ ("r3"); \
+ asm ("addi 3,2," #x "@got@tlsgd\n\t" \
+- "bl " __TLS_GET_ADDR "\n\t" \
++ "bl __tls_get_addr\n\t" \
+ "nop " \
+ : "=r" (__result) : \
+ : __TLS_CALL_CLOBBERS); \
+--- a/sysdeps/powerpc/tst-tlsopt-powerpc.c
++++ b/sysdeps/powerpc/tst-tlsopt-powerpc.c
+@@ -1,52 +1,12 @@
+ /* glibc test for __tls_get_addr optimization. */
+-#include <stdio.h>
+-
+-#include "../../elf/tls-macros.h"
+-#include "dl-tls.h"
+-
+-/* common 'int' variable in TLS. */
+-COMMON_INT_DEF(foo);
+-
+
+ #define TEST_FUNCTION do_test ()
+ static int
+ do_test (void)
+ {
+- int result = 0;
+-
+- /* Get variable using general dynamic model. */
+- int *ap = TLS_GD (foo);
+- if (*ap != 0)
+- {
+- printf ("foo = %d\n", *ap);
+- result = 1;
+- }
+-
+- tls_index *tls_arg;
+-#ifdef __powerpc64__
+- register unsigned long thread_pointer __asm__ ("r13");
+- asm ("addi %0,2,foo@got@tlsgd" : "=r" (tls_arg));
+-#else
+- register unsigned long thread_pointer __asm__ ("r2");
+- asm ("bcl 20,31,1f\n1:\t"
+- "mflr %0\n\t"
+- "addis %0,%0,_GLOBAL_OFFSET_TABLE_-1b@ha\n\t"
+- "addi %0,%0,_GLOBAL_OFFSET_TABLE_-1b@l\n\t"
+- "addi %0,%0,foo@got@tlsgd" : "=b" (tls_arg));
+-#endif
+-
+- if (tls_arg->ti_module != 0)
+- {
+- printf ("tls_index not optimized, binutils too old?\n");
+- result = 1;
+- }
+- else if (tls_arg->ti_offset + thread_pointer != (unsigned long) ap)
+- {
+- printf ("tls_index->ti_offset wrong value\n");
+- result = 1;
+- }
++ extern int tls_get_addr_opt_test (void);
+
+- return result;
++ return tls_get_addr_opt_test ();
+ }
+
+ #include "../../test-skeleton.c"
diff --git a/debian/patches/series b/debian/patches/series
index 1f7b25f..c0db45a 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -169,6 +169,7 @@ m68k/submitted-gcc34-seccomment.diff
mips/submitted-rld_map.diff
powerpc/local-powerpc8xx-dcbz.diff
+powerpc/submitted-tst-tlsopt-powerpc.diff
sh4/local-fpscr_values.diff
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-glibc/glibc.git
Reply to: