i686: Fix test suite fails on build by gcc 5.0
Commit Message
Hi,
this patch fixes 3 make check fails on glibc 32bit built by gcc 5.0
due to EBX was enabled for allocation
(https://gcc.gnu.org/ml/gcc-patches/2014-10/msg00892.html).
Tests elf/tst-tls3, elf/tst-execstack-needed, elf/tst-execstack-prog
failed because EBX was used as PIC register.
ChangeLog:
2014-10-29 Andrew Senkevich <andrew.n.senkevich@gmail.com>
* sysdeps/i386/tls-macros.h (TLS_IE, TLS_LD, TLS_GD): Remove PIC case.
* sysdeps/unix/sysv/linux/i386/sysdep.h (check_consistency):
Keep define only if gcc version < 5.0
--
WBR,
Andrew
@@ -5,14 +5,6 @@
: "=r" (__l)); \
__l; })
-#ifdef PIC
-# define TLS_IE(x) \
- ({ int *__l; \
- asm ("movl %%gs:0,%0\n\t" \
- "subl " #x "@gottpoff(%%ebx),%0" \
- : "=r" (__l)); \
- __l; })
-#else
# define TLS_IE(x) \
({ int *__l, __b; \
asm ("call 1f\n\t" \
@@ -25,17 +17,7 @@
"subl " #x "@gottpoff(%%ebx),%0" \
: "=r" (__l), "=&b" (__b)); \
__l; })
-#endif
-#ifdef PIC
-# define TLS_LD(x) \
- ({ int *__l, __c, __d; \
- asm ("leal " #x "@tlsldm(%%ebx),%%eax\n\t" \
- "call ___tls_get_addr@plt\n\t" \
- "leal " #x "@dtpoff(%%eax), %%eax" \
- : "=a" (__l), "=&c" (__c), "=&d" (__d)); \
- __l; })
-#else
# define TLS_LD(x) \
({ int *__l, __b, __c, __d; \
asm ("call 1f\n\t" \
@@ -49,17 +31,7 @@
"leal " #x "@dtpoff(%%eax), %%eax" \
: "=a" (__l), "=&b" (__b), "=&c" (__c), "=&d" (__d)); \
__l; })
-#endif
-#ifdef PIC
-# define TLS_GD(x) \
- ({ int *__l, __c, __d; \
- asm ("leal " #x "@tlsgd(%%ebx),%%eax\n\t" \
- "call ___tls_get_addr@plt\n\t" \
- "nop" \
- : "=a" (__l), "=&c" (__c), "=&d" (__d)); \
- __l; })
-#else
# define TLS_GD(x) \
({ int *__l, __b, __c, __d; \
asm ("call 1f\n\t" \
@@ -73,4 +45,3 @@
"nop" \
: "=a" (__l), "=&b" (__b), "=&c" (__c), "=&d" (__d)); \
__l; })
-#endif
b/sysdeps/unix/sysv/linux/i386/sysdep.h
@@ -502,7 +502,7 @@ asm (".L__X'%ebx = 1\n\t"
#endif
/* Consistency check for position-independent code. */
-#ifdef __PIC__
+#if defined __PIC__ && !__GNUC_PREREQ (5,0)
# define check_consistency() \
({ int __res; \
__asm__ __volatile__ \