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
(11) |
3
(8) |
|
4
(9) |
5
(10) |
6
(18) |
7
(8) |
8
(12) |
9
(23) |
10
(14) |
|
11
(15) |
12
(31) |
13
(45) |
14
(28) |
15
(20) |
16
(16) |
17
(9) |
|
18
(18) |
19
(26) |
20
(49) |
21
(14) |
22
(18) |
23
(24) |
24
(28) |
|
25
(39) |
26
(17) |
27
(27) |
28
(27) |
29
(14) |
30
(44) |
|
|
From: <sv...@va...> - 2005-09-14 23:24:29
|
Author: tom
Date: 2005-09-15 00:24:24 +0100 (Thu, 15 Sep 2005)
New Revision: 4663
Log:
Port some more x86 changes to the amd64 code.
Modified:
branches/ASPACEM/coregrind/m_sigframe/sigframe-amd64-linux.c
branches/ASPACEM/coregrind/m_syswrap/syswrap-amd64-linux.c
Modified: branches/ASPACEM/coregrind/m_sigframe/sigframe-amd64-linux.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
--- branches/ASPACEM/coregrind/m_sigframe/sigframe-amd64-linux.c 2005-09-=
14 22:06:49 UTC (rev 4662)
+++ branches/ASPACEM/coregrind/m_sigframe/sigframe-amd64-linux.c 2005-09-=
14 23:24:24 UTC (rev 4663)
@@ -376,17 +376,16 @@
static Bool extend ( ThreadState *tst, Addr addr, SizeT size )
{
ThreadId tid =3D tst->tid;
- Segment *stackseg =3D NULL;
+ NSegment *stackseg =3D NULL;
=20
if (VG_(extend_stack)(addr, tst->client_stack_szB)) {
- stackseg =3D VG_(find_segment)(addr);
+ stackseg =3D VG_(am_find_nsegment)(addr);
if (0 && stackseg)
VG_(printf)("frame=3D%p seg=3D%p-%p\n",
- addr, stackseg->addr, stackseg->addr+stackseg->len);
+ addr, stackseg->start, stackseg->end);
}
=20
- if (stackseg =3D=3D NULL=20
- || (stackseg->prot & (VKI_PROT_READ|VKI_PROT_WRITE)) =3D=3D 0) {
+ if (stackseg =3D=3D NULL || !stackseg->hasR || !stackseg->hasW) {
VG_(message)(
Vg_UserMsg,
"Can't extend stack to %p during signal delivery for thread %d:=
",
Modified: branches/ASPACEM/coregrind/m_syswrap/syswrap-amd64-linux.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
--- branches/ASPACEM/coregrind/m_syswrap/syswrap-amd64-linux.c 2005-09-14=
22:06:49 UTC (rev 4662)
+++ branches/ASPACEM/coregrind/m_syswrap/syswrap-amd64-linux.c 2005-09-14=
23:24:24 UTC (rev 4663)
@@ -368,7 +368,7 @@
ThreadState* ptst =3D VG_(get_ThreadState)(ptid);
ThreadState* ctst =3D VG_(get_ThreadState)(ctid);
UWord* stack;
- Segment* seg;
+ NSegment* seg;
SysRes res;
Long rax;
vki_sigset_t blockall, savedmask;
@@ -416,14 +416,14 @@
memory mappings and try to derive some useful information. We
assume that esp starts near its highest possible value, and can
only go down to the start of the mmaped segment. */
- seg =3D VG_(find_segment)((Addr)rsp);
- if (seg) {
+ seg =3D VG_(am_find_nsegment)((Addr)rsp);
+ if (seg && seg->kind !=3D SkResvn) {
ctst->client_stack_highest_word =3D (Addr)VG_PGROUNDUP(rsp);
- ctst->client_stack_szB =3D ctst->client_stack_highest_word - seg-=
>addr;
+ ctst->client_stack_szB =3D ctst->client_stack_highest_word - seg->=
start;
=20
if (debug)
VG_(printf)("tid %d: guessed client stack range %p-%p\n",
- ctid, seg->addr, VG_PGROUNDUP(rsp));
+ ctid, seg->start, VG_PGROUNDUP(rsp));
} else {
VG_(message)(Vg_UserMsg, "!? New thread %d starts with RSP(%p) unm=
apped\n",
ctid, rsp);
|
|
From: <sv...@va...> - 2005-09-14 22:59:29
|
Author: cerion
Date: 2005-09-14 23:59:26 +0100 (Wed, 14 Sep 2005)
New Revision: 1394
Log:
Added AltiVec sub-vector load/store insns:
lvebx, lvehx, lvewx, stvebx, stvehx, stvewx
Modified:
trunk/priv/guest-ppc32/toIR.c
Modified: trunk/priv/guest-ppc32/toIR.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/priv/guest-ppc32/toIR.c 2005-09-14 21:15:40 UTC (rev 1393)
+++ trunk/priv/guest-ppc32/toIR.c 2005-09-14 22:59:26 UTC (rev 1394)
@@ -4905,18 +4905,26 @@
}
case 0x007: // lvebx (Load Vector Element Byte Indexed, AV p119)
DIP("lvebx v%d,r%d,r%d\n", vD_addr, rA_addr, rB_addr);
- DIP(" =3D> not implemented\n");
- return False;
+ /* loads addressed byte into vector[EA[0:3]
+ since all other destination bytes are undefined,
+ can simply load entire vector from 16-aligned EA */
+ assign( EA_aligned, binop( Iop_And32, mkexpr(EA), mkU32(0xFFFFFFF0=
) ));
+ putVReg( vD_addr, loadBE(Ity_V128, mkexpr(EA_aligned)) );
+ break;
=20
case 0x027: // lvehx (Load Vector Element Half Word Indexed, AV p121)
DIP("lvehx v%d,r%d,r%d\n", vD_addr, rA_addr, rB_addr);
- DIP(" =3D> not implemented\n");
- return False;
+ /* see note for lvebx */
+ assign( EA_aligned, binop( Iop_And32, mkexpr(EA), mkU32(0xFFFFFFF0=
) ));
+ putVReg( vD_addr, loadBE(Ity_V128, mkexpr(EA_aligned)) );
+ break;
=20
case 0x047: // lvewx (Load Vector Element Word Indexed, AV p122)
DIP("lvewx v%d,r%d,r%d\n", vD_addr, rA_addr, rB_addr);
- DIP(" =3D> not implemented\n");
- return False;
+ /* see note for lvebx */
+ assign( EA_aligned, binop( Iop_And32, mkexpr(EA), mkU32(0xFFFFFFF0=
) ));
+ putVReg( vD_addr, loadBE(Ity_V128, mkexpr(EA_aligned)) );
+ break;
=20
case 0x067: // lvx (Load Vector Indexed, AV p127)
DIP("lvx v%d,r%d,r%d\n", vD_addr, rA_addr, rB_addr);
@@ -4967,28 +4975,47 @@
}
=20
switch (opc2) {
- case 0x087: // stvebx (Store Vector Byte Indexed, AV p131)
+ case 0x087: { // stvebx (Store Vector Byte Indexed, AV p131)
DIP("stvebx v%d,r%d,r%d\n", vS_addr, rA_addr, rB_addr);
- DIP(" =3D> not implemented\n");
- return False;
-
-// eb =3D EA & 0xF;
-// STORE(vS[eb*8:eb*8+7], 1, EA);
-// storeBE( mkexpr(EA), mkexpr(vS) );
-
- case 0x0A7: // stvehx (Store Vector Half Word Indexed, AV p132)
+ IRTemp eb =3D newTemp(Ity_I8);
+ IRTemp idx =3D newTemp(Ity_I8);
+ assign( eb, binop(Iop_And8, mkU8(0xF),
+ unop(Iop_32to8, mkexpr(EA) )) );
+ assign( idx, binop(Iop_Shl8, binop(Iop_Sub8, mkU8(15), mkexpr(eb))=
,
+ mkU8(3)) );
+ storeBE( mkexpr(EA),
+ unop(Iop_32to8, unop(Iop_V128to32,
+ binop(Iop_ShrV128, mkexpr(vS), mkexpr(idx)))) );
+ break;
+ }
+ case 0x0A7: { // stvehx (Store Vector Half Word Indexed, AV p132)
+ IRTemp eb =3D newTemp(Ity_I8);
+ IRTemp idx =3D newTemp(Ity_I8);
DIP("stvehx v%d,r%d,r%d\n", vS_addr, rA_addr, rB_addr);
- DIP(" =3D> not implemented\n");
- return False;
-
-// EA_aligned =3D EA & 0xFFFF_FFFE
-// eb =3D EA_aligned & 0xF;
-// STORE(vS[eb*8:eb*8+15], 2, EA_aligned);
-
- case 0x0C7: // stvewx (Store Vector Word Indexed, AV p133)
+ assign( EA_aligned, binop( Iop_And32, mkexpr(EA), mkU32(0xFFFFFFFE=
) ));
+ assign( eb, binop(Iop_And8, mkU8(0xF),
+ unop(Iop_32to8, mkexpr(EA_aligned) )) );
+ assign( idx, binop(Iop_Shl8, binop(Iop_Sub8, mkU8(14), mkexpr(eb))=
,
+ mkU8(3)) );
+ storeBE( mkexpr(EA_aligned),
+ unop(Iop_32to16, unop(Iop_V128to32,
+ binop(Iop_ShrV128, mkexpr(vS), mkexpr(idx)))) );
+ break;
+ }
+ case 0x0C7: { // stvewx (Store Vector Word Indexed, AV p133)
DIP("stvewx v%d,r%d,r%d\n", vS_addr, rA_addr, rB_addr);
- DIP(" =3D> not implemented\n");
- return False;
+ IRTemp eb =3D newTemp(Ity_I8);
+ IRTemp idx =3D newTemp(Ity_I8);
+ assign( EA_aligned, binop( Iop_And32, mkexpr(EA), mkU32(0xFFFFFFFC=
) ));
+ assign( eb, binop(Iop_And8, mkU8(0xF),
+ unop(Iop_32to8, mkexpr(EA_aligned) )) );
+ assign( idx, binop(Iop_Shl8, binop(Iop_Sub8, mkU8(12), mkexpr(eb))=
,
+ mkU8(3)) );
+ storeBE( mkexpr(EA_aligned),
+ unop(Iop_V128to32,
+ binop(Iop_ShrV128, mkexpr(vS), mkexpr(idx))) );
+ break;
+ }
=20
// EA_aligned =3D EA & 0xFFFF_FFFC
// eb =3D EA_aligned & 0xF;
|
|
From: <sv...@va...> - 2005-09-14 22:06:51
|
Author: njn
Date: 2005-09-14 23:06:49 +0100 (Wed, 14 Sep 2005)
New Revision: 4662
Log:
Fix off-by-one error.
Modified:
branches/ASPACEM/coregrind/m_syswrap/syswrap-generic.c
Modified: branches/ASPACEM/coregrind/m_syswrap/syswrap-generic.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
--- branches/ASPACEM/coregrind/m_syswrap/syswrap-generic.c 2005-09-14 21:=
25:04 UTC (rev 4661)
+++ branches/ASPACEM/coregrind/m_syswrap/syswrap-generic.c 2005-09-14 22:=
06:49 UTC (rev 4662)
@@ -837,7 +837,7 @@
vg_assert(aseg->end+1 =3D=3D rseg->start);
=20
vg_assert(newbrk >=3D VG_(brk_base));
- if (newbrk < aseg->end+1) {
+ if (newbrk <=3D rseg->start) {
/* still fits within the anon segment. */
VG_(brk_limit) =3D newbrk;
return newbrk;
@@ -5817,3 +5817,4 @@
/*--------------------------------------------------------------------*/
/*--- end ---*/
/*--------------------------------------------------------------------*/
+
|
|
From: <sv...@va...> - 2005-09-14 21:25:07
|
Author: sewardj
Date: 2005-09-14 22:25:04 +0100 (Wed, 14 Sep 2005)
New Revision: 4661
Log:
Attach sigframe builder to new aspacem.
Modified:
branches/ASPACEM/coregrind/m_sigframe/sigframe-x86-linux.c
Modified: branches/ASPACEM/coregrind/m_sigframe/sigframe-x86-linux.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
--- branches/ASPACEM/coregrind/m_sigframe/sigframe-x86-linux.c 2005-09-14=
20:36:39 UTC (rev 4660)
+++ branches/ASPACEM/coregrind/m_sigframe/sigframe-x86-linux.c 2005-09-14=
21:25:04 UTC (rev 4661)
@@ -396,17 +396,16 @@
static Bool extend ( ThreadState *tst, Addr addr, SizeT size )
{
ThreadId tid =3D tst->tid;
- Segment *stackseg =3D NULL;
+ NSegment *stackseg =3D NULL;
=20
if (VG_(extend_stack)(addr, tst->client_stack_szB)) {
- stackseg =3D VG_(find_segment)(addr);
+ stackseg =3D VG_(am_find_nsegment)(addr);
if (0 && stackseg)
VG_(printf)("frame=3D%p seg=3D%p-%p\n",
- addr, stackseg->addr, stackseg->addr+stackseg->len);
+ addr, stackseg->start, stackseg->end);
}
=20
- if (stackseg =3D=3D NULL=20
- || (stackseg->prot & (VKI_PROT_READ|VKI_PROT_WRITE)) =3D=3D 0) {
+ if (stackseg =3D=3D NULL || !stackseg->hasR || !stackseg->hasW) {
VG_(message)(
Vg_UserMsg,
"Can't extend stack to %p during signal delivery for thread %d:=
",
|
|
From: <sv...@va...> - 2005-09-14 21:15:47
|
Author: cerion
Date: 2005-09-14 22:15:40 +0100 (Wed, 14 Sep 2005)
New Revision: 1393
Log:
implemented vaddcuw
backend:
Iop_ShrN32x4, Iop_Add32x4, Iop_CmpGT32Ux4
fixed emit_Instr::Pin_AvSplat for negative nums
fixed mk_AvDuplicateRI for imm's 16:31, -32:-17 inclusive
Modified:
trunk/priv/guest-ppc32/toIR.c
trunk/priv/host-ppc32/hdefs.c
trunk/priv/host-ppc32/isel.c
Modified: trunk/priv/guest-ppc32/toIR.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/priv/guest-ppc32/toIR.c 2005-09-14 20:35:47 UTC (rev 1392)
+++ trunk/priv/guest-ppc32/toIR.c 2005-09-14 21:15:40 UTC (rev 1393)
@@ -5027,6 +5027,11 @@
UChar vB_addr =3D toUChar((theInstr >> 11) & 0x1F); /* theInstr[11:1=
5] */
UInt opc2 =3D (theInstr >> 0) & 0x7FF; /* theInstr[0:10=
] */
=20
+ IRTemp vA =3D newTemp(Ity_V128);
+ IRTemp vB =3D newTemp(Ity_V128);
+ assign( vA, getVReg(vA_addr));
+ assign( vB, getVReg(vB_addr));
+
if (opc1 !=3D 0x4) {
vex_printf("dis_av_arith(PPC32)(opc1 !=3D 0x4)\n");
return False;
@@ -5034,11 +5039,16 @@
=20
switch (opc2) {
/* Add */
- case 0x180: // vaddcuw (Add Carryout Unsigned Word, AV p136)
+ case 0x180: { // vaddcuw (Add Carryout Unsigned Word, AV p136)
DIP("vaddcuw v%d,v%d,v%d\n", vD_addr, vA_addr, vB_addr);
- DIP(" =3D> not implemented\n");
- return False;
- =20
+ /* ov =3D x >u (x+y) */
+ IRTemp sum =3D newTemp(Ity_V128);
+ assign( sum, binop(Iop_Add32x4, mkexpr(vA), mkexpr(vB)) );
+ putVReg( vD_addr, binop(Iop_ShrN32x4,
+ binop(Iop_CmpGT32Ux4, mkexpr(vA), mkexpr(s=
um)),
+ mkU8(31)) );
+ break;
+ }
case 0x000: // vaddubm (Add Unsigned Byte Modulo, AV p141)
DIP("vaddubm v%d,v%d,v%d\n", vD_addr, vA_addr, vB_addr);
DIP(" =3D> not implemented\n");
Modified: trunk/priv/host-ppc32/hdefs.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/priv/host-ppc32/hdefs.c 2005-09-14 20:35:47 UTC (rev 1392)
+++ trunk/priv/host-ppc32/hdefs.c 2005-09-14 21:15:40 UTC (rev 1393)
@@ -3126,6 +3126,7 @@
/* expects 5-bit-signed-imm */
Char simm5 =3D i->Pin.AvSplat.src->Pvi.Imm5s;
vassert(simm5 >=3D -16 && simm5 <=3D 15);
+ simm5 =3D simm5 & 0x1F;
p =3D mkFormVX( p, 4, v_dst, (UInt)simm5, 0, opc2 );
}
else { // Pri_Reg
Modified: trunk/priv/host-ppc32/isel.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/priv/host-ppc32/isel.c 2005-09-14 20:35:47 UTC (rev 1392)
+++ trunk/priv/host-ppc32/isel.c 2005-09-14 21:15:40 UTC (rev 1393)
@@ -780,7 +780,10 @@
HReg v2 =3D newVRegV(env);
addInstr(env, PPC32Instr_AvSplat(sz, v1, PPC32VI5s_Imm(-16))=
);
addInstr(env, PPC32Instr_AvSplat(sz, v2, PPC32VI5s_Imm(simm6=
-16)));
- addInstr(env, PPC32Instr_AvBinary(Pav_SUBUM, dst, v2, v1));
+ addInstr(env,
+ (sz=3D=3D 8) ? PPC32Instr_AvBin8x16(Pav_SUBUM, dst, v2, v=
1) :
+ (sz=3D=3D16) ? PPC32Instr_AvBin16x8(Pav_SUBUM, dst, v2, v=
1)
+ : PPC32Instr_AvBin32x4(Pav_SUBUM, dst, v2, v1) )=
;
return dst;
}
if (simm6 < -16) { /* -32:-17 inclusive */
@@ -788,7 +791,10 @@
HReg v2 =3D newVRegV(env);
addInstr(env, PPC32Instr_AvSplat(sz, v1, PPC32VI5s_Imm(-16))=
);
addInstr(env, PPC32Instr_AvSplat(sz, v2, PPC32VI5s_Imm(simm6=
+16)));
- addInstr(env, PPC32Instr_AvBinary(Pav_ADDUM, dst, v2, v1));
+ addInstr(env,
+ (sz=3D=3D 8) ? PPC32Instr_AvBin8x16(Pav_ADDUM, dst, v2, v=
1) :
+ (sz=3D=3D16) ? PPC32Instr_AvBin16x8(Pav_ADDUM, dst, v2, v=
1)
+ : PPC32Instr_AvBin32x4(Pav_ADDUM, dst, v2, v1) )=
;
return dst;
}
/* simplest form: -16:15 inclusive */
@@ -3335,6 +3341,17 @@
addInstr(env, PPC32Instr_AvBinary(op, dst, arg1, arg2));
return dst;
}
+
+ case Iop_Add32x4: op =3D Pav_ADDUM; goto do_AvBin32x4;
+ case Iop_CmpGT32Ux4: op =3D Pav_CMPGTU; goto do_AvBin32x4;
+ do_AvBin32x4: {
+ HReg arg1 =3D iselVecExpr(env, e->Iex.Binop.arg1);
+ HReg arg2 =3D iselVecExpr(env, e->Iex.Binop.arg2);
+ HReg dst =3D newVRegV(env);
+ addInstr(env, PPC32Instr_AvBin32x4(op, dst, arg1, arg2));
+ return dst;
+ }
+
//.. do_SseReRg: {
//.. HReg arg1 =3D iselVecExpr(env, e->Iex.Binop.arg1);
//.. HReg arg2 =3D iselVecExpr(env, e->Iex.Binop.arg2);
@@ -3357,9 +3374,17 @@
//.. case Iop_SarN16x8: op =3D Xsse_SAR16; goto do_SseShift;
//.. case Iop_SarN32x4: op =3D Xsse_SAR32; goto do_SseShift;
//.. case Iop_ShrN16x8: op =3D Xsse_SHR16; goto do_SseShift;
-//.. case Iop_ShrN32x4: op =3D Xsse_SHR32; goto do_SseShift;
//.. case Iop_ShrN64x2: op =3D Xsse_SHR64; goto do_SseShift;
=20
+ case Iop_ShrN32x4: op =3D Pav_SHR; goto do_AvShift32x4;
+ do_AvShift32x4: {
+ HReg r_src =3D iselVecExpr(env, e->Iex.Binop.arg1);
+ HReg dst =3D newVRegV(env);
+ HReg v_shft =3D mk_AvDuplicateRI(env, e->Iex.Binop.arg2);
+ addInstr(env, PPC32Instr_AvBin32x4(op, dst, r_src, v_shft));
+ return dst;
+ }
+
case Iop_ShrV128: op =3D Pav_SHR; goto do_AvShiftV128;
do_AvShiftV128: {
HReg dst =3D newVRegV(env);
|
|
From: <sv...@va...> - 2005-09-14 20:36:41
|
Author: sewardj
Date: 2005-09-14 21:36:39 +0100 (Wed, 14 Sep 2005)
New Revision: 4660
Log:
* Change the return conventions for VG_(am_get_advisory) to be
more convenient.
* Add a new convenience function VG_(am_get_advisory_client_simple).
* Fix more syscalls/thread stack stuff
Modified:
branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.c
branches/ASPACEM/coregrind/m_syswrap/syswrap-generic.c
branches/ASPACEM/coregrind/m_syswrap/syswrap-x86-linux.c
branches/ASPACEM/coregrind/m_ume.c
branches/ASPACEM/coregrind/pub_core_aspacemgr.h
Modified: branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.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
--- branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.c 2005-09-14 20:07:2=
7 UTC (rev 4659)
+++ branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.c 2005-09-14 20:36:3=
9 UTC (rev 4660)
@@ -2275,9 +2275,9 @@
=20
/* Query aspacem to ask where a mapping should go. */
=20
-Bool VG_(am_get_advisory) ( MapRequest* req,=20
+Addr VG_(am_get_advisory) ( MapRequest* req,=20
Bool forClient,=20
- /*OUT*/Addr* result )
+ /*OUT*/Bool* ok )
{
/* This function implements allocation policy.
=20
@@ -2287,11 +2287,11 @@
and by forClient, which says whether this is for the client or
for V.=20
=20
- Return values: the request can be vetoed (return False), in
- which case the caller should not attempt to proceed with making
- the mapping. Otherwise, the caller may proceed, and the
- preferred address at which the mapping should happen is written
- in *result.
+ Return values: the request can be vetoed (*ok is set to False),
+ in which case the caller should not attempt to proceed with
+ making the mapping. Otherwise, *ok is set to True, the caller
+ may proceed, and the preferred address at which the mapping
+ should happen is returned.
=20
Note that this is an advisory system only: the kernel can in
fact do whatever it likes as far as placement goes, and we have
@@ -2315,8 +2315,7 @@
grant it providing all areas inside the request are either
free or are file mappings belonging to the client. In other
words we are prepared to let the client trash its own mappings
- if it wants to. =20
- */
+ if it wants to. */
Int i, j;
Addr holeStart, holeEnd, holeLen;
Bool fixed_not_required;
@@ -2341,13 +2340,17 @@
}
=20
/* Reject zero-length requests */
- if (req->len =3D=3D 0)
- return False;
+ if (req->len =3D=3D 0) {
+ *ok =3D False;
+ return 0;
+ }
=20
/* Reject wraparounds */
if ((req->rkind=3D=3DMFixed || req->rkind=3D=3DMHint)
- && req->start + req->len < req->start)
- return False;
+ && req->start + req->len < req->start) {
+ *ok =3D False;
+ return 0;
+ }
=20
/* ------ Implement Policy Exception #1 ------ */
=20
@@ -2365,10 +2368,11 @@
}
}
if (allow) {
- *result =3D reqStart;
- return True;
- }
- return False;
+ *ok =3D True;
+ return reqStart;
+ }
+ *ok =3D False;
+ return 0;
}
=20
/* ------ Implement the Default Policy ------ */
@@ -2426,38 +2430,57 @@
switch (req->rkind) {
case MFixed:
if (fixedIdx >=3D 0) {
- *result =3D req->start;
- return True;
+ *ok =3D True;
+ return req->start;
} else {
- return False;
+ *ok =3D False;
+ return 0;
}
break;
case MHint:
if (fixedIdx >=3D 0) {
- *result =3D req->start;
- return True;
+ *ok =3D True;
+ return req->start;
}
if (floatIdx >=3D 0) {
- *result =3D nsegments[floatIdx].start;
- return True;
+ *ok =3D True;
+ return nsegments[floatIdx].start;
}
- return False;
+ *ok =3D False;
+ return 0;
case MAny:
if (floatIdx >=3D 0) {
- *result =3D nsegments[floatIdx].start;
- return True;
+ *ok =3D True;
+ return nsegments[floatIdx].start;
}
- return False;
+ *ok =3D False;
+ return 0;
default:=20
break;
}
=20
/*NOTREACHED*/
aspacem_barf("getAdvisory: unknown request kind");
- return False;
+ *ok =3D False;
+ return 0;
}
=20
+/* Convenience wrapper for VG_(am_get_advisory) for client floating or
+ fixed requests. If start is zero, a floating request is issued; if
+ nonzero, a fixed request at that address is issued. Same comments
+ about return values apply. */
=20
+Addr VG_(am_get_advisory_client_simple) ( Addr start, SizeT len,=20
+ /*OUT*/Bool* ok )
+{
+ MapRequest mreq;
+ mreq.rkind =3D start=3D=3D0 ? MAny : MFixed;
+ mreq.start =3D start;
+ mreq.len =3D len;
+ return VG_(am_get_advisory)( &mreq, True/*client*/, ok );
+}
+
+
/* Notifies aspacem that the client completed an mmap successfully.
The segment array is updated accordingly. */
=20
@@ -2595,7 +2618,7 @@
req.rkind =3D MFixed;
req.start =3D start;
req.len =3D length;
- ok =3D VG_(am_get_advisory)( &req, True/*client*/, &advised );
+ advised =3D VG_(am_get_advisory)( &req, True/*client*/, &ok );
if (!ok || advised !=3D start)
return VG_(mk_SysRes_Error)( VKI_EINVAL );
=20
@@ -2659,7 +2682,7 @@
req.rkind =3D MFixed;
req.start =3D start;
req.len =3D length;
- ok =3D VG_(am_get_advisory)( &req, True/*client*/, &advised );
+ advised =3D VG_(am_get_advisory)( &req, True/*client*/, &ok );
if (!ok || advised !=3D start)
return VG_(mk_SysRes_Error)( VKI_EINVAL );
=20
@@ -2715,7 +2738,7 @@
req.rkind =3D MAny;
req.start =3D 0;
req.len =3D length;
- ok =3D VG_(am_get_advisory)( &req, True/*client*/, &advised );
+ advised =3D VG_(am_get_advisory)( &req, True/*client*/, &ok );
if (!ok)
return VG_(mk_SysRes_Error)( VKI_EINVAL );
=20
@@ -2772,7 +2795,7 @@
req.rkind =3D MAny;
req.start =3D 0;
req.len =3D length;
- ok =3D VG_(am_get_advisory)( &req, False/*valgrind*/, &advised );
+ advised =3D VG_(am_get_advisory)( &req, False/*valgrind*/, &ok );
if (!ok)
return VG_(mk_SysRes_Error)( VKI_EINVAL );
=20
Modified: branches/ASPACEM/coregrind/m_syswrap/syswrap-generic.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
--- branches/ASPACEM/coregrind/m_syswrap/syswrap-generic.c 2005-09-14 20:=
07:27 UTC (rev 4659)
+++ branches/ASPACEM/coregrind/m_syswrap/syswrap-generic.c 2005-09-14 20:=
36:39 UTC (rev 4660)
@@ -1508,9 +1508,14 @@
UWord arg0, UWord arg1, UWord arg2 )
{
/* void *shmat(int shmid, const void *shmaddr, int shmflg); */
- UInt segmentSize =3D get_shm_size ( arg0 );
- if (arg1 =3D=3D 0)
- arg1 =3D VG_(find_map_space)(0, segmentSize, True);
+ UInt segmentSize =3D get_shm_size ( arg0 );
+ UWord tmp;
+ Bool ok;
+ if (arg1 =3D=3D 0) {
+ tmp =3D VG_(am_get_advisory_client_simple)(0, segmentSize, &ok);
+ if (ok)
+ arg1 =3D ok;
+ }
else if (!ML_(valid_client_addr)(arg1, segmentSize, tid, "shmat"))
arg1 =3D 0;
return arg1;
@@ -4573,7 +4578,7 @@
}
=20
/* Enquire ... */
- mreq_ok =3D VG_(am_get_advisory)( &mreq, True/*client*/, &advised );
+ advised =3D VG_(am_get_advisory)( &mreq, True/*client*/, &mreq_ok );
if (!mreq_ok) {
/* Our request was bounced, so we'd better fail. */
SET_STATUS_Failure( VKI_EINVAL );
Modified: branches/ASPACEM/coregrind/m_syswrap/syswrap-x86-linux.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
--- branches/ASPACEM/coregrind/m_syswrap/syswrap-x86-linux.c 2005-09-14 2=
0:07:27 UTC (rev 4659)
+++ branches/ASPACEM/coregrind/m_syswrap/syswrap-x86-linux.c 2005-09-14 2=
0:36:39 UTC (rev 4660)
@@ -376,7 +376,7 @@
ThreadState* ptst =3D VG_(get_ThreadState)(ptid);
ThreadState* ctst =3D VG_(get_ThreadState)(ctid);
UWord* stack;
- Segment* seg;
+ NSegment* seg;
SysRes res;
Int eax;
vki_sigset_t blockall, savedmask;
@@ -428,14 +428,14 @@
memory mappings and try to derive some useful information. We
assume that esp starts near its highest possible value, and can
only go down to the start of the mmaped segment. */
- seg =3D VG_(find_segment)((Addr)esp);
- if (seg) {
+ seg =3D VG_(am_find_nsegment)((Addr)esp);
+ if (seg && seg->kind !=3D SkResvn) {
ctst->client_stack_highest_word =3D (Addr)VG_PGROUNDUP(esp);
- ctst->client_stack_szB =3D ctst->client_stack_highest_word - seg-=
>addr;
+ ctst->client_stack_szB =3D ctst->client_stack_highest_word - seg->=
start;
=20
if (debug)
VG_(printf)("tid %d: guessed client stack range %p-%p\n",
- ctid, seg->addr, VG_PGROUNDUP(esp));
+ ctid, seg->start, VG_PGROUNDUP(esp));
} else {
VG_(message)(Vg_UserMsg, "!? New thread %d starts with ESP(%p) unm=
apped\n",
ctid, esp);
@@ -1514,7 +1514,7 @@
}
=20
/* Enquire ... */
- mreq_ok =3D VG_(am_get_advisory)( &mreq, True/*client*/, &advised );
+ advised =3D VG_(am_get_advisory)( &mreq, True/*client*/, &mreq_ok );
if (!mreq_ok) {
/* Our request was bounced, so we'd better fail. */
SET_STATUS_Failure( VKI_EINVAL );
Modified: branches/ASPACEM/coregrind/m_ume.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
--- branches/ASPACEM/coregrind/m_ume.c 2005-09-14 20:07:27 UTC (rev 4659)
+++ branches/ASPACEM/coregrind/m_ume.c 2005-09-14 20:36:39 UTC (rev 4660)
@@ -605,7 +605,6 @@
Char* base =3D (Char *)info->exe_base;
Char* baseoff;
Addr advised;
- MapRequest mreq;
Bool ok;
=20
if (info->map_base !=3D 0)
@@ -617,10 +616,9 @@
the specified address. This is a bit of hack, but it should
work because there should be no intervening transactions with
aspacem which could cause those fixed maps to fail. */
- mreq.rkind =3D base ? MFixed : MAny;
- mreq.start =3D (Addr)base;
- mreq.len =3D interp_size;
- ok =3D VG_(am_get_advisory)( &mreq, True/*client*/, &advised );
+ advised =3D VG_(am_get_advisory_client_simple)(=20
+ (Addr)base, interp_size, &ok=20
+ );
if (!ok) {
/* bomb out */
SysRes res =3D VG_(mk_SysRes_Error)(VKI_EINVAL);
Modified: branches/ASPACEM/coregrind/pub_core_aspacemgr.h
=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
--- branches/ASPACEM/coregrind/pub_core_aspacemgr.h 2005-09-14 20:07:27 U=
TC (rev 4659)
+++ branches/ASPACEM/coregrind/pub_core_aspacemgr.h 2005-09-14 20:36:39 U=
TC (rev 4660)
@@ -289,13 +289,22 @@
}
MapRequest;
=20
-/* Query aspacem to ask where a mapping should go. On success,
- returns True and the advised placement is in *result. If False is
- returned, it means aspacem has vetoed the mapping, and so the
+/* Query aspacem to ask where a mapping should go. On success, the
+ advised placement is returned, and *ok is set to True. On failure,
+ zero is returned and *ok is set to False. Note that *ok must be
+ consulted by the caller to establish success or failure; that
+ cannot be established reliably from the returned value. If *ok is
+ set to False, it means aspacem has vetoed the mapping, and so the
caller should not proceed with it. */
-extern Bool VG_(am_get_advisory)
- ( MapRequest* req, Bool forClient, /*OUT*/Addr* result );
+extern Addr VG_(am_get_advisory)
+ ( MapRequest* req, Bool forClient, /*OUT*/Bool* ok );
=20
+/* Convenience wrapper for VG_(am_get_advisory) for client floating or
+ fixed requests. If start is zero, a floating request is issued; if
+ nonzero, a fixed request at that address is issued. Same comments
+ about return values apply. */
+extern Addr VG_(am_get_advisory_client_simple)=20
+ ( Addr start, SizeT len, /*OUT*/Bool* ok );
=20
/* Notifies aspacem that the client completed an mmap successfully.
The segment array is updated accordingly. */
|
|
From: <sv...@va...> - 2005-09-14 20:35:49
|
Author: cerion
Date: 2005-09-14 21:35:47 +0100 (Wed, 14 Sep 2005)
New Revision: 1392
Log:
more altivec insns: vsr, vspltw
- only working with with --tool=3Dnone
back-end:
hdefs:
new type for PPC32Instr_AvSplat:
PPC32VI5s =3D> {vector-reg | signed-5bit-imm}
fixed ShlV128, ShrV128 to shift the full 128bits
isel:=20
implemented Iop_Dup32x4, Iop_ShrV128
new function mk_AvDuplicateRI()
- takes in ri_src (imm|reg, latter of type 8|16|32)
returns vector reg of duplicated lanes of ri_src
avoids store/load for immediates up to simm6.
Modified:
trunk/priv/guest-ppc32/toIR.c
trunk/priv/host-ppc32/hdefs.c
trunk/priv/host-ppc32/hdefs.h
trunk/priv/host-ppc32/isel.c
Modified: trunk/priv/guest-ppc32/toIR.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/priv/guest-ppc32/toIR.c 2005-09-13 18:41:09 UTC (rev 1391)
+++ trunk/priv/guest-ppc32/toIR.c 2005-09-14 20:35:47 UTC (rev 1392)
@@ -5518,6 +5518,11 @@
UChar vB_addr =3D toUChar((theInstr >> 11) & 0x1F); /* theInstr[11:15=
] */
UInt opc2 =3D (theInstr >> 0) & 0x7FF; /* theInstr[0:10]=
*/
=20
+ IRTemp vA =3D newTemp(Ity_V128);
+ IRTemp vB =3D newTemp(Ity_V128);
+ assign( vA, getVReg(vA_addr));
+ assign( vB, getVReg(vB_addr));
+
if (opc1 !=3D 0x4){
vex_printf("dis_av_shift(PPC32)(instr)\n");
return False;
@@ -5583,11 +5588,16 @@
DIP(" =3D> not implemented\n");
return False;
=20
- case 0x2C4: // vsr (Shift Right, AV p252)
+ case 0x2C4: { // vsr (Shift Right, AV p251)
DIP("vsr v%d,v%d,v%d\n", vD_addr, vA_addr, vB_addr);
- DIP(" =3D> not implemented\n");
- return False;
-
+ IRTemp sh =3D newTemp(Ity_I8);
+ assign( sh, binop(Iop_And8, mkU8(0x7),
+ unop(Iop_32to8,
+ unop(Iop_V128to32, mkexpr(vB)))) );
+ putVReg( vD_addr,
+ binop(Iop_ShrV128, mkexpr(vA), mkexpr(sh)) );
+ break;
+ }
case 0x304: // vsrab (Shift Right Algebraic B, AV p253)
DIP("vsrab v%d,v%d,v%d\n", vD_addr, vA_addr, vB_addr);
DIP(" =3D> not implemented\n");
@@ -5717,11 +5727,15 @@
DIP(" =3D> not implemented\n");
return False;
=20
- case 0x28C: // vspltw (Splat Word, AV p250)
+ case 0x28C: { // vspltw (Splat Word, AV p250)
DIP("vspltw v%d,v%d,%d\n", vD_addr, vB_addr, UIMM_5);
- DIP(" =3D> not implemented\n");
- return False;
-
+ /* vD =3D Dup32x4( vB[UIMM_5] ) */
+ unsigned int sh_uimm =3D (3-UIMM_5)*32;
+ putVReg( vD_addr, unop(Iop_Dup32x4,
+ unop(Iop_V128to32,
+ binop(Iop_ShrV128, mkexpr(vB), mkU8(sh_uimm)))) );
+ break;
+ }
case 0x30C: // vspltisb (Splat Immediate Signed B, AV p247)
DIP("vspltisb v%d,%d\n", vD_addr, (Char)SIMM_8);
DIP(" =3D> not implemented\n");
Modified: trunk/priv/host-ppc32/hdefs.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/priv/host-ppc32/hdefs.c 2005-09-13 18:41:09 UTC (rev 1391)
+++ trunk/priv/host-ppc32/hdefs.c 2005-09-14 20:35:47 UTC (rev 1392)
@@ -529,6 +529,64 @@
}
=20
=20
+/* --------- Operand, which can be a vector reg or a simm5. --------- */
+
+PPC32VI5s* PPC32VI5s_Imm ( Char simm5 ) {
+ PPC32VI5s* op =3D LibVEX_Alloc(sizeof(PPC32VI5s));
+ op->tag =3D Pvi_Imm;
+ op->Pvi.Imm5s =3D simm5;
+ vassert(simm5 >=3D -16 && simm5 <=3D 15);
+ return op;
+}
+PPC32VI5s* PPC32VI5s_Reg ( HReg reg ) {
+ PPC32VI5s* op =3D LibVEX_Alloc(sizeof(PPC32VI5s));
+ op->tag =3D Pvi_Reg;
+ op->Pvi.Reg =3D reg;
+ vassert(hregClass(reg) =3D=3D HRcVec128);
+ return op;
+}
+
+void ppPPC32VI5s ( PPC32VI5s* src ) {
+ switch (src->tag) {
+ case Pvi_Imm:=20
+ vex_printf("%d", (Int)src->Pvi.Imm5s);
+ break;
+ case Pvi_Reg:=20
+ ppHRegPPC32(src->Pvi.Reg);
+ break;
+ default:=20
+ vpanic("ppPPC32VI5s");
+ }
+}
+
+/* An PPC32VI5s can only be used in a "read" context (what would it
+ mean to write or modify a literal?) and so we enumerate its
+ registers accordingly. */
+static void addRegUsage_PPC32VI5s ( HRegUsage* u, PPC32VI5s* dst ) {
+ switch (dst->tag) {
+ case Pvi_Imm:=20
+ return;
+ case Pvi_Reg:=20
+ addHRegUse(u, HRmRead, dst->Pvi.Reg);
+ return;
+ default:=20
+ vpanic("addRegUsage_PPC32VI5s");
+ }
+}
+
+static void mapRegs_PPC32VI5s ( HRegRemap* m, PPC32VI5s* dst ) {
+ switch (dst->tag) {
+ case Pvi_Imm:=20
+ return;
+ case Pvi_Reg:=20
+ dst->Pvi.Reg =3D lookupHRegRemap(m, dst->Pvi.Reg);
+ return;
+ default:=20
+ vpanic("mapRegs_PPC32VI5s");
+ }
+}
+
+
/* --------- Instructions. --------- */
=20
HChar* showPPC32UnaryOp ( PPC32UnaryOp op ) {
@@ -942,7 +1000,7 @@
i->Pin.AvShlDbl.srcR =3D srcR;
return i;
}
-PPC32Instr* PPC32Instr_AvSplat ( UChar sz, HReg dst, PPC32RI* src ) {
+PPC32Instr* PPC32Instr_AvSplat ( UChar sz, HReg dst, PPC32VI5s* src ) {
PPC32Instr* i =3D LibVEX_Alloc(sizeof(PPC32Instr));
i->tag =3D Pin_AvSplat;
i->Pin.AvSplat.sz =3D sz;
@@ -1355,20 +1413,15 @@
return;
=20
case Pin_AvSplat: {
- UChar ch_sz =3D toUChar(
- (i->Pin.AvSplat.sz =3D=3D 8) ? 'b' :
- (i->Pin.AvSplat.sz =3D=3D 16) ? 'h' : 'w'
- );
+ UChar sz =3D i->Pin.AvSplat.sz;
+ UChar ch_sz =3D toUChar( (sz =3D=3D 8) ? 'b' : (sz =3D=3D 16) ? 'h=
' : 'w' );
vex_printf("vsplt%s%c ",
- i->Pin.AvSplat.src->tag =3D=3D Pri_Imm ? "is" : "", ch_=
sz);
+ i->Pin.AvSplat.src->tag =3D=3D Pvi_Imm ? "is" : "", ch_=
sz);
ppHRegPPC32(i->Pin.AvSplat.dst);
vex_printf(",");
- if (i->Pin.AvSplat.src->tag =3D=3D Pri_Imm) {
- vex_printf("%d", (Char)(i->Pin.AvSplat.src->Pri.Imm));
- } else {
- ppHRegPPC32(i->Pin.AvSplat.src->Pri.Reg);
- vex_printf(", 0");
- }
+ ppPPC32VI5s(i->Pin.AvSplat.src);
+ if (i->Pin.AvSplat.src->tag =3D=3D Pvi_Reg)
+ vex_printf(", %u", (128/sz)-1); /* louis lane */
return;
}
=20
@@ -1599,8 +1652,8 @@
addHRegUse(u, HRmRead, i->Pin.AvShlDbl.srcR);
return;
case Pin_AvSplat:
- addHRegUse(u, HRmWrite, i->Pin.AvSplat.dst);
- addRegUsage_PPC32RI(u, i->Pin.AvSplat.src);
+ addHRegUse(u, HRmWrite, i->Pin.AvSplat.dst);
+ addRegUsage_PPC32VI5s(u, i->Pin.AvSplat.src);
return;
case Pin_AvCMov:
addHRegUse(u, HRmModify, i->Pin.AvCMov.dst);
@@ -1764,7 +1817,7 @@
return;
case Pin_AvSplat:
mapReg(m, &i->Pin.AvSplat.dst);
- mapRegs_PPC32RI(m, i->Pin.AvSplat.src);
+ mapRegs_PPC32VI5s(m, i->Pin.AvSplat.src);
return;
case Pin_AvCMov:
mapReg(m, &i->Pin.AvCMov.dst);
@@ -2812,16 +2865,21 @@
UInt v_srcL =3D vregNo(i->Pin.AvBinary.srcL);
UInt v_srcR =3D vregNo(i->Pin.AvBinary.srcR);
UInt opc2;
+ if (i->Pin.AvBinary.op =3D=3D Pav_SHL) {
+ p =3D mkFormVX( p, 4, v_dst, v_srcL, v_srcR, 1036 ); // vslo
+ p =3D mkFormVX( p, 4, v_dst, v_dst, v_srcR, 452 ); // vsl
+ goto done;
+ }
+ if (i->Pin.AvBinary.op =3D=3D Pav_SHR) {
+ p =3D mkFormVX( p, 4, v_dst, v_srcL, v_srcR, 1100 ); // vsro
+ p =3D mkFormVX( p, 4, v_dst, v_dst, v_srcR, 708 ); // vsr
+ goto done;
+ }
switch (i->Pin.AvBinary.op) {
/* Bitwise */
case Pav_AND: opc2 =3D 1028; break; // vand
case Pav_OR: opc2 =3D 1156; break; // vor
case Pav_XOR: opc2 =3D 1220; break; // vxor
-
- /* Shift */
- case Pav_SHL: opc2 =3D 452; break; // vsl
- case Pav_SHR: opc2 =3D 708; break; // vsr
-
default:
goto bad;
}
@@ -3060,17 +3118,22 @@
case Pin_AvSplat: { // vsplt(is)(b,h,w)
UInt v_dst =3D vregNo(i->Pin.AvShlDbl.dst);
UChar sz =3D i->Pin.AvSplat.sz;
- UInt v_src, simm_src, opc2;
+ UInt v_src, opc2;
vassert(sz =3D=3D 8 || sz =3D=3D 16 || sz =3D=3D 32);
=20
- if (i->Pin.AvSplat.src->tag =3D=3D Pri_Imm) {
+ if (i->Pin.AvSplat.src->tag =3D=3D Pvi_Imm) {
opc2 =3D (sz =3D=3D 8) ? 780 : (sz =3D=3D 16) ? 844 : 908; //=
8,16,32
- simm_src =3D i->Pin.AvSplat.src->Pri.Imm;
- p =3D mkFormVX( p, 4, v_dst, simm_src, 0, opc2 );
- } else { // Pri_Reg
+ /* expects 5-bit-signed-imm */
+ Char simm5 =3D i->Pin.AvSplat.src->Pvi.Imm5s;
+ vassert(simm5 >=3D -16 && simm5 <=3D 15);
+ p =3D mkFormVX( p, 4, v_dst, (UInt)simm5, 0, opc2 );
+ }
+ else { // Pri_Reg
opc2 =3D (sz =3D=3D 8) ? 524 : (sz =3D=3D 16) ? 588 : 652; // =
8,16,32
- v_src =3D iregNo(i->Pin.AvSplat.src->Pri.Reg);
- p =3D mkFormVX( p, 4, v_dst, 0, v_src, opc2 );
+ vassert(hregClass(i->Pin.AvSplat.src->Pvi.Reg) =3D=3D HRcVec128=
);
+ v_src =3D vregNo(i->Pin.AvSplat.src->Pvi.Reg);
+ UInt lowest_lane =3D (128/sz)-1;
+ p =3D mkFormVX( p, 4, v_dst, lowest_lane, v_src, opc2 );
}
goto done;
}
Modified: trunk/priv/host-ppc32/hdefs.h
=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/priv/host-ppc32/hdefs.h 2005-09-13 18:41:09 UTC (rev 1391)
+++ trunk/priv/host-ppc32/hdefs.h 2005-09-14 20:35:47 UTC (rev 1392)
@@ -293,6 +293,32 @@
extern void ppPPC32RI ( PPC32RI* );
=20
=20
+/* --------- Operand, which can be a vector reg or a s6. --------- */
+/* ("VI" =3D=3D "Vector Register or Immediate") */
+typedef
+ enum {
+ Pvi_Imm=3D5,
+ Pvi_Reg=3D6
+ }=20
+ PPC32VI5sTag;
+
+typedef
+ struct {
+ PPC32VI5sTag tag;
+ union {
+ Char Imm5s;
+ HReg Reg;
+ }
+ Pvi;
+ }
+ PPC32VI5s;
+
+extern PPC32VI5s* PPC32VI5s_Imm ( Char );
+extern PPC32VI5s* PPC32VI5s_Reg ( HReg );
+
+extern void ppPPC32VI5s ( PPC32VI5s* );
+
+
/* --------- Instructions. --------- */
=20
/* --------- */
@@ -664,7 +690,7 @@
struct {
UChar sz; /* 8,16,32 */
HReg dst;
- PPC32RI* src;
+ PPC32VI5s* src;=20
} AvSplat;
/* Mov src to dst on the given condition, which may not
be the bogus Xcc_ALWAYS. */
@@ -719,7 +745,7 @@
extern PPC32Instr* PPC32Instr_AvPerm ( HReg ctl, HReg dst, HReg srcL=
, HReg srcR );
extern PPC32Instr* PPC32Instr_AvSel ( HReg ctl, HReg dst, HReg srcL=
, HReg srcR );
extern PPC32Instr* PPC32Instr_AvShlDbl ( UChar shift, HReg dst, HReg s=
rcL, HReg srcR );
-extern PPC32Instr* PPC32Instr_AvSplat ( UChar sz, HReg dst, PPC32RI* =
src );
+extern PPC32Instr* PPC32Instr_AvSplat ( UChar sz, HReg dst, PPC32VI5s=
* src );
extern PPC32Instr* PPC32Instr_AvCMov ( PPC32CondCode, HReg dst, HReg=
src );
extern PPC32Instr* PPC32Instr_AvLdVSCR ( HReg src );
=20
Modified: trunk/priv/host-ppc32/isel.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/priv/host-ppc32/isel.c 2005-09-13 18:41:09 UTC (rev 1391)
+++ trunk/priv/host-ppc32/isel.c 2005-09-14 20:35:47 UTC (rev 1392)
@@ -752,7 +752,86 @@
//.. add_to_esp(env, 8);
//.. }
=20
+/*
+ Generates code for AvSplat
+ - takes in IRExpr* of type 8|16|32
+ returns vector reg of duplicated lanes of input
+ - uses AvSplat(imm) for imms up to simm6.
+ otherwise must use store reg & load vector
+*/
+static HReg mk_AvDuplicateRI( ISelEnv* env, IRExpr* e )
+{
+ HReg dst =3D newVRegV(env);
+ PPC32RI* ri =3D iselIntExpr_RI(env, e);
+ IRType ty =3D typeOfIRExpr(env->type_env,e);
+ UInt sz =3D (ty =3D=3D Ity_I8) ? 8 : (ty =3D=3D Ity_I16) ? 16 : =
32;
+ vassert(ty =3D=3D Ity_I8 || ty =3D=3D Ity_I16 || ty =3D=3D Ity_I32);
=20
+ HReg r_src;
+ /* special case: immediate */
+ if (ri->tag =3D=3D Pri_Imm) {
+ Int simm32 =3D (Int)ri->Pri.Imm;
+
+ /* figure out if it's do-able with imm splats. */
+ if (simm32 >=3D -32 && simm32 <=3D 31) {
+ Char simm6 =3D (Char)simm32;
+ if (simm6 > 15) { /* 16:31 inclusive */
+ HReg v1 =3D newVRegV(env);
+ HReg v2 =3D newVRegV(env);
+ addInstr(env, PPC32Instr_AvSplat(sz, v1, PPC32VI5s_Imm(-16))=
);
+ addInstr(env, PPC32Instr_AvSplat(sz, v2, PPC32VI5s_Imm(simm6=
-16)));
+ addInstr(env, PPC32Instr_AvBinary(Pav_SUBUM, dst, v2, v1));
+ return dst;
+ }
+ if (simm6 < -16) { /* -32:-17 inclusive */
+ HReg v1 =3D newVRegV(env);
+ HReg v2 =3D newVRegV(env);
+ addInstr(env, PPC32Instr_AvSplat(sz, v1, PPC32VI5s_Imm(-16))=
);
+ addInstr(env, PPC32Instr_AvSplat(sz, v2, PPC32VI5s_Imm(simm6=
+16)));
+ addInstr(env, PPC32Instr_AvBinary(Pav_ADDUM, dst, v2, v1));
+ return dst;
+ }
+ /* simplest form: -16:15 inclusive */
+ addInstr(env, PPC32Instr_AvSplat(sz, dst, PPC32VI5s_Imm(simm6))=
);
+ return dst;
+ }
+
+ /* no luck; use the Slow way. */
+ r_src =3D newVRegI(env);
+ addInstr(env, PPC32Instr_LI32(r_src, (UInt)simm32));
+ }
+ else {
+ r_src =3D ri->Pri.Reg;
+ }
+
+ /* default case: store r_src in lowest lane of 16-aligned mem,
+ load vector, splat lowest lane to dst */
+ {
+ /* CAB: Perhaps faster to store r_src multiple times (sz dependent=
),
+ and simply load the vector? */
+
+ HReg v_src =3D newVRegV(env);
+ PPC32AMode *am_off12;
+
+ sub_from_sp( env, 32 ); // Move SP down
+ /* Get a 16-aligned address within our stack space */
+ HReg r_aligned16 =3D get_sp_aligned16( env );
+ am_off12 =3D PPC32AMode_IR( 12, r_aligned16);
+
+ /* Store r_src in low word of 16-aligned mem */
+ addInstr(env, PPC32Instr_Store( 4, am_off12, r_src ));
+
+ /* Load src to vector[low lane] */
+ addInstr(env, PPC32Instr_AvLdSt( True/*load*/, 4, v_src, am_off12 =
));
+ add_to_sp( env, 32 ); // Reset SP
+
+ /* Finally, splat v_src[low_lane] to dst */
+ addInstr(env, PPC32Instr_AvSplat(sz, dst, PPC32VI5s_Reg(v_src)));
+ return dst;
+ }
+}
+
+
/*---------------------------------------------------------*/
/*--- ISEL: Integer expressions (32/16/8 bit) ---*/
/*---------------------------------------------------------*/
@@ -1498,13 +1577,15 @@
static PPC32RI* iselIntExpr_RI_wrk ( ISelEnv* env, IRExpr* e )
{
IRType ty =3D typeOfIRExpr(env->type_env,e);
- vassert(ty =3D=3D Ity_I32);
+ vassert(ty =3D=3D Ity_I8 || ty =3D=3D Ity_I16 || ty =3D=3D Ity_I32);
=20
/* special case: immediate */
if (e->tag =3D=3D Iex_Const) {
UInt u;
switch (e->Iex.Const.con->tag) {
- case Ico_U32: u =3D e->Iex.Const.con->Ico.U32; break;
+ case Ico_U32: u =3D e->Iex.Const.con->Ico.U32; break;
+ case Ico_U16: u =3D 0xFFFF & e->Iex.Const.con->Ico.U16; break;
+ case Ico_U8: u =3D 0xFF & e->Iex.Const.con->Ico.U8; break;
default: vpanic("iselIntExpr_RI.Iex_Const(ppc32h)");
}
return PPC32RI_Imm(u);
@@ -3040,6 +3121,11 @@
//.. return dst;
//.. }
=20
+ case Iop_Dup32x4: {
+ HReg dst =3D mk_AvDuplicateRI(env, e->Iex.Binop.arg1);
+ return dst;
+ }
+
default:
break;
} /* switch (e->Iex.Unop.op) */
@@ -3245,7 +3331,7 @@
do_AvBin: {
HReg arg1 =3D iselVecExpr(env, e->Iex.Binop.arg1);
HReg arg2 =3D iselVecExpr(env, e->Iex.Binop.arg2);
- HReg dst =3D newVRegV(env);
+ HReg dst =3D newVRegV(env);
addInstr(env, PPC32Instr_AvBinary(op, dst, arg1, arg2));
return dst;
}
@@ -3273,6 +3359,16 @@
//.. case Iop_ShrN16x8: op =3D Xsse_SHR16; goto do_SseShift;
//.. case Iop_ShrN32x4: op =3D Xsse_SHR32; goto do_SseShift;
//.. case Iop_ShrN64x2: op =3D Xsse_SHR64; goto do_SseShift;
+
+ case Iop_ShrV128: op =3D Pav_SHR; goto do_AvShiftV128;
+ do_AvShiftV128: {
+ HReg dst =3D newVRegV(env);
+ HReg r_src =3D iselVecExpr(env, e->Iex.Binop.arg1);
+ HReg v_shft =3D mk_AvDuplicateRI(env, e->Iex.Binop.arg2);
+ addInstr(env, PPC32Instr_AvBinary(op, dst, r_src, v_shft));
+ return dst;
+ }
+
//.. do_SseShift: {
//.. HReg greg =3D iselVecExpr(env, e->Iex.Binop.arg1);
//.. X86RMI* rmi =3D iselIntExpr_RMI(env, e->Iex.Binop.arg2)=
;
|
|
From: Nicholas N. <nj...@cs...> - 2005-09-14 20:08:49
|
On Wed, 14 Sep 2005, sv...@va... wrote: > Log: > Fix dev/ino printing (really we should teach our printf implementation > to understand %ld/%lu correctly.) It does in the trunk. I just merged in the change so it should work in ASPACEM now too. N |
|
From: <sv...@va...> - 2005-09-14 20:07:31
|
Author: njn
Date: 2005-09-14 21:07:27 +0100 (Wed, 14 Sep 2005)
New Revision: 4659
Log:
Merged in part of r4527 from the trunk:
Change slightly the way integers are printed by printf() and friends.
Previously, %d printed a 32-bit int. %ld and %lld printed 64-bit ints.
So if you wanted to print a word-sized int (eg. a SizeT variable), you
had to cast it to a Long and then print with %lld in order to work on
both 32-bit and 64-bit platforms.
I changed things so that %d prints a 32-bit int, %ld prints a word-sized
int, and %lld prints a 64-bit int. There are two advantages to this:
- it now matches the way the normal glibc printf() works;
- you can print word-sized ints without casting.
I also made the corresponding change for %u/lu/llu and %x/lx/llx.
Modified:
branches/ASPACEM/coregrind/m_debuglog.c
Modified: branches/ASPACEM/coregrind/m_debuglog.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
--- branches/ASPACEM/coregrind/m_debuglog.c 2005-09-14 19:38:15 UTC (rev =
4658)
+++ branches/ASPACEM/coregrind/m_debuglog.c 2005-09-14 20:07:27 UTC (rev =
4659)
@@ -384,6 +384,7 @@
Int i;
Int flags;
Int width;
+ Int n_ls;
Bool is_long;
=20
/* We assume that vargs has already been initialised by the=20
@@ -408,7 +409,7 @@
continue;
}
flags =3D 0;
- is_long =3D False;
+ n_ls =3D 0;
width =3D 0; /* length of the field. */
if (format[i] =3D=3D '(') {
flags |=3D VG_MSG_PAREN;
@@ -436,9 +437,16 @@
}
while (format[i] =3D=3D 'l') {
i++;
- is_long =3D True;
+ n_ls++;
}
=20
+ // %d means print a 32-bit integer.
+ // %ld means print a word-size integer.
+ // %lld means print a 64-bit integer.
+ if (0 =3D=3D n_ls) { is_long =3D False; }
+ else if (1 =3D=3D n_ls) { is_long =3D ( sizeof(void*) =3D=3D sizeo=
f(Long) ); }
+ else { is_long =3D True; }
+
switch (format[i]) {
case 'd': /* %d */
flags |=3D VG_MSG_SIGNED;
|
|
From: <sv...@va...> - 2005-09-14 19:38:22
|
Author: sewardj
Date: 2005-09-14 20:38:15 +0100 (Wed, 14 Sep 2005)
New Revision: 4658
Log:
Fix dev/ino printing (really we should teach our printf implementation
to understand %ld/%lu correctly.)
Modified:
branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.c
Modified: branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.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
--- branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.c 2005-09-14 13:26:1=
5 UTC (rev 4657)
+++ branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.c 2005-09-14 19:38:1=
5 UTC (rev 4658)
@@ -1608,14 +1608,14 @@
show_nsegment_full ( Int logLevel, NSegment* seg )
{
VG_(debugLog)(logLevel, "aspacem",
- "NSegment{%s, start=3D0x%llx, end=3D0x%llx, smode=3D%s, dev=3D%lu,=
"
- "ino=3D%lu, offset=3D%llu, fnIdx=3D%d, hasR=3D%d, hasW=3D%d, hasX=3D=
%d, "
+ "NSegment{%s, start=3D0x%llx, end=3D0x%llx, smode=3D%s, dev=3D%llu=
, "
+ "ino=3D%llu, offset=3D%llu, fnIdx=3D%d, hasR=3D%d, hasW=3D%d, hasX=
=3D%d, "
"hasT=3D%d, mark=3D%d}\n",
show_SegKind(seg->kind),
(ULong)seg->start,
(ULong)seg->end,
show_ShrinkMode(seg->smode),
- seg->dev, seg->ino, (ULong)seg->offset, seg->fnIdx,
+ (ULong)seg->dev, (ULong)seg->ino, (ULong)seg->offset, seg->fnIdx,
(Int)seg->hasR, (Int)seg->hasW, (Int)seg->hasX, (Int)seg->hasT,
(Int)seg->mark
);
@@ -1655,12 +1655,13 @@
case SkFileC: case SkFileV:
VG_(debugLog)(
logLevel, "aspacem",
- "%3d: %s %08llx-%08llx %s %c%c%c%c d=3D0x%03lx i=3D%-7ld o=3D=
%-7lld (%d)\n",
+ "%3d: %s %08llx-%08llx %s %c%c%c%c d=3D0x%03llx "
+ "i=3D%-7lld o=3D%-7lld (%d)\n",
segNo, show_SegKind(seg->kind),
(ULong)seg->start, (ULong)seg->end, len_buf,
seg->hasR ? 'r' : '-', seg->hasW ? 'w' : '-',=20
seg->hasX ? 'x' : '-', seg->hasT ? 'T' : '-',=20
- seg->dev, seg->ino, (Long)seg->offset, seg->fnIdx
+ (ULong)seg->dev, (ULong)seg->ino, (Long)seg->offset, seg->fn=
Idx
);
break;
=20
|
|
From: John R.
|
Nicholas Nethercote wrote: > John, will generated code be covered by this profile? Runtime-generated code will be counted as if it were inlined into the nearest code [in calling stack order] that was subject to execve() or dlopen(). If runtime-generated code can be described as a ELF module that the profiler finds out about via intercepting (*_r_debug.r_brk)(), then runtime-generated code also will be profiled. I see this entry: > > 1 994533995 497.2670 497.2670 10 [9] 2:0x70057c53 > 1 0 0.0000 0.0000 0 [9] 2:0x70057c53 > (self) > > Is this a generated basic block? No, it's a subroutine whose name could not be found. There was a CALL to that address, but no dynamic symbol, static symbol, or debug symbol had that address. [Or, perhaps it's a profiler bug. :-)] > > Also, Valgrind seg faulted during the run -- is this due to a bad > interaction with tsprof? It was the profiler that segfaulted: a bug in profiling syscall __NR_exit or __NR_exit_group. Subroutines that have not exited must be "shut down." Fixed in current version. As for profiling a longer-running program, please suggest suitable testcases. -- John Reiser, jreiser@BitWagon.com |
|
From: Nicholas N. <nj...@cs...> - 2005-09-14 16:15:41
|
On Wed, 14 Sep 2005, Oswald Buddenhagen wrote: > On Tue, Sep 13, 2005 at 04:47:43PM -0500, Nicholas Nethercote wrote: >> This is a small program, it would be interesting to see what the >> numbers are like for a bigger program. Presumably the translation >> costs would drop as a proportion of total time. >> > i dare to claim the opposite ... big == many translations. cpu boundness > of the app would mean underproportional translation costs. > try starting a simple kde app (maybe kclac) - it will probably execute > a few hundred kilobytes of unique code before it even shows up. I should have been clearer: I meant "longer-running". Nick |
|
From: Oswald B. <os...@kd...> - 2005-09-14 15:56:13
|
On Tue, Sep 13, 2005 at 04:47:43PM -0500, Nicholas Nethercote wrote: > This is a small program, it would be interesting to see what the > numbers are like for a bigger program. Presumably the translation > costs would drop as a proportion of total time. > i dare to claim the opposite ... big == many translations. cpu boundness of the app would mean underproportional translation costs. try starting a simple kde app (maybe kclac) - it will probably execute a few hundred kilobytes of unique code before it even shows up. -- Hi! I'm a .signature virus! Copy me into your ~/.signature, please! -- Chaos, panic, and disorder - my work here is done. |
|
From: <sv...@va...> - 2005-09-14 13:26:20
|
Author: tom
Date: 2005-09-14 14:26:15 +0100 (Wed, 14 Sep 2005)
New Revision: 4657
Log:
Added missing label.
Modified:
branches/ASPACEM/coregrind/m_syswrap/syswrap-amd64-linux.c
Modified: branches/ASPACEM/coregrind/m_syswrap/syswrap-amd64-linux.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
--- branches/ASPACEM/coregrind/m_syswrap/syswrap-amd64-linux.c 2005-09-14=
13:21:00 UTC (rev 4656)
+++ branches/ASPACEM/coregrind/m_syswrap/syswrap-amd64-linux.c 2005-09-14=
13:26:15 UTC (rev 4657)
@@ -450,6 +450,7 @@
=20
VG_(sigprocmask)(VKI_SIG_SETMASK, &savedmask, NULL);
=20
+ out:
if (res.isError) {
/* clone failed */
VG_(cleanup_thread)(&ctst->arch);
|
|
From: <sv...@va...> - 2005-09-14 13:21:05
|
Author: sewardj
Date: 2005-09-14 14:21:00 +0100 (Wed, 14 Sep 2005)
New Revision: 4656
Log:
do_clone: if stack allocation fails, try to die a bit more elegantly.
Modified:
branches/ASPACEM/coregrind/m_syswrap/syswrap-amd64-linux.c
branches/ASPACEM/coregrind/m_syswrap/syswrap-ppc32-linux.c
Modified: branches/ASPACEM/coregrind/m_syswrap/syswrap-amd64-linux.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
--- branches/ASPACEM/coregrind/m_syswrap/syswrap-amd64-linux.c 2005-09-14=
12:56:33 UTC (rev 4655)
+++ branches/ASPACEM/coregrind/m_syswrap/syswrap-amd64-linux.c 2005-09-14=
13:21:00 UTC (rev 4656)
@@ -379,6 +379,10 @@
vg_assert(VG_(is_valid_tid)(ctid));
=20
stack =3D (UWord*)allocstack(ctid);
+ if (stack =3D=3D NULL) {
+ res =3D VG_(mk_SysRes_Error)( VKI_ENOMEM );
+ goto out;
+ }
=20
/* Copy register state
=20
Modified: branches/ASPACEM/coregrind/m_syswrap/syswrap-ppc32-linux.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
--- branches/ASPACEM/coregrind/m_syswrap/syswrap-ppc32-linux.c 2005-09-14=
12:56:33 UTC (rev 4655)
+++ branches/ASPACEM/coregrind/m_syswrap/syswrap-ppc32-linux.c 2005-09-14=
13:21:00 UTC (rev 4656)
@@ -437,6 +437,10 @@
vg_assert(VG_(is_valid_tid)(ctid));
=20
stack =3D allocstack(ctid);
+ if (stack =3D=3D NULL) {
+ res =3D VG_(mk_SysRes_Error)( VKI_ENOMEM );
+ goto out;
+ }
=20
//? /* make a stack frame */
//? stack -=3D 16;
|
|
From: <sv...@va...> - 2005-09-14 12:56:44
|
Author: sewardj
Date: 2005-09-14 13:56:33 +0100 (Wed, 14 Sep 2005)
New Revision: 4655
Log:
Properly implement VG_(am_notify_mprotect). This increases the number
of programs that actually work. As a side effect, reenable protection
of guard zones at the starts/ends of thread stacks.
Modified:
branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.c
branches/ASPACEM/coregrind/m_syswrap/syswrap-generic.c
branches/ASPACEM/coregrind/pub_core_aspacemgr.h
Modified: branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.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
--- branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.c 2005-09-14 12:11:3=
7 UTC (rev 4654)
+++ branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.c 2005-09-14 12:56:3=
3 UTC (rev 4655)
@@ -1499,6 +1499,11 @@
return res;
}
=20
+static SysRes do_mprotect_NO_NOTIFY(Addr start, SizeT length, UInt prot)
+{
+ return VG_(do_syscall3)(__NR_mprotect, (UWord)start, length, prot );
+}
+
static SysRes do_munmap_NO_NOTIFY(Addr start, SizeT length)
{
return VG_(do_syscall2)(__NR_munmap, (UWord)start, length );
@@ -2485,46 +2490,66 @@
add_segment( &seg );
}
=20
-/* Notifies aspacem that the client completed an mprotect
- successfully. The segment array is updated accordingly. */
+/* Notifies aspacem that an mprotect was completed successfully. The
+ segment array is updated accordingly. Note, as with
+ VG_(am_notify_munmap), it is not the job of this function to reject
+ stupid mprotects, for example the client doing mprotect of
+ non-client areas. Such requests should be intercepted earlier, by
+ the syscall wrapper for mprotect. This function merely records
+ whatever it is told. */
=20
-void VG_(am_notify_client_mprotect)( Addr start, SizeT len, UInt prot )
+void VG_(am_notify_mprotect)( Addr start, SizeT len, UInt prot )
{
- Int iLo, iHi;
+ Int i, iLo, iHi;
+ Bool newR, newW, newX;
=20
+ aspacem_assert(VG_IS_PAGE_ALIGNED(start));
+ aspacem_assert(VG_IS_PAGE_ALIGNED(len));
+
if (len =3D=3D 0)
return;
=20
+ split_nsegments_lo_and_hi( start, start+len-1, &iLo, &iHi );
+
iLo =3D find_nsegment_idx(start);
iHi =3D find_nsegment_idx(start + len - 1);
=20
- if (iLo =3D=3D iHi=20
- && nsegments[iLo].start =3D=3D start=20
- && nsegments[iLo].end+1 =3D=3D start+len
- && (nsegments[iLo].kind =3D=3D SkFileC || nsegments[iLo].kind =3D=
=3D SkAnonC)) {
- nsegments[iLo].hasR =3D toBool(prot & VKI_PROT_READ);
- nsegments[iLo].hasW =3D toBool(prot & VKI_PROT_WRITE);
- nsegments[iLo].hasX =3D toBool(prot & VKI_PROT_EXEC);
- preen_nsegments();
- return;
+ newR =3D toBool(prot & VKI_PROT_READ);
+ newW =3D toBool(prot & VKI_PROT_WRITE);
+ newX =3D toBool(prot & VKI_PROT_EXEC);
+
+ for (i =3D iLo; i <=3D iHi; i++) {
+ /* Apply the permissions to all relevant segments. */
+ switch (nsegments[i].kind) {
+ case SkAnonC: case SkAnonV: case SkFileC: case SkFileV:
+ nsegments[i].hasR =3D newR;
+ nsegments[i].hasW =3D newW;
+ nsegments[i].hasX =3D newX;
+ aspacem_assert(sane_NSegment(&nsegments[i]));
+ break;
+ default:
+ break;
+ }
}
=20
- /* FIXME: unhandled general case */
- if (1)
- VG_(debugLog)(0,"aspacem", "notify mprotect 0x%llx %lld\n",=20
- (ULong)start, (Long)len);
- VG_(am_show_nsegments)(0, "notify_mprotect general case");
- aspacem_barf("notify_mprotect general case");
+ /* Changing permissions could have made previously un-mergable
+ segments mergeable. Therefore have to re-preen them. */
+ preen_segments();
}
=20
=20
-/* Notifies aspacem that the client completed an munmap successfully.
- The segment array is updated accordingly. */
+/* Notifies aspacem that an munmap completed successfully. The
+ segment array is updated accordingly. As with
+ VG_(am_notify_munmap), we merely record the given info, and don't
+ check it for sensibleness. */
=20
-void VG_(am_notify_c_or_v_munmap)( Addr start, SizeT len )
+void VG_(am_notify_munmap)( Addr start, SizeT len )
{
NSegment seg;
=20
+ aspacem_assert(VG_IS_PAGE_ALIGNED(start));
+ aspacem_assert(VG_IS_PAGE_ALIGNED(len));
+
if (len =3D=3D 0)
return;
=20
@@ -2533,6 +2558,10 @@
seg.start =3D start;
seg.end =3D start + len - 1;
add_segment( &seg );
+
+ /* Unmapping could create two adjacent free segments, so a preen is
+ needed. */
+ preen_segments();
}
=20
=20
@@ -2824,7 +2853,8 @@
=20
init_nsegment( &seg );
seg.kind =3D SkResvn;
- seg.start =3D start1; /* NB: extra space is not included in the rese=
rvation. */
+ seg.start =3D start1; /* NB: extra space is not included in the
+ reservation. */
seg.end =3D end1;
seg.smode =3D smode;
add_segment( &seg );
@@ -2963,27 +2993,26 @@
aspacem_assert(VG_IS_PAGE_ALIGNED(stack));
=20
/* Protect the guard areas. */
-#if 0
sres =3D do_mprotect_NO_NOTIFY(=20
- &stack[0],=20
+ (Addr) &stack[0],=20
VG_STACK_GUARD_SZB, VKI_PROT_NONE=20
);
if (sres.isError) goto protect_failed;
- VG_(am_notify_valgrind_mprotect)(=20
- &stack[0],=20
+ VG_(am_notify_mprotect)(=20
+ (Addr) &stack->bytes[0],=20
VG_STACK_GUARD_SZB, VKI_PROT_NONE=20
);
=20
sres =3D do_mprotect_NO_NOTIFY(=20
- &stack[VG_STACK_GUARD_SZB + VG_STACK_ACTIVE_SZB],=20
+ (Addr) &stack->bytes[VG_STACK_GUARD_SZB + VG_STACK_ACTIVE_S=
ZB],=20
VG_STACK_GUARD_SZB, VKI_PROT_NONE=20
);
if (sres.isError) goto protect_failed;
- VG_(am_notify_valgrind_mprotect)(=20
- &stack[VG_STACK_GUARD_SZB + VG_STACK_ACTIVE_SZB],
+ VG_(am_notify_mprotect)(=20
+ (Addr) &stack->bytes[VG_STACK_GUARD_SZB + VG_STACK_ACTIVE_SZB],
VG_STACK_GUARD_SZB, VKI_PROT_NONE=20
);
-#endif
+
/* Looks good. Fill the active area with junk so we can later
tell how much got used. */
=20
@@ -2998,13 +3027,12 @@
VG_(debugLog)( 1,"aspacem","allocated thread stack at 0x%llx size %d\=
n",
(ULong)(Addr)stack, szB);
return stack;
-#if 0
+
protect_failed:
/* The stack was allocated, but we can't protect it. Unmap it and
return NULL (failure). */
(void)do_munmap_NO_NOTIFY( (Addr)stack, szB );
return NULL;
-#endif
}
=20
=20
Modified: branches/ASPACEM/coregrind/m_syswrap/syswrap-generic.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
--- branches/ASPACEM/coregrind/m_syswrap/syswrap-generic.c 2005-09-14 12:=
11:37 UTC (rev 4654)
+++ branches/ASPACEM/coregrind/m_syswrap/syswrap-generic.c 2005-09-14 12:=
56:33 UTC (rev 4655)
@@ -4641,7 +4641,7 @@
Bool xx =3D toBool(prot & VKI_PROT_EXEC);
=20
page_align_addr_and_len(&a, &len);
- VG_(am_notify_client_mprotect)(a, len, prot);
+ VG_(am_notify_mprotect)(a, len, prot);
VG_TRACK( change_mem_mprotect, a, len, rr, ww, xx );
}
=20
@@ -4661,7 +4661,7 @@
SizeT len =3D ARG2;
=20
page_align_addr_and_len(&a, &len);
- VG_(am_notify_c_or_v_munmap)(a, len);
+ VG_(am_notify_munmap)(a, len);
VG_TRACK( die_mem_munmap, a, len );
}
=20
Modified: branches/ASPACEM/coregrind/pub_core_aspacemgr.h
=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
--- branches/ASPACEM/coregrind/pub_core_aspacemgr.h 2005-09-14 12:11:37 U=
TC (rev 4654)
+++ branches/ASPACEM/coregrind/pub_core_aspacemgr.h 2005-09-14 12:56:33 U=
TC (rev 4655)
@@ -302,21 +302,27 @@
extern void VG_(am_notify_client_mmap)
( Addr a, SizeT len, UInt prot, UInt flags, Int fd, SizeT offset );
=20
-/* Notifies aspacem that the client completed an mprotect
- successfully. The segment array is updated accordingly. */
-extern void VG_(am_notify_client_mprotect)( Addr a, SizeT len, UInt prot=
);
+/* Notifies aspacem that an mprotect was completed successfully. The
+ segment array is updated accordingly. Note, as with
+ VG_(am_notify_munmap), it is not the job of this function to reject
+ stupid mprotects, for example the client doing mprotect of
+ non-client areas. Such requests should be intercepted earlier, by
+ the syscall wrapper for mprotect. This function merely records
+ whatever it is told. */
+extern void VG_(am_notify_mprotect)( Addr start, SizeT len, UInt prot );
=20
-/* Notifies aspacem that an munmap was completed successfully. This
- can be used to unmap either client or Valgrind areas. The segment
- array is updated accordingly. */
-extern void VG_(am_notify_c_or_v_munmap)( Addr start, SizeT len );
+/* Notifies aspacem that an munmap completed successfully. The
+ segment array is updated accordingly. As with
+ VG_(am_notify_munmap), we merely record the given info, and don't
+ check it for sensibleness. */
+extern void VG_(am_notify_munmap)( Addr start, SizeT len );
=20
=20
/* Hand a raw mmap to the kernel, without aspacem updating the segment
array. THIS FUNCTION IS DANGEROUS -- it will cause aspacem's view
of the address space to diverge from that of the kernel. DO NOT
USE IT UNLESS YOU UNDERSTAND the request-notify model used by
- aspacem. */
+ aspacem. In short, DO NOT USE THIS FUNCTION. */
extern SysRes VG_(am_do_mmap_NO_NOTIFY)
( Addr start, SizeT length, UInt prot, UInt flags, UInt fd, OffT offs=
et);
=20
|
|
From: <sv...@va...> - 2005-09-14 12:11:40
|
Author: sewardj
Date: 2005-09-14 13:11:37 +0100 (Wed, 14 Sep 2005)
New Revision: 4654
Log:
Redo the way segment splitting is done, to be simpler and general and
to make it possible to handle mprotect properly. Reimplement
add_segment() as a result.
Modified:
branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.c
Modified: branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.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
--- branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.c 2005-09-14 08:12:0=
5 UTC (rev 4653)
+++ branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.c 2005-09-14 12:11:3=
7 UTC (rev 4654)
@@ -1521,6 +1521,7 @@
//--------------------------------------------------------------
// Functions for extracting information about file descriptors.
=20
+/* Extract the device and inode numbers for a fd. */
static=20
Bool get_inode_for_fd ( Int fd, /*OUT*/UInt* dev, /*OUT*/UInt* ino )
{
@@ -1987,127 +1988,108 @@
/*--- ---*/
/*-----------------------------------------------------------------*/
=20
-/* Helper fn */
+/* Split the segment containing 'a' into two, so that 'a' is
+ guaranteed to be the start of a new segment. If 'a' is already the
+ start of a segment, do nothing. */
=20
-static Bool is_SkFile ( SegKind sk )
+static void split_nsegment_at ( Addr a )
{
- return sk =3D=3D SkFileV || sk =3D=3D SkFileC;
-}
+ Int i, j;
=20
+ aspacem_assert(a > 0);
+ aspacem_assert(VG_IS_PAGE_ALIGNED(a));
+=20
+ i =3D find_nsegment_idx(a);
+ aspacem_assert(i >=3D 0 && i < nsegments_used);
=20
-/* Add SEG to the collection, deleting/truncating any it overlaps.
- This deals with all the tricky cases of splitting up segments as
- needed. */
+ if (nsegments[i].start =3D=3D a)
+ /* 'a' is already the start point of a segment, so nothing to be
+ done. */
+ return;
=20
-static void add_segment ( NSegment* seg )
-{
- Int nDeld, i, j, k;
- Addr iStart, iEnd;
+ /* else we have to slide the segments upwards to make a hole */
+ if (nsegments_used >=3D VG_N_SEGMENTS)
+ aspacem_barf_toolow("VG_N_SEGMENTS");
+ for (j =3D nsegments_used-1; j > i; j--)
+ nsegments[j+1] =3D nsegments[j];
+ nsegments_used++;
=20
- Addr dStart =3D seg->start;
- Addr dEnd =3D seg->end;
+ nsegments[i+1] =3D nsegments[i];
+ nsegments[i+1].start =3D a;
+ nsegments[i].end =3D a-1;
=20
- aspacem_assert(dStart <=3D dEnd);
- aspacem_assert(VG_IS_PAGE_ALIGNED(dStart));
- aspacem_assert(VG_IS_PAGE_ALIGNED(dEnd+1));
- aspacem_assert(sane_NSegment(seg));
+ if (nsegments[i].kind =3D=3D SkFileV || nsegments[i].kind =3D=3D SkFi=
leC)
+ nsegments[i+1].offset=20
+ +=3D ((ULong)nsegments[i+1].start) - ((ULong)nsegments[i].start=
);
=20
- nDeld =3D 0;
+ aspacem_assert(sane_NSegment(&nsegments[i]));
+ aspacem_assert(sane_NSegment(&nsegments[i+1]));
+}
=20
- /* Iterate over all segments, considering how each interacts with
- the new address range dStart .. dEnd. */
=20
- for (i =3D 0; i < nsegments_used; i++) {
+/* Do the minimum amount of segment splitting necessary to ensure that
+ sLo is the first address denoted by some segment and sHi is the
+ highest address denoted by some other segment. Returns the indices
+ of the lowest and highest segments in the range. */
=20
- nsegments[i].mark =3D False;
+static=20
+void split_nsegments_lo_and_hi ( Addr sLo, Addr sHi,
+ /*OUT*/Int* iLo,
+ /*OUT*/Int* iHi )
+{
+ aspacem_assert(sLo < sHi);
+ aspacem_assert(VG_IS_PAGE_ALIGNED(sLo));
+ aspacem_assert(VG_IS_PAGE_ALIGNED(sHi+1));
=20
- iStart =3D nsegments[i].start;
- iEnd =3D nsegments[i].end;
+ if (sLo > 0)
+ split_nsegment_at(sLo);
+ if (sHi < sHi+1)
+ split_nsegment_at(sHi+1);
=20
- /* no-overlap cases */
- if (iEnd < dStart) continue;
- if (dEnd < iStart) continue;
+ *iLo =3D find_nsegment_idx(sLo);
+ *iHi =3D find_nsegment_idx(sHi);
+ aspacem_assert(0 <=3D *iLo && *iLo < nsegments_used);
+ aspacem_assert(0 <=3D *iHi && *iHi < nsegments_used);
+ aspacem_assert(*iLo <=3D *iHi);
+ aspacem_assert(nsegments[*iLo].start =3D=3D sLo);
+ aspacem_assert(nsegments[*iHi].end =3D=3D sHi);
+ /* Not that I'm overly paranoid or anything, definitely not :-) */
+}
=20
- if (dStart <=3D iStart && iEnd <=3D dEnd) {
- /* i is completely overlapped. Mark it for deletion. */
- nsegments[i].mark =3D True;
- nDeld++;
- continue;
- }
=20
- if (iStart < dStart && iEnd > dEnd) {
- /* deleted interval is completely contained within i. This
- means i has to be split into two pieces. As a result,
- first move the following elements up by one place to make
- space for the new part. */
- if (nsegments_used >=3D VG_N_SEGMENTS)
- aspacem_barf_toolow("VG_N_SEGMENTS");
- for (j =3D nsegments_used-1; j > i; j--)
- nsegments[j+1] =3D nsegments[j];
- nsegments_used++;
- nsegments[i+1] =3D nsegments[i];
- nsegments[i].end =3D dStart-1;
- nsegments[i+1].start =3D dEnd+1;
- if (is_SkFile(nsegments[i].kind))
- nsegments[i+1].offset +=3D (nsegments[i+1].start - nsegments=
[i].start);
- continue;
- }
+/* Add SEG to the collection, deleting/truncating any it overlaps.
+ This deals with all the tricky cases of splitting up segments as
+ needed. */
=20
- if (iStart < dStart && iEnd <=3D dEnd && iEnd >=3D dStart) {
- /* interval to be deleted straddles upper boundary of i. */
- nsegments[i].end =3D dStart-1;
- continue;
- }
+static void add_segment ( NSegment* seg )
+{
+ Int i, iLo, iHi, delta;
=20
- if (iEnd > dEnd && iStart >=3D dStart && iStart <=3D dEnd) {
- /* interval to be deleted straddles lower boundary of i. */
- if (is_SkFile(nsegments[i].kind))
- nsegments[i].offset +=3D (dEnd+1 - nsegments[i].start);
- nsegments[i].start =3D dEnd+1;
- continue;
- }
+ Addr sStart =3D seg->start;
+ Addr sEnd =3D seg->end;
=20
- /* I don't think we can get here. */
- aspacem_assert(0);
- }
+ aspacem_assert(sStart <=3D sEnd);
+ aspacem_assert(VG_IS_PAGE_ALIGNED(sStart));
+ aspacem_assert(VG_IS_PAGE_ALIGNED(sEnd+1));
+ aspacem_assert(sane_NSegment(seg));
=20
- /* Get rid of the intervals marked for deletion. */
- if (nDeld > 0) {
- j =3D 0;
- for (i =3D 0; i < nsegments_used; i++) {
- if (nsegments[i].mark)
- continue;
- nsegments[j] =3D nsegments[i];
- j++;
- }
- nsegments_used -=3D nDeld;
- }
+ split_nsegments_lo_and_hi( sStart, sEnd, &iLo, &iHi );
=20
- /* At this point, there should be a gap dStart .. dEnd inclusive.
- Find the gap and insert the new interval in it. Set k so that
- all entries >=3D k must be moved up 1, and the new interval placed
- at k. */
- if (nsegments_used >=3D VG_N_SEGMENTS)
- aspacem_barf_toolow("VG_N_SEGMENTS");
- if (nsegments_used =3D=3D 0) {
- k =3D 0;
- } else {
- for (i =3D 0; i < nsegments_used; i++) {
- if (dEnd+1 =3D=3D nsegments[i].start=20
- && /*guard against wraparound*/dEnd+1 > dEnd)
- break;
- }
- k =3D i;
+ /* Now iLo .. iHi inclusive is the range of segment indices which
+ seg will replace. If we're replacing more than one segment,
+ slide those above the range down to fill the hole. */
+ delta =3D iHi - iLo;
+ aspacem_assert(delta >=3D 0);
+ if (delta > 0) {
+ for (i =3D iLo; i < nsegments_used-delta; i++)
+ nsegments[i] =3D nsegments[i+delta];
+ nsegments_used -=3D delta;
}
=20
- aspacem_assert(k >=3D 0 && k <=3D nsegments_used);
- for (j =3D nsegments_used-1; j >=3D k; j--)
- nsegments[j+1] =3D nsegments[j];
- nsegments_used++;
+ nsegments[iLo] =3D *seg;
=20
- nsegments[k] =3D *seg;
-
preen_nsegments();
+ if (0) VG_(am_show_nsegments)(0,"AFTER preen (add_segment)");
}
=20
=20
@@ -2523,10 +2505,15 @@
nsegments[iLo].hasR =3D toBool(prot & VKI_PROT_READ);
nsegments[iLo].hasW =3D toBool(prot & VKI_PROT_WRITE);
nsegments[iLo].hasX =3D toBool(prot & VKI_PROT_EXEC);
+ preen_nsegments();
return;
}
=20
/* FIXME: unhandled general case */
+ if (1)
+ VG_(debugLog)(0,"aspacem", "notify mprotect 0x%llx %lld\n",=20
+ (ULong)start, (Long)len);
+ VG_(am_show_nsegments)(0, "notify_mprotect general case");
aspacem_barf("notify_mprotect general case");
}
=20
|
|
From: <sv...@va...> - 2005-09-14 08:12:08
|
Author: tom
Date: 2005-09-14 09:12:05 +0100 (Wed, 14 Sep 2005)
New Revision: 4653
Log:
Fixup stack handling for amd64. Also removed a redundant line of code
from the x86 code.
Modified:
branches/ASPACEM/coregrind/m_syswrap/syswrap-amd64-linux.c
branches/ASPACEM/coregrind/m_syswrap/syswrap-x86-linux.c
Modified: branches/ASPACEM/coregrind/m_syswrap/syswrap-amd64-linux.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
--- branches/ASPACEM/coregrind/m_syswrap/syswrap-amd64-linux.c 2005-09-14=
08:10:28 UTC (rev 4652)
+++ branches/ASPACEM/coregrind/m_syswrap/syswrap-amd64-linux.c 2005-09-14=
08:12:05 UTC (rev 4653)
@@ -61,70 +61,46 @@
Note. Why is this stuff here?
------------------------------------------------------------------ */
=20
-/*=20
- Allocate a stack for this thread.
+/* Allocate a stack for this thread. They're allocated lazily, and
+ never freed. */
=20
- They're allocated lazily, but never freed.
- */
-#define FILL 0xdeadbeefcabafeed
+/* Allocate a stack for this thread, if it doesn't already have one.
+ Returns the initial stack pointer value to use, or 0 if allocation
+ failed. */
=20
-// Valgrind's stack size, in words.
-#define STACK_SIZE_W 16384
-
-static UWord* allocstack(ThreadId tid)
+static Addr allocstack(ThreadId tid)
{
- ThreadState *tst =3D VG_(get_ThreadState)(tid);
- UWord* rsp;
+ ThreadState* tst =3D VG_(get_ThreadState)(tid);
+ VgStack* stack;
+ Addr initial_SP;
=20
- if (tst->os_state.valgrind_stack_base =3D=3D 0) {
- void *stk =3D VG_(mmap)(0, STACK_SIZE_W * sizeof(UWord) + VKI_PAGE=
_SIZE,
- VKI_PROT_READ|VKI_PROT_WRITE,
- VKI_MAP_PRIVATE|VKI_MAP_ANONYMOUS,
- SF_VALGRIND,
- -1, 0);
+ /* Either the stack_base and stack_init_SP are both zero (in which
+ case a stack hasn't been allocated) or they are both non-zero,
+ in which case it has. */
=20
- if (stk !=3D (void *)-1) {
- VG_(mprotect)(stk, VKI_PAGE_SIZE, VKI_PROT_NONE); /* guard page */
- tst->os_state.valgrind_stack_base =3D ((Addr)stk) + VKI_PAGE_SIZE;
- tst->os_state.valgrind_stack_szB =3D STACK_SIZE_W * sizeof(UWord);
- } else=20
- return (UWord*)-1;
- }
+ if (tst->os_state.valgrind_stack_base =3D=3D 0)
+ vg_assert(tst->os_state.valgrind_stack_init_SP =3D=3D 0);
=20
- for (rsp =3D (UWord*) tst->os_state.valgrind_stack_base;=20
- rsp < (UWord*)(tst->os_state.valgrind_stack_base +
- tst->os_state.valgrind_stack_szB);=20
- rsp++)
- *rsp =3D FILL;
- /* rsp is left at top of stack */
+ if (tst->os_state.valgrind_stack_base !=3D 0)
+ vg_assert(tst->os_state.valgrind_stack_init_SP !=3D 0);
=20
- if (0)
- VG_(printf)("stack for tid %d at %p (%llx); rsp=3D%p\n",
- tid, tst->os_state.valgrind_stack_base,
- *(UWord*)(tst->os_state.valgrind_stack_base), rsp);
+ /* If no stack is present, allocate one. */
=20
- return rsp;
-}
+ if (tst->os_state.valgrind_stack_base =3D=3D 0) {
+ stack =3D VG_(am_alloc_VgStack)( &initial_SP );
+ if (stack) {
+ tst->os_state.valgrind_stack_base =3D (Addr)stack;
+ tst->os_state.valgrind_stack_init_SP =3D initial_SP;
+ }
+ }
=20
-/* NB: this is identical the the x86 version. */
-/* Return how many bytes of this stack have not been used */
-SSizeT VG_(stack_unused)(ThreadId tid)
-{
- ThreadState *tst =3D VG_(get_ThreadState)(tid);
- UWord* p;
-
- for (p =3D (UWord*)tst->os_state.valgrind_stack_base;=20
- p && (p < (UWord*)(tst->os_state.valgrind_stack_base +
- tst->os_state.valgrind_stack_szB));=20
- p++)
- if (*p !=3D FILL)
- break;
-
if (0)
- VG_(printf)("p=3D%p %llx tst->os_state.valgrind_stack_base=3D%p\n"=
,
- p, *p, tst->os_state.valgrind_stack_base);
-
- return ((Addr)p) - tst->os_state.valgrind_stack_base;
+ VG_(printf)( "stack for tid %d at %p; init_SP=3D%p\n",
+ tid,=20
+ (void*)tst->os_state.valgrind_stack_base,=20
+ (void*)tst->os_state.valgrind_stack_init_SP );
+ =20
+ return tst->os_state.valgrind_stack_init_SP;
}
=20
=20
@@ -246,9 +222,13 @@
{
VG_(debugLog)(1, "syswrap-amd64-linux",=20
"entering VG_(main_thread_wrapper_NORETURN)\n");
-#if 0
- UWord* rsp =3D allocstack(tid);
=20
+ Addr rsp =3D allocstack(tid);
+
+ /* If we can't even allocate the first thread's stack, we're hosed.
+ Give up. */
+ vg_assert2(rsp !=3D 0, "Cannot allocate main thread's stack.");
+
/* shouldn't be any other threads around yet */
vg_assert( VG_(count_living_threads)() =3D=3D 1 );
=20
@@ -258,10 +238,7 @@
run_a_thread_NORETURN, /* fn to call */
(Word)tid /* arg to give it */
);
-#endif
=20
- run_a_thread_NORETURN( tid );
-
/*NOTREACHED*/
vg_assert(0);
}
@@ -401,7 +378,7 @@
vg_assert(VG_(is_running_thread)(ptid));
vg_assert(VG_(is_valid_tid)(ctid));
=20
- stack =3D allocstack(ctid);
+ stack =3D (UWord*)allocstack(ctid);
=20
/* Copy register state
=20
Modified: branches/ASPACEM/coregrind/m_syswrap/syswrap-x86-linux.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
--- branches/ASPACEM/coregrind/m_syswrap/syswrap-x86-linux.c 2005-09-14 0=
8:10:28 UTC (rev 4652)
+++ branches/ASPACEM/coregrind/m_syswrap/syswrap-x86-linux.c 2005-09-14 0=
8:12:05 UTC (rev 4653)
@@ -239,8 +239,6 @@
(Word)tid /* arg to give it */
);
=20
- run_a_thread_NORETURN( tid );
-
/*NOTREACHED*/
vg_assert(0);
}
|
|
From: <sv...@va...> - 2005-09-14 08:10:37
|
Author: tom
Date: 2005-09-14 09:10:28 +0100 (Wed, 14 Sep 2005)
New Revision: 4652
Log:
Change the type of dev and ino to UWord for amd64 compatability.
Modified:
branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.c
branches/ASPACEM/coregrind/pub_core_aspacemgr.h
Modified: branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.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
--- branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.c 2005-09-14 01:46:2=
1 UTC (rev 4651)
+++ branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.c 2005-09-14 08:10:2=
8 UTC (rev 4652)
@@ -1602,8 +1602,8 @@
show_nsegment_full ( Int logLevel, NSegment* seg )
{
VG_(debugLog)(logLevel, "aspacem",
- "NSegment{%s, start=3D0x%llx, end=3D0x%llx, smode=3D%s, dev=3D%u, =
"
- "ino=3D%u, offset=3D%llu, fnIdx=3D%d, hasR=3D%d, hasW=3D%d, hasX=3D=
%d, "
+ "NSegment{%s, start=3D0x%llx, end=3D0x%llx, smode=3D%s, dev=3D%lu,=
"
+ "ino=3D%lu, offset=3D%llu, fnIdx=3D%d, hasR=3D%d, hasW=3D%d, hasX=3D=
%d, "
"hasT=3D%d, mark=3D%d}\n",
show_SegKind(seg->kind),
(ULong)seg->start,
@@ -1649,7 +1649,7 @@
case SkFileC: case SkFileV:
VG_(debugLog)(
logLevel, "aspacem",
- "%3d: %s %08llx-%08llx %s %c%c%c%c d=3D0x%03x i=3D%-7d o=3D%=
-7lld (%d)\n",
+ "%3d: %s %08llx-%08llx %s %c%c%c%c d=3D0x%03lx i=3D%-7ld o=3D=
%-7lld (%d)\n",
segNo, show_SegKind(seg->kind),
(ULong)seg->start, (ULong)seg->end, len_buf,
seg->hasR ? 'r' : '-', seg->hasW ? 'w' : '-',=20
@@ -2196,8 +2196,8 @@
/* If these fail, we'd better change the type of dev and ino in
NSegment accordingly. */
struct vki_stat buf;
- aspacem_assert(sizeof(buf.st_dev) =3D=3D sizeof(UInt));
- aspacem_assert(sizeof(buf.st_ino) =3D=3D sizeof(UInt));
+ aspacem_assert(sizeof(buf.st_dev) =3D=3D sizeof(seg.dev));
+ aspacem_assert(sizeof(buf.st_ino) =3D=3D sizeof(seg.ino));
}
=20
/* Add a single interval covering the entire address space. */
Modified: branches/ASPACEM/coregrind/pub_core_aspacemgr.h
=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
--- branches/ASPACEM/coregrind/pub_core_aspacemgr.h 2005-09-14 01:46:21 U=
TC (rev 4651)
+++ branches/ASPACEM/coregrind/pub_core_aspacemgr.h 2005-09-14 08:10:28 U=
TC (rev 4652)
@@ -217,8 +217,8 @@
/* Shrinkable? (SkResvn only) */
ShrinkMode smode;
/* Associated file (SkFile{C,V} only) */
- UInt dev;
- UInt ino;
+ UWord dev;
+ UWord ino;
ULong offset;
Int fnIdx; // file name table index, if name is known
/* Permissions (SkAnon{C,V}, SkFile{C,V} only) */
|
|
From: <js...@ac...> - 2005-09-14 03:07:00
|
Nightly build on phoenix ( SuSE 9.1 ) started at 2005-09-14 03:30:00 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 185 tests, 2 stderr failures, 0 stdout failures ================= none/tests/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: <js...@ac...> - 2005-09-14 02:44:48
|
Nightly build on g5 ( YDL 4.0, ppc970 ) started at 2005-09-14 04:40:00 CEST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 158 tests, 17 stderr failures, 1 stdout failure ================= memcheck/tests/badjump (stderr) memcheck/tests/badjump2 (stderr) memcheck/tests/fprw (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/sigaltstack (stderr) memcheck/tests/supp1 (stderr) memcheck/tests/supp_unknown (stderr) memcheck/tests/vgtest_ume (stderr) memcheck/tests/weirdioctl (stderr) memcheck/tests/xml1 (stderr) cachegrind/tests/chdir (stderr) cachegrind/tests/dlclose (stdout) cachegrind/tests/dlclose (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/fdleak_ipv4 (stderr) |
|
From: Tom H. <to...@co...> - 2005-09-14 02:41:13
|
Nightly build on dunsmere ( athlon, Fedora Core 4 ) started at 2005-09-14 03:30:04 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 187 tests, 5 stderr failures, 0 stdout failures ================= memcheck/tests/leak-tree (stderr) memcheck/tests/weirdioctl (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2005-09-14 02:27:51
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2005-09-14 03:15:06 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 186 tests, 14 stderr failures, 0 stdout failures ================= memcheck/tests/addressable (stderr) memcheck/tests/describe-block (stderr) memcheck/tests/erringfds (stderr) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/match-overrun (stderr) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/sigkill (stderr) memcheck/tests/stack_changes (stderr) none/tests/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2005-09-14 02:25:32
|
Nightly build on ginetta ( i686, Red Hat 8.0 ) started at 2005-09-14 03:10:10 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 186 tests, 2 stderr failures, 0 stdout failures ================= none/tests/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2005-09-14 02:21:30
|
Nightly build on dellow ( x86_64, Fedora Core 4 ) started at 2005-09-14 03:10:10 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 164 tests, 6 stderr failures, 0 stdout failures ================= memcheck/tests/sigprocmask (stderr) memcheck/tests/strchr (stderr) memcheck/tests/vgtest_ume (stderr) memcheck/tests/weirdioctl (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) |