]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Fix stack unwinding on ppc.
authorJulian Seward <jseward@acm.org>
Sat, 5 Nov 2005 14:48:03 +0000 (14:48 +0000)
committerJulian Seward <jseward@acm.org>
Sat, 5 Nov 2005 14:48:03 +0000 (14:48 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5022

coregrind/m_libcassert.c

index fb9ab3e45aae58a2fe373bce13f59d861151cdc3..d0c4e98b53ed015370920b1ba343d67de27224b8 100644 (file)
             "=r" (sp),\
             "=r" (fp));
 #elif defined(VGP_ppc32_linux)
-#  define GET_REAL_PC_SP_AND_FP(pc, sp, fp)      \
-      asm("mr %0,1;" \
-          "mr %1,1;" \
-          : "=r" (pc),\
-            "=r" (sp),\
-            "=r" (fp));
+#  define GET_REAL_PC_SP_AND_FP(pc, sp, fp)                   \
+      asm("mflr 0;"                   /* r0 = lr */           \
+          "bl m_libcassert_get_ip;"   /* lr = pc */           \
+          "m_libcassert_get_ip:\n"                            \
+          "mflr %0;"                \
+          "mtlr 0;"                   /* restore lr */        \
+          "mr %1,1;"                \
+          "mr %2,1;"                \
+          : "=r" (pc),              \
+            "=r" (sp),              \
+            "=r" (fp)               \
+          : /* reads none */        \
+          : "r0" /* trashed */ );
 #else
 #  error Unknown platform
 #endif