RFR (S) 8022335 - Native stack walk while generating hs_err does not work on Windows x64

Ioi Lam ioi.lam at oracle.com
Wed Aug 14 16:48:28 PDT 2013


Thanks Vladimir,

I will wait for your commit and test with it.

- Ioi

On 08/14/2013 04:24 PM, Vladimir Kozlov wrote:
> For your information I am pushing next related changes:
>
> http://cr.openjdk.java.net/~kvn/8021898/webrev/src/share/vm/utilities/vmError.cpp.cdiff.html 
>
>
> Vladimir
>
> On 8/14/13 3:11 PM, Ioi Lam wrote:
>> |Please review this fix:||
>> ||
>> ||http://cr.openjdk.java.net/~iklam/8022335/win64_stack_walk_001/||
>> ||
>> ||Bug: Native stack walk while generating hs_err does not work on
>> Windows x64||
>> ||
>> ||http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8022335||
>> ||https://jbs.oracle.com/bugs/browse/JDK-8022335||
>> ||
>> ||Summary of fix:||
>> ||
>> ||    Windows x64 binaries are built (unconditionally) with the
>> equivalent of ||
>> ||    -fomit-frame-pointer, so HotSpot's build-in native stack walking
>> code ||
>> ||    will fail to find the sender frame. As a result, hs_err on
>> Windows/x64||
>> ||    will always list a single frame.||
>> ||
>> ||    I have added the NATIVE_UNWIND_MARK macro, which on Windows/x64
>> will invoke||
>> ||    the StackWalk64 API to walk the stace.||
>> ||
>> ||Deficiency of fix:||
>> ||
>> ||    StackWalk64 knows nothing about the Java frames. So hs_err will
>> display only||
>> ||    the native frames, and stop as soon as the first Java frame is
>> reached. It will||
>> ||    also NOT display any native frames below Java frames.||
>> ||
>> ||    A 'proper' implementation would be to use the the lower-level 
>> API ||
>> ||    SymFunctionTableAccess64 (which reads native frame linkage info
>> from the PE32+||
>> ||    file header). That way we can walk both the native and Java
>> frames. However, ||
>> ||    as noted in the bug report, this is more complex and I will 
>> leave it||
>> ||    for the future.||
>> ||
>> ||    As a side-fix, I also refactored a bunch of duplicated code in
>> decoder.cpp into||
>> ||    the DecoderLocker class.||
>> ||
>> ||Tests:||
>> ||
>> ||    JPRT||
>> ||    UTE (vm.runtime.testlist, vm.quick.testlist,
>> vm.parallel_class_loading.testlist)||
>> ||
>> ||    I also manually inserted some crashes into jvm.dll and verified
>> that the ||
>> ||    native stack trace is printed as expected.||
>> ||
>> ||
>> ||Thanks||
>> ||- Ioi||
>> ||
>> |



More information about the hotspot-runtime-dev mailing list