This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

ARM EABI: fix stacktraces


This is, I hope, the last libgcj patch before merging EABI gcj support
to trunk.

Andrew.


2007-08-29  Andrew Haley  <aph@redhat.com>

        * gnu/classpath/natVMStackWalker.cc (VMStackWalker::getCallingClass):
        Make sure we're not sibcalled.
        (GET_CALLING_CLASS): Define for ARM EABI.

Index: gnu/classpath/natVMStackWalker.cc
===================================================================
--- gnu/classpath/natVMStackWalker.cc   (revision 127733)
+++ gnu/classpath/natVMStackWalker.cc   (working copy)
@@ -45,8 +45,10 @@
                                                                        \
   klass;                                                               \
  })
-#else
-#define GET_CALLING_CLASS(PC) NULL
+#else // __ARM_EABI_UNWINDER__
+// ARM EABI doesn't support _Unwind_FindEnclosingFunction.
+#define GET_CALLING_CLASS(PC)                          \
+  (_Jv_StackTrace::GetStackWalkerCallingClass ())
 #endif
 
 JArray<jclass> *
@@ -63,14 +65,18 @@
 gnu::classpath::VMStackWalker::getCallingClass(void)
 {
   _Jv_InitClass (&::gnu::classpath::VMStackWalker::class$);
-  return _Jv_StackTrace::GetStackWalkerCallingClass ();
+  jclass result = _Jv_StackTrace::GetStackWalkerCallingClass ();
+  __asm__ __volatile__ ("" : : "g" (result));
+  return result;
 }
 
 jclass
 gnu::classpath::VMStackWalker::getCallingClass(::gnu::gcj::RawData *pc)
 {
   _Jv_InitClass (&::gnu::classpath::VMStackWalker::class$);
-  return GET_CALLING_CLASS(pc);
+  jclass result = GET_CALLING_CLASS(pc);
+  __asm__ __volatile__ ("" : : "g" (result));
+  return result;
 }
 
 ::java::lang::ClassLoader *


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]