6773838: There is no calling stack for Compiler thread in hs_err file on x86
Summary: On solaris, the inline assembly wasn't being processed. Added volatile to il file fixed it.
Reviewed-by: phh, kvn
--- a/hotspot/src/os_cpu/solaris_x86/vm/os_solaris_x86.cpp Fri Dec 05 15:45:24 2008 -0800
+++ b/hotspot/src/os_cpu/solaris_x86/vm/os_solaris_x86.cpp Mon Dec 08 15:50:55 2008 -0500
@@ -203,10 +203,10 @@
return frame(fr->sender_sp(), fr->link(), fr->sender_pc());
}
-extern "C" intptr_t *_get_previous_fp(); // in .il file.
+extern "C" intptr_t *_get_current_fp(); // in .il file
frame os::current_frame() {
- intptr_t* fp = _get_previous_fp();
+ intptr_t* fp = _get_current_fp(); // it's inlined so want current fp
frame myframe((intptr_t*)os::current_stack_pointer(),
(intptr_t*)fp,
CAST_FROM_FN_PTR(address, os::current_frame));
--- a/hotspot/src/os_cpu/solaris_x86/vm/solaris_x86_32.il Fri Dec 05 15:45:24 2008 -0800
+++ b/hotspot/src/os_cpu/solaris_x86/vm/solaris_x86_32.il Mon Dec 08 15:50:55 2008 -0500
@@ -37,10 +37,10 @@
movl %gs:0, %eax
.end
- // Get callers fp
- .inline _get_previous_fp,0
+ // Get current fp
+ .inline _get_current_fp,0
+ .volatile
movl %ebp, %eax
- movl %eax, %eax
.end
// Support for jint Atomic::add(jint inc, volatile jint* dest)
--- a/hotspot/src/os_cpu/solaris_x86/vm/solaris_x86_64.il Fri Dec 05 15:45:24 2008 -0800
+++ b/hotspot/src/os_cpu/solaris_x86/vm/solaris_x86_64.il Mon Dec 08 15:50:55 2008 -0500
@@ -30,10 +30,10 @@
movq %fs:0, %rax
.end
- // Get the frame pointer from previous frame.
- .inline _get_previous_fp,0
+ // Get the frame pointer from current frame.
+ .inline _get_current_fp,0
+ .volatile
movq %rbp, %rax
- movq %rax, %rax
.end
// Support for jint Atomic::add(jint add_value, volatile jint* dest)