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

Zero error reporting is broken after JDK-8255711

XMLWordPrintable

    • b05

        This manifests on the following tests:

        runtime/ErrorHandling/ErrorFileRedirectTest.java
        runtime/ErrorHandling/SecondaryErrorTest.java
        runtime/memory/ReadFromNoaccessArea.java
        runtime/Unsafe/InternalErrorTest.java
        runtime/Safepoint/TestAbortVMOnSafepointTimeout.java

        00:17:25 # Internal Error (/home/shade/trunks/jdk/src/hotspot/os_cpu/linux_zero/os_linux_zero.cpp:94), pid=739632, tid=739633
        00:17:25 # Error: ShouldNotCall()

        address os::Posix::ucontext_get_pc(const ucontext_t* uc) {
          ShouldNotCallThis(); <---- crash here
          return NULL; // silence compile warnings
        }

        I believe the generification in JDK-8255711 applies to Zero awkwardly.

        Zero is awkward in the sense it is too generic for its own good. It does not have any access to crash context decoders, and that is why ucontext_* are ShouldNotCallThis()-ed. Before JDK-8255711, Zero error reporting code was specially crafted to avoid this, apparently.

        There are at least two problems:
         1. ucontext_get_pc in unimplemented, so we can special-case those for Zero. Instead of returning a bogus value from Zero implementation, I decided to just special-case at its critical use in error reporting.
         2. generic VMError::report_and_die circles back at Zero's unimplemented os::fetch_frame_from_context. Before JDK-8255711, Zero did fatal() that avoided this trouble. The patch ignores the context to match that behavior.

              shade Aleksey Shipilev
              shade Aleksey Shipilev
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Created:
                Updated:
                Resolved: