RFR: 8371093: Assert "section header string table should be loaded" failed on debug VM

Johan Sjölen jsjolen at openjdk.org
Tue Nov 11 12:06:27 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.

Hi,

The actual issue here is that the vDSO file doesn't exist, so can't be opened, right? Then, we should instead check in `get_elf_file` whether the creation of the `ElfFile` succeeded instead. This should be done anyway, the `vDSO` issue is just a symptom of another bug.

I think that this new definition should be used instead, in `decoder_elf.cpp:104`.

```c++
ElfFile* ElfDecoder::get_elf_file(const char* filepath) {
  ElfFile* file;

  file = _opened_elf_files;
  while (file != nullptr) {
    if (file->same_elf_file(filepath)) {
      return file;
    }
    file = file->next();
  }

  file = new (std::nothrow) ElfFile(filepath);
  if (file == nullptr) {
    return nullptr;
  } else if (file->get_status() != NullDecoder::no_error) {
    return nullptr;
  }


  if (_opened_elf_files != nullptr) {
    file->set_next(_opened_elf_files);
  }
  _opened_elf_files = file;

  return file;
}


What do you think?

-------------

PR Review: https://git.openjdk.org/jdk/pull/28102#pullrequestreview-3447747095


More information about the hotspot-dev mailing list