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-08 17:53:09
|
Author: sewardj
Date: 2005-09-08 18:53:03 +0100 (Thu, 08 Sep 2005)
New Revision: 1373
Log:
Reinstate stwbrx.
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-08 17:33:27 UTC (rev 1372)
+++ trunk/priv/guest-ppc32/toIR.c 2005-09-08 17:53:03 UTC (rev 1373)
@@ -3317,6 +3317,23 @@
/*
Integer Load/Store Reverse Instructions
*/
+static IRExpr* /* :: Ity_I32 */ gen_byterev32 ( IRTemp t )
+{
+ vassert(typeOfIRTemp(irbb->tyenv, t) =3D=3D Ity_I32);
+ return
+ binop(Iop_Or32,
+ binop(Iop_Shl32, mkexpr(t), mkU8(24)),
+ binop(Iop_Or32,
+ binop(Iop_And32, binop(Iop_Shl32, mkexpr(t), mkU8(8)),=20
+ mkU32(0x00FF0000)),
+ binop(Iop_Or32,
+ binop(Iop_And32, binop(Iop_Shr32, mkexpr(t), mkU8(8)),
+ mkU32(0x0000FF00)),
+ binop(Iop_And32, binop(Iop_Shr32, mkexpr(t), mkU8(24)),
+ mkU32(0x000000FF) )
+ )));
+}
+
static Bool dis_int_ldst_rev ( UInt theInstr )
{
/* X-Form */
@@ -3364,24 +3381,12 @@
//zz putIReg( Rd_addr, mkexpr(Rd));
//zz break;
=20
- case 0x216: // lwbrx (Load Word Byte-Reverse Indexed, PPC32 p459)
- DIP("lwbrx r%d,r%d,r%d\n", Rd_addr, Ra_addr, Rb_addr);
- assign( w1, loadBE(Ity_I32, mkexpr(EA)) );
- assign( w2,
- binop(Iop_Or32,
- binop(Iop_Shl32, mkexpr(w1), mkU8(24)),
- binop(Iop_Or32,
- binop(Iop_And32, binop(Iop_Shl32, mkexpr(w1), mkU8(8)),=20
- mkU32(0x00FF0000)),
- binop(Iop_Or32,
- binop(Iop_And32, binop(Iop_Shr32, mkexpr(w1), mkU8(8)),
- mkU32(0x0000FF00)),
- binop(Iop_And32, binop(Iop_Shr32, mkexpr(w1), mkU8(24)),
- mkU32(0x000000FF) )
- )))
- );
- putIReg( Rd_addr, mkexpr(w2));
- break;
+ case 0x216: // lwbrx (Load Word Byte-Reverse Indexed, PPC32 p459)
+ DIP("lwbrx r%d,r%d,r%d\n", Rd_addr, Ra_addr, Rb_addr);
+ assign( w1, loadBE(Ity_I32, mkexpr(EA)) );
+ assign( w2, gen_byterev32(w1) );
+ putIReg( Rd_addr, mkexpr(w2));
+ break;
=20
//zz case 0x396: // sthbrx (Store Half Word Byte-Reverse Indexed, PPC=
32 p523)
//zz vassert(0);
@@ -3398,31 +3403,16 @@
//zz binop(Iop_Shr32, mkexpr(byte1), mkU8(8))))=
);
//zz storeBE( mkexpr(EA), getIReg(tmp16) );
//zz break;
-//zz =20
-//zz case 0x296: // stwbrx (Store Word Byte-Reverse Indexed, PPC32 p5=
31)
-//zz vassert(0);
-//zz=20
-//zz DIP("stwbrx r%d,r%d,r%d\n", Rs_addr, Ra_addr, Rb_addr);
-//zz assign( Rs, getIReg(Rs_addr) );
-//zz assign( byte0, binop(Iop_And32, mkexpr(Rs), mkU32(0x000000FF)=
) );
-//zz assign( byte1, binop(Iop_And32, mkexpr(Rs), mkU32(0x0000FF00)=
) );
-//zz assign( byte2, binop(Iop_And32, mkexpr(Rs), mkU32(0x00FF0000)=
) );
-//zz assign( byte3, binop(Iop_And32, mkexpr(Rs), mkU32(0xFF000000)=
) );
-//zz =20
-//zz assign( tmp32,
-//zz binop(Iop_Or32,
-//zz binop(Iop_Or32,
-//zz binop(Iop_Shl32, mkexpr(byte0), mkU8(24))=
,
-//zz binop(Iop_Shl32, mkexpr(byte1), mkU8(8)))=
,
-//zz binop(Iop_Or32,
-//zz binop(Iop_Shr32, mkexpr(byte2), mkU8(8)),
-//zz binop(Iop_Shr32, mkexpr(byte3), mkU8(24))=
)) );
-//zz storeBE( mkexpr(EA), mkexpr(tmp32) );
-//zz break;
=20
- default:
- vex_printf("dis_int_ldst_rev(PPC32)(opc2)\n");
- return False;
+ case 0x296: // stwbrx (Store Word Byte-Reverse Indexed, PPC32 p531=
)
+ DIP("stwbrx r%d,r%d,r%d\n", Rd_addr, Ra_addr, Rb_addr);
+ assign( w1, getIReg(Rd_addr) );
+ storeBE( mkexpr(EA), gen_byterev32(w1) );
+ break;
+ =20
+ default:
+ vex_printf("dis_int_ldst_rev(PPC32)(opc2)\n");
+ return False;
}
return True;
}
|
|
From: <sv...@va...> - 2005-09-08 17:33:30
|
Author: sewardj
Date: 2005-09-08 18:33:27 +0100 (Thu, 08 Sep 2005)
New Revision: 1372
Log:
Reinstate crand, crnand, crorc.
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-06 10:25:46 UTC (rev 1371)
+++ trunk/priv/guest-ppc32/toIR.c 2005-09-08 17:33:27 UTC (rev 1372)
@@ -2960,7 +2960,6 @@
IRTemp crbD =3D newTemp(Ity_I32);
IRTemp crbA =3D newTemp(Ity_I32);
IRTemp crbB =3D newTemp(Ity_I32);
-//uu IRTemp tmp =3D newTemp(Ity_I32);
=20
if (opc1 !=3D 19 || b0 !=3D 0) {
vex_printf("dis_cond_logic(PPC32)(opc1)\n");
@@ -2982,10 +2981,10 @@
assign( crbB, getCRbit(crbB_addr) );
=20
switch (opc2) {
-//zz case 0x101: // crand (Cond Reg AND, PPC32 p372)
-//zz DIP("crand crb%d,crb%d,crb%d\n", crbD_addr, crbA_addr, crb=
B_addr);
-//zz assign( crbD, binop(Iop_And32, mkexpr(crbA), mkexpr(crbB))=
);
-//zz break;
+ case 0x101: // crand (Cond Reg AND, PPC32 p372)
+ DIP("crand crb%d,crb%d,crb%d\n", crbD_addr, crbA_addr, crbB_add=
r);
+ assign( crbD, binop(Iop_And32, mkexpr(crbA), mkexpr(crbB)) );
+ break;
case 0x081: // crandc (Cond Reg AND w. Complement, PPC32 p373)
DIP("crandc crb%d,crb%d,crb%d\n", crbD_addr, crbA_addr, crbB_ad=
dr);
assign( crbD, binop(Iop_And32,=20
@@ -2997,11 +2996,11 @@
assign( crbD, unop(Iop_Not32,
binop(Iop_Xor32, mkexpr(crbA), mkexpr(crbB))=
) );
break;
-//zz case 0x0E1: // crnand (Cond Reg NAND, PPC32 p375)
-//zz DIP("crnand crb%d,crb%d,crb%d\n", crbD_addr, crbA_addr, cr=
bB_addr);
-//zz assign( crbD, unop(Iop_Not32,
-//zz binop(Iop_And32, mkexpr(crbA), mkexpr(c=
rbB))) );
-//zz break;
+ case 0x0E1: // crnand (Cond Reg NAND, PPC32 p375)
+ DIP("crnand crb%d,crb%d,crb%d\n", crbD_addr, crbA_addr, crbB_ad=
dr);
+ assign( crbD, unop(Iop_Not32,
+ binop(Iop_And32, mkexpr(crbA), mkexpr(crbB))=
) );
+ break;
case 0x021: // crnor (Cond Reg NOR, PPC32 p376)
DIP("crnor crb%d,crb%d,crb%d\n", crbD_addr, crbA_addr, crbB_add=
r);
assign( crbD, unop(Iop_Not32,
@@ -3011,16 +3010,16 @@
DIP("cror crb%d,crb%d,crb%d\n", crbD_addr, crbA_addr, crbB_addr=
);
assign( crbD, binop(Iop_Or32, mkexpr(crbA), mkexpr(crbB)) );
break;
-//zz case 0x1A1: // crorc (Cond Reg OR w. Complement, PPC32 p378=
)
-//zz DIP("crorc crb%d,crb%d,crb%d\n", crbD_addr, crbA_addr, crb=
B_addr);
-//zz assign( crbD, binop(Iop_Or32, mkexpr(crbA),
-//zz unop(Iop_Not32, mkexpr(crbB))) );
-//zz break;
+ case 0x1A1: // crorc (Cond Reg OR w. Complement, PPC32 p378)
+ DIP("crorc crb%d,crb%d,crb%d\n", crbD_addr, crbA_addr, crbB_add=
r);
+ assign( crbD, binop(Iop_Or32,=20
+ mkexpr(crbA),
+ unop(Iop_Not32, mkexpr(crbB))) );
+ break;
case 0x0C1: // crxor (Cond Reg XOR, PPC32 p379)
DIP("crxor crb%d,crb%d,crb%d\n", crbD_addr, crbA_addr, crbB_add=
r);
assign( crbD, binop(Iop_Xor32, mkexpr(crbA), mkexpr(crbB)) );
break;
-
default:
vex_printf("dis_cond_logic(PPC32)(opc2)\n");
return False;
|
|
From: <sv...@va...> - 2005-09-08 09:30:38
|
Author: sewardj
Date: 2005-09-08 10:30:35 +0100 (Thu, 08 Sep 2005)
New Revision: 4611
Log:
- fix wraparound problem in add_segment
- improve segment printing
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-08 00:51:0=
3 UTC (rev 4610)
+++ branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.c 2005-09-08 09:30:3=
5 UTC (rev 4611)
@@ -1318,6 +1318,42 @@
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
=20
+static void add_to_aspacem_sprintf_buf ( HChar c, void *p )
+{
+ HChar** aspacem_sprintf_ptr =3D p;
+ *(*aspacem_sprintf_ptr)++ =3D c;
+}
+
+static
+UInt aspacem_vsprintf ( HChar* buf, const HChar *format, va_list vargs )
+{
+ Int ret;
+ Char *aspacem_sprintf_ptr =3D buf;
+
+ ret =3D VG_(debugLog_vprintf)
+ ( add_to_aspacem_sprintf_buf,=20
+ &aspacem_sprintf_ptr, format, vargs );
+ add_to_aspacem_sprintf_buf('\0', &aspacem_sprintf_ptr);
+
+ return ret;
+}
+
+static
+UInt aspacem_sprintf ( HChar* buf, const HChar *format, ... )
+{
+ UInt ret;
+ va_list vargs;
+
+ va_start(vargs,format);
+ ret =3D aspacem_vsprintf(buf, format, vargs);
+ va_end(vargs);
+
+ return ret;
+}
+
+
+/////////////////////////////////////////////////////////////////
+
static void aspacem_barf_toolow ( HChar* what )
{
VG_(debugLog)(0, "aspacem", "Valgrind: FATAL: %s is too low.\n", what)=
;
@@ -1623,26 +1659,35 @@
}
}
=20
+static void show_Addr_concisely ( /*OUT*/HChar* buf, Addr aA )
+{
+ HChar* fmt;
+ ULong a =3D (ULong)aA;
+ if (a >=3D 10000000ULL) {
+ fmt =3D "%6llum";
+a /=3D 1024*1024ULL;
+ } else {
+ fmt =3D "%7llu";
+ }
+ aspacem_sprintf(buf, fmt, a);
+}
+
static void show_nsegment ( Int logLevel, Int segNo, NSegment* seg )
{
+ HChar len_buf[20];
+ ULong len =3D ((ULong)seg->end) - ((ULong)seg->start) + 1;
+ show_Addr_concisely(len_buf, len);
+
switch (seg->kind) {
case SkFree: {
- ULong len =3D ((ULong)seg->end) - ((ULong)seg->start) + 1;
- HChar* fmt;
- if (len >=3D 1024*1024ULL) {
- len /=3D 1024*1024ULL;
- fmt =3D "%3d: %s 0x%08llx-0x%08llx %6llum\n";
- } else {
- fmt =3D "%3d: %s 0x%08llx-0x%08llx %7llu\n";
- }
VG_(debugLog)(
logLevel, "aspacem",
- fmt,
+ "%3d: %s 0x%08llx-0x%08llx %s\n",
segNo,
show_seg_kind(seg),
(ULong)seg->start,
(ULong)seg->end,
- len
+ len_buf
);
break;
}
@@ -1650,12 +1695,12 @@
case SkAnon:
VG_(debugLog)(
logLevel, "aspacem",
- "%3d: %s 0x%08llx-0x%08llx %7llu %c%c%c%c d=3D0x%03x i=3D%-7d o=3D%=
-7lld (%d)\n",
+ "%3d: %s 0x%08llx-0x%08llx %s %c%c%c%c d=3D0x%03x i=3D%-7d o=3D%-7l=
ld (%d)\n",
segNo,
show_seg_kind(seg),
(ULong)seg->start,
(ULong)seg->end,
- ((ULong)seg->end) - ((ULong)seg->start) + 1,
+ len_buf,
seg->hasR ? 'r' : '-',=20
seg->hasW ? 'w' : '-',=20
seg->hasX ? 'x' : '-',=20
@@ -1669,12 +1714,12 @@
case SkFile:
VG_(debugLog)(
logLevel, "aspacem",
- "%3d: %s 0x%08llx-0x%08llx %7llu %c%c%c%c d=3D0x%03x i=3D%-7d o=3D%=
-7lld (%d)\n",
+ "%3d: %s 0x%08llx-0x%08llx %s %c%c%c%c d=3D0x%03x i=3D%-7d o=3D%-7l=
ld (%d)\n",
segNo,
show_seg_kind(seg),
(ULong)seg->start,
(ULong)seg->end,
- ((ULong)seg->end) - ((ULong)seg->start) + 1,
+ len_buf,
seg->hasR ? 'r' : '-',=20
seg->hasW ? 'w' : '-',=20
seg->hasX ? 'x' : '-',=20
@@ -1688,20 +1733,16 @@
case SkResvn:
VG_(debugLog)(
logLevel, "aspacem",
- "%3d: %s 0x%08llx-0x%08llx %7llu %c%c%c%c d=3D0x%03x i=3D%-7d o=3D%=
-7lld (%d) (%s,%s,%llu)\n",
+ "%3d: %s 0x%08llx-0x%08llx %s %c%c%c%c (%s,%s,%llu)\n",
segNo,
show_seg_kind(seg),
(ULong)seg->start,
(ULong)seg->end,
- ((ULong)seg->end) - ((ULong)seg->start) + 1,
+ len_buf,
seg->hasR ? 'r' : '-',=20
seg->hasW ? 'w' : '-',=20
seg->hasX ? 'x' : '-',=20
seg->anyTranslated ? 'T' : '-',=20
- seg->dev,
- seg->ino,
- (Long)seg->offset,
- seg->fnIdx,
showMovable(seg->moveLo),
showMovable(seg->moveHi),
(ULong)seg->maxlen
@@ -1744,7 +1785,7 @@
=20
Addr dStart =3D seg->start;
Addr dEnd =3D seg->end;
- =20
+
aspacem_assert(dStart <=3D dEnd);
=20
nDeld =3D 0;
@@ -1823,7 +1864,8 @@
k =3D 0;
} else {
for (i =3D 0; i < nsegments_used; i++)
- if (nsegments[i].start =3D=3D dEnd+1)
+ if (dEnd+1 =3D=3D nsegments[i].start=20
+ && /*guard against wraparound*/dEnd+1 > dEnd)
break;
k =3D i;
}
@@ -1900,7 +1942,6 @@
init_resvn(&seg, Addr_MIN, aspacem_cStart-1);
add_segment(&seg);
}
-
if (aspacem_maxAddr < Addr_MAX) {
init_resvn(&seg, aspacem_maxAddr+1, Addr_MAX);
add_segment(&seg);
|
|
From: Tom H. <th...@cy...> - 2005-09-08 03:16:45
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2005-09-08 03:00:03 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, 7 stderr failures, 1 stdout failure ================= 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) none/tests/fdleak_fcntl (stderr) none/tests/tls (stdout) |
|
From: <js...@ac...> - 2005-09-08 02:56:23
|
Nightly build on phoenix ( SuSE 9.1 ) started at 2005-09-08 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-08 02:44:52
|
Nightly build on g5 ( YDL 4.0, ppc970 ) started at 2005-09-08 04:40:01 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, 18 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/pointer-trace (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-08 02:41:03
|
Nightly build on dunsmere ( athlon, Fedora Core 4 ) started at 2005-09-08 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-08 02:28:01
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2005-09-08 03:15:03 BST 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 == 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) ================================================= == Results 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, 1 stdout failure ================= 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) none/tests/x86/yield (stdout) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Thu Sep 8 03:21:31 2005 --- new.short Thu Sep 8 03:27:55 2005 *************** *** 8,10 **** ! == 186 tests, 14 stderr failures, 1 stdout failure ================= memcheck/tests/addressable (stderr) --- 8,10 ---- ! == 186 tests, 14 stderr failures, 0 stdout failures ================= memcheck/tests/addressable (stderr) *************** *** 23,25 **** none/tests/x86/int (stderr) - none/tests/x86/yield (stdout) --- 23,24 ---- |
|
From: Tom H. <th...@cy...> - 2005-09-08 02:26:15
|
Nightly build on ginetta ( i686, Red Hat 8.0 ) started at 2005-09-08 03:10:07 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-08 02:21:27
|
Nightly build on dellow ( x86_64, Fedora Core 4 ) started at 2005-09-08 03:10:07 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) |
|
From: Tom H. <th...@cy...> - 2005-09-08 02:19:13
|
Nightly build on aston ( x86_64, Fedora Core 3 ) started at 2005-09-08 03:05:12 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) |
|
From: <sv...@va...> - 2005-09-08 00:51:09
|
Author: sewardj
Date: 2005-09-08 01:51:03 +0100 (Thu, 08 Sep 2005)
New Revision: 4610
Log:
Save work-in-progress on aspacem (interval array and associated
infrastructure). Is still totally broken; do not try to use.
Modified:
branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.c
branches/ASPACEM/coregrind/m_aspacemgr/read_procselfmaps.c
branches/ASPACEM/coregrind/m_main.c
branches/ASPACEM/coregrind/pub_core_aspacemgr.h
branches/ASPACEM/include/pub_tool_basics.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-06 13:04:4=
0 UTC (rev 4609)
+++ branches/ASPACEM/coregrind/m_aspacemgr/aspacemgr.c 2005-09-08 00:51:0=
3 UTC (rev 4610)
@@ -31,6 +31,7 @@
*/
=20
#include "pub_core_basics.h"
+#include "pub_core_debuglog.h"
#include "pub_core_debuginfo.h" // Needed for pub_core_aspacemgr.h :(
#include "pub_core_aspacemgr.h"
#include "pub_core_libcbase.h"
@@ -1314,6 +1315,606 @@
#endif
}
=20
+/////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////
+
+static void aspacem_barf_toolow ( HChar* what )
+{
+ VG_(debugLog)(0, "aspacem", "Valgrind: FATAL: %s is too low.\n", what)=
;
+ VG_(debugLog)(0, "aspacem", " Increase it and rebuild. "
+ "Exiting now.\n");
+ VG_(exit)(1);
+}
+
+static void aspacem_assert_fail( const HChar* expr,
+ const Char* file,
+ Int line,=20
+ const Char* fn )
+{
+ VG_(debugLog)(0, "aspacem", "Valgrind: FATAL: assertion failed:\n");
+ VG_(debugLog)(0, "aspacem", " %s\n", expr);
+ VG_(debugLog)(0, "aspacem", " at %s:%d (%s)\n", file,line,fn);
+ VG_(debugLog)(0, "aspacem", "Exiting now.\n");
+ VG_(exit)(1);
+}
+
+#define aspacem_assert(expr) \
+ ((void) ((expr) ? 0 : \
+ (aspacem_assert_fail(#expr, \
+ __FILE__, __LINE__, \
+ __PRETTY_FUNCTION__))))
+
+
+
+#define Addr_MIN ((Addr)0)
+#define Addr_MAX ((Addr)(-1ULL))
+
+
+/* Describes the ways in which the ends of a segment may be moved. */
+typedef
+ enum {
+ MoFixed, // usual case -- cannot be moved
+ MoDownOK, // can be moved to a lower address
+ MoUpOK // can be moved to a higher address
+ }
+ Movable;
+
+static HChar* showMovable ( Movable m )
+{
+ switch (m) {
+ case MoFixed: return "Fixed";
+ case MoDownOK: return "MoveD";
+ case MoUpOK: return "MoveU";
+ default: return "?????";
+ }
+}
+
+typedef
+ enum {
+ SkFree, // unmapped space
+ SkAnon, // anonymous mapping
+ SkFile, // mapping to a file
+ SkResvn // reservation
+ }
+ MKind;
+
+/* Describes a segment. Invariants:
+
+ kind =3D=3D SkFree:
+ // the only meaningful fields are .start and .end
+
+ kind =3D=3D SkAnon:
+ // the segment may be resized if required
+ // there's no associated file:
+ dev=3D=3Dino=3D=3Dfoff =3D 0, fnidx =3D=3D -1
+ // segment may have permissions
+
+ kind =3D=3D SkFile
+ // the segment may not be resized:
+ moveLo =3D=3D moveHi =3D=3D NotMovable, maxlen =3D=3D 0
+ // there is an associated file
+ // segment may have permissions
+
+ kind =3D=3D SkResvn
+ // the segment may be resized if required
+ // there's no associated file:
+ dev=3D=3Dino=3D=3Dfoff =3D 0, fnidx =3D=3D -1
+ // segment has no permissions
+ hasR=3D=3DhasW=3D=3DhasX=3D=3DanyTranslated =3D=3D False
+
+ Also: if !isClient then anyTranslated=3D=3DFalse
+ (viz, not allowed to make translations from non-client areas)
+*/
+typedef
+ struct {
+ MKind kind;
+ Bool isClient;
+ /* Extent (SkFree, SkAnon, SkFile, SkResvn) */
+ Addr start; // lowest address in range
+ Addr end; // highest address in range
+ /* Resizability (SkAnon, SkResvn only) */
+ Movable moveLo; // if yes, can lower end be moved
+ Movable moveHi; // if yes, can upper end be moved
+ SizeT maxlen; // if yes, what's the max size?
+ /* Associated file (SkFile only) */
+ UInt dev;
+ UInt ino;
+ ULong offset;
+ Int fnIdx; // file name table index, if name is known
+ /* Permissions (SkAnon, SkFile only) */
+ Bool hasR;
+ Bool hasW;
+ Bool hasX;
+ Bool anyTranslated;
+ /* Admin */
+ Bool mark;
+ }
+ NSegment;
+
+/* Array [0 .. nsegments_used-1] of all mappings. */
+/* Sorted by .addr field. */
+/* I: len may not be zero. */
+/* I: overlapping segments are not allowed. */
+/* Each segment can optionally hold an index into the filename table. */
+
+static NSegment nsegments[VG_N_SEGMENTS];
+static Int nsegments_used =3D 0;
+
+
+
+
+/* check the interval array */
+static void check_nsegments ( void )
+{
+ Int i;
+ aspacem_assert(nsegments_used > 0);
+ aspacem_assert(nsegments[0].start =3D=3D Addr_MIN);
+ aspacem_assert(nsegments[nsegments_used-1].end =3D=3D Addr_MAX);
+ for (i =3D 1; i < nsegments_used; i++)
+ aspacem_assert(nsegments[i-1].end+1 =3D=3D nsegments[i].start);
+}
+
+
+
+
+
+
+/* Limits etc */
+
+// The smallest address that aspacem will try to allocate
+static Addr aspacem_minAddr;
+
+// The largest address that aspacem will try to allocate
+static Addr aspacem_maxAddr;
+
+// Where aspacem will start looking for client space
+static Addr aspacem_cStart;
+
+// Where aspacem will start looking for Valgrind space
+static Addr aspacem_vStart;
+
+
+Bool VG_(aspacem_getAdvisory)
+ ( MapRequest* req, Bool forClient, /*OUT*/Addr* result )
+{
+ return False;
+#if 0
+ /* Iterate over all holes in the address space, twice. In the first
+pass, find the first hole which is not below the search start
+point. */
+ Addr holeStart, holeEnd, holeLen;
+ Int i, j;
+
+ Addr minAddr =3D Addr_MIN;
+ Addr maxAddr =3D Addr_MAX;
+ Addr startPoint =3D forClient ? aspacem_cStart : aspacem_vStart;
+
+ Addr reqStart =3D req->rkind=3D=3DMAny ? 0 : req->start;
+ Addr reqEnd =3D reqStart + req->len - 1;
+ Addr reqLen =3D req->len;
+
+ Addr floatStart =3D 0;
+ Bool floatFound =3D False;
+
+ /* Don't waste time looking for a fixed match if not requested to. */
+ Bool fixedFound =3D req->rkind=3D=3DMAny ? True : False;
+
+ for (i =3D 0; i <=3D/*yes,really*/ nsegments_used; i++) {
+ holeEnd =3D i=3D=3Dnsegments_used
+ ? maxAddr
+ : nsegments[i].start - 1;
+ if (holeEnd >=3D startPoint)
+ break;
+ }
+
+ /* Now examine holes from index i back round to i-1. Record the
+ size and length of the first fixed hole and the first floating
+ hole which would satisfy the request. */
+ for (j =3D 0; j < nsegments_used; j++) {
+
+ holeStart =3D i=3D=3D0=20
+ ? minAddr=20
+ : nsegments[i-1].start + nsegments[i-1].len - 1;
+ holeEnd =3D i=3D=3Dnsegments_used
+ ? maxAddr
+ : nsegments[i].start - 1;
+
+ /* Clamp the hole to something plausible */
+ if (holeStart < aspacem_minAddr) holeStart =3D aspacem_minAddr;
+ if (holeEnd > aspacem_maxAddr) holeEnd =3D aspacem_maxAddr;
+
+ /* If it still looks viable, see if it's any use to us. */
+ if (holeStart < holeEnd) {
+
+ holeLen =3D holeEnd - holeStart + 1;
+
+ if (!fixedFound=20
+ && holeStart <=3D reqStart && reqEnd <=3D holeEnd) {
+ fixedFound =3D True;
+ }
+
+ if (!floatFound
+ && holeLen >=3D reqLen) {
+ floatFound =3D True;
+ floatStart =3D holeStart;
+ }
+ }
+
+ /* Don't waste time searching once we've found what we wanted. */
+ if (fixedFound && floatFound)
+ break;
+
+ i++;
+ if (i >=3D nsegments_used) i =3D 0;
+ }
+
+ /* Now see if we found anything which can satisfy the request. */
+ switch (req->rkind) {
+ case MFixed:
+ if (fixedFound) {
+ *result =3D req->start;
+ return True;
+ } else {
+ return False;
+ }
+ break;
+ case MHint:
+ if (fixedFound) {
+ *result =3D req->start;
+ return True;
+ }
+ if (floatFound) {
+ *result =3D floatStart;
+ return True;
+ }
+ return False;
+ case MAny:
+ if (floatFound) {
+ *result =3D floatStart;
+ return True;
+ }
+ return False;
+
+ default: break;
+ }
+ /*NOTREACHED*/
+ aspacemgr_barf("getAdvisory: unknown request kind");
+ return False;
+#endif
+}
+
+
+
+static void init_nsegment ( /*OUT*/NSegment* seg )
+{
+ seg->kind =3D SkAnon;
+ seg->isClient =3D False;
+ seg->start =3D 0;
+ seg->end =3D 0;
+ seg->moveLo =3D MoFixed;
+ seg->moveHi =3D MoFixed;
+ seg->maxlen =3D 0;
+ seg->dev =3D 0;
+ seg->ino =3D 0;
+ seg->offset =3D 0;
+ seg->fnIdx =3D -1;
+ seg->hasR =3D seg->hasR =3D seg->hasW =3D False;
+ seg->anyTranslated =3D False;
+ seg->mark =3D False;
+}
+
+static void init_resvn ( /*OUT*/NSegment* seg, Addr start, Addr end )
+{
+ aspacem_assert(start < end);
+ init_nsegment(seg);
+ seg->kind =3D SkResvn;
+ seg->start =3D start;
+ seg->end =3D end;
+}
+
+static HChar* show_seg_kind ( NSegment* seg )
+{
+ switch (seg->kind) {
+ case SkFree: return "FREE";
+ case SkAnon: return seg->isClient ? "ANON" : "anon";
+ case SkFile: return seg->isClient ? "FILE" : "file";
+ case SkResvn: return seg->isClient ? "RSVN" : "rsvn";
+ default: return "????";
+ }
+}
+
+static void show_nsegment ( Int logLevel, Int segNo, NSegment* seg )
+{
+ switch (seg->kind) {
+ case SkFree: {
+ ULong len =3D ((ULong)seg->end) - ((ULong)seg->start) + 1;
+ HChar* fmt;
+ if (len >=3D 1024*1024ULL) {
+ len /=3D 1024*1024ULL;
+ fmt =3D "%3d: %s 0x%08llx-0x%08llx %6llum\n";
+ } else {
+ fmt =3D "%3d: %s 0x%08llx-0x%08llx %7llu\n";
+ }
+ VG_(debugLog)(
+ logLevel, "aspacem",
+ fmt,
+ segNo,
+ show_seg_kind(seg),
+ (ULong)seg->start,
+ (ULong)seg->end,
+ len
+ );
+ break;
+ }
+
+ case SkAnon:
+ VG_(debugLog)(
+ logLevel, "aspacem",
+ "%3d: %s 0x%08llx-0x%08llx %7llu %c%c%c%c d=3D0x%03x i=3D%-7d o=3D%=
-7lld (%d)\n",
+ segNo,
+ show_seg_kind(seg),
+ (ULong)seg->start,
+ (ULong)seg->end,
+ ((ULong)seg->end) - ((ULong)seg->start) + 1,
+ seg->hasR ? 'r' : '-',=20
+ seg->hasW ? 'w' : '-',=20
+ seg->hasX ? 'x' : '-',=20
+ seg->anyTranslated ? 'T' : '-',=20
+ seg->dev,
+ seg->ino,
+ (Long)seg->offset,
+ seg->fnIdx
+ );
+ break;
+ case SkFile:
+ VG_(debugLog)(
+ logLevel, "aspacem",
+ "%3d: %s 0x%08llx-0x%08llx %7llu %c%c%c%c d=3D0x%03x i=3D%-7d o=3D%=
-7lld (%d)\n",
+ segNo,
+ show_seg_kind(seg),
+ (ULong)seg->start,
+ (ULong)seg->end,
+ ((ULong)seg->end) - ((ULong)seg->start) + 1,
+ seg->hasR ? 'r' : '-',=20
+ seg->hasW ? 'w' : '-',=20
+ seg->hasX ? 'x' : '-',=20
+ seg->anyTranslated ? 'T' : '-',=20
+ seg->dev,
+ seg->ino,
+ (Long)seg->offset,
+ seg->fnIdx
+ );
+ break;
+ case SkResvn:
+ VG_(debugLog)(
+ logLevel, "aspacem",
+ "%3d: %s 0x%08llx-0x%08llx %7llu %c%c%c%c d=3D0x%03x i=3D%-7d o=3D%=
-7lld (%d) (%s,%s,%llu)\n",
+ segNo,
+ show_seg_kind(seg),
+ (ULong)seg->start,
+ (ULong)seg->end,
+ ((ULong)seg->end) - ((ULong)seg->start) + 1,
+ seg->hasR ? 'r' : '-',=20
+ seg->hasW ? 'w' : '-',=20
+ seg->hasX ? 'x' : '-',=20
+ seg->anyTranslated ? 'T' : '-',=20
+ seg->dev,
+ seg->ino,
+ (Long)seg->offset,
+ seg->fnIdx,
+ showMovable(seg->moveLo),
+ showMovable(seg->moveHi),
+(ULong)seg->maxlen
+ );
+ break;
+
+ default:
+ VG_(debugLog)(
+ logLevel, "aspacem",
+ "%3d: ???? UNKNOWN SEGMENT KIND\n",
+segNo );
+ break;
+ }
+}
+
+/* Print out the segment array (debugging only!). */
+static void show_nsegments ( Int logLevel, HChar* who )
+{
+ Int i;
+ VG_(debugLog)(logLevel, "aspacem",
+ "<<< SHOW_SEGMENTS: %s (%d segments, %d segnames)\n",=20
+ who, segments_used, segnames_used);
+ for (i =3D 0; i < segnames_used; i++) {
+ if (!segnames[i].inUse)
+ continue;
+ VG_(debugLog)(logLevel, "aspacem",
+ "(%2d) %s\n", i, segnames[i].fname);
+ }
+ for (i =3D 0; i < nsegments_used; i++)
+ show_nsegment( logLevel, i, &nsegments[i] );
+ VG_(debugLog)(logLevel, "aspacem",
+ ">>>\n");
+}
+
+/* Add SEG to the collection, deleting/truncating any it overlaps */
+static void add_segment ( NSegment* seg )
+{
+ Int nDeld, i, j, k;
+ Addr iStart, iEnd;
+
+ Addr dStart =3D seg->start;
+ Addr dEnd =3D seg->end;
+ =20
+ aspacem_assert(dStart <=3D dEnd);
+
+ nDeld =3D 0;
+
+ for (i =3D 0; i < nsegments_used; i++) {
+
+ nsegments[i].mark =3D False;
+
+ iStart =3D nsegments[i].start;
+ iEnd =3D nsegments[i].end;
+
+ /* no-overlap cases */
+ if (iEnd < dStart) continue;
+ if (dEnd < iStart) continue;
+
+ if (dStart <=3D iStart && iEnd <=3D dEnd) {
+ /* i is completely overlapped. Mark it for deletion. */
+ nsegments[i].mark =3D True;
+ nDeld++;
+ continue;
+ }
+
+ 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;
+ nsegments[i+1].offset +=3D (nsegments[i+1].start - nsegments[i].st=
art);
+ continue;
+ }
+
+ 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;
+ }
+
+ if (iEnd > dEnd && iStart >=3D dStart && iStart <=3D dEnd) {
+ /* interval to be deleted straddles lower boundary of i. */
+ nsegments[i].offset +=3D (dEnd+1 - nsegments[i].start);
+ nsegments[i].start =3D dEnd+1;
+ continue;
+ }
+
+ /* I don't think we can get here */
+ aspacem_assert(0);
+ }
+
+ /* 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;
+ }
+
+ /* 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 (nsegments[i].start =3D=3D dEnd+1)
+ break;
+ k =3D i;
+ }
+
+ 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[k] =3D *seg;
+
+ check_nsegments();
+}
+
+
+
+static void read_maps_callback (=20
+ Addr addr, SizeT len, UInt prot,
+ UInt dev, UInt ino, ULong foff, const UChar* filename )
+{
+ NSegment seg;
+ init_nsegment( &seg );
+ seg.start =3D addr;
+ seg.end =3D addr+len-1;
+ seg.dev =3D dev;
+ seg.ino =3D ino;
+ seg.offset =3D foff;
+ seg.hasR =3D toBool(prot & VKI_PROT_READ);
+ seg.hasW =3D toBool(prot & VKI_PROT_WRITE);
+ seg.hasX =3D toBool(prot & VKI_PROT_EXEC);
+
+ seg.kind =3D SkAnon;
+ if (filename) {=20
+ seg.kind =3D SkFile;
+ seg.fnIdx =3D allocate_segname( filename );
+ }
+
+ show_nsegment( 0,0, &seg );
+ add_segment( &seg );
+}
+
+void VG_(new_aspacem_start) ( void )
+{
+ NSegment seg;
+
+ /* Add a single interval covering the entire address space. */
+ init_nsegment(&seg);
+ seg.kind =3D SkFree;
+ seg.start =3D Addr_MIN;
+ seg.end =3D Addr_MAX;
+ nsegments[0] =3D seg;
+ nsegments_used =3D 1;
+
+ /* Establish address limits and block out unusable parts
+ accordingly. */
+
+ aspacem_minAddr =3D (Addr) 0x00000000;
+
+# if VG_WORDSIZE =3D=3D 8
+ aspacem_maxAddr =3D (Addr)0x400000000 - 1; // 16G
+# else
+ aspacem_maxAddr =3D (Addr) 0xC0000000 - 1; // 3G
+# endif
+
+ aspacem_cStart =3D (Addr)0x04000000; // 64M
+ aspacem_vStart =3D (aspacem_minAddr + aspacem_maxAddr + 1) / 2;
+
+ VG_(debugLog)(2, "aspacem", "minAddr =3D 0x%llx\n", (ULong)aspacem_mi=
nAddr);
+ VG_(debugLog)(2, "aspacem", "maxAddr =3D 0x%llx\n", (ULong)aspacem_ma=
xAddr);
+ VG_(debugLog)(2, "aspacem", " cStart =3D 0x%llx\n", (ULong)aspacem_cS=
tart);
+ VG_(debugLog)(2, "aspacem", " vStart =3D 0x%llx\n", (ULong)aspacem_vS=
tart);
+
+ if (aspacem_cStart > Addr_MIN) {
+ init_resvn(&seg, Addr_MIN, aspacem_cStart-1);
+ add_segment(&seg);
+ }
+
+ if (aspacem_maxAddr < Addr_MAX) {
+ init_resvn(&seg, aspacem_maxAddr+1, Addr_MAX);
+ add_segment(&seg);
+ }
+
+ show_nsegments(2, "Initial layout");
+
+ VG_(debugLog)(2, "aspacem", "Reading /proc/self/maps\n");
+ VG_(parse_procselfmaps) ( read_maps_callback );
+
+ show_nsegments(2, "With contents of /proc/self/maps");
+}
+
+
/*--------------------------------------------------------------------*/
/*--- end ---*/
/*--------------------------------------------------------------------*/
Modified: branches/ASPACEM/coregrind/m_aspacemgr/read_procselfmaps.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/read_procselfmaps.c 2005-09-06=
13:04:40 UTC (rev 4609)
+++ branches/ASPACEM/coregrind/m_aspacemgr/read_procselfmaps.c 2005-09-08=
00:51:03 UTC (rev 4610)
@@ -266,7 +266,6 @@
if (ww =3D=3D 'w') prot |=3D VKI_PROT_WRITE;
if (xx =3D=3D 'x') prot |=3D VKI_PROT_EXEC;
=20
- //if (start < VG_(valgrind_last))
(*record_mapping) ( start, endPlusOne-start,=20
prot, maj * 256 + min, ino,
foffset, filename );
Modified: branches/ASPACEM/coregrind/m_main.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_main.c 2005-09-06 13:04:40 UTC (rev 4609=
)
+++ branches/ASPACEM/coregrind/m_main.c 2005-09-08 00:51:03 UTC (rev 4610=
)
@@ -2026,6 +2026,11 @@
*/
=20
=20
+/* When main() is entered, we should be on the following stack, not
+ the one the kernel gave us. */
+VgStack VG_(the_root_stack);
+
+
Int main(Int argc, HChar **argv, HChar **envp)
{
HChar** cl_argv;
@@ -2076,6 +2081,28 @@
messages all through startup. */
VG_(debugLog_startup)(loglevel, "Stage 2 (main)");
=20
+ //--------------------------------------------------------------
+ // Start up the address space manager
+ // p: logging
+ //--------------------------------------------------------------
+ VG_(debugLog)(1, "main", "Starting the address space manager\n");
+
+ /* Ensure we're on a plausible stack. */
+ { HChar* limLo =3D (HChar*)(&VG_(the_root_stack)[0]);
+ HChar* limHi =3D limLo + sizeof(VG_(the_root_stack));
+ HChar* aLocal =3D (HChar*)&zero; /* any auto local will do */
+ if (aLocal < limLo || aLocal >=3D limHi) {
+ /* something's wrong. Stop. */
+ VG_(debugLog)(0, "main", "Root stack %p to %p, a local %p\n",
+ limLo, limHi, aLocal );
+ VG_(debugLog)(0, "main", "FATAL: Initial stack switched failed.\=
n");
+ VG_(debugLog)(0, "main", " Cannot continue. Sorry.\n");
+ VG_(exit)(1);
+ }
+ }
+
+ VG_(new_aspacem_start)();
+
//=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
// Command line argument handling order:
// * If --help/--help-debug are present, show usage message=20
@@ -2653,18 +2680,23 @@
*/
=20
/* The kernel hands control to _start, which extracts the initial
- stack pointer and calls onwards to _start_in_C. */
+ stack pointer and calls onwards to _start_in_C. This also switches t=
he new stack. */
#if defined(VGP_x86_linux)
asm("\n"
"\t.globl _start\n"
"\t.type _start,@function\n"
"_start:\n"
"\tmovl %esp,%eax\n"
- "\tandl $~15,%esp\n" /* Make sure stack is 16 byte aligned */
- "\tpushl %eax\n" /* Push junk to preserve alignment */
- "\tpushl %eax\n" /* Push junk to preserve alignment */
- "\tpushl %eax\n" /* Push junk to preserve alignment */
- "\tpushl %eax\n" /* Pass pointer to argc to _start_in_C */
+ /* set up the new stack in %eax */
+ "\tmovl $vgPlain_the_root_stack, %eax\n"
+ "\taddl $"VG_STRINGIFY(VG_STACK_GUARD_SZB)", %eax\n"
+ "\taddl $"VG_STRINGIFY(VG_STACK_ACTIVE_SZB)", %eax\n"
+ "\tsubl $16, %eax\n"
+ "\tandl $~15, %eax\n"
+ /* install it, and collect the original one */
+ "\txchgl %eax, %esp\n"
+ /* call _start_in_C, passing it the startup %esp */
+ "\tpushl %eax\n"
"\tcall _start_in_C\n"
"\thlt\n"
);
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-06 13:04:40 U=
TC (rev 4609)
+++ branches/ASPACEM/coregrind/pub_core_aspacemgr.h 2005-09-08 00:51:03 U=
TC (rev 4610)
@@ -151,6 +151,31 @@
// Pointercheck
extern Bool VG_(setup_pointercheck) ( Addr client_base, Addr client_end =
);
=20
+/////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////
+
+#define VG_STACK_GUARD_SZB 8192
+#define VG_STACK_ACTIVE_SZB 65536
+
+typedef
+ HChar
+ VgStack[VG_STACK_GUARD_SZB + VG_STACK_ACTIVE_SZB + VG_STACK_GUARD_SZB=
];
+
+extern void VG_(new_aspacem_start) ( void );
+
+
+typedef
+ struct {
+ enum { MFixed, MHint, MAny } rkind;
+ Addr start;
+ Addr len;
+ }
+ MapRequest;
+
+extern
+Bool VG_(aspacem_getAdvisory)
+ ( MapRequest* req, Bool forClient, /*OUT*/Addr* result );
+
#endif // __PUB_CORE_ASPACEMGR_H
=20
/*--------------------------------------------------------------------*/
Modified: branches/ASPACEM/include/pub_tool_basics.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/include/pub_tool_basics.h 2005-09-06 13:04:40 UTC (r=
ev 4609)
+++ branches/ASPACEM/include/pub_tool_basics.h 2005-09-08 00:51:03 UTC (r=
ev 4610)
@@ -106,7 +106,7 @@
SysRes;
=20
/* ---------------------------------------------------------------------
- Miscellaneous (word size, endianness, regparmness)
+ Miscellaneous (word size, endianness, regparmness, stringification)
------------------------------------------------------------------ */
=20
/* Word size: this is going to be either 4 or 8. */
@@ -132,6 +132,10 @@
# error Unknown arch
#endif
=20
+/* Macro games */
+#define VG_STRINGIFZ(__str) #__str
+#define VG_STRINGIFY(__str) VG_STRINGIFZ(__str)
+
#endif /* __PUB_TOOL_BASICS_H */
=20
/*--------------------------------------------------------------------*/
|