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

Reply via email to