RFR: 8294211: Zero: Decode arch-specific error context if possible [v2]

Thomas Stuefe stuefe at openjdk.org
Thu Sep 22 19:16:17 UTC 2022


On Thu, 22 Sep 2022 19:06:35 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:

>> After POSIX signal refactorings, Zero error handling had "regressed" a bit: Zero always gets `NULL` as `pc` in error handling code, and thus it fails with SEGV at pc=0x0. We can do better by implementing context decoding where possible.
>> 
>> Unfortunately, this introduces some arch-specific code in Zero code. The arch-specific code is copy-pasted (with inline definitions, if needed) from the relevant `os_linux_*.cpp` files. The unimplemented arches would still report the same confusing `hs_err`-s. We can emulate (and thus test) the generic behavior using new diagnostic VM option.
>> 
>> This reverts parts of [JDK-8259392](https://bugs.openjdk.org/browse/JDK-8259392).
>> 
>> Sample test:
>> 
>> 
>> import java.lang.reflect.*;
>> import sun.misc.Unsafe;
>> 
>> public class Crash {
>>   public static void main(String... args) throws Exception {
>>     Field f = Unsafe.class.getDeclaredField("theUnsafe");
>>     f.setAccessible(true);
>>     Unsafe u = (Unsafe) f.get(null);
>>     u.getInt(42); // accesing via broken ptr
>>   }
>> }
>> 
>> 
>> Linux x86_64 Zero fastdebug crash currently:
>> 
>> 
>> # A fatal error has been detected by the Java Runtime Environment:
>> #
>> #  SIGSEGV (0xb) at pc=0x0000000000000000, pid=538793, tid=538794
>> #
>> ...
>> # (no native frame info)
>> ...
>> siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x000000000000002a
>> 
>> 
>> Linux x86_64 Zero fastdebug crash with this patch:
>> 
>> 
>> #
>> # A fatal error has been detected by the Java Runtime Environment:
>> #
>> #  SIGSEGV (0xb) at pc=0x00007fbbbf08b584, pid=520119, tid=520120
>> #
>> ...
>> # Problematic frame:
>> # V  [libjvm.so+0xcbe584]  Unsafe_GetInt+0xe4
>> ....
>> siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x000000000000002a
>> 
>> 
>> Linux x86_64 Zero fastdebug crash with this patch and `-XX:-DecodeErrorContext`:
>> 
>> 
>> #
>> # A fatal error has been detected by the Java Runtime Environment:
>> #
>> #  SIGSEGV (0xb) at pc=0x0000000000000000, pid=520268, tid=520269
>> #
>> ...
>> # Problematic frame:
>> # C  0x0000000000000000
>> ...
>> siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x000000000000002a
>> 
>> 
>> Additional testing:
>>  - [x] Linux x86_64 Zero fastdebug eyeballing crash logs
>>  - [ ] Linux x86_64 Zero fastdebug, `tier1`
>>  - [x] Linux {x86_64, x86_32, aarch64, arm, riscv64, s390x, ppc64le, ppc64be} Zero fastdebug builds
>
> Aleksey Shipilev has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Style nits

LGTM.

BTW, if you want to test error handling, you don't have to use Unsafe put, you can just use -XX:ErrorHandlerTest=number, e.g. 15 should give you a Segfault I believe. Only works in debug VMs though.

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

Marked as reviewed by stuefe (Reviewer).

PR: https://git.openjdk.org/jdk/pull/10397


More information about the hotspot-dev mailing list