> On 29 Aug 2017, at 09:56, Rainer Orth <r...@cebitec.uni-bielefeld.de> wrote:

>>> 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.
> 
> I've now found the following statement:
> 
>       https://developer.apple.com/library/content/qa/qa1118/_index.html
> effectively declaring statically linked binaries unsupported (same as
> newer Solaris versions do, btw.).

It's been unsupported in user-space for as long as I recall … 

> I've now checked clang from Darwin 17 (Xcode 9 Beta) and it behaves the
> same.  I've found the following in clang sources
> 
>      } else {
>        if (Args.hasArg(options::OPT_static) ||
>            Args.hasArg(options::OPT_object) ||
>            Args.hasArg(options::OPT_preload)) {
>          CmdArgs.push_back("-lcrt0.o");
> 
> in lib/Driver/ToolChains/Darwin.cpp (Darwin::addStartObjectFileArgs).
> Several comments seem to indicate that most of this is just a
> straightforward translation of GCC's Darwin specs to C++ ;-)
> 
> Overall, mostly a historical artifact these days, it seems.

possibly, indeed - but ...
…  as noted above. when bringing the system up from scratch (i.e. bootstrapping 
the kernel, and associated stuff) there’s (or at least used to be) a phase 
where some tools _are_ built with static linkage - and part of that process 
involves building the crt0 + a statically-linkable libc.  That the code is 
still present in clang, suggests this could still be the case (although the 
‘just left in there by accident’ explanation is possible too, I will try to 
query someone for a definite answer).

In any case, we might as well just skip such tests (or xfail them) on Darwin, 
that’s a correct reflection of the user-land expectation.

Iain Sandoe
CodeSourcery / Mentor Embedded / Siemens



Reply via email to