This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [testsuite, i386] Require -static support in gcc.dg/pie-static-[12].c (PR testsuite/81793)
Hi Rainer,
> On 28 Aug 2017, at 16:33, Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> wrote:
>
> Hi Mike,
>
>> On Aug 12, 2017, at 9:03 AM, Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> wrote:
>>>
>>> The new gcc.dg/pie-static-[12].c testcases FAIL on several systems:
>>>
>>> * Solaris 11.4 has PIE support, but lacks static libc, libm
>>>
>>> * Linux without the static libc, libm installed
>>>
>>> The following patch fixes this by requiring both PIE and -static
>>> support.
>>>
>>> Tested with the appropriate runtest invocations on i386-pc-solaris2.11
>>> and x86_64-pc-linux-gnu (where the tests come up as UNSUPPORTED; I don't
>>> have a Linux system with static libc/libm installed), installed on
>>> mainline.
>>>
>>> The tests also FAIL on Darwin/x86_64, but the failure mode is different:
>>> for -static, the executable is linked with -lcrt0.o (done this way to
>>> locate crt0.o in the linker's search path, cf. config/darwin.h
>>> (STARTFILE_SPEC)), but neither on Darwin 11 nor on Darwin 17 could I
>>> find where crt0.o would come from, so I've left this part alone.
>>
>> darwin isn't exactly like other systems. There is no crt0.o and static is
>> more special than you can imagine. There was once 1 program that did a
>> static link, but one was exceptionally special.
>>
>> Indeed, one way to implement it would be as a request option, and then
>> ignore the parts that don't make sense for the platform. In that case,
>> -static-libgcc and friends might be the end semantics.
>
> All this begs the question why on earth would darwin.h (STARTFILE_SPEC)
> accept -static and try to link libcrt0.o it the latter doesn't exist.
>
> However, I've just found that the bundled clang on Darwin 11 does the
> same (and fails in the same way: "ld: library not found for -lcrt0.o”).
I think it’s because when one is bringing up the system, then one does (or at least used to) have a static libc/crt set.
Thus the compiler did/does need to support it for that case. I’ve not done a kernel bootstrap since ≈ Darwin9 era, so things might have changed and this could be history leaking through.
Iain
Iain Sandoe
CodeSourcery / Mentor Embedded / Siemens