< prev index next >
src/os_cpu/linux_x86/vm/os_linux_x86.cpp
Print this page
@@ -162,21 +162,21 @@
}
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() {
#ifdef SPARC_WORKS
register intptr_t **ebp;
@@ -190,19 +190,21 @@
return (intptr_t*) *ebp; // we want what it points to.
}
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);
}
}
// Utility functions
< prev index next >