On Mon, 13 Oct 2025 11:45:02 GMT, Ruben <[email protected]> wrote:
>> The C2 exception handler stub code is only a trampoline to the generated
>> exception handler blob. This change removes the extra step on the way to the
>> generated blob.
>>
>> According to some comments in the source code, the exception handler stub
>> code used to be patched upon deoptimization, however presumably these
>> comments are outdated as the patching upon deoptimization happens for
>> post-call NOPs only.
>
> Ruben has updated the pull request with a new target base due to a merge or a
> rebase. The pull request now contains 10 commits:
>
> - Merge from the main branch
> - Address review comments
> - Address review comments
> - Address review comments
> - The patch is contributed by @TheRealMDoerr
> - Offset the deoptimization handler entry point
>
> Change-Id: I596317ec6a364b341e4642636fa5cf08f87ed722
> - Revert "Ensure stub code is not adjacent to a call"
> - Ensure stub code is not adjacent to a call
> - Address review comments
> - 8365047: Remove exception handler stub code in C2
>
> The C2 exception handler stub code is only a trampoline to the
> generated exception handler blob. This change removes the extra
> step on the way to the generated blob.
>
> According to some comments in the source code, the exception handler
> stub code used to be patched upon deoptimization, however presumably
> these comments are outdated as the patching upon deoptimization happens
> for post-call NOPs only.
One probably related issue on linuxaarch64 while testing
"gc/epsilon/TestObjects.java":
SIGSEGV in caller_is_deopted:
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x5531b8] caller_is_deopted(JavaThread*)+0x2f8
(nativeInst_aarch64.hpp:536)
V [libjvm.so+0x555000] Runtime1::move_mirror_patching(JavaThread*)+0x20
(c1_Runtime1.cpp:1400)
v ~RuntimeStub::C1 Runtime load_mirror_patching_blob 0x0000f7cf038f316c
R0 =0x00000000f001cee8 is an oop: java.util.HashMap
{0x00000000f001cee8} - klass: 'java/util/HashMap' - flags: is_cloneable_fast
- ---- fields (total size 5 words):
- transient 'keySet' 'Ljava/util/Set;' @8 null (0x00000000)
- transient 'values' 'Ljava/util/Collection;' @12 null (0x00000000)
- transient 'table' '[Ljava/util/HashMap$Node;' @16 a
'java/util/HashMap$Node'[128] {0x00000000f001cf10} (0xf001cf10)
- transient 'entrySet' 'Ljava/util/Set;' @20 null (0x00000000)
- transient 'size' 'I' @24 60 (0x0000003c)
- transient 'modCount' 'I' @28 60 (0x0000003c)
- 'threshold' 'I' @32 96 (0x00000060)
- final 'loadFactor' 'F' @36 0.750000 (0x3f400000)
R1 =0x0000001fd503201f is an unknown value
R2 =0x0000f7cf03c5fffc is at entry_point+276 in (nmethod*)0x0000f7cf03c5fdc8
Compiled method (c1) 5966 2946 1 java.util.HashMap::values (25
bytes)
total in heap [0x0000f7cf03c5fdc8,0x0000f7cf03c60000] = 568
main code [0x0000f7cf03c5fec0,0x0000f7cf03c5ffd0] = 272
stub code [0x0000f7cf03c5ffd0,0x0000f7cf03c60000] = 48
mutable data [0x0000f7ced888a580,0x0000f7ced888a5c0] = 64
relocation [0x0000f7ced888a580,0x0000f7ced888a5b0] = 48
metadata [0x0000f7ced888a5b0,0x0000f7ced888a5c0] = 16
immutable data [0x0000f7ced888a500,0x0000f7ced888a578] = 120
dependencies [0x0000f7ced888a500,0x0000f7ced888a508] = 8
scopes pcs [0x0000f7ced888a508,0x0000f7ced888a558] = 80
scopes data [0x0000f7ced888a558,0x0000f7ced888a570] = 24
speculations [0x0000f7ced888a570,0x0000f7ced888a574] = 4
0x0000f7cf03c5fff8: 62 74 ef 17 ff ff ff 17
--------------------------------------------------------------------------------
0x0000f7cf03c5fff8: b 0x0000f7cf0383d180
0x0000f7cf03c5fffc: b 0x0000f7cf03c5fff8
--------------------------------------------------------------------------------
R3 =0x0000f7cf03817578 points into unknown readable memory: 0x0000000000000000
| 00 00 00 00 00 00 00 00
R4 =0x0000f7cf038f3040 points into unknown readable memory: 0x0000000100000008
| 08 00 00 00 01 00 00 00
R5 =0x0000f7cf14430000 points into unknown readable memory: 0x0706050403020100
| 00 01 02 03 04 05 06 07
R6 =0x0000000000000006 is an unknown value
R7 =0x000000000000016c is an unknown value
R8 =0x0000f7cf1484ca18 is pointing into the stack for thread: 0x0000f7cf100305c0
R9 =0x0 is null
R10=0x0000f7cf1484c140 is pointing into the stack for thread: 0x0000f7cf100305c0
R11=0x000000000000003d is an unknown value
R12=0x000000000000003c is an unknown value
R13=0x0000f7cf1484ca60 is pointing into the stack for thread: 0x0000f7cf100305c0
R14=0x0000000000000008 is an unknown value
R15=0x0000f7cf15ef5ed9: <offset 0x00000000015c5ed9> in
/testee-vm/lib/server/libjvm.so at 0x0000f7cf14930000
R16=0x0000000000000001 is an unknown value
R17=0x0000f7cf1602a6f4: __pthread_mutex_unlock+0x0000000000000000 in
/lib/aarch64-linux-gnu/libc.so.6 at 0x0000f7cf15fa0000
R18=0x0000f7cf15ef5e01: <offset 0x00000000015c5e01> in
/testee-vm/lib/server/libjvm.so at 0x0000f7cf14930000
R19=0x0000f7cf03c5fffc is at entry_point+276 in (nmethod*)0x0000f7cf03c5fdc8
Compiled method (c1) 5973 2946 1 java.util.HashMap::values (25
bytes)
total in heap [0x0000f7cf03c5fdc8,0x0000f7cf03c60000] = 568
main code [0x0000f7cf03c5fec0,0x0000f7cf03c5ffd0] = 272
stub code [0x0000f7cf03c5ffd0,0x0000f7cf03c60000] = 48
mutable data [0x0000f7ced888a580,0x0000f7ced888a5c0] = 64
relocation [0x0000f7ced888a580,0x0000f7ced888a5b0] = 48
metadata [0x0000f7ced888a5b0,0x0000f7ced888a5c0] = 16
immutable data [0x0000f7ced888a500,0x0000f7ced888a578] = 120
dependencies [0x0000f7ced888a500,0x0000f7ced888a508] = 8
scopes pcs [0x0000f7ced888a508,0x0000f7ced888a558] = 80
scopes data [0x0000f7ced888a558,0x0000f7ced888a570] = 24
speculations [0x0000f7ced888a570,0x0000f7ced888a574] = 4
0x0000f7cf03c5fff8: 62 74 ef 17 ff ff ff 17
--------------------------------------------------------------------------------
0x0000f7cf03c5fff8: b 0x0000f7cf0383d180
0x0000f7cf03c5fffc: b 0x0000f7cf03c5fff8
--------------------------------------------------------------------------------
R20=0x0000f7cf1484ca18 is pointing into the stack for thread: 0x0000f7cf100305c0
R21=0x0000f7cf1484ca98 is pointing into the stack for thread: 0x0000f7cf100305c0
R22=0x0000f7cf1484d380 is pointing into the stack for thread: 0x0000f7cf100305c0
R23=0x0000f7cf1484d370 is pointing into the stack for thread: 0x0000f7cf100305c0
R24=0x0000f7cf1484d470 is pointing into the stack for thread: 0x0000f7cf100305c0
R25=0x000000000000000a is an unknown value
R26=0x000000ff0052b2b8 is pointing into metadata
R27=0x0 is null
R28=0x0000f7cf100305c0 is a thread
R29=0x0000f7cf1484c9d0 is pointing into the stack for thread: 0x0000f7cf100305c0
R30=0x0000f7cf14e83058: <offset 0x0000000000553058> in
/testee-vm/lib/server/libjvm.so at 0x0000f7cf14930000
-------------
PR Comment: https://git.openjdk.org/jdk/pull/26678#issuecomment-3406595840