On Tue, 3 Nov 2026 13:46:18 GMT, Gui Cao <[email protected]> wrote:

> Hi, please condiser.
> SA currently computes continuation entry frame pointers using the raw 
> sizeof(ContinuationEntry), whereas HotSpot uses that size rounded up to two 
> machine words.
> With the current 64-bit layout, the raw size is 56 bytes and the aligned size 
> is 64 bytes. Consequently, SA computes frame pointers eight bytes too low on 
> x86-64, AArch64, and RISC-V64.
> 
> This change:
> - Aligns the size in the shared SA implementation, matching 
> ContinuationEntry::size().
> - Preserves RISC-V’s additional two-word FP adjustment.
> - Adds a cross-platform jtreg test that checks FP offsets using the attached 
> JVM’s type metadata and a synthetic entry address, without depending on 
> stack-walking behavior or virtual-thread timing.
> 
> Testing: github ci
> 
> ---------
> - [x] I confirm that I make this contribution in accordance with the [OpenJDK 
> Interim AI Policy](https://openjdk.org/legal/ai).

test/hotspot/jtreg/serviceability/sa/TestContinuationEntry.java line 61:

> 59:             long alignedSize = ((rawSize + alignment - 1) / alignment) * 
> alignment;
> 60:             String cpu = agent.getDebugger().getCPU();
> 61:             long expectedOffset = alignedSize + (cpu.equals("riscv64") ? 
> 2 * wordSize : 0);

It would be nice to have a comment on why the extra logic is needed for 
riscv64, and maybe reference the hotspot riscv64 ContinuationEntry::entry_fp() 
and/or the SA RISCV64ContinuationEntry.getEntryFP() code.

Also, it appears this PR is based on a revision of openjdk that does not yet 
include the fix to RISCV64ContinuationEntry.getEntryFP(). How is this test 
passing for you on riscv64?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/33695#discussion_r4457578042

Reply via email to