Need Help to Further Reduce bsp_specs

Chris Johns chrisj at rtems.org
Thu Dec 21 07:15:41 UTC 2017


On 21/12/17 5:47 pm, Sebastian Huber wrote:
> Hello,
> 
> we should try to understand better why the things are how they are currently.

Agreed.

> In Newlib we have this ctr0.c:
> 
> https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;a=blob;f=newlib/libc/sys/rtems/crt0.c;h=9778b985a180ba68990b40b6e4423aa970ca5ec7;hb=HEAD
> 
> 
> This is the default start file for the RTEMS GCC:
> 
> https://gcc.gnu.org/viewcvs/gcc/trunk/gcc/config/rtems.h?view=markup
> 
>     /*
>      * Dummy start/end specification to let linker work as
>      * needed by autoconf scripts using this compiler.
>      */
>     #undef STARTFILE_SPEC
>     #define STARTFILE_SPEC "crt0.o%s"
> 
> We use the bsp_specs to override this (we could also use -nostartfiles at the
> command line):
> 
>             %rename startfile old_startfile
> 
>             *startfile:
>             %{!qrtems: %(old_startfile)} \
>             %{!nostdlib: %{qrtems: crti.o%s crtbegin.o%s}}
> 
> Why do we define a STARTFILE_SPEC in GCC which we don't use for real applications?
> 

I good question. The gcc defaults should be focused on a user and the closer
this is to other platforms the better.

> The purpose of the ctr0.o seems to be to make the Autoconf stuff happy during
> GCC build, e.g. for libstdc++.

Do other build system tests, ie autoconf, require an installed BSP?

> One option would be to do this:
> 
> 1. Change STARTFILE_SPEC:
> 
> #undef STARTFILE_SPEC
> #define STARTFILE_SPEC "start.o%s crti.o%s crtbegin.o"
> 

What does a list mean?

> 2. Rename Newlib ctr0.o into start.o and do NOT install it. This way it is used
> only during GCC build to make the GCC Autoconf happy.

OK.

> 3. Provide start.o in all BSPs.
> 
> How do we deal with other Autoconf (or other link-time feature detection) stuff?
> This change could break all the third party library build scripts.

I do not think this can be avoided or we can never change what we have. I do not
like the use of -B on the gcc command line.

> We could install the Newlib crt0.o as fakestart.o and add a -qfakestart option,
> e.g. to use LDFLAGS += "-qfakestart"?

newlibstart.o or startstub.o?

> 
> Bonus work:
> 
> What this this for a stuff?
> 
>     /*
>      * Some targets do not set up LIB_SPECS, override it, here.
>      */
>     #define STD_LIB_SPEC "%{!shared:%{g*:-lg}
> %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}}"
> 
> The libg.a and libc.a are identical:
> 
> sha512sum /opt/rtems/5/sparc-rtems5/lib/lib[cg].a
> 6e19f30fde6fbd23e5af9060e8a76d7294b5f23677561770a26ae04c44c4fd920b45d4f42f3cde2ede1962bfbb0429b5d7ced89fe448340a5b4936fb716c7e6b 
> /opt/rtems/5/sparc-rtems5/lib/libc.a
> 6e19f30fde6fbd23e5af9060e8a76d7294b5f23677561770a26ae04c44c4fd920b45d4f42f3cde2ede1962bfbb0429b5d7ced89fe448340a5b4936fb716c7e6b 
> /opt/rtems/5/sparc-rtems5/lib/libg.a
> 

Your guess is as good as mine.

Chris


More information about the devel mailing list