Proper way of replacing crt0.o/GCC search path for startup files

David Paterson
Mon May 18 10:42:00 GMT 2015

Hi Konrad,

I've done something similar, and used a customised linker script to
provide extra information (as well as the memory mapping for my
particular system).  The linker scrip I'm using has commands similar
to :

    INPUT(crti.o crtbegin.o crtend.o crtn.o)
    GROUP(-lmylib -lc -lstdc++ -lgcc)

and is invoked by using gcc -nostartfiles -Tmyscript.ld ... etc.

To me, this seemed the easiest way to include my crt0, rather than
modifying spec files.



On 15 May 2015 at 15:13, Schwarz, Konrad <> wrote:
>> -----Original Message-----
>> From: Nicholas Clifton []
>> > I have written an alternative crt0.o (the startup file placed at
>> the
>> > beginning of the executable) for a bare-metal system.
>> >
>> > For GCC to use this, it requires a new specs file.
>> Have you considered using --nostartfiles instead ?
> I think this would require getting the user to explicitly add
> <gcc-startup-dir>/crti.o and <gcc-startup-dir>/crtbegin.o, in addition
> to the special crt0.o, to the link, and seems more painful.
>> > I was unable to find precise documentation on how GCC searches for
>> > specs files and for startup files.  It seems like directories added
>> by
>> > -L are not searched for spec or startup files, for example.  (I.e.,
>> > my_crt0%o%s was not found by GCC, despite an appropriate -L
>> argument).
>> Have you tried using -B instead of -L ?
> -B seems to change a lot more things.
> In any case, thanks very much for your suggestions!
> Regards
> Konrad

More information about the Newlib mailing list