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

Aleksey Shipilev shade at openjdk.org
Mon Oct 17 10:17:22 UTC 2022


> 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
>  - [x] 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 with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains seven additional commits since the last revision:

 - Move argument block
 - Merge branch 'master' into JDK-8294211-zero-error-context
 - Merge branch 'master' into JDK-8294211-zero-error-context
 - Merge branch 'master' into JDK-8294211-zero-error-context
 - Merge branch 'master' into JDK-8294211-zero-error-context
 - Style nits
 - Fix

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/10397/files
  - new: https://git.openjdk.org/jdk/pull/10397/files/fe524d40..d9684abc

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=10397&range=04
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=10397&range=03-04

  Stats: 3281 lines in 92 files changed: 1783 ins; 877 del; 621 mod
  Patch: https://git.openjdk.org/jdk/pull/10397.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/10397/head:pull/10397

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


More information about the hotspot-dev mailing list