Skip to content

fix/allsyms - #19593

Open
hitHuang wants to merge 4 commits into
apache:masterfrom
hitHuang:fix/allsyms
Open

fix/allsyms#19593
hitHuang wants to merge 4 commits into
apache:masterfrom
hitHuang:fix/allsyms

Conversation

@hitHuang

@hitHuang hitHuang commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Summary

CONFIG_ALLSYMS doesn't even link under CONFIG_BUILD_PROTECTED/CONFIG_BUILD_KERNEL: g_allsyms/g_nallsyms only exist in the kernel image, but symtab_allsyms.c referencing them is built into user-mode libc.a too. Once that's fixed and you actually try backtraces, three more bugs show up: user-mode addresses get matched against unrelated kernel symbols, symbol sizes are garbage under CONFIG_SYMTAB_ORDEREDBYNAME, and a bunch of assembly-only entry points (exception/boot code) never resolve to a name because they were never marked STT_FUNC. This PR fixes all four.

Impact

Touches libs/libc/symtab/symtab_allsyms.c and a few risc-v assembly boot/exception files. No new Kconfig, no API changes, nothing changes unless CONFIG_ALLSYMS=y.

Testing

All of the below is rv-virt:knsh with CONFIG_ALLSYMS, CONFIG_SYSTEM_DUMPSTACK, CONFIG_FRAME_POINTER, and CONFIG_SCHED_BACKTRACE turned on by hand, unless noted otherwise. Also checked on pnsh, and regression-tested nsh to make sure nothing else broke.

Problem 0: link failure under BUILD_PROTECTED/BUILD_KERNEL

rv-virt:knsh:

LD:  /home/huang/workspace/nuttx-fork/apps/bin/init
riscv64-unknown-elf-ld -e _start --oformat elf32-littleriscv -e _start -Bstatic -T/home/huang/workspace/nuttx-fork/apps/import/scripts/gnu-elf.ld  -L/home/huang/workspace/nuttx-fork/apps/import/libs -L "/home/huang/workspace/toolchain/riscv64-unknown-elf-toolsuite-1.0.6/bin/../lib/gcc/riscv64-unknown-elf/13.2.0/rv32imafdc_zicsr/ilp32d" /home/huang/workspace/nuttx-fork/apps/import/startup/crt0.o  nsh_main.c.home.huang.workspace.nuttx-fork.apps.system.nsh.o --start-group -lmm -lc -lproxies -lgcc /home/huang/workspace/nuttx-fork/apps/libapps.a /home/huang/workspace/toolchain/riscv64-unknown-elf-toolsuite-1.0.6/bin/../lib/gcc/riscv64-unknown-elf/13.2.0/rv32imafdc_zicsr/ilp32d/libgcc.a --end-group -o  /home/huang/workspace/nuttx-fork/apps/bin/init
riscv64-unknown-elf-ld: /home/huang/workspace/nuttx-fork/apps/import/libs/libc.a(symtab_allsyms.o): in function `allsyms_lookup':
/home/huang/workspace/nuttx-fork/nuttx/libs/libc/symtab/symtab_allsyms.c:57:(.text.allsyms_findbyname+0x28): undefined reference to `g_nallsyms'
riscv64-unknown-elf-ld: /home/huang/workspace/nuttx-fork/nuttx/libs/libc/symtab/symtab_allsyms.c:57:(.text.allsyms_findbyname+0x2c): undefined reference to `g_nallsyms'
riscv64-unknown-elf-ld: /home/huang/workspace/nuttx-fork/nuttx/libs/libc/symtab/symtab_allsyms.c:57:(.text.allsyms_findbyname+0x30): undefined reference to `g_allsyms'
riscv64-unknown-elf-ld: /home/huang/workspace/nuttx-fork/nuttx/libs/libc/symtab/symtab_allsyms.c:57:(.text.allsyms_findbyname+0x38): undefined reference to `g_allsyms'
riscv64-unknown-elf-ld: /home/huang/workspace/nuttx-fork/nuttx/libs/libc/symtab/symtab_allsyms.c:64:(.text.allsyms_findbyname+0x46): undefined reference to `g_allsyms'
riscv64-unknown-elf-ld: /home/huang/workspace/nuttx-fork/nuttx/libs/libc/symtab/symtab_allsyms.c:61:(.text.allsyms_findbyvalue+0x28): undefined reference to `g_nallsyms'
riscv64-unknown-elf-ld: /home/huang/workspace/nuttx-fork/nuttx/libs/libc/symtab/symtab_allsyms.c:61:(.text.allsyms_findbyvalue+0x2c): undefined reference to `g_nallsyms'
riscv64-unknown-elf-ld: /home/huang/workspace/nuttx-fork/nuttx/libs/libc/symtab/symtab_allsyms.c:61:(.text.allsyms_findbyvalue+0x30): undefined reference to `g_allsyms'
riscv64-unknown-elf-ld: /home/huang/workspace/nuttx-fork/nuttx/libs/libc/symtab/symtab_allsyms.c:61:(.text.allsyms_findbyvalue+0x38): undefined reference to `g_allsyms'
riscv64-unknown-elf-ld: /home/huang/workspace/nuttx-fork/nuttx/libs/libc/symtab/symtab_allsyms.c:64:(.text.allsyms_findbyvalue+0x46): undefined reference to `g_allsyms'
make[3]: *** [/home/huang/workspace/nuttx-fork/apps/Application.mk:308: /home/huang/workspace/nuttx-fork/apps/bin/init] Error 1
make[3]: Leaving directory '/home/huang/workspace/nuttx-fork/apps/system/nsh'
make[2]: *** [Makefile:55: /home/huang/workspace/nuttx-fork/apps/system/nsh_install] Error 2
make[2]: Leaving directory '/home/huang/workspace/nuttx-fork/apps'
make[1]: *** [Makefile:101: .import] Error 2
make[1]: Leaving directory '/home/huang/workspace/nuttx-fork/apps'
make: *** [Makefile:108: import] Error 2

rv-virt:pnsh, same underlying problem:

huang@ubuntu:~/workspace/nuttx-fork/nuttx$ make -j$(nproc)
Create version.h
LN: platform/board to /home/huang/workspace/nuttx-fork/apps/platform/dummy
Register: hello
Register: nsh
Register: sh
Register: dumpstack
Register: dd
Register: ostest
Register: getprime
CC:  getopt.c fpu.c:57:8: warning: #warning "FPU test not built; Only available in the flat build (CONFIG_BUILD_FLAT)" [-Wcpp]
   57 | #      warning "FPU test not built; Only available in the flat build (CONFIG_BUILD_FLAT)"
      |        ^~~~~~~
riscv64-unknown-elf-ld: /home/huang/workspace/nuttx-fork/nuttx/staging//libc.a(symtab_allsyms.o): in function `allsyms_lookup':
/home/huang/workspace/nuttx-fork/nuttx/libs/libc/symtab/symtab_allsyms.c:57:(.text.allsyms_findbyname+0x28): undefined reference to `g_nallsyms'
riscv64-unknown-elf-ld: /home/huang/workspace/nuttx-fork/nuttx/libs/libc/symtab/symtab_allsyms.c:57:(.text.allsyms_findbyname+0x2c): undefined reference to `g_nallsyms'
riscv64-unknown-elf-ld: /home/huang/workspace/nuttx-fork/nuttx/libs/libc/symtab/symtab_allsyms.c:57:(.text.allsyms_findbyname+0x30): undefined reference to `g_allsyms'
riscv64-unknown-elf-ld: /home/huang/workspace/nuttx-fork/nuttx/libs/libc/symtab/symtab_allsyms.c:57:(.text.allsyms_findbyname+0x38): undefined reference to `g_allsyms'
riscv64-unknown-elf-ld: /home/huang/workspace/nuttx-fork/nuttx/libs/libc/symtab/symtab_allsyms.c:64:(.text.allsyms_findbyname+0x46): undefined reference to `g_allsyms'
riscv64-unknown-elf-ld: /home/huang/workspace/nuttx-fork/nuttx/libs/libc/symtab/symtab_allsyms.c:61:(.text.allsyms_findbyvalue+0x28): undefined reference to `g_nallsyms'
riscv64-unknown-elf-ld: /home/huang/workspace/nuttx-fork/nuttx/libs/libc/symtab/symtab_allsyms.c:61:(.text.allsyms_findbyvalue+0x2c): undefined reference to `g_nallsyms'
riscv64-unknown-elf-ld: /home/huang/workspace/nuttx-fork/nuttx/libs/libc/symtab/symtab_allsyms.c:61:(.text.allsyms_findbyvalue+0x30): undefined reference to `g_allsyms'
riscv64-unknown-elf-ld: /home/huang/workspace/nuttx-fork/nuttx/libs/libc/symtab/symtab_allsyms.c:61:(.text.allsyms_findbyvalue+0x38): undefined reference to `g_allsyms'
riscv64-unknown-elf-ld: /home/huang/workspace/nuttx-fork/nuttx/libs/libc/symtab/symtab_allsyms.c:64:(.text.allsyms_findbyvalue+0x46): undefined reference to `g_allsyms'
make[1]: *** [Makefile:70: nuttx_user] Error 1
make: *** [tools/Unix.mk:558: nuttx] Error 2

Problems 1-3: after fixing the link error, boots but backtraces are wrong

Before fixing problems 1-3:

ABC
NuttShell (NSH) NuttX-13.0.0
nsh> dumpstack 0 10
[2830383448064000.001000] sched_dumpstack: backtrace:
[2856153251840000.001000] sched_dumpstack: [ 0] [<0x8020d79a>] up_idle+0xc/0xfffff976
[2873333121024000.001000] sched_dumpstack: [ 0] [<0x80201e4e>] nx_start+0x25e/0x260
[2890512990208000.001000] sched_dumpstack: [ 0] [<0x802011d6>] qemu_rv_start+0x72/0x1cc8a
[2911987826688000.001000] sched_dumpstack: [ 0] [<0x8020004a>] Unknown+0x8020004a/0x80207d2e
[2933462663168000.001000] sched_dumpstack: backtrace:
[2946347565056000.001000] sched_dumpstack: [ 1] [<0x8020d2b6>] up_switch_context+0x40/0x540
[2963527434240000.001000] sched_dumpstack: [ 1] [<0x8021980a>] nxsem_wait_slow+0x17a/0xfffef70a
[2989297238016000.001000] sched_dumpstack: [ 1] [<0x80208d8c>] nxsem_wait+0x8e/0xffffcf02
[3006477107200000.001000] sched_dumpstack: [ 1] [<0x80208db0>] nxsem_wait_uninterruptible+0x16/0xffffb9b0
[3027951943680000.001000] sched_dumpstack: [ 1] [<0x80203128>] work_thread+0x122/0xffffff12
[3032246910976000.001000] sched_dumpstack: [ 1] [<0x80202a90>] nxtask_start+0x4c/0x18216
[3040836845568000.001000] sched_dumpstack: backtrace:
[3045131812864000.001000] sched_dumpstack: [ 3] [<0x8020d2b6>] up_switch_context+0x40/0x540
[3049426780160000.001000] sched_dumpstack: [ 3] [<0x8021a068>] nxsig_clockwait+0x122/0xfffeaa64
[3058016714752000.001000] sched_dumpstack: [ 3] [<0x8021a7be>] nxsig_timedwait+0xd4/0xfffff828
[3066606649344000.001000] sched_dumpstack: [ 3] [<0x8021944a>] nxsched_waitpid+0xc0/0xffffff32
[3070901616640000.001000] sched_dumpstack: [ 3] [<0x80219480>] waitpid+0xe/0xfffe9902
[3075196583936000.001000] sched_dumpstack: [ 3] [<0x802089fc>] STUB_waitpid+0x12/0x1a
[3079491551232000.001000] sched_dumpstack: [ 3] [<0x80201496>] dispatch_syscall+0x46/0x18864
[3083786518528000.001000] sched_dumpstack: [ 3] [<0x802001aa>] Unknown+0x802001aa/0x80207d2e
[3092376453120000.001000] sched_dumpstack: [ 3] [<0xc000c99a>] register_blockdriver+0x3fded564/0xffff3322
[3096671420416000.001000] sched_dumpstack: [ 3] [<0xc0005f42>] register_blockdriver+0x3fde6b0c/0xffff3322
[3105261355008000.001000] sched_dumpstack: [ 3] [<0xc0003662>] register_blockdriver+0x3fde422c/0xffff3322
[3109556322304000.001000] sched_dumpstack: [ 3] [<0xc00045d2>] register_blockdriver+0x3fde519c/0xffff3322
[3118146256896000.001000] sched_dumpstack: [ 3] [<0xc0004672>] register_blockdriver+0x3fde523c/0xffff3322
[3122441224192000.001000] sched_dumpstack: [ 3] [<0xc0003036>] register_blockdriver+0x3fde3c00/0xffff3322
[3131031158784000.001000] sched_dumpstack: [ 3] [<0xc0002e56>] register_blockdriver+0x3fde3a20/0xffff3322
[3139621093376000.001000] sched_dumpstack: [ 3] [<0xc0000b4a>] register_blockdriver+0x3fde1714/0xffff3322
[3148211027968000.001000] sched_dumpstack: [ 3] [<0xc0000b08>] register_blockdriver+0x3fde16d2/0xffff3322
[3156800962560000.001000] sched_dumpstack: backtrace:
[3161095929856000.001000] sched_dumpstack: [ 4] [<0x80219652>] sched_backtrace+0x30/0x3b40
[3165390897152000.001000] sched_dumpstack: [ 4] [<0x802085f8>] STUB_sched_backtrace+0x14/0x1c
[3173980831744000.001000] sched_dumpstack: [ 4] [<0x80201496>] dispatch_syscall+0x46/0x18864
[3178275799040000.001000] sched_dumpstack: [ 4] [<0x802001aa>] Unknown+0x802001aa/0x80207d2e
[3186865733632000.001000] sched_dumpstack: [ 4] [<0xc00016ac>] register_blockdriver+0x3fde2276/0xffff3322
[3191160700928000.001000] sched_dumpstack: [ 4] [<0xc00007dc>] register_blockdriver+0x3fde13a6/0xffff3322
[3199750635520000.001000] sched_dumpstack: [ 4] [<0xc000076c>] register_blockdriver+0x3fde1336/0xffff3322
[3204045602816000.001000] sched_dumpstack: [ 4] [<0xc000072e>] register_blockdriver+0x3fde12f8/0xffff3322

Three problems here:

  1. Under BUILD_KERNEL/BUILD_PROTECTED the kernel's symbol table can't see user-mode symbols at all, so user-stack addresses get matched against whatever unrelated kernel symbol happens to be nearby (register_blockdriver-style output), which is worse than useless.
  2. Symbol sizes are garbage, e.g. nxsem_wait_uninterruptible+0x16/0xffffb9b0.
  3. Some assembly-only symbols don't resolve at all (Unknown+0x8020004a/0x80207d2e).

Problem 1 doesn't really have a fix beyond "don't lie": there's no way to resolve a user-mode symbol from kernel context, so the right behavior is just falling back to the raw address instead of guessing:

ABC
NuttShell (NSH) NuttX-13.0.0
nsh> dumpstack 0 10
[133143986176000.001000] sched_dumpstack: backtrace:
[150323855360000.001000] sched_dumpstack: [ 0] [<0x8020d79e>] up_idle+0xc/0xfffff976
[158913789952000.001000] sched_dumpstack: [ 0] [<0x80201e4e>] nx_start+0x25e/0x260
[167503724544000.001000] sched_dumpstack: [ 0] [<0x802011d6>] qemu_rv_start+0x72/0x1cc8e
[171798691840000.001000] sched_dumpstack: [ 0] [<0x8020004a>] 0x8020004a
[176093659136000.001000] sched_dumpstack: backtrace:
[180388626432000.001000] sched_dumpstack: [ 1] [<0x8020d2ba>] up_switch_context+0x40/0x540
[184683593728000.001000] sched_dumpstack: [ 1] [<0x8021980e>] nxsem_wait_slow+0x17a/0xfffef706
[193273528320000.001000] sched_dumpstack: [ 1] [<0x80208d8c>] nxsem_wait+0x8e/0xffffcf02
[201863462912000.001000] sched_dumpstack: [ 1] [<0x80208db0>] nxsem_wait_uninterruptible+0x16/0xffffb9b0
[210453397504000.001000] sched_dumpstack: [ 1] [<0x80203128>] work_thread+0x122/0xffffff12
[214748364800000.001000] sched_dumpstack: [ 1] [<0x80202a90>] nxtask_start+0x4c/0x1821a
[223338299392000.001000] sched_dumpstack: backtrace:
[227633266688000.001000] sched_dumpstack: [ 3] [<0x8020d2ba>] up_switch_context+0x40/0x540
[236223201280000.001000] sched_dumpstack: [ 3] [<0x8021a06c>] nxsig_clockwait+0x122/0xfffeaa60
[244813135872000.001000] sched_dumpstack: [ 3] [<0x8021a7c2>] nxsig_timedwait+0xd4/0xfffff828
[249108103168000.001000] sched_dumpstack: [ 3] [<0x8021944e>] nxsched_waitpid+0xc0/0xffffff32
[253403070464000.001000] sched_dumpstack: [ 3] [<0x80219484>] waitpid+0xe/0xfffe98fe
[261993005056000.001000] sched_dumpstack: [ 3] [<0x802089fc>] STUB_waitpid+0x12/0x1a
[266287972352000.001000] sched_dumpstack: [ 3] [<0x80201496>] dispatch_syscall+0x46/0x18868
[270582939648000.001000] sched_dumpstack: [ 3] [<0x802001aa>] 0x802001aa
[274877906944000.001000] sched_dumpstack: [ 3] [<0xc000c99a>] 0xc000c99a
[283467841536000.001000] sched_dumpstack: [ 3] [<0xc0005f42>] 0xc0005f42
[287762808832000.001000] sched_dumpstack: [ 3] [<0xc0003662>] 0xc0003662
[292057776128000.001000] sched_dumpstack: [ 3] [<0xc00045d2>] 0xc00045d2
[296352743424000.001000] sched_dumpstack: [ 3] [<0xc0004672>] 0xc0004672
[300647710720000.001000] sched_dumpstack: [ 3] [<0xc0003036>] 0xc0003036
[304942678016000.001000] sched_dumpstack: [ 3] [<0xc0002e56>] 0xc0002e56
[313532612608000.001000] sched_dumpstack: [ 3] [<0xc0000b4a>] 0xc0000b4a
[322122547200000.001000] sched_dumpstack: [ 3] [<0xc0000b08>] 0xc0000b08
[326417514496000.001000] sched_dumpstack: backtrace:
[330712481792000.001000] sched_dumpstack: [ 4] [<0x80219656>] sched_backtrace+0x30/0x3b40
[335007449088000.001000] sched_dumpstack: [ 4] [<0x802085f8>] STUB_sched_backtrace+0x14/0x1c
[343597383680000.001000] sched_dumpstack: [ 4] [<0x80201496>] dispatch_syscall+0x46/0x18868
[347892350976000.001000] sched_dumpstack: [ 4] [<0x802001aa>] 0x802001aa
[352187318272000.001000] sched_dumpstack: [ 4] [<0xc00016ac>] 0xc00016ac
[360777252864000.001000] sched_dumpstack: [ 4] [<0xc00007dc>] 0xc00007dc
[360777252864000.001000] sched_dumpstack: [ 4] [<0xc000076c>] 0xc000076c
[369367187456000.001000] sched_dumpstack: [ 4] [<0xc000072e>] 0xc000072e

After fixing problem 2, symbol sizes are correct:

ABC
NuttShell (NSH) NuttX-13.0.0
nsh> ps
  TID   PID  PPID PRI POLICY   TYPE    NPX STATE    EVENT     SIGMASK            STACK COMMAND
    0     0     0   0 FIFO     Kthread   - Ready              0000000000000000 0003040 Idle_Task
    1     0     0 100 RR       Kthread   - Waiting  Semaphore 0000000000000000 0004016 lpwork 0x80602330 0x80602380
    3     3     0 100 RR       Task      - Running            0000000000000000 0003008 /system/bin/init
nsh> dumpstack 0 10
[4054449127424000.001000] sched_dumpstack: backtrace:
[4071628996608000.001000] sched_dumpstack: [ 0] [<0x8020d80c>] up_idle+0xc/0x14
[4080218931200000.001000] sched_dumpstack: [ 0] [<0x80201e4e>] nx_start+0x25e/0x260
[4084513898496000.001000] sched_dumpstack: [ 0] [<0x802011d6>] qemu_rv_start+0x72/0x98
[4088808865792000.001000] sched_dumpstack: [ 0] [<0x8020004a>] 0x8020004a
[4093103833088000.001000] sched_dumpstack: backtrace:
[4097398800384000.001000] sched_dumpstack: [ 1] [<0x8020d328>] up_switch_context+0x40/0x42
[4101693767680000.001000] sched_dumpstack: [ 1] [<0x8021987c>] nxsem_wait_slow+0x17a/0x1a2
[4105988734976000.001000] sched_dumpstack: [ 1] [<0x80208d8c>] nxsem_wait+0x8e/0x9c
[4110283702272000.001000] sched_dumpstack: [ 1] [<0x80208db0>] nxsem_wait_uninterruptible+0x16/0x26
[4118873636864000.001000] sched_dumpstack: [ 1] [<0x80203128>] work_thread+0x122/0x166
[4123168604160000.001000] sched_dumpstack: [ 1] [<0x80202a90>] nxtask_start+0x4c/0x64
[4131758538752000.001000] sched_dumpstack: backtrace:
[4136053506048000.001000] sched_dumpstack: [ 3] [<0x8020d328>] up_switch_context+0x40/0x42
[4140348473344000.001000] sched_dumpstack: [ 3] [<0x8021a0da>] nxsig_clockwait+0x122/0x1ea
[4148938407936000.001000] sched_dumpstack: [ 3] [<0x8021a830>] nxsig_timedwait+0xd4/0x140
[4153233375232000.001000] sched_dumpstack: [ 3] [<0x802194bc>] nxsched_waitpid+0xc0/0xe8
[4157528342528000.001000] sched_dumpstack: [ 3] [<0x802194f2>] waitpid+0xe/0x38
[4166118277120000.001000] sched_dumpstack: [ 3] [<0x802089fc>] STUB_waitpid+0x12/0x1a
[4170413244416000.001000] sched_dumpstack: [ 3] [<0x80201496>] dispatch_syscall+0x46/0x62
[4174708211712000.001000] sched_dumpstack: [ 3] [<0x802001aa>] 0x802001aa
[4179003179008000.001000] sched_dumpstack: [ 3] [<0xc000c99a>] 0xc000c99a
[4183298146304000.001000] sched_dumpstack: [ 3] [<0xc0005f42>] 0xc0005f42
[4187593113600000.001000] sched_dumpstack: [ 3] [<0xc0003662>] 0xc0003662
[4191888080896000.001000] sched_dumpstack: [ 3] [<0xc00045d2>] 0xc00045d2
[4196183048192000.001000] sched_dumpstack: [ 3] [<0xc0004672>] 0xc0004672
[4200478015488000.001000] sched_dumpstack: [ 3] [<0xc0003036>] 0xc0003036
[4204772982784000.001000] sched_dumpstack: [ 3] [<0xc0002e56>] 0xc0002e56
[4213362917376000.001000] sched_dumpstack: [ 3] [<0xc0000b4a>] 0xc0000b4a
[4217657884672000.001000] sched_dumpstack: [ 3] [<0xc0000b08>] 0xc0000b08
[4226247819264000.001000] sched_dumpstack: backtrace:
[4230542786560000.001000] sched_dumpstack: [ 4] [<0x802196c4>] sched_backtrace+0x30/0x6e
[4234837753856000.001000] sched_dumpstack: [ 4] [<0x802085f8>] STUB_sched_backtrace+0x14/0x1c
[4243427688448000.001000] sched_dumpstack: [ 4] [<0x80201496>] dispatch_syscall+0x46/0x62
[4247722655744000.001000] sched_dumpstack: [ 4] [<0x802001aa>] 0x802001aa
[4252017623040000.001000] sched_dumpstack: [ 4] [<0xc00016ac>] 0xc00016ac
[4256312590336000.001000] sched_dumpstack: [ 4] [<0xc00007dc>] 0xc00007dc
[4260607557632000.001000] sched_dumpstack: [ 4] [<0xc000076c>] 0xc000076c
[4264902524928000.001000] sched_dumpstack: [ 4] [<0xc000072e>] 0xc000072e

After fixing problem 3, assembly-only symbols resolve correctly too (__start, exception_common):

ABC
NuttShell (NSH) NuttX-13.0.0
nsh> dumpstack 0 10
[3508988280832000.001000] sched_dumpstack: backtrace:
[3551937953792000.001000] sched_dumpstack: [ 0] [<0x8020d814>] up_idle+0xc/0x14
[3599182594048000.001000] sched_dumpstack: [ 0] [<0x80201e56>] nx_start+0x25e/0x260
[3646427234304000.001000] sched_dumpstack: [ 0] [<0x802011d6>] qemu_rv_start+0x72/0x98
[3672197038080000.001000] sched_dumpstack: [ 0] [<0x8020004a>] __start+0x4a/0x100
[3672197038080000.001000] sched_dumpstack: backtrace:
[3672197038080000.001000] sched_dumpstack: [ 1] [<0x8020d330>] up_switch_context+0x40/0x42
[3672197038080000.001000] sched_dumpstack: [ 1] [<0x802198ba>] nxsem_wait_slow+0x17a/0x1a2
[3672197038080000.001000] sched_dumpstack: [ 1] [<0x80208d94>] nxsem_wait+0x8e/0x9c
[3672197038080000.001000] sched_dumpstack: [ 1] [<0x80208db8>] nxsem_wait_uninterruptible+0x16/0x26
[3710851743744000.001000] sched_dumpstack: [ 1] [<0x80203130>] work_thread+0x122/0x166
[3715146711040000.001000] sched_dumpstack: [ 1] [<0x80202a98>] nxtask_start+0x4c/0x64
[3723736645632000.001000] sched_dumpstack: backtrace:
[3728031612928000.001000] sched_dumpstack: [ 3] [<0x8020d330>] up_switch_context+0x40/0x42
[3732326580224000.001000] sched_dumpstack: [ 3] [<0x8021a118>] nxsig_clockwait+0x122/0x1ea
[3745211482112000.001000] sched_dumpstack: [ 3] [<0x8021a86e>] nxsig_timedwait+0xd4/0x140
[3749506449408000.001000] sched_dumpstack: [ 3] [<0x802194fa>] nxsched_waitpid+0xc0/0xe8
[3753801416704000.001000] sched_dumpstack: [ 3] [<0x80219530>] waitpid+0xe/0x38
[3762391351296000.001000] sched_dumpstack: [ 3] [<0x80208a04>] STUB_waitpid+0x12/0x1a
[3766686318592000.001000] sched_dumpstack: [ 3] [<0x80201496>] dispatch_syscall+0x46/0x62
[3770981285888000.001000] sched_dumpstack: [ 3] [<0x802001aa>] exception_common+0xaa/0xb4
[3779571220480000.001000] sched_dumpstack: [ 3] [<0xc000c99a>] 0xc000c99a
[3783866187776000.001000] sched_dumpstack: [ 3] [<0xc0005f42>] 0xc0005f42
[3788161155072000.001000] sched_dumpstack: [ 3] [<0xc0003662>] 0xc0003662
[3796751089664000.001000] sched_dumpstack: [ 3] [<0xc00045d2>] 0xc00045d2
[3801046056960000.001000] sched_dumpstack: [ 3] [<0xc0004672>] 0xc0004672
[3805341024256000.001000] sched_dumpstack: [ 3] [<0xc0003036>] 0xc0003036
[3813930958848000.001000] sched_dumpstack: [ 3] [<0xc0002e56>] 0xc0002e56
[3822520893440000.001000] sched_dumpstack: [ 3] [<0xc0000b4a>] 0xc0000b4a
[3835405795328000.001000] sched_dumpstack: [ 3] [<0xc0000b08>] 0xc0000b08
[3843995729920000.001000] sched_dumpstack: backtrace:
[3848290697216000.001000] sched_dumpstack: [ 4] [<0x80219702>] sched_backtrace+0x30/0x6e
[3852585664512000.001000] sched_dumpstack: [ 4] [<0x80208600>] STUB_sched_backtrace+0x14/0x1c
[3861175599104000.001000] sched_dumpstack: [ 4] [<0x80201496>] dispatch_syscall+0x46/0x62
[3865470566400000.001000] sched_dumpstack: [ 4] [<0x802001aa>] exception_common+0xaa/0xb4
[3874060500992000.001000] sched_dumpstack: [ 4] [<0xc00016ac>] 0xc00016ac
[3878355468288000.001000] sched_dumpstack: [ 4] [<0xc00007dc>] 0xc00007dc
[3882650435584000.001000] sched_dumpstack: [ 4] [<0xc000076c>] 0xc000076c
[3886945402880000.001000] sched_dumpstack: [ 4] [<0xc000072e>] 0xc000072e

Known follow-up (not fixed here)

g_symtab and g_allsyms have nothing to do with each other — different data, different generators — but symtab_findbyname()/symtab_findbyvalue() only get compiled once, so both tables end up forced to share the same global ordering assumption (CONFIG_SYMTAB_ORDEREDBYNAME/CONFIG_SYMTAB_ORDEREDBYVALUE).

@github-actions github-actions Bot added Arch: risc-v Issues related to the RISC-V (32-bit or 64-bit) architecture Area: OS Components OS Components issues Size: M The size of the change in this PR is medium labels Aug 1, 2026
g_allsyms/g_nallsyms only exist in the kernel image, but symtab_allsyms.c
is unconditionally built into libc.a, so user-mode code under
CONFIG_BUILD_PROTECTED/CONFIG_BUILD_KERNEL fails to link.

Guard the affected code so user-mode libc.a no longer references these
kernel-only symbols.

Signed-off-by: liang.huang <liang.huang@houmo.ai>
Assisted-by: Claude Code:claude-sonnet-5
allsyms_findbyvalue()/%pS printed a bogus name/offset for addresses
outside the real symbol table's coverage, due to the boundary sentinels
being matchable as real symbols.

Compute the high sentinel from the actual symbol range and treat a
sentinel match as "not found".

Signed-off-by: liang.huang <liang.huang@houmo.ai>
Assisted-by: Claude Code:claude-sonnet-5
allsyms_lookup() derived a symbol's size from the physically next table
entry, assuming address order. Under CONFIG_SYMTAB_ORDEREDBYNAME the
table is sorted by name instead, producing a huge bogus size in
%pS/backtrace output.

Scan for the closest larger address instead of relying on table order.

Signed-off-by: liang.huang <liang.huang@houmo.ai>
Assisted-by: Claude Code:claude-sonnet-5
Several risc-v assembly labels are .global but untyped, so mkallsyms.py
(which only collects STT_FUNC symbols) silently drops them from the
ALLSYMS table, and backtraces/%pS print raw addresses instead of names.

Add .type <name>, function to the affected labels, matching existing
convention elsewhere in the tree.

Signed-off-by: liang.huang <liang.huang@houmo.ai>
Assisted-by: Claude Code:claude-sonnet-5
@github-actions

github-actions Bot commented Aug 1, 2026

Copy link
Copy Markdown

MemBrowse Memory Report

No memory changes detected for:

Comment thread libs/libc/symtab/symtab_allsyms.c
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Arch: risc-v Issues related to the RISC-V (32-bit or 64-bit) architecture Area: OS Components OS Components issues Size: M The size of the change in this PR is medium

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants