[BUG] sandbox: './u-boot -l ' fails

Heinrich Schuchardt xypron.glpk at gmx.de
Mon Sep 28 15:30:39 CEST 2020


On 28.09.20 15:22, Simon Glass wrote:
> Hi Heinrich,
>
> On Mon, 28 Sep 2020 at 05:31, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>>
>> On 28.09.20 06:46, Heinrich Schuchardt wrote:
>>> Am 28. September 2020 06:24:38 MESZ schrieb Simon Glass <sjg at chromium.org>:
>>>> Hi Heinrich,
>>>>
>>>> On Sat, 19 Sep 2020 at 13:48, Heinrich Schuchardt <xypron.glpk at gmx.de>
>>>> wrote:
>>>>>
>>>>> Hello Simon,
>>>>>
>>>>> when I try to run ./u-boot -l the sandbox stalls. Shouldn't it run
>>>> out
>>>>> of the box?
>>>>>
>>>>> $ ./u-boot -l -d arch/sandbox/dts/sandbox.dtb
>>>>
>>>> For the record you should be able to use -D to get the same effect as
>>>> your -d above.
>>>>
>>>>>
>>>>> U-Boot 2020.10-rc4-00018-g21a10244f9-dirty (Sep 19 2020 - 19:55:39
>>>> +0200)
>>>>>
>>>>> Model: sandbox
>>>>> DRAM:  128 MiB
>>>>>
>>>>> Warning: host_lo MAC addresses don't match:
>>>>> Address in ROM is               26:4b:ca:6c:98:f4
>>>>> Address in environment is       00:00:11:22:33:44
>>>>>
>>>>> Warning: host_virbr0 MAC addresses don't match:
>>>>> Address in ROM is               ee:3e:c9:ce:1f:9c
>>>>> Address in environment is       00:00:11:22:33:45
>>>>>
>>>>> Warning: host_docker0 MAC addresses don't match:
>>>>> Address in ROM is               c2:85:07:7b:9a:18
>>>>> Address in environment is       00:00:11:22:33:46
>>>>> WDT:   Not found!
>>>>> MMC:
>>>>>
>>>>> No output after this point.
>>>>>
>>>>> The problem also exists with U-Boot v2020.07, v2019.10, v2018.11.
>>>>>
>>>>> CONFIG_SANDBOX_SDL=y
>>>>>
>>>>> SDL_InitSubSystem() never returns. It is looping somewhere in
>>>> U-Boot's
>>>>> __serial_getc(). I wonder how it gets there without returning from
>>>> the
>>>>> function.
>>>>>
>>>>> I compiled SDL2.cpp from
>>>>> https://gist.github.com/miguelmartin75/6946310#file-sdl2-cpp-L18
>>>>> with
>>>>>
>>>>> g++ SDL2.cpp -D_REENTRANT -I/usr/include/SDL2 -lSDL2 -lGL -o test
>>>>>
>>>>> and it runs fine showing an X11 windows with red background.
>>>>>
>>>>> So there seems to be no general problem with the SDL2 library.
>>>>
>>>> I hit this myself on another computer and it turned out to be that SDL
>>>> defined getc(), as does U-Boot, and things get confused. At least I
>>>> think it is getc.
>>>>
>>>> I hacked around with changing the name of getc (I think it was getc)
>>>> in U-Boot and the problem went away.
>>>
>>> Should we include a patched SDL2 with U-Boot for static linking?
>>>
>>
>> I cannot find a symbol getc() nor a reference to it in the SDL
>> repository. getc() is defined in stdio.h.
>>
>> Our getc() takes no argument, while the stdio one wants a FILE *.
>>
>> But changing the U-Boot definition to "int getc(void *)" does not solve
>> the issue.
>
> I just tried it on the machine where it doesn't work:
>
> $ gdb --args /tmp/b/sandbox/u-boot -l -D
> GNU gdb (Debian 9.2-1) 9.2
> Copyright (C) 2020 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.
> Type "show copying" and "show warranty" for details.
> This GDB was configured as "x86_64-linux-gnu".
> Type "show configuration" for configuration details.
> For bug reporting instructions, please see:
> <http://www.gnu.org/software/gdb/bugs/>.
> Find the GDB manual and other documentation resources online at:
>     <http://www.gnu.org/software/gdb/documentation/>.
>
> For help, type "help".
> Type "apropos word" to search for commands related to "word"...
> Reading symbols from /tmp/b/sandbox/u-boot...
> (gdb) br getc
> Breakpoint 1 at 0x5b6d6: getc. (2 locations)
> (gdb) r
> Starting program: /tmp/b/sandbox/u-boot -l -D
> [Thread debugging using libthread_db enabled]
> Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
>
>
> U-Boot 2020.10-rc5-00196-g0ac83d080a0 (Sep 28 2020 - 07:11:52 -0600)
>
> Model: sandbox
> DRAM:  128 MiB
>
> Warning: host_lo MAC addresses don't match:
> Address in ROM is 1a:34:9b:48:aa:53
> Address in environment is 00:00:11:22:33:44
> WDT:   Not found!
> MMC:
>
> Breakpoint 1, getc () at
> /home/sjg/cosarm/src/third_party/u-boot/files/common/console.c:414
> 414 if (!gd->have_console)
> (gdb) up
> #1  0x00007ffff7914d48 in ?? () from /lib/x86_64-linux-gnu/libX11.so.6
> (gdb)
>
>
> So it seems that it is libX11 causing the problem.
>
> I don't think the best fix is to remove getc() from that library,
> although I do wonder if it is a bug. Renaming the symbol in U-Boot
> with #define (only on sandbox) might be one option.
>
> Regards,
> Simon
>

#define getc _uboot_getc

is what I tried but it runs you into the trouble that many other symbols
contain the getc substring.

As we always try to use the same definition in U-Boot as in glibc we
should really replace getc() by another symbol, e.g. chget() so that we
avoid confusion.

Best regards

Heinrich



More information about the U-Boot mailing list