On Mon, Dec 29, 2014 at 4:29 PM, Evgeny Stupachenko <evstu...@gmail.com> wrote: > Missed path in ChangeLog: > > 2014-12-28 Evgeny Stupachenko <evstu...@gmail.com> > > * config/i386/gnu-user.h (CRT_GET_RFIB_DATA): Remove EBX register > usage. > * config/i386/sysv4.h (CRT_GET_RFIB_DATA): Ditto.
Looks OK, but I'd like to ask Jakub (CC'd) about glibc impact before the patch is approved. Uros. > > On Sun, Dec 28, 2014 at 7:46 PM, Evgeny Stupachenko <evstu...@gmail.com> > wrote: >> 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