Message ID | 20150319103457.GF28603@bubble.grove.modra.org |
---|---|
State | New |
Headers | show |
On 03/19/2015 06:34 AM, Alan Modra wrote: > Found when writing a testcase for the powerpc __tls_get_addr > optimization. > > In bc0cdc498 the configure check for HAVE_ASM_PPC_REL16 was removed > on the grounds that the minimum binutils supports rel16 relocs. This > is true, but not all references to HAVE_ASM_PPC_REL16 in the sources > were removed. > > * config.h.in: Remove HAVE_ASM_PPC_REL16. > * sysdeps/powerpc/powerpc32/tls-macros.h: Remove HAVE_ASM_PPC_REL16 > and false branch of conditional. > * sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S: > Likewise. LGTM. Alan, Please feel free to checkin this kind of obvious stuff, just mark your subject [COMMITTED] or something such that when we troll patchwork we can mark it done. c. > diff --git a/config.h.in b/config.h.in > index a1ae478..711ed08 100644 > --- a/config.h.in > +++ b/config.h.in > @@ -151,9 +151,6 @@ > /* Define if inlined system calls are available. */ > #undef HAVE_INLINED_SYSCALLS > > -/* Define if your assembler and linker support R_PPC_REL16* relocs. */ > -#undef HAVE_ASM_PPC_REL16 > - > /* Define if your compiler defaults to -msecure-plt mode on ppc. */ > #undef HAVE_PPC_SECURE_PLT > > diff --git a/sysdeps/powerpc/powerpc32/tls-macros.h b/sysdeps/powerpc/powerpc32/tls-macros.h > index 0df0814..ee0eac4 100644 > --- a/sysdeps/powerpc/powerpc32/tls-macros.h > +++ b/sysdeps/powerpc/powerpc32/tls-macros.h > @@ -1,6 +1,5 @@ > /* Include sysdeps/powerpc/tls-macros.h for __TLS_CALL_CLOBBERS */ > #include_next "tls-macros.h" > -#include "config.h" > > /* PowerPC32 Local Exec TLS access. */ > #define TLS_LE(x) \ > @@ -10,8 +9,7 @@ > __result; }) > > /* PowerPC32 Initial Exec TLS access. */ > -#ifdef HAVE_ASM_PPC_REL16 > -# define TLS_IE(x) \ > +#define TLS_IE(x) \ > ({ int *__result; \ > asm ("bcl 20,31,1f\n1:\t" \ > "mflr %0\n\t" \ > @@ -22,21 +20,9 @@ > : "=b" (__result) : \ > : "lr"); \ > __result; }) > -#else > -# define TLS_IE(x) \ > - ({ int *__result; \ > - asm ("bl _GLOBAL_OFFSET_TABLE_@local-4\n\t" \ > - "mflr %0\n\t" \ > - "lwz %0," #x "@got@tprel(%0)\n\t" \ > - "add %0,%0," #x "@tls" \ > - : "=b" (__result) : \ > - : "lr"); \ > - __result; }) > -#endif > > /* PowerPC32 Local Dynamic TLS access. */ > -#ifdef HAVE_ASM_PPC_REL16 > -# define TLS_LD(x) \ > +#define TLS_LD(x) \ > ({ int *__result; \ > asm ("bcl 20,31,1f\n1:\t" \ > "mflr 3\n\t" \ > @@ -48,22 +34,9 @@ > : "=r" (__result) : \ > : "3", __TLS_CALL_CLOBBERS); \ > __result; }) > -#else > -# define TLS_LD(x) \ > - ({ int *__result; \ > - asm ("bl _GLOBAL_OFFSET_TABLE_@local-4\n\t" \ > - "mflr 3\n\t" \ > - "addi 3,3," #x "@got@tlsld\n\t" \ > - "bl __tls_get_addr@plt\n\t" \ > - "addi %0,3," #x "@dtprel" \ > - : "=r" (__result) : \ > - : "3", __TLS_CALL_CLOBBERS); \ > - __result; }) > -#endif > > /* PowerPC32 General Dynamic TLS access. */ > -#ifdef HAVE_ASM_PPC_REL16 > -# define TLS_GD(x) \ > +#define TLS_GD(x) \ > ({ register int *__result __asm__ ("r3"); \ > asm ("bcl 20,31,1f\n1:\t" \ > "mflr 3\n\t" \ > @@ -74,14 +47,3 @@ > : "=r" (__result) : \ > : __TLS_CALL_CLOBBERS); \ > __result; }) > -#else > -# define TLS_GD(x) \ > - ({ register int *__result __asm__ ("r3"); \ > - asm ("bl _GLOBAL_OFFSET_TABLE_@local-4\n\t" \ > - "mflr 3\n\t" \ > - "addi 3,3," #x "@got@tlsgd\n\t" \ > - "bl __tls_get_addr@plt" \ > - : "=r" (__result) : \ > - : __TLS_CALL_CLOBBERS); \ > - __result; }) > -#endif > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S > index 7924514..d2681bd 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S > @@ -301,14 +301,9 @@ ENTRY(__CONTEXT_FUNC_NAME) > > # ifdef PIC > mflr r8 > -# ifdef HAVE_ASM_PPC_REL16 > SETUP_GOT_ACCESS(r7,got_label) > addis r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@ha > addi r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@l > -# else > - bl _GLOBAL_OFFSET_TABLE_@local-4 > - mflr r7 > -# endif > mtlr r8 > # ifdef SHARED > lwz r7,_rtld_global_ro@got(r7) >
On Fri, Mar 20, 2015 at 11:42:29AM -0400, Carlos O'Donell wrote: > On 03/19/2015 06:34 AM, Alan Modra wrote: > > Found when writing a testcase for the powerpc __tls_get_addr > > optimization. > > > > In bc0cdc498 the configure check for HAVE_ASM_PPC_REL16 was removed > > on the grounds that the minimum binutils supports rel16 relocs. This > > is true, but not all references to HAVE_ASM_PPC_REL16 in the sources > > were removed. > > > > * config.h.in: Remove HAVE_ASM_PPC_REL16. > > * sysdeps/powerpc/powerpc32/tls-macros.h: Remove HAVE_ASM_PPC_REL16 > > and false branch of conditional. > > * sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S: > > Likewise. > > LGTM. Alan, Please feel free to checkin this kind of obvious stuff, > just mark your subject [COMMITTED] or something such that when we troll > patchwork we can mark it done. Thanks, now committed.
diff --git a/config.h.in b/config.h.in index a1ae478..711ed08 100644 --- a/config.h.in +++ b/config.h.in @@ -151,9 +151,6 @@ /* Define if inlined system calls are available. */ #undef HAVE_INLINED_SYSCALLS -/* Define if your assembler and linker support R_PPC_REL16* relocs. */ -#undef HAVE_ASM_PPC_REL16 - /* Define if your compiler defaults to -msecure-plt mode on ppc. */ #undef HAVE_PPC_SECURE_PLT diff --git a/sysdeps/powerpc/powerpc32/tls-macros.h b/sysdeps/powerpc/powerpc32/tls-macros.h index 0df0814..ee0eac4 100644 --- a/sysdeps/powerpc/powerpc32/tls-macros.h +++ b/sysdeps/powerpc/powerpc32/tls-macros.h @@ -1,6 +1,5 @@ /* Include sysdeps/powerpc/tls-macros.h for __TLS_CALL_CLOBBERS */ #include_next "tls-macros.h" -#include "config.h" /* PowerPC32 Local Exec TLS access. */ #define TLS_LE(x) \ @@ -10,8 +9,7 @@ __result; }) /* PowerPC32 Initial Exec TLS access. */ -#ifdef HAVE_ASM_PPC_REL16 -# define TLS_IE(x) \ +#define TLS_IE(x) \ ({ int *__result; \ asm ("bcl 20,31,1f\n1:\t" \ "mflr %0\n\t" \ @@ -22,21 +20,9 @@ : "=b" (__result) : \ : "lr"); \ __result; }) -#else -# define TLS_IE(x) \ - ({ int *__result; \ - asm ("bl _GLOBAL_OFFSET_TABLE_@local-4\n\t" \ - "mflr %0\n\t" \ - "lwz %0," #x "@got@tprel(%0)\n\t" \ - "add %0,%0," #x "@tls" \ - : "=b" (__result) : \ - : "lr"); \ - __result; }) -#endif /* PowerPC32 Local Dynamic TLS access. */ -#ifdef HAVE_ASM_PPC_REL16 -# define TLS_LD(x) \ +#define TLS_LD(x) \ ({ int *__result; \ asm ("bcl 20,31,1f\n1:\t" \ "mflr 3\n\t" \ @@ -48,22 +34,9 @@ : "=r" (__result) : \ : "3", __TLS_CALL_CLOBBERS); \ __result; }) -#else -# define TLS_LD(x) \ - ({ int *__result; \ - asm ("bl _GLOBAL_OFFSET_TABLE_@local-4\n\t" \ - "mflr 3\n\t" \ - "addi 3,3," #x "@got@tlsld\n\t" \ - "bl __tls_get_addr@plt\n\t" \ - "addi %0,3," #x "@dtprel" \ - : "=r" (__result) : \ - : "3", __TLS_CALL_CLOBBERS); \ - __result; }) -#endif /* PowerPC32 General Dynamic TLS access. */ -#ifdef HAVE_ASM_PPC_REL16 -# define TLS_GD(x) \ +#define TLS_GD(x) \ ({ register int *__result __asm__ ("r3"); \ asm ("bcl 20,31,1f\n1:\t" \ "mflr 3\n\t" \ @@ -74,14 +47,3 @@ : "=r" (__result) : \ : __TLS_CALL_CLOBBERS); \ __result; }) -#else -# define TLS_GD(x) \ - ({ register int *__result __asm__ ("r3"); \ - asm ("bl _GLOBAL_OFFSET_TABLE_@local-4\n\t" \ - "mflr 3\n\t" \ - "addi 3,3," #x "@got@tlsgd\n\t" \ - "bl __tls_get_addr@plt" \ - : "=r" (__result) : \ - : __TLS_CALL_CLOBBERS); \ - __result; }) -#endif diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S index 7924514..d2681bd 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S @@ -301,14 +301,9 @@ ENTRY(__CONTEXT_FUNC_NAME) # ifdef PIC mflr r8 -# ifdef HAVE_ASM_PPC_REL16 SETUP_GOT_ACCESS(r7,got_label) addis r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@ha addi r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@l -# else - bl _GLOBAL_OFFSET_TABLE_@local-4 - mflr r7 -# endif mtlr r8 # ifdef SHARED lwz r7,_rtld_global_ro@got(r7)