Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8296469

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

XMLWordPrintable

    • Icon: Enhancement Enhancement
    • Resolution: Fixed
    • Icon: P4 P4
    • 21
    • 20
    • hotspot
    • b23
    • generic, x86, arm, ppc, x86_64, aarch64, s390x, riscv

      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();
      ```

            aboldtch Axel Boldt-Christmas
            aboldtch Axel Boldt-Christmas
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: