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 <aurel...@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 <aure...@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 <amo...@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