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
(16) |
2
(23) |
3
(15) |
|
4
(19) |
5
(21) |
6
(27) |
7
(18) |
8
(17) |
9
(15) |
10
(11) |
|
11
(9) |
12
(18) |
13
(26) |
14
(28) |
15
(26) |
16
(20) |
17
(27) |
|
18
(16) |
19
(40) |
20
(2) |
21
(11) |
22
(27) |
23
(24) |
24
(16) |
|
25
(10) |
26
(12) |
27
(16) |
28
(7) |
29
(6) |
30
(15) |
31
(5) |
|
From: <sv...@va...> - 2005-12-06 23:53:15
|
Author: njn
Date: 2005-12-06 23:53:12 +0000 (Tue, 06 Dec 2005)
New Revision: 5305
Log:
Do shadow writes in make_aligned64_* in one instruction instead of two.
Modified:
branches/COMPVBITS/memcheck/mc_main.c
Modified: branches/COMPVBITS/memcheck/mc_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/COMPVBITS/memcheck/mc_main.c 2005-12-06 23:47:58 UTC (rev 53=
04)
+++ branches/COMPVBITS/memcheck/mc_main.c 2005-12-06 23:53:12 UTC (rev 53=
05)
@@ -1045,7 +1045,7 @@
static __inline__
void make_aligned_word64_writable ( Addr a )
{
- UWord sec_no, sm_off;
+ UWord sec_no, sm_off64;
SecMap* sm;
=20
PROF_EVENT(320, "make_aligned_word64_writable");
@@ -1069,17 +1069,16 @@
if (EXPECTED_NOT_TAKEN(is_distinguished_sm(primary_map[sec_no])))
primary_map[sec_no] =3D copy_for_writing(primary_map[sec_no]);
=20
- sm =3D primary_map[sec_no];
- sm_off =3D SM_OFF(a);
- sm->vabits32[sm_off+0] =3D MC_BITS32_WRITABLE;
- sm->vabits32[sm_off+1] =3D MC_BITS32_WRITABLE;
+ sm =3D primary_map[sec_no];
+ sm_off64 =3D SM_OFF_64(a);
+ ((UShort*)(sm->vabits32))[sm_off64] =3D MC_BITS64_WRITABLE;
}
=20
=20
static __inline__
void make_aligned_word64_noaccess ( Addr a )
{
- UWord sec_no, sm_off;
+ UWord sec_no, sm_off64;
SecMap* sm;
=20
PROF_EVENT(330, "make_aligned_word64_noaccess");
@@ -1103,10 +1102,9 @@
if (EXPECTED_NOT_TAKEN(is_distinguished_sm(primary_map[sec_no])))
primary_map[sec_no] =3D copy_for_writing(primary_map[sec_no]);
=20
- sm =3D primary_map[sec_no];
- sm_off =3D SM_OFF(a);
- sm->vabits32[sm_off+0] =3D MC_BITS32_NOACCESS;
- sm->vabits32[sm_off+1] =3D MC_BITS32_NOACCESS;
+ sm =3D primary_map[sec_no];
+ sm_off64 =3D SM_OFF_64(a);
+ ((UShort*)(sm->vabits32))[sm_off64] =3D MC_BITS64_NOACCESS;
}
=20
=20
|
|
From: <sv...@va...> - 2005-12-06 23:48:00
|
Author: njn
Date: 2005-12-06 23:47:58 +0000 (Tue, 06 Dec 2005)
New Revision: 5304
Log:
Fix bug in STOREV4 fast case -- if one or more byte in a word is addressa=
ble
it doesn't imply that all four are.
Modified:
branches/COMPVBITS/memcheck/mc_main.c
Modified: branches/COMPVBITS/memcheck/mc_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/COMPVBITS/memcheck/mc_main.c 2005-12-06 23:19:39 UTC (rev 53=
03)
+++ branches/COMPVBITS/memcheck/mc_main.c 2005-12-06 23:47:58 UTC (rev 53=
04)
@@ -1749,6 +1749,8 @@
=20
PROF_EVENT(210, "mc_STOREV8");
=20
+ // XXX: this slow case seems to be marginally faster than the fast ca=
se!
+ // Investigate further.
if (VG_DEBUG_MEMORY >=3D 2) {
mc_STOREVn_slow( aA, 8, vbytes, isBigEndian );
return;
@@ -1917,20 +1919,20 @@
if (VGM_WORD32_VALID =3D=3D vbytes) {
if (vabits32 =3D=3D (UInt)MC_BITS32_READABLE) {
return;
- } else if (!is_distinguished_sm(sm) && MC_BITS32_NOACCESS !=3D vab=
its32) {
+ } else if (!is_distinguished_sm(sm) && MC_BITS32_WRITABLE =3D=3D v=
abits32) {
sm->vabits32[sm_off] =3D (UInt)MC_BITS32_READABLE;
} else {
- // unaddressable, or distinguished and changing state
+ // not readable/writable, or distinguished and changing state
PROF_EVENT(232, "mc_STOREV4-slow2");
mc_STOREVn_slow( aA, 4, (ULong)vbytes, isBigEndian );
}
} else if (VGM_WORD32_INVALID =3D=3D vbytes) {
if (vabits32 =3D=3D (UInt)MC_BITS32_WRITABLE) {
return;
- } else if (!is_distinguished_sm(sm) && MC_BITS32_NOACCESS !=3D vab=
its32) {
+ } else if (!is_distinguished_sm(sm) && MC_BITS32_READABLE =3D=3D v=
abits32) {
sm->vabits32[sm_off] =3D (UInt)MC_BITS32_WRITABLE;
} else {
- // unaddressable, or distinguished and changing state
+ // not readable/writable, or distinguished and changing state
PROF_EVENT(233, "mc_STOREV4-slow3");
mc_STOREVn_slow( aA, 4, (ULong)vbytes, isBigEndian );
}
|
|
From: <sv...@va...> - 2005-12-06 23:19:43
|
Author: njn
Date: 2005-12-06 23:19:39 +0000 (Tue, 06 Dec 2005)
New Revision: 5303
Log:
Got STOREV8 working. Fixed the same bug that was affecting the unused ca=
se
in STOREV4.
Modified:
branches/COMPVBITS/memcheck/mc_main.c
Modified: branches/COMPVBITS/memcheck/mc_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/COMPVBITS/memcheck/mc_main.c 2005-12-06 22:19:08 UTC (rev 53=
02)
+++ branches/COMPVBITS/memcheck/mc_main.c 2005-12-06 23:19:39 UTC (rev 53=
03)
@@ -491,7 +491,10 @@
{
SecMap* sm =3D get_secmap_writable(a);
UWord sm_off =3D SM_OFF(a);
+// VG_(printf)("se:%p, %d\n", a, sm_off);
+// VG_(printf)("s1:%p (0x%x)\n", &(sm->vabits32[sm_off]), vabits8);
insert_vabit8_into_vabits32( a, vabits8, &(sm->vabits32[sm_off]) );
+// VG_(printf)("s2: 0x%x\n", sm->vabits32[sm_off]);
}
=20
static inline
@@ -1741,19 +1744,16 @@
static inline __attribute__((always_inline))
void mc_STOREV8 ( Addr aA, ULong vbytes, Bool isBigEndian )
{
-// UWord mask, a, sec_no, sm_off64, vabits64;
-// SecMap* sm;
+ UWord mask, a, sec_no, sm_off64, vabits64;
+ SecMap* sm;
=20
PROF_EVENT(210, "mc_STOREV8");
=20
-// XXX: enable
-// if (VG_DEBUG_MEMORY >=3D 2) {
+ if (VG_DEBUG_MEMORY >=3D 2) {
mc_STOREVn_slow( aA, 8, vbytes, isBigEndian );
return;
-// }
+ }
=20
-// XXX: not working, I haven't yet worked out why
-#if 0
mask =3D ~((0x10000-8) | ((N_PRIMARY_MAP-1) << 16));
a =3D (UWord)aA;
=20
@@ -1776,47 +1776,18 @@
sm_off64 =3D SM_OFF_64(a);
vabits64 =3D ((UShort*)(sm->vabits32))[sm_off64];
=20
- VG_(printf)("BAR: 0x%lx\n", vabits64);
- VG_(printf)("BAZ: %lx %lx\n", sm->vabits32[SM_OFF(a)], sm->vabits32[S=
M_OFF(a)+1]);
if (EXPECTED_TAKEN( !is_distinguished_sm(sm) &&=20
- MC_BITS64_NOACCESS !=3D vabits64 ))
+ (MC_BITS64_READABLE =3D=3D vabits64 ||
+ MC_BITS64_WRITABLE =3D=3D vabits64) ))
{
/* Handle common case quickly: a is suitably aligned, */
/* is mapped, and is addressible. */
// Convert full V-bits in register to compact 2-bit form.
// XXX: is it best to check for VALID before INVALID?
if (VGM_WORD64_VALID =3D=3D vbytes) {
- //((UShort*)(sm->vabits32))[sm_off64] =3D (UShort)MC_BITS64_REA=
DABLE;
- OINK(8);
- mc_STOREVn_slow( aA, 8, vbytes, isBigEndian );
+ ((UShort*)(sm->vabits32))[sm_off64] =3D (UShort)MC_BITS64_READA=
BLE;
} else if (VGM_WORD64_INVALID =3D=3D vbytes) {
-// ((UShort*)(sm->vabits32))[sm_off64] =3D (UShort)MC_BITS64_WRI=
TABLE;
-
- VG_(printf)("0: %lx %lx, %llx\n",
- sm->vabits32[SM_OFF(a)+0], sm->vabits32[SM_OFF(a)+1],
- vbytes);
- mc_STOREVn_slow( aA, 8, vbytes, isBigEndian );
-// VG_(printf)("FOO: %p, 0x%lx\n", &( ((UShort*)(sm->vabits32))[sm_off=
64] ),
-// vbytes);
-{
- UWord x1, x2, y1, y2;
- VG_(printf)("a: %lx %lx, %p\n",
- sm->vabits32[SM_OFF(a)+0], sm->vabits32[SM_OFF(a)+1],=
a);
-
- x1 =3D sm->vabits32[SM_OFF(a)+0];
- x2 =3D sm->vabits32[SM_OFF(a)+1];
-
- sm->vabits32[SM_OFF(a)+0] =3D MC_BITS32_WRITABLE;
- sm->vabits32[SM_OFF(a)+1] =3D MC_BITS32_WRITABLE;
- VG_(printf)("c: %lx %lx\n",
- sm->vabits32[SM_OFF(a)+0], sm->vabits32[SM_OFF(a)+1])=
;
-
- y1 =3D sm->vabits32[SM_OFF(a)+0];
- y2 =3D sm->vabits32[SM_OFF(a)+1];
-
- tl_assert2(x1=3D=3Dy1 && x2=3D=3Dy2,
- "%lx %lx, %lx %lx\n", x1, y1, x2, y2);
-}
+ ((UShort*)(sm->vabits32))[sm_off64] =3D (UShort)MC_BITS64_WRITA=
BLE;
} else {
/* Slow but general case -- writing partially defined bytes. */
PROF_EVENT(212, "mc_STOREV8-slow2");
@@ -1827,7 +1798,6 @@
PROF_EVENT(213, "mc_STOREV8-slow3");
mc_STOREVn_slow( aA, 8, vbytes, isBigEndian );
}
-#endif
}
=20
VG_REGPARM(1)
@@ -1972,7 +1942,8 @@
//----------------------------------------------------------------------=
-----
#else
if (EXPECTED_TAKEN( !is_distinguished_sm(sm) &&=20
- MC_BITS32_NOACCESS !=3D vabits32 ))
+ (MC_BITS32_READABLE =3D=3D vabits32 ||
+ MC_BITS32_WRITABLE =3D=3D vabits32) ))
{
/* Handle common case quickly: a is suitably aligned, */
/* is mapped, and is addressible. */
|
|
From: Julian S. <js...@ac...> - 2005-12-06 22:25:32
|
I ran it for 3 cpu minutes (set update interval to 0.3s, let it grind away) and it did slowly edge up through 42M Virtual. I'd guess this is the freed blocks queue slowly filling up, particularly as top is evidently turning over memory at a modest rate: ==29838== malloc/free: in use at exit: 66,287 bytes in 119 blocks. ==29838== malloc/free: 1,763 allocs, 1,644 frees, 1,257,443 bytes allocated. If the same thing happens with --freelist-vol=0 then it maybe really is a leak. J On Tuesday 06 December 2005 17:41, Nicholas Nethercote wrote: > Hi, > > Here's an interesting experiment. Run 'top', hitting space frequently. > Note that the SIZE field of 'top' itself stays constant (for me it's > 1068k). > > Now run "valgrind --tool=none top". The SIZE field of 'none' grows > briefly at the start, then stays constant. The same is true of > Cachegrind. Massif grows very slowly as it takes more heap censuses. > > Now try it with Memcheck. Whoa! That looks like a memory leak. Anyone > feeling bored? > > Nick > > > ------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. Do you grep through log > files for problems? Stop! Download the new AJAX search engine that makes > searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! > http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click > _______________________________________________ > Valgrind-developers mailing list > Val...@li... > https://lists.sourceforge.net/lists/listinfo/valgrind-developers |
|
From: <sv...@va...> - 2005-12-06 22:19:13
|
Author: njn
Date: 2005-12-06 22:19:08 +0000 (Tue, 06 Dec 2005)
New Revision: 5302
Log:
Fill in helperc_MAKE_STACK_UNINIT. In theory it should now work on AMD64=
,
though I haven't tried it.
Modified:
branches/COMPVBITS/memcheck/mc_main.c
Modified: branches/COMPVBITS/memcheck/mc_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/COMPVBITS/memcheck/mc_main.c 2005-12-06 21:47:38 UTC (rev 53=
01)
+++ branches/COMPVBITS/memcheck/mc_main.c 2005-12-06 22:19:08 UTC (rev 53=
02)
@@ -1117,14 +1117,40 @@
);
=20
=20
+/* The AMD64 ABI says:
+
+ "The 128-byte area beyond the location pointed to by %rsp is consider=
ed
+ to be reserved and shall not be modified by signal or interrupt
+ handlers. Therefore, functions may use this area for temporary data
+ that is not needed across function calls. In particular, leaf funct=
ions
+ may use this area for their entire stack frame, rather than adjustin=
g
+ the stack pointer in the prologue and epilogue. This area is known =
as
+ red zone [sic]."
+
+ So after any call or return we need to mark this redzone as containin=
g
+ undefined values.
+
+ Consider this: we're in function f. f calls g. g moves rsp down
+ modestly (say 16 bytes) and writes stuff all over the red zone, makin=
g it
+ defined. g returns. f is buggy and reads from parts of the red zone
+ that it didn't write on. But because g filled that area in, f is goi=
ng
+ to be picking up defined V bits and so any errors from reading bits o=
f
+ the red zone it didn't write, will be missed. The only solution I co=
uld
+ think of was to make the red zone undefined when g returns to f.
+
+ This is in accordance with the ABI, which makes it clear the redzone
+ is volatile across function calls.
+
+ The problem occurs the other way round too: f could fill the RZ up
+ with defined values and g could mistakenly read them. So the RZ
+ also needs to be nuked on function calls.
+*/
void MC_(helperc_MAKE_STACK_UNINIT) ( Addr base, UWord len )
{
tl_assert(sizeof(UWord) =3D=3D sizeof(SizeT));
if (0)
VG_(printf)("helperc_MAKE_STACK_UNINIT %p %d\n", base, len );
=20
-tl_assert(0); // XXX
-
# if 0
/* Really slow version */
mc_make_writable(base, len);
@@ -1164,20 +1190,13 @@
* the address range falls entirely with a single
secondary map
* the SM is modifiable
- If all those conditions hold, just update the V bits
- by writing directly on the v-bit array. We don't care
- about A bits; if the address range is marked invalid,
- any attempt to access it will elicit an addressing error,
- and that's good enough.
+ If all those conditions hold, just update the V+A bits
+ by writing directly into the vabits array. =20
*/
-// XXX: Real version that I commented out -- njn
-tl_assert(0);
-#if 0
if (EXPECTED_TAKEN( len =3D=3D 128
&& VG_IS_8_ALIGNED(base)=20
)) {
- /* Now we know the address range is suitably sized and
- aligned. */
+ /* Now we know the address range is suitably sized and aligned. */
UWord a_lo =3D (UWord)base;
UWord a_hi =3D (UWord)(base + 127);
UWord sec_lo =3D a_lo >> 16;
@@ -1194,24 +1213,24 @@
if (EXPECTED_TAKEN( !is_distinguished_sm(sm) )) {
/* And finally, now we know that the secondary in question
is modifiable. */
- UWord v_off =3D a_lo & 0xFFFF;
- ULong* p =3D (ULong*)(&sm->vbyte[v_off]);
- p[ 0] =3D VGM_WORD64_INVALID;
- p[ 1] =3D VGM_WORD64_INVALID;
- p[ 2] =3D VGM_WORD64_INVALID;
- p[ 3] =3D VGM_WORD64_INVALID;
- p[ 4] =3D VGM_WORD64_INVALID;
- p[ 5] =3D VGM_WORD64_INVALID;
- p[ 6] =3D VGM_WORD64_INVALID;
- p[ 7] =3D VGM_WORD64_INVALID;
- p[ 8] =3D VGM_WORD64_INVALID;
- p[ 9] =3D VGM_WORD64_INVALID;
- p[10] =3D VGM_WORD64_INVALID;
- p[11] =3D VGM_WORD64_INVALID;
- p[12] =3D VGM_WORD64_INVALID;
- p[13] =3D VGM_WORD64_INVALID;
- p[14] =3D VGM_WORD64_INVALID;
- p[15] =3D VGM_WORD64_INVALID;
+ UWord v_off =3D SM_OFF(a_lo);
+ UShort* p =3D (UShort*)(&sm->vabits32[v_off]);
+ p[ 0] =3D MC_BITS64_WRITABLE;
+ p[ 1] =3D MC_BITS64_WRITABLE;
+ p[ 2] =3D MC_BITS64_WRITABLE;
+ p[ 3] =3D MC_BITS64_WRITABLE;
+ p[ 4] =3D MC_BITS64_WRITABLE;
+ p[ 5] =3D MC_BITS64_WRITABLE;
+ p[ 6] =3D MC_BITS64_WRITABLE;
+ p[ 7] =3D MC_BITS64_WRITABLE;
+ p[ 8] =3D MC_BITS64_WRITABLE;
+ p[ 9] =3D MC_BITS64_WRITABLE;
+ p[10] =3D MC_BITS64_WRITABLE;
+ p[11] =3D MC_BITS64_WRITABLE;
+ p[12] =3D MC_BITS64_WRITABLE;
+ p[13] =3D MC_BITS64_WRITABLE;
+ p[14] =3D MC_BITS64_WRITABLE;
+ p[15] =3D MC_BITS64_WRITABLE;
return;
}
}
@@ -1219,7 +1238,6 @@
=20
/* else fall into slow case */
mc_make_writable(base, len);
-#endif
}
=20
=20
|
|
From: <sv...@va...> - 2005-12-06 21:47:43
|
Author: sewardj
Date: 2005-12-06 21:47:38 +0000 (Tue, 06 Dec 2005)
New Revision: 5301
Log:
On ppc64-linux, the entry point address is a function descriptor, not
a function address.
Modified:
trunk/coregrind/m_ume.c
Modified: trunk/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
--- trunk/coregrind/m_ume.c 2005-12-06 20:53:44 UTC (rev 5300)
+++ trunk/coregrind/m_ume.c 2005-12-06 21:47:38 UTC (rev 5301)
@@ -493,8 +493,15 @@
info->exe_base =3D minaddr + ebase;
info->exe_end =3D maxaddr + ebase;
=20
+#if defined(VGP_ppc64_linux)
+ /* On PPC64, a func ptr is represented by a TOC entry ptr. This
+ TOC entry contains three words; the first word is the function
+ address, the second word is the TOC ptr (r2), and the third word
+ is the static chain value. */
+ info->init_eip =3D ((ULong*)entry)[0];
+#else
info->init_eip =3D (Addr)entry;
-
+#endif
VG_(free)(e->p);
VG_(free)(e);
=20
|
|
From: <sv...@va...> - 2005-12-06 20:53:52
|
Author: njn
Date: 2005-12-06 20:53:44 +0000 (Tue, 06 Dec 2005)
New Revision: 5300
Log:
Added an --undef-value-errors option to Memcheck. When set to "no"
emulates Addrcheck in not doing undefined value checking. That was easie=
r
than I expected.
=20
On my machine I get speedups of 10--20% over normal Memcheck with this.
Some undefined parameter errors are still being found, we need to decide
if they should be reported in this mode.
Also, some extra folding rules for 128 bit stores might be useful.
Modified:
branches/COMPVBITS/memcheck/mac_shared.c
branches/COMPVBITS/memcheck/mac_shared.h
branches/COMPVBITS/memcheck/mc_main.c
branches/COMPVBITS/memcheck/mc_translate.c
Modified: branches/COMPVBITS/memcheck/mac_shared.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/COMPVBITS/memcheck/mac_shared.c 2005-12-06 19:07:08 UTC (rev=
5299)
+++ branches/COMPVBITS/memcheck/mac_shared.c 2005-12-06 20:53:44 UTC (rev=
5300)
@@ -64,12 +64,15 @@
VgRes MAC_(clo_leak_resolution) =3D Vg_LowRes;
Bool MAC_(clo_show_reachable) =3D False;
Bool MAC_(clo_workaround_gcc296_bugs) =3D False;
+Bool MAC_(clo_undef_value_errors) =3D True;
=20
Bool MAC_(process_common_cmd_line_option)(Char* arg)
{
VG_BOOL_CLO(arg, "--partial-loads-ok", MAC_(clo_partial_loads_ok))
else VG_BOOL_CLO(arg, "--show-reachable", MAC_(clo_show_reacha=
ble))
else VG_BOOL_CLO(arg, "--workaround-gcc296-bugs",MAC_(clo_workaround_=
gcc296_bugs))
+
+ else VG_BOOL_CLO(arg, "--undef-value-errors", MAC_(clo_undef_value=
_errors))
=20
else VG_BNUM_CLO(arg, "--freelist-vol", MAC_(clo_freelist_vol), 0, 1=
000000000)
=20
@@ -100,6 +103,7 @@
" --leak-check=3Dno|summary|full search for memory leaks at exit?=
[summary]\n"
" --leak-resolution=3Dlow|med|high how much bt merging in leak chec=
k [low]\n"
" --show-reachable=3Dno|yes show reachable blocks in leak ch=
eck? [no]\n"
+" --undef-value-errors=3Dno|yes check for undefined value errors=
[yes]\n"
" --partial-loads-ok=3Dno|yes too hard to explain here; see ma=
nual [no]\n"
" --freelist-vol=3D<number> volume of freed blocks queue [50=
00000]\n"
" --workaround-gcc296-bugs=3Dno|yes self explanatory [no]\n"
Modified: branches/COMPVBITS/memcheck/mac_shared.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/COMPVBITS/memcheck/mac_shared.h 2005-12-06 19:07:08 UTC (rev=
5299)
+++ branches/COMPVBITS/memcheck/mac_shared.h 2005-12-06 20:53:44 UTC (rev=
5300)
@@ -316,9 +316,21 @@
extern Bool MAC_(clo_show_reachable);
=20
/* Assume accesses immediately below %esp are due to gcc-2.96 bugs.
- * default: NO*/
+ * default: NO */
extern Bool MAC_(clo_workaround_gcc296_bugs);
=20
+/* Do undefined value checking? "No" gives Addrcheck-style behaviour, ie=
.
+ * faster but fewer errors found. Note that although Addrcheck had 1 bi=
t
+ * per byte overhead vs the old Memcheck's 9 bits per byte, with this mo=
de
+ * and compressed V bits, no memory is saved with this mode -- it's stil=
l
+ * 2 bits per byte overhead. This is a little wasteful -- it could be d=
one
+ * with 1 bit per byte -- but lets us reuse the many shadow memory acces=
s
+ * functions. Note also that in this mode the secondary V bit table is
+ * never used.
+ *
+ * default: YES */
+extern Bool MAC_(clo_undef_value_errors);
+
extern Bool MAC_(process_common_cmd_line_option) ( Char* arg );
extern void MAC_(print_common_usage) ( void );
extern void MAC_(print_common_debug_usage) ( void );
Modified: branches/COMPVBITS/memcheck/mc_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/COMPVBITS/memcheck/mc_main.c 2005-12-06 19:07:08 UTC (rev 52=
99)
+++ branches/COMPVBITS/memcheck/mc_main.c 2005-12-06 20:53:44 UTC (rev 53=
00)
@@ -2485,6 +2485,13 @@
return False;
}
=20
+ /* If we're not checking for undefined value errors, the secondary V =
bit
+ * table should be empty. */
+ if (!MAC_(clo_undef_value_errors)) {
+ if (0 !=3D VG_(OSet_Size)(secVBitTable))
+ return False;
+ }
+
/* check nonsensical auxmap sizing */
if (auxmap_used > auxmap_size)
bad =3D True;
Modified: branches/COMPVBITS/memcheck/mc_translate.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/COMPVBITS/memcheck/mc_translate.c 2005-12-06 19:07:08 UTC (r=
ev 5299)
+++ branches/COMPVBITS/memcheck/mc_translate.c 2005-12-06 20:53:44 UTC (r=
ev 5300)
@@ -801,6 +801,10 @@
IRDirty* di;
IRAtom* cond;
=20
+ // Don't do V bit tests if we're not reporting undefined value errors=
.
+ if (!MAC_(clo_undef_value_errors))
+ return;
+
/* Since the original expression is atomic, there's no duplicated
work generated by making multiple V-expressions for it. So we
don't really care about the possibility that someone else may
@@ -918,6 +922,13 @@
IRAtom* atom, IRAtom* vatom )
{
IRType ty;
+
+ // Don't do shadow PUTs if we're not doing undefined value checking.
+ // Their absence lets Vex's optimiser remove all the shadow computati=
on
+ // that they depend on, which includes GETs of the shadow registers.
+ if (!MAC_(clo_undef_value_errors))
+ return;
+ =20
if (atom) {
tl_assert(!vatom);
tl_assert(isOriginalAtom(mce, atom));
@@ -951,6 +962,12 @@
IRType ty, tyS;
Int arrSize;;
=20
+ // Don't do shadow PUTIs if we're not doing undefined value checking.
+ // Their absence lets Vex's optimiser remove all the shadow computati=
on
+ // that they depend on, which includes GETIs of the shadow registers.
+ if (!MAC_(clo_undef_value_errors))
+ return;
+ =20
tl_assert(isOriginalAtom(mce,atom));
vatom =3D expr2vbits( mce, atom );
tl_assert(sameKindedAtoms(atom, vatom));
@@ -2481,6 +2498,7 @@
IRAtom *eBias, *eBiasLo64, *eBiasHi64;
void* helper =3D NULL;
Char* hname =3D NULL;
+ IRConst* c;
=20
tyAddr =3D mce->hWordTy;
mkAdd =3D tyAddr=3D=3DIty_I32 ? Iop_Add32 : Iop_Add64;
@@ -2506,6 +2524,21 @@
=20
ty =3D typeOfIRExpr(mce->bb->tyenv, vdata);
=20
+ // If we're not doing undefined value checking, pretend that this val=
ue
+ // is "all valid". That lets Vex's optimiser remove some of the V bi=
t
+ // shadow computation ops that precede it.
+ if (!MAC_(clo_undef_value_errors)) {
+ switch (ty) {
+ case Ity_V128: c =3D IRConst_V128(VGM_SHORT_VALID); break; // V=
128 weirdness
+ case Ity_I64: c =3D IRConst_U64(VGM_WORD64_VALID); break;
+ case Ity_I32: c =3D IRConst_U32(VGM_WORD32_VALID); break;
+ case Ity_I16: c =3D IRConst_U16(VGM_SHORT_VALID); break;
+ case Ity_I8: c =3D IRConst_U8(VGM_BYTE_VALID); break;
+ default: VG_(tool_panic)("memcheck:do_shadow_Store(LE)");
+ }
+ vdata =3D IRExpr_Const( c );
+ }
+
/* First, emit a definedness test for the address. This also sets
the address (shadow) to 'defined' following the test. */
complainIfUndefined( mce, addr );
|
|
From: <sv...@va...> - 2005-12-06 19:11:05
|
Author: cerion
Date: 2005-12-06 19:11:02 +0000 (Tue, 06 Dec 2005)
New Revision: 1484
Log:
fix padding for VexGuestPPC64State
Modified:
trunk/pub/libvex_guest_ppc32.h
trunk/pub/libvex_guest_ppc64.h
Modified: trunk/pub/libvex_guest_ppc32.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/pub/libvex_guest_ppc32.h 2005-12-05 14:26:09 UTC (rev 1483)
+++ trunk/pub/libvex_guest_ppc32.h 2005-12-06 19:11:02 UTC (rev 1484)
@@ -208,7 +208,8 @@
/* 952 */ UInt guest_RESVN;
=20
/* Padding to make it have an 8-aligned size */
- UInt padding;
+ /* 956 */ UInt padding;
+ /* 960 */
}
VexGuestPPC32State;
=20
Modified: trunk/pub/libvex_guest_ppc64.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/pub/libvex_guest_ppc64.h 2005-12-05 14:26:09 UTC (rev 1483)
+++ trunk/pub/libvex_guest_ppc64.h 2005-12-06 19:11:02 UTC (rev 1484)
@@ -161,7 +161,7 @@
/* 480 */ ULong guest_FPR28;
/* 488 */ ULong guest_FPR29;
/* 496 */ ULong guest_FPR30;
- /* 504 */ ULong guest_FPR31;
+ /* 504 */ ULong guest_FPR31;
=20
// Vector Registers
/* 512 */ U128 guest_VR0 __attribute__ ((aligned (16)));
@@ -237,16 +237,20 @@
/* Emulation warnings */
/* 1080 */ UInt guest_EMWARN;
=20
+ /* gcc adds 4 bytes padding here: pre-empt it. */
+ /* 1084 */ UInt padding;
+
/* For icbi: record start and length of area to invalidate */
- /* 1084 */ ULong guest_TISTART;
- /* 1092 */ ULong guest_TILEN;
+ /* 1088 */ ULong guest_TISTART;
+ /* 1096 */ ULong guest_TILEN;
=20
/* For lwarx/stwcx.: 0 =3D=3D no reservation exists, non-0 =3D=3D =
a
reservation exists. */
- /* 2000 */ ULong guest_RESVN;
+ /* 1104 */ ULong guest_RESVN;
=20
- /* Padding to make it have an 8-aligned size */
- //UInt padding;
+ /* Padding to make it have an 16-aligned size */
+ /* 1112 */ ULong padding2;
+ /* 1120 */
}
VexGuestPPC64State;
=20
|
|
From: <sv...@va...> - 2005-12-06 19:07:25
|
Author: cerion
Date: 2005-12-06 19:07:08 +0000 (Tue, 06 Dec 2005)
New Revision: 5299
Log:
Take ppc64 startup further along the road
- fixed launcher.c to recognise ppc32/64-linux platforms properly
- lots of assembly fixes to handle func descriptors, toc references, 64b=
it regs.
- fixed var types in vki-ppc64-linux
Now gets as far as VG_(translate), but dies from a case of invalid orig_a=
ddr.
Modified:
trunk/coregrind/launcher.c
trunk/coregrind/m_debuginfo/dwarf.c
trunk/coregrind/m_dispatch/dispatch-ppc32-linux.S
trunk/coregrind/m_dispatch/dispatch-ppc64-linux.S
trunk/coregrind/m_main.c
trunk/coregrind/m_syscall.c
trunk/coregrind/m_syswrap/syswrap-linux.c
trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c
trunk/include/vki-ppc64-linux.h
trunk/memcheck/mc_main.c
Modified: trunk/coregrind/launcher.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/launcher.c 2005-12-06 19:04:33 UTC (rev 5298)
+++ trunk/coregrind/launcher.c 2005-12-06 19:07:08 UTC (rev 5299)
@@ -133,26 +133,37 @@
*interpend =3D '\0';
=20
platform =3D select_platform(interp);
- } else if (memcmp(header, ELFMAG, SELFMAG) =3D=3D 0 &&
- header[EI_CLASS] =3D=3D ELFCLASS32 &&
- header[EI_DATA] =3D=3D ELFDATA2LSB) {
- const Elf32_Ehdr *ehdr =3D (Elf32_Ehdr *)header;
+ } else if (memcmp(header, ELFMAG, SELFMAG) =3D=3D 0) {
=20
- if (ehdr->e_machine =3D=3D EM_386 &&
- ehdr->e_ident[EI_OSABI] =3D=3D ELFOSABI_SYSV) {
- platform =3D "x86-linux";
- } else if (ehdr->e_machine =3D=3D EM_PPC &&
- ehdr->e_ident[EI_OSABI] =3D=3D ELFOSABI_SYSV) {
- platform =3D "ppc32-linux";
- }
- } else if (memcmp(header, ELFMAG, SELFMAG) =3D=3D 0 &&
- header[EI_CLASS] =3D=3D ELFCLASS64 &&
- header[EI_DATA] =3D=3D ELFDATA2LSB) {
- const Elf64_Ehdr *ehdr =3D (Elf64_Ehdr *)header;
+ if (header[EI_CLASS] =3D=3D ELFCLASS32) {
+ const Elf32_Ehdr *ehdr =3D (Elf32_Ehdr *)header;
=20
- if (ehdr->e_machine =3D=3D EM_X86_64 &&
- ehdr->e_ident[EI_OSABI] =3D=3D ELFOSABI_SYSV) {
- platform =3D "amd64-linux";
+ if (header[EI_DATA] =3D=3D ELFDATA2LSB) {
+ if (ehdr->e_machine =3D=3D EM_386 &&
+ ehdr->e_ident[EI_OSABI] =3D=3D ELFOSABI_SYSV) {
+ platform =3D "x86-linux";
+ }
+ }
+ else if (header[EI_DATA] =3D=3D ELFDATA2MSB) {
+ if (ehdr->e_machine =3D=3D EM_PPC &&
+ ehdr->e_ident[EI_OSABI] =3D=3D ELFOSABI_SYSV) {
+ platform =3D "ppc32-linux";
+ }
+ }
+ } else if (header[EI_CLASS] =3D=3D ELFCLASS64) {
+ const Elf64_Ehdr *ehdr =3D (Elf64_Ehdr *)header;
+
+ if (header[EI_DATA] =3D=3D ELFDATA2LSB) {
+ if (ehdr->e_machine =3D=3D EM_X86_64 &&
+ ehdr->e_ident[EI_OSABI] =3D=3D ELFOSABI_SYSV) {
+ platform =3D "amd64-linux";
+ }
+ } else if (header[EI_DATA] =3D=3D ELFDATA2MSB) {
+ if (ehdr->e_machine =3D=3D EM_PPC64 &&
+ ehdr->e_ident[EI_OSABI] =3D=3D ELFOSABI_SYSV) {
+ platform =3D "ppc64-linux";
+ }
+ }
}
}
=20
Modified: trunk/coregrind/m_debuginfo/dwarf.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_debuginfo/dwarf.c 2005-12-06 19:04:33 UTC (rev 5298=
)
+++ trunk/coregrind/m_debuginfo/dwarf.c 2005-12-06 19:07:08 UTC (rev 5299=
)
@@ -2209,7 +2209,7 @@
Int n_CIEs =3D 0;
UChar* data =3D ehframe;
=20
-#if defined(VGP_ppc32_linux)
+#if defined(VGP_ppc32_linux) || defined(VGP_ppc64_linux)
// CAB: tmp hack for ppc - no stacktraces for now...
return;
#endif
Modified: trunk/coregrind/m_dispatch/dispatch-ppc32-linux.S
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_dispatch/dispatch-ppc32-linux.S 2005-12-06 19:04:33=
UTC (rev 5298)
+++ trunk/coregrind/m_dispatch/dispatch-ppc32-linux.S 2005-12-06 19:07:08=
UTC (rev 5299)
@@ -197,8 +197,7 @@
li 3,0
stw 3,20(1)
lfs 3,20(1)
- /* load f3 to fpscr (0xFF =3D all bit fields) */
- mtfsf 0xFF,3
+ mtfsf 0xFF,3 /* fpscr =3D f3 */
LafterFP2:
=20
/* set host AltiVec control word to the default mode expected=20
Modified: trunk/coregrind/m_dispatch/dispatch-ppc64-linux.S
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_dispatch/dispatch-ppc64-linux.S 2005-12-06 19:04:33=
UTC (rev 5298)
+++ trunk/coregrind/m_dispatch/dispatch-ppc64-linux.S 2005-12-06 19:07:08=
UTC (rev 5299)
@@ -36,35 +36,48 @@
=20
/* References to globals via the TOC */
=20
- .section ".toc","aw"
-tocent__vgPlain_tt_fast:
- .tc vgPlain_tt_fast[TC],vgPlain_tt_fast
+/*
+ .globl vgPlain_tt_fast
+ .lcomm vgPlain_tt_fast,4,4
+ .type vgPlain_tt_fast, @object
+*/
+ .section ".toc","aw"
+.tocent__vgPlain_tt_fast:
+ .tc vgPlain_tt_fast[TC],vgPlain_tt_fast
+.tocent__vgPlain_dispatch_ctr:
+ .tc vgPlain_dispatch_ctr[TC],vgPlain_dispatch_ctr
+.tocent__vgPlain_machine_ppc64_has_VMX:
+ .tc vgPlain_machine_ppc64_has_VMX[TC],vgPlain_machine_ppc64_has_=
VMX
=20
/*------------------------------------------------------------*/
/*--- The dispatch loop. ---*/
/*------------------------------------------------------------*/
=20
- .section ".text"
- .align 2
-
/* signature: UWord VG_(run_innerloop) ( void* guest_state ) */
=20
+ .section ".text"
+ .align 2
+ .globl VG_(run_innerloop)
+ .section ".opd","aw"
+ .align 3
+VG_(run_innerloop):
+ .quad .VG_(run_innerloop),.TOC.@tocbase,0
+ .previous
+ .type .VG_(run_innerloop),@function
.globl .VG_(run_innerloop)
+
.VG_(run_innerloop):
/* ----- entry point to VG_(run_innerloop) ----- */
=20
- /* For Linux/ppc32 we need the SysV ABI, which uses
- LR->4(parent_sp), CR->anywhere.
- (The AIX ABI, used on Darwin, and maybe Linux/ppc64?,
- uses LR->8(prt_sp), CR->4(prt_sp))
- */
-
- /* Save lr */
+ /* PPC64 ABI saves LR->16(prt_sp), CR->8(prt_sp)) */
+ /* Save lr, cr */
mflr 0
- stw 0,4(1)
+ std 0,16(1)
+ mfcr 0
+ std 0,8(1)
=20
/* New stack frame */
- stwu 1,-624(1) /* sp should maintain 16-byte alignment */
+ stdu 1,-624(1) /* sp should maintain 16-byte alignment */
=20
/* Save callee-saved registers... */
=20
@@ -89,36 +102,36 @@
stfd 14,480(1)
=20
/* General reg save area : 144 bytes */
- stw 31,472(1)
- stw 30,464(1)
- stw 29,456(1)
- stw 28,448(1)
- stw 27,440(1)
- stw 26,432(1)
- stw 25,424(1)
- stw 24,416(1)
- stw 23,408(1)
- stw 22,400(1)
- stw 21,392(1)
- stw 20,384(1)
- stw 19,376(1)
- stw 18,368(1)
- stw 17,360(1)
- stw 16,352(1)
- stw 15,344(1)
- stw 14,336(1)
+ std 31,472(1)
+ std 30,464(1)
+ std 29,456(1)
+ std 28,448(1)
+ std 27,440(1)
+ std 26,432(1)
+ std 25,424(1)
+ std 24,416(1)
+ std 23,408(1)
+ std 22,400(1)
+ std 21,392(1)
+ std 20,384(1)
+ std 19,376(1)
+ std 18,368(1)
+ std 17,360(1)
+ std 16,352(1)
+ std 15,344(1)
+ std 14,336(1)
/* Probably not necessary to save r13 (thread-specific ptr),
as VEX stays clear of it... but what the hey. */
- stw 13,328(1)
+ std 13,328(1)
=20
/* It's necessary to save/restore VRSAVE in the AIX / Darwin ABI=
.
The Linux kernel might not actually use VRSAVE for its intend=
ed
purpose, but it should be harmless to preserve anyway. */
/* r3 is live here (guest state ptr), so use r4 */
- lis 4,VG_(machine_ppc64_has_VMX)@ha
- lwz 4,VG_(machine_ppc64_has_VMX)@l(4)
- cmplwi 4,0
- beq LafterVMX1
+ lis 4,.tocent__vgPlain_machine_ppc64_has_VMX@ha
+ ld 4,.tocent__vgPlain_machine_ppc64_has_VMX@l(4)
+ cmpldi 4,0
+ beq .LafterVMX1
=20
/* VRSAVE save word : 32 bytes */
mfspr 4,256 /* vrsave reg is spr number 256 */
@@ -151,24 +164,18 @@
stvx 21,4,1
li 4,128
stvx 20,4,1
-LafterVMX1:
+.LafterVMX1:
=20
- /* Save cr */
- mfcr 0
- stw 0,112(1)
-
-
/* Local variable space... */
=20
/* r3 holds guest_state */
mr 31,3
- stw 3,104(1) /* spill orig guest_state ptr */
+ std 3,104(1) /* spill orig guest_state ptr */
=20
/* 96(sp) used later to check FPSCR[RM] */
-
/* 88(sp) used later to stop ctr reg being clobbered */
-
- /* 48:87(sp) free */
+ /* 80(sp) used later to load fpscr with zero */
+ /* 48:79(sp) free */
=09
/* Linkage Area (reserved)
40(sp) : TOC
@@ -182,33 +189,39 @@
// CAB TODO: Use a caller-saved reg for orig guest_state ptr
// - rem to set non-allocateable in isel.c
=20
- /* hold dispatch_ctr in ctr reg */
- lis 17,VG_(dispatch_ctr)@ha
- lwz 17,VG_(dispatch_ctr)@l(17)
+ /* hold VG_(dispatch_ctr) (=3D32bit value) in ctr reg */
+ lis 17,.tocent__vgPlain_dispatch_ctr@ha
+ lwz 17,.tocent__vgPlain_dispatch_ctr@l(17)
mtctr 17
=20
/* fetch %CIA into r30 */
- lwz 30,OFFSET_ppc64_CIA(31)
+ ld 30,OFFSET_ppc64_CIA(31)
=20
/* set host FPU control word to the default mode expected=20
by VEX-generated code. See comments in libvex.h for
more info. */
- fsub 3,3,3 /* generate zero */
- mtfsf 0xFF,3
+ /* =3D> get zero into f3 (tedious)
+ fsub 3,3,3 is not a reliable way to do this, since if
+ f3 holds a NaN or similar then we don't necessarily
+ wind up with zero. */
+ li 3,0
+ stw 3,80(1)
+ lfs 3,80(1)
+ mtfsf 0xFF,3 /* fpscr =3D lo32 of f3 */
=20
/* set host AltiVec control word to the default mode expected=20
by VEX-generated code. */
- lis 3,VG_(machine_ppc64_has_VMX)@ha
- lwz 3,VG_(machine_ppc64_has_VMX)@l(3)
- cmplwi 3,0
- beq LafterVMX2
+ lis 3,.tocent__vgPlain_machine_ppc64_has_VMX@ha
+ ld 3,.tocent__vgPlain_machine_ppc64_has_VMX@l(3)
+ cmpldi 3,0
+ beq .LafterVMX2
=20
vspltisw 3,0x0 /* generate zero */
mtvscr 3
-LafterVMX2:
+.LafterVMX2:
=20
/* make a stack frame for the code we are calling */
- stwu 1,-48(1)
+ stdu 1,-48(1)
=20
/* fall into main loop */
=20
@@ -226,30 +239,30 @@
0:43 (r1) (=3Dstack frame header)
*/
=20
-dispatch_boring:
+.dispatch_boring:
/* save the jump address in the guest state */
std 30,OFFSET_ppc64_CIA(31)
=20
/* Are we out of timeslice? If yes, defer to scheduler. */
- bdz counter_is_zero /* decrements ctr reg */
+ bdz .counter_is_zero /* decrements ctr reg */
=20
/* try a fast lookup in the translation cache */
/* r4=3D((r30<<3) & (VG_TT_FAST_MASK<<3)) */
rldic 4,30, 3,64-3-VG_TT_FAST_BITS
// CAB: use a caller-saved reg for this ?
/* r5 =3D & VG_(tt_fast) */
- ld 5, tocent__vgPlain_tt_fast@toc(2)
+ ld 5, .tocent__vgPlain_tt_fast@toc(2)
/* r5 =3D VG_(tt_fast)[r30 & VG_TT_FAST_MASK] */
ldx 5, 5,4
/* r6 =3D VG_(tt_fast)[r30 & VG_TT_FAST_MASK]->orig_addr */
ld 6, 0(5)
cmpw 30,6
- bne fast_lookup_failed
+ bne .fast_lookup_failed
=20
- /* increment bb profile counter */
+ /* increment bb profile counter VG_(tt_fastN)[x] (=3D32bit val) =
*/
// CAB: use a caller-saved reg for this ?
/* r7 =3D & VG_(tt_fastN) */
- ld 7, tocent__vgPlain_tt_fast@toc(2)
+ ld 7, .tocent__vgPlain_tt_fast@toc(2)
/* r7 =3D VG_(tt_fastN)[r30 & VG_TT_FAST_MASK] */
srdi 4, 4,1
lwzx 6, 7,4
@@ -263,7 +276,7 @@
=20
/* stop ctr being clobbered */
// CAB: use a caller-saved reg for this ?
-// but then (bdz) =3D> (decr, cmp, bc)... still better than a stw?
+// but then (bdz) =3D> (decr, cmp, bc)... still better than a std?
mfctr 9
std 9,136(1) /* =3D> 88(parent_sp) */
=20
@@ -289,15 +302,15 @@
mr 30,3 /* put CIA (=3Dr3) in r30 */
ld 16,152(1) /* gst_state ptr =3D> 104(prnt_sp) */
cmpd 16,31
- beq dispatch_boring /* r31 unchanged... */
+ beq .dispatch_boring /* r31 unchanged... */
=20
mr 3,31 /* put return val (=3Dr31) in r3 */
- b dispatch_exceptional
+ b .dispatch_exceptional
=20
/* All exits from the dispatcher go through here.
r3 holds the return value.=20
*/
-run_innerloop_exit:=20
+.run_innerloop_exit:=20
/* We're leaving. Check that nobody messed with
VSCR or FPSCR. */
=20
@@ -310,14 +323,14 @@
lwzx 6,5,1 /* load to gpr */
andi. 6,6,0xFF /* mask wanted bits */
cmplwi 6,0x0 /* cmp with zero */
- bne invariant_violation /* branch if not zero */
+ bne .invariant_violation /* branch if not zero */
#endif
=20
/* Using r11 - value used again further on, so don't trash! */
- lis 11,VG_(machine_ppc64_has_VMX)@ha
- lwz 11,VG_(machine_ppc64_has_VMX)@l(11)
- cmplwi 11,0
- beq LafterVMX8
+ lis 11,.tocent__vgPlain_machine_ppc64_has_VMX@ha
+ ld 11,.tocent__vgPlain_machine_ppc64_has_VMX@l(11)
+ cmpldi 11,0
+ beq .LafterVMX8
=20
/* Check VSCR[NJ] =3D=3D 1 */
/* first generate 4x 0x00010000 */
@@ -329,78 +342,74 @@
vand 7,7,6 /* gives NJ flag */
vspltw 7,7,0x3 /* flags-word to all lanes */
vcmpequw. 8,6,7 /* CR[24] =3D 1 if v6 =3D=3D v=
7 */
- bt 24,invariant_violation /* branch if all_equal */
-LafterVMX8:
+ bt 24,.invariant_violation /* branch if all_equal */
+.LafterVMX8:
=20
/* otherwise we're OK */
- b run_innerloop_exit_REALLY
+ b .run_innerloop_exit_REALLY
=20
=20
-invariant_violation:
+.invariant_violation:
li 3,VG_TRC_INVARIANT_FAILED
- b run_innerloop_exit_REALLY
+ b .run_innerloop_exit_REALLY
=20
-run_innerloop_exit_REALLY:
+.run_innerloop_exit_REALLY:
/* r3 holds VG_TRC_* value to return */
=20
/* Return to parent stack */
addi 1,1,48
=20
- /* Write ctr to VG(dispatch_ctr) */
+ /* Write ctr to VG_(dispatch_ctr) (=3D32bit value) */
mfctr 17
- lis 18,VG_(dispatch_ctr)@ha
- stw 17,VG_(dispatch_ctr)@l(18)
+ lis 18,.tocent__vgPlain_dispatch_ctr@ha
+ stw 17,.tocent__vgPlain_dispatch_ctr@l(18)
=20
- /* Restore cr */
- lwz 0,112(1)
- mtcr 0
-
/* Restore callee-saved registers... */
=20
/* Floating-point regs */
- lfd 31,616(1)
- lfd 30,608(1)
- lfd 29,600(1)
- lfd 28,592(1)
- lfd 27,584(1)
- lfd 26,576(1)
- lfd 25,568(1)
- lfd 24,560(1)
- lfd 23,552(1)
- lfd 22,544(1)
- lfd 21,536(1)
- lfd 20,528(1)
- lfd 19,520(1)
- lfd 18,512(1)
- lfd 17,504(1)
- lfd 16,496(1)
- lfd 15,488(1)
- lfd 14,480(1)
+ lfd 31,616(1)
+ lfd 30,608(1)
+ lfd 29,600(1)
+ lfd 28,592(1)
+ lfd 27,584(1)
+ lfd 26,576(1)
+ lfd 25,568(1)
+ lfd 24,560(1)
+ lfd 23,552(1)
+ lfd 22,544(1)
+ lfd 21,536(1)
+ lfd 20,528(1)
+ lfd 19,520(1)
+ lfd 18,512(1)
+ lfd 17,504(1)
+ lfd 16,496(1)
+ lfd 15,488(1)
+ lfd 14,480(1)
=20
/* General regs */
- lwz 31,472(1)
- lwz 30,464(1)
- lwz 29,456(1)
- lwz 28,448(1)
- lwz 27,440(1)
- lwz 26,432(1)
- lwz 25,424(1)
- lwz 24,416(1)
- lwz 23,408(1)
- lwz 22,400(1)
- lwz 21,392(1)
- lwz 20,384(1)
- lwz 19,376(1)
- lwz 18,368(1)
- lwz 17,360(1)
- lwz 16,352(1)
- lwz 15,344(1)
- lwz 14,336(1)
- lwz 13,328(1)
+ ld 31,472(1)
+ ld 30,464(1)
+ ld 29,456(1)
+ ld 28,448(1)
+ ld 27,440(1)
+ ld 26,432(1)
+ ld 25,424(1)
+ ld 24,416(1)
+ ld 23,408(1)
+ ld 22,400(1)
+ ld 21,392(1)
+ ld 20,384(1)
+ ld 19,376(1)
+ ld 18,368(1)
+ ld 17,360(1)
+ ld 16,352(1)
+ ld 15,344(1)
+ ld 14,336(1)
+ ld 13,328(1)
=20
/* r11 already holds VG_(machine_ppc64_has_VMX) value */
- cmplwi 11,0
- beq LafterVMX9
+ cmpldi 11,0
+ beq .LafterVMX9
=20
/* VRSAVE */
lwz 4,324(1)
@@ -431,10 +440,12 @@
lvx 21,4,1
li 4,128
lvx 20,4,1
-LafterVMX9:
+.LafterVMX9:
=20
- /* reset lr & sp */
- lwz 0,628(1) /* stack_size + 4 */
+ /* reset cr, lr, sp */
+ ld 0,632(1) /* stack_size + 8 */
+ mtcr 0
+ ld 0,640(1) /* stack_size + 16 */
mtlr 0
addi 1,1,624 /* stack_size */
blr
@@ -443,28 +454,28 @@
/* Other ways of getting out of the inner loop. Placed out-of-line to
make it look cleaner.=20
*/
-dispatch_exceptional:
+.dispatch_exceptional:
/* this is jumped to only, not fallen-through from above */
/* save r30 in %CIA and defer to sched */
- lwz 16,152(1)
- stw 30,OFFSET_ppc64_CIA(16)
- b run_innerloop_exit
+ ld 16,152(1)
+ std 30,OFFSET_ppc64_CIA(16)
+ b .run_innerloop_exit
=20
-fast_lookup_failed:
+.fast_lookup_failed:
/* %CIA is up to date here since dispatch_boring dominates */
mfctr 17
addi 17,17,1
mtctr 17
li 3,VG_TRC_INNER_FASTMISS
- b run_innerloop_exit
+ b .run_innerloop_exit
=20
-counter_is_zero:
+.counter_is_zero:
/* %CIA is up to date here since dispatch_boring dominates */
mfctr 17
addi 17,17,1
mtctr 17
li 3,VG_TRC_INNER_COUNTERZERO
- b run_innerloop_exit
+ b .run_innerloop_exit
=20
/* Let the linker know we don't need an executable stack */
.section .note.GNU-stack,"",@progbits
Modified: trunk/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
--- trunk/coregrind/m_main.c 2005-12-06 19:04:33 UTC (rev 5298)
+++ trunk/coregrind/m_main.c 2005-12-06 19:07:08 UTC (rev 5299)
@@ -1743,7 +1743,7 @@
arch->vex.guest_CIA =3D client_ip;
=20
#elif defined(VGA_ppc64)
- vg_assert(0 =3D=3D sizeof(VexGuestPPC64State) % 8);
+ vg_assert(0 =3D=3D sizeof(VexGuestPPC64State) % 16);
=20
/* Zero out the initial state, and set up the simulated FPU in a
sane way. */
@@ -2865,9 +2865,17 @@
#elif defined(VGP_ppc64_linux)
asm("\n"
".text\n"
- "\t.globl _start\n"
- "\t.type _start,@function\n"
+ /* PPC64 ELF ABI says '_start' points to a function descriptor.
+ So we must have one, and that is what goes into the .opd section.=
*/
+ "\t.global _start\n"
+ "\t.section \".opd\",\"aw\"\n"
+ "\t.align 3\n"
"_start:\n"
+ "\t.quad ._start,.TOC.@tocbase,0\n"
+ "\t.previous\n"
+ "\t.type ._start,@function\n"
+ "\t.global ._start\n"
+ "._start:\n"
/* set up the new stack in r16 */
"\tlis 16, vgPlain_interim_stack@highest\n"
"\tori 16,16,vgPlain_interim_stack@higher\n"
@@ -2889,7 +2897,8 @@
call _start_in_C, passing it the initial SP. */
"\tmr 3,1\n"
"\tmr 1,16\n"
- "\tbl _start_in_C\n"
+ "\tbl ._start_in_C\n"
+ "\tnop\n"
"\ttrap\n"
".previous\n"
);
Modified: trunk/coregrind/m_syscall.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_syscall.c 2005-12-06 19:04:33 UTC (rev 5298)
+++ trunk/coregrind/m_syscall.c 2005-12-06 19:07:08 UTC (rev 5299)
@@ -231,7 +231,6 @@
" sc\n" /* result in r3 and cr0.so */
" ld 5,-16(1)\n" /* reacquire argblock ptr (r5 is caller-save)=
*/
" std 3,0(5)\n" /* argblock[0] =3D r3 */
-" xor 3,3,3\n"
" mfcr 3\n"
" srwi 3,3,28\n"
" andi. 3,3,1\n"
Modified: trunk/coregrind/m_syswrap/syswrap-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
--- trunk/coregrind/m_syswrap/syswrap-linux.c 2005-12-06 19:04:33 UTC (re=
v 5298)
+++ trunk/coregrind/m_syswrap/syswrap-linux.c 2005-12-06 19:07:08 UTC (re=
v 5299)
@@ -264,6 +264,11 @@
sp -=3D 16;
sp &=3D ~0xF;
*(UWord *)sp =3D 0;
+#elif defined(VGP_ppc64_linux)
+ /* make a stack frame */
+ sp -=3D 112;
+ sp &=3D ~((Addr)0xF);
+ *(UWord *)sp =3D 0;
#endif
=20
/* If we can't even allocate the first thread's stack, we're hosed.
Modified: trunk/coregrind/m_syswrap/syswrap-ppc64-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
--- trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c 2005-12-06 19:04:33 U=
TC (rev 5298)
+++ trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c 2005-12-06 19:07:08 U=
TC (rev 5299)
@@ -63,19 +63,31 @@
__attribute__((noreturn))
void ML_(call_on_new_stack_0_1) ( Addr stack,
Addr retaddr,
- void (*f)(Word),
+ void (*f_desc)(Word),
Word arg1 );
// r3 =3D stack
// r4 =3D retaddr
-// r5 =3D f
+// r5 =3D function descriptor
// r6 =3D arg1
+/* On PPC64, a func ptr is represented by a TOC entry ptr.
+ This TOC entry contains three words; the first word is the function
+ address, the second word is the TOC ptr (r2), and the third word is
+ the static chain value. */
asm(
".text\n"
-".globl .vgModuleLocal_call_on_new_stack_0_1\n"
+" .globl vgModuleLocal_call_on_new_stack_0_1\n"
+" .section \".opd\",\"aw\"\n"
+" .align 3\n"
+"vgModuleLocal_call_on_new_stack_0_1:\n"
+" .quad .vgModuleLocal_call_on_new_stack_0_1,.TOC.@tocbase,0\n"
+" .previous\n"
+" .type .vgModuleLocal_call_on_new_stack_0_1,@function\n"
+" .globl .vgModuleLocal_call_on_new_stack_0_1\n"
".vgModuleLocal_call_on_new_stack_0_1:\n"
" mr %r1,%r3\n\t" // stack to %sp
" mtlr %r4\n\t" // retaddr to %lr
-" mtctr %r5\n\t" // f to count reg
+" ld 5,0(5)\n\t" // load f_ptr from f_desc[0]
+" mtctr %r5\n\t" // f_ptr to count reg
" mr %r3,%r6\n\t" // arg1 to %r3
" li 0,0\n\t" // zero all GP regs
" li 4,0\n\t"
Modified: trunk/include/vki-ppc64-linux.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/include/vki-ppc64-linux.h 2005-12-06 19:04:33 UTC (rev 5298)
+++ trunk/include/vki-ppc64-linux.h 2005-12-06 19:07:08 UTC (rev 5299)
@@ -399,10 +399,10 @@
struct vki_stat {
unsigned long st_dev;
unsigned long st_ino;
- unsigned short st_nlink;
- unsigned short st_mode;
- unsigned short st_uid;
- unsigned short st_gid;
+ unsigned long st_nlink;
+ unsigned int st_mode;
+ unsigned int st_uid;
+ unsigned int st_gid;
unsigned long st_rdev;
long st_size;
unsigned long st_blksize;
Modified: trunk/memcheck/mc_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
--- trunk/memcheck/mc_main.c 2005-12-06 19:04:33 UTC (rev 5298)
+++ trunk/memcheck/mc_main.c 2005-12-06 19:07:08 UTC (rev 5299)
@@ -1308,10 +1308,12 @@
static void mc_post_reg_write ( CorePart part, ThreadId tid,=20
OffT offset, SizeT size)
{
- UChar area[1024];
- tl_assert(size <=3D 1024);
+# define MAX_REG_WRITE_SIZE 1120
+ UChar area[MAX_REG_WRITE_SIZE];
+ tl_assert(size <=3D MAX_REG_WRITE_SIZE);
VG_(memset)(area, VGM_BYTE_VALID, size);
VG_(set_shadow_regs_area)( tid, offset, size, area );
+# undef MAX_REG_WRITE_SIZE
}
=20
static=20
|
|
From: <sv...@va...> - 2005-12-06 19:04:41
|
Author: sewardj
Date: 2005-12-06 19:04:33 +0000 (Tue, 06 Dec 2005)
New Revision: 5298
Log:
wibble
Modified:
branches/FNWRAP/coregrind/m_redir.c
branches/FNWRAP/coregrind/vg_preloaded.c
Modified: branches/FNWRAP/coregrind/m_redir.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/FNWRAP/coregrind/m_redir.c 2005-12-06 18:18:56 UTC (rev 5297=
)
+++ branches/FNWRAP/coregrind/m_redir.c 2005-12-06 19:04:33 UTC (rev 5298=
)
@@ -811,7 +811,7 @@
static void show_spec ( HChar* left, Spec* spec )
{
VG_(message)(Vg_DebugMsg,=20
- "%s%18s %22s -> 0x%08llx",
+ "%s%18s %30s -> 0x%08llx",
left,
spec->from_sopatt, spec->from_fnpatt,
(ULong)spec->to_addr );
Modified: branches/FNWRAP/coregrind/vg_preloaded.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/FNWRAP/coregrind/vg_preloaded.c 2005-12-06 18:18:56 UTC (rev=
5297)
+++ branches/FNWRAP/coregrind/vg_preloaded.c 2005-12-06 19:04:33 UTC (rev=
5298)
@@ -84,9 +84,9 @@
#include <stdio.h>
#include <pthread.h>
=20
-// pthread_create@GLIBC_2.0
+// pthread_create@GLIBC_2.0 - making it match this too causes loops.??
// pthread_create@@GLIBC_2.1
-PTH_FUNC(int, pthreadZucreateZAZa, // pthread_create@*
+PTH_FUNC(int, pthreadZucreateZAZAGLIBCZu2Zd1, // pthread_create@@GLIBC_2=
.1
pthread_t *thread, const pthread_attr_t *attr,
void *(*start) (void *), void *arg)
{
|
|
From: Ashley P. <as...@qu...> - 2005-12-06 18:39:10
|
On Wed, 2005-11-30 at 18:34 +0000, Ashley Pittman wrote:
> Hi all.
>
> (This wasn't meant to turn into such an epic, sorry....)
>
> I'm in the process of instrumenting my allocator so it works with
> valgrind properly. Whilst the actual amount code involved is tiny (four
> lines so far) it's proving to be a bit of a headache.
>
> I've written a test program which does a sequence of alloc/free calls,
> making sure to memset all memory it allocates and (optionally) doing one
> invalid read (Address xx is 0 bytes after a block of size xx alloc'd)
> for every free. Running this against libc this code is either valgrind
> clean or reports exactly 1 error per free depending on usage which is
> exactly what I'd expect.
>
> When I use this same program to test my own allocator I get *only* get
> 331 errors from despite doing 505 alloc/free calls, I also get the
> following assertion when the program finishes:
>
> Memcheck: mac_leakcheck.c:705 (vgMAC_do_detect_memory_leaks): Assertion
> 'lc_shadows[i]->data + lc_shadows[i]->size < lc_shadows[i+1]->data'
> failed.
I've got a simple patch which fixes this first crash, it appears that my
allocator is packing chunks very tightly, often with no padding/redzone
at all. This patch handles the case where blocks are next to each other
in memory.
I'm still seeing both crashes within valgrind and no error reports where
there should be some but I'm no further forward finding the cause of
this yet. A typical stack trace looks like this with what appears to be
two assertion failures in mac_leakcheck.c, the first one at line 588
"tl_assert(p_min != NULL)" and a second one at 539.
Memcheck: mac_leakcheck.c:539 (full_report): Assertion
'lc_markstack[i].state == IndirectLeak' failed.
==9590== at 0xB000E279: report_and_quit (m_libcassert.c:136)
==9590== by 0xB000E412: vgPlain_assert_fail (m_libcassert.c:199)
==9590== by 0xB000090B: vgMAC_do_detect_memory_leaks
(mac_leakcheck.c:588)
==9590== by 0xB00049A3: mc_detect_memory_leaks (mc_main.c:2076)
==9590== by 0xB0004E19: mc_handle_client_request (mc_main.c:2437)
==9590== by 0xB002D828: do_client_request (scheduler.c:1098)
==9590== by 0xB002CDD7: vgPlain_scheduler (scheduler.c:721)
==9590== by 0xB003D036: thread_wrapper (syswrap-linux.c:86)
==9590== by 0xB003D0FC: run_a_thread_NORETURN (syswrap-linux.c:119)
Ashley,
ashley:valgrind> svn diff memcheck/mac_leakcheck.c
Index: memcheck/mac_leakcheck.c
===================================================================
--- memcheck/mac_leakcheck.c (revision 5296)
+++ memcheck/mac_leakcheck.c (working copy)
@@ -702,7 +702,7 @@
/* Sanity check -- make sure they don't overlap */
for (i = 0; i < lc_n_shadows-1; i++) {
tl_assert( lc_shadows[i]->data + lc_shadows[i]->size
- < lc_shadows[i+1]->data );
+ <= lc_shadows[i+1]->data );
}
if (lc_n_shadows == 0) {
|
|
From: <sv...@va...> - 2005-12-06 18:19:06
|
Author: sewardj
Date: 2005-12-06 18:18:56 +0000 (Tue, 06 Dec 2005)
New Revision: 5297
Log:
Add comments re redirection and demangling.
Modified:
branches/FNWRAP/coregrind/m_demangle/demangle.c
branches/FNWRAP/coregrind/m_redir.c
branches/FNWRAP/coregrind/m_translate.c
Modified: branches/FNWRAP/coregrind/m_demangle/demangle.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/FNWRAP/coregrind/m_demangle/demangle.c 2005-12-06 17:27:44 U=
TC (rev 5296)
+++ branches/FNWRAP/coregrind/m_demangle/demangle.c 2005-12-06 18:18:56 U=
TC (rev 5297)
@@ -38,7 +38,22 @@
#include "demangle.h"
#include "pub_core_libcprint.h"
=20
+/* The demangler's job is to take a raw symbol name and turn it into
+ something a Human Bean can understand. There are two levels of
+ mangling.
=20
+ 1. First, C++ names are mangled by the compiler. So we'll have to
+ undo that.
+
+ 2. Optionally, in relatively rare cases, the resulting name is then
+ itself encoded using Z-escaping (see pub_core_redir.h) so as to
+ become part of a redirect-specification.
+
+ Therefore, VG_(demangle) first tries to undo (2). If successful,
+ the soname part is discarded (humans don't want to see that).
+ Then, it tries to undo (1) (using demangling code from GNU/FSF).
+*/
+
/* This is the main, standard demangler entry point. */
=20
void VG_(demangle) ( Char* orig, Char* result, Int result_size )
Modified: branches/FNWRAP/coregrind/m_redir.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/FNWRAP/coregrind/m_redir.c 2005-12-06 17:27:44 UTC (rev 5296=
)
+++ branches/FNWRAP/coregrind/m_redir.c 2005-12-06 18:18:56 UTC (rev 5297=
)
@@ -48,6 +48,49 @@
#include "pub_core_demangle.h" // VG_(maybe_Z_demangle)
=20
=20
+/* This module is a critical part of the redirection/intercept system.
+ It keeps track of the current intercept state, cleans up the
+ translation caches when that state changes, and finally, answers
+ queries about the whether an address is currently redirected or
+ not. It doesn't do any of the control-flow trickery needed to put
+ the redirections into practice. That is the job of m_translate,
+ which calls here to find out which translations need to be
+ redirected.
+
+ The interface is simple. VG_(redir_initialise) initialises and
+ loads some hardwired redirects which never disappear; this is
+ platform-specific.
+
+ The module is notified of redirection state changes by m_debuginfo.
+ That calls VG_(redir_notify_new_SegInfo) when a new SegInfo (shared
+ object symbol table, basically) appears. Appearance of new symbols
+ can cause new (active) redirections to appear for two reasons: the
+ symbols in the new table may match existing redirection
+ specifications (see comments below), and because the symbols in the
+ new table may themselves supply new redirect specifications which
+ match existing symbols (or ones in the new table).
+
+ Redirect specifications are really symbols with "funny" prefixes
+ (_vgrZU_ and _vgrZZ_). These names tell m_redir that the
+ associated code should replace the standard entry point for some
+ set of functions. The set of functions is specified by a (soname
+ pattern, function name pattern) pair which is encoded in the symbol
+ name following the prefix. The names use a Z-encoding scheme so
+ that they may contain punctuation characters and wildcards (*).
+ The encoding scheme is described in pub_tool_redir.h and is decoded
+ by VG_(maybe_Z_demangle).
+
+ When a shared object is unloaded, this module learns of it via a
+ call to VG_(redir_notify_delete_SegInfo). It then removes from its
+ tables all active redirections in any way associated with that
+ object, and tidies up the translation caches accordingly.
+
+ That takes care of tracking the redirection state. When a
+ translation is actually to be made, m_translate calls to
+ VG_(redir_do_lookup) in this module to find out if the
+ translation's address should be redirected.
+*/
+
/*------------------------------------------------------------*/
/*--- Semantics ---*/
/*------------------------------------------------------------*/
@@ -113,10 +156,8 @@
actually want to have a system that allows this, I propose this:
all changes to Specs are acceptable. But, when recomputing Active
following the change, if the same orig is bound to more than one
- redir, then all bindings for orig are thrown out (of Active) and a
- warning message printed. That's pretty much what we have at
- present anyway (warning, but no throwout; instead just keep the
- first).
+ redir, then the first binding for orig is retained, and all the
+ rest ignored.
=20
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Modified: branches/FNWRAP/coregrind/m_translate.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/FNWRAP/coregrind/m_translate.c 2005-12-06 17:27:44 UTC (rev =
5296)
+++ branches/FNWRAP/coregrind/m_translate.c 2005-12-06 18:18:56 UTC (rev =
5297)
@@ -441,6 +441,9 @@
}
=20
=20
+/* Note: see comments at top of m_redir.c for the Big Picture on how
+ redirections are managed. */
+
Bool VG_(translate) ( ThreadId tid,=20
Addr64 orig_addr,
Bool debugging_translation,
|
|
From: Nicholas N. <nj...@cs...> - 2005-12-06 17:41:43
|
Hi, Here's an interesting experiment. Run 'top', hitting space frequently. Note that the SIZE field of 'top' itself stays constant (for me it's 1068k). Now run "valgrind --tool=none top". The SIZE field of 'none' grows briefly at the start, then stays constant. The same is true of Cachegrind. Massif grows very slowly as it takes more heap censuses. Now try it with Memcheck. Whoa! That looks like a memory leak. Anyone feeling bored? Nick |
|
From: <sv...@va...> - 2005-12-06 17:27:56
|
Author: njn
Date: 2005-12-06 17:27:44 +0000 (Tue, 06 Dec 2005)
New Revision: 5296
Log:
Comment wibbles.
Modified:
branches/COMPVBITS/memcheck/mc_main.c
Modified: branches/COMPVBITS/memcheck/mc_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/COMPVBITS/memcheck/mc_main.c 2005-12-06 16:09:52 UTC (rev 52=
95)
+++ branches/COMPVBITS/memcheck/mc_main.c 2005-12-06 17:27:44 UTC (rev 52=
96)
@@ -482,7 +482,7 @@
return 0x3 & vabits32; // mask out the rest
}
=20
-// XXX: note that these are only used in slow cases. The fast cases do
+// Note that these two are only used in slow cases. The fast cases do
// clever things like combine the auxmap check (in
// get_secmap_{read,writ}able) with alignment checks.
=20
@@ -500,7 +500,6 @@
SecMap* sm =3D get_secmap_readable(a);
UWord sm_off =3D SM_OFF(a);
UChar vabits32 =3D sm->vabits32[sm_off];
-// VG_(printf)("get: %p\n", &(sm->vabits32[sm_off]));
return extract_vabits8_from_vabits32(a, vabits32);
}
=20
@@ -601,7 +600,6 @@
}
set_vabits8(ai, vabits8);
} else {
- // XXX: is this right?
// Unaddressable! Do nothing -- when writing to unaddressable
// memory it acts as a black hole, and the V bits can never be =
seen
// again. So we don't have to write them at all.
|
|
From: <sv...@va...> - 2005-12-06 16:09:55
|
Author: sewardj
Date: 2005-12-06 16:09:52 +0000 (Tue, 06 Dec 2005)
New Revision: 5295
Log:
Handle code deletions in the unredirected-cache, and add sanity
checks.
Modified:
branches/FNWRAP/coregrind/m_transtab.c
Modified: branches/FNWRAP/coregrind/m_transtab.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/FNWRAP/coregrind/m_transtab.c 2005-12-06 16:09:28 UTC (rev 5=
294)
+++ branches/FNWRAP/coregrind/m_transtab.c 2005-12-06 16:09:52 UTC (rev 5=
295)
@@ -557,6 +557,9 @@
=20
/* Sanity check absolutely everything. True =3D=3D check passed. */
=20
+/* forward */
+static Bool sanity_check_redir_tt_tc ( void );
+
static Bool sanity_check_all_sectors ( void )
{
Int sno;
@@ -570,6 +573,8 @@
if (!sane)
return False;
}
+ if (!sanity_check_redir_tt_tc() )
+ return False;
return True;
}
=20
@@ -958,6 +963,9 @@
/*--- Delete translations. ---*/
/*-------------------------------------------------------------*/
=20
+/* forward */
+static void unredir_discard_translations( Addr64, ULong );
+
/* Stuff for deleting translations which intersect with a given
address range. Unfortunately, to make this run at a reasonable
speed, it is complex. */
@@ -1179,6 +1187,9 @@
if (anyDeleted)
invalidateFastCache();
=20
+ /* don't forget the no-redir cache */
+ unredir_discard_translations( guest_start, range );
+
/* Post-deletion sanity check */
if (VG_(clo_sanity_level >=3D 4)) {
Int i;
@@ -1229,9 +1240,17 @@
}
UTCEntry;
=20
+/* We just allocate forwards in _tc, never deleting. */
static ULong unredir_tc[N_UNREDIR_TCQ] __attribute__((aligned(8)));
static Int unredir_tc_used;
+
+/* Slots in _tt can come into use and out again (.inUse).
+ Nevertheless _tt_highwater is maintained so that invalidations
+ don't have to scan all the slots when only a few are in use.
+ _tt_highwater holds the index of the highest ever allocated
+ slot. */
static UTCEntry unredir_tt[N_UNREDIR_TT];
+static Int unredir_tt_highwater;
=20
=20
static void init_unredir_tt_tc ( void )
@@ -1240,8 +1259,27 @@
unredir_tc_used =3D 0;
for (i =3D 0; i < N_UNREDIR_TT; i++)
unredir_tt[i].inUse =3D False;
+ unredir_tt_highwater =3D -1;
}
=20
+/* Do a sanity check; return False on failure. */
+static Bool sanity_check_redir_tt_tc ( void )
+{
+ Int i;
+ if (unredir_tt_highwater < -1) return False;
+ if (unredir_tt_highwater >=3D N_UNREDIR_TT) return False;
+
+ for (i =3D unredir_tt_highwater+1; i < N_UNREDIR_TT; i++)
+ if (unredir_tt[i].inUse)
+ return False;
+
+ if (unredir_tc_used < 0) return False;
+ if (unredir_tc_used > N_UNREDIR_TCQ) return False;
+
+ return True;
+}
+
+
/* Add an UNREDIRECTED translation of vge to TT/TC. The translation
is temporarily in code[0 .. code_len-1].
*/
@@ -1254,6 +1292,8 @@
Int i, j, code_szQ;
HChar *srcP, *dstP;
=20
+ vg_assert(sanity_check_redir_tt_tc());
+
/* This is the whole point: it's not redirected! */
vg_assert(entry =3D=3D vge->base[0]);
=20
@@ -1278,6 +1318,9 @@
vg_assert(i >=3D 0 && i < N_UNREDIR_TT);
vg_assert(unredir_tt[i].inUse =3D=3D False);
=20
+ if (i > unredir_tt_highwater)
+ unredir_tt_highwater =3D i;
+
dstP =3D (HChar*)&unredir_tc[unredir_tc_used];
srcP =3D (HChar*)code;
for (j =3D 0; j < code_len; j++)
@@ -1309,7 +1352,20 @@
return False;
}
=20
+static void unredir_discard_translations( Addr64 guest_start, ULong rang=
e )
+{
+ Int i;
=20
+ vg_assert(sanity_check_redir_tt_tc());
+
+ for (i =3D 0; i <=3D unredir_tt_highwater; i++) {
+ if (unredir_tt[i].inUse
+ && overlaps( guest_start, range, &unredir_tt[i].vge))
+ unredir_tt[i].inUse =3D False;
+ }
+}
+
+
/*------------------------------------------------------------*/
/*--- Initialisation. ---*/
/*------------------------------------------------------------*/
|
|
From: <sv...@va...> - 2005-12-06 16:09:39
|
Author: sewardj
Date: 2005-12-06 16:09:28 +0000 (Tue, 06 Dec 2005)
New Revision: 5294
Log:
wibble
Modified:
branches/FNWRAP/coregrind/m_debuginfo/symtab.c
Modified: branches/FNWRAP/coregrind/m_debuginfo/symtab.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/FNWRAP/coregrind/m_debuginfo/symtab.c 2005-12-06 15:22:33 UT=
C (rev 5293)
+++ branches/FNWRAP/coregrind/m_debuginfo/symtab.c 2005-12-06 16:09:28 UT=
C (rev 5294)
@@ -46,8 +46,8 @@
#include "pub_core_mallocfree.h"
#include "pub_core_options.h"
#include "pub_core_profile.h"
-#include "pub_core_redir.h"
-#include "pub_core_tooliface.h" // For VG_(needs).data_syms
+#include "pub_core_redir.h" // VG_(redir_notify_{new,delete}_SegIn=
fo)
+#include "pub_core_tooliface.h" // VG_(needs).data_syms
=20
#include "pub_core_aspacemgr.h"
=20
|
|
From: <sv...@va...> - 2005-12-06 15:22:36
|
Author: sewardj
Date: 2005-12-06 15:22:33 +0000 (Tue, 06 Dec 2005)
New Revision: 5293
Log:
Fix up demangling, so that Z-encoded names are decoded by the standard
demangle function, VG_(demangle). Also move VG_(maybe_Z_demangle) to
m_demangle. This gets rid of the longstanding kludge in which the
Z-demangler modified the symbol tables in place, causing problems of
its own.
Modified:
branches/FNWRAP/coregrind/m_demangle/demangle.c
branches/FNWRAP/coregrind/m_redir.c
branches/FNWRAP/coregrind/pub_core_demangle.h
branches/FNWRAP/coregrind/pub_core_redir.h
branches/FNWRAP/include/pub_tool_redir.h
Modified: branches/FNWRAP/coregrind/m_demangle/demangle.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/FNWRAP/coregrind/m_demangle/demangle.c 2005-12-06 15:19:57 U=
TC (rev 5292)
+++ branches/FNWRAP/coregrind/m_demangle/demangle.c 2005-12-06 15:22:33 U=
TC (rev 5293)
@@ -34,17 +34,35 @@
#include "pub_core_mallocfree.h"
#include "pub_core_options.h"
#include "pub_core_profile.h"
+#include "pub_core_libcassert.h"
#include "demangle.h"
+#include "pub_core_libcprint.h"
=20
+
+/* This is the main, standard demangler entry point. */
+
void VG_(demangle) ( Char* orig, Char* result, Int result_size )
{
- Char* demangled =3D NULL;
+# define N_ZBUF 4096
+ HChar* demangled =3D NULL;
+ HChar z_demangled[N_ZBUF];
=20
- VGP_PUSHCC(VgpDemangle);
+ if (!VG_(clo_demangle)) {
+ VG_(strncpy_safely)(result, orig, result_size);
+ return;
+ }
=20
- if (VG_(clo_demangle))
- demangled =3D VG_(cplus_demangle) ( orig, DMGL_ANSI | DMGL_PARAMS =
);
+ /* Demangling was requested. First see if it's a Z-mangled
+ intercept specification. The fastest way is just to attempt a
+ Z-demangling (with NULL soname buffer, since we're not
+ interested in that). */
+ if (VG_(maybe_Z_demangle)( orig, NULL,0,/*soname*/
+ z_demangled, N_ZBUF)) {
+ orig =3D z_demangled;
+ }
=20
+ demangled =3D VG_(cplus_demangle) ( orig, DMGL_ANSI | DMGL_PARAMS );
+
if (demangled) {
VG_(strncpy_safely)(result, demangled, result_size);
VG_(arena_free) (VG_AR_DEMANGLE, demangled);
@@ -58,9 +76,172 @@
// does leak. But, we can't do much about it, and it's not a disaste=
r,
// so we just let it slide without aborting or telling the user.
=20
- VGP_POPCC(VgpDemangle);
+# undef N_ZBUF
}
=20
+
+/*------------------------------------------------------------*/
+/*--- DEMANGLE Z-ENCODED NAMES ---*/
+/*------------------------------------------------------------*/
+
+/* Demangle a Z-encoded name as described in pub_tool_redir.h.=20
+ Z-encoded names are used by Valgrind for doing function=20
+ interception/wrapping.
+
+ Demangle 'sym' into its soname and fnname parts, putting them in
+ the specified buffers. Returns a Bool indicating whether the
+ demangled failed or not. A failure can occur because the prefix
+ isn't recognised, the internal Z-escaping is wrong, or because one
+ or the other (or both) of the output buffers becomes full. Passing
+ 'so' as NULL is acceptable if the caller is only interested in the
+ function name part. */
+
+Bool VG_(maybe_Z_demangle) ( const HChar* sym,=20
+ /*OUT*/HChar* so, Int soLen,
+ /*OUT*/HChar* fn, Int fnLen )
+{
+# define EMITSO(ch) \
+ do { \
+ if (so) { \
+ if (soi >=3D soLen) { \
+ so[soLen-1] =3D 0; oflow =3D True; \
+ } else { \
+ so[soi++] =3D ch; so[soi] =3D 0; \
+ } \
+ } \
+ } while (0)
+# define EMITFN(ch) \
+ do { \
+ if (fni >=3D fnLen) { \
+ fn[fnLen-1] =3D 0; oflow =3D True; \
+ } else { \
+ fn[fni++] =3D ch; fn[fni] =3D 0; \
+ } \
+ } while (0)
+
+ Bool error, oflow, valid, fn_is_encoded;
+ Int soi, fni, i;
+
+ vg_assert(soLen > 0 || (soLen =3D=3D 0 && so =3D=3D NULL));
+ vg_assert(fnLen > 0);
+ error =3D False;
+ oflow =3D False;
+ soi =3D 0;
+ fni =3D 0;
+
+ valid =3D sym[0] =3D=3D '_'
+ && sym[1] =3D=3D 'v'
+ && sym[2] =3D=3D 'g'
+ && (sym[3] =3D=3D 'r' || sym[3] =3D=3D 'n')
+ && sym[4] =3D=3D 'Z'
+ && (sym[5] =3D=3D 'Z' || sym[5] =3D=3D 'U')
+ && sym[6] =3D=3D '_';
+ if (!valid)
+ return False;
+
+ fn_is_encoded =3D sym[5] =3D=3D 'Z';
+
+ /* Now scan the Z-encoded soname. */
+ i =3D 7;
+ while (True) {
+
+ if (sym[i] =3D=3D '_')
+ /* Found the delimiter. Move on to the fnname loop. */
+ break;
+
+ if (sym[i] =3D=3D 0) {
+ error =3D True;
+ goto out;
+ }
+
+ if (sym[i] !=3D 'Z') {
+ EMITSO(sym[i]);
+ i++;
+ continue;
+ }
+
+ /* We've got a Z-escape. */
+ i++;
+ switch (sym[i]) {
+ case 'a': EMITSO('*'); break;
+ case 'p': EMITSO('+'); break;
+ case 'c': EMITSO(':'); break;
+ case 'd': EMITSO('.'); break;
+ case 'u': EMITSO('_'); break;
+ case 'h': EMITSO('-'); break;
+ case 's': EMITSO(' '); break;
+ case 'Z': EMITSO('Z'); break;
+ case 'A': EMITSO('@'); break;
+ default: error =3D True; goto out;
+ }
+ i++;
+ }
+
+ vg_assert(sym[i] =3D=3D '_');
+ i++;
+
+ /* Now deal with the function name part. */
+ if (!fn_is_encoded) {
+
+ /* simple; just copy. */
+ while (True) {
+ if (sym[i] =3D=3D 0)
+ break;
+ EMITFN(sym[i]);
+ i++;
+ }
+ goto out;
+
+ }
+
+ /* else use a Z-decoding loop like with soname */
+ while (True) {
+
+ if (sym[i] =3D=3D 0)
+ break;
+
+ if (sym[i] !=3D 'Z') {
+ EMITFN(sym[i]);
+ i++;
+ continue;
+ }
+
+ /* We've got a Z-escape. */
+ i++;
+ switch (sym[i]) {
+ case 'a': EMITFN('*'); break;
+ case 'p': EMITFN('+'); break;
+ case 'c': EMITFN(':'); break;
+ case 'd': EMITFN('.'); break;
+ case 'u': EMITFN('_'); break;
+ case 'h': EMITFN('-'); break;
+ case 's': EMITFN(' '); break;
+ case 'Z': EMITFN('Z'); break;
+ case 'A': EMITFN('@'); break;
+ default: error =3D True; goto out;
+ }
+ i++;
+ }
+
+ out:
+ EMITSO(0);
+ EMITFN(0);
+
+ if (error) {
+ /* Something's wrong. Give up. */
+ VG_(message)(Vg_UserMsg, "m_redir: error demangling: %s", sym);
+ return False;
+ }
+ if (oflow) {
+ /* It didn't fit. Give up. */
+ VG_(message)(Vg_UserMsg, "m_debuginfo: oflow demangling: %s", sym)=
;
+ return False;
+ }
+
+ return True;
+}
+
+
/*--------------------------------------------------------------------*/
/*--- end ---*/
/*--------------------------------------------------------------------*/
Modified: branches/FNWRAP/coregrind/m_redir.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/FNWRAP/coregrind/m_redir.c 2005-12-06 15:19:57 UTC (rev 5292=
)
+++ branches/FNWRAP/coregrind/m_redir.c 2005-12-06 15:22:33 UTC (rev 5293=
)
@@ -45,6 +45,7 @@
#include "pub_core_tooliface.h" // VG_(needs).malloc_replacement
#include "pub_core_aspacemgr.h" // VG_(am_find_nsegment)
#include "pub_core_clientstate.h" // VG_(client___libc_freeres_wrapper)
+#include "pub_core_demangle.h" // VG_(maybe_Z_demangle)
=20
=20
/*------------------------------------------------------------*/
@@ -463,8 +464,10 @@
=20
bad:
vg_assert(what);
- VG_(message)(Vg_UserMsg, "WARNING: %s", what);
- show_active(" ", &act);
+ if (VG_(clo_verbosity) > 1) {
+ VG_(message)(Vg_UserMsg, "WARNING: %s", what);
+ show_active( " new: ", &act);
+ }
}
=20
=20
@@ -761,160 +764,6 @@
=20
=20
/*------------------------------------------------------------*/
-/*--- THE DEMANGLER ---*/
-/*------------------------------------------------------------*/
-
-/* Demangle 'sym' into its soname and fnname parts, putting them in
- the specified buffers. Returns a Bool indicating whether the
- demangled failed or not. A failure can occur because the prefix
- isn't recognised, the internal Z-escaping is wrong, or because one
- or the other (or both) of the output buffers becomes full. */
-
-Bool VG_(maybe_Z_demangle) ( const HChar* sym,=20
- /*OUT*/HChar* so, Int soLen,
- /*OUT*/HChar* fn, Int fnLen )
-{
-# define EMITSO(ch) \
- do { \
- if (soi >=3D soLen) { \
- so[soLen-1] =3D 0; oflow =3D True; \
- } else { \
- so[soi++] =3D ch; so[soi] =3D 0; \
- } \
- } while (0)
-# define EMITFN(ch) \
- do { \
- if (fni >=3D fnLen) { \
- fn[fnLen-1] =3D 0; oflow =3D True; \
- } else { \
- fn[fni++] =3D ch; fn[fni] =3D 0; \
- } \
- } while (0)
-
- Bool error, oflow, valid, fn_is_encoded;
- Int soi, fni, i;
-
- vg_assert(soLen > 0);
- vg_assert(fnLen > 0);
- error =3D False;
- oflow =3D False;
- soi =3D 0;
- fni =3D 0;
-
- valid =3D sym[0] =3D=3D '_'
- && sym[1] =3D=3D 'v'
- && sym[2] =3D=3D 'g'
- && (sym[3] =3D=3D 'r' || sym[3] =3D=3D 'n')
- && sym[4] =3D=3D 'Z'
- && (sym[5] =3D=3D 'Z' || sym[5] =3D=3D 'U')
- && sym[6] =3D=3D '_';
- if (!valid)
- return False;
-
- fn_is_encoded =3D sym[5] =3D=3D 'Z';
-
- /* Now scan the Z-encoded soname. */
- i =3D 7;
- while (True) {
-
- if (sym[i] =3D=3D '_')
- /* Found the delimiter. Move on to the fnname loop. */
- break;
-
- if (sym[i] =3D=3D 0) {
- error =3D True;
- goto out;
- }
-
- if (sym[i] !=3D 'Z') {
- EMITSO(sym[i]);
- i++;
- continue;
- }
-
- /* We've got a Z-escape. */
- i++;
- switch (sym[i]) {
- case 'a': EMITSO('*'); break;
- case 'p': EMITSO('+'); break;
- case 'c': EMITSO(':'); break;
- case 'd': EMITSO('.'); break;
- case 'u': EMITSO('_'); break;
- case 'h': EMITSO('-'); break;
- case 's': EMITSO(' '); break;
- case 'Z': EMITSO('Z'); break;
- case 'A': EMITSO('@'); break;
- default: error =3D True; goto out;
- }
- i++;
- }
-
- vg_assert(sym[i] =3D=3D '_');
- i++;
-
- /* Now deal with the function name part. */
- if (!fn_is_encoded) {
-
- /* simple; just copy. */
- while (True) {
- if (sym[i] =3D=3D 0)
- break;
- EMITFN(sym[i]);
- i++;
- }
- goto out;
-
- }
-
- /* else use a Z-decoding loop like with soname */
- while (True) {
-
- if (sym[i] =3D=3D 0)
- break;
-
- if (sym[i] !=3D 'Z') {
- EMITFN(sym[i]);
- i++;
- continue;
- }
-
- /* We've got a Z-escape. */
- i++;
- switch (sym[i]) {
- case 'a': EMITFN('*'); break;
- case 'p': EMITFN('+'); break;
- case 'c': EMITFN(':'); break;
- case 'd': EMITFN('.'); break;
- case 'u': EMITFN('_'); break;
- case 'h': EMITFN('-'); break;
- case 's': EMITFN(' '); break;
- case 'Z': EMITFN('Z'); break;
- case 'A': EMITFN('@'); break;
- default: error =3D True; goto out;
- }
- i++;
- }
-
- out:
- EMITSO(0);
- EMITFN(0);
-
- if (error) {
- /* Something's wrong. Give up. */
- VG_(message)(Vg_UserMsg, "m_redir: error demangling: %s", sym);
- return False;
- }
- if (oflow) {
- /* It didn't fit. Give up. */
- VG_(message)(Vg_UserMsg, "m_debuginfo: oflow demangling: %s", sym)=
;
- return False;
- }
-
- return True;
-}
-
-
-/*------------------------------------------------------------*/
/*--- SANITY/DEBUG ---*/
/*------------------------------------------------------------*/
=20
Modified: branches/FNWRAP/coregrind/pub_core_demangle.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/FNWRAP/coregrind/pub_core_demangle.h 2005-12-06 15:19:57 UTC=
(rev 5292)
+++ branches/FNWRAP/coregrind/pub_core_demangle.h 2005-12-06 15:22:33 UTC=
(rev 5293)
@@ -32,12 +32,33 @@
#define __PUB_CORE_DEMANGLE_H
=20
//--------------------------------------------------------------------
-// PURPOSE: This module exports a single function for demangling C++
-// names.
+// PURPOSE: This module exports functions for demangling C++ and=20
+// Z-encoded names.
//--------------------------------------------------------------------
=20
-extern void VG_(demangle) ( Char* orig, Char* result, Int result_size );
+/* This is the main, standard demangler entry point. */
=20
+extern=20
+void VG_(demangle) ( Char* orig, Char* result, Int result_size );
+
+/* Demangle a Z-encoded name as described in pub_tool_redir.h.=20
+ Z-encoded names are used by Valgrind for doing function=20
+ interception/wrapping.
+
+ Demangle 'sym' into its soname and fnname parts, putting them in
+ the specified buffers. Returns a Bool indicating whether the
+ demangled failed or not. A failure can occur because the prefix
+ isn't recognised, the internal Z-escaping is wrong, or because one
+ or the other (or both) of the output buffers becomes full. Passing
+ 'so' as NULL is acceptable if the caller is only interested in the
+ function name part. */
+
+extern=20
+Bool VG_(maybe_Z_demangle) ( const HChar* sym,=20
+ /*OUT*/HChar* so, Int soLen,
+ /*OUT*/HChar* fn, Int fnLen );
+
+
#endif // __PUB_CORE_DEMANGLE_H
=20
/*--------------------------------------------------------------------*/
Modified: branches/FNWRAP/coregrind/pub_core_redir.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/FNWRAP/coregrind/pub_core_redir.h 2005-12-06 15:19:57 UTC (r=
ev 5292)
+++ branches/FNWRAP/coregrind/pub_core_redir.h 2005-12-06 15:22:33 UTC (r=
ev 5293)
@@ -88,21 +88,6 @@
=20
=20
//--------------------------------------------------------------------
-// Demangling of Z-encoded names
-//--------------------------------------------------------------------
-
-/* Demangle 'sym' into its soname and fnname parts, putting them in
- the specified buffers. Returns a Bool indicating whether the
- demangled failed or not. A failure can occur because the prefix
- isn't recognised, the internal Z-escaping is wrong, or because one
- or the other (or both) of the output buffers becomes full. */
-
-Bool VG_(maybe_Z_demangle) ( const HChar* sym,=20
- /*OUT*/HChar* so, Int soLen,
- /*OUT*/HChar* fn, Int fnLen );
-
-
-//--------------------------------------------------------------------
// Function wrapping
//--------------------------------------------------------------------
=20
Modified: branches/FNWRAP/include/pub_tool_redir.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/FNWRAP/include/pub_tool_redir.h 2005-12-06 15:19:57 UTC (rev=
5292)
+++ branches/FNWRAP/include/pub_tool_redir.h 2005-12-06 15:22:33 UTC (rev=
5293)
@@ -110,6 +110,8 @@
Everything else is left unchanged.
*/
=20
+/* If you change these, the code in VG_(maybe_Z_demangle) needs to
+ be changed accordingly. */
#define VG_REDIRECT_FUNCTION_ZU(soname,fnname) _vgrZU_##soname##_##fnnam=
e
#define VG_REDIRECT_FUNCTION_ZZ(soname,fnname) _vgrZZ_##soname##_##fnnam=
e
=20
|
|
From: <sv...@va...> - 2005-12-06 15:20:10
|
Author: sewardj
Date: 2005-12-06 15:19:57 +0000 (Tue, 06 Dec 2005)
New Revision: 5292
Log:
update
Modified:
branches/FNWRAP/none/tests/cmdline2.stdout.exp
Modified: branches/FNWRAP/none/tests/cmdline2.stdout.exp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=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/FNWRAP/none/tests/cmdline2.stdout.exp 2005-12-06 00:49:49 UT=
C (rev 5291)
+++ branches/FNWRAP/none/tests/cmdline2.stdout.exp 2005-12-06 15:19:57 UT=
C (rev 5292)
@@ -54,6 +54,7 @@
--trace-signals=3Dno|yes show signal handling details? [no]
--trace-symtab=3Dno|yes show symbol table details? [no]
--trace-cfi=3Dno|yes show call-frame-info details? [no]
+ --trace-redir=3Dno|yes show redirection details? [no]
--trace-sched=3Dno|yes show thread scheduler details? [no]
--wait-for-gdb=3Dyes|no pause on startup to wait for gdb attach
--command-line-only=3Dno|yes only use command line options [no]
|
|
From: <js...@ac...> - 2005-12-06 03:55:07
|
Nightly build on phoenix ( SuSE 10.0 ) started at 2005-12-06 03:30:01 GMT 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 == 208 tests, 6 stderr failures, 1 stdout failure ================= memcheck/tests/leak-tree (stderr) memcheck/tests/mempool (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) none/tests/mremap2 (stdout) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: <js...@ac...> - 2005-12-06 03:46:59
|
Nightly build on g5 ( YDL 4.0, ppc970 ) started at 2005-12-06 04:40:00 CET 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 == 175 tests, 15 stderr failures, 0 stdout failures ================= memcheck/tests/badjump (stderr) memcheck/tests/badjump2 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/mempool (stderr) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/supp1 (stderr) memcheck/tests/supp_unknown (stderr) memcheck/tests/toobig-allocs (stderr) memcheck/tests/xml1 (stderr) massif/tests/toobig-allocs (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/mremap (stderr) |
|
From: Tom H. <to...@co...> - 2005-12-06 03:42:26
|
Nightly build on dunsmere ( athlon, Fedora Core 4 ) started at 2005-12-06 03:30:05 GMT 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 == 210 tests, 7 stderr failures, 1 stdout failure ================= memcheck/tests/leak-tree (stderr) memcheck/tests/mempool (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) none/tests/mremap2 (stdout) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2005-12-06 03:30:24
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2005-12-06 03:15:05 GMT 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 == 209 tests, 17 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/mempool (stderr) memcheck/tests/partial_load_dflt (stderr) memcheck/tests/partial_load_ok (stderr) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/sigkill (stderr) memcheck/tests/stack_changes (stderr) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2005-12-06 03:26:02
|
Nightly build on dellow ( x86_64, Fedora Core 4 ) started at 2005-12-06 03:10:08 GMT 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 == 227 tests, 5 stderr failures, 1 stdout failure ================= memcheck/tests/mempool (stderr) memcheck/tests/x86/scalar (stderr) none/tests/amd64/faultstatus (stderr) none/tests/mremap2 (stdout) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2005-12-06 03:23:32
|
Nightly build on aston ( x86_64, Fedora Core 3 ) started at 2005-12-06 03:05:08 GMT 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 == 227 tests, 6 stderr failures, 1 stdout failure ================= memcheck/tests/mempool (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) none/tests/amd64/faultstatus (stderr) none/tests/mremap2 (stdout) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2005-12-06 03:23:25
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2005-12-06 03:01:52 GMT 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 == 227 tests, 6 stderr failures, 0 stdout failures ================= memcheck/tests/mempool (stderr) memcheck/tests/pointer-trace (stderr) none/tests/amd64/faultstatus (stderr) none/tests/fdleak_fcntl (stderr) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) |