|
From: <sv...@va...> - 2005-11-13 02:41:39
|
Author: sewardj
Date: 2005-11-13 02:41:35 +0000 (Sun, 13 Nov 2005)
New Revision: 5111
Log:
ppc32 stack unwind: if the initial FP looks bad, don't use it.
Modified:
trunk/coregrind/m_stacktrace.c
Modified: trunk/coregrind/m_stacktrace.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_stacktrace.c 2005-11-13 01:59:22 UTC (rev 5110)
+++ trunk/coregrind/m_stacktrace.c 2005-11-13 02:41:35 UTC (rev 5111)
@@ -189,32 +189,37 @@
=20
ips[0] =3D ip;
i =3D 1;
- fp =3D (((UWord*)fp)[0]);
=20
- while (True) {
+ if (fp_min <=3D fp && fp < fp_max-4+1) {
=20
- if (i >=3D n_ips)
- break;
+ /* initial FP is sane; keep going */
+ fp =3D (((UWord*)fp)[0]);
=20
- /* Try to derive a new (ip,fp) pair from the current set. */
+ while (True) {
=20
- if (fp_min <=3D fp && fp <=3D fp_max) {
- /* fp looks sane, so use it. */
+ if (i >=3D n_ips)
+ break;
=20
- if (i =3D=3D 1 && lr_is_first_RA)
- ip =3D lr;
- else
- ip =3D (((UWord*)fp)[1]);
+ /* Try to derive a new (ip,fp) pair from the current set. */
=20
- fp =3D (((UWord*)fp)[0]);
- ips[i++] =3D ip;
- if (debug)
- VG_(printf)(" ipsF[%d]=3D%08p\n", i-1, ips[i-1]);
- continue;
+ if (fp_min <=3D fp && fp <=3D fp_max) {
+ /* fp looks sane, so use it. */
+
+ if (i =3D=3D 1 && lr_is_first_RA)
+ ip =3D lr;
+ else
+ ip =3D (((UWord*)fp)[1]);
+
+ fp =3D (((UWord*)fp)[0]);
+ ips[i++] =3D ip;
+ if (debug)
+ VG_(printf)(" ipsF[%d]=3D%08p\n", i-1, ips[i-1]);
+ continue;
+ }
+
+ /* No luck there. We have to give up. */
+ break;
}
-
- /* No luck there. We have to give up. */
- break;
}
=20
# else
|