How to debug on leon3 with sis and gdb

Joel Sherrill joel at rtems.org
Sat May 22 15:57:11 UTC 2021


On Fri, May 21, 2021, 3:35 AM Jiri Gaisler <jiri at gaisler.se> wrote:

> Forgot copy the list.
>
> On 5/21/21 7:02 AM, Richi Dubey wrote:
>
> Hi,
>
> A test fails at the assert(sc==RTEMS_SUCCESSFUL) after a call to
> rtems_task_set_affinity.
>
> So, following the docs <https://devel.rtems.org/wiki/Debugging/sis>, I
> figured out where the break point should be set:
>
> ---------------------------------------------------
>
> $ ~/quick-start/rtems/6/bin/sparc-rtems6-sis -leon3 -m 4
> ~/sis-quick-start/src/rtems/build/sparc/leon3/testsuites/smptests/smpschedstrongapa01.exe
>
>  SIS - SPARC/RISCV instruction simulator 2.26,  copyright Jiri Gaisler 2020
>  Bug-reports to jiri at gaisler.se
>
>  LEON3 emulation enabled, 4 cpus online, delta 50 clocks
>
>  Loaded
> /home/richi/sis-quick-start/src/rtems/build/sparc/leon3/testsuites/smptests/smpschedstrongapa01.exe,
> entry 0x40000000
> cpu0> hi 10
> trace history length = 10
> cpu0> run
> Waking CPU 1
> Waking CPU 2
> Waking CPU 3
> assertion "sc == RTEMS_SUCCESSFUL" failed: file
> "../../../testsuites/smptests/smpschedstrongapa01/init.c", line 264,
> function: Init
> cpu 0 in error mode (tt = 0x80)
>    423950  4000f9e0:  91d02000   ta  0x0
> cpu0> hi
>    423922  40019d40:  90100018   mov  %i0, %o0
>    423923  4000f9e4:  82102001   mov  1, %g1
>    423924  4000f9e8:  84100008   mov  %o0, %g2
>    423925  4000f9ec:  86100009   mov  %o1, %g3
>    423926  4000f9f0:  91d02000   ta  0x0
>    423928  40000800:  a1480000   mov  %psr, %l0
>    423929  40000804:  2910003e   sethi  %hi(0x4000f800), %l4
>    423930  40000808:  81c521e0   jmp  %l4 + 0x1e0
>    423932  4000080c:  a6102080   mov  128, %l3
>    423933  4000f9e0:  91d02000   ta  0x0
> cpu0> reg
>
>  INS       LOCALS      OUTS     GLOBALS
>    0:  00000007   F3001FC6   00000007   00000000
>    1:  4002F008   4000F9F0   00000000   00000001
>    2:  40029CF8   4000F9F4   4002F008   00000007
>    3:  0000000A   00000080   40020400   4002F008
>    4:  00000073   4000F800   0000000E   00000000
>    5:  40029C00   00000000   00000004   00000000
>    6:  4002EEE0   4002A250   4002EE78   4002CD00
>    7:  40019D3C   4002CD00   4000EC80   00000000
>
>  psr: F3001FC6   wim: 00000008   tbr: 40000800   y: 00000000
>
>   pc: 4000F9E0 = 91D02000     ta  0x0
>  npc: 4000F9E4 = 82102001     mov  1, %g1
>  IU in error mode
>
> cpu0> quit
> ---------------------------------------------------
> So the breakpoint has to be set at the second last instruction at address
> 0x4000080c
>
> This is the wrong assumption. The program does not halt where the
> assertion fails, it prints the error message and exits the normal way. To
> stop execution right where the assertion is made, you should add a
> breakpoint at the line number:
>
> bre init.c:264
>
> Also, make sure you compile RTEMS without optimization, or single-stepping
> and debugging will be hard. I usually do this by removing all optimization
> flags in the OPTIMIZATION_FLAGS variable in the bsp .ini file before
> configuring with waf.
>

I think out of ancient habit, we think of -O0 but -Og should be a better
option. Enable all optimizations that do not negatively impact debugging.

--joel

>
>
>
> But when I try to debug this with gdb keeping the sis as remote target, it
> does not work:
>
> -------------------------
> $ ~/quick-start/rtems/6/bin/sparc-rtems6-gdb
> ~/sis-quick-start/src/rtems/build/sparc/leon3/testsuites/smptests/smpschedstrongapa01.exe
> GNU gdb (GDB) 10.1.90.20210409-git
> Copyright (C) 2021 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 "--host=x86_64-linux-gnu --target=sparc-rtems6".
> Type "show configuration" for configuration details.
> For bug reporting instructions, please see:
> <https://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
> /home/richi/sis-quick-start/src/rtems/build/sparc/leon3/testsuites/smptests/smpschedstrongapa01.exe...
> (gdb) tar sim -leon3
> Undefined target command: "sim -leon3".  Try "help target".
> (gdb) target extended-remote localhost:1234
> Remote debugging using localhost:1234
> 0x00000000 in ?? ()
> (gdb) load
> Loading section .text, size 0x218f0 lma 0x40000000
> Loading section .rtemsroset, size 0x90 lma 0x400218f0
> Loading section .data, size 0x530 lma 0x40029980
> Start address 0x40000000, load size 138928
> Transfer rate: 3083 KB/sec, 271 bytes/write.
> (gdb) bre 0x4000080c
>
> To break at a hex address in gdb, you need a pointer:
>
> bre *0x4000080c
>
>
> Function "0x4000080c" not defined.
> Make breakpoint pending on future shared library load? (y or [n]) y
> Breakpoint 1 (0x4000080c) pending.
> (gdb) run
> The program being debugged has been started already.
> Start it from the beginning? (y or n) y
> Starting program:
> /home/richi/sis-quick-start/src/rtems/build/sparc/leon3/testsuites/smptests/smpschedstrongapa01.exe
>
>
> Program received signal SIGTERM, Terminated.
> syscall () at ../../../cpukit/score/cpu/sparc/syscall.S:44
> 44 ta 0 ! syscall 1, halt with %g1,%g2,%g3 info
> (gdb)
>
> --------------------
>
> And the output on the other terminal is:
>
> ------------------------------------
> $ ~/quick-start/rtems/6/bin/sparc-rtems6-sis -leon3 -m 4 -gdb
>
>  SIS - SPARC/RISCV instruction simulator 2.26,  copyright Jiri Gaisler 2020
>  Bug-reports to jiri at gaisler.se
>
>  LEON3 emulation enabled, 4 cpus online, delta 50 clocks
>
> gdb: listening on port 1234 connected
> X40000000,0:#72
> Waking CPU 1
> Waking CPU 2
> Waking CPU 3
> assertion "sc == RTEMS_SUCCESSFUL" failed: file
> "../../../testsuites/smptests/smpschedstrongapa01/init.c", line 264,
> function: Init
> ------------------------------------
>
> So, is there a way I can debug this? Can I use si or ni, cause it is not
> working here when I tried it after 'load'. Also can I not set breakpoints
> at functions and then step continue till the function comes?
>
> Please advise.
> Thanks.
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20210522/f1b0a689/attachment.html>


More information about the devel mailing list