This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]