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

Improve warning message when fail to load hsdis library

XMLWordPrintable

    • Icon: Enhancement Enhancement
    • Resolution: Unresolved
    • Icon: P4 P4
    • tbd
    • 26
    • hotspot
    • None

      JDK-8287001 introduced a warning on hsdis library load failure. This is useful when the user executes -XX:+PrintAssembly, etc.

      However, I think that when hs_err occurs, users might be confused by this warning printed by Xlog. Because users are not likely to know that hsdis is loaded for the [MachCode] section of the hs_err report, they may wonder, for example, "Why do I get warnings about hsdis load errors when -XX:+PrintAssembly is not specified?."
      Also, if, for example, the user does not specify the option to specify where the hs_err report should be output(ErrorFileToStdout or ErrorFileToStderr), the warning is printed in stdout by default, but the [MachCode] section is printed in the hs_err_pid log file. This makes it difficult for user to understand the relationship between warning and the [MachCode] section.

      To clear up this confusion, I suggest printing a warning just before [MachCode]:
      e.g.
      If hs_err occurs and hsdis load fails without the option to specify where the hs_err report should be output, the following is output to the hs_err_pir log file:
      ```
      .
      .
      native method entry point (kind = native) [0x000001ae8753cec0, 0x000001ae8753dac0] 3072 bytes

      Loading hsdis library failed, so undisassembled code is printed in the below [MachCode] section
      [MachCode]
        0x000001ae8753cec0: 488b 4b08 | 0fb7 492e | 584c 8d74 | ccf8 6800 | 0000 0068 | 0000 0000 | 5055 488b | ec41 5548
        0x000001ae8753cee0: 8b43 084c | 8d68 3848 | 8b40 0868 | 0000 0000 | 5348 8b50 | 18
      .
      .
      ```

      If -XX:+PrintAssembly is specified and hsdis load fails, the following is output to the stdout
      ```
      $ java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -version
      OpenJDK 64-Bit Server VM warning: PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output

      ============================= C1-compiled nmethod ==============================
      ----------------------------------- Assembly -----------------------------------

      Compiled method (c1) 57 2 3 java.lang.Object::<init> (1 bytes)
       total in heap [0x0000024a08a00008,0x0000024a08a00208] = 512
      .
      .

      [Constant Pool (empty)]


      Loading hsdis library failed, so undisassembled code is printed in the below [MachCode] section
      [MachCode]
      [Instructions begin]
        0x0000024a08a00100: 6666 660f | 1f84 0000 | 0000 0066 | 6666 9066 | 6690 448b | 5208 443b
      .
      .
      [Constant Pool (empty)]


      Loading hsdis library failed, so undisassembled code is printed in the below [MachCode] section
      [MachCode]
      [Verified Entry Point]
        # {method} {0x00000000251a1898} 'toUnsignedInt' '(B)I' in 'java/lang/Byte
      .
      .
      ```

      Since the warning added in this fix cover the role of warning introduced in JDK-8287001 , I think that the lines added in JDK-8287001 and JDK-8289421 can be removed.

            tkurashige Taizo Kurashige
            tkurashige Taizo Kurashige
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated: