--- old/src/os_cpu/linux_x86/vm/os_linux_x86.cpp 2016-10-25 10:40:04.314774311 +0200 +++ new/src/os_cpu/linux_x86/vm/os_linux_x86.cpp 2016-10-25 10:40:04.266774279 +0200 @@ -164,17 +164,17 @@ return epc; } -frame os::fetch_frame_from_context(void* ucVoid) { +frame os::fetch_frame_from_context(Thread* thread, void* ucVoid) { intptr_t* sp; intptr_t* fp; ExtendedPC epc = fetch_frame_from_context(ucVoid, &sp, &fp); - return frame(sp, fp, epc.pc()); + return frame(thread, sp, fp, epc.pc()); } // By default, gcc always save frame pointer (%ebp/%rbp) on stack. It may get // turned off by -fomit-frame-pointer, -frame os::get_sender_for_C_frame(frame* fr) { - return frame(fr->sender_sp(), fr->link(), fr->sender_pc()); +frame os::get_sender_for_C_frame(Thread* thread, frame* fr) { + return frame(thread, fr->sender_sp(), fr->link(), fr->sender_pc()); } intptr_t* _get_previous_fp() { @@ -192,15 +192,17 @@ frame os::current_frame() { + Thread* thread = Thread::current(); intptr_t* fp = _get_previous_fp(); - frame myframe((intptr_t*)os::current_stack_pointer(), + frame myframe(thread, + (intptr_t*)os::current_stack_pointer(), (intptr_t*)fp, CAST_FROM_FN_PTR(address, os::current_frame)); if (os::is_first_C_frame(&myframe)) { // stack is not walkable return frame(); } else { - return os::get_sender_for_C_frame(&myframe); + return os::get_sender_for_C_frame(thread, &myframe); } }