RFR: 8296469: Instrument VMError::report with reentrant iteration step for register and stack printing [v9]
Erik Österlund
eosterlund at openjdk.org
Mon Mar 6 15:04:37 UTC 2023
On Mon, 20 Feb 2023 07:15:23 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)
>
> Axel Boldt-Christmas has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 15 commits:
>
> - Merge remote-tracking branch 'upstream_jdk/master' into vmerror_report_register_stack_reentrant
> - Add test
> - Fix and strengthen print_stack_location
> - Missed variable rename
> - Copyright
> - Rework logic and use continuation state for reattempts
> - Merge remote-tracking branch 'upstream_jdk/master' into vmerror_report_register_stack_reentrant
> - Restructure os::print_register_info interface
> - Code syle and line length
> - Merge Fix
> - ... and 5 more: https://git.openjdk.org/jdk/compare/2009dc2b...2e12b4a5
Just a naming nit, otherwise it looks good.
src/hotspot/share/utilities/vmError.cpp line 175:
> 173: static bool check_stack_headroom(Thread* thread,
> 174: size_t headroom) {
> 175: static const address stack_top = thread != nullptr
We typically call "stack_top "stack_base", and "stack_bottom" we call "stack_end".
-------------
Marked as reviewed by eosterlund (Reviewer).
PR: https://git.openjdk.org/jdk/pull/11017
More information about the hotspot-dev
mailing list