Hi,

The patch removes EBX usage from asm code used in libgcc/crtstuff.c
It is safe now, but potentially buggy when glibc is rebuild with GCC
5.0 as EBX is not GOT register any more.

x86 bootstrap, make check passed.

Is it ok?

Evgeny

2014-12-28  Evgeny Stupachenko  <evstu...@gmail.com>

        * gnu-user.h (CRT_GET_RFIB_DATA): Remove EBX register usage.
        * config/i386/sysv4.h (CRT_GET_RFIB_DATA): Ditto.

diff --git a/gcc/config/i386/gnu-user.h b/gcc/config/i386/gnu-user.h
index e1163c9..965673b 100644
--- a/gcc/config/i386/gnu-user.h
+++ b/gcc/config/i386/gnu-user.h
@@ -131,13 +131,6 @@ along with GCC; see the file COPYING3.  If not see

 /* Used by crtstuff.c to initialize the base of data-relative relocations.
    These are GOT relative on x86, so return the pic register.  */
-#ifdef __PIC__
-#define CRT_GET_RFIB_DATA(BASE)                        \
-  {                                            \
-    register void *ebx_ __asm__("ebx");                \
-    BASE = ebx_;                               \
-  }
-#else
 #define CRT_GET_RFIB_DATA(BASE)
         \
   __asm__ ("call\t.LPR%=\n"                                            \
           ".LPR%=:\n\t"                                                \
@@ -148,7 +141,6 @@ along with GCC; see the file COPYING3.  If not see
           "add{l}\t{$_GLOBAL_OFFSET_TABLE_+[.-.LPR%=],%0"              \
                   "|%0,_GLOBAL_OFFSET_TABLE_+(.-.LPR%=)}"              \
           : "=d"(BASE))
-#endif

 #ifdef TARGET_LIBC_PROVIDES_SSP
 /* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
diff --git a/gcc/config/i386/sysv4.h b/gcc/config/i386/sysv4.h
index 011b228..5167485 100644
--- a/gcc/config/i386/sysv4.h
+++ b/gcc/config/i386/sysv4.h
@@ -52,13 +52,6 @@ along with GCC; see the file COPYING3.  If not see

 /* Used by crtstuff.c to initialize the base of data-relative relocations.
    These are GOT relative on x86, so return the pic register.  */
-#ifdef __PIC__
-#define CRT_GET_RFIB_DATA(BASE)                        \
-  {                                            \
-    register void *ebx_ __asm__("ebx");                \
-    BASE = ebx_;                               \
-  }
-#else
 #define CRT_GET_RFIB_DATA(BASE)
         \
   __asm__ ("call\t.LPR%=\n"                                            \
           ".LPR%=:\n\t"                                                \
@@ -69,4 +62,3 @@ along with GCC; see the file COPYING3.  If not see
           "add{l}\t{$_GLOBAL_OFFSET_TABLE_+[.-.LPR%=],%0"              \
                   "|%0,_GLOBAL_OFFSET_TABLE_+(.-.LPR%=)}"              \
           : "=d"(BASE))
-#endif

Reply via email to