_get_previous_fp broken on bsd with llvm-gcc

Christian Thalinger christian.thalinger at oracle.com
Thu Feb 2 08:10:06 PST 2012


While working on a bug on my Mac I noticed that _get_previous_fp is broken with LLVM-GCC.  The GCC version I am currently using is:

gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)

The fix is to use the __clang__ implementation (as is the case for os::current_stack_pointer):

diff --git a/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp b/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp
--- a/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp
+++ b/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp
@@ -362,7 +362,7 @@ frame os::get_sender_for_C_frame(frame* 
 }
 
 intptr_t* _get_previous_fp() {
-#if defined(SPARC_WORKS) || defined(__clang__)
+#if defined(SPARC_WORKS) || defined(__clang__) || defined(__llvm__)
   register intptr_t **ebp;
   __asm__("mov %%"SPELL_REG_FP", %0":"=r"(ebp));
 #else

Can someone of you guys fix this or should I file a bug and push it into hotspot-comp?

-- Chris


More information about the hotspot-runtime-dev mailing list