RFR: 8296469: Instrument VMError::report with reentrant iteration step for register and stack printing
Dean Long
dlong at openjdk.org
Tue Nov 8 20:26:20 UTC 2022
On Mon, 7 Nov 2022 13:24:26 GMT, Axel Boldt-Christmas <aboldtch at openjdk.org> wrote:
> 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)
It would be nice to know why register printing crashes, and if there is something we could do to make it more robust, like checking os::is_readable_pointer().
-------------
PR: https://git.openjdk.org/jdk/pull/11017
More information about the hotspot-dev
mailing list