RFR: 8371093: Assert "section header string table should be loaded" failed on debug VM
Yasumasa Suenaga
ysuenaga at openjdk.org
Tue Nov 4 13:51:29 UTC 2025
On Sun, 2 Nov 2025 06:27:50 GMT, Yasumasa Suenaga <ysuenaga at openjdk.org> wrote:
> When the crash happens in the function in vDSO on Linux, native call stacks in hs_err log wouldn't be generated as following. See [hs_err log on JBS](https://bugs.openjdk.org/secure/attachment/116796/hs_err_pid4018.log) for details. Reproducer is also attached on JBS ([Test.java](https://bugs.openjdk.org/secure/attachment/116797/Test.java))
>
>
> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
> C [linux-vdso.so.1+0xe69]
> [error occurred during error reporting (printing native stack (with source info)), id 0xe0000000, Internal Error (/home/yasuenag/github-forked/jdk/src/hotspot/share/utilities/elfFile.cpp:536)]
>
> Retrying call stack printing without source information...
>
> [error occurred during error reporting (retry printing native stack (no source info)), id 0xb, SIGSEGV (0xb) at pc=0x00007fba8075f791]
>
>
> When I checked back trace on GDB, it failed at `assert`.
>
> #12 0x00007fba7e76bd00 in report_vm_error (file=file at entry=0x7fba7fed7b40 "/home/yasuenag/github-forked/jdk/src/hotspot/share/utilities/elfFile.cpp",
> line=line at entry=536, error_msg=error_msg at entry=0x7fba80019575 "assert(false) failed",
> detail_fmt=detail_fmt at entry=0x7fba7fed7bf0 "section header string table should be loaded")
> at /home/yasuenag/github-forked/jdk/src/hotspot/share/utilities/debug.cpp:196
> #13 0x00007fba7e886eb3 in ElfFile::read_section_header (this=0x7fba782a1650, name=0x7fba800367d4 ".gnu_debuglink", hdr=...)
> at /home/yasuenag/github-forked/jdk/src/hotspot/share/utilities/elfFile.cpp:536
> #14 ElfFile::read_debug_info (this=this at entry=0x7fba782a1650, debug_info=debug_info at entry=0x7fba7dd05150)
> at /home/yasuenag/github-forked/jdk/src/hotspot/share/utilities/elfFile.cpp:407
>
>
>
> (gdb) f 13
> #13 0x00007fba7e886eb3 in ElfFile::read_section_header (this=0x7fba782a1650, name=0x7fba800367d4 ".gnu_debuglink", hdr=...)
> at /home/yasuenag/github-forked/jdk/src/hotspot/share/utilities/elfFile.cpp:536
> 536 assert(false, "section header string table should be loaded");
>
>
> vDSO is not a regular ELF, so it should be skipped here.
vDSO is very special, it is a part of kernel, we can't find the .so file on lib directory (e.g. `/usr/lib64`).
The assertion mentioned this issue is caused by this behavior - `ElfDecorder` attemps to load souce information from ELF, but it wouldn't because vDSO file is not found. It should happen on vDSO because regular loaded ELFs should be located on file system (otherwise the process wouldn't load library of course).
vDSO name is specified in manpage, so we can skip vDSO only. Thus I think it does not need to add `else` for other files named with `vdso`.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/28102#issuecomment-3486093770
More information about the hotspot-dev
mailing list