From f626bd8000cb1574da9152c7ff7be262f6d168e5 Mon Sep 17 00:00:00 2001 From: Julian Seward Date: Sat, 5 Nov 2005 14:48:03 +0000 Subject: [PATCH] Fix stack unwinding on ppc. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5022 --- coregrind/m_libcassert.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/coregrind/m_libcassert.c b/coregrind/m_libcassert.c index fb9ab3e45a..d0c4e98b53 100644 --- a/coregrind/m_libcassert.c +++ b/coregrind/m_libcassert.c @@ -61,12 +61,19 @@ "=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 -- 2.47.3