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

Native stack walk while generating hs_err does not work on Windows x64

XMLWordPrintable

    • b51
    • x86
    • windows
    • Not verified

        The implementation of stack unwinding in frame_x86.cpp does not handle Windows x64 stack frame structure as generated by the Microsoft VC compiler. The result is that any stack trace in a hs_err file will only contain the first native frame encountered as we will get an invalid IP as we try to find the sender.

        In short, on Windows x64 frame pointers are not pushed on the stack, instead each frame has a static size encoded in the PE file header, plus a dynamic size recorded in a dynamic function table. This information can most easily be retrieved through the SymFunctionTableAccess64 function in dbghelp.dll. (A very good description can be found here http://www.codejury.com/a-walk-in-x64-land/)


        Example from a hs_err file (also attached):

        Stack: [0x0000000018e90000,0x0000000018f90000], sp=0x0000000018f8e520, free space=1017k
        Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
        V [jvm.dll+0x27060] ciInstance::field_value+0x90


        Note that the same issue exists in SA with tools like jstack -F and CLHSDB.

              iklam Ioi Lam
              allwin Peter Allwin (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              7 Start watching this issue

                Created:
                Updated:
                Resolved: