You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
|
|
1
(12) |
2
(9) |
|
3
(23) |
4
(24) |
5
(9) |
6
(7) |
7
(5) |
8
(2) |
9
(6) |
|
10
(5) |
11
(3) |
12
(11) |
13
(4) |
14
|
15
(3) |
16
(4) |
|
17
(3) |
18
(6) |
19
|
20
(1) |
21
(9) |
22
(8) |
23
(1) |
|
24
|
25
(2) |
26
(3) |
27
(16) |
28
(17) |
29
(22) |
30
(7) |
|
31
(4) |
|
|
|
|
|
|
|
From: <sv...@va...> - 2010-01-01 20:56:25
|
Author: sewardj
Date: 2010-01-01 20:56:13 +0000 (Fri, 01 Jan 2010)
New Revision: 10988
Log:
initUnwindContext: put back into the loop, some initialisations for
ARM which were originally in the loop but inadvertantly got lifted out
during recent merging. This appears to make stack unwinding work
again on ARM-Linux.
Modified:
trunk/coregrind/m_debuginfo/readdwarf.c
Modified: trunk/coregrind/m_debuginfo/readdwarf.c
===================================================================
--- trunk/coregrind/m_debuginfo/readdwarf.c 2010-01-01 19:55:17 UTC (rev 10987)
+++ trunk/coregrind/m_debuginfo/readdwarf.c 2010-01-01 20:56:13 UTC (rev 10988)
@@ -2015,16 +2015,16 @@
ctx->state[j].reg[i].tag = RR_Undef;
/* ctx->state[j].reg[i].arg = 0; */
}
+# if defined(VGA_arm)
+ /* All callee-saved registers (or at least the ones we are
+ summarising for) should start out as RR_Same, on ARM. */
+ ctx->state[j].reg[11].tag = RR_Same;
+ /* ctx->state[j].reg[13].tag = RR_Same; */
+ ctx->state[j].reg[14].tag = RR_Same;
+ ctx->state[j].reg[12].tag = RR_Same;
+ /* this can't be right though: R12 (IP) isn't callee saved. */
+# endif
}
-# if defined(VGA_arm)
- /* All callee-saved registers (or at least the ones we are
- summarising for) should start out as RR_Same, on ARM. */
- ctx->state[j].reg[11].tag = RR_Same;
- /* ctx->state[j].reg[13].tag = RR_Same; */
- ctx->state[j].reg[14].tag = RR_Same;
- ctx->state[j].reg[12].tag = RR_Same;
- /* this can't be right though: R12 (IP) isn't callee saved. */
-# endif
}
|
|
From: <sv...@va...> - 2010-01-01 19:55:33
|
Author: sewardj
Date: 2010-01-01 19:55:17 +0000 (Fri, 01 Jan 2010)
New Revision: 10987
Log:
Unbreak stack unwinding on x86-linux and amd64-linux following merge
of ARM CFI unwinding in r10986.
Modified:
trunk/coregrind/m_debuginfo/debuginfo.c
trunk/coregrind/m_debuginfo/readdwarf.c
trunk/coregrind/m_stacktrace.c
Modified: trunk/coregrind/m_debuginfo/debuginfo.c
===================================================================
--- trunk/coregrind/m_debuginfo/debuginfo.c 2010-01-01 18:46:41 UTC (rev 10986)
+++ trunk/coregrind/m_debuginfo/debuginfo.c 2010-01-01 19:55:17 UTC (rev 10987)
@@ -2217,8 +2217,8 @@
# if defined(VGA_x86) || defined(VGA_amd64)
COMPUTE(uregsPrev.xip, uregsHere->xip, cfsi->ra_how, cfsi->ra_off);
- COMPUTE(uregsPrev.xsp, uregsPrev->xsp, cfsi->sp_how, cfsi->sp_off);
- COMPUTE(uregsPrev.xbp, uregsPrev->xbp, cfsi->bp_how, cfsi->bp_off);
+ COMPUTE(uregsPrev.xsp, uregsHere->xsp, cfsi->sp_how, cfsi->sp_off);
+ COMPUTE(uregsPrev.xbp, uregsHere->xbp, cfsi->bp_how, cfsi->bp_off);
# elif defined(VGA_arm)
COMPUTE(uregsPrev.r15, uregsHere->r15, cfsi->ra_how, cfsi->ra_off);
COMPUTE(uregsPrev.r14, uregsHere->r14, cfsi->r14_how, cfsi->r14_off);
Modified: trunk/coregrind/m_debuginfo/readdwarf.c
===================================================================
--- trunk/coregrind/m_debuginfo/readdwarf.c 2010-01-01 18:46:41 UTC (rev 10986)
+++ trunk/coregrind/m_debuginfo/readdwarf.c 2010-01-01 19:55:17 UTC (rev 10987)
@@ -2175,10 +2175,9 @@
SUMMARISE_HOW(si->ra_how, si->ra_off,
ctxs->reg[ctx->ra_reg] );
- SUMMARISE_HOW(si->fp_how, si->fp_off,
+ SUMMARISE_HOW(si->bp_how, si->bp_off,
ctxs->reg[FP_REG] );
-
/* on x86/amd64, it seems the old %{e,r}sp value before the call is
always the same as the CFA. Therefore ... */
si->sp_how = CFIR_CFAREL;
@@ -2187,7 +2186,7 @@
/* also, gcc says "Undef" for %{e,r}bp when it is unchanged. So
.. */
if (ctxs->reg[FP_REG].tag == RR_Undef)
- si->fp_how = CFIR_SAME;
+ si->bp_how = CFIR_SAME;
/* knock out some obviously stupid cases */
if (si->ra_how == CFIR_SAME)
@@ -2319,11 +2318,11 @@
dwreg = src->Cex.DwReg.reg;
# if defined(VGA_x86) || defined(VGA_amd64)
if (dwreg == SP_REG)
- return ML_(CfiExpr_CfiReg)( dstxa, Creg_SP );
+ return ML_(CfiExpr_CfiReg)( dstxa, Creg_IA_SP );
if (dwreg == FP_REG)
- return ML_(CfiExpr_CfiReg)( dstxa, Creg_FP );
+ return ML_(CfiExpr_CfiReg)( dstxa, Creg_IA_BP );
if (dwreg == srcuc->ra_reg)
- return ML_(CfiExpr_CfiReg)( dstxa, Creg_IP ); /* correct? */
+ return ML_(CfiExpr_CfiReg)( dstxa, Creg_IA_IP ); /* correct? */
# elif defined(VGA_arm)
if (dwreg == SP_REG)
return ML_(CfiExpr_CfiReg)( dstxa, Creg_ARM_R13 );
Modified: trunk/coregrind/m_stacktrace.c
===================================================================
--- trunk/coregrind/m_stacktrace.c 2010-01-01 18:46:41 UTC (rev 10986)
+++ trunk/coregrind/m_stacktrace.c 2010-01-01 19:55:17 UTC (rev 10987)
@@ -79,10 +79,11 @@
vg_assert(sizeof(Addr) == sizeof(UWord));
vg_assert(sizeof(Addr) == sizeof(void*));
- Addr ip = (Addr)startRegs->r_pc;
- Addr sp = (Addr)startRegs->r_sp;
- Addr fp = startRegs->misc.X86.r_ebp;
- Addr fp_min = sp;
+ D3UnwindRegs uregs;
+ uregs.xip = (Addr)startRegs->r_pc;
+ uregs.xsp = (Addr)startRegs->r_sp;
+ uregs.xbp = startRegs->misc.X86.r_ebp;
+ Addr fp_min = uregs.xsp;
/* Snaffle IPs from the client's stack into ips[0 .. max_n_ips-1],
stopping when the trail goes cold, which we guess to be
@@ -98,7 +99,8 @@
if (debug)
VG_(printf)("max_n_ips=%d fp_min=0x%lx fp_max_orig=0x%lx, "
"fp_max=0x%lx ip=0x%lx fp=0x%lx\n",
- max_n_ips, fp_min, fp_max_orig, fp_max, ip, fp);
+ max_n_ips, fp_min, fp_max_orig, fp_max,
+ uregs.xip, uregs.xbp);
/* Assertion broken before main() is reached in pthreaded programs; the
* offending stack traces only have one item. --njn, 2002-aug-16 */
@@ -109,18 +111,18 @@
if (fp_min + 512 >= fp_max) {
/* If the stack limits look bogus, don't poke around ... but
don't bomb out either. */
- if (sps) sps[0] = sp;
- if (fps) fps[0] = fp;
- ips[0] = ip;
+ if (sps) sps[0] = uregs.xsp;
+ if (fps) fps[0] = uregs.xbp;
+ ips[0] = uregs.xip;
return 1;
}
# endif
/* fp is %ebp. sp is %esp. ip is %eip. */
- if (sps) sps[0] = sp;
- if (fps) fps[0] = fp;
- ips[0] = ip;
+ if (sps) sps[0] = uregs.xsp;
+ if (fps) fps[0] = uregs.xbp;
+ ips[0] = uregs.xip;
i = 1;
/* Loop unwinding the stack. Note that the IP value we get on
@@ -153,52 +155,55 @@
fails, and is expensive. */
/* Deal with frames resulting from functions which begin "pushl%
ebp ; movl %esp, %ebp" which is the ABI-mandated preamble. */
- if (fp_min <= fp &&
- fp <= fp_max - 1 * sizeof(UWord)/*see comment below*/)
+ if (fp_min <= uregs.xbp &&
+ uregs.xbp <= fp_max - 1 * sizeof(UWord)/*see comment below*/)
{
/* fp looks sane, so use it. */
- ip = (((UWord*)fp)[1]);
+ uregs.xip = (((UWord*)uregs.xbp)[1]);
// We stop if we hit a zero (the traditional end-of-stack
// marker) or a one -- these correspond to recorded IPs of 0 or -1.
// The latter because r8818 (in this file) changes the meaning of
// entries [1] and above in a stack trace, by subtracting 1 from
// them. Hence stacks that used to end with a zero value now end in
// -1 and so we must detect that too.
- if (0 == ip || 1 == ip) break;
- sp = fp + sizeof(Addr) /*saved %ebp*/
- + sizeof(Addr) /*ra*/;
- fp = (((UWord*)fp)[0]);
- if (sps) sps[i] = sp;
- if (fps) fps[i] = fp;
- ips[i++] = ip - 1; /* -1: refer to calling insn, not the RA */
+ if (0 == uregs.xip || 1 == uregs.xip) break;
+ uregs.xsp = uregs.xbp + sizeof(Addr) /*saved %ebp*/
+ + sizeof(Addr) /*ra*/;
+ uregs.xbp = (((UWord*)uregs.xbp)[0]);
+ if (sps) sps[i] = uregs.xsp;
+ if (fps) fps[i] = uregs.xbp;
+ ips[i++] = uregs.xip - 1; /* -1: refer to calling insn, not the RA */
if (debug)
VG_(printf)(" ipsF[%d]=0x%08lx\n", i-1, ips[i-1]);
- ip = ip - 1; /* as per comment at the head of this loop */
+ uregs.xip = uregs.xip - 1;
+ /* as per comment at the head of this loop */
continue;
}
/* That didn't work out, so see if there is any CF info to hand
which can be used. */
- if ( VG_(use_CF_info)( &ip, &sp, &fp, fp_min, fp_max ) ) {
- if (0 == ip || 1 == ip) break;
- if (sps) sps[i] = sp;
- if (fps) fps[i] = fp;
- ips[i++] = ip - 1; /* -1: refer to calling insn, not the RA */
+ if ( VG_(use_CF_info)( &uregs, fp_min, fp_max ) ) {
+ if (0 == uregs.xip || 1 == uregs.xip) break;
+ if (sps) sps[i] = uregs.xsp;
+ if (fps) fps[i] = uregs.xbp;
+ ips[i++] = uregs.xip - 1; /* -1: refer to calling insn, not the RA */
if (debug)
VG_(printf)(" ipsC[%d]=0x%08lx\n", i-1, ips[i-1]);
- ip = ip - 1; /* as per comment at the head of this loop */
+ uregs.xip = uregs.xip - 1;
+ /* as per comment at the head of this loop */
continue;
}
/* And, similarly, try for MSVC FPO unwind info. */
- if ( VG_(use_FPO_info)( &ip, &sp, &fp, fp_min, fp_max ) ) {
- if (0 == ip || 1 == ip) break;
- if (sps) sps[i] = sp;
- if (fps) fps[i] = fp;
- ips[i++] = ip;
+ if ( VG_(use_FPO_info)( &uregs.xip, &uregs.xsp, &uregs.xbp,
+ fp_min, fp_max ) ) {
+ if (0 == uregs.xip || 1 == uregs.xip) break;
+ if (sps) sps[i] = uregs.xsp;
+ if (fps) fps[i] = uregs.xbp;
+ ips[i++] = uregs.xip;
if (debug)
VG_(printf)(" ipsC[%d]=0x%08lx\n", i-1, ips[i-1]);
- ip = ip - 1;
+ uregs.xip = uregs.xip - 1;
continue;
}
@@ -230,10 +235,11 @@
vg_assert(sizeof(Addr) == sizeof(UWord));
vg_assert(sizeof(Addr) == sizeof(void*));
- Addr ip = startRegs->r_pc;
- Addr sp = startRegs->r_sp;
- Addr fp = startRegs->misc.AMD64.r_rbp;
- Addr fp_min = sp;
+ D3UnwindRegs uregs;
+ uregs.xip = startRegs->r_pc;
+ uregs.xsp = startRegs->r_sp;
+ uregs.xbp = startRegs->misc.AMD64.r_rbp;
+ Addr fp_min = uregs.xsp;
/* Snaffle IPs from the client's stack into ips[0 .. max_n_ips-1],
stopping when the trail goes cold, which we guess to be
@@ -249,7 +255,8 @@
if (debug)
VG_(printf)("max_n_ips=%d fp_min=0x%lx fp_max_orig=0x%lx, "
"fp_max=0x%lx ip=0x%lx fp=0x%lx\n",
- max_n_ips, fp_min, fp_max_orig, fp_max, ip, fp);
+ max_n_ips, fp_min, fp_max_orig, fp_max,
+ uregs.xip, uregs.xbp);
/* Assertion broken before main() is reached in pthreaded programs; the
* offending stack traces only have one item. --njn, 2002-aug-16 */
@@ -260,18 +267,18 @@
if (fp_min + 512 >= fp_max) {
/* If the stack limits look bogus, don't poke around ... but
don't bomb out either. */
- if (sps) sps[0] = sp;
- if (fps) fps[0] = fp;
- ips[0] = ip;
+ if (sps) sps[0] = uregs.xsp;
+ if (fps) fps[0] = uregs.xbp;
+ ips[0] = uregs.xip;
return 1;
}
# endif
/* fp is %rbp. sp is %rsp. ip is %rip. */
- ips[0] = ip;
- if (sps) sps[0] = sp;
- if (fps) fps[0] = fp;
+ ips[0] = uregs.xip;
+ if (sps) sps[0] = uregs.xsp;
+ if (fps) fps[0] = uregs.xbp;
i = 1;
/* Loop unwinding the stack. Note that the IP value we get on
@@ -298,14 +305,14 @@
/* First off, see if there is any CFI info to hand which can
be used. */
- if ( VG_(use_CF_info)( &ip, &sp, &fp, fp_min, fp_max ) ) {
- if (0 == ip || 1 == ip) break;
- if (sps) sps[i] = sp;
- if (fps) fps[i] = fp;
- ips[i++] = ip - 1; /* -1: refer to calling insn, not the RA */
+ if ( VG_(use_CF_info)( &uregs, fp_min, fp_max ) ) {
+ if (0 == uregs.xip || 1 == uregs.xip) break;
+ if (sps) sps[i] = uregs.xsp;
+ if (fps) fps[i] = uregs.xbp;
+ ips[i++] = uregs.xip - 1; /* -1: refer to calling insn, not the RA */
if (debug)
VG_(printf)(" ipsC[%d]=%#08lx\n", i-1, ips[i-1]);
- ip = ip - 1; /* as per comment at the head of this loop */
+ uregs.xip = uregs.xip - 1; /* as per comment at the head of this loop */
continue;
}
@@ -321,19 +328,19 @@
fact that we are prodding at & ((UWord*)fp)[1] and so need to
adjust the limit check accordingly. Omitting this has been
observed to cause segfaults on rare occasions. */
- if (fp_min <= fp && fp <= fp_max - 1 * sizeof(UWord)) {
+ if (fp_min <= uregs.xbp && uregs.xbp <= fp_max - 1 * sizeof(UWord)) {
/* fp looks sane, so use it. */
- ip = (((UWord*)fp)[1]);
- if (0 == ip || 1 == ip) break;
- sp = fp + sizeof(Addr) /*saved %rbp*/
- + sizeof(Addr) /*ra*/;
- fp = (((UWord*)fp)[0]);
- if (sps) sps[i] = sp;
- if (fps) fps[i] = fp;
- ips[i++] = ip - 1; /* -1: refer to calling insn, not the RA */
+ uregs.xip = (((UWord*)uregs.xbp)[1]);
+ if (0 == uregs.xip || 1 == uregs.xip) break;
+ uregs.xsp = uregs.xbp + sizeof(Addr) /*saved %rbp*/
+ + sizeof(Addr) /*ra*/;
+ uregs.xbp = (((UWord*)uregs.xbp)[0]);
+ if (sps) sps[i] = uregs.xsp;
+ if (fps) fps[i] = uregs.xbp;
+ ips[i++] = uregs.xip - 1; /* -1: refer to calling insn, not the RA */
if (debug)
VG_(printf)(" ipsF[%d]=%#08lx\n", i-1, ips[i-1]);
- ip = ip - 1; /* as per comment at the head of this loop */
+ uregs.xip = uregs.xip - 1; /* as per comment at the head of this loop */
continue;
}
@@ -349,19 +356,20 @@
address; instead scan a likely section of stack (eg sp .. sp+256)
and use suitable values found there.
*/
- if (fp_min <= sp && sp < fp_max) {
- ip = ((UWord*)sp)[0];
- if (0 == ip || 1 == ip) break;
- if (sps) sps[i] = sp;
- if (fps) fps[i] = fp;
- ips[i++] = ip == 0
+ if (fp_min <= uregs.xsp && uregs.xsp < fp_max) {
+ uregs.xip = ((UWord*)uregs.xsp)[0];
+ if (0 == uregs.xip || 1 == uregs.xip) break;
+ if (sps) sps[i] = uregs.xsp;
+ if (fps) fps[i] = uregs.xbp;
+ ips[i++] = uregs.xip == 0
? 0 /* sp[0] == 0 ==> stuck at the bottom of a
thread stack */
- : ip - 1; /* -1: refer to calling insn, not the RA */
+ : uregs.xip - 1;
+ /* -1: refer to calling insn, not the RA */
if (debug)
VG_(printf)(" ipsH[%d]=%#08lx\n", i-1, ips[i-1]);
- ip = ip - 1; /* as per comment at the head of this loop */
- sp += 8;
+ uregs.xip = uregs.xip - 1; /* as per comment at the head of this loop */
+ uregs.xsp += 8;
continue;
}
|
|
From: <sv...@va...> - 2010-01-01 19:19:17
|
Author: sewardj
Date: 2010-01-01 19:19:08 +0000 (Fri, 01 Jan 2010)
New Revision: 1951
Log:
Generate a couple more ARM specific offsets; also R1 on ppc32/64.
Modified:
trunk/auxprogs/genoffsets.c
Modified: trunk/auxprogs/genoffsets.c
===================================================================
--- trunk/auxprogs/genoffsets.c 2009-12-31 19:26:03 UTC (rev 1950)
+++ trunk/auxprogs/genoffsets.c 2010-01-01 19:19:08 UTC (rev 1951)
@@ -127,6 +127,7 @@
// ppc32
GENOFFSET(PPC32,ppc32,GPR0);
+ GENOFFSET(PPC32,ppc32,GPR1);
GENOFFSET(PPC32,ppc32,GPR2);
GENOFFSET(PPC32,ppc32,GPR3);
GENOFFSET(PPC32,ppc32,GPR4);
@@ -141,6 +142,7 @@
// ppc64
GENOFFSET(PPC64,ppc64,GPR0);
+ GENOFFSET(PPC64,ppc64,GPR1);
GENOFFSET(PPC64,ppc64,GPR2);
GENOFFSET(PPC64,ppc64,GPR3);
GENOFFSET(PPC64,ppc64,GPR4);
@@ -161,5 +163,7 @@
GENOFFSET(ARM,arm,R4);
GENOFFSET(ARM,arm,R5);
GENOFFSET(ARM,arm,R7);
+ GENOFFSET(ARM,arm,R13);
+ GENOFFSET(ARM,arm,R14);
GENOFFSET(ARM,arm,R15);
}
|
|
From: <sv...@va...> - 2010-01-01 18:46:50
|
Author: sewardj
Date: 2010-01-01 18:46:41 +0000 (Fri, 01 Jan 2010)
New Revision: 10986
Log:
Make the Dwarf3 CFI stack unwinding machinery work on arm-linux
too. This is a first step towards making not be completely
x86/amd64-linux specific, and so replaces some x86/amd64-specific
stuff with more general constructions:
* structure 'DiCfSI', into which the info is summarised, has been
made target-specific (ugh), since the sets of registers to be
unwound differ on different targets.
* enum CfiReg and the CFIC_ constants have been expanded
accordingly, to handle both arm and x86/amd64 registers.
The abbreviation "IA" (Intel Architecture) has been used in a
few places where the x86 and amd64 definitions are shared.
* the CFI reader/summariser in readdwarf.c has been expanded &
generalised appropriately.
* the DiCfSI evaluator in debuginfo.c, VG_(use_CFI_info), has
also been generalised appropriately.
The main change is that instead of passing around triples
of (IP, SP, BP) values, a new structure 'D3UnwindRegs' is
passed around instead. This is defined differently for IA and
ARM and succeeds in hiding at least some of the differences
where we don't care about them.
Note also, D3UnwindRegs duplicates, in purpose and structure,
structure 'RegSummary' in priv_d3basics.h. This will be tidied
up in due course.
This commit almost certainly breaks stack unwinding on amd64-linux.
Modified:
trunk/coregrind/m_debuginfo/d3basics.c
trunk/coregrind/m_debuginfo/debuginfo.c
trunk/coregrind/m_debuginfo/priv_storage.h
trunk/coregrind/m_debuginfo/readdwarf.c
trunk/coregrind/m_debuginfo/readelf.c
trunk/coregrind/m_debuginfo/storage.c
trunk/coregrind/m_stacktrace.c
trunk/coregrind/pub_core_debuginfo.h
Modified: trunk/coregrind/m_debuginfo/d3basics.c
===================================================================
--- trunk/coregrind/m_debuginfo/d3basics.c 2010-01-01 18:31:41 UTC (rev 10985)
+++ trunk/coregrind/m_debuginfo/d3basics.c 2010-01-01 18:46:41 UTC (rev 10986)
@@ -833,13 +833,16 @@
break;
case DW_OP_call_frame_cfa:
if (!regs)
- FAIL("evaluate_Dwarf3_Expr: DW_OP_call_frame_cfa but no reg info");
+ FAIL("evaluate_Dwarf3_Expr: "
+ "DW_OP_call_frame_cfa but no reg info");
#if defined(VGP_ppc32_linux) || defined(VGP_ppc64_linux)
- /* Valgrind on ppc32/ppc64 currently doesn't use unwind info. */
+ /* Valgrind on ppc32/ppc64 currently doesn't use unwind info. */
uw1 = *(Addr *)(regs->sp);
#else
uw1 = ML_(get_CFA)(regs->ip, regs->sp, regs->fp, 0, ~(UWord) 0);
#endif
+ /* we expect this to fail on arm-linux, since ML_(get_CFA)
+ always returns zero at present. */
if (!uw1)
FAIL("evaluate_Dwarf3_Expr: Could not resolve "
"DW_OP_call_frame_cfa");
Modified: trunk/coregrind/m_debuginfo/debuginfo.c
===================================================================
--- trunk/coregrind/m_debuginfo/debuginfo.c 2010-01-01 18:31:41 UTC (rev 10985)
+++ trunk/coregrind/m_debuginfo/debuginfo.c 2010-01-01 18:46:41 UTC (rev 10986)
@@ -708,7 +708,7 @@
# if defined(VGA_x86) || defined(VGA_ppc32)
is_rx_map = seg->hasR && seg->hasX;
is_rw_map = seg->hasR && seg->hasW;
-# elif defined(VGA_amd64) || defined(VGA_ppc64)
+# elif defined(VGA_amd64) || defined(VGA_ppc64) || defined(VGA_arm)
is_rx_map = seg->hasR && seg->hasX && !seg->hasW;
is_rw_map = seg->hasR && seg->hasW && !seg->hasX;
# else
@@ -1395,17 +1395,17 @@
return Vg_FnNameMain;
} else if (
-#if defined(VGO_linux)
+# if defined(VGO_linux)
VG_STREQ("__libc_start_main", name) || // glibc glibness
VG_STREQ("generic_start_main", name) || // Yellow Dog doggedness
-#elif defined(VGO_aix5)
+# elif defined(VGO_aix5)
VG_STREQ("__start", name) || // AIX aches
-#elif defined(VGO_darwin)
+# elif defined(VGO_darwin)
// See readmacho.c for an explanation of this.
VG_STREQ("start_according_to_valgrind", name) || // Darwin, darling
-#else
-# error Unknown OS
-#endif
+# else
+# error "Unknown OS"
+# endif
0) {
return Vg_FnNameBelowMain;
@@ -1821,11 +1821,9 @@
a CfiExpr into one convenient struct. */
typedef
struct {
- Addr ipHere;
- Addr spHere;
- Addr fpHere;
- Addr min_accessible;
- Addr max_accessible;
+ D3UnwindRegs* uregs;
+ Addr min_accessible;
+ Addr max_accessible;
}
CfiExprEvalContext;
@@ -1838,7 +1836,9 @@
{
UWord wL, wR;
Addr a;
- CfiExpr* e = VG_(indexXA)( exprs, ix );
+ CfiExpr* e;
+ vg_assert(sizeof(Addr) == sizeof(UWord));
+ e = VG_(indexXA)( exprs, ix );
switch (e->tag) {
case Cex_Binop:
wL = evalCfiExpr( exprs, e->Cex.Binop.ixL, eec, ok );
@@ -1855,9 +1855,19 @@
/*NOTREACHED*/
case Cex_CfiReg:
switch (e->Cex.CfiReg.reg) {
- case Creg_IP: return (Addr)eec->ipHere;
- case Creg_SP: return (Addr)eec->spHere;
- case Creg_FP: return (Addr)eec->fpHere;
+# if defined(VGA_x86) || defined(VGA_amd64)
+ case Creg_IA_IP: return eec->uregs->xip;
+ case Creg_IA_SP: return eec->uregs->xsp;
+ case Creg_IA_BP: return eec->uregs->xbp;
+# elif defined(VGA_arm)
+ case Creg_ARM_R13: return eec->uregs->r13;
+ case Creg_ARM_R12: return eec->uregs->r12;
+ case Creg_ARM_R15: return eec->uregs->r15;
+ case Creg_ARM_R14: return eec->uregs->r14;
+# elif defined(VGA_ppc32) || defined(VGA_ppc64)
+# else
+# error "Unsupported arch"
+# endif
default: goto unhandled;
}
/*NOTREACHED*/
@@ -2032,7 +2042,7 @@
}
-static Addr compute_cfa ( Addr ip, Addr sp, Addr fp,
+static Addr compute_cfa ( D3UnwindRegs* uregs,
Addr min_accessible, Addr max_accessible,
DebugInfo* di, DiCfSI* cfsi )
{
@@ -2043,21 +2053,34 @@
/* Compute the CFA. */
cfa = 0;
switch (cfsi->cfa_how) {
- case CFIC_SPREL:
- cfa = sp + cfsi->cfa_off;
+# if defined(VGA_x86) || defined(VGA_amd64)
+ case CFIC_IA_SPREL:
+ cfa = cfsi->cfa_off + uregs->xsp;
break;
- case CFIC_FPREL:
- cfa = fp + cfsi->cfa_off;
+ case CFIC_IA_BPREL:
+ cfa = cfsi->cfa_off + uregs->xbp;
break;
- case CFIC_EXPR:
+# elif defined(VGA_arm)
+ case CFIC_ARM_R13REL:
+ cfa = cfsi->cfa_off + uregs->r13;
+ break;
+ case CFIC_ARM_R12REL:
+ cfa = cfsi->cfa_off + uregs->r12;
+ break;
+ case CFIC_ARM_R11REL:
+ cfa = cfsi->cfa_off + uregs->r11;
+ break;
+# elif defined(VGA_ppc32) || defined(VGA_ppc64)
+# else
+# error "Unsupported arch"
+# endif
+ case CFIC_EXPR: /* available on all archs */
if (0) {
VG_(printf)("CFIC_EXPR: ");
ML_(ppCfiExpr)(di->cfsi_exprs, cfsi->cfa_off);
VG_(printf)("\n");
}
- eec.ipHere = ip;
- eec.spHere = sp;
- eec.fpHere = fp;
+ eec.uregs = uregs;
eec.min_accessible = min_accessible;
eec.max_accessible = max_accessible;
ok = True;
@@ -2072,6 +2095,8 @@
/* Get the call frame address (CFA) given an IP/SP/FP triple. */
+/* NOTE: This function may rearrange the order of entries in the
+ DebugInfo list. */
Addr ML_(get_CFA) ( Addr ip, Addr sp, Addr fp,
Addr min_accessible, Addr max_accessible )
{
@@ -2087,30 +2112,53 @@
di = ce->di;
cfsi = &di->cfsi[ ce->ix ];
- return compute_cfa(ip, sp, fp, min_accessible, max_accessible, di, cfsi);
+ /* Temporary impedance-matching kludge so that this keeps working
+ on x86-linux and amd64-linux. */
+# if defined(VGA_x86) || defined(VGA_amd64)
+ { D3UnwindRegs uregs;
+ uregs.xip = ip;
+ uregs.xsp = sp;
+ uregs.xbp = fp;
+ return compute_cfa(&uregs,
+ min_accessible, max_accessible, di, cfsi);
+ }
+# else
+ return 0; /* indicates failure */
+# endif
}
-/* The main function for DWARF2/3 CFI-based stack unwinding.
- Given an IP/SP/FP triple, produce the IP/SP/FP values for the
- previous frame, if possible. */
-/* Returns True if OK. If not OK, *{ip,sp,fp}P are not changed. */
-/* NOTE: this function may rearrange the order of entries in the
- DebugInfo list. */
-Bool VG_(use_CF_info) ( /*MOD*/Addr* ipP,
- /*MOD*/Addr* spP,
- /*MOD*/Addr* fpP,
+/* The main function for DWARF2/3 CFI-based stack unwinding. Given a
+ set of registers in UREGS, modify it to hold the register values
+ for the previous frame, if possible. Returns True if successful.
+ If not successful, *UREGS is not changed.
+
+ For x86 and amd64, the unwound registers are: {E,R}IP,
+ {E,R}SP, {E,R}BP.
+
+ For arm, the unwound registers are: R11 R12 R13 R14 R15.
+*/
+Bool VG_(use_CF_info) ( /*MOD*/D3UnwindRegs* uregsHere,
Addr min_accessible,
Addr max_accessible )
{
Bool ok;
DebugInfo* di;
DiCfSI* cfsi = NULL;
- Addr cfa, ipHere, spHere, fpHere, ipPrev, spPrev, fpPrev;
+ Addr cfa, ipHere = 0;
CFSICacheEnt* ce;
CfiExprEvalContext eec;
+ D3UnwindRegs uregsPrev;
- ce = cfsi_cache__find(*ipP);
+# if defined(VGA_x86) || defined(VGA_amd64)
+ ipHere = uregsHere->xip;
+# elif defined(VGA_arm)
+ ipHere = uregsHere->r15;
+# elif defined(VGA_ppc32) || defined(VGA_ppc64)
+# else
+# error "Unknown arch"
+# endif
+ ce = cfsi_cache__find(ipHere);
if (UNLIKELY(ce == NULL))
return False; /* no info. Nothing we can do. */
@@ -2123,15 +2171,11 @@
ML_(ppDiCfSI)(di->cfsi_exprs, cfsi);
}
- ipPrev = spPrev = fpPrev = 0;
+ VG_(memset)(&uregsPrev, 0, sizeof(uregsPrev));
- ipHere = *ipP;
- spHere = *spP;
- fpHere = *fpP;
-
/* First compute the CFA. */
- cfa = compute_cfa(ipHere, spHere, fpHere,
- min_accessible, max_accessible, di, cfsi);
+ cfa = compute_cfa(uregsHere,
+ min_accessible, max_accessible, di, cfsi);
if (UNLIKELY(cfa == 0))
return False;
@@ -2159,9 +2203,7 @@
case CFIR_EXPR: \
if (0) \
ML_(ppCfiExpr)(di->cfsi_exprs,_off); \
- eec.ipHere = ipHere; \
- eec.spHere = spHere; \
- eec.fpHere = fpHere; \
+ eec.uregs = uregsHere; \
eec.min_accessible = min_accessible; \
eec.max_accessible = max_accessible; \
ok = True; \
@@ -2173,15 +2215,24 @@
} \
} while (0)
- COMPUTE(ipPrev, ipHere, cfsi->ra_how, cfsi->ra_off);
- COMPUTE(spPrev, spHere, cfsi->sp_how, cfsi->sp_off);
- COMPUTE(fpPrev, fpHere, cfsi->fp_how, cfsi->fp_off);
+# if defined(VGA_x86) || defined(VGA_amd64)
+ COMPUTE(uregsPrev.xip, uregsHere->xip, cfsi->ra_how, cfsi->ra_off);
+ COMPUTE(uregsPrev.xsp, uregsPrev->xsp, cfsi->sp_how, cfsi->sp_off);
+ COMPUTE(uregsPrev.xbp, uregsPrev->xbp, cfsi->bp_how, cfsi->bp_off);
+# elif defined(VGA_arm)
+ COMPUTE(uregsPrev.r15, uregsHere->r15, cfsi->ra_how, cfsi->ra_off);
+ COMPUTE(uregsPrev.r14, uregsHere->r14, cfsi->r14_how, cfsi->r14_off);
+ COMPUTE(uregsPrev.r13, uregsHere->r13, cfsi->r13_how, cfsi->r13_off);
+ COMPUTE(uregsPrev.r12, uregsHere->r12, cfsi->r12_how, cfsi->r12_off);
+ COMPUTE(uregsPrev.r11, uregsHere->r11, cfsi->r11_how, cfsi->r11_off);
+# elif defined(VGA_ppc32) || defined(VGA_ppc64)
+# else
+# error "Unknown arch"
+# endif
# undef COMPUTE
- *ipP = ipPrev;
- *spP = spPrev;
- *fpP = fpPrev;
+ *uregsHere = uregsPrev;
return True;
}
Modified: trunk/coregrind/m_debuginfo/priv_storage.h
===================================================================
--- trunk/coregrind/m_debuginfo/priv_storage.h 2010-01-01 18:31:41 UTC (rev 10985)
+++ trunk/coregrind/m_debuginfo/priv_storage.h 2010-01-01 18:46:41 UTC (rev 10986)
@@ -97,55 +97,103 @@
/* --------------------- CF INFO --------------------- */
-/* A structure to summarise DWARF2/3 CFA info for the code address
- range [base .. base+len-1]. In short, if you know (sp,fp,ip) at
- some point and ip is in the range [base .. base+len-1], it tells
- you how to calculate (sp,fp) for the caller of the current frame
- and also ra, the return address of the current frame.
+/* DiCfSI: a structure to summarise DWARF2/3 CFA info for the code
+ address range [base .. base+len-1].
+ On x86 and amd64 ("IA"), if you know ({e,r}sp, {e,r}bp, {e,r}ip) at
+ some point and {e,r}ip is in the range [base .. base+len-1], it
+ tells you how to calculate ({e,r}sp, {e,r}bp) for the caller of the
+ current frame and also ra, the return address of the current frame.
+
First off, calculate CFA, the Canonical Frame Address, thusly:
cfa = case cfa_how of
- CFIC_SPREL -> sp + cfa_off
- CFIC_FPREL -> fp + cfa_off
- CFIR_EXPR -> expr whose index is in cfa_off
+ CFIC_IA_SPREL -> {e,r}sp + cfa_off
+ CFIC_IA_BPREL -> {e,r}bp + cfa_off
+ CFIR_IA_EXPR -> expr whose index is in cfa_off
- Once that is done, the previous frame's sp/fp values and this
- frame's ra value can be calculated like this:
+ Once that is done, the previous frame's {e,r}sp/{e,r}bp values and
+ this frame's {e,r}ra value can be calculated like this:
- old_sp/fp/ra
- = case sp/fp/ra_how of
+ old_{e,r}sp/{e,r}bp/ra
+ = case {e,r}sp/{e,r}bp/ra_how of
CFIR_UNKNOWN -> we don't know, sorry
CFIR_SAME -> same as it was before (sp/fp only)
- CFIR_CFAREL -> cfa + sp/fp/ra_off
- CFIR_MEMCFAREL -> *( cfa + sp/fp/ra_off )
- CFIR_EXPR -> expr whose index is in sp/fp/ra_off
+ CFIR_CFAREL -> cfa + sp/bp/ra_off
+ CFIR_MEMCFAREL -> *( cfa + sp/bp/ra_off )
+ CFIR_EXPR -> expr whose index is in sp/bp/ra_off
+
+ On ARM it's pretty much the same, except we have more registers to
+ keep track of:
+
+ cfa = case cfa_how of
+ CFIC_R13REL -> r13 + cfa_off
+ CFIC_R12REL -> r12 + cfa_off
+ CFIC_R11REL -> r11 + cfa_off
+ CFIR_EXPR -> expr whose index is in cfa_off
+
+ old_r14/r13/r12/r11/ra
+ = case r14/r13/r12/r11/ra_how of
+ CFIR_UNKNOWN -> we don't know, sorry
+ CFIR_SAME -> same as it was before (r14/r13/r12/r11 only)
+ CFIR_CFAREL -> cfa + r14/r13/r12/r11/ra_off
+ CFIR_MEMCFAREL -> *( cfa + r14/r13/r12/r11/ra_off )
+ CFIR_EXPR -> expr whose index is in r14/r13/r12/r11/ra_off
*/
-#define CFIC_SPREL ((UChar)1)
-#define CFIC_FPREL ((UChar)2)
-#define CFIC_EXPR ((UChar)3)
+#define CFIC_IA_SPREL ((UChar)1)
+#define CFIC_IA_BPREL ((UChar)2)
+#define CFIC_IA_EXPR ((UChar)3)
+#define CFIC_ARM_R13REL ((UChar)4)
+#define CFIC_ARM_R12REL ((UChar)5)
+#define CFIC_ARM_R11REL ((UChar)6)
+#define CFIC_EXPR ((UChar)7) /* all targets */
-#define CFIR_UNKNOWN ((UChar)4)
-#define CFIR_SAME ((UChar)5)
-#define CFIR_CFAREL ((UChar)6)
-#define CFIR_MEMCFAREL ((UChar)7)
-#define CFIR_EXPR ((UChar)8)
+#define CFIR_UNKNOWN ((UChar)64)
+#define CFIR_SAME ((UChar)65)
+#define CFIR_CFAREL ((UChar)66)
+#define CFIR_MEMCFAREL ((UChar)67)
+#define CFIR_EXPR ((UChar)68)
+#if defined(VGA_x86) || defined(VGA_amd64)
typedef
struct {
Addr base;
UInt len;
- UChar cfa_how; /* a CFIC_ value */
+ UChar cfa_how; /* a CFIC_IA value */
UChar ra_how; /* a CFIR_ value */
UChar sp_how; /* a CFIR_ value */
- UChar fp_how; /* a CFIR_ value */
+ UChar bp_how; /* a CFIR_ value */
Int cfa_off;
Int ra_off;
Int sp_off;
- Int fp_off;
+ Int bp_off;
}
DiCfSI;
+#elif defined(VGA_arm)
+typedef
+ struct {
+ Addr base;
+ UInt len;
+ UChar cfa_how; /* a CFIC_ value */
+ UChar ra_how; /* a CFIR_ value */
+ UChar r14_how; /* a CFIR_ value */
+ UChar r13_how; /* a CFIR_ value */
+ UChar r12_how; /* a CFIR_ value */
+ UChar r11_how; /* a CFIR_ value */
+ Int cfa_off;
+ Int ra_off;
+ Int r14_off;
+ Int r13_off;
+ Int r12_off;
+ Int r11_off;
+ }
+ DiCfSI;
+#elif defined(VGA_ppc32) || defined(VGA_ppc64)
+typedef void DiCfSI;
+#else
+# error "Unknown arch"
+#endif
typedef
@@ -159,9 +207,13 @@
typedef
enum {
- Creg_SP=0x213,
- Creg_FP,
- Creg_IP
+ Creg_IA_SP=0x213,
+ Creg_IA_BP,
+ Creg_IA_IP,
+ Creg_ARM_R13,
+ Creg_ARM_R12,
+ Creg_ARM_R15,
+ Creg_ARM_R14
}
CfiReg;
Modified: trunk/coregrind/m_debuginfo/readdwarf.c
===================================================================
--- trunk/coregrind/m_debuginfo/readdwarf.c 2010-01-01 18:31:41 UTC (rev 10985)
+++ trunk/coregrind/m_debuginfo/readdwarf.c 2010-01-01 18:46:41 UTC (rev 10986)
@@ -1783,6 +1783,10 @@
# define FP_REG 1
# define SP_REG 1
# define RA_REG_DEFAULT 65
+#elif defined(VGP_arm_linux)
+# define FP_REG 12
+# define SP_REG 13
+# define RA_REG_DEFAULT 14 //???
#elif defined(VGP_x86_darwin)
# define FP_REG 5
# define SP_REG 4
@@ -2012,6 +2016,15 @@
/* ctx->state[j].reg[i].arg = 0; */
}
}
+# if defined(VGA_arm)
+ /* All callee-saved registers (or at least the ones we are
+ summarising for) should start out as RR_Same, on ARM. */
+ ctx->state[j].reg[11].tag = RR_Same;
+ /* ctx->state[j].reg[13].tag = RR_Same; */
+ ctx->state[j].reg[14].tag = RR_Same;
+ ctx->state[j].reg[12].tag = RR_Same;
+ /* this can't be right though: R12 (IP) isn't callee saved. */
+# endif
}
@@ -2031,16 +2044,7 @@
static void initCfiSI ( DiCfSI* si )
{
- si->base = 0;
- si->len = 0;
- si->cfa_how = 0;
- si->ra_how = 0;
- si->sp_how = 0;
- si->fp_how = 0;
- si->cfa_off = 0;
- si->ra_off = 0;
- si->sp_off = 0;
- si->fp_off = 0;
+ VG_(memset)(si, 0, sizeof(*si));
}
@@ -2072,7 +2076,7 @@
if (ctx->state_sp >= N_RR_STACK) { why = 9; goto failed; }
ctxs = &ctx->state[ctx->state_sp];
- /* How to generate the CFA */
+ /* First, summarise the method for generating the CFA */
if (!ctxs->cfa_is_regoff) {
/* it was set by DW_CFA_def_cfa_expression; try to convert */
XArray *src, *dst;
@@ -2093,15 +2097,37 @@
si->cfa_off = conv;
if (0 && debuginfo->ddump_frames)
ML_(ppCfiExpr)(dst, conv);
- } else
+ }
+ else
if (ctxs->cfa_is_regoff && ctxs->cfa_reg == SP_REG) {
- si->cfa_how = CFIC_SPREL;
si->cfa_off = ctxs->cfa_off;
- } else
+# if defined(VGA_x86) || defined(VGA_amd64)
+ si->cfa_how = CFIC_IA_SPREL;
+# elif defined(VGA_arm)
+ si->cfa_how = CFIC_ARM_R13REL;
+# else
+ si->cfa_how = 0; /* invalid */
+# endif
+ }
+ else
if (ctxs->cfa_is_regoff && ctxs->cfa_reg == FP_REG) {
- si->cfa_how = CFIC_FPREL;
si->cfa_off = ctxs->cfa_off;
- } else {
+# if defined(VGA_x86) || defined(VGA_amd64)
+ si->cfa_how = CFIC_IA_BPREL;
+# elif defined(VGA_arm)
+ si->cfa_how = CFIC_ARM_R12REL;
+# else
+ si->cfa_how = 0; /* invalid */
+# endif
+ }
+# if defined(VGA_arm)
+ else
+ if (ctxs->cfa_is_regoff && ctxs->cfa_reg == 11/*??_REG*/) {
+ si->cfa_how = CFIC_ARM_R11REL;
+ si->cfa_off = ctxs->cfa_off;
+ }
+# endif
+ else {
why = 1;
goto failed;
}
@@ -2143,12 +2169,15 @@
why = 2; goto failed; /* otherwise give up */ \
}
+# if defined(VGA_x86) || defined(VGA_amd64)
+
+ /* --- entire tail of this fn specialised for x86/amd64 --- */
+
SUMMARISE_HOW(si->ra_how, si->ra_off,
ctxs->reg[ctx->ra_reg] );
SUMMARISE_HOW(si->fp_how, si->fp_off,
ctxs->reg[FP_REG] );
-# undef SUMMARISE_HOW
/* on x86/amd64, it seems the old %{e,r}sp value before the call is
always the same as the CFA. Therefore ... */
@@ -2176,6 +2205,66 @@
return True;
+# elif defined(VGA_arm)
+
+ /* ---- entire tail of this fn specialised for arm ---- */
+
+ SUMMARISE_HOW(si->r14_how, si->r14_off,
+ ctxs->reg[14] );
+
+ //SUMMARISE_HOW(si->r13_how, si->r13_off,
+ // ctxs->reg[13] );
+
+ SUMMARISE_HOW(si->r12_how, si->r12_off,
+ ctxs->reg[FP_REG] );
+
+ SUMMARISE_HOW(si->r11_how, si->r11_off,
+ ctxs->reg[11/*FP_REG*/] );
+
+ if (ctxs->reg[14/*LR*/].tag == RR_Same
+ && ctx->ra_reg == 14/*as we expect it always to be*/) {
+ /* Generate a trivial CfiExpr, which merely says "r14". First
+ ensure this DebugInfo has a cfsi_expr array in which to park
+ it. */
+ if (!debuginfo->cfsi_exprs)
+ debuginfo->cfsi_exprs = VG_(newXA)( ML_(dinfo_zalloc),
+ "di.ccCt.2a",
+ ML_(dinfo_free),
+ sizeof(CfiExpr) );
+ si->ra_off = ML_(CfiExpr_CfiReg)( debuginfo->cfsi_exprs,
+ Creg_ARM_R14);
+ si->ra_how = CFIR_EXPR;
+ } else {
+ /* Just summarise it in the normal way */
+ SUMMARISE_HOW(si->ra_how, si->ra_off,
+ ctxs->reg[ctx->ra_reg] );
+ }
+
+ /* on arm, it seems the old r13 (SP) value before the call is
+ always the same as the CFA. Therefore ... */
+ si->r13_how = CFIR_CFAREL;
+ si->r13_off = 0;
+
+ /* bogus looking range? Note, we require that the difference is
+ representable in 32 bits. */
+ if (loc_start >= ctx->loc)
+ { why = 4; goto failed; }
+ if (ctx->loc - loc_start > 10000000 /* let's say */)
+ { why = 5; goto failed; }
+
+ si->base = loc_start + ctx->initloc;
+ si->len = (UInt)(ctx->loc - loc_start);
+
+ return True;
+
+
+# elif defined(VGA_ppc32) || defined(VGA_ppc64)
+# else
+# error "Unknown arch"
+# endif
+
+# undef SUMMARISE_HOW
+
failed:
if (VG_(clo_verbosity) > 2 || debuginfo->trace_cfi) {
VG_(message)(Vg_DebugMsg,
@@ -2228,12 +2317,24 @@
case Cex_DwReg:
/* This is the only place where the conversion can fail. */
dwreg = src->Cex.DwReg.reg;
+# if defined(VGA_x86) || defined(VGA_amd64)
if (dwreg == SP_REG)
return ML_(CfiExpr_CfiReg)( dstxa, Creg_SP );
if (dwreg == FP_REG)
return ML_(CfiExpr_CfiReg)( dstxa, Creg_FP );
if (dwreg == srcuc->ra_reg)
return ML_(CfiExpr_CfiReg)( dstxa, Creg_IP ); /* correct? */
+# elif defined(VGA_arm)
+ if (dwreg == SP_REG)
+ return ML_(CfiExpr_CfiReg)( dstxa, Creg_ARM_R13 );
+ if (dwreg == FP_REG)
+ return ML_(CfiExpr_CfiReg)( dstxa, Creg_ARM_R12 );
+ if (dwreg == srcuc->ra_reg)
+ return ML_(CfiExpr_CfiReg)( dstxa, Creg_ARM_R15 ); /* correct? */
+# elif defined(VGA_ppc32) || defined(VGA_ppc64)
+# else
+# error "Unknown arch"
+# endif
/* else we must fail - can't represent the reg */
return -1;
default:
Modified: trunk/coregrind/m_debuginfo/readelf.c
===================================================================
--- trunk/coregrind/m_debuginfo/readelf.c 2010-01-01 18:31:41 UTC (rev 10985)
+++ trunk/coregrind/m_debuginfo/readelf.c 2010-01-01 18:46:41 UTC (rev 10986)
@@ -1642,7 +1642,8 @@
}
/* PLT is different on different platforms, it seems. */
-# if defined(VGP_x86_linux) || defined(VGP_amd64_linux)
+# if defined(VGP_x86_linux) || defined(VGP_amd64_linux) \
+ || defined(VGP_arm_linux)
/* Accept .plt where mapped as rx (code) */
if (0 == VG_(strcmp)(name, ".plt")) {
if (inrx && size > 0 && !di->plt_present) {
Modified: trunk/coregrind/m_debuginfo/storage.c
===================================================================
--- trunk/coregrind/m_debuginfo/storage.c 2010-01-01 18:31:41 UTC (rev 10985)
+++ trunk/coregrind/m_debuginfo/storage.c 2010-01-01 18:46:41 UTC (rev 10986)
@@ -126,12 +126,21 @@
VG_(printf)("[%#lx .. %#lx]: ", si->base,
si->base + (UWord)si->len - 1);
switch (si->cfa_how) {
- case CFIC_SPREL:
+ case CFIC_IA_SPREL:
VG_(printf)("let cfa=oldSP+%d", si->cfa_off);
break;
- case CFIC_FPREL:
- VG_(printf)("let cfa=oldFP+%d", si->cfa_off);
+ case CFIC_IA_BPREL:
+ VG_(printf)("let cfa=oldBP+%d", si->cfa_off);
break;
+ case CFIC_ARM_R13REL:
+ VG_(printf)("let cfa=oldR13+%d", si->cfa_off);
+ break;
+ case CFIC_ARM_R12REL:
+ VG_(printf)("let cfa=oldR12+%d", si->cfa_off);
+ break;
+ case CFIC_ARM_R11REL:
+ VG_(printf)("let cfa=oldR11+%d", si->cfa_off);
+ break;
case CFIC_EXPR:
VG_(printf)("let cfa={");
ML_(ppCfiExpr)(exprs, si->cfa_off);
@@ -143,10 +152,24 @@
VG_(printf)(" in RA=");
SHOW_HOW(si->ra_how, si->ra_off);
+# if defined(VGA_x86) || defined(VGA_amd64)
VG_(printf)(" SP=");
SHOW_HOW(si->sp_how, si->sp_off);
- VG_(printf)(" FP=");
- SHOW_HOW(si->fp_how, si->fp_off);
+ VG_(printf)(" BP=");
+ SHOW_HOW(si->bp_how, si->bp_off);
+# elif defined(VGA_arm)
+ VG_(printf)(" R14=");
+ SHOW_HOW(si->r14_how, si->r14_off);
+ VG_(printf)(" R13=");
+ SHOW_HOW(si->r13_how, si->r13_off);
+ VG_(printf)(" R12=");
+ SHOW_HOW(si->r12_how, si->r12_off);
+ VG_(printf)(" R11=");
+ SHOW_HOW(si->r11_how, si->r11_off);
+# elif defined(VGA_ppc32) || defined(VGA_ppc64)
+# else
+# error "Unknown arch"
+# endif
VG_(printf)("\n");
# undef SHOW_HOW
}
@@ -574,9 +597,13 @@
static void ppCfiReg ( CfiReg reg )
{
switch (reg) {
- case Creg_SP: VG_(printf)("SP"); break;
- case Creg_FP: VG_(printf)("FP"); break;
- case Creg_IP: VG_(printf)("IP"); break;
+ case Creg_IA_SP: VG_(printf)("xSP"); break;
+ case Creg_IA_BP: VG_(printf)("xBP"); break;
+ case Creg_IA_IP: VG_(printf)("xIP"); break;
+ case Creg_ARM_R13: VG_(printf)("R13"); break;
+ case Creg_ARM_R12: VG_(printf)("R12"); break;
+ case Creg_ARM_R15: VG_(printf)("R15"); break;
+ case Creg_ARM_R14: VG_(printf)("R14"); break;
default: vg_assert(0);
}
}
Modified: trunk/coregrind/m_stacktrace.c
===================================================================
--- trunk/coregrind/m_stacktrace.c 2010-01-01 18:31:41 UTC (rev 10985)
+++ trunk/coregrind/m_stacktrace.c 2010-01-01 18:46:41 UTC (rev 10986)
@@ -574,12 +574,13 @@
vg_assert(sizeof(Addr) == sizeof(UWord));
vg_assert(sizeof(Addr) == sizeof(void*));
- Addr r15 = startRegs->r_pc;
- Addr r13 = startRegs->r_sp;
- Addr r14 = startRegs->misc.ARM.r14;
- Addr r12 = startRegs->misc.ARM.r12;
- Addr r11 = startRegs->misc.ARM.r11;
- Addr fp_min = r13;
+ D3UnwindRegs uregs;
+ uregs.r15 = startRegs->r_pc;
+ uregs.r14 = startRegs->misc.ARM.r14;
+ uregs.r13 = startRegs->r_sp;
+ uregs.r12 = startRegs->misc.ARM.r12;
+ uregs.r11 = startRegs->misc.ARM.r11;
+ Addr fp_min = uregs.r13;
/* Snaffle IPs from the client's stack into ips[0 .. max_n_ips-1],
stopping when the trail goes cold, which we guess to be
@@ -595,7 +596,8 @@
if (debug)
VG_(printf)("max_n_ips=%d fp_min=0x%lx fp_max_orig=0x%lx, "
"fp_max=0x%lx r15=0x%lx r13=0x%lx\n",
- max_n_ips, fp_min, fp_max_orig, fp_max, r15, r13);
+ max_n_ips, fp_min, fp_max_orig, fp_max,
+ uregs.r15, uregs.r13);
/* Assertion broken before main() is reached in pthreaded programs; the
* offending stack traces only have one item. --njn, 2002-aug-16 */
@@ -605,36 +607,38 @@
if (fp_min + 512 >= fp_max) {
/* If the stack limits look bogus, don't poke around ... but
don't bomb out either. */
- if (sps) sps[0] = r13;
+ if (sps) sps[0] = uregs.r13;
if (fps) fps[0] = 0;
- ips[0] = r15;
+ ips[0] = uregs.r15;
return 1;
}
/* */
- if (sps) sps[0] = r13;
+ if (sps) sps[0] = uregs.r13;
if (fps) fps[0] = 0;
- ips[0] = r15;
+ ips[0] = uregs.r15;
i = 1;
/* Loop unwinding the stack. */
while (True) {
if (debug) {
- VG_(printf)("i: %d, r15: 0x%lx, r13: 0x%lx\n",i, r15, r13);
+ VG_(printf)("i: %d, r15: 0x%lx, r13: 0x%lx\n",
+ i, uregs.r15, uregs.r13);
}
if (i >= max_n_ips)
break;
- if (VG_(use_CF_info)( &r15, &r14, &r13, &r12, &r11, fp_min, fp_max )) {
- if (sps) sps[i] = r13;
+ if (VG_(use_CF_info)( &uregs, fp_min, fp_max )) {
+ if (sps) sps[i] = uregs.r13;
if (fps) fps[i] = 0;
- ips[i++] = r15 -1;
+ ips[i++] = uregs.r15 -1;
if (debug)
- VG_(printf)("USING CFI: r15: 0x%lx, r13: 0x%lx\n", r15, r13);
- r15 = r15 - 1;
+ VG_(printf)("USING CFI: r15: 0x%lx, r13: 0x%lx\n",
+ uregs.r15, uregs.r13);
+ uregs.r15 = uregs.r15 - 1;
continue;
}
/* No luck. We have to give up. */
Modified: trunk/coregrind/pub_core_debuginfo.h
===================================================================
--- trunk/coregrind/pub_core_debuginfo.h 2010-01-01 18:31:41 UTC (rev 10985)
+++ trunk/coregrind/pub_core_debuginfo.h 2010-01-01 18:46:41 UTC (rev 10986)
@@ -106,13 +106,32 @@
extern
Bool VG_(get_fnname_no_cxx_demangle) ( Addr a, Char* buf, Int nbuf );
-/* Use DWARF2/3 CFA information to do one step of stack unwinding. */
-extern Bool VG_(use_CF_info) ( /*MOD*/Addr* ipP,
- /*MOD*/Addr* spP,
- /*MOD*/Addr* fpP,
+
+/* Use DWARF2/3 CFA information to do one step of stack unwinding.
+ D3UnwindRegs holds the current register values, and is
+ arch-specific. Note that the x86 and amd64 definitions are shared
+ and so the regs are named 'xip' etc rather than 'eip' and 'rip'. */
+#if defined(VGA_amd64) || defined(VGA_x86)
+typedef
+ struct { Addr xip; Addr xsp; Addr xbp; }
+ D3UnwindRegs;
+#elif defined(VGA_arm)
+typedef
+ struct { Addr r15; Addr r14; Addr r13; Addr r12; Addr r11; }
+ D3UnwindRegs;
+#elif defined(VGA_ppc32) || defined(VGA_ppc64)
+typedef
+ void
+ D3UnwindRegs;
+#else
+# error "Unsupported arch"
+#endif
+
+extern Bool VG_(use_CF_info) ( /*MOD*/D3UnwindRegs* uregs,
Addr min_accessible,
Addr max_accessible );
+
/* Use MSVC FPO data to do one step of stack unwinding. */
extern Bool VG_(use_FPO_info) ( /*MOD*/Addr* ipP,
/*MOD*/Addr* spP,
|
|
From: Bart V. A. <bar...@gm...> - 2010-01-01 18:39:28
|
On Fri, Jan 1, 2010 at 7:31 PM, <sv...@va...> wrote: > Author: sewardj > Date: 2010-01-01 18:30:59 +0000 (Fri, 01 Jan 2010) > New Revision: 10984 > > Log: > Don't use -Wdeclaration-after-statement. We long since abandoned any > pretense of being buildable with gcc prior to 3.0, hence there's no > point in having this flag. Hello Julian, First of all, my best wishes for the new year 2010. Regarding r10984: ANSI C89 and C90 (but not C99) require that declarations come before statements. Giving up -Wdeclaration-after-statement also means giving up C89 and C90 conformance. Bart. |
|
From: <sv...@va...> - 2010-01-01 18:37:42
|
Author: sewardj
Date: 2010-01-01 18:31:41 +0000 (Fri, 01 Jan 2010)
New Revision: 10985
Log:
Make Callgrind, DRD and Ptrcheck build on arm-linux.
Modified:
trunk/callgrind/Makefile.am
trunk/drd/drd_bitmap.h
trunk/drd/drd_load_store.c
trunk/exp-ptrcheck/h_main.c
trunk/exp-ptrcheck/pc_main.c
Modified: trunk/callgrind/Makefile.am
===================================================================
--- trunk/callgrind/Makefile.am 2010-01-01 18:30:59 UTC (rev 10984)
+++ trunk/callgrind/Makefile.am 2010-01-01 18:31:41 UTC (rev 10985)
@@ -48,8 +48,9 @@
threads.c \
../cachegrind/cg-x86-amd64.c \
../cachegrind/cg-ppc32.c \
- ../cachegrind/cg-ppc64.c
-
+ ../cachegrind/cg-ppc64.c \
+ ../cachegrind/cg-arm.c
+
CALLGRIND_CFLAGS_COMMON = -I$(top_srcdir)/cachegrind
callgrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_SOURCES = \
Modified: trunk/drd/drd_bitmap.h
===================================================================
--- trunk/drd/drd_bitmap.h 2010-01-01 18:30:59 UTC (rev 10984)
+++ trunk/drd/drd_bitmap.h 2010-01-01 18:31:41 UTC (rev 10985)
@@ -134,7 +134,7 @@
#define BITS_PER_UWORD (8U * sizeof(UWord))
/** Log2 of BITS_PER_UWORD. */
-#if defined(VGA_x86) || defined(VGA_ppc32)
+#if defined(VGA_x86) || defined(VGA_ppc32) || defined(VGA_arm)
#define BITS_PER_BITS_PER_UWORD 5
#elif defined(VGA_amd64) || defined(VGA_ppc64)
#define BITS_PER_BITS_PER_UWORD 6
Modified: trunk/drd/drd_load_store.c
===================================================================
--- trunk/drd/drd_load_store.c 2010-01-01 18:30:59 UTC (rev 10984)
+++ trunk/drd/drd_load_store.c 2010-01-01 18:31:41 UTC (rev 10985)
@@ -43,9 +43,11 @@
#elif defined(VGA_amd64)
#define STACK_POINTER_OFFSET OFFSET_amd64_RSP
#elif defined(VGA_ppc32)
-#define STACK_POINTER_OFFSET ((OFFSET_ppc32_GPR0 + OFFSET_ppc32_GPR2) / 2)
+#define STACK_POINTER_OFFSET OFFSET_ppc32_GPR1
#elif defined(VGA_ppc64)
-#define STACK_POINTER_OFFSET ((OFFSET_ppc64_GPR0 + OFFSET_ppc64_GPR2) / 2)
+#define STACK_POINTER_OFFSET OFFSET_ppc64_GPR1
+#elif defined(VGA_arm)
+#define STACK_POINTER_OFFSET OFFSET_arm_R13
#else
#error Unknown architecture.
#endif
Modified: trunk/exp-ptrcheck/h_main.c
===================================================================
--- trunk/exp-ptrcheck/h_main.c 2010-01-01 18:30:59 UTC (rev 10984)
+++ trunk/exp-ptrcheck/h_main.c 2010-01-01 18:31:41 UTC (rev 10985)
@@ -559,7 +559,7 @@
}
#endif
-#if defined(VGA_x86) || defined(VGA_ppc32)
+#if defined(VGA_x86) || defined(VGA_ppc32) || defined(VGA_arm)
# define SHMEM_SECMAP_MASK 0xFFFC
# define SHMEM_SECMAP_SHIFT 2
# define SHMEM_IS_WORD_ALIGNED(_a) VG_IS_4_ALIGNED(_a)
@@ -1271,27 +1271,32 @@
#if defined(VGA_x86)
# include "libvex_guest_x86.h"
-# define MC_SIZEOF_GUEST_STATE sizeof(VexGuestX86State)
+# define PC_SIZEOF_GUEST_STATE sizeof(VexGuestX86State)
#endif
#if defined(VGA_amd64)
# include "libvex_guest_amd64.h"
-# define MC_SIZEOF_GUEST_STATE sizeof(VexGuestAMD64State)
+# define PC_SIZEOF_GUEST_STATE sizeof(VexGuestAMD64State)
# define PC_OFF_FS_ZERO offsetof(VexGuestAMD64State,guest_FS_ZERO)
# define PC_SZB_FS_ZERO sizeof( ((VexGuestAMD64State*)0)->guest_FS_ZERO)
#endif
#if defined(VGA_ppc32)
# include "libvex_guest_ppc32.h"
-# define MC_SIZEOF_GUEST_STATE sizeof(VexGuestPPC32State)
+# define PC_SIZEOF_GUEST_STATE sizeof(VexGuestPPC32State)
#endif
#if defined(VGA_ppc64)
# include "libvex_guest_ppc64.h"
-# define MC_SIZEOF_GUEST_STATE sizeof(VexGuestPPC64State)
+# define PC_SIZEOF_GUEST_STATE sizeof(VexGuestPPC64State)
#endif
+#if defined(VGA_arm)
+# include "libvex_guest_arm.h"
+# define PC_SIZEOF_GUEST_STATE sizeof(VexGuestARMState)
+#endif
+
/* See description on definition of type IntRegInfo. */
static void get_IntRegInfo ( /*OUT*/IntRegInfo* iii, Int offset, Int szB )
{
@@ -1806,7 +1811,28 @@
tl_assert(0);
# undef GOF
+ /* -------------------- arm -------------------- */
+# elif defined(VGA_arm)
+
+# define GOF(_fieldname) \
+ (offsetof(VexGuestARMState,guest_##_fieldname))
+
+ Int o = offset;
+ Int sz = szB;
+ Bool is4 = sz == 4;
+ Bool is8 = sz == 8;
+
+ tl_assert(sz > 0);
+ tl_assert(host_is_big_endian());
+
+ /* Set default state to "does not intersect any int register". */
+ VG_(memset)( iii, 0, sizeof(*iii) );
+
+ VG_(printf)("get_IntRegInfo(arm):failing on (%d,%d)\n", o, sz);
+ tl_assert(0);
+
+
# else
# error "FIXME: not implemented for this architecture"
# endif
@@ -1888,6 +1914,14 @@
VG_(printf)("\n");
tl_assert(0);
+ /* -------------------- arm -------------------- */
+# elif defined(VGA_arm)
+ /* There are no rotating register sections on ARM. */
+ VG_(printf)("is_integer_guest_reg_array(arm): unhandled: ");
+ ppIRRegArray(arr);
+ VG_(printf)("\n");
+ tl_assert(0);
+
# else
# error "FIXME: not implemented for this architecture"
# endif
@@ -1939,7 +1973,7 @@
static void init_shadow_registers ( ThreadId tid )
{
Int i, wordSzB = sizeof(UWord);
- for (i = 0; i < MC_SIZEOF_GUEST_STATE-wordSzB; i += wordSzB) {
+ for (i = 0; i < PC_SIZEOF_GUEST_STATE-wordSzB; i += wordSzB) {
put_guest_intreg( tid, 1, i, wordSzB, (UWord)UNKNOWN );
}
}
@@ -2207,9 +2241,13 @@
ADD(0, __NR_dup);
ADD(0, __NR_dup2);
ADD(0, __NR_epoll_create);
+# if defined(__NR_epoll_create1)
ADD(0, __NR_epoll_create1);
+# endif
ADD(0, __NR_epoll_ctl);
+# if defined(__NR_epoll_pwait)
ADD(0, __NR_epoll_pwait);
+# endif
ADD(0, __NR_epoll_wait);
ADD(0, __NR_execve); /* presumably we see this because the call failed? */
ADD(0, __NR_exit); /* hmm, why are we still alive? */
@@ -2684,9 +2722,18 @@
# if defined(VGA_x86) || defined(VGA_ppc32)
tl_assert(sizeof(UWord) == 4);
return (a > 0x01000000UL && a < 0xFF000000UL);
+
# elif defined(VGA_amd64) || defined(VGA_ppc64)
tl_assert(sizeof(UWord) == 8);
return (a >= 16 * 0x10000UL && a < 0xFF00000000000000UL);
+
+# elif defined(VGA_arm)
+ /* Unfortunately arm-linux seems to load the exe at very low, at
+ 0x8000, so we have to assume any value above that is a pointer,
+ which is pretty dismal. */
+ tl_assert(sizeof(UWord) == 4);
+ return (a >= 0x00008000UL && a < 0xFF000000UL);
+
# else
# error "Unsupported architecture"
# endif
@@ -5280,7 +5327,7 @@
(void*)&pce );
/* Stay sane. These two should agree! */
- tl_assert(layout->total_sizeB == MC_SIZEOF_GUEST_STATE);
+ tl_assert(layout->total_sizeB == PC_SIZEOF_GUEST_STATE);
/* Copy verbatim any IR preamble preceding the first IMark */
Modified: trunk/exp-ptrcheck/pc_main.c
===================================================================
--- trunk/exp-ptrcheck/pc_main.c 2010-01-01 18:30:59 UTC (rev 10984)
+++ trunk/exp-ptrcheck/pc_main.c 2010-01-01 18:31:41 UTC (rev 10985)
@@ -127,10 +127,10 @@
sg_post_clo_init();
# if defined(VGA_x86) || defined(VGA_amd64)
/* nothing */
-# elif defined(VGA_ppc32) || defined(VGA_ppc64)
+# elif defined(VGA_ppc32) || defined(VGA_ppc64) || defined(VGA_arm)
if (VG_(clo_verbosity) >= 1 && sg_clo_enable_sg_checks) {
VG_(message)(Vg_UserMsg,
- "WARNING: exp-ptrcheck on ppc32/ppc64 platforms: "
+ "WARNING: exp-ptrcheck on ppc32/ppc64/arm platforms: "
"stack and global array\n");
VG_(message)(Vg_UserMsg,
"WARNING: checking is not currently supported. "
|
|
From: <sv...@va...> - 2010-01-01 18:31:14
|
Author: sewardj Date: 2010-01-01 18:30:59 +0000 (Fri, 01 Jan 2010) New Revision: 10984 Log: Don't use -Wdeclaration-after-statement. We long since abandoned any pretense of being buildable with gcc prior to 3.0, hence there's no point in having this flag. Modified: trunk/configure.in Modified: trunk/configure.in =================================================================== --- trunk/configure.in 2010-01-01 12:44:12 UTC (rev 10983) +++ trunk/configure.in 2010-01-01 18:30:59 UTC (rev 10984) @@ -1217,33 +1217,6 @@ fi -# does this compiler support -Wdeclaration-after-statement ? -AC_MSG_CHECKING([if gcc accepts -Wdeclaration-after-statement]) - -safe_CFLAGS=$CFLAGS -CFLAGS="-Wdeclaration-after-statement" - -AC_TRY_COMPILE(, [ - return 0; -], -[ -declaration_after_statement=yes -FLAG_WDECL_AFTER_STMT="-Wdeclaration-after-statement" -AC_MSG_RESULT([yes]) -], [ -declaration_after_statement=no -FLAG_WDECL_AFTER_STMT="" -AC_MSG_RESULT([no]) -]) -CFLAGS=$safe_CFLAGS - -AC_SUBST(FLAG_WDECL_AFTER_STMT) - -if test x$declaration_after_statement = xyes; then - CFLAGS="$CFLAGS -Wdeclaration-after-statement" -fi - - # does this compiler support -Wno-empty-body ? AC_MSG_CHECKING([if gcc accepts -Wno-empty-body]) |
|
From: <sv...@va...> - 2010-01-01 12:52:10
|
Author: sewardj
Date: 2010-01-01 12:44:12 +0000 (Fri, 01 Jan 2010)
New Revision: 10983
Log:
n-break build on x86-darwin following r10982.
Modified:
trunk/coregrind/m_cpuid.S
trunk/coregrind/m_signals.c
Modified: trunk/coregrind/m_cpuid.S
===================================================================
--- trunk/coregrind/m_cpuid.S 2010-01-01 11:59:33 UTC (rev 10982)
+++ trunk/coregrind/m_cpuid.S 2010-01-01 12:44:12 UTC (rev 10983)
@@ -149,7 +149,7 @@
ret
#endif
-#if defined(VGA_x86) || defined(VGA_amd64)
+#if defined(VGP_x86_linux) || defined(VGP_amd64_linux)
/* Let the linker know we don't need an executable stack */
.section .note.GNU-stack,"",@progbits
#endif
Modified: trunk/coregrind/m_signals.c
===================================================================
--- trunk/coregrind/m_signals.c 2010-01-01 11:59:33 UTC (rev 10982)
+++ trunk/coregrind/m_signals.c 2010-01-01 12:44:12 UTC (rev 10983)
@@ -54,7 +54,7 @@
a signal with kill, its expected to be synchronous: ie, the signal
will have been delivered by the time the syscall finishes.
- 4. Asyncronous, general signals. All other signals, sent by
+ 4. Asynchronous, general signals. All other signals, sent by
another process with kill. These are generally blocked, except for
two special cases: we poll for them each time we're about to run a
thread for a time quanta, and while running blocking syscalls.
@@ -490,14 +490,15 @@
return VG_(mk_SysRes_x86_darwin)( scclass, err ? True : False,
wHI, wLO );
}
- static inline Addr VG_UCONTEXT_LINK_REG( void* ucV ) {
- return 0; /* No, really. We have no LRs today. */
- }
- static inline Addr VG_UCONTEXT_FRAME_PTR( void* ucV ) {
- ucontext_t* uc = (ucontext_t*)ucV;
+ static inline
+ void VG_UCONTEXT_TO_UnwindStartRegs( UnwindStartRegs* srP,
+ void* ucV ) {
+ ucontext_t* uc = (ucontext_t*)(ucV);
struct __darwin_mcontext32* mc = uc->uc_mcontext;
struct __darwin_i386_thread_state* ss = &mc->__ss;
- return ss->__ebp;
+ srP->r_pc = (ULong)(ss->__eip);
+ srP->r_sp = (ULong)(ss->__esp);
+ srP->misc.X86.r_ebp = (UInt)(ss->__ebp);
}
#elif defined(VGP_amd64_darwin)
|
|
From: <sv...@va...> - 2010-01-01 11:59:48
|
Author: sewardj Date: 2010-01-01 11:59:33 +0000 (Fri, 01 Jan 2010) New Revision: 10982 Log: Merge from branches/ARM, all parts of the ARM-Linux port except for the changes to do with reading and using ELF and DWARF3 info. This breaks all targets except amd64-linux and x86-linux. Added: trunk/cachegrind/cg-arm.c trunk/coregrind/m_dispatch/dispatch-arm-linux.S trunk/coregrind/m_sigframe/sigframe-arm-linux.c trunk/coregrind/m_syswrap/syscall-arm-linux.S trunk/coregrind/m_syswrap/syswrap-arm-linux.c trunk/include/vki/vki-arm-linux.h trunk/include/vki/vki-posixtypes-arm-linux.h trunk/include/vki/vki-scnums-arm-linux.h trunk/none/tests/arm/ Modified: trunk/Makefile.all.am trunk/Makefile.tool.am trunk/Makefile.vex.am trunk/auxprogs/gsl16test trunk/cachegrind/Makefile.am trunk/cachegrind/cg_branchpred.c trunk/configure.in trunk/coregrind/Makefile.am trunk/coregrind/launcher-linux.c trunk/coregrind/m_aspacemgr/aspacemgr-common.c trunk/coregrind/m_aspacemgr/aspacemgr-linux.c trunk/coregrind/m_coredump/coredump-elf.c trunk/coregrind/m_cpuid.S trunk/coregrind/m_debugger.c trunk/coregrind/m_debuginfo/d3basics.c trunk/coregrind/m_debuglog.c trunk/coregrind/m_initimg/initimg-linux.c trunk/coregrind/m_libcassert.c trunk/coregrind/m_libcfile.c trunk/coregrind/m_libcproc.c trunk/coregrind/m_machine.c trunk/coregrind/m_main.c trunk/coregrind/m_redir.c trunk/coregrind/m_replacemalloc/vg_replace_malloc.c trunk/coregrind/m_scheduler/scheduler.c trunk/coregrind/m_signals.c trunk/coregrind/m_stacktrace.c trunk/coregrind/m_syscall.c trunk/coregrind/m_syswrap/priv_types_n_macros.h trunk/coregrind/m_syswrap/syswrap-amd64-linux.c trunk/coregrind/m_syswrap/syswrap-linux.c trunk/coregrind/m_syswrap/syswrap-main.c trunk/coregrind/m_syswrap/syswrap-x86-linux.c trunk/coregrind/m_trampoline.S trunk/coregrind/m_translate.c trunk/coregrind/m_transtab.c trunk/coregrind/pub_core_basics.h trunk/coregrind/pub_core_libcassert.h trunk/coregrind/pub_core_machine.h trunk/coregrind/pub_core_mallocfree.h trunk/coregrind/pub_core_stacktrace.h trunk/coregrind/pub_core_syscall.h trunk/coregrind/pub_core_threadstate.h trunk/coregrind/pub_core_trampoline.h trunk/coregrind/pub_core_transtab_asm.h trunk/docs/internals/register-uses.txt trunk/include/pub_tool_basics.h trunk/include/pub_tool_machine.h trunk/include/pub_tool_vkiscnums_asm.h trunk/include/valgrind.h trunk/include/vki/vki-linux.h trunk/memcheck/mc_machine.c trunk/memcheck/mc_translate.c trunk/memcheck/tests/atomic_incs.c trunk/tests/arch_test.c [... diff too large to include ...] |
|
From: Bart V. A. <bar...@gm...> - 2010-01-01 08:16:39
|
Nightly build on cellbuzz-native ( cellbuzz, ppc64, Fedora 7, native ) Started at 2010-01-01 02:00:06 EST Ended at 2010-01-01 02:50:34 EST Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... done Regression test results follow == 449 tests, 181 stderr failures, 55 stdout failures, 0 post failures == memcheck/tests/addressable (stdout) memcheck/tests/addressable (stderr) memcheck/tests/atomic_incs (stdout) memcheck/tests/atomic_incs (stderr) memcheck/tests/badaddrvalue (stdout) memcheck/tests/badaddrvalue (stderr) memcheck/tests/badfree-2trace (stderr) memcheck/tests/badfree (stderr) memcheck/tests/badjump (stderr) memcheck/tests/badjump2 (stderr) memcheck/tests/badloop (stderr) memcheck/tests/badpoll (stderr) memcheck/tests/badrw (stderr) memcheck/tests/brk2 (stderr) memcheck/tests/buflen_check (stderr) memcheck/tests/calloc-overflow (stderr) memcheck/tests/clientperm (stdout) memcheck/tests/clientperm (stderr) memcheck/tests/custom-overlap (stderr) memcheck/tests/custom_alloc (stderr) memcheck/tests/deep_templates (stdout) memcheck/tests/describe-block (stderr) memcheck/tests/doublefree (stderr) memcheck/tests/erringfds (stdout) memcheck/tests/erringfds (stderr) memcheck/tests/error_counts (stderr) memcheck/tests/errs1 (stderr) memcheck/tests/execve (stderr) memcheck/tests/execve2 (stderr) memcheck/tests/exitprog (stderr) memcheck/tests/file_locking (stderr) memcheck/tests/fprw (stderr) memcheck/tests/fwrite (stderr) memcheck/tests/inits (stderr) memcheck/tests/inline (stdout) memcheck/tests/inline (stderr) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cases-full (stderr) memcheck/tests/leak-cases-summary (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-pool-0 (stderr) memcheck/tests/leak-pool-1 (stderr) memcheck/tests/leak-pool-2 (stderr) memcheck/tests/leak-pool-3 (stderr) memcheck/tests/leak-pool-4 (stderr) memcheck/tests/leak-pool-5 (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/linux/brk (stderr) memcheck/tests/linux/capget (stderr) memcheck/tests/linux/lsframe1 (stderr) memcheck/tests/linux/lsframe2 (stderr) memcheck/tests/linux/sigqueue (stderr) memcheck/tests/linux/stack_changes (stdout) memcheck/tests/linux/stack_changes (stderr) memcheck/tests/linux/stack_switch (stderr) memcheck/tests/linux/timerfd-syscall (stdout) memcheck/tests/linux/timerfd-syscall (stderr) memcheck/tests/linux/with-space (stdout) memcheck/tests/linux/with-space (stderr) memcheck/tests/linux-syscalls-2007 (stderr) memcheck/tests/linux-syslog-syscall (stderr) memcheck/tests/long-supps (stderr) memcheck/tests/long_namespace_xml (stdout) memcheck/tests/long_namespace_xml (stderr) memcheck/tests/mallinfo (stderr) memcheck/tests/malloc1 (stderr) memcheck/tests/malloc2 (stderr) memcheck/tests/malloc3 (stdout) memcheck/tests/malloc3 (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/malloc_usable (stderr) memcheck/tests/manuel1 (stdout) memcheck/tests/manuel1 (stderr) memcheck/tests/manuel2 (stdout) memcheck/tests/manuel2 (stderr) memcheck/tests/manuel3 (stderr) memcheck/tests/match-overrun (stderr) memcheck/tests/memalign2 (stderr) memcheck/tests/memalign_test (stderr) memcheck/tests/memcmptest (stdout) memcheck/tests/memcmptest (stderr) memcheck/tests/mempool (stderr) memcheck/tests/metadata (stdout) memcheck/tests/metadata (stderr) memcheck/tests/mismatches (stderr) memcheck/tests/mmaptest (stderr) memcheck/tests/nanoleak2 (stderr) memcheck/tests/nanoleak_supp (stderr) memcheck/tests/new_nothrow (stderr) memcheck/tests/new_override (stdout) memcheck/tests/new_override (stderr) memcheck/tests/noisy_child (stderr) memcheck/tests/null_socket (stderr) memcheck/tests/origin1-yes (stderr) memcheck/tests/origin2-not-quite (stderr) memcheck/tests/origin3-no (stderr) memcheck/tests/origin4-many (stderr) memcheck/tests/origin5-bz2 (stdout) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/origin6-fp (stderr) memcheck/tests/overlap (stdout) memcheck/tests/overlap (stderr) memcheck/tests/partial_load_dflt (stderr) memcheck/tests/partial_load_ok (stderr) memcheck/tests/partiallydefinedeq (stdout) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/pdb-realloc (stderr) memcheck/tests/pdb-realloc2 (stdout) memcheck/tests/pdb-realloc2 (stderr) memcheck/tests/pipe (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/post-syscall (stderr) memcheck/tests/realloc1 (stderr) memcheck/tests/realloc2 (stderr) memcheck/tests/realloc3 (stderr) memcheck/tests/sh-mem-random (stdout) memcheck/tests/sh-mem-random (stderr) memcheck/tests/sh-mem (stderr) memcheck/tests/sigaltstack (stderr) memcheck/tests/sigkill (stderr) memcheck/tests/signal2 (stdout) memcheck/tests/signal2 (stderr) memcheck/tests/sigprocmask (stderr) memcheck/tests/str_tester (stderr) memcheck/tests/strchr (stderr) memcheck/tests/supp1 (stderr) memcheck/tests/supp2 (stderr) memcheck/tests/supp_unknown (stderr) memcheck/tests/suppfree (stderr) memcheck/tests/trivialleak (stderr) memcheck/tests/unit_libcbase (stderr) memcheck/tests/unit_oset (stdout) memcheck/tests/unit_oset (stderr) memcheck/tests/varinfo1 (stderr) memcheck/tests/varinfo2 (stderr) memcheck/tests/varinfo3 (stderr) memcheck/tests/varinfo4 (stdout) memcheck/tests/varinfo4 (stderr) memcheck/tests/varinfo5 (stderr) memcheck/tests/varinfo6 (stdout) memcheck/tests/varinfo6 (stderr) memcheck/tests/vcpu_bz2 (stdout) memcheck/tests/vcpu_bz2 (stderr) memcheck/tests/vcpu_fbench (stdout) memcheck/tests/vcpu_fbench (stderr) memcheck/tests/vcpu_fnfns (stdout) memcheck/tests/vcpu_fnfns (stderr) memcheck/tests/wrap1 (stdout) memcheck/tests/wrap1 (stderr) memcheck/tests/wrap2 (stdout) memcheck/tests/wrap2 (stderr) memcheck/tests/wrap3 (stdout) memcheck/tests/wrap3 (stderr) memcheck/tests/wrap4 (stdout) memcheck/tests/wrap4 (stderr) memcheck/tests/wrap5 (stdout) memcheck/tests/wrap5 (stderr) memcheck/tests/wrap6 (stdout) memcheck/tests/wrap6 (stderr) memcheck/tests/wrap7 (stdout) memcheck/tests/wrap7 (stderr) memcheck/tests/wrap8 (stdout) memcheck/tests/wrap8 (stderr) memcheck/tests/writev (stderr) memcheck/tests/xml1 (stdout) memcheck/tests/xml1 (stderr) cachegrind/tests/chdir (stderr) cachegrind/tests/clreq (stderr) cachegrind/tests/dlclose (stdout) cachegrind/tests/dlclose (stderr) cachegrind/tests/notpower2 (stderr) cachegrind/tests/wrap5 (stdout) cachegrind/tests/wrap5 (stderr) callgrind/tests/notpower2-hwpref (stderr) callgrind/tests/notpower2-use (stderr) callgrind/tests/notpower2-wb (stderr) callgrind/tests/notpower2 (stderr) callgrind/tests/simwork1 (stdout) callgrind/tests/simwork1 (stderr) callgrind/tests/simwork2 (stdout) callgrind/tests/simwork2 (stderr) callgrind/tests/simwork3 (stdout) callgrind/tests/simwork3 (stderr) lackey/tests/true (stderr) none/tests/empty-exe (stderr) none/tests/linux/mremap (stderr) none/tests/ppc32/jm-fp (stdout) none/tests/ppc32/jm-vmx (stdout) none/tests/ppc32/round (stdout) none/tests/ppc32/test_gx (stdout) none/tests/ppc32/testVMX (stdout) none/tests/ppc32/testVMX (stderr) none/tests/ppc64/jm-fp (stdout) none/tests/ppc64/jm-vmx (stdout) none/tests/ppc64/round (stdout) none/tests/shell_valid2 (stderr) none/tests/shell_valid3 (stderr) none/tests/shell_zerolength (stderr) helgrind/tests/bar_bad (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/tc06_two_races_xml (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) drd/tests/bar_bad (stderr) drd/tests/circular_buffer (stderr) drd/tests/pth_cancel_locked (stderr) drd/tests/pth_cleanup_handler (stderr) drd/tests/tc23_bogus_condwait (stderr) drd/tests/unit_bitmap (stderr) drd/tests/unit_vc (stderr) exp-ptrcheck/tests/bad_percentify (stdout) exp-ptrcheck/tests/bad_percentify (stderr) exp-ptrcheck/tests/base (stderr) exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/fp (stderr) exp-ptrcheck/tests/globalerr (stderr) exp-ptrcheck/tests/hackedbz2 (stdout) exp-ptrcheck/tests/hackedbz2 (stderr) exp-ptrcheck/tests/hp_bounds (stderr) exp-ptrcheck/tests/hp_dangle (stderr) exp-ptrcheck/tests/hsg (stdout) exp-ptrcheck/tests/hsg (stderr) exp-ptrcheck/tests/justify (stderr) exp-ptrcheck/tests/partial_bad (stderr) exp-ptrcheck/tests/partial_good (stderr) exp-ptrcheck/tests/preen_invars (stdout) exp-ptrcheck/tests/preen_invars (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) exp-ptrcheck/tests/realloc (stderr) exp-ptrcheck/tests/stackerr (stderr) exp-ptrcheck/tests/strcpy (stderr) exp-ptrcheck/tests/supp (stderr) exp-ptrcheck/tests/tricky (stderr) exp-ptrcheck/tests/unaligned (stderr) exp-ptrcheck/tests/zero (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... done Last 20 lines of verbose log follow echo make[4]: Entering directory `/net/home/bart/software/valgrind/nightly/valgrind-old/memcheck' gcc -DHAVE_CONFIG_H -I. -I.. -I.. -I../include -I../VEX/pub -DVGA_ppc64=1 -DVGO_linux=1 -DVGP_ppc64_linux=1 -m64 -O2 -g -Wall -Wmissing-prototypes -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-format-zero-length -fno-strict-aliasing -O2 -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -fno-stack-protector -MT memcheck_ppc64_linux-mc_translate.o -MD -MP -MF .deps/memcheck_ppc64_linux-mc_translate.Tpo -c -o memcheck_ppc64_linux-mc_translate.o `test -f 'mc_translate.c' || echo './'`mc_translate.c mc_translate.c: In function âexpr2vbits_Binopâ: mc_translate.c:2401: error: âIop_F64toI64â undeclared (first use in this function) mc_translate.c:2401: error: (Each undeclared identifier is reported only once mc_translate.c:2401: error: for each function it appears in.) mc_translate.c:2402: error: âIop_I64toF64â undeclared (first use in this function) mc_translate.c:2411: error: âIop_F64toI32â undeclared (first use in this function) mc_translate.c:2416: error: âIop_F64toI16â undeclared (first use in this function) mc_translate.c: In function âexpr2vbits_Unopâ: mc_translate.c:2669: error: âIop_I32toF64â undeclared (first use in this function) make[4]: *** [memcheck_ppc64_linux-mc_translate.o] Error 1 make[4]: Leaving directory `/net/home/bart/software/valgrind/nightly/valgrind-old/memcheck' make[3]: *** [check-recursive] Error 1 make[3]: Leaving directory `/net/home/bart/software/valgrind/nightly/valgrind-old/memcheck' make[2]: *** [check] Error 2 make[2]: Leaving directory `/net/home/bart/software/valgrind/nightly/valgrind-old/memcheck' make[1]: *** [check-recursive] Error 1 make[1]: Leaving directory `/net/home/bart/software/valgrind/nightly/valgrind-old' make: *** [check] Error 2 ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Fri Jan 1 02:15:15 2010 --- new.short Fri Jan 1 02:50:34 2010 *************** *** 6,27 **** ! Last 20 lines of verbose log follow echo ! make[4]: Entering directory `/net/home/bart/software/valgrind/nightly/valgrind-old/memcheck' ! gcc -DHAVE_CONFIG_H -I. -I.. -I.. -I../include -I../VEX/pub -DVGA_ppc64=1 -DVGO_linux=1 -DVGP_ppc64_linux=1 -m64 -O2 -g -Wall -Wmissing-prototypes -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-format-zero-length -fno-strict-aliasing -O2 -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -fno-stack-protector -MT memcheck_ppc64_linux-mc_translate.o -MD -MP -MF .deps/memcheck_ppc64_linux-mc_translate.Tpo -c -o memcheck_ppc64_linux-mc_translate.o `test -f 'mc_translate.c' || echo './'`mc_translate.c ! mc_translate.c: In function âexpr2vbits_Binopâ: ! mc_translate.c:2401: error: âIop_F64toI64â undeclared (first use in this function) ! mc_translate.c:2401: error: (Each undeclared identifier is reported only once ! mc_translate.c:2401: error: for each function it appears in.) ! mc_translate.c:2402: error: âIop_I64toF64â undeclared (first use in this function) ! mc_translate.c:2411: error: âIop_F64toI32â undeclared (first use in this function) ! mc_translate.c:2416: error: âIop_F64toI16â undeclared (first use in this function) ! mc_translate.c: In function âexpr2vbits_Unopâ: ! mc_translate.c:2669: error: âIop_I32toF64â undeclared (first use in this function) ! make[4]: *** [memcheck_ppc64_linux-mc_translate.o] Error 1 ! make[4]: Leaving directory `/net/home/bart/software/valgrind/nightly/valgrind-old/memcheck' ! make[3]: *** [check-recursive] Error 1 ! make[3]: Leaving directory `/net/home/bart/software/valgrind/nightly/valgrind-old/memcheck' ! make[2]: *** [check] Error 2 ! make[2]: Leaving directory `/net/home/bart/software/valgrind/nightly/valgrind-old/memcheck' ! make[1]: *** [check-recursive] Error 1 ! make[1]: Leaving directory `/net/home/bart/software/valgrind/nightly/valgrind-old' ! make: *** [check] Error 2 --- 6,246 ---- ! Regression test results follow ! ! == 449 tests, 181 stderr failures, 55 stdout failures, 0 post failures == ! memcheck/tests/addressable (stdout) ! memcheck/tests/addressable (stderr) ! memcheck/tests/atomic_incs (stdout) ! memcheck/tests/atomic_incs (stderr) ! memcheck/tests/badaddrvalue (stdout) ! memcheck/tests/badaddrvalue (stderr) ! memcheck/tests/badfree-2trace (stderr) ! memcheck/tests/badfree (stderr) ! memcheck/tests/badjump (stderr) ! memcheck/tests/badjump2 (stderr) ! memcheck/tests/badloop (stderr) ! memcheck/tests/badpoll (stderr) ! memcheck/tests/badrw (stderr) ! memcheck/tests/brk2 (stderr) ! memcheck/tests/buflen_check (stderr) ! memcheck/tests/calloc-overflow (stderr) ! memcheck/tests/clientperm (stdout) ! memcheck/tests/clientperm (stderr) ! memcheck/tests/custom-overlap (stderr) ! memcheck/tests/custom_alloc (stderr) ! memcheck/tests/deep_templates (stdout) ! memcheck/tests/describe-block (stderr) ! memcheck/tests/doublefree (stderr) ! memcheck/tests/erringfds (stdout) ! memcheck/tests/erringfds (stderr) ! memcheck/tests/error_counts (stderr) ! memcheck/tests/errs1 (stderr) ! memcheck/tests/execve (stderr) ! memcheck/tests/execve2 (stderr) ! memcheck/tests/exitprog (stderr) ! memcheck/tests/file_locking (stderr) ! memcheck/tests/fprw (stderr) ! memcheck/tests/fwrite (stderr) ! memcheck/tests/inits (stderr) ! memcheck/tests/inline (stdout) ! memcheck/tests/inline (stderr) ! memcheck/tests/leak-0 (stderr) ! memcheck/tests/leak-cases-full (stderr) ! memcheck/tests/leak-cases-summary (stderr) ! memcheck/tests/leak-cycle (stderr) ! memcheck/tests/leak-pool-0 (stderr) ! memcheck/tests/leak-pool-1 (stderr) ! memcheck/tests/leak-pool-2 (stderr) ! memcheck/tests/leak-pool-3 (stderr) ! memcheck/tests/leak-pool-4 (stderr) ! memcheck/tests/leak-pool-5 (stderr) ! memcheck/tests/leak-tree (stderr) ! memcheck/tests/linux/brk (stderr) ! memcheck/tests/linux/capget (stderr) ! memcheck/tests/linux/lsframe1 (stderr) ! memcheck/tests/linux/lsframe2 (stderr) ! memcheck/tests/linux/sigqueue (stderr) ! memcheck/tests/linux/stack_changes (stdout) ! memcheck/tests/linux/stack_changes (stderr) ! memcheck/tests/linux/stack_switch (stderr) ! memcheck/tests/linux/timerfd-syscall (stdout) ! memcheck/tests/linux/timerfd-syscall (stderr) ! memcheck/tests/linux/with-space (stdout) ! memcheck/tests/linux/with-space (stderr) ! memcheck/tests/linux-syscalls-2007 (stderr) ! memcheck/tests/linux-syslog-syscall (stderr) ! memcheck/tests/long-supps (stderr) ! memcheck/tests/long_namespace_xml (stdout) ! memcheck/tests/long_namespace_xml (stderr) ! memcheck/tests/mallinfo (stderr) ! memcheck/tests/malloc1 (stderr) ! memcheck/tests/malloc2 (stderr) ! memcheck/tests/malloc3 (stdout) ! memcheck/tests/malloc3 (stderr) ! memcheck/tests/malloc_free_fill (stderr) ! memcheck/tests/malloc_usable (stderr) ! memcheck/tests/manuel1 (stdout) ! memcheck/tests/manuel1 (stderr) ! memcheck/tests/manuel2 (stdout) ! memcheck/tests/manuel2 (stderr) ! memcheck/tests/manuel3 (stderr) ! memcheck/tests/match-overrun (stderr) ! memcheck/tests/memalign2 (stderr) ! memcheck/tests/memalign_test (stderr) ! memcheck/tests/memcmptest (stdout) ! memcheck/tests/memcmptest (stderr) ! memcheck/tests/mempool (stderr) ! memcheck/tests/metadata (stdout) ! memcheck/tests/metadata (stderr) ! memcheck/tests/mismatches (stderr) ! memcheck/tests/mmaptest (stderr) ! memcheck/tests/nanoleak2 (stderr) ! memcheck/tests/nanoleak_supp (stderr) ! memcheck/tests/new_nothrow (stderr) ! memcheck/tests/new_override (stdout) ! memcheck/tests/new_override (stderr) ! memcheck/tests/noisy_child (stderr) ! memcheck/tests/null_socket (stderr) ! memcheck/tests/origin1-yes (stderr) ! memcheck/tests/origin2-not-quite (stderr) ! memcheck/tests/origin3-no (stderr) ! memcheck/tests/origin4-many (stderr) ! memcheck/tests/origin5-bz2 (stdout) ! memcheck/tests/origin5-bz2 (stderr) ! memcheck/tests/origin6-fp (stderr) ! memcheck/tests/overlap (stdout) ! memcheck/tests/overlap (stderr) ! memcheck/tests/partial_load_dflt (stderr) ! memcheck/tests/partial_load_ok (stderr) ! memcheck/tests/partiallydefinedeq (stdout) ! memcheck/tests/partiallydefinedeq (stderr) ! memcheck/tests/pdb-realloc (stderr) ! memcheck/tests/pdb-realloc2 (stdout) ! memcheck/tests/pdb-realloc2 (stderr) ! memcheck/tests/pipe (stderr) ! memcheck/tests/pointer-trace (stderr) ! memcheck/tests/post-syscall (stderr) ! memcheck/tests/realloc1 (stderr) ! memcheck/tests/realloc2 (stderr) ! memcheck/tests/realloc3 (stderr) ! memcheck/tests/sh-mem-random (stdout) ! memcheck/tests/sh-mem-random (stderr) ! memcheck/tests/sh-mem (stderr) ! memcheck/tests/sigaltstack (stderr) ! memcheck/tests/sigkill (stderr) ! memcheck/tests/signal2 (stdout) ! memcheck/tests/signal2 (stderr) ! memcheck/tests/sigprocmask (stderr) ! memcheck/tests/str_tester (stderr) ! memcheck/tests/strchr (stderr) ! memcheck/tests/supp1 (stderr) ! memcheck/tests/supp2 (stderr) ! memcheck/tests/supp_unknown (stderr) ! memcheck/tests/suppfree (stderr) ! memcheck/tests/trivialleak (stderr) ! memcheck/tests/unit_libcbase (stderr) ! memcheck/tests/unit_oset (stdout) ! memcheck/tests/unit_oset (stderr) ! memcheck/tests/varinfo1 (stderr) ! memcheck/tests/varinfo2 (stderr) ! memcheck/tests/varinfo3 (stderr) ! memcheck/tests/varinfo4 (stdout) ! memcheck/tests/varinfo4 (stderr) ! memcheck/tests/varinfo5 (stderr) ! memcheck/tests/varinfo6 (stdout) ! memcheck/tests/varinfo6 (stderr) ! memcheck/tests/vcpu_bz2 (stdout) ! memcheck/tests/vcpu_bz2 (stderr) ! memcheck/tests/vcpu_fbench (stdout) ! memcheck/tests/vcpu_fbench (stderr) ! memcheck/tests/vcpu_fnfns (stdout) ! memcheck/tests/vcpu_fnfns (stderr) ! memcheck/tests/wrap1 (stdout) ! memcheck/tests/wrap1 (stderr) ! memcheck/tests/wrap2 (stdout) ! memcheck/tests/wrap2 (stderr) ! memcheck/tests/wrap3 (stdout) ! memcheck/tests/wrap3 (stderr) ! memcheck/tests/wrap4 (stdout) ! memcheck/tests/wrap4 (stderr) ! memcheck/tests/wrap5 (stdout) ! memcheck/tests/wrap5 (stderr) ! memcheck/tests/wrap6 (stdout) ! memcheck/tests/wrap6 (stderr) ! memcheck/tests/wrap7 (stdout) ! memcheck/tests/wrap7 (stderr) ! memcheck/tests/wrap8 (stdout) ! memcheck/tests/wrap8 (stderr) ! memcheck/tests/writev (stderr) ! memcheck/tests/xml1 (stdout) ! memcheck/tests/xml1 (stderr) ! cachegrind/tests/chdir (stderr) ! cachegrind/tests/clreq (stderr) ! cachegrind/tests/dlclose (stdout) ! cachegrind/tests/dlclose (stderr) ! cachegrind/tests/notpower2 (stderr) ! cachegrind/tests/wrap5 (stdout) ! cachegrind/tests/wrap5 (stderr) ! callgrind/tests/notpower2-hwpref (stderr) ! callgrind/tests/notpower2-use (stderr) ! callgrind/tests/notpower2-wb (stderr) ! callgrind/tests/notpower2 (stderr) ! callgrind/tests/simwork1 (stdout) ! callgrind/tests/simwork1 (stderr) ! callgrind/tests/simwork2 (stdout) ! callgrind/tests/simwork2 (stderr) ! callgrind/tests/simwork3 (stdout) ! callgrind/tests/simwork3 (stderr) ! lackey/tests/true (stderr) ! none/tests/empty-exe (stderr) ! none/tests/linux/mremap (stderr) ! none/tests/ppc32/jm-fp (stdout) ! none/tests/ppc32/jm-vmx (stdout) ! none/tests/ppc32/round (stdout) ! none/tests/ppc32/test_gx (stdout) ! none/tests/ppc32/testVMX (stdout) ! none/tests/ppc32/testVMX (stderr) ! none/tests/ppc64/jm-fp (stdout) ! none/tests/ppc64/jm-vmx (stdout) ! none/tests/ppc64/round (stdout) ! none/tests/shell_valid2 (stderr) ! none/tests/shell_valid3 (stderr) ! none/tests/shell_zerolength (stderr) ! helgrind/tests/bar_bad (stderr) ! helgrind/tests/hg05_race2 (stderr) ! helgrind/tests/tc06_two_races_xml (stderr) ! helgrind/tests/tc22_exit_w_lock (stderr) ! helgrind/tests/tc23_bogus_condwait (stderr) ! drd/tests/bar_bad (stderr) ! drd/tests/circular_buffer (stderr) ! drd/tests/pth_cancel_locked (stderr) ! drd/tests/pth_cleanup_handler (stderr) ! drd/tests/tc23_bogus_condwait (stderr) ! drd/tests/unit_bitmap (stderr) ! drd/tests/unit_vc (stderr) ! exp-ptrcheck/tests/bad_percentify (stdout) ! exp-ptrcheck/tests/bad_percentify (stderr) ! exp-ptrcheck/tests/base (stderr) ! exp-ptrcheck/tests/ccc (stderr) ! exp-ptrcheck/tests/fp (stderr) ! exp-ptrcheck/tests/globalerr (stderr) ! exp-ptrcheck/tests/hackedbz2 (stdout) ! exp-ptrcheck/tests/hackedbz2 (stderr) ! exp-ptrcheck/tests/hp_bounds (stderr) ! exp-ptrcheck/tests/hp_dangle (stderr) ! exp-ptrcheck/tests/hsg (stdout) ! exp-ptrcheck/tests/hsg (stderr) ! exp-ptrcheck/tests/justify (stderr) ! exp-ptrcheck/tests/partial_bad (stderr) ! exp-ptrcheck/tests/partial_good (stderr) ! exp-ptrcheck/tests/preen_invars (stdout) ! exp-ptrcheck/tests/preen_invars (stderr) ! exp-ptrcheck/tests/pth_create (stderr) ! exp-ptrcheck/tests/pth_specific (stderr) ! exp-ptrcheck/tests/realloc (stderr) ! exp-ptrcheck/tests/stackerr (stderr) ! exp-ptrcheck/tests/strcpy (stderr) ! exp-ptrcheck/tests/supp (stderr) ! exp-ptrcheck/tests/tricky (stderr) ! exp-ptrcheck/tests/unaligned (stderr) ! exp-ptrcheck/tests/zero (stderr) ! |
|
From: Tom H. <th...@cy...> - 2010-01-01 03:31:20
|
Nightly build on lloyd ( x86_64, Fedora 7 )
Started at 2010-01-01 03:05:04 GMT
Ended at 2010-01-01 03:31:00 GMT
Results differ from 24 hours ago
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... done
Running regression tests ... failed
Regression test results follow
== 531 tests, 2 stderr failures, 0 stdout failures, 0 post failures ==
memcheck/tests/x86-linux/scalar (stderr)
helgrind/tests/tc06_two_races_xml (stderr)
=================================================
== Results from 24 hours ago ==
=================================================
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... failed
Last 20 lines of verbose log follow echo
mv -f .deps/memcheck_amd64_linux-mc_main.Tpo .deps/memcheck_amd64_linux-mc_main.Po
gcc -DHAVE_CONFIG_H -I. -I.. -I.. -I../include -I../VEX/pub -DVGA_amd64=1 -DVGO_linux=1 -DVGP_amd64_linux=1 -m64 -fomit-frame-pointer -O2 -g -Wall -Wmissing-prototypes -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-format-zero-length -fno-strict-aliasing -O2 -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -fno-stack-protector -MT memcheck_amd64_linux-mc_translate.o -MD -MP -MF .deps/memcheck_amd64_linux-mc_translate.Tpo -c -o memcheck_amd64_linux-mc_translate.o `test -f 'mc_translate.c' || echo './'`mc_translate.c
mc_translate.c: In function 'expr2vbits_Binop':
mc_translate.c:2401: error: 'Iop_F64toI64' undeclared (first use in this function)
mc_translate.c:2401: error: (Each undeclared identifier is reported only once
mc_translate.c:2401: error: for each function it appears in.)
mc_translate.c:2402: error: 'Iop_I64toF64' undeclared (first use in this function)
mc_translate.c:2411: error: 'Iop_F64toI32' undeclared (first use in this function)
mc_translate.c:2416: error: 'Iop_F64toI16' undeclared (first use in this function)
mc_translate.c: In function 'expr2vbits_Unop':
mc_translate.c:2669: error: 'Iop_I32toF64' undeclared (first use in this function)
make[4]: *** [memcheck_amd64_linux-mc_translate.o] Error 1
make[4]: Leaving directory `/tmp/vgtest/2010-01-01/valgrind-old/memcheck'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/tmp/vgtest/2010-01-01/valgrind-old/memcheck'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/tmp/vgtest/2010-01-01/valgrind-old/memcheck'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/tmp/vgtest/2010-01-01/valgrind-old'
make: *** [all] Error 2
=================================================
== Difference between 24 hours ago and now ==
=================================================
*** old.short Fri Jan 1 03:08:56 2010
--- new.short Fri Jan 1 03:31:00 2010
***************
*** 3,26 ****
Configuring valgrind ... done
! Building valgrind ... failed
- Last 20 lines of verbose log follow echo
- mv -f .deps/memcheck_amd64_linux-mc_main.Tpo .deps/memcheck_amd64_linux-mc_main.Po
- gcc -DHAVE_CONFIG_H -I. -I.. -I.. -I../include -I../VEX/pub -DVGA_amd64=1 -DVGO_linux=1 -DVGP_amd64_linux=1 -m64 -fomit-frame-pointer -O2 -g -Wall -Wmissing-prototypes -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-format-zero-length -fno-strict-aliasing -O2 -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -fno-stack-protector -MT memcheck_amd64_linux-mc_translate.o -MD -MP -MF .deps/memcheck_amd64_linux-mc_translate.Tpo -c -o memcheck_amd64_linux-mc_translate.o `test -f 'mc_translate.c' || echo './'`mc_translate.c
- mc_translate.c: In function 'expr2vbits_Binop':
- mc_translate.c:2401: error: 'Iop_F64toI64' undeclared (first use in this function)
- mc_translate.c:2401: error: (Each undeclared identifier is reported only once
- mc_translate.c:2401: error: for each function it appears in.)
- mc_translate.c:2402: error: 'Iop_I64toF64' undeclared (first use in this function)
- mc_translate.c:2411: error: 'Iop_F64toI32' undeclared (first use in this function)
- mc_translate.c:2416: error: 'Iop_F64toI16' undeclared (first use in this function)
- mc_translate.c: In function 'expr2vbits_Unop':
- mc_translate.c:2669: error: 'Iop_I32toF64' undeclared (first use in this function)
- make[4]: *** [memcheck_amd64_linux-mc_translate.o] Error 1
- make[4]: Leaving directory `/tmp/vgtest/2010-01-01/valgrind-old/memcheck'
- make[3]: *** [all-recursive] Error 1
- make[3]: Leaving directory `/tmp/vgtest/2010-01-01/valgrind-old/memcheck'
- make[2]: *** [all] Error 2
- make[2]: Leaving directory `/tmp/vgtest/2010-01-01/valgrind-old/memcheck'
- make[1]: *** [all-recursive] Error 1
- make[1]: Leaving directory `/tmp/vgtest/2010-01-01/valgrind-old'
- make: *** [all] Error 2
--- 3,12 ----
Configuring valgrind ... done
! Building valgrind ... done
! Running regression tests ... failed
!
! Regression test results follow
!
! == 531 tests, 2 stderr failures, 0 stdout failures, 0 post failures ==
! memcheck/tests/x86-linux/scalar (stderr)
! helgrind/tests/tc06_two_races_xml (stderr)
|
|
From: Tom H. <th...@cy...> - 2010-01-01 03:25:27
|
Nightly build on mg ( x86_64, Fedora 9 )
Started at 2010-01-01 03:10:05 GMT
Ended at 2010-01-01 03:25:11 GMT
Results differ from 24 hours ago
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... done
Running regression tests ... failed
Regression test results follow
== 538 tests, 2 stderr failures, 0 stdout failures, 0 post failures ==
memcheck/tests/x86-linux/scalar (stderr)
helgrind/tests/tc06_two_races_xml (stderr)
=================================================
== Results from 24 hours ago ==
=================================================
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... failed
Last 20 lines of verbose log follow echo
mv -f .deps/memcheck_amd64_linux-mc_main.Tpo .deps/memcheck_amd64_linux-mc_main.Po
gcc -DHAVE_CONFIG_H -I. -I.. -I.. -I../include -I../VEX/pub -DVGA_amd64=1 -DVGO_linux=1 -DVGP_amd64_linux=1 -m64 -fomit-frame-pointer -O2 -g -Wall -Wmissing-prototypes -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-format-zero-length -fno-strict-aliasing -O2 -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -fno-stack-protector -MT memcheck_amd64_linux-mc_translate.o -MD -MP -MF .deps/memcheck_amd64_linux-mc_translate.Tpo -c -o memcheck_amd64_linux-mc_translate.o `test -f 'mc_translate.c' || echo './'`mc_translate.c
mc_translate.c: In function 'expr2vbits_Binop':
mc_translate.c:2401: error: 'Iop_F64toI64' undeclared (first use in this function)
mc_translate.c:2401: error: (Each undeclared identifier is reported only once
mc_translate.c:2401: error: for each function it appears in.)
mc_translate.c:2402: error: 'Iop_I64toF64' undeclared (first use in this function)
mc_translate.c:2411: error: 'Iop_F64toI32' undeclared (first use in this function)
mc_translate.c:2416: error: 'Iop_F64toI16' undeclared (first use in this function)
mc_translate.c: In function 'expr2vbits_Unop':
mc_translate.c:2669: error: 'Iop_I32toF64' undeclared (first use in this function)
make[4]: *** [memcheck_amd64_linux-mc_translate.o] Error 1
make[4]: Leaving directory `/tmp/vgtest/2010-01-01/valgrind-old/memcheck'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/tmp/vgtest/2010-01-01/valgrind-old/memcheck'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/tmp/vgtest/2010-01-01/valgrind-old/memcheck'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/tmp/vgtest/2010-01-01/valgrind-old'
make: *** [all] Error 2
=================================================
== Difference between 24 hours ago and now ==
=================================================
*** old.short Fri Jan 1 03:12:23 2010
--- new.short Fri Jan 1 03:25:11 2010
***************
*** 3,26 ****
Configuring valgrind ... done
! Building valgrind ... failed
- Last 20 lines of verbose log follow echo
- mv -f .deps/memcheck_amd64_linux-mc_main.Tpo .deps/memcheck_amd64_linux-mc_main.Po
- gcc -DHAVE_CONFIG_H -I. -I.. -I.. -I../include -I../VEX/pub -DVGA_amd64=1 -DVGO_linux=1 -DVGP_amd64_linux=1 -m64 -fomit-frame-pointer -O2 -g -Wall -Wmissing-prototypes -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-format-zero-length -fno-strict-aliasing -O2 -Wno-long-long -Wno-pointer-sign -Wdeclaration-after-statement -fno-stack-protector -MT memcheck_amd64_linux-mc_translate.o -MD -MP -MF .deps/memcheck_amd64_linux-mc_translate.Tpo -c -o memcheck_amd64_linux-mc_translate.o `test -f 'mc_translate.c' || echo './'`mc_translate.c
- mc_translate.c: In function 'expr2vbits_Binop':
- mc_translate.c:2401: error: 'Iop_F64toI64' undeclared (first use in this function)
- mc_translate.c:2401: error: (Each undeclared identifier is reported only once
- mc_translate.c:2401: error: for each function it appears in.)
- mc_translate.c:2402: error: 'Iop_I64toF64' undeclared (first use in this function)
- mc_translate.c:2411: error: 'Iop_F64toI32' undeclared (first use in this function)
- mc_translate.c:2416: error: 'Iop_F64toI16' undeclared (first use in this function)
- mc_translate.c: In function 'expr2vbits_Unop':
- mc_translate.c:2669: error: 'Iop_I32toF64' undeclared (first use in this function)
- make[4]: *** [memcheck_amd64_linux-mc_translate.o] Error 1
- make[4]: Leaving directory `/tmp/vgtest/2010-01-01/valgrind-old/memcheck'
- make[3]: *** [all-recursive] Error 1
- make[3]: Leaving directory `/tmp/vgtest/2010-01-01/valgrind-old/memcheck'
- make[2]: *** [all] Error 2
- make[2]: Leaving directory `/tmp/vgtest/2010-01-01/valgrind-old/memcheck'
- make[1]: *** [all-recursive] Error 1
- make[1]: Leaving directory `/tmp/vgtest/2010-01-01/valgrind-old'
- make: *** [all] Error 2
--- 3,12 ----
Configuring valgrind ... done
! Building valgrind ... done
! Running regression tests ... failed
!
! Regression test results follow
!
! == 538 tests, 2 stderr failures, 0 stdout failures, 0 post failures ==
! memcheck/tests/x86-linux/scalar (stderr)
! helgrind/tests/tc06_two_races_xml (stderr)
|