[PATCH 1/1] sandbox: add symbol _init for RISC-V compilation

Heinrich Schuchardt xypron.glpk at gmx.de
Fri May 14 10:49:30 CEST 2021


On 5/14/21 1:56 AM, Simon Glass wrote:
> Hi Heinrich,
>
> On Thu, 13 May 2021 at 08:46, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>>
>> The sandbox does not build on RISC-V when _init is not defined. Errors like
>> the following were observed. Which function was referred to depended on the
>> configuration.
>>
>>      /usr/bin/ld: common/built-in.o: in function `parse_stream_outer':
>>      /common/cli_hush.c:3175: undefined reference to `_init'
>>      collect2: error: ld returned 1 exit status
>>      make: *** [Makefile:1726: u-boot] Error 1
>>
>>      /usr/bin/ld: common/built-in.o: in function `bootdelay_process':
>>      common/autoboot.c:335: undefined reference to `_init'
>>      collect2: error: ld returned 1 exit status
>>      make: *** [Makefile:1726: u-boot] Error 1
>>
>> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
>> ---
>>   arch/sandbox/cpu/u-boot.lds | 2 ++
>>   1 file changed, 2 insertions(+)
>
> Is this a toolchain bug?

Possibly. _init and _fini are obsolete in current GCC versions.

I saw this both with GCC 10 and GCC 11. So we should work around it.

I did not hit the problem when compiling a simple freestanding program
for RISC-V with GCC.

Best regards

Heinrich

>
> Reviewed-by: Simon Glass <sjg at chromium.org>
>
>
>>
>> diff --git a/arch/sandbox/cpu/u-boot.lds b/arch/sandbox/cpu/u-boot.lds
>> index a1f509c9ab..d9e7ffcea3 100644
>> --- a/arch/sandbox/cpu/u-boot.lds
>> +++ b/arch/sandbox/cpu/u-boot.lds
>> @@ -9,6 +9,8 @@ SECTIONS
>>   {
>>
>>          . = ALIGN(4);
>> +       /* RISC-V GCC wants this dummy symbol */
>> +       _init = .;
>>          .u_boot_list : {
>>                  KEEP(*(SORT(.u_boot_list*)));
>>          }
>> --
>> 2.30.2
>>



More information about the U-Boot mailing list