This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.26-12-ge98c925


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  e98c925fa4f6486447eb20676755dbf9eb36a110 (commit)
      from  3da5756ee851c40cb7d4469f4e0ed9ff361977ad (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=e98c925fa4f6486447eb20676755dbf9eb36a110

commit e98c925fa4f6486447eb20676755dbf9eb36a110
Author: Alan Modra <amodra@gmail.com>
Date:   Thu Aug 3 15:39:21 2017 +0930

    tst-tlsopt-powerpc as a shared lib
    
    This makes the __tls_get_addr_opt test run as a shared library, and so
    actually test that DTPMOD64/DTPREL64 pairs are processed by ld.so to
    support the __tls_get_adfr_opt call stub fast return.  After a
    2017-01-24 patch (binutils f0158f4416) ld.bfd no longer emitted
    unnecessary dynamic relocations against local thread variables,
    instead setting up the __tls_index GOT entries for the call stub fast
    return.  This meant tst-tlsopt-powerpc passed but did not check ld.so
    relocation support.  After a 2017-07-16 patch (binutils 676ee2b5fa)
    ld.bfd no longer set up the __tls_index GOT entries for the call stub
    fast return, and tst-tlsopt-powerpc failed.
    
    Compiling mod-tlsopt-powerpc.c with -DSHARED exposed a bug in
    powerpc64/tls-macros.h, which defines a __TLS_GET_ADDR macro that
    clashes with one defined in dl-tls.h.  The tls-macros.h version is
    only used in that file, so delete it and expand.
    
    	* 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.

diff --git a/ChangeLog b/ChangeLog
index 05a946d..4565de2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2017-08-03  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.
+
 2017-08-02  Samuel Thibault  <samuel.thibault@ens-lyon.org>
 
 	* sysdeps/mach/hurd/enbl-secure.c (__libc_init_secure): Define
diff --git a/sysdeps/powerpc/Makefile b/sysdeps/powerpc/Makefile
index 0d9206b..6aa683b 100644
--- a/sysdeps/powerpc/Makefile
+++ b/sysdeps/powerpc/Makefile
@@ -8,9 +8,11 @@ sysdep-dl-routines += dl-machine hwcapinfo
 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
 
 ifneq (no,$(multi-arch))
 tests-static += tst-tlsifunc-static
diff --git a/sysdeps/powerpc/tst-tlsopt-powerpc.c b/sysdeps/powerpc/mod-tlsopt-powerpc.c
similarity index 90%
copy from sysdeps/powerpc/tst-tlsopt-powerpc.c
copy to sysdeps/powerpc/mod-tlsopt-powerpc.c
index 8ae928a..ee0db12 100644
--- a/sysdeps/powerpc/tst-tlsopt-powerpc.c
+++ b/sysdeps/powerpc/mod-tlsopt-powerpc.c
@@ -1,4 +1,4 @@
-/* glibc test for __tls_get_addr optimization.  */
+/* shared library to test for __tls_get_addr optimization.  */
 #include <stdio.h>
 
 #include "../../elf/tls-macros.h"
@@ -8,8 +8,8 @@
 COMMON_INT_DEF(foo);
 
 
-static int
-do_test (void)
+int
+tls_get_addr_opt_test (void)
 {
   int result = 0;
 
@@ -47,5 +47,3 @@ do_test (void)
 
   return result;
 }
-
-#include <support/test-driver.c>
diff --git a/sysdeps/powerpc/powerpc64/tls-macros.h b/sysdeps/powerpc/powerpc64/tls-macros.h
index 42a95ec..79a0b25 100644
--- 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);					      \
diff --git a/sysdeps/powerpc/tst-tlsopt-powerpc.c b/sysdeps/powerpc/tst-tlsopt-powerpc.c
index 8ae928a..cc682b2 100644
--- a/sysdeps/powerpc/tst-tlsopt-powerpc.c
+++ b/sysdeps/powerpc/tst-tlsopt-powerpc.c
@@ -1,51 +1,11 @@
 /* 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);
-
 
 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 <support/test-driver.c>

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |   13 ++++++
 sysdeps/powerpc/Makefile                           |    6 ++-
 .../{tst-tlsopt-powerpc.c => mod-tlsopt-powerpc.c} |    8 +--
 sysdeps/powerpc/powerpc64/tls-macros.h             |    6 +--
 sysdeps/powerpc/tst-tlsopt-powerpc.c               |   44 +-------------------
 5 files changed, 24 insertions(+), 53 deletions(-)
 copy sysdeps/powerpc/{tst-tlsopt-powerpc.c => mod-tlsopt-powerpc.c} (90%)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]