Uros Bizjak <ubiz...@gmail.com> writes: > On Sat, Jan 17, 2015 at 7:36 PM, Rainer Orth > <r...@cebitec.uni-bielefeld.de> wrote: >> Uros Bizjak <ubiz...@gmail.com> writes: >> >>> On Sat, Jan 17, 2015 at 4:18 PM, Rainer Orth >>> <r...@cebitec.uni-bielefeld.de> wrote: >>> >>>>> 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. >>>> >>>> this patch broke Solaris 10/x86 bootstrap: when building amd64 >>>> crtbegin.o, gas complains >>> >>> Looks like config.gcc error for Solaris x86, amd64 target should not >>> include i386/gnu-user.h but i386/gnu-user64.h >> >> The target is i386-pc-solaris2.10, which includes i386/sysv4.h. Only >> the amd64 crtbegin.o is affected, the i386 one is fine. > > Please split sysv4-common.h out of i386/sysv4.h, similar to how > i386/gnu-user.h and gnu-user-common.h are split.
This would break Solaris/SPARC (there's no sparc/sysv4-common.h), and only works on Linux/x86 by accident: * CRT_GET_RFIB_DATA is only defined in i386/gnu-user.h there, but that file is only included for 32-bit-only configurations, not 32-bit-default ones (--enable-targets=all). In the latter case, the macro is not defined for the 32-bit multilib, where it should be. * CRT_GET_RFIB_DATA is only used in libgcc/crtstuff.c and libgcc/unwind-dw2-fde-dip.c (which already has a workaround for it being incorrectly defined for 64-bit Solaris/x86). IMO, the definition has no business living in gcc/config/i386 at all, but should move to libgcc/config instead (together with the one in frv/frv.h). That being probably too intrusive at this stage, I think the best workaround for now is to simply wrap the definition in i386/syv4.h (which is Solaris/x86-only anyway) in __i386__. Rainer -- ----------------------------------------------------------------------------- Rainer Orth, Center for Biotechnology, Bielefeld University