Mercurial > hg > openjdk > jdk9 > hotspot
changeset 11816:3fcea91bb5a8
8133749: os::current_frame() is not returning the proper frame on ARM and solaris-x64
Summary: Need to go up one extra frame to be consistent with other platforms.
Reviewed-by: dholmes, zgu
author | cjplummer |
---|---|
date | Mon, 15 Aug 2016 13:06:50 -0700 |
parents | 0b3116993972 |
children | 8f2230e4c0ed |
files | src/os_cpu/solaris_x86/vm/os_solaris_x86.cpp |
diffstat | 1 files changed, 6 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/os_cpu/solaris_x86/vm/os_solaris_x86.cpp Mon Aug 15 16:15:16 2016 +0200 +++ b/src/os_cpu/solaris_x86/vm/os_solaris_x86.cpp Mon Aug 15 13:06:50 2016 -0700 @@ -292,15 +292,19 @@ frame os::current_frame() { intptr_t* fp = _get_current_fp(); // it's inlined so want current fp + // fp is for os::current_frame. We want the fp for our caller. frame myframe((intptr_t*)os::current_stack_pointer(), (intptr_t*)fp, CAST_FROM_FN_PTR(address, os::current_frame)); - if (os::is_first_C_frame(&myframe)) { + frame caller_frame = os::get_sender_for_C_frame(&myframe); + + if (os::is_first_C_frame(&caller_frame)) { // stack is not walkable frame ret; // This will be a null useless frame return ret; } else { - return os::get_sender_for_C_frame(&myframe); + // return frame for our caller's caller + return os::get_sender_for_C_frame(&caller_frame); } }