On Sun, 23 Jun 2024 13:18:19 GMT, Jan Kratochvil <jkratoch...@openjdk.org> 
wrote:

>> fastdebug:
>> 
>> 
>> # A fatal error has been detected by the Java Runtime Environment:
>> #
>> #  Internal Error 
>> (/home/azul/azul/openjdk-git/src/hotspot/share/runtime/handles.inline.hpp:77),
>>  pid=878152, tid=878158
>> #  assert(_thread->is_in_live_stack((address)this)) failed: not on stack?
>> #
>> # JRE version:  (24.0) (fastdebug build )
>> # Java VM: OpenJDK 64-Bit Server VM (fastdebug 
>> 24-internal-adhoc.azul.openjdk-git, mixed mode, tiered, compressed oops, 
>> compressed class ptrs, g1 gc, linux-amd64)
>> # Problematic frame:
>> # V  [libjvm.so+0x1d20658]  constantPoolHandle::constantPoolHandle(Thread*, 
>> ConstantPool*)+0x268
>
> Jan Kratochvil has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Implement address-use-after-return

JDK is sometimes verifying `StackObj` is really on stack. And JDK does that by 
comparing pointer to these objects against bottom+top stack boundaries. The 
problem is that when ASAN does `detect_stack_use_after_return` it will allocate 
some autovariables (stack variables) in a separately allocated memory block, 
off the stack. This memory they call "fake stack". Then JDK fails its 
assertions `StackObj` is on stack. So we can teach JDK about "fake stack" than 
the pointers in "fake stack" are also in fact in the stack. That's all.

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

PR Comment: https://git.openjdk.org/jdk/pull/19843#issuecomment-2185906263

Reply via email to