|
From: <sv...@va...> - 2005-11-05 14:48:06
|
Author: sewardj
Date: 2005-11-05 14:48:03 +0000 (Sat, 05 Nov 2005)
New Revision: 5022
Log:
Fix stack unwinding on ppc.
Modified:
trunk/coregrind/m_libcassert.c
Modified: trunk/coregrind/m_libcassert.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_libcassert.c 2005-11-05 14:22:03 UTC (rev 5021)
+++ trunk/coregrind/m_libcassert.c 2005-11-05 14:48:03 UTC (rev 5022)
@@ -61,12 +61,19 @@
"=3Dr" (sp),\
"=3Dr" (fp));
#elif defined(VGP_ppc32_linux)
-# define GET_REAL_PC_SP_AND_FP(pc, sp, fp) \
- asm("mr %0,1;" \
- "mr %1,1;" \
- : "=3Dr" (pc),\
- "=3Dr" (sp),\
- "=3Dr" (fp));
+# define GET_REAL_PC_SP_AND_FP(pc, sp, fp) \
+ asm("mflr 0;" /* r0 =3D lr */ \
+ "bl m_libcassert_get_ip;" /* lr =3D pc */ \
+ "m_libcassert_get_ip:\n" \
+ "mflr %0;" \
+ "mtlr 0;" /* restore lr */ \
+ "mr %1,1;" \
+ "mr %2,1;" \
+ : "=3Dr" (pc), \
+ "=3Dr" (sp), \
+ "=3Dr" (fp) \
+ : /* reads none */ \
+ : "r0" /* trashed */ );
#else
# error Unknown platform
#endif
|