[U-Boot] [PATCH] ARM: enable CONFIG_USE_PRIVATE_LIBGCC by default (re-send to the correct address)

Daniel Schwierzeck
2015-07-02T12:46:28Z

Am 02.07.2015 um 09:39 schrieb Wolfgang Denk:
> Dear Daniel,
>
> In message <55947A25.5020702@gmail.com> you wrote:
>>
>> CONFIG_USE_PRIVATE_LIBGCC should be removed. If an architecture supports
>> a private libgcc, then it should always use it. I think for U-Boot it is
>> better and safer to have all code under control instead of pulling in
>> external code from toolchains which are often somehow broken.
>
> This is the wrong approach. If a tool is broken, it should be
> reported, and fixed.
>
>> Speaking for MIPS we have boards with all combinations of Big
>> Endian/Little Endian and Hard Float/Soft Float. You need an own libgcc
>> binary for each FPU variant, but almost no toolchain supports this. Thus
>
> Why would that be the case? We do not use any floating point stuff in
> U-Boot...

the toolchain need to provide a binary libgcc.a for each combination of
Endianess and FPU variant otherwise you will get errors on linking
libgcc.a to U-Boot. U-Boot needs at least BE/SoftFloat and LE/SoftFloat.
But you only have multiple libgcc.a binaries in a dedicated multilib
toolchain. AFAIK only CodeSourcery and Yocto-based ELDK supports this.
Other pre-built toolchains usually support only one combination.
Furthermore toolchains like Yocto or kernel.org often use HardFloat by
default. For using buildman without CONFIG_USE_PRIVATE_LIBGCC you either
have to look for a suitable multilib toolchain or you have to fiddle
with multiple toolchains.

The simplest and safest way is to bundle the SoftFloat implementation of
the few GCC functions needed from libgcc in U-Boot. That code will be
compiled then in the correct Endianess dependend on the board config.

>
>
> I agree that there is the endianess issue - MIPS is currently the
> only architecture (I am aware of) that supports both BE and LE con-
> figurations. But this is a tool chain issue! You will need support
> from the tool chain not only for U-Boot (and the kernel), but also for
> user space. If your tool chain is nbroken, it needs fixing.
>
>> BTW: Linux kernel or Barebox always use a private libgcc.
>
> And what do you do about user space with such a broken tool chain?
>
> It does not help to paper over problems.
>
> Best regards,
>
> Wolfgang Denk
>

if you only target a specific board with U-Boot, OS, Userspace then you
can choose a toolchain with the right combination of Endianess, FPU
variant and libc.

The problem only occurs with buildman or bare-metal toolchains. The
toolchains do not need to be broken.

--
- Daniel