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
(10) |
2
(22) |
3
(15) |
4
(14) |
5
(8) |
6
(10) |
7
(14) |
|
8
(9) |
9
(10) |
10
(21) |
11
(16) |
12
(17) |
13
(15) |
14
(8) |
|
15
(12) |
16
(8) |
17
(44) |
18
(24) |
19
(29) |
20
(29) |
21
(17) |
|
22
(17) |
23
(16) |
24
(18) |
25
(16) |
26
(15) |
27
(16) |
28
(11) |
|
29
(11) |
30
(10) |
31
(12) |
|
|
|
|
|
From: <sv...@va...> - 2006-01-20 21:46:07
|
Author: sewardj
Date: 2006-01-20 21:46:03 +0000 (Fri, 20 Jan 2006)
New Revision: 5577
Log:
Handle __NR_madvise.
Modified:
trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c
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 2006-01-20 21:45:36 U=
TC (rev 5576)
+++ trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c 2006-01-20 21:46:03 U=
TC (rev 5577)
@@ -1418,7 +1418,7 @@
// _____(__NR_pivot_root, sys_pivot_root), // 203
GENXY(__NR_fcntl64, sys_fcntl64), // 204 !!!!?? =
32bit only */
=20
-// _____(__NR_madvise, sys_madvise), // 205
+ GENX_(__NR_madvise, sys_madvise), // 205
// _____(__NR_mincore, sys_mincore), // 206
LINX_(__NR_gettid, sys_gettid), // 207
// _____(__NR_tkill, sys_tkill), // 208
|
|
From: <sv...@va...> - 2006-01-20 21:45:42
|
Author: sewardj
Date: 2006-01-20 21:45:36 +0000 (Fri, 20 Jan 2006)
New Revision: 5576
Log:
ppc64-linux: compute the correct initial program counter and tocptr
when the interpreter is loaded at a different address than what it
asked for.
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 2006-01-20 16:48:31 UTC (rev 5575)
+++ trunk/coregrind/m_ume.c 2006-01-20 21:45:36 UTC (rev 5576)
@@ -329,6 +329,11 @@
void *entry;
ESZ(Addr) ebase =3D 0;
=20
+ /* The difference between where the interpreter got mapped and
+ where it asked to be mapped. Needed for computing the ppc64 ELF
+ entry point and initial tocptr (R2) value. */
+ ESZ(Word) interp_offset =3D 0;
+
#ifdef HAVE_PIE
ebase =3D info->exe_base;
#endif
@@ -484,6 +489,7 @@
=20
entry =3D (void *)(advised - interp_addr + interp->e.e_entry);
info->interp_base =3D (ESZ(Addr))advised;
+ interp_offset =3D advised - interp_addr;
=20
VG_(free)(interp->p);
VG_(free)(interp);
@@ -500,6 +506,8 @@
is the static chain value. */
info->init_ip =3D ((ULong*)entry)[0];
info->init_toc =3D ((ULong*)entry)[1];
+ info->init_ip +=3D interp_offset;
+ info->init_toc +=3D interp_offset;
#else
info->init_ip =3D (Addr)entry;
info->init_toc =3D 0; /* meaningless on this platform */
|
|
From: Julian S. <js...@ac...> - 2006-01-20 17:58:25
|
I did runs on 6 machines: 2 x86, 1 amd64, 1 ppc32, 2 ppc64. The ppc64s are both running in 64-bit mode now, so this is a test of all 4 supported platforms. Not sure what to conclude from this. It's odd that the two almost identical PPC970s give such different slowdown ratios. J x86 (Pentium III-T, 1.13 GHz) (SuSE 10.0) bigcode1 trunk : 0.6s nl:18.2s (33.1x, -----) mc:25.1s (45.7x, -----) bigcode2 trunk : 0.6s nl:29.2s (51.2x, -----) mc:46.8s (82.1x, -----) bz2 trunk : 3.2s nl:15.8s ( 4.9x, -----) mc:70.1s (21.9x, -----) fbench trunk : 1.7s nl: 9.6s ( 5.6x, -----) mc:36.5s (21.5x, -----) ffbench trunk : 5.9s nl:10.8s ( 1.8x, -----) mc:29.4s ( 5.0x, -----) heap trunk : 0.7s nl: 6.4s ( 8.6x, -----) mc:44.1s (59.6x, -----) sarp trunk : 0.1s nl: 1.2s ( 9.6x, -----) mc:31.1s (239.2x, -----) tinycc trunk : 1.3s nl:10.4s ( 7.8x, -----) mc:62.2s (46.4x, -----) x86 (Pentium 4 Willamette, 1.7 GHz) (SuSE 10.0) bigcode1 trunk : 0.4s nl:16.1s (44.9x, -----) mc:23.0s (63.9x, -----) bigcode2 trunk : 0.4s nl:25.4s (68.7x, -----) mc:43.6s (117.8x, -----) bz2 trunk : 2.2s nl:16.4s ( 7.4x, -----) mc:55.5s (25.2x, -----) fbench trunk : 1.6s nl:13.1s ( 8.2x, -----) mc:33.9s (21.2x, -----) ffbench trunk : 4.9s nl:11.2s ( 2.3x, -----) mc:25.8s ( 5.2x, -----) heap trunk : 0.5s nl: 5.9s (12.9x, -----) mc:36.0s (78.3x, -----) sarp trunk : 0.1s nl: 1.4s (12.1x, -----) mc:25.5s (212.2x, -----) tinycc trunk : 1.0s nl:12.2s (12.7x, -----) mc:68.3s (71.1x, -----) amd64 (Athlon64 2.2 GHz) (SuSE 9.2) bigcode1 trunk : 0.4s nl:12.0s (32.5x, -----) mc:16.8s (45.5x, -----) bigcode2 trunk : 0.4s nl:18.3s (47.0x, -----) mc:29.9s (76.6x, -----) bz2 trunk : 1.2s nl: 9.7s ( 8.4x, -----) mc:21.1s (18.2x, -----) fbench trunk : 0.7s nl: 3.4s ( 4.8x, -----) mc:10.0s (14.1x, -----) ffbench trunk : 2.1s nl: 4.2s ( 2.0x, -----) mc:10.9s ( 5.3x, -----) heap trunk : 0.2s nl: 2.2s (11.8x, -----) mc:17.8s (93.8x, -----) sarp trunk : 0.0s nl: 0.6s (15.8x, -----) mc: 7.8s (195.2x, -----) tinycc trunk : 0.4s nl: 7.7s (21.3x, -----) mc:26.0s (72.1x, -----) ppc32 (MPC7447A, 1.25 GHz) (SuSE 10.0) bigcode1 trunk : 0.5s nl:11.2s (22.8x, -----) mc:18.4s (37.5x, -----) bigcode2 trunk : 0.5s nl:19.5s (38.2x, -----) mc:38.3s (75.2x, -----) bz2 trunk : 2.1s nl:13.9s ( 6.6x, -----) mc:46.2s (22.1x, -----) fbench trunk : 1.5s nl: 6.2s ( 4.0x, -----) mc:26.8s (17.4x, -----) ffbench trunk : 4.8s nl: 6.7s ( 1.4x, -----) mc:21.7s ( 4.5x, -----) heap trunk : 1.3s nl: 6.2s ( 4.8x, -----) mc:32.5s (24.8x, -----) sarp trunk : 0.1s nl: 0.9s (10.6x, -----) mc:16.8s (186.3x, -----) tinycc trunk : 0.9s nl:10.2s (10.7x, -----) mc:48.6s (51.2x, -----) ppc64 (PPC970 2.3 GHz) (FC4) (pmac) bigcode1 trunk : 0.5s nl:11.4s (24.2x, -----) mc:15.4s (32.7x, -----) bigcode2 trunk : 0.5s nl:11.3s (24.7x, -----) mc:15.9s (34.6x, -----) bz2 trunk : 1.9s nl:16.8s ( 8.8x, -----) mc:43.5s (22.9x, -----) fbench trunk : 0.8s nl: 5.5s ( 6.7x, -----) mc:23.8s (29.0x, -----) ffbench trunk : 2.8s nl: 4.9s ( 1.8x, -----) mc:14.0s ( 5.1x, -----) heap trunk : 1.0s nl: 6.8s ( 6.6x, -----) mc:33.2s (32.3x, -----) sarp trunk : 0.1s nl: 1.0s (14.4x, -----) mc:14.6s (208.0x, -----) tinycc trunk : 0.7s nl: 8.5s (12.9x, -----) mc:45.3s (68.7x, -----) ppc64 (PPC970 2.5 GHz) (YDL4) (g5) bigcode1 trunk : 0.6s nl:10.4s (17.9x, -----) mc:14.1s (24.4x, -----) bigcode2 trunk : 0.6s nl:10.4s (17.9x, -----) mc:14.8s (25.5x, -----) bz2 trunk : 2.1s nl:15.6s ( 7.5x, -----) mc:42.9s (20.7x, -----) fbench trunk : 0.8s nl: 4.7s ( 6.2x, -----) mc:19.4s (25.9x, -----) ffbench trunk : 2.5s nl: 4.6s ( 1.8x, -----) mc:14.2s ( 5.6x, -----) heap trunk : 0.9s nl: 5.6s ( 6.0x, -----) mc:35.8s (38.5x, -----) sarp trunk : 0.1s nl: 0.9s (18.0x, -----) mc:19.4s (388.2x, -----) tinycc trunk : 0.7s nl: 8.4s (12.9x, -----) mc:49.9s (76.7x, -----) |
|
From: <sv...@va...> - 2006-01-20 16:48:35
|
Author: sewardj Date: 2006-01-20 16:48:31 +0000 (Fri, 20 Jan 2006) New Revision: 5575 Log: Yet another possible output, due to trivial differences in backtraces. This is getting rediculous. We need a better way to compare backtraces in regression test outputs. Added: trunk/none/tests/fdleak_cmsg.stderr.exp4 Modified: trunk/none/tests/Makefile.am Modified: trunk/none/tests/Makefile.am =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=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/none/tests/Makefile.am 2006-01-20 16:47:20 UTC (rev 5574) +++ trunk/none/tests/Makefile.am 2006-01-20 16:48:31 UTC (rev 5575) @@ -46,7 +46,8 @@ execve.vgtest execve.stdout.exp execve.stderr.exp \ faultstatus.vgtest faultstatus.stderr.exp \ fcntl_setown.vgtest fcntl_setown.stdout.exp fcntl_setown.stderr.exp \ - fdleak_cmsg.stderr.exp fdleak_cmsg.stderr.exp2 fdleak_cmsg.stderr.exp3 = \ + fdleak_cmsg.stderr.exp fdleak_cmsg.stderr.exp2 \ + fdleak_cmsg.stderr.exp3 fdleak_cmsg.stderr.exp4 \ fdleak_cmsg.vgtest \ fdleak_creat.stderr.exp fdleak_creat.stderr.exp2 \ fdleak_creat.stderr.exp3 fdleak_creat.vgtest \ Added: trunk/none/tests/fdleak_cmsg.stderr.exp4 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=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/none/tests/fdleak_cmsg.stderr.exp4 (rev= 0) +++ trunk/none/tests/fdleak_cmsg.stderr.exp4 2006-01-20 16:48:31 UTC (rev= 5575) @@ -0,0 +1,60 @@ + + +FILE DESCRIPTORS: 7 open at exit. +Open AF_UNIX socket .: /tmp/sock + at 0x........: accept (in /...libc...) + by 0x........: server (fdleak_cmsg.c:64) + by 0x........: main (fdleak_cmsg.c:174) + +Open AF_UNIX socket .: /tmp/sock + at 0x........: socket (in /...libc...) + by 0x........: server (fdleak_cmsg.c:33) + by 0x........: main (fdleak_cmsg.c:174) + +Open file descriptor .: /tmp/data2 + at 0x........: open (in /...libc...) + by 0x........: server (fdleak_cmsg.c:27) + by 0x........: (below main) (in /...libc...) + +Open file descriptor .: /tmp/data1 + at 0x........: open (in /...libc...) + by 0x........: server (fdleak_cmsg.c:21) + by 0x........: (below main) (in /...libc...) + +Open file descriptor .: . + <inherited from parent> + +Open file descriptor .: . + <inherited from parent> + +Open file descriptor .: /dev/null + <inherited from parent> + + + +FILE DESCRIPTORS: 6 open at exit. +Open file descriptor .: /tmp/data2 + at 0x........: recvmsg (in /...libc...) + by 0x........: client (fdleak_cmsg.c:131) + by 0x........: main (fdleak_cmsg.c:178) + +Open file descriptor .: /tmp/data1 + at 0x........: recvmsg (in /...libc...) + by 0x........: client (fdleak_cmsg.c:131) + by 0x........: main (fdleak_cmsg.c:178) + +Open AF_UNIX socket .: <unknown> + at 0x........: socket (in /...libc...) + by 0x........: client (fdleak_cmsg.c:110) + by 0x........: main (fdleak_cmsg.c:178) + +Open file descriptor .: . + <inherited from parent> + +Open file descriptor .: . + <inherited from parent> + +Open file descriptor .: /dev/null + <inherited from parent> + + |
|
From: <sv...@va...> - 2006-01-20 16:47:23
|
Author: sewardj
Date: 2006-01-20 16:47:20 +0000 (Fri, 20 Jan 2006)
New Revision: 5574
Log:
Wibble
Modified:
trunk/memcheck/tests/wrap1.c
trunk/memcheck/tests/wrap2.c
trunk/memcheck/tests/wrap7.c
Modified: trunk/memcheck/tests/wrap1.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/tests/wrap1.c 2006-01-20 16:46:34 UTC (rev 5573)
+++ trunk/memcheck/tests/wrap1.c 2006-01-20 16:47:20 UTC (rev 5574)
@@ -17,10 +17,10 @@
as if its soname was "NONE". */
void I_WRAP_SONAME_FNNAME_ZU(NONE,actual) ( void )
{
- OrigFn orig;
- VALGRIND_GET_ORIG_FN(orig);
+ OrigFn fn;
+ VALGRIND_GET_ORIG_FN(fn);
printf("wrapper-pre\n");
- CALL_FN_v_v(orig);
+ CALL_FN_v_v(fn);
printf("wrapper-post\n");
}
=20
Modified: trunk/memcheck/tests/wrap2.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/tests/wrap2.c 2006-01-20 16:46:34 UTC (rev 5573)
+++ trunk/memcheck/tests/wrap2.c 2006-01-20 16:47:20 UTC (rev 5574)
@@ -16,10 +16,10 @@
int I_WRAP_SONAME_FNNAME_ZU(NONE,fact) ( int n )
{
int r;
- OrigFn orig;
- VALGRIND_GET_ORIG_FN(orig);
+ OrigFn fn;
+ VALGRIND_GET_ORIG_FN(fn);
printf("in wrapper1-pre: fact(%d)\n", n);
- CALL_FN_W_W(r, orig, n);
+ CALL_FN_W_W(r, fn, n);
printf("in wrapper1-post: fact(%d) =3D %d\n", n, r);
return r;
}
Modified: trunk/memcheck/tests/wrap7.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/tests/wrap7.c 2006-01-20 16:46:34 UTC (rev 5573)
+++ trunk/memcheck/tests/wrap7.c 2006-01-20 16:47:20 UTC (rev 5574)
@@ -13,10 +13,10 @@
"wrap7so.so". */
void I_WRAP_SONAME_FNNAME_ZU(wrap7soZdso,actual) ( void )
{
- OrigFn orig;
- VALGRIND_GET_ORIG_FN(orig);
+ OrigFn fn;
+ VALGRIND_GET_ORIG_FN(fn);
printf("wrapper-pre\n");
- CALL_FN_v_v(orig);
+ CALL_FN_v_v(fn);
printf("wrapper-post\n");
}
=20
|
|
From: <sv...@va...> - 2006-01-20 16:46:39
|
Author: sewardj
Date: 2006-01-20 16:46:34 +0000 (Fri, 20 Jan 2006)
New Revision: 5573
Log:
Make fn wrapping work again on ppc32-linux.
Modified:
trunk/include/valgrind.h
Modified: trunk/include/valgrind.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/valgrind.h 2006-01-20 15:55:21 UTC (rev 5572)
+++ trunk/include/valgrind.h 2006-01-20 16:46:34 UTC (rev 5573)
@@ -789,7 +789,7 @@
/* These CALL_FN_ macros assume that on ppc32-linux, sizeof(unsigned
long) =3D=3D 4. */
=20
-#define CALL_FN_W_v(lval, fnptr) \
+#define CALL_FN_W_v(lval, orig) \
do { \
volatile OrigFn _orig =3D (orig); \
volatile unsigned long _argvec[1]; \
@@ -807,12 +807,12 @@
lval =3D (__typeof__(lval)) _res; \
} while (0)
=20
-#define CALL_FN_W_W(lval, fnptr, arg1) \
+#define CALL_FN_W_W(lval, orig, arg1) \
do { \
- volatile void* _fnptr =3D (fnptr); \
+ volatile OrigFn _orig =3D (orig); \
volatile unsigned long _argvec[2]; \
volatile unsigned long _res; \
- _argvec[0] =3D (unsigned long)_fnptr; \
+ _argvec[0] =3D (unsigned long)_orig.nraddr; \
_argvec[1] =3D (unsigned long)arg1; \
__asm__ volatile( \
"mr 11,%1\n\t" \
@@ -827,12 +827,12 @@
lval =3D (__typeof__(lval)) _res; \
} while (0)
=20
-#define CALL_FN_W_WW(lval, fnptr, arg1,arg2) \
+#define CALL_FN_W_WW(lval, orig, arg1,arg2) \
do { \
- volatile void* _fnptr =3D (fnptr); \
+ volatile OrigFn _orig =3D (orig); \
volatile unsigned long _argvec[3]; \
volatile unsigned long _res; \
- _argvec[0] =3D (unsigned long)_fnptr; \
+ _argvec[0] =3D (unsigned long)_orig.nraddr; \
_argvec[1] =3D (unsigned long)arg1; \
_argvec[2] =3D (unsigned long)arg2; \
__asm__ volatile( \
|
|
From: <sv...@va...> - 2006-01-20 15:55:27
|
Author: sewardj Date: 2006-01-20 15:55:21 +0000 (Fri, 20 Jan 2006) New Revision: 5572 Log: Forgot to svn add this. Added: trunk/none/tests/mremap2.stdout.exp2 Added: trunk/none/tests/mremap2.stdout.exp2 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=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/none/tests/mremap2.stdout.exp2 (rev 0) +++ trunk/none/tests/mremap2.stdout.exp2 2006-01-20 15:55:21 UTC (rev 557= 2) @@ -0,0 +1,296 @@ + +dst_possible =3D 0x........ +dst_impossible =3D 0x........ + src =3D 0x........ + +maymv 0 fixed 0 newsz 19 dstpo 0 dst 0x........ -> 0x........ (=3D= =3D src) +XXXXXXXXX.XXXXXXXXXXXXXXXXXXX...........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 0 newsz 19 dstpo 1 dst 0x........ -> 0x........ (=3D= =3D src) +XXXXXXXXX.XXXXXXXXXXXXXXXXXXX...........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 0 newsz 20 dstpo 0 dst 0x........ -> 0x........ (=3D= =3D src) +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 0 newsz 20 dstpo 1 dst 0x........ -> 0x........ (=3D= =3D src) +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 0 newsz 21 dstpo 0 dst 0x........ -> 0x........ (=3D= =3D src) +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXXX.........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 0 newsz 21 dstpo 1 dst 0x........ -> 0x........ (=3D= =3D src) +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXXX.........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 0 newsz 29 dstpo 0 dst 0x........ -> 0x........ (=3D= =3D src) +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 0 newsz 29 dstpo 1 dst 0x........ -> 0x........ (=3D= =3D src) +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 0 newsz 30 dstpo 0 dst 0x........ -> 0x........ (=3D= =3D src) +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 0 newsz 30 dstpo 1 dst 0x........ -> 0x........ (=3D= =3D src) +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 0 newsz 31 dstpo 0 dst 0x........ -> error 12 +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 0 newsz 31 dstpo 1 dst 0x........ -> error 12 +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + + +maymv 0 fixed 1 newsz 19 dstpo 0 dst 0x........ -> error 22 +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 1 newsz 19 dstpo 1 dst 0x........ -> error 22 +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 1 newsz 20 dstpo 0 dst 0x........ -> error 22 +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 1 newsz 20 dstpo 1 dst 0x........ -> error 22 +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 1 newsz 21 dstpo 0 dst 0x........ -> error 22 +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 1 newsz 21 dstpo 1 dst 0x........ -> error 22 +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 1 newsz 29 dstpo 0 dst 0x........ -> error 22 +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 1 newsz 29 dstpo 1 dst 0x........ -> error 22 +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 1 newsz 30 dstpo 0 dst 0x........ -> error 22 +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 1 newsz 30 dstpo 1 dst 0x........ -> error 22 +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 1 newsz 31 dstpo 0 dst 0x........ -> error 22 +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 0 fixed 1 newsz 31 dstpo 1 dst 0x........ -> error 22 +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + + +maymv 1 fixed 0 newsz 19 dstpo 0 dst 0x........ -> 0x........ (=3D= =3D src) +XXXXXXXXX.XXXXXXXXXXXXXXXXXXX...........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 1 fixed 0 newsz 19 dstpo 1 dst 0x........ -> 0x........ (=3D= =3D src) +XXXXXXXXX.XXXXXXXXXXXXXXXXXXX...........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 1 fixed 0 newsz 20 dstpo 0 dst 0x........ -> 0x........ (=3D= =3D src) +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 1 fixed 0 newsz 20 dstpo 1 dst 0x........ -> 0x........ (=3D= =3D src) +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 1 fixed 0 newsz 21 dstpo 0 dst 0x........ -> 0x........ (=3D= =3D src) +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXXX.........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 1 fixed 0 newsz 21 dstpo 1 dst 0x........ -> 0x........ (=3D= =3D src) +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXXX.........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 1 fixed 0 newsz 29 dstpo 0 dst 0x........ -> 0x........ (=3D= =3D src) +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 1 fixed 0 newsz 29 dstpo 1 dst 0x........ -> 0x........ (=3D= =3D src) +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 1 fixed 0 newsz 30 dstpo 0 dst 0x........ -> 0x........ (=3D= =3D src) +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 1 fixed 0 newsz 30 dstpo 1 dst 0x........ -> 0x........ (=3D= =3D src) +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 1 fixed 0 newsz 31 dstpo 0 dst 0x........ -> 0x........ (=3D= =3D other) +XXXXXXXXX...............................XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 1 fixed 0 newsz 31 dstpo 1 dst 0x........ -> 0x........ (=3D= =3D other) +XXXXXXXXX...............................XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + + +maymv 1 fixed 1 newsz 19 dstpo 0 dst 0x........ -> error 22 +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 1 fixed 1 newsz 19 dstpo 1 dst 0x........ -> 0x........ (=3D= =3D dst) +XXXXXXXXX...............................XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +XXXXXXXXXXXXXXXXXXX............................... + +maymv 1 fixed 1 newsz 20 dstpo 0 dst 0x........ -> error 22 +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 1 fixed 1 newsz 20 dstpo 1 dst 0x........ -> 0x........ (=3D= =3D dst) +XXXXXXXXX...............................XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +XXXXXXXXXXXXXXXXXXXX.............................. + +maymv 1 fixed 1 newsz 21 dstpo 0 dst 0x........ -> error 22 +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 1 fixed 1 newsz 21 dstpo 1 dst 0x........ -> 0x........ (=3D= =3D dst) +XXXXXXXXX...............................XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +XXXXXXXXXXXXXXXXXXXXX............................. + +maymv 1 fixed 1 newsz 29 dstpo 0 dst 0x........ -> error 22 +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 1 fixed 1 newsz 29 dstpo 1 dst 0x........ -> 0x........ (=3D= =3D dst) +XXXXXXXXX...............................XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +XXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................... + +maymv 1 fixed 1 newsz 30 dstpo 0 dst 0x........ -> error 22 +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 1 fixed 1 newsz 30 dstpo 1 dst 0x........ -> 0x........ (=3D= =3D dst) +XXXXXXXXX...............................XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................... + +maymv 1 fixed 1 newsz 31 dstpo 0 dst 0x........ -> error 22 +XXXXXXXXX.XXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +.................................................. + +maymv 1 fixed 1 newsz 31 dstpo 1 dst 0x........ -> 0x........ (=3D= =3D dst) +XXXXXXXXX...............................XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +.................................................. +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................... + |
|
From: <sv...@va...> - 2006-01-20 15:46:52
|
Author: sewardj
Date: 2006-01-20 15:46:46 +0000 (Fri, 20 Jan 2006)
New Revision: 5571
Log:
x86 function wrapping fixes.
Modified:
trunk/include/valgrind.h
Modified: trunk/include/valgrind.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/valgrind.h 2006-01-20 15:17:20 UTC (rev 5570)
+++ trunk/include/valgrind.h 2006-01-20 15:46:46 UTC (rev 5571)
@@ -458,12 +458,12 @@
/* These CALL_FN_ macros assume that on x86-linux, sizeof(unsigned
long) =3D=3D 4. */
=20
-#define CALL_FN_W_v(lval, fnptr) \
+#define CALL_FN_W_v(lval, orig) \
do { \
- volatile void* _fnptr =3D (fnptr); \
+ volatile OrigFn _orig =3D (orig); \
volatile unsigned long _argvec[1]; \
volatile unsigned long _res; \
- _argvec[0] =3D (unsigned long)_fnptr; \
+ _argvec[0] =3D (unsigned long)_orig.nraddr; \
__asm__ volatile( \
"movl (%%eax), %%eax\n\t" /* target->%eax */ \
VALGRIND_CALL_NOREDIR_EAX \
@@ -474,12 +474,12 @@
lval =3D (__typeof__(lval)) _res; \
} while (0)
=20
-#define CALL_FN_W_W(lval, fnptr, arg1) \
+#define CALL_FN_W_W(lval, orig, arg1) \
do { \
- volatile void* _fnptr =3D (fnptr); \
+ volatile OrigFn _orig =3D (orig); \
volatile unsigned long _argvec[2]; \
volatile unsigned long _res; \
- _argvec[0] =3D (unsigned long)_fnptr; \
+ _argvec[0] =3D (unsigned long)_orig.nraddr; \
_argvec[1] =3D (unsigned long)(arg1); \
__asm__ volatile( \
"pushl 4(%%eax)\n\t" \
@@ -493,12 +493,12 @@
lval =3D (__typeof__(lval)) _res; \
} while (0)
=20
-#define CALL_FN_W_WW(lval, fnptr, arg1,arg2) \
+#define CALL_FN_W_WW(lval, orig, arg1,arg2) \
do { \
- volatile void* _fnptr =3D (fnptr); \
+ volatile OrigFn _orig =3D (orig); \
volatile unsigned long _argvec[3]; \
volatile unsigned long _res; \
- _argvec[0] =3D (unsigned long)_fnptr; \
+ _argvec[0] =3D (unsigned long)_orig.nraddr; \
_argvec[1] =3D (unsigned long)(arg1); \
_argvec[2] =3D (unsigned long)(arg2); \
__asm__ volatile( \
@@ -514,12 +514,12 @@
lval =3D (__typeof__(lval)) _res; \
} while (0)
=20
-#define CALL_FN_W_WWWW(lval, fnptr, arg1,arg2,arg3,arg4) \
+#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \
do { \
- volatile void* _fnptr =3D (fnptr); \
+ volatile OrigFn _orig =3D (orig); \
volatile unsigned long _argvec[5]; \
volatile unsigned long _res; \
- _argvec[0] =3D (unsigned long)_fnptr; \
+ _argvec[0] =3D (unsigned long)_orig.nraddr; \
_argvec[1] =3D (unsigned long)(arg1); \
_argvec[2] =3D (unsigned long)(arg2); \
_argvec[3] =3D (unsigned long)(arg3); \
@@ -539,12 +539,12 @@
lval =3D (__typeof__(lval)) _res; \
} while (0)
=20
-#define CALL_FN_W_5W(lval, fnptr, arg1,arg2,arg3,arg4,arg5) \
+#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \
do { \
- volatile void* _fnptr =3D (fnptr); \
+ volatile OrigFn _orig =3D (orig); \
volatile unsigned long _argvec[6]; \
volatile unsigned long _res; \
- _argvec[0] =3D (unsigned long)_fnptr; \
+ _argvec[0] =3D (unsigned long)_orig.nraddr; \
_argvec[1] =3D (unsigned long)(arg1); \
_argvec[2] =3D (unsigned long)(arg2); \
_argvec[3] =3D (unsigned long)(arg3); \
@@ -566,12 +566,12 @@
lval =3D (__typeof__(lval)) _res; \
} while (0)
=20
-#define CALL_FN_W_6W(lval, fnptr, arg1,arg2,arg3,arg4,arg5,arg6) \
+#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \
do { \
- volatile void* _fnptr =3D (fnptr); \
+ volatile OrigFn _orig =3D (orig); \
volatile unsigned long _argvec[7]; \
volatile unsigned long _res; \
- _argvec[0] =3D (unsigned long)_fnptr; \
+ _argvec[0] =3D (unsigned long)_orig.nraddr; \
_argvec[1] =3D (unsigned long)(arg1); \
_argvec[2] =3D (unsigned long)(arg2); \
_argvec[3] =3D (unsigned long)(arg3); \
@@ -595,13 +595,13 @@
lval =3D (__typeof__(lval)) _res; \
} while (0)
=20
-#define CALL_FN_W_7W(lval, fnptr, arg1,arg2,arg3,arg4,arg5,arg6, \
- arg7) \
+#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \
+ arg7) \
do { \
- volatile void* _fnptr =3D (fnptr); \
+ volatile OrigFn _orig =3D (orig); \
volatile unsigned long _argvec[8]; \
volatile unsigned long _res; \
- _argvec[0] =3D (unsigned long)_fnptr; \
+ _argvec[0] =3D (unsigned long)_orig.nraddr; \
_argvec[1] =3D (unsigned long)(arg1); \
_argvec[2] =3D (unsigned long)(arg2); \
_argvec[3] =3D (unsigned long)(arg3); \
@@ -627,13 +627,13 @@
lval =3D (__typeof__(lval)) _res; \
} while (0)
=20
-#define CALL_FN_W_8W(lval, fnptr, arg1,arg2,arg3,arg4,arg5,arg6, \
- arg7,arg8) \
+#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \
+ arg7,arg8) \
do { \
- volatile void* _fnptr =3D (fnptr); \
+ volatile OrigFn _orig =3D (orig); \
volatile unsigned long _argvec[9]; \
volatile unsigned long _res; \
- _argvec[0] =3D (unsigned long)_fnptr; \
+ _argvec[0] =3D (unsigned long)_orig.nraddr; \
_argvec[1] =3D (unsigned long)(arg1); \
_argvec[2] =3D (unsigned long)(arg2); \
_argvec[3] =3D (unsigned long)(arg3); \
@@ -661,14 +661,14 @@
lval =3D (__typeof__(lval)) _res; \
} while (0)
=20
-#define CALL_FN_W_12W(lval, fnptr, arg1,arg2,arg3,arg4,arg5, \
- arg6,arg7,arg8,arg9,arg10, \
- arg11,arg12) \
+#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \
+ arg6,arg7,arg8,arg9,arg10, \
+ arg11,arg12) \
do { \
- volatile void* _fnptr =3D (fnptr); \
+ volatile OrigFn _orig =3D (orig); \
volatile unsigned long _argvec[13]; \
volatile unsigned long _res; \
- _argvec[0] =3D (unsigned long)_fnptr; \
+ _argvec[0] =3D (unsigned long)_orig.nraddr; \
_argvec[1] =3D (unsigned long)(arg1); \
_argvec[2] =3D (unsigned long)(arg2); \
_argvec[3] =3D (unsigned long)(arg3); \
|
|
From: <sv...@va...> - 2006-01-20 15:17:23
|
Author: sewardj
Date: 2006-01-20 15:17:20 +0000 (Fri, 20 Jan 2006)
New Revision: 5570
Log:
Make amd64 function wrapping work again following recent changes.
Includes expected outputs for wrap8 for the non ppc64-linux case.
Added:
trunk/memcheck/tests/wrap8.stderr.exp2
trunk/memcheck/tests/wrap8.stdout.exp2
Modified:
trunk/include/valgrind.h
trunk/memcheck/tests/Makefile.am
Modified: trunk/include/valgrind.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/valgrind.h 2006-01-20 14:31:57 UTC (rev 5569)
+++ trunk/include/valgrind.h 2006-01-20 15:17:20 UTC (rev 5570)
@@ -166,6 +166,13 @@
/* ---------------------------- x86 ---------------------------- */
=20
#if defined(ARCH_x86)
+
+typedef
+ struct {=20
+ unsigned int nraddr; /* where's the code? */
+ }
+ OrigFn;
+
#define __SPECIAL_INSTRUCTION_PREAMBLE \
"roll $3, %%edi ; roll $13, %%edi\n\t" \
"roll $29, %%edi ; roll $19, %%edi\n\t"
@@ -190,8 +197,9 @@
_zzq_rlval =3D _zzq_result; \
}
=20
-#define VALGRIND_GET_NRADDR(_zzq_rlval) \
- { volatile unsigned int __addr; \
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \
+ { volatile OrigFn* _zzq_orig =3D &(_zzq_rlval); \
+ volatile unsigned int __addr; \
__asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \
/* %EAX =3D guest_NRADDR */ \
"xchgl %%ecx,%%ecx" \
@@ -199,7 +207,7 @@
: \
: "cc", "memory" \
); \
- _zzq_rlval =3D (void*)__addr; \
+ _zzq_orig->nraddr =3D __addr; \
}
=20
#define VALGRIND_CALL_NOREDIR_EAX \
@@ -211,6 +219,13 @@
/* --------------------------- amd64 --------------------------- */
=20
#if defined(ARCH_amd64)
+
+typedef
+ struct {=20
+ unsigned long long int nraddr; /* where's the code? */
+ }
+ OrigFn;
+
#define __SPECIAL_INSTRUCTION_PREAMBLE \
"rolq $3, %%rdi ; rolq $13, %%rdi\n\t" \
"rolq $61, %%rdi ; rolq $51, %%rdi\n\t"
@@ -235,8 +250,9 @@
_zzq_rlval =3D _zzq_result; \
}
=20
-#define VALGRIND_GET_NRADDR(_zzq_rlval) \
- { volatile unsigned long long int __addr; \
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \
+ { volatile OrigFn* _zzq_orig =3D &(_zzq_rlval); \
+ volatile unsigned long long int __addr; \
__asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \
/* %RAX =3D guest_NRADDR */ \
"xchgq %%rcx,%%rcx" \
@@ -244,7 +260,7 @@
: \
: "cc", "memory" \
); \
- _zzq_rlval =3D (void*)__addr; \
+ _zzq_orig->nraddr =3D __addr; \
}
=20
#define VALGRIND_CALL_NOREDIR_RAX \
@@ -259,7 +275,7 @@
=20
typedef
struct {=20
- unsigned long int nraddr; /* where's the code? */
+ unsigned int nraddr; /* where's the code? */
}
OrigFn;
=20
@@ -703,12 +719,12 @@
/* These CALL_FN_ macros assume that on amd64-linux, sizeof(unsigned
long) =3D=3D 8. */
=20
-#define CALL_FN_W_v(lval, fnptr) \
+#define CALL_FN_W_v(lval, orig) \
do { \
- volatile void* _fnptr =3D (fnptr); \
+ volatile OrigFn _orig =3D (orig); \
volatile unsigned long _argvec[1]; \
volatile unsigned long _res; \
- _argvec[0] =3D (unsigned long)_fnptr; \
+ _argvec[0] =3D (unsigned long)_orig.nraddr; \
__asm__ volatile( \
"movq (%%rax), %%rax\n\t" /* target->%rax */ \
VALGRIND_CALL_NOREDIR_RAX \
@@ -719,12 +735,12 @@
lval =3D (__typeof__(lval)) _res; \
} while (0)
=20
-#define CALL_FN_W_W(lval, fnptr, arg1) \
+#define CALL_FN_W_W(lval, orig, arg1) \
do { \
- volatile void* _fnptr =3D (fnptr); \
+ volatile OrigFn _orig =3D (orig); \
volatile unsigned long _argvec[2]; \
volatile unsigned long _res; \
- _argvec[0] =3D (unsigned long)_fnptr; \
+ _argvec[0] =3D (unsigned long)_orig.nraddr; \
_argvec[1] =3D (unsigned long)(arg1); \
__asm__ volatile( \
"movq 8(%%rax), %%rdi\n\t" \
@@ -737,12 +753,12 @@
lval =3D (__typeof__(lval)) _res; \
} while (0)
=20
-#define CALL_FN_W_WW(lval, fnptr, arg1,arg2) \
+#define CALL_FN_W_WW(lval, orig, arg1,arg2) \
do { \
- volatile void* _fnptr =3D (fnptr); \
+ volatile OrigFn _orig =3D (orig); \
volatile unsigned long _argvec[3]; \
volatile unsigned long _res; \
- _argvec[0] =3D (unsigned long)_fnptr; \
+ _argvec[0] =3D (unsigned long)_orig.nraddr; \
_argvec[1] =3D (unsigned long)(arg1); \
_argvec[2] =3D (unsigned long)(arg2); \
__asm__ volatile( \
Modified: trunk/memcheck/tests/Makefile.am
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=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/tests/Makefile.am 2006-01-20 14:31:57 UTC (rev 5569)
+++ trunk/memcheck/tests/Makefile.am 2006-01-20 15:17:20 UTC (rev 5570)
@@ -116,6 +116,7 @@
wrap6.vgtest wrap6.stdout.exp wrap6.stderr.exp \
wrap7.vgtest wrap7.stdout.exp wrap7.stderr.exp \
wrap8.vgtest wrap8.stdout.exp wrap8.stderr.exp \
+ wrap8.stdout.exp2 wrap8.stderr.exp2 \
writev.stderr.exp writev.stderr.exp2 writev.stderr.exp3 writev.vgtest \
xml1.stderr.exp xml1.stderr.exp2 xml1.stderr.exp3 \
xml1.stderr.exp64 xml1.stderr.exp64_2 xml1.stdout.exp \
Added: trunk/memcheck/tests/wrap8.stderr.exp2
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Added: trunk/memcheck/tests/wrap8.stdout.exp2
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=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/tests/wrap8.stdout.exp2 (rev 0=
)
+++ trunk/memcheck/tests/wrap8.stdout.exp2 2006-01-20 15:17:20 UTC (rev 5=
570)
@@ -0,0 +1,77 @@
+computing fact1(15)
+in wrapper1-pre: fact(15)
+in wrapper2-pre: fact(14)
+in wrapper1-pre: fact(13)
+in wrapper2-pre: fact(12)
+in wrapper1-pre: fact(11)
+in wrapper2-pre: fact(10)
+in wrapper1-pre: fact(9)
+in wrapper2-pre: fact(8)
+in wrapper1-pre: fact(7)
+in wrapper2-pre: fact(6)
+in wrapper1-pre: fact(5)
+in wrapper2-pre: fact(4)
+in wrapper1-pre: fact(3)
+in wrapper2-pre: fact(2)
+in wrapper1-pre: fact(1)
+in wrapper2-pre: fact(0)
+in wrapper2-post: fact(0) =3D 1
+in wrapper1-post: fact(1) =3D 1
+in wrapper2-post: fact(2) =3D 2
+in wrapper1-post: fact(3) =3D 6
+in wrapper2-pre: fact(2)
+in wrapper1-pre: fact(1)
+in wrapper2-pre: fact(0)
+in wrapper2-post: fact(0) =3D 1
+in wrapper1-post: fact(1) =3D 1
+in wrapper2-post: fact(2) =3D 2
+in wrapper2-post: fact(4) =3D 32
+in wrapper1-post: fact(5) =3D 160
+in wrapper2-pre: fact(2)
+in wrapper1-pre: fact(1)
+in wrapper2-pre: fact(0)
+in wrapper2-post: fact(0) =3D 1
+in wrapper1-post: fact(1) =3D 1
+in wrapper2-post: fact(2) =3D 2
+in wrapper2-post: fact(6) =3D 972
+in wrapper1-post: fact(7) =3D 6804
+in wrapper2-pre: fact(2)
+in wrapper1-pre: fact(1)
+in wrapper2-pre: fact(0)
+in wrapper2-post: fact(0) =3D 1
+in wrapper1-post: fact(1) =3D 1
+in wrapper2-post: fact(2) =3D 2
+in wrapper2-post: fact(8) =3D 54448
+in wrapper1-post: fact(9) =3D 490032
+in wrapper2-pre: fact(2)
+in wrapper1-pre: fact(1)
+in wrapper2-pre: fact(0)
+in wrapper2-post: fact(0) =3D 1
+in wrapper1-post: fact(1) =3D 1
+in wrapper2-post: fact(2) =3D 2
+in wrapper2-post: fact(10) =3D 4900340
+in wrapper1-post: fact(11) =3D 53903740
+in wrapper2-pre: fact(2)
+in wrapper1-pre: fact(1)
+in wrapper2-pre: fact(0)
+in wrapper2-post: fact(0) =3D 1
+in wrapper1-post: fact(1) =3D 1
+in wrapper2-post: fact(2) =3D 2
+in wrapper2-post: fact(12) =3D 646844904
+in wrapper1-post: fact(13) =3D -180950840
+in wrapper2-pre: fact(2)
+in wrapper1-pre: fact(1)
+in wrapper2-pre: fact(0)
+in wrapper2-post: fact(0) =3D 1
+in wrapper1-post: fact(1) =3D 1
+in wrapper2-post: fact(2) =3D 2
+in wrapper2-post: fact(14) =3D 1761655564
+in wrapper1-post: fact(15) =3D 655029684
+in wrapper2-pre: fact(2)
+in wrapper1-pre: fact(1)
+in wrapper2-pre: fact(0)
+in wrapper2-post: fact(0) =3D 1
+in wrapper1-post: fact(1) =3D 1
+in wrapper2-post: fact(2) =3D 2
+fact1(15) =3D 655029686
+allocated 111 Lards
|
|
From: <sv...@va...> - 2006-01-20 14:32:21
|
Author: sewardj
Date: 2006-01-20 14:31:57 +0000 (Fri, 20 Jan 2006)
New Revision: 5569
Log:
Changes to make function wrapping work better on ppc64-linux:
- when recording the non-redirected address in guest_NRADDR, also
snapshot the current R2 value, as that will be needed to run the
original safely
- As a consequence, the original-function information extracted by
VALGRIND_GET_ORIG_FN is different on ppc64-linux (2 words) from
all other platforms (1 word). So change the type of it from
void* to a new type OrigFn which can be defined differently for
each platform.
- Change the CALL_FN_* macros for ppc64-linux to save/restore
R2 values appropriately.
- ppc64-linux: detect overflow/underflow of the redirect stack
and bring Valgrind to a halt if this happens
- Update VG_CLREQ_SZB for ppc32/64 (was out of date).
Modified:
trunk/coregrind/m_scheduler/scheduler.c
trunk/coregrind/m_translate.c
trunk/include/pub_tool_machine.h
trunk/include/valgrind.h
trunk/memcheck/mc_main.c
trunk/memcheck/tests/wrap1.c
trunk/memcheck/tests/wrap2.c
trunk/memcheck/tests/wrap3.c
trunk/memcheck/tests/wrap4.c
trunk/memcheck/tests/wrap5.c
trunk/memcheck/tests/wrap6.c
Modified: trunk/coregrind/m_scheduler/scheduler.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_scheduler/scheduler.c 2006-01-20 14:21:28 UTC (rev =
5568)
+++ trunk/coregrind/m_scheduler/scheduler.c 2006-01-20 14:31:57 UTC (rev =
5569)
@@ -923,7 +923,7 @@
show =3D (ew < 0 || ew >=3D EmWarn_NUMBER)
? True
: counts[ew]++ < 3;
- if (show && VG_(clo_show_emwarns)) {
+ if (show && VG_(clo_show_emwarns) && !VG_(clo_xml)) {
VG_(message)( Vg_UserMsg,
"Emulation warning: unsupported action:");
VG_(message)( Vg_UserMsg, " %s", what);
@@ -932,6 +932,24 @@
break;
}
=20
+ case VEX_TRC_JMP_EMFAIL: {
+ VexEmWarn ew;
+ HChar* what;
+ ew =3D (VexEmWarn)VG_(threads)[tid].arch.vex.guest_EMWARN;
+ what =3D (ew < 0 || ew >=3D EmWarn_NUMBER)
+ ? "unknown (?!)"
+ : LibVEX_EmWarn_string(ew);
+ VG_(message)( Vg_UserMsg,
+ "Emulation fatal error -- Valgrind cannot continu=
e:");
+ VG_(message)( Vg_UserMsg, " %s", what);
+ VG_(get_and_pp_StackTrace)( tid, VG_(clo_backtrace_size) );
+ VG_(message)(Vg_UserMsg, "");
+ VG_(message)(Vg_UserMsg, "Valgrind has to exit now. Sorry.");
+ VG_(message)(Vg_UserMsg, "");
+ VG_(exit)(1);
+ break;
+ }
+
case VEX_TRC_JMP_NODECODE:
#define M(a) VG_(message)(Vg_UserMsg, a);
M("Your program just tried to execute an instruction that Valgrind" )=
;
Modified: trunk/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
--- trunk/coregrind/m_translate.c 2006-01-20 14:21:28 UTC (rev 5568)
+++ trunk/coregrind/m_translate.c 2006-01-20 14:31:57 UTC (rev 5569)
@@ -569,16 +569,22 @@
/* --------------- ppc64-linux specific helpers --------------- */
=20
#if defined(VGP_ppc64_linux)
-static IRExpr* mkU64 ( ULong n )
-{
+static IRExpr* mkU64 ( ULong n ) {
return IRExpr_Const(IRConst_U64(n));
}
+static IRExpr* mkU32 ( UInt n ) {
+ return IRExpr_Const(IRConst_U32(n));
+}
+static IRExpr* mkU8 ( UChar n ) {
+ return IRExpr_Const(IRConst_U8(n));
+}
=20
static void gen_PUSH ( IRBB* bb, IRExpr* e )
{
Int stack_size =3D VEX_GUEST_PPC64_REDIR_STACK_SIZE;
Int offB_REDIR_SP =3D offsetof(VexGuestPPC64State,guest_REDIR_SP);
Int offB_REDIR_STACK =3D offsetof(VexGuestPPC64State,guest_REDIR_STAC=
K);
+ Int offB_EMWARN =3D offsetof(VexGuestPPC64State,guest_EMWARN);
=20
IRArray* descr =3D mkIRArray( offB_REDIR_STACK, Ity_I64, stack_size )=
;
IRTemp t1 =3D newIRTemp( bb->tyenv, Ity_I64 );
@@ -593,7 +599,31 @@
)
);
=20
- /* bomb out if t1 >=3D # elements in stack (16) */
+ /* Bomb out if t1 >=3Ds stack_size, that is, (stack_size-1)-t1 <s 0.
+ The destination (0) is a bit bogus but it doesn't matter since
+ this is an unrecoverable error and will lead to Valgrind
+ shutting down. _EMWARN is set regardless - that's harmless
+ since is only has a meaning if the exit is taken. */
+ addStmtToIRBB(
+ bb,
+ IRStmt_Put(offB_EMWARN, mkU32(EmWarn_PPC64_redir_overflow))
+ );
+ addStmtToIRBB(
+ bb,
+ IRStmt_Exit(
+ IRExpr_Binop(
+ Iop_CmpNE64,
+ IRExpr_Binop(
+ Iop_Sar64,
+ IRExpr_Binop(Iop_Sub64,mkU64(stack_size-1),IRExpr_Tmp(t1)=
),
+ mkU8(63)
+ ),
+ mkU64(0)
+ ),
+ Ijk_EmFail,
+ IRConst_U64(0)
+ )
+ );
=20
/* guest_REDIR_SP =3D t1 */
addStmtToIRBB(bb, IRStmt_Put(offB_REDIR_SP, IRExpr_Tmp(t1)));
@@ -610,6 +640,7 @@
Int stack_size =3D VEX_GUEST_PPC64_REDIR_STACK_SIZE;
Int offB_REDIR_SP =3D offsetof(VexGuestPPC64State,guest_REDIR_SP);
Int offB_REDIR_STACK =3D offsetof(VexGuestPPC64State,guest_REDIR_STAC=
K);
+ Int offB_EMWARN =3D offsetof(VexGuestPPC64State,guest_EMWARN);
=20
IRArray* descr =3D mkIRArray( offB_REDIR_STACK, Ity_I64, stack_size )=
;
IRTemp t1 =3D newIRTemp( bb->tyenv, Ity_I64 );
@@ -622,7 +653,27 @@
IRStmt_Tmp( t1, IRExpr_Get( offB_REDIR_SP, Ity_I64 ) )
);
=20
- /* bomb out if t1 < 0 */
+ /* Bomb out if t1 < 0. Same comments as gen_PUSH apply. */
+ addStmtToIRBB(
+ bb,
+ IRStmt_Put(offB_EMWARN, mkU32(EmWarn_PPC64_redir_underflow))
+ );
+ addStmtToIRBB(
+ bb,
+ IRStmt_Exit(
+ IRExpr_Binop(
+ Iop_CmpNE64,
+ IRExpr_Binop(
+ Iop_Sar64,
+ IRExpr_Tmp(t1),
+ mkU8(63)
+ ),
+ mkU64(0)
+ ),
+ Ijk_EmFail,
+ IRConst_U64(0)
+ )
+ );
=20
/* res =3D guest_REDIR_STACK[t1+0] */
addStmtToIRBB(
@@ -743,6 +794,14 @@
)
);
# if defined(VGP_ppc64_linux)
+ addStmtToIRBB(=20
+ bb,
+ IRStmt_Put(=20
+ offsetof(VexGuestArchState,guest_NRADDR_GPR2),
+ IRExpr_Get(offsetof(VexGuestArchState,guest_GPR2),=20
+ Ity_I64)
+ )
+ );
gen_push_and_set_LR_R2 ( bb, VG_(get_tocptr)( closure->readdr ) );
# endif
return False;
Modified: trunk/include/pub_tool_machine.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/pub_tool_machine.h 2006-01-20 14:21:28 UTC (rev 5568)
+++ trunk/include/pub_tool_machine.h 2006-01-20 14:31:57 UTC (rev 5569)
@@ -45,12 +45,12 @@
#elif defined(VGA_ppc32)
# define VG_MIN_INSTR_SZB 4
# define VG_MAX_INSTR_SZB 4=20
-# define VG_CLREQ_SZB 24
+# define VG_CLREQ_SZB 20
# define VG_STACK_REDZONE_SZB 0
#elif defined(VGA_ppc64)
# define VG_MIN_INSTR_SZB 4
# define VG_MAX_INSTR_SZB 4=20
-# define VG_CLREQ_SZB 24
+# define VG_CLREQ_SZB 20
# define VG_STACK_REDZONE_SZB 288 // number of addressable bytes be=
low R1
// from 64-bit PowerPC ELF ABI Su=
pplement 1.7
#else
Modified: trunk/include/valgrind.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/valgrind.h 2006-01-20 14:21:28 UTC (rev 5568)
+++ trunk/include/valgrind.h 2006-01-20 14:31:57 UTC (rev 5569)
@@ -149,13 +149,18 @@
_zzq_arg1..4 request params
=20
The other two macros are used to support function wrapping, and are
- a lot simpler. VALGRIND_GET_NRADDR returns the value of the
- guest's NRADDR pseudo-register. VALGRIND_CALL_NOREDIR_* behaves
- the same as the following on the guest, but guarantees that the
- branch instruction will not be redirected: x86: call *%eax, amd64:
- call *%rax, ppc32/ppc64: bctrl. VALGRIND_CALL_NOREDIR is just
- text, not a complete inline asm, since it needs to be combined with
- more magic inline asm stuff to be useful.
+ a lot simpler. VALGRIND_GET_NR_CONTEXT returns the value of the
+ guest's NRADDR pseudo-register and whatever other information is
+ needed to safely run the call original from the wrapper: on
+ ppc64-linux, the R2 value at the divert point is also needed. This
+ information is abstracted into a user-visible type, OrigFn.
+
+ VALGRIND_CALL_NOREDIR_* behaves the same as the following on the
+ guest, but guarantees that the branch instruction will not be
+ redirected: x86: call *%eax, amd64: call *%rax, ppc32/ppc64:
+ branch-and-link-to-r11. VALGRIND_CALL_NOREDIR is just text, not a
+ complete inline asm, since it needs to be combined with more magic
+ inline asm stuff to be useful.
*/
=20
/* ---------------------------- x86 ---------------------------- */
@@ -251,6 +256,13 @@
/* --------------------------- ppc32 --------------------------- */
=20
#if defined(ARCH_ppc32)
+
+typedef
+ struct {=20
+ unsigned long int nraddr; /* where's the code? */
+ }
+ OrigFn;
+
#define __SPECIAL_INSTRUCTION_PREAMBLE \
"rlwinm 0,0,3,0,0 ; rlwinm 0,0,13,0,0\n\t" \
"rlwinm 0,0,29,0,0 ; rlwinm 0,0,19,0,0\n\t"
@@ -277,8 +289,9 @@
_zzq_rlval =3D _zzq_result; \
}
=20
-#define VALGRIND_GET_NRADDR(_zzq_rlval) \
- { register unsigned int __addr __asm__("r3"); \
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \
+ { volatile OrigFn* _zzq_orig =3D &(_zzq_rlval); \
+ register unsigned int __addr __asm__("r3"); \
__asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \
/* %R3 =3D guest_NRADDR */ \
"or 2,2,2" \
@@ -286,7 +299,7 @@
: \
: "cc", "memory" \
); \
- _zzq_rlval =3D (void*)__addr; \
+ _zzq_orig->nraddr =3D __addr; \
}
=20
#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \
@@ -298,6 +311,14 @@
/* --------------------------- ppc64 --------------------------- */
=20
#if defined(ARCH_ppc64)
+
+typedef
+ struct {=20
+ unsigned long long int nraddr; /* where's the code? */
+ unsigned long long int r2; /* what tocptr do we need? */
+ }
+ OrigFn;
+
#define __SPECIAL_INSTRUCTION_PREAMBLE \
"rotldi 0,0,3 ; rotldi 0,0,13\n\t" \
"rotldi 0,0,61 ; rotldi 0,0,51\n\t"
@@ -324,8 +345,9 @@
_zzq_rlval =3D _zzq_result; \
}
=20
-#define VALGRIND_GET_NRADDR(_zzq_rlval) \
- { register unsigned long long int __addr __asm__("r3"); \
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \
+ { volatile OrigFn* _zzq_orig =3D &(_zzq_rlval); \
+ register unsigned long long int __addr __asm__("r3"); \
__asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \
/* %R3 =3D guest_NRADDR */ \
"or 2,2,2" \
@@ -333,7 +355,15 @@
: \
: "cc", "memory" \
); \
- _zzq_rlval =3D (void*)__addr; \
+ _zzq_orig->nraddr =3D __addr; \
+ __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \
+ /* %R3 =3D guest_NRADDR_GPR2 */ \
+ "or 4,4,4" \
+ : "=3Dr" (__addr) \
+ : \
+ : "cc", "memory" \
+ ); \
+ _zzq_orig->r2 =3D __addr; \
}
=20
#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \
@@ -380,10 +410,11 @@
#define I_WRAP_SONAME_FNNAME_ZZ(soname,fnname) \
_vgwZZ_##soname##_##fnname
=20
-/* Use this macro from within a wrapper function to get the address of
- the original function. Once you have that you can then use it in
- one of the CALL_FN_ macros. */
-#define VALGRIND_GET_ORIG_FN(_lval) VALGRIND_GET_NRADDR(_lval)
+/* Use this macro from within a wrapper function to collect the
+ context (address and possibly other info) of the original function.
+ Once you have that you can then use it in one of the CALL_FN_
+ macros. The type of the argument _lval is OrigFn. */
+#define VALGRIND_GET_ORIG_FN(_lval) VALGRIND_GET_NR_CONTEXT(_lval)
=20
/* Derivatives of the main macros below, for calling functions
returning void. */
@@ -744,10 +775,10 @@
=20
#define CALL_FN_W_v(lval, fnptr) \
do { \
- volatile void* _fnptr =3D (fnptr); \
+ volatile OrigFn _orig =3D (orig); \
volatile unsigned long _argvec[1]; \
volatile unsigned long _res; \
- _argvec[0] =3D (unsigned long)_fnptr; \
+ _argvec[0] =3D (unsigned long)_orig.nraddr; \
__asm__ volatile( \
"mr 11,%1\n\t" \
"lwz 11,0(11)\n\t" /* target->r11 */ \
@@ -818,70 +849,79 @@
/* These CALL_FN_ macros assume that on ppc64-linux, sizeof(unsigned
long) =3D=3D 8. */
=20
-#define CALL_FN_W_v(lval, fnptr) \
+#define CALL_FN_W_v(lval, orig) \
do { \
- volatile void* _fnptr =3D (fnptr); \
- volatile unsigned long _argvec[1+1]; \
+ volatile OrigFn _orig =3D (orig); \
+ volatile unsigned long _argvec[3+0]; \
volatile unsigned long _res; \
- _argvec[1+0] =3D (unsigned long)_fnptr; \
+ /* _argvec[0] holds current r2 across the call */ \
+ _argvec[1] =3D (unsigned long)_orig.r2; \
+ _argvec[2] =3D (unsigned long)_orig.nraddr; \
__asm__ volatile( \
"mr 11,%1\n\t" \
- "std 2,-8(11)\n\t" /* save tocptr */ \
- "ld 11,0(11)\n\t" /* target->r11 */ \
+ "std 2,-16(11)\n\t" /* save tocptr */ \
+ "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \
+ "ld 11, 0(11)\n\t" /* target->r11 */ \
VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \
"mr 11,%1\n\t" \
"mr %0,3\n\t" \
- "ld 2,-8(11)" /* restore tocptr */ \
+ "ld 2,-16(11)" /* restore tocptr */ \
: /*out*/ "=3Dr" (_res) \
- : /*in*/ "r" (&_argvec[1+0]) \
+ : /*in*/ "r" (&_argvec[2]) \
: /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \
); \
lval =3D (__typeof__(lval)) _res; \
} while (0)
=20
-#define CALL_FN_W_W(lval, fnptr, arg1) \
+#define CALL_FN_W_W(lval, orig, arg1) \
do { \
- volatile void* _fnptr =3D (fnptr); \
- volatile unsigned long _argvec[1+2]; \
+ volatile OrigFn _orig =3D (orig); \
+ volatile unsigned long _argvec[3+1]; \
volatile unsigned long _res; \
- _argvec[1+0] =3D (unsigned long)_fnptr; \
- _argvec[1+1] =3D (unsigned long)arg1; \
+ /* _argvec[0] holds current r2 across the call */ \
+ _argvec[1] =3D (unsigned long)_orig.r2; \
+ _argvec[2] =3D (unsigned long)_orig.nraddr; \
+ _argvec[2+1] =3D (unsigned long)arg1; \
__asm__ volatile( \
"mr 11,%1\n\t" \
- "std 2,-8(11)\n\t" /* save tocptr */ \
- "ld 3,8(11)\n\t" /* arg1->r3 */ \
- "ld 11,0(11)\n\t" /* target->r11 */ \
+ "std 2,-16(11)\n\t" /* save tocptr */ \
+ "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \
+ "ld 3, 8(11)\n\t" /* arg1->r3 */ \
+ "ld 11, 0(11)\n\t" /* target->r11 */ \
VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \
"mr 11,%1\n\t" \
"mr %0,3\n\t" \
- "ld 2,-8(11)" /* restore tocptr */ \
+ "ld 2,-16(11)" /* restore tocptr */ \
: /*out*/ "=3Dr" (_res) \
- : /*in*/ "r" (&_argvec[1+0]) \
+ : /*in*/ "r" (&_argvec[2]) \
: /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \
); \
lval =3D (__typeof__(lval)) _res; \
} while (0)
=20
-#define CALL_FN_W_WW(lval, fnptr, arg1,arg2) \
+#define CALL_FN_W_WW(lval, orig, arg1,arg2) \
do { \
- volatile void* _fnptr =3D (fnptr); \
- volatile unsigned long _argvec[1+3]; \
+ volatile OrigFn _orig =3D (orig); \
+ volatile unsigned long _argvec[3+2]; \
volatile unsigned long _res; \
- _argvec[1+0] =3D (unsigned long)_fnptr; \
- _argvec[1+1] =3D (unsigned long)arg1; \
- _argvec[1+2] =3D (unsigned long)arg1; \
+ /* _argvec[0] holds current r2 across the call */ \
+ _argvec[1] =3D (unsigned long)_orig.r2; \
+ _argvec[2] =3D (unsigned long)_orig.nraddr; \
+ _argvec[2+1] =3D (unsigned long)arg1; \
+ _argvec[2+2] =3D (unsigned long)arg2; \
__asm__ volatile( \
"mr 11,%1\n\t" \
- "std 2,-8(11)\n\t" /* save tocptr */ \
- "ld 3, 8(11)\n\t" /* arg1->r3 */ \
- "ld 4,16(11)\n\t" \
- "ld 11,0(11)\n\t" /* target->r11 */ \
+ "std 2,-16(11)\n\t" /* save tocptr */ \
+ "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \
+ "ld 3, 8(11)\n\t" /* arg1->r3 */ \
+ "ld 4, 16(11)\n\t" /* arg1->r4 */ \
+ "ld 11, 0(11)\n\t" /* target->r11 */ \
VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \
"mr 11,%1\n\t" \
"mr %0,3\n\t" \
- "ld 2,-8(11)" /* restore tocptr */ \
+ "ld 2,-16(11)" /* restore tocptr */ \
: /*out*/ "=3Dr" (_res) \
- : /*in*/ "r" (&_argvec[1+0]) \
+ : /*in*/ "r" (&_argvec[2]) \
: /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \
); \
lval =3D (__typeof__(lval)) _res; \
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 2006-01-20 14:21:28 UTC (rev 5568)
+++ trunk/memcheck/mc_main.c 2006-01-20 14:31:57 UTC (rev 5569)
@@ -1370,7 +1370,7 @@
static void mc_post_reg_write ( CorePart part, ThreadId tid,=20
OffT offset, SizeT size)
{
-# define MAX_REG_WRITE_SIZE 1264
+# define MAX_REG_WRITE_SIZE 1392
UChar area[MAX_REG_WRITE_SIZE];
tl_assert(size <=3D MAX_REG_WRITE_SIZE);
VG_(memset)(area, VGM_BYTE_VALID, size);
Modified: trunk/memcheck/tests/wrap1.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/tests/wrap1.c 2006-01-20 14:21:28 UTC (rev 5568)
+++ trunk/memcheck/tests/wrap1.c 2006-01-20 14:31:57 UTC (rev 5569)
@@ -17,7 +17,7 @@
as if its soname was "NONE". */
void I_WRAP_SONAME_FNNAME_ZU(NONE,actual) ( void )
{
- void* orig;
+ OrigFn orig;
VALGRIND_GET_ORIG_FN(orig);
printf("wrapper-pre\n");
CALL_FN_v_v(orig);
Modified: trunk/memcheck/tests/wrap2.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/tests/wrap2.c 2006-01-20 14:21:28 UTC (rev 5568)
+++ trunk/memcheck/tests/wrap2.c 2006-01-20 14:31:57 UTC (rev 5569)
@@ -15,8 +15,8 @@
=20
int I_WRAP_SONAME_FNNAME_ZU(NONE,fact) ( int n )
{
- int r;
- void* orig;
+ int r;
+ OrigFn orig;
VALGRIND_GET_ORIG_FN(orig);
printf("in wrapper1-pre: fact(%d)\n", n);
CALL_FN_W_W(r, orig, n);
Modified: trunk/memcheck/tests/wrap3.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/tests/wrap3.c 2006-01-20 14:21:28 UTC (rev 5568)
+++ trunk/memcheck/tests/wrap3.c 2006-01-20 14:31:57 UTC (rev 5569)
@@ -24,8 +24,8 @@
=20
int I_WRAP_SONAME_FNNAME_ZU(NONE,fact1) ( int n )
{
- int r;
- void* fn;
+ int r;
+ OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
printf("in wrapper1-pre: fact(%d)\n", n);
CALL_FN_W_W(r,fn,n);
@@ -35,8 +35,8 @@
=20
int I_WRAP_SONAME_FNNAME_ZU(NONE,fact2) ( int n )
{
- int r;
- void* fn;
+ int r;
+ OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
printf("in wrapper2-pre: fact(%d)\n", n);
CALL_FN_W_W(r,fn,n);
Modified: trunk/memcheck/tests/wrap4.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/tests/wrap4.c 2006-01-20 14:21:28 UTC (rev 5568)
+++ trunk/memcheck/tests/wrap4.c 2006-01-20 14:31:57 UTC (rev 5569)
@@ -28,8 +28,8 @@
=20
int I_WRAP_SONAME_FNNAME_ZU(NONE,fact1) ( int n )
{
- int r;
- void* fn;
+ int r;
+ OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
printf("in wrapper1-pre: fact(%d)\n", n);
CALL_FN_W_W(r, fn, n);
@@ -40,8 +40,8 @@
=20
int I_WRAP_SONAME_FNNAME_ZU(NONE,fact2) ( int n )
{
- int r;
- void* fn;
+ int r;
+ OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
printf("in wrapper2-pre: fact(%d)\n", n);
CALL_FN_W_W(r, fn, n);
Modified: trunk/memcheck/tests/wrap5.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/tests/wrap5.c 2006-01-20 14:21:28 UTC (rev 5568)
+++ trunk/memcheck/tests/wrap5.c 2006-01-20 14:31:57 UTC (rev 5569)
@@ -50,8 +50,8 @@
=20
int I_WRAP_SONAME_FNNAME_ZU(NONE,fact1) ( int n )
{
- int r;
- void* fn;
+ int r;
+ OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
printf("in wrapper1-pre: fact(%d)\n", n);
addMoreLard();
@@ -64,8 +64,8 @@
=20
int I_WRAP_SONAME_FNNAME_ZU(NONE,fact2) ( int n )
{
- int r;
- void* fn;
+ int r;
+ OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
printf("in wrapper2-pre: fact(%d)\n", n);
addMoreLard();
Modified: trunk/memcheck/tests/wrap6.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/tests/wrap6.c 2006-01-20 14:21:28 UTC (rev 5568)
+++ trunk/memcheck/tests/wrap6.c 2006-01-20 14:31:57 UTC (rev 5569)
@@ -70,8 +70,8 @@
=20
UInt I_WRAP_SONAME_FNNAME_ZU(NONE,fn_0) ( UInt a1 )
{
- UInt r;
- void* fn;
+ UInt r;
+ OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
printf("fn_0 wrapper pre ()\n");
CALL_FN_W_v(r, fn);
@@ -85,7 +85,7 @@
=20
UInt fn_1 ( UInt a1 )
{
- UInt r;
+ UInt r;
UInt* words =3D calloc(200, sizeof(UInt));
words[1-1] =3D a1;
TRASH_IREGS(r, words);
@@ -95,8 +95,8 @@
=20
UInt I_WRAP_SONAME_FNNAME_ZU(NONE,fn_1) ( UInt a1 )
{
- UInt r;
- void* fn;
+ UInt r;
+ OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
printf("fn_1 wrapper pre ( %d )\n", (int)a1);
CALL_FN_W_W(r, fn, a1);
@@ -121,8 +121,8 @@
=20
UInt I_WRAP_SONAME_FNNAME_ZU(NONE,fn_2) ( UInt a1, UInt a2 )
{
- UInt r;
- void* fn;
+ UInt r;
+ OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
printf("fn_2 wrapper pre ( %d, %d )\n", (int)a1, (int)a2);
CALL_FN_W_WW(r, fn, a1, a2);
|
|
From: <sv...@va...> - 2006-01-20 14:21:36
|
Author: sewardj
Date: 2006-01-20 14:21:28 +0000 (Fri, 20 Jan 2006)
New Revision: 5568
Log:
More function wrapping tests.
Added:
trunk/memcheck/tests/wrap7.c
trunk/memcheck/tests/wrap7.stderr.exp
trunk/memcheck/tests/wrap7.stdout.exp
trunk/memcheck/tests/wrap7.vgtest
trunk/memcheck/tests/wrap7so.c
trunk/memcheck/tests/wrap8.c
trunk/memcheck/tests/wrap8.stderr.exp
trunk/memcheck/tests/wrap8.stdout.exp
trunk/memcheck/tests/wrap8.vgtest
Modified:
trunk/memcheck/tests/Makefile.am
Modified: trunk/memcheck/tests/Makefile.am
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=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/tests/Makefile.am 2006-01-19 17:44:38 UTC (rev 5567)
+++ trunk/memcheck/tests/Makefile.am 2006-01-20 14:21:28 UTC (rev 5568)
@@ -114,6 +114,8 @@
wrap4.vgtest wrap4.stdout.exp wrap4.stderr.exp \
wrap5.vgtest wrap5.stdout.exp wrap5.stderr.exp \
wrap6.vgtest wrap6.stdout.exp wrap6.stderr.exp \
+ wrap7.vgtest wrap7.stdout.exp wrap7.stderr.exp \
+ wrap8.vgtest wrap8.stdout.exp wrap8.stderr.exp \
writev.stderr.exp writev.stderr.exp2 writev.stderr.exp3 writev.vgtest \
xml1.stderr.exp xml1.stderr.exp2 xml1.stderr.exp3 \
xml1.stderr.exp64 xml1.stderr.exp64_2 xml1.stdout.exp \
@@ -147,7 +149,7 @@
trivialleak \
mismatches new_override metadata \
xml1 \
- wrap1 wrap2 wrap3 wrap4 wrap5 wrap6 \
+ wrap1 wrap2 wrap3 wrap4 wrap5 wrap6 wrap7 wrap7so.so wrap8 \
writev zeropage
=20
=20
@@ -162,6 +164,7 @@
oset_test_CFLAGS =3D $(AM_FLAG_M3264_PRI) \
-DVGA_$(VG_ARCH)=3D1 -DVGO_$(VG_OS)=3D1 \
-DVGP_$(VG_ARCH)_$(VG_OS)=3D1
+
# Don't allow GCC to inline memcpy(), because then we can't intercept it
overlap_CFLAGS =3D $(AM_CFLAGS) -fno-builtin-memcpy
stack_switch_LDADD =3D -lpthread
@@ -175,6 +178,19 @@
new_nothrow_SOURCES =3D new_nothrow.cpp
new_override_SOURCES =3D new_override.cpp
=20
+# Build shared object for wrap7
+wrap7_SOURCES =3D wrap7.c
+wrap7_DEPENDENCIES =3D wrap7so.so
+wrap7_LDFLAGS =3D $(AM_FLAG_M3264_PRI) \
+ -Wl,-rpath,$(top_builddir)/memcheck/tests
+wrap7_LDADD =3D wrap7so.so
+wrap7so_so_SOURCES =3D wrap7so.c
+wrap7so_so_LDADD =3D=20
+wrap7so_so_DEPENDENCIES =3D=20
+wrap7so_so_LDFLAGS =3D -fpic $(AM_FLAG_M3264_PRI) \
+ -Wl,-soname -Wl,wrap7so.so -shared
+wrap7so_so_CFLAGS =3D -fpic $(AM_FLAG_M3264_PRI)
+
# Valgrind unit self-tests
#hello_LDFLAGS =3D -Wl,-defsym,valt_load_address=3D0x50000000 \
# -Wl,-T,$(top_builddir)/valt_load_address.lds
Added: trunk/memcheck/tests/wrap7.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/tests/wrap7.c (rev 0)
+++ trunk/memcheck/tests/wrap7.c 2006-01-20 14:21:28 UTC (rev 5568)
@@ -0,0 +1,30 @@
+
+#include <stdio.h>
+#include "valgrind.h"
+
+/* The simplest possible wrapping test: just call a wrapped function
+ and check we run the wrapper instead. Except: the wrapped
+ function is in a different shared object. This causes some
+ additional complications on ppc64-linux, hence another test. */
+
+extern void actual ( void );
+
+/* The wrapper. The function being wrapped is in a .so with soname
+ "wrap7so.so". */
+void I_WRAP_SONAME_FNNAME_ZU(wrap7soZdso,actual) ( void )
+{
+ OrigFn orig;
+ VALGRIND_GET_ORIG_FN(orig);
+ printf("wrapper-pre\n");
+ CALL_FN_v_v(orig);
+ printf("wrapper-post\n");
+}
+
+/* --------------- */
+
+int main ( void )
+{
+ printf("starting\n");
+ actual();
+ return 0;
+}
Added: trunk/memcheck/tests/wrap7.stderr.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
Added: trunk/memcheck/tests/wrap7.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
--- trunk/memcheck/tests/wrap7.stdout.exp (rev 0)
+++ trunk/memcheck/tests/wrap7.stdout.exp 2006-01-20 14:21:28 UTC (rev 55=
68)
@@ -0,0 +1,4 @@
+starting
+wrapper-pre
+in actual-so
+wrapper-post
Added: trunk/memcheck/tests/wrap7.vgtest
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=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/tests/wrap7.vgtest (rev 0)
+++ trunk/memcheck/tests/wrap7.vgtest 2006-01-20 14:21:28 UTC (rev 5568)
@@ -0,0 +1,2 @@
+prog: wrap7
+vgopts: -q
Added: trunk/memcheck/tests/wrap7so.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/tests/wrap7so.c (rev 0)
+++ trunk/memcheck/tests/wrap7so.c 2006-01-20 14:21:28 UTC (rev 5568)
@@ -0,0 +1,10 @@
+
+#include <stdio.h>
+#include <unistd.h>
+/* The "original" function */
+
+void actual ( void )
+{
+ printf("in actual-so\n");
+}
+
Added: trunk/memcheck/tests/wrap8.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/tests/wrap8.c (rev 0)
+++ trunk/memcheck/tests/wrap8.c 2006-01-20 14:21:28 UTC (rev 5568)
@@ -0,0 +1,102 @@
+
+#include <stdio.h>
+#include <malloc.h>
+#include "valgrind.h"
+
+/* This is the same as wrap5.c, except that the recursion depth is 16.
+ This is intended to check that on ppc64-linux, which uses a
+ 16-entry per-thread stack, the resulting stack overflow is caught.
+ (Undetected overflows in redirection stacks are very bad news; they
+ cause guest code to fail in all sorts of strange ways.)
+
+ Hence this test has two expected outcomes:
+ - on ppc64-linux, a stack overflow is caught, and V aborts.
+ - on everything else, it runs successfully to completion.
+*/
+
+typedef=20
+ struct _Lard {
+ struct _Lard* next;=20
+ char stuff[999];=20
+ }
+ Lard;
+
+Lard* lard =3D NULL;
+static int ctr =3D 0;
+
+void addMoreLard ( void )
+{
+ Lard* p;
+ ctr++;
+ if ((ctr % 3) =3D=3D 1) {
+ p =3D malloc(sizeof(Lard));
+ p->next =3D lard;
+ lard =3D p;
+ }
+}
+
+
+static int fact1 ( int n );
+static int fact2 ( int n );
+
+/* This is needed to stop gcc4 turning 'fact' into a loop */
+__attribute__((noinline))
+int mul ( int x, int y ) { return x * y; }
+
+int fact1 ( int n )
+{
+ addMoreLard();
+ if (n =3D=3D 0) return 1; else return mul(n, fact2(n-1));
+}
+int fact2 ( int n )
+{
+ addMoreLard();
+ if (n =3D=3D 0) return 1; else return mul(n, fact1(n-1));
+}
+
+
+int I_WRAP_SONAME_FNNAME_ZU(NONE,fact1) ( int n )
+{
+ int r;
+ OrigFn fn;
+ VALGRIND_GET_ORIG_FN(fn);
+ printf("in wrapper1-pre: fact(%d)\n", n); fflush(stdout);
+ addMoreLard();
+ CALL_FN_W_W(r, fn, n);
+ addMoreLard();
+ printf("in wrapper1-post: fact(%d) =3D %d\n", n, r); fflush(stdout);
+ if (n >=3D 3) r +=3D fact2(2);
+ return r;
+}
+
+int I_WRAP_SONAME_FNNAME_ZU(NONE,fact2) ( int n )
+{
+ int r;
+ OrigFn fn;
+ VALGRIND_GET_ORIG_FN(fn);
+ printf("in wrapper2-pre: fact(%d)\n", n); fflush(stdout);
+ addMoreLard();
+ CALL_FN_W_W(r, fn, n);
+ addMoreLard();
+ printf("in wrapper2-post: fact(%d) =3D %d\n", n, r); fflush(stdout);
+ return r;
+}
+
+/* --------------- */
+
+int main ( void )
+{
+ int r, n =3D 15; /* 14 succeeds on ppc64-linux, >=3D 15 fails */
+ Lard *p, *p_next;
+ printf("computing fact1(%d)\n", n); fflush(stdout);
+ r =3D fact1(n);
+ printf("fact1(%d) =3D %d\n", n, r); fflush(stdout);
+
+ printf("allocated %d Lards\n", ctr); fflush(stdout);
+ for (p =3D lard; p; p =3D p_next) {
+ p_next =3D p->next;
+ free(p);
+ }
+
+ return 0;
+}
Added: trunk/memcheck/tests/wrap8.stderr.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
--- trunk/memcheck/tests/wrap8.stderr.exp (rev 0)
+++ trunk/memcheck/tests/wrap8.stderr.exp 2006-01-20 14:21:28 UTC (rev 55=
68)
@@ -0,0 +1,17 @@
+Emulation fatal error -- Valgrind cannot continue:
+ PPC64 function redirection stack overflow
+ at 0x........: ???
+ by 0x........: fact2 (wrap8.c:78)
+ by 0x........: ...
+ by 0x........: fact1 (wrap8.c:65)
+ by 0x........: ...
+ by 0x........: fact2 (wrap8.c:79)
+ by 0x........: ...
+ by 0x........: fact1 (wrap8.c:65)
+ by 0x........: ...
+ by 0x........: fact2 (wrap8.c:79)
+ by 0x........: ...
+ by 0x........: fact1 (wrap8.c:65)
+
+Valgrind has to exit now. Sorry.
+
Added: trunk/memcheck/tests/wrap8.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
--- trunk/memcheck/tests/wrap8.stdout.exp (rev 0)
+++ trunk/memcheck/tests/wrap8.stdout.exp 2006-01-20 14:21:28 UTC (rev 55=
68)
@@ -0,0 +1,17 @@
+computing fact1(15)
+in wrapper1-pre: fact(15)
+in wrapper2-pre: fact(14)
+in wrapper1-pre: fact(13)
+in wrapper2-pre: fact(12)
+in wrapper1-pre: fact(11)
+in wrapper2-pre: fact(10)
+in wrapper1-pre: fact(9)
+in wrapper2-pre: fact(8)
+in wrapper1-pre: fact(7)
+in wrapper2-pre: fact(6)
+in wrapper1-pre: fact(5)
+in wrapper2-pre: fact(4)
+in wrapper1-pre: fact(3)
+in wrapper2-pre: fact(2)
+in wrapper1-pre: fact(1)
+in wrapper2-pre: fact(0)
Added: trunk/memcheck/tests/wrap8.vgtest
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=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/tests/wrap8.vgtest (rev 0)
+++ trunk/memcheck/tests/wrap8.vgtest 2006-01-20 14:21:28 UTC (rev 5568)
@@ -0,0 +1,2 @@
+prog: wrap8
+vgopts: -q
|
|
From: <sv...@va...> - 2006-01-20 14:19:36
|
Author: sewardj
Date: 2006-01-20 14:19:25 +0000 (Fri, 20 Jan 2006)
New Revision: 1543
Log:
More ppc64-only function wrapping hacks:=20
- increase size of redirect stack from 8 to 16 elems
- augment the _NRADDR pseudo-register with _NRADDR_GPR2,
which is the value of R2 at the most recent divert point.
This is needed in the ELF ppc64 ABI in order to safely run
the function being wrapped.
- add pseudo-instruction to read get _NRADDR_GPR2 into _GPR3.
- related change: always keep R2 up to date wrt possible memory
exceptions (no specific reason, just being conservative)
Modified:
trunk/priv/guest-ppc/ghelpers.c
trunk/priv/guest-ppc/toIR.c
trunk/priv/host-ppc/isel.c
trunk/pub/libvex_guest_ppc64.h
Modified: trunk/priv/guest-ppc/ghelpers.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-ppc/ghelpers.c 2006-01-20 14:13:55 UTC (rev 1542)
+++ trunk/priv/guest-ppc/ghelpers.c 2006-01-20 14:19:25 UTC (rev 1543)
@@ -615,6 +615,7 @@
vex_state->guest_TILEN =3D 0;
=20
vex_state->guest_NRADDR =3D 0;
+ vex_state->guest_NRADDR_GPR2 =3D 0;
=20
vex_state->guest_REDIR_SP =3D -1;
for (i =3D 0; i < VEX_GUEST_PPC64_REDIR_STACK_SIZE; i++)
@@ -671,10 +672,16 @@
Bool guest_ppc64_state_requires_precise_mem_exns ( Int minoff,=20
Int maxoff )
{
+ /* Given that R2 is a Big Deal in the ELF ppc64 ABI, it seems
+ prudent to be conservative with it, even though thus far there
+ is no evidence to suggest that it actually needs to be kept up
+ to date wrt possible exceptions. */
Int lr_min =3D offsetof(VexGuestPPC64State, guest_LR);
Int lr_max =3D lr_min + 8 - 1;
Int r1_min =3D offsetof(VexGuestPPC64State, guest_GPR1);
Int r1_max =3D r1_min + 8 - 1;
+ Int r2_min =3D offsetof(VexGuestPPC64State, guest_GPR2);
+ Int r2_max =3D r2_min + 8 - 1;
Int cia_min =3D offsetof(VexGuestPPC64State, guest_CIA);
Int cia_max =3D cia_min + 8 - 1;
=20
@@ -690,6 +697,12 @@
return True;
}
=20
+ if (maxoff < r2_min || minoff > r2_max) {
+ /* no overlap with R2 */
+ } else {
+ return True;
+ }
+
if (maxoff < cia_min || minoff > cia_max) {
/* no overlap with CIA */
} else {
@@ -754,7 +767,7 @@
=20
/* Describe any sections to be regarded by Memcheck as
'always-defined'. */
- .n_alwaysDefd =3D 10,
+ .n_alwaysDefd =3D 11,
=20
.alwaysDefd=20
=3D { /* 0 */ ALWAYSDEFD64(guest_CIA),
@@ -765,8 +778,9 @@
/* 5 */ ALWAYSDEFD64(guest_FPROUND),
/* 6 */ ALWAYSDEFD64(guest_RESVN),
/* 7 */ ALWAYSDEFD64(guest_NRADDR),
- /* 8 */ ALWAYSDEFD64(guest_REDIR_SP),
- /* 9 */ ALWAYSDEFD64(guest_REDIR_STACK)
+ /* 8 */ ALWAYSDEFD64(guest_NRADDR_GPR2),
+ /* 9 */ ALWAYSDEFD64(guest_REDIR_SP),
+ /* 10 */ ALWAYSDEFD64(guest_REDIR_STACK)
}
};
=20
Modified: trunk/priv/guest-ppc/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-ppc/toIR.c 2006-01-20 14:13:55 UTC (rev 1542)
+++ trunk/priv/guest-ppc/toIR.c 2006-01-20 14:19:25 UTC (rev 1543)
@@ -109,6 +109,7 @@
7C210B78 (or 1,1,1) %R3 =3D client_request ( %R4 )
7C421378 (or 2,2,2) %R3 =3D guest_NRADDR
7C631B78 (or 3,3,3) branch-and-link-to-noredir %R11
+ 7C842378 (or 4,4,4) %R3 =3D guest_NRADDR_GPR2 (64-bit mode only)
=20
Any other bytes following the 16-byte preamble are illegal and
constitute a failure in instruction decoding. This all assumes
@@ -235,7 +236,11 @@
#define OFFB_RESVN offsetofPPCGuestState(guest_RESVN)
#define OFFB_NRADDR offsetofPPCGuestState(guest_NRADDR)
=20
+/* This only exists in the 64-bit guest state */
+#define OFFB64_NRADDR_GPR2 \
+ offsetof(VexGuestPPC64State,guest_NRADDR_GPR2)
=20
+
/*------------------------------------------------------------*/
/*--- Extract instruction fields --- */
/*------------------------------------------------------------*/
@@ -2248,7 +2253,7 @@
- Non-IEEE Mode
*/
if (mask & 0xFC) { // Exception Control, Non-IEE mode
- VexEmWarn ew =3D EmWarn_PPC32exns;
+ VexEmWarn ew =3D EmWarn_PPCexns;
=20
/* If any of the src::exception_control bits are actually set,
side-exit to the next insn, reporting the warning,
@@ -8465,6 +8470,17 @@
dres.whatNext =3D Dis_StopHere;
goto decode_success;
}
+ else
+ if (mode64=20
+ && getUIntBigendianly(code+16) =3D=3D 0x7C842378 /* or 4,4,=
4 */) {
+ /* %R3 =3D guest_NRADDR_GPR2 */
+ DIP("r3 =3D guest_NRADDR_GPR2\n");
+ delta +=3D 20;
+ dres.len =3D 20;
+ vassert(ty =3D=3D Ity_I64);
+ putIReg(3, IRExpr_Get( OFFB64_NRADDR_GPR2, ty ));
+ goto decode_success;
+ }
/* We don't know what it is. Set opc1/opc2 so decode_failure
can print the insn following the Special-insn preamble. */
theInstr =3D getUIntBigendianly(code+16);
Modified: trunk/priv/host-ppc/isel.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/host-ppc/isel.c 2006-01-20 14:13:55 UTC (rev 1542)
+++ trunk/priv/host-ppc/isel.c 2006-01-20 14:19:25 UTC (rev 1543)
@@ -752,7 +752,7 @@
/* Throw out any cases we don't need. In theory there might be a
day where we need to handle others, but not today. */
=20
- if (nElems !=3D 16)
+ if (nElems !=3D 16 && nElems !=3D 32)
vpanic("genGuestArrayOffset(ppc64 host)(1)");
=20
switch (elemSz) {
@@ -768,7 +768,7 @@
/* Compute off into a reg, %off. Then return:
=20
addi %tmp, %off, bias (if bias !=3D 0)
- andi %tmp, 15
+ andi %tmp, nElems-1
sldi %tmp, shift
addi %tmp, %tmp, base
... Baseblockptr + %tmp ...
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 2006-01-20 14:13:55 UTC (rev 1542)
+++ trunk/pub/libvex_guest_ppc64.h 2006-01-20 14:19:25 UTC (rev 1543)
@@ -93,7 +93,7 @@
/*--- Vex's representation of the PPC64 CPU state ---*/
/*---------------------------------------------------------------*/
=20
-#define VEX_GUEST_PPC64_REDIR_STACK_SIZE 16
+#define VEX_GUEST_PPC64_REDIR_STACK_SIZE (16/*entries*/ * 2/*words per e=
ntry*/)
=20
typedef
struct {
@@ -257,13 +257,14 @@
Note, this is only set for wrap-style redirects, not for
replace-style ones. */
/* 1112 */ ULong guest_NRADDR;
+ /* 1120 */ ULong guest_NRADDR_GPR2;
=20
/* A grows-upwards stack for hidden saves/restores of LR and R2
needed for function interception and wrapping on ppc64-linux.
A horrible hack. REDIR_SP points to the highest live entry,
and so starts at -1. */
- /* 1120 */ ULong guest_REDIR_SP;
- /* 1128 */ ULong guest_REDIR_STACK[VEX_GUEST_PPC64_REDIR_STACK_SIZ=
E];
+ /* 1128 */ ULong guest_REDIR_SP;
+ /* 1136 */ ULong guest_REDIR_STACK[VEX_GUEST_PPC64_REDIR_STACK_SIZ=
E];
=20
/* Padding to make it have an 8-aligned size */
/* UInt padding; */
|
|
From: <sv...@va...> - 2006-01-20 14:14:09
|
Author: sewardj
Date: 2006-01-20 14:13:55 +0000 (Fri, 20 Jan 2006)
New Revision: 1542
Log:
Add Ijk_EmFail, a new kind of IR block exit: an emulation failure
(fatal error) from which Vex (generated code) cannot recover. =20
Handle this in the ppc(64) backend.
Modified:
trunk/priv/host-ppc/hdefs.c
trunk/priv/ir/irdefs.c
trunk/priv/main/vex_main.c
trunk/pub/libvex_emwarn.h
trunk/pub/libvex_ir.h
trunk/pub/libvex_trc_values.h
Modified: trunk/priv/host-ppc/hdefs.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/host-ppc/hdefs.c 2006-01-18 04:14:52 UTC (rev 1541)
+++ trunk/priv/host-ppc/hdefs.c 2006-01-20 14:13:55 UTC (rev 1542)
@@ -2939,6 +2939,7 @@
case Ijk_Sys_syscall: trc =3D VEX_TRC_JMP_SYS_SYSCALL; break;
case Ijk_Yield: trc =3D VEX_TRC_JMP_YIELD; break;
case Ijk_EmWarn: trc =3D VEX_TRC_JMP_EMWARN; break;
+ case Ijk_EmFail: trc =3D VEX_TRC_JMP_EMFAIL; break;
case Ijk_MapFail: trc =3D VEX_TRC_JMP_MAPFAIL; break;
case Ijk_NoDecode: trc =3D VEX_TRC_JMP_NODECODE; break;
case Ijk_TInval: trc =3D VEX_TRC_JMP_TINVAL; break;
Modified: trunk/priv/ir/irdefs.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/ir/irdefs.c 2006-01-18 04:14:52 UTC (rev 1541)
+++ trunk/priv/ir/irdefs.c 2006-01-20 14:13:55 UTC (rev 1542)
@@ -681,6 +681,7 @@
case Ijk_ClientReq: vex_printf("ClientReq"); break;
case Ijk_Yield: vex_printf("Yield"); break;
case Ijk_EmWarn: vex_printf("EmWarn"); break;
+ case Ijk_EmFail: vex_printf("EmFail"); break;
case Ijk_NoDecode: vex_printf("NoDecode"); break;
case Ijk_MapFail: vex_printf("MapFail"); break;
case Ijk_TInval: vex_printf("Invalidate"); break;
Modified: trunk/priv/main/vex_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/priv/main/vex_main.c 2006-01-18 04:14:52 UTC (rev 1541)
+++ trunk/priv/main/vex_main.c 2006-01-20 14:13:55 UTC (rev 1542)
@@ -664,8 +664,12 @@
return "Setting %mxcsr.daz (SSE treat-denormals-as-zero mode)";
case EmWarn_X86_acFlag:
return "Setting %eflags.ac (setting noted but ignored)";
- case EmWarn_PPC32exns:
- return "Unmasking PPC32 FP exceptions";
+ case EmWarn_PPCexns:
+ return "Unmasking PPC32/64 FP exceptions";
+ case EmWarn_PPC64_redir_overflow:
+ return "PPC64 function redirection stack overflow";
+ case EmWarn_PPC64_redir_underflow:
+ return "PPC64 function redirection stack underflow";
default:=20
vpanic("LibVEX_EmWarn_string: unknown warning");
}
Modified: trunk/pub/libvex_emwarn.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_emwarn.h 2006-01-18 04:14:52 UTC (rev 1541)
+++ trunk/pub/libvex_emwarn.h 2006-01-20 14:13:55 UTC (rev 1542)
@@ -87,9 +87,13 @@
/* settings to %eflags.ac (alignment check) are noted but ignored =
*/
EmWarn_X86_acFlag,
=20
- /* unmasking PPC32 FP exceptions is not supported */
- EmWarn_PPC32exns,
+ /* unmasking PPC32/64 FP exceptions is not supported */
+ EmWarn_PPCexns,
=20
+ /* overflow/underflow of the PPC64 _REDIR stack (ppc64 only) */
+ EmWarn_PPC64_redir_overflow,
+ EmWarn_PPC64_redir_underflow,
+
EmWarn_NUMBER
}
VexEmWarn;
Modified: trunk/pub/libvex_ir.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_ir.h 2006-01-18 04:14:52 UTC (rev 1541)
+++ trunk/pub/libvex_ir.h 2006-01-20 14:13:55 UTC (rev 1542)
@@ -843,6 +843,14 @@
the size of a guest word. It is the responsibility of the relevant
toIR.c to ensure that these are filled in with suitable values
before issuing a jump of kind Ijk_TInval. =20
+
+ Re Ijk_EmWarn and Ijk_EmFail: the guest state must have a
+ pseudo-register guest_EMWARN, which is 32-bits regardless of
+ the host or guest word size. That register should be made
+ to hold an EmWarn_* value to indicate the reason for the exit.
+
+ In the case of Ijk_EmFail, the exit is fatal (Vex-generated code
+ cannot continue) and so the jump destination can be anything.
*/
typedef
enum {=20
@@ -852,6 +860,7 @@
Ijk_ClientReq, /* do guest client req before continuing */
Ijk_Yield, /* client is yielding to thread scheduler */
Ijk_EmWarn, /* report emulation warning before continuing =
*/
+ Ijk_EmFail, /* emulation critical (FATAL) error; give up *=
/
Ijk_NoDecode, /* next instruction cannot be decoded */
Ijk_MapFail, /* Vex-provided address translation failed */
Ijk_TInval, /* Invalidate translations before continuing. =
*/
Modified: trunk/pub/libvex_trc_values.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_trc_values.h 2006-01-18 04:14:52 UTC (rev 1541)
+++ trunk/pub/libvex_trc_values.h 2006-01-20 14:13:55 UTC (rev 1542)
@@ -54,6 +54,9 @@
=20
This file may get included in assembly code, so do not put
C-specific constructs in it.
+
+ These values should be 61 or above so as not to conflict
+ with Valgrind's VG_TRC_ values, which are 60 or below.
*/
=20
#define VEX_TRC_JMP_TINVAL 61 /* invalidate translations before
@@ -61,6 +64,8 @@
#define VEX_TRC_JMP_NOREDIR 81 /* jump to undirected guest addr */
#define VEX_TRC_JMP_EMWARN 63 /* deliver emulation warning before
continuing */
+#define VEX_TRC_JMP_EMFAIL 83 /* emulation fatal error; abort syste=
m */
+
#define VEX_TRC_JMP_CLIENTREQ 65 /* do a client req before continuing =
*/
#define VEX_TRC_JMP_YIELD 67 /* yield to thread sched=20
before continuing */
|
|
From: Ashley P. <as...@qu...> - 2006-01-20 10:32:56
|
On Wed, 2006-01-18 at 17:29 -0600, Nicholas Nethercote wrote:
> > Now my questions are mainly about the asynchronous get, it checks that
> > the buffer it's been given is valid (VALGRIND_CHECK_WRITABLE) and
> > temporarily marks it as addressable but undefined whilst the data is
> > arriving. My question is what does VALGRIND_MAKE_WRITABLE do if the
> > buffer isn't addressable before it's called. I don't want it to mark a
> > buffer as addressable when it isn't, only to mark it as undefined while
> > the network transfer is underway. Am I doing the right thing here?
>
> There is no way to mark memory as undefined without also forcing it to be
> considered addressable, which sounds like is what you want. But just
> removing the MKAE_WRITABLE like I said above might be good enough?
I've removed the the MAKE_WRITEABLE, it's now correct for most cases but
won't catch this example:
{
int i = 4;
static int j = 5;
ELAN_EVENT *e = elan_get(elan_base->state,&j,&i,sizeof(int),0);
printf("i is %d\n",i);
elan_wait(e,ELAN_POLL_EVENT);
printf("i is %d\n",i);
}
The prototype for elan_get is this, it starts a simple network read:
extern ELAN_EVENT *elan_get (ELAN_STATE *state, void *source, void
*target, size_t len, uint32_t srcvp);
In this code the result of first printf is undefined and the second one
will print 5. I was hoping Valgrind could be made to flag an error on
the first printf.
Ashley,
|
|
From: <js...@ac...> - 2006-01-20 10:06:23
|
Nightly build on minnie ( SuSE 10.0, ppc32 ) started at 2006-01-20 05:00:01 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 182 tests, 11 stderr failures, 3 stdout failures ================= memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/leakotron (stdout) memcheck/tests/mempool (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/sigaltstack (stderr) memcheck/tests/stack_changes (stdout) memcheck/tests/stack_changes (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/mremap (stderr) none/tests/ppc32/jm-fp (stdout) none/tests/ppc32/jm-fp (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 == 182 tests, 12 stderr failures, 3 stdout failures ================= memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/leakotron (stdout) memcheck/tests/mempool (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/sigaltstack (stderr) memcheck/tests/stack_changes (stdout) memcheck/tests/stack_changes (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/fdleak_socketpair (stderr) none/tests/mremap (stderr) none/tests/ppc32/jm-fp (stdout) none/tests/ppc32/jm-fp (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Fri Jan 20 05:09:34 2006 --- new.short Fri Jan 20 05:19:11 2006 *************** *** 8,10 **** ! == 182 tests, 12 stderr failures, 3 stdout failures ================= memcheck/tests/leak-cycle (stderr) --- 8,10 ---- ! == 182 tests, 11 stderr failures, 3 stdout failures ================= memcheck/tests/leak-cycle (stderr) *************** *** 20,22 **** none/tests/fdleak_cmsg (stderr) - none/tests/fdleak_socketpair (stderr) none/tests/mremap (stderr) --- 20,21 ---- |
|
From: <js...@ac...> - 2006-01-20 03:59:08
|
Nightly build on phoenix ( SuSE 10.0 ) started at 2006-01-20 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 == 215 tests, 6 stderr failures, 1 stdout failure ================= memcheck/tests/leak-tree (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) none/tests/mremap2 (stdout) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) ================================================= == Results from 24 hours ago == ================================================= 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 == 215 tests, 20 stderr failures, 1 stdout failure ================= memcheck/tests/buflen_check (stderr) memcheck/tests/execve (stderr) memcheck/tests/execve2 (stderr) memcheck/tests/fwrite (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/supp_unknown (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_exit_group (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/xml1 (stderr) none/tests/fdleak_creat (stderr) none/tests/fdleak_dup (stderr) none/tests/fdleak_dup2 (stderr) none/tests/fdleak_fcntl (stderr) none/tests/fdleak_open (stderr) none/tests/fdleak_pipe (stderr) none/tests/fdleak_socketpair (stderr) none/tests/mremap2 (stdout) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Fri Jan 20 03:44:42 2006 --- new.short Fri Jan 20 03:59:37 2006 *************** *** 10,30 **** ! == 215 tests, 20 stderr failures, 1 stdout failure ================= ! memcheck/tests/buflen_check (stderr) ! memcheck/tests/execve (stderr) ! memcheck/tests/execve2 (stderr) ! memcheck/tests/fwrite (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/stack_switch (stderr) - memcheck/tests/supp_unknown (stderr) memcheck/tests/x86/scalar (stderr) - memcheck/tests/x86/scalar_exit_group (stderr) memcheck/tests/x86/scalar_supp (stderr) - memcheck/tests/xml1 (stderr) - none/tests/fdleak_creat (stderr) - none/tests/fdleak_dup (stderr) - none/tests/fdleak_dup2 (stderr) - none/tests/fdleak_fcntl (stderr) - none/tests/fdleak_open (stderr) - none/tests/fdleak_pipe (stderr) - none/tests/fdleak_socketpair (stderr) none/tests/mremap2 (stdout) --- 10,16 ---- ! == 215 tests, 6 stderr failures, 1 stdout failure ================= memcheck/tests/leak-tree (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) none/tests/mremap2 (stdout) |
|
From: <js...@ac...> - 2006-01-20 03:56:20
|
Nightly build on g5 ( YDL 4.0, ppc970 ) started at 2006-01-20 04:40:00 CET 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 == 185 tests, 8 stderr failures, 4 stdout failures ================= memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/leakotron (stdout) memcheck/tests/pointer-trace (stderr) memcheck/tests/wrap5 (stdout) memcheck/tests/wrap5 (stderr) memcheck/tests/wrap6 (stdout) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/fdleak_fcntl (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) ================================================= == 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 == 185 tests, 16 stderr failures, 6 stdout failures ================= memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/leakotron (stdout) memcheck/tests/overlap (stderr) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/post-syscall (stdout) memcheck/tests/sigprocmask (stderr) memcheck/tests/stack_changes (stdout) memcheck/tests/stack_changes (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/supp1 (stderr) memcheck/tests/supp_unknown (stderr) memcheck/tests/wrap5 (stdout) memcheck/tests/wrap5 (stderr) memcheck/tests/wrap6 (stdout) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/fdleak_fcntl (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Fri Jan 20 04:48:07 2006 --- new.short Fri Jan 20 04:56:14 2006 *************** *** 8,10 **** ! == 185 tests, 16 stderr failures, 6 stdout failures ================= memcheck/tests/leak-cycle (stderr) --- 8,10 ---- ! == 185 tests, 8 stderr failures, 4 stdout failures ================= memcheck/tests/leak-cycle (stderr) *************** *** 12,23 **** memcheck/tests/leakotron (stdout) - memcheck/tests/overlap (stderr) - memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/pointer-trace (stderr) - memcheck/tests/post-syscall (stdout) - memcheck/tests/sigprocmask (stderr) - memcheck/tests/stack_changes (stdout) - memcheck/tests/stack_changes (stderr) - memcheck/tests/stack_switch (stderr) - memcheck/tests/supp1 (stderr) - memcheck/tests/supp_unknown (stderr) memcheck/tests/wrap5 (stdout) --- 12,14 ---- *************** *** 25,27 **** memcheck/tests/wrap6 (stdout) - memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) --- 16,17 ---- |
|
From: Tom H. <to...@co...> - 2006-01-20 03:43:56
|
Nightly build on dunsmere ( athlon, Fedora Core 4 ) started at 2006-01-20 03:30:05 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 217 tests, 8 stderr failures, 2 stdout failures ================= memcheck/tests/leak-tree (stderr) memcheck/tests/mempool (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/sse1_memory (stdout) none/tests/mremap2 (stdout) none/tests/x86/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 == 217 tests, 22 stderr failures, 2 stdout failures ================= memcheck/tests/buflen_check (stderr) memcheck/tests/execve (stderr) memcheck/tests/execve2 (stderr) memcheck/tests/fwrite (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/mempool (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/supp_unknown (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_exit_group (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/sse1_memory (stdout) memcheck/tests/xml1 (stderr) none/tests/fdleak_creat (stderr) none/tests/fdleak_dup (stderr) none/tests/fdleak_dup2 (stderr) none/tests/fdleak_fcntl (stderr) none/tests/fdleak_open (stderr) none/tests/fdleak_pipe (stderr) none/tests/fdleak_socketpair (stderr) none/tests/mremap2 (stdout) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Fri Jan 20 03:37:02 2006 --- new.short Fri Jan 20 03:43:49 2006 *************** *** 8,14 **** ! == 217 tests, 22 stderr failures, 2 stdout failures ================= ! memcheck/tests/buflen_check (stderr) ! memcheck/tests/execve (stderr) ! memcheck/tests/execve2 (stderr) ! memcheck/tests/fwrite (stderr) memcheck/tests/leak-tree (stderr) --- 8,10 ---- ! == 217 tests, 8 stderr failures, 2 stdout failures ================= memcheck/tests/leak-tree (stderr) *************** *** 17,31 **** memcheck/tests/stack_switch (stderr) - memcheck/tests/supp_unknown (stderr) memcheck/tests/x86/scalar (stderr) - memcheck/tests/x86/scalar_exit_group (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/sse1_memory (stdout) - memcheck/tests/xml1 (stderr) - none/tests/fdleak_creat (stderr) - none/tests/fdleak_dup (stderr) - none/tests/fdleak_dup2 (stderr) - none/tests/fdleak_fcntl (stderr) - none/tests/fdleak_open (stderr) - none/tests/fdleak_pipe (stderr) - none/tests/fdleak_socketpair (stderr) none/tests/mremap2 (stdout) --- 13,17 ---- |
|
From: Tom H. <th...@cy...> - 2006-01-20 03:36:20
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2006-01-20 03:00:08 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 236 tests, 7 stderr failures, 1 stdout failure ================= memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/sse1_memory (stdout) none/tests/amd64/faultstatus (stderr) none/tests/fdleak_fcntl (stderr) none/tests/x86/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 == 236 tests, 10 stderr failures, 1 stdout failure ================= memcheck/tests/stack_switch (stderr) memcheck/tests/supp_unknown (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_exit_group (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/sse1_memory (stdout) memcheck/tests/xml1 (stderr) none/tests/amd64/faultstatus (stderr) none/tests/fdleak_fcntl (stderr) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Fri Jan 20 03:15:43 2006 --- new.short Fri Jan 20 03:36:13 2006 *************** *** 8,17 **** ! == 236 tests, 10 stderr failures, 1 stdout failure ================= memcheck/tests/stack_switch (stderr) - memcheck/tests/supp_unknown (stderr) memcheck/tests/x86/scalar (stderr) - memcheck/tests/x86/scalar_exit_group (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/sse1_memory (stdout) - memcheck/tests/xml1 (stderr) none/tests/amd64/faultstatus (stderr) --- 8,14 ---- ! == 236 tests, 7 stderr failures, 1 stdout failure ================= memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/sse1_memory (stdout) none/tests/amd64/faultstatus (stderr) |
|
From: Tom H. <th...@cy...> - 2006-01-20 03:30:29
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2006-01-20 03:15:05 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 216 tests, 21 stderr failures, 2 stdout failures ================= memcheck/tests/addressable (stderr) memcheck/tests/badjump (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/leakotron (stdout) 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) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/sse1_memory (stdout) memcheck/tests/xml1 (stderr) none/tests/x86/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 == 216 tests, 31 stderr failures, 2 stdout failures ================= memcheck/tests/addressable (stderr) memcheck/tests/badjump (stderr) memcheck/tests/buflen_check (stderr) memcheck/tests/describe-block (stderr) memcheck/tests/erringfds (stderr) memcheck/tests/fwrite (stderr) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/leakotron (stdout) 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) memcheck/tests/supp_unknown (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_exit_group (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/sse1_memory (stdout) memcheck/tests/xml1 (stderr) none/tests/fdleak_dup (stderr) none/tests/fdleak_dup2 (stderr) none/tests/fdleak_fcntl (stderr) none/tests/fdleak_open (stderr) none/tests/fdleak_pipe (stderr) none/tests/fdleak_socketpair (stderr) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Fri Jan 20 03:23:10 2006 --- new.short Fri Jan 20 03:30:22 2006 *************** *** 8,16 **** ! == 216 tests, 31 stderr failures, 2 stdout failures ================= memcheck/tests/addressable (stderr) memcheck/tests/badjump (stderr) - memcheck/tests/buflen_check (stderr) memcheck/tests/describe-block (stderr) memcheck/tests/erringfds (stderr) - memcheck/tests/fwrite (stderr) memcheck/tests/leak-0 (stderr) --- 8,14 ---- ! == 216 tests, 21 stderr failures, 2 stdout failures ================= memcheck/tests/addressable (stderr) memcheck/tests/badjump (stderr) memcheck/tests/describe-block (stderr) memcheck/tests/erringfds (stderr) memcheck/tests/leak-0 (stderr) *************** *** 28,32 **** memcheck/tests/stack_changes (stderr) - memcheck/tests/supp_unknown (stderr) memcheck/tests/x86/scalar (stderr) - memcheck/tests/x86/scalar_exit_group (stderr) memcheck/tests/x86/scalar_supp (stderr) --- 26,28 ---- *************** *** 34,41 **** memcheck/tests/xml1 (stderr) - none/tests/fdleak_dup (stderr) - none/tests/fdleak_dup2 (stderr) - none/tests/fdleak_fcntl (stderr) - none/tests/fdleak_open (stderr) - none/tests/fdleak_pipe (stderr) - none/tests/fdleak_socketpair (stderr) none/tests/x86/faultstatus (stderr) --- 30,31 ---- |
|
From: Tom H. <th...@cy...> - 2006-01-20 03:24:13
|
Nightly build on dellow ( x86_64, Fedora Core 4 ) started at 2006-01-20 03:10:11 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 236 tests, 5 stderr failures, 2 stdout failures ================= memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/sse1_memory (stdout) none/tests/amd64/faultstatus (stderr) none/tests/mremap2 (stdout) none/tests/x86/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 == 236 tests, 8 stderr failures, 2 stdout failures ================= memcheck/tests/supp_unknown (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_exit_group (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/sse1_memory (stdout) memcheck/tests/xml1 (stderr) none/tests/amd64/faultstatus (stderr) none/tests/mremap2 (stdout) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Fri Jan 20 03:17:52 2006 --- new.short Fri Jan 20 03:24:03 2006 *************** *** 8,16 **** ! == 236 tests, 8 stderr failures, 2 stdout failures ================= ! memcheck/tests/supp_unknown (stderr) memcheck/tests/x86/scalar (stderr) - memcheck/tests/x86/scalar_exit_group (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/sse1_memory (stdout) - memcheck/tests/xml1 (stderr) none/tests/amd64/faultstatus (stderr) --- 8,13 ---- ! == 236 tests, 5 stderr failures, 2 stdout failures ================= memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/sse1_memory (stdout) none/tests/amd64/faultstatus (stderr) |
|
From: Tom H. <th...@cy...> - 2006-01-20 03:19:47
|
Nightly build on aston ( x86_64, Fedora Core 3 ) started at 2006-01-20 03:05:11 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 236 tests, 6 stderr failures, 2 stdout failures ================= memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/sse1_memory (stdout) none/tests/amd64/faultstatus (stderr) none/tests/mremap2 (stdout) none/tests/x86/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 == 236 tests, 9 stderr failures, 2 stdout failures ================= memcheck/tests/stack_switch (stderr) memcheck/tests/supp_unknown (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_exit_group (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/sse1_memory (stdout) memcheck/tests/xml1 (stderr) none/tests/amd64/faultstatus (stderr) none/tests/mremap2 (stdout) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Fri Jan 20 03:13:04 2006 --- new.short Fri Jan 20 03:19:33 2006 *************** *** 8,17 **** ! == 236 tests, 9 stderr failures, 2 stdout failures ================= memcheck/tests/stack_switch (stderr) - memcheck/tests/supp_unknown (stderr) memcheck/tests/x86/scalar (stderr) - memcheck/tests/x86/scalar_exit_group (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/sse1_memory (stdout) - memcheck/tests/xml1 (stderr) none/tests/amd64/faultstatus (stderr) --- 8,14 ---- ! == 236 tests, 6 stderr failures, 2 stdout failures ================= memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/sse1_memory (stdout) none/tests/amd64/faultstatus (stderr) |
|
From: Julian S. <js...@ac...> - 2006-01-20 02:18:06
|
Uttam > On Friday 20 January 2006 00:43, Robert Walsh wrote: > > This behavior is intentional. Code like this: > > if(verbose) > do_verbose_stuff(); > > will be syntax-checked/type-checked/etc. by the compiler. It won't be > an optimization problem, as the compiler will notice that the code is > dead and completely optimized out. > > However, this code: > > #ifdef VERBOSE > do_verbose_stuff(); > #endif > > will not be syntax-checked/type-checked/etc. by the compiler unless > VERBOSE is true. This means verbose code will bitrot when changes > happen (variables go away, change names, etc.) as most people won't > remember or care about compiling with VERBOSE defined. Absolutely my thoughts too. I can only add that I as a corporate employee in a previous life, I was involved in a project which nearly collapsed into a total screaming nightmare of #ifdefs -- the code was essentially unmaintainable -- and I have been keen to avoid them ever since. If you think this is a dead code problem, just consider that in VEX/ all the front ends and back ends are always compiled in -- tens of thousands of useless lines of code -- even though only one front end and one back end will be used by any particular valgrind executable. J |
|
From: Uttam P. <ut...@us...> - 2006-01-20 01:09:21
|
Hi All,
Here is 2nd cleanup patch. Variable 'human_readable' is always true, so
the following conditional assignment is really not necessary.
Any feedback is appreciated.
Thanks,
Uttam
--- valgrind-3.1.0.orig/coregrind/m_debuginfo/symtab.c 2006-01-20 07:58:07.211145392 -0800
+++ valgrind-3.1.0/coregrind/m_debuginfo/symtab.c 2006-01-20 08:15:41.429058232 -0800
@@ -2498,9 +2498,8 @@ Char* VG_(describe_IP)(Addr eip, Char* b
);
if (VG_(clo_xml)) {
- Bool human_readable = True;
- HChar* maybe_newline = human_readable ? "\n " : "";
- HChar* maybe_newline2 = human_readable ? "\n " : "";
+ HChar* maybe_newline = "\n ";
+ HChar* maybe_newline2 = "\n ";
/* Print in XML format, dumping in as much info as we know. */
APPEND("<frame>");
|
|
From: Uttam P. <ut...@us...> - 2006-01-20 01:08:58
|
> This behavior is intentional. Code like this: > if(verbose) > do_verbose_stuff(); > > will be syntax-checked/type-checked/etc. by the compiler. It won't be > an optimization problem, as the compiler will notice that the code is > dead and completely optimized out. Agree. > However, this code: > > #ifdef VERBOSE > do_verbose_stuff(); > #endif > > will not be syntax-checked/type-checked/etc. by the compiler unless > VERBOSE is true. This means verbose code will bitrot when changes > happen (variables go away, change names, etc.) as most people won't > remember or care about compiling with VERBOSE defined. > True. Thanks for the feedback. Uttam |