On Mon, 22 Jun 2026 20:08:03 GMT, Chris Plummer <[email protected]> wrote:
>> `jhsdb jstack --mixed` would try to unwind all of native call frames. It >> will reach `_start()` (startup routine by glibc), but it couldn't on the JDK >> built by older glibc such as glibc-2.12 (used in devkit for Linux x86_64). >> >> Expected: >> >> 0x000055ad324dfadb main + 0x13b >> 0x00007f3df876c681 __libc_start_call_main + 0x81 >> 0x00007f3df876c798 __libc_start_main_alias_2 + 0x88 >> 0x000055ad324dfb79 _start + 0x25 >> >> >> Actual (no `_start` in call stacks): >> >> 0x000055ad324dfadb main + 0x13b >> 0x00007f3df876c681 __libc_start_call_main + 0x81 >> 0x00007f3df876c798 __libc_start_main_alias_2 + 0x88 >> >> >> Startup routine would be provided by crt1.o, and it would be linked into >> `java`. `_start()` in crt1.o by glibc-2.12 does not have Frame Description >> Entry (FDE) in DWARF. In DWARF parser in SA assumes native function has FDE, >> thus unwinder in SA would stop if it cannot find appropriate DWARF >> information. >> >> I saw the problem on `_start()` only so far. This is not critical, but same >> problem can happen on other places (functions / libraries). We cannot find >> caller frame from DWARF-less function of course, but we should show the >> frame even if it does not have DWARF. >> >> --------- >> - [x] I confirm that I make this contribution in accordance with the >> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai). > > src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/linux/amd64/LinuxAMD64CFrame.java > line 104: > >> 102: } >> 103: >> 104: senderFP = getSenderFP(senderFP); > > Why is this needed for ARM64, but not AARCH64? I assume you commented why this change is needed for AMD64 only. `senderFP` is needed by creating new `LinuxAMD64CFrame` at L120, so it have to be moved to here. In `LinuxAARCH64CFrame`, it has already been placed before where it is needed. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/31230#discussion_r3456308387
