RFR: 8296469: Instrument VMError::report with reentrant iteration step for register and stack printing

Axel Boldt-Christmas aboldtch at openjdk.org
Mon Nov 7 13:31:09 UTC 2022


Add reentrant step logic to VMError::report with an inner loop which enable the logic to recover at every step of the iteration.

Before this change, if printing one register/stack position crashes then no more registers/stack positions will be printed.

After this change even if the VM is unstable and some registers print_location crashes the hs_err printing will recover and keep attempting to print the rest of the registers or stack values.

Enables the following
```C++
REENTRANT_STEP_IF("printing register info", _verbose && _context && _thread && Universe::is_fully_initialized())
  os::print_register_info_header(st, _context);

  REENTRANT_LOOP_START(os::print_nth_register_info_max_index())
    // decode register contents if possible
    ResourceMark rm(_thread);
    os::print_nth_register_info(st, REENTRANT_ITERATION_STEP, _context);
  REENTRANT_LOOP_END

  st->cr();


Testing: tier 1 and compiled Linux-x64/aarch64, MacOS-x64/aarch64, Windows x64 and cross-compiled Linux-x86/riscv/arm/ppc/s390x (GHA and some local)

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

Commit messages:
 - Add os::print_register_info_header
 - VMError::report reentrant for register and stack print

Changes: https://git.openjdk.org/jdk/pull/11017/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=11017&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8296469
  Stats: 747 lines in 19 files changed: 477 ins; 123 del; 147 mod
  Patch: https://git.openjdk.org/jdk/pull/11017.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/11017/head:pull/11017

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


More information about the hotspot-dev mailing list