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

Simon Glass sjg at chromium.org
Mon Sep 28 15:22:28 CEST 2020


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


More information about the U-Boot mailing list