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
(32) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
|
|
1
(11) |
2
(8) |
|
3
(8) |
4
(8) |
5
(8) |
6
(19) |
7
(17) |
8
(12) |
9
(10) |
|
10
(15) |
11
(18) |
12
(14) |
13
(16) |
14
(24) |
15
(16) |
16
(12) |
|
17
(25) |
18
(23) |
19
(12) |
20
(10) |
21
(9) |
22
(12) |
23
(13) |
|
24
(19) |
25
(7) |
26
(39) |
27
(22) |
28
(22) |
29
(16) |
30
(13) |
|
31
(23) |
|
|
|
|
|
|
|
From: <js...@ac...> - 2006-12-24 05:03:26
|
Nightly build on phoenix ( SuSE 10.0 ) started at 2006-12-24 04: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 == 250 tests, 6 stderr failures, 1 stdout failure, 0 posttest failures == memcheck/tests/leak-tree (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) |
|
From: Tom H. <to...@co...> - 2006-12-24 03:44:57
|
Nightly build on dunsmere ( athlon, Fedora Core 6 ) started at 2006-12-24 03:30:06 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
== 252 tests, 5 stderr failures, 2 stdout failures, 0 posttest failures ==
memcheck/tests/pointer-trace (stderr)
memcheck/tests/stack_switch (stderr)
memcheck/tests/x86/scalar (stderr)
memcheck/tests/xml1 (stderr)
none/tests/mremap (stderr)
none/tests/mremap2 (stdout)
none/tests/pth_detached (stdout)
=================================================
== Results from 24 hours ago ==
=================================================
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... failed
Last 20 lines of verbose log follow echo
m_errormgr.c:664: error: 'VgToolInterface' has no member named 'tool_update_extra'
m_errormgr.c:664: warning: left-hand operand of comma expression has no effect
m_errormgr.c: In function 'load_one_suppressions_file':
m_errormgr.c:1028: error: 'VgToolInterface' has no member named 'tool_recognised_suppression'
m_errormgr.c:1028: error: 'VgToolInterface' has no member named 'tool_recognised_suppression'
m_errormgr.c:1028: warning: left-hand operand of comma expression has no effect
m_errormgr.c:1046: error: 'VgToolInterface' has no member named 'tool_read_extra_suppression_info'
m_errormgr.c:1046: error: 'VgToolInterface' has no member named 'tool_read_extra_suppression_info'
m_errormgr.c:1046: warning: left-hand operand of comma expression has no effect
m_errormgr.c: In function 'supp_matches_error':
m_errormgr.c:1131: error: 'VgToolInterface' has no member named 'tool_error_matches_suppression'
m_errormgr.c:1131: error: 'VgToolInterface' has no member named 'tool_error_matches_suppression'
m_errormgr.c:1131: warning: left-hand operand of comma expression has no effect
make[3]: *** [libcoregrind_x86_linux_a-m_errormgr.o] Error 1
make[3]: Leaving directory `/tmp/valgrind.5150/valgrind/coregrind'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/tmp/valgrind.5150/valgrind/coregrind'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/tmp/valgrind.5150/valgrind'
make: *** [all] Error 2
=================================================
== Difference between 24 hours ago and now ==
=================================================
*** old.short Sun Dec 24 03:32:37 2006
--- new.short Sun Dec 24 03:44:51 2006
***************
*** 3,26 ****
Configuring valgrind ... done
! Building valgrind ... failed
- Last 20 lines of verbose log follow echo
- m_errormgr.c:664: error: 'VgToolInterface' has no member named 'tool_update_extra'
- m_errormgr.c:664: warning: left-hand operand of comma expression has no effect
- m_errormgr.c: In function 'load_one_suppressions_file':
- m_errormgr.c:1028: error: 'VgToolInterface' has no member named 'tool_recognised_suppression'
- m_errormgr.c:1028: error: 'VgToolInterface' has no member named 'tool_recognised_suppression'
- m_errormgr.c:1028: warning: left-hand operand of comma expression has no effect
- m_errormgr.c:1046: error: 'VgToolInterface' has no member named 'tool_read_extra_suppression_info'
- m_errormgr.c:1046: error: 'VgToolInterface' has no member named 'tool_read_extra_suppression_info'
- m_errormgr.c:1046: warning: left-hand operand of comma expression has no effect
- m_errormgr.c: In function 'supp_matches_error':
- m_errormgr.c:1131: error: 'VgToolInterface' has no member named 'tool_error_matches_suppression'
- m_errormgr.c:1131: error: 'VgToolInterface' has no member named 'tool_error_matches_suppression'
- m_errormgr.c:1131: warning: left-hand operand of comma expression has no effect
- make[3]: *** [libcoregrind_x86_linux_a-m_errormgr.o] Error 1
- make[3]: Leaving directory `/tmp/valgrind.5150/valgrind/coregrind'
- make[2]: *** [all] Error 2
- make[2]: Leaving directory `/tmp/valgrind.5150/valgrind/coregrind'
- make[1]: *** [all-recursive] Error 1
- make[1]: Leaving directory `/tmp/valgrind.5150/valgrind'
- make: *** [all] Error 2
--- 3,17 ----
Configuring valgrind ... done
! Building valgrind ... done
! Running regression tests ... failed
!
! Regression test results follow
!
! == 252 tests, 5 stderr failures, 2 stdout failures, 0 posttest failures ==
! memcheck/tests/pointer-trace (stderr)
! memcheck/tests/stack_switch (stderr)
! memcheck/tests/x86/scalar (stderr)
! memcheck/tests/xml1 (stderr)
! none/tests/mremap (stderr)
! none/tests/mremap2 (stdout)
! none/tests/pth_detached (stdout)
|
|
From: Tom H. <th...@cy...> - 2006-12-24 03:18:05
|
Nightly build on dellow ( x86_64, Fedora Core 6 ) started at 2006-12-24 03:10:03 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
== 280 tests, 4 stderr failures, 1 stdout failure, 0 posttest failures ==
memcheck/tests/pointer-trace (stderr)
memcheck/tests/x86/scalar (stderr)
memcheck/tests/xml1 (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 ... failed
Last 20 lines of verbose log follow echo
m_errormgr.c:664: error: 'VgToolInterface' has no member named 'tool_update_extra'
m_errormgr.c:664: warning: left-hand operand of comma expression has no effect
m_errormgr.c: In function 'load_one_suppressions_file':
m_errormgr.c:1028: error: 'VgToolInterface' has no member named 'tool_recognised_suppression'
m_errormgr.c:1028: error: 'VgToolInterface' has no member named 'tool_recognised_suppression'
m_errormgr.c:1028: warning: left-hand operand of comma expression has no effect
m_errormgr.c:1046: error: 'VgToolInterface' has no member named 'tool_read_extra_suppression_info'
m_errormgr.c:1046: error: 'VgToolInterface' has no member named 'tool_read_extra_suppression_info'
m_errormgr.c:1046: warning: left-hand operand of comma expression has no effect
m_errormgr.c: In function 'supp_matches_error':
m_errormgr.c:1131: error: 'VgToolInterface' has no member named 'tool_error_matches_suppression'
m_errormgr.c:1131: error: 'VgToolInterface' has no member named 'tool_error_matches_suppression'
m_errormgr.c:1131: warning: left-hand operand of comma expression has no effect
make[3]: *** [libcoregrind_x86_linux_a-m_errormgr.o] Error 1
make[3]: Leaving directory `/tmp/valgrind.28811/valgrind/coregrind'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/tmp/valgrind.28811/valgrind/coregrind'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/tmp/valgrind.28811/valgrind'
make: *** [all] Error 2
=================================================
== Difference between 24 hours ago and now ==
=================================================
*** old.short Sun Dec 24 03:11:30 2006
--- new.short Sun Dec 24 03:17:54 2006
***************
*** 3,26 ****
Configuring valgrind ... done
! Building valgrind ... failed
- Last 20 lines of verbose log follow echo
- m_errormgr.c:664: error: 'VgToolInterface' has no member named 'tool_update_extra'
- m_errormgr.c:664: warning: left-hand operand of comma expression has no effect
- m_errormgr.c: In function 'load_one_suppressions_file':
- m_errormgr.c:1028: error: 'VgToolInterface' has no member named 'tool_recognised_suppression'
- m_errormgr.c:1028: error: 'VgToolInterface' has no member named 'tool_recognised_suppression'
- m_errormgr.c:1028: warning: left-hand operand of comma expression has no effect
- m_errormgr.c:1046: error: 'VgToolInterface' has no member named 'tool_read_extra_suppression_info'
- m_errormgr.c:1046: error: 'VgToolInterface' has no member named 'tool_read_extra_suppression_info'
- m_errormgr.c:1046: warning: left-hand operand of comma expression has no effect
- m_errormgr.c: In function 'supp_matches_error':
- m_errormgr.c:1131: error: 'VgToolInterface' has no member named 'tool_error_matches_suppression'
- m_errormgr.c:1131: error: 'VgToolInterface' has no member named 'tool_error_matches_suppression'
- m_errormgr.c:1131: warning: left-hand operand of comma expression has no effect
- make[3]: *** [libcoregrind_x86_linux_a-m_errormgr.o] Error 1
- make[3]: Leaving directory `/tmp/valgrind.28811/valgrind/coregrind'
- make[2]: *** [all] Error 2
- make[2]: Leaving directory `/tmp/valgrind.28811/valgrind/coregrind'
- make[1]: *** [all-recursive] Error 1
- make[1]: Leaving directory `/tmp/valgrind.28811/valgrind'
- make: *** [all] Error 2
--- 3,15 ----
Configuring valgrind ... done
! Building valgrind ... done
! Running regression tests ... failed
!
! Regression test results follow
!
! == 280 tests, 4 stderr failures, 1 stdout failure, 0 posttest failures ==
! memcheck/tests/pointer-trace (stderr)
! memcheck/tests/x86/scalar (stderr)
! memcheck/tests/xml1 (stderr)
! none/tests/mremap (stderr)
! none/tests/mremap2 (stdout)
|
|
From: <sv...@va...> - 2006-12-24 03:02:32
|
Author: sewardj
Date: 2006-12-24 03:02:18 +0000 (Sun, 24 Dec 2006)
New Revision: 6417
Log:
Always ensure that the output buffer is zero-terminated, even if it is
already full. (Nick N)
Modified:
trunk/coregrind/m_libcprint.c
Modified: trunk/coregrind/m_libcprint.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_libcprint.c 2006-12-24 02:24:11 UTC (rev 6416)
+++ trunk/coregrind/m_libcprint.c 2006-12-24 03:02:18 UTC (rev 6417)
@@ -169,6 +169,8 @@
b->buf[b->buf_used++] =3D c;
if (b->buf_used < b->buf_size)
b->buf[b->buf_used] =3D 0;
+ else
+ b->buf[b->buf_size-1] =3D 0; /* pre: b->buf_size > 0 */
}=20
}
=20
|
|
From: <sv...@va...> - 2006-12-24 02:24:15
|
Author: sewardj
Date: 2006-12-24 02:24:11 +0000 (Sun, 24 Dec 2006)
New Revision: 6416
Log:
Non-functional commit: track IR renaming in vex r1689.
Modified:
trunk/cachegrind/cg_main.c
trunk/callgrind/bb.c
trunk/callgrind/global.h
trunk/callgrind/main.c
trunk/coregrind/m_tooliface.c
trunk/coregrind/m_translate.c
trunk/coregrind/m_transtab.c
trunk/coregrind/pub_core_tooliface.h
trunk/helgrind/hg_main.c
trunk/include/pub_tool_tooliface.h
trunk/lackey/lk_main.c
trunk/massif/ms_main.c
trunk/memcheck/mc_include.h
trunk/memcheck/mc_translate.c
trunk/none/nl_main.c
Modified: trunk/cachegrind/cg_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/cachegrind/cg_main.c 2006-12-24 02:21:49 UTC (rev 6415)
+++ trunk/cachegrind/cg_main.c 2006-12-24 02:24:11 UTC (rev 6416)
@@ -115,11 +115,11 @@
//------------------------------------------------------------
// Primary data structure #2: InstrInfo table
// - Holds the cached info about each instr that is used for simulation.
-// - table(BB_start_addr, list(InstrInfo))
-// - For each BB, each InstrInfo in the list holds info about the
+// - table(SB_start_addr, list(InstrInfo))
+// - For each SB, each InstrInfo in the list holds info about the
// instruction (instrLen, instrAddr, etc), plus a pointer to its line
// CC. This node is what's passed to the simulation function.
-// - When BBs are discarded the relevant list(instr_details) is freed.
+// - When SBs are discarded the relevant list(instr_details) is freed.
=20
typedef struct _InstrInfo InstrInfo;
struct _InstrInfo {
@@ -128,9 +128,9 @@
LineCC* parent; // parent line-CC
};
=20
-typedef struct _BB_info BB_info;
-struct _BB_info {
- Addr BB_addr; // key; MUST BE FIRST
+typedef struct _SB_info SB_info;
+struct _SB_info {
+ Addr SB_addr; // key; MUST BE FIRST
Int n_instrs;
InstrInfo instrs[0];
};
@@ -407,13 +407,13 @@
Int events_used;
=20
/* The array of InstrInfo bins for the BB. */
- BB_info* bbInfo;
+ SB_info* sbInfo;
=20
/* Number InstrInfo bins 'used' so far. */
- Int bbInfo_i;
+ Int sbInfo_i;
=20
- /* The output BB being constructed. */
- IRBB* bbOut;
+ /* The output SB being constructed. */
+ IRSB* sbOut;
}
CgState;
=20
@@ -425,16 +425,16 @@
// Note that origAddr is the real origAddr, not the address of the first
// instruction in the block (they can be different due to redirection).
static
-BB_info* get_BB_info(IRBB* bbIn, Addr origAddr)
+SB_info* get_SB_info(IRSB* sbIn, Addr origAddr)
{
Int i, n_instrs;
IRStmt* st;
- BB_info* bbInfo;
+ SB_info* sbInfo;
=20
- // Count number of original instrs in BB
+ // Count number of original instrs in SB
n_instrs =3D 0;
- for (i =3D 0; i < bbIn->stmts_used; i++) {
- st =3D bbIn->stmts[i];
+ for (i =3D 0; i < sbIn->stmts_used; i++) {
+ st =3D sbIn->stmts[i];
if (Ist_IMark =3D=3D st->tag) n_instrs++;
}
=20
@@ -442,19 +442,19 @@
// If this assertion fails, there has been some screwup: some
// translations must have been discarded but Cachegrind hasn't discar=
ded
// the corresponding entries in the instr-info table.
- bbInfo =3D VG_(OSet_Lookup)(instrInfoTable, &origAddr);
- tl_assert(NULL =3D=3D bbInfo);
+ sbInfo =3D VG_(OSet_Lookup)(instrInfoTable, &origAddr);
+ tl_assert(NULL =3D=3D sbInfo);
=20
// BB never translated before (at this address, at least; could have
// been unloaded and then reloaded elsewhere in memory)
- bbInfo =3D VG_(OSet_AllocNode)(instrInfoTable,
- sizeof(BB_info) + n_instrs*sizeof(InstrI=
nfo));=20
- bbInfo->BB_addr =3D origAddr;
- bbInfo->n_instrs =3D n_instrs;
- VG_(OSet_Insert)( instrInfoTable, bbInfo );
+ sbInfo =3D VG_(OSet_AllocNode)(instrInfoTable,
+ sizeof(SB_info) + n_instrs*sizeof(InstrI=
nfo));=20
+ sbInfo->SB_addr =3D origAddr;
+ sbInfo->n_instrs =3D n_instrs;
+ VG_(OSet_Insert)( instrInfoTable, sbInfo );
distinct_instrs++;
=20
- return bbInfo;
+ return sbInfo;
}
=20
=20
@@ -490,20 +490,20 @@
InstrInfo* setup_InstrInfo ( CgState* cgs, Addr instr_addr, UInt instr_l=
en )
{
InstrInfo* i_node;
- tl_assert(cgs->bbInfo_i >=3D 0);
- tl_assert(cgs->bbInfo_i < cgs->bbInfo->n_instrs);
- i_node =3D &cgs->bbInfo->instrs[ cgs->bbInfo_i ];
+ tl_assert(cgs->sbInfo_i >=3D 0);
+ tl_assert(cgs->sbInfo_i < cgs->sbInfo->n_instrs);
+ i_node =3D &cgs->sbInfo->instrs[ cgs->sbInfo_i ];
i_node->instr_addr =3D instr_addr;
i_node->instr_len =3D instr_len;
i_node->parent =3D get_lineCC(instr_addr);
- cgs->bbInfo_i++;
+ cgs->sbInfo_i++;
return i_node;
}
=20
=20
/* Generate code for all outstanding memory events, and mark the queue
empty. Code is generated into cgs->bbOut, and this activity
- 'consumes' slots in cgs->bbInfo. */
+ 'consumes' slots in cgs->sbInfo. */
=20
static void flushEvents ( CgState* cgs )
{
@@ -632,7 +632,7 @@
di =3D unsafeIRDirty_0_N( regparms,=20
helperName, VG_(fnptr_to_fnentry)( helperA=
ddr ),=20
argv );
- addStmtToIRBB( cgs->bbOut, IRStmt_Dirty(di) );
+ addStmtToIRSB( cgs->sbOut, IRStmt_Dirty(di) );
}
=20
cgs->events_used =3D 0;
@@ -706,8 +706,8 @@
=20
=20
static
-IRBB* cg_instrument ( VgCallbackClosure* closure,
- IRBB* bbIn,=20
+IRSB* cg_instrument ( VgCallbackClosure* closure,
+ IRSB* sbIn,=20
VexGuestLayout* layout,=20
VexGuestExtents* vge,
IRType gWordTy, IRType hWordTy )
@@ -716,7 +716,7 @@
IRStmt* st;
Addr64 cia; /* address of current insn */
CgState cgs;
- IRTypeEnv* tyenv =3D bbIn->tyenv;
+ IRTypeEnv* tyenv =3D sbIn->tyenv;
InstrInfo* curr_inode =3D NULL;
=20
if (gWordTy !=3D hWordTy) {
@@ -724,37 +724,37 @@
VG_(tool_panic)("host/guest word size mismatch");
}
=20
- // Set up new BB
- cgs.bbOut =3D dopyIRBBExceptStmts(bbIn);
+ // Set up new SB
+ cgs.sbOut =3D deepCopyIRSBExceptStmts(sbIn);
=20
// Copy verbatim any IR preamble preceding the first IMark
i =3D 0;
- while (i < bbIn->stmts_used && bbIn->stmts[i]->tag !=3D Ist_IMark) {
- addStmtToIRBB( cgs.bbOut, bbIn->stmts[i] );
+ while (i < sbIn->stmts_used && sbIn->stmts[i]->tag !=3D Ist_IMark) {
+ addStmtToIRSB( cgs.sbOut, sbIn->stmts[i] );
i++;
}
=20
// Get the first statement, and initial cia from it
- tl_assert(bbIn->stmts_used > 0);
- tl_assert(i < bbIn->stmts_used);
- st =3D bbIn->stmts[i];
+ tl_assert(sbIn->stmts_used > 0);
+ tl_assert(i < sbIn->stmts_used);
+ st =3D sbIn->stmts[i];
tl_assert(Ist_IMark =3D=3D st->tag);
cia =3D st->Ist.IMark.addr;
=20
// Set up running state and get block info
tl_assert(closure->readdr =3D=3D vge->base[0]);
cgs.events_used =3D 0;
- cgs.bbInfo =3D get_BB_info(bbIn, (Addr)closure->readdr);
- cgs.bbInfo_i =3D 0;
+ cgs.sbInfo =3D get_SB_info(sbIn, (Addr)closure->readdr);
+ cgs.sbInfo_i =3D 0;
=20
if (DEBUG_CG)
VG_(printf)("\n\n---------- cg_instrument ----------\n");
=20
// Traverse the block, initialising inodes, adding events and flushin=
g as
// necessary.
- for (/*use current i*/; i < bbIn->stmts_used; i++) {
+ for (/*use current i*/; i < sbIn->stmts_used; i++) {
=20
- st =3D bbIn->stmts[i];
+ st =3D sbIn->stmts[i];
tl_assert(isFlatIRStmt(st));
=20
switch (st->tag) {
@@ -785,8 +785,8 @@
addEvent_Ir( &cgs, curr_inode );
break;
=20
- case Ist_Tmp: {
- IRExpr* data =3D st->Ist.Tmp.data;
+ case Ist_WrTmp: {
+ IRExpr* data =3D st->Ist.WrTmp.data;
if (data->tag =3D=3D Iex_Load) {
IRExpr* aexpr =3D data->Iex.Load.addr;
// Note also, endianness info is ignored. I guess
@@ -842,7 +842,7 @@
}
=20
/* Copy the original statement */
- addStmtToIRBB( cgs.bbOut, st );
+ addStmtToIRSB( cgs.sbOut, st );
=20
if (DEBUG_CG) {
ppIRStmt(st);
@@ -854,17 +854,17 @@
flushEvents( &cgs );
=20
/* done. stay sane ... */
- tl_assert(cgs.bbInfo_i =3D=3D cgs.bbInfo->n_instrs);
+ tl_assert(cgs.sbInfo_i =3D=3D cgs.sbInfo->n_instrs);
=20
if (DEBUG_CG) {
VG_(printf)( "goto {");
- ppIRJumpKind(bbIn->jumpkind);
+ ppIRJumpKind(sbIn->jumpkind);
VG_(printf)( "} ");
- ppIRExpr( bbIn->next );
+ ppIRExpr( sbIn->next );
VG_(printf)( "}\n");
}
=20
- return cgs.bbOut;
+ return cgs.sbOut;
}
=20
/*------------------------------------------------------------*/
@@ -1232,9 +1232,9 @@
// any reason at all: to free up space, because the guest code was
// unmapped or modified, or for any arbitrary reason.
static
-void cg_discard_basic_block_info ( Addr64 orig_addr64, VexGuestExtents v=
ge )
+void cg_discard_superblock_info ( Addr64 orig_addr64, VexGuestExtents vg=
e )
{
- BB_info* bbInfo;
+ SB_info* sbInfo;
Addr orig_addr =3D (Addr)vge.base[0];
=20
tl_assert(vge.n_used > 0);
@@ -1246,9 +1246,9 @@
=20
// Get BB info, remove from table, free BB info. Simple! Note that =
we
// use orig_addr, not the first instruction address in vge.
- bbInfo =3D VG_(OSet_Remove)(instrInfoTable, &orig_addr);
- tl_assert(NULL !=3D bbInfo);
- VG_(OSet_FreeNode)(instrInfoTable, bbInfo);
+ sbInfo =3D VG_(OSet_Remove)(instrInfoTable, &orig_addr);
+ tl_assert(NULL !=3D sbInfo);
+ VG_(OSet_FreeNode)(instrInfoTable, sbInfo);
}
=20
/*--------------------------------------------------------------------*/
@@ -1349,7 +1349,7 @@
cg_instrument,
cg_fini);
=20
- VG_(needs_basic_block_discards)(cg_discard_basic_block_info);
+ VG_(needs_superblock_discards)(cg_discard_superblock_info);
VG_(needs_command_line_options)(cg_process_cmd_line_option,
cg_print_usage,
cg_print_debug_usage);
Modified: trunk/callgrind/bb.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/callgrind/bb.c 2006-12-24 02:21:49 UTC (rev 6415)
+++ trunk/callgrind/bb.c 2006-12-24 02:24:11 UTC (rev 6416)
@@ -235,7 +235,7 @@
* bbIn=3D=3D0 is possible for artifical BB without real code.
* Such a BB is created when returning to an unknown function.
*/
-BB* CLG_(get_bb)(Addr addr, IRBB* bbIn, /*OUT*/ Bool *seen_before)
+BB* CLG_(get_bb)(Addr addr, IRSB* bbIn, /*OUT*/ Bool *seen_before)
{
BB* bb;
obj_node* obj;
Modified: trunk/callgrind/global.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/callgrind/global.h 2006-12-24 02:21:49 UTC (rev 6415)
+++ trunk/callgrind/global.h 2006-12-24 02:24:11 UTC (rev 6416)
@@ -668,7 +668,7 @@
/* from main.c */
Bool CLG_(get_debug_info)(Addr, Char filename[FILENAME_LEN],
Char fn_name[FN_NAME_LEN], UInt*, SegInfo**);
-void CLG_(collectBlockInfo)(IRBB* bbIn, UInt*, UInt*, Bool*);
+void CLG_(collectBlockInfo)(IRSB* bbIn, UInt*, UInt*, Bool*);
void CLG_(set_instrument_state)(Char*,Bool);
void CLG_(dump_profile)(Char* trigger,Bool only_current_thread);
void CLG_(zero_all_cost)(Bool only_current_thread);
@@ -683,7 +683,7 @@
/* from bb.c */
void CLG_(init_bb_hash)(void);
bb_hash* CLG_(get_bb_hash)(void);
-BB* CLG_(get_bb)(Addr addr, IRBB* bb_in, Bool *seen_before);
+BB* CLG_(get_bb)(Addr addr, IRSB* bb_in, Bool *seen_before);
void CLG_(delete_bb)(Addr addr);
=20
static __inline__ Addr bb_addr(BB* bb)
Modified: trunk/callgrind/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/callgrind/main.c 2006-12-24 02:21:49 UTC (rev 6415)
+++ trunk/callgrind/main.c 2006-12-24 02:24:11 UTC (rev 6416)
@@ -112,7 +112,7 @@
}
=20
static
-EventSet* insert_simcall(IRBB* bbOut, InstrInfo* ii, UInt dataSize,
+EventSet* insert_simcall(IRSB* bbOut, InstrInfo* ii, UInt dataSize,
Bool instrIssued,
IRExpr* loadAddrExpr, IRExpr* storeAddrExpr)
{
@@ -228,7 +228,7 @@
=20
di =3D unsafeIRDirty_0_N( argc, helperName,=20
VG_(fnptr_to_fnentry)( helperAddr ), a=
rgv);
- addStmtToIRBB( bbOut, IRStmt_Dirty(di) );
+ addStmtToIRSB( bbOut, IRStmt_Dirty(di) );
=20
return es;
}
@@ -239,7 +239,7 @@
* Fills the InstrInfo struct if not seen before
*/
static
-void endOfInstr(IRBB* bbOut, InstrInfo* ii, Bool bb_seen_before,
+void endOfInstr(IRSB* bbOut, InstrInfo* ii, Bool bb_seen_before,
UInt instr_offset, UInt instrLen, UInt dataSize,=20
UInt* cost_offset, Bool instrIssued,
IRExpr* loadAddrExpr, IRExpr* storeAddrExpr)
@@ -344,7 +344,7 @@
*
* Called from CLG_(get_bb)
*/
-void CLG_(collectBlockInfo)(IRBB* bbIn,
+void CLG_(collectBlockInfo)(IRSB* bbIn,
/*INOUT*/ UInt* instrs,
/*INOUT*/ UInt* cjmps,
/*INOUT*/ Bool* cjmp_inverted)
@@ -389,7 +389,7 @@
}
=20
static
-void collectStatementInfo(IRTypeEnv* tyenv, IRBB* bbOut, IRStmt* st,
+void collectStatementInfo(IRTypeEnv* tyenv, IRSB* bbOut, IRStmt* st,
Addr* instrAddr, UInt* instrLen,
IRExpr** loadAddrExpr, IRExpr** storeAddrExpr,
UInt* dataSize, IRType hWordTy)
@@ -419,8 +419,8 @@
*instrLen =3D st->Ist.IMark.len;
break;
=20
- case Ist_Tmp: {
- IRExpr* data =3D st->Ist.Tmp.data;
+ case Ist_WrTmp: {
+ IRExpr* data =3D st->Ist.WrTmp.data;
if (data->tag =3D=3D Iex_Load) {
IRExpr* aexpr =3D data->Iex.Load.addr;
CLG_ASSERT( isIRAtom(aexpr) );
@@ -481,9 +481,9 @@
}
=20
static
-void addConstMemStoreStmt( IRBB* bbOut, UWord addr, UInt val, IRType hWo=
rdTy)
+void addConstMemStoreStmt( IRSB* bbOut, UWord addr, UInt val, IRType hWo=
rdTy)
{
- addStmtToIRBB( bbOut,
+ addStmtToIRSB( bbOut,
IRStmt_Store(CLGEndness,
IRExpr_Const(hWordTy =3D=3D Ity_I32 ?
IRConst_U32( addr ) :
@@ -492,14 +492,14 @@
} =20
=20
static
-IRBB* CLG_(instrument)( VgCallbackClosure* closure,
- IRBB* bbIn,
+IRSB* CLG_(instrument)( VgCallbackClosure* closure,
+ IRSB* bbIn,
VexGuestLayout* layout,
VexGuestExtents* vge,
IRType gWordTy, IRType hWordTy )
{
Int i;
- IRBB* bbOut;
+ IRSB* bbOut;
IRStmt* st, *stnext;
Addr instrAddr, origAddr;
UInt instrLen =3D 0, dataSize;
@@ -529,13 +529,13 @@
=20
CLG_DEBUG(3, "+ instrument(BB %p)\n", (Addr)closure->readdr);
=20
- /* Set up BB for instrumented IR */
- bbOut =3D dopyIRBBExceptStmts(bbIn);
+ /* Set up SB for instrumented IR */
+ bbOut =3D deepCopyIRSBExceptStmts(bbIn);
=20
// Copy verbatim any IR preamble preceding the first IMark
i =3D 0;
while (i < bbIn->stmts_used && bbIn->stmts[i]->tag !=3D Ist_IMark) {
- addStmtToIRBB( bbOut, bbIn->stmts[i] );
+ addStmtToIRSB( bbOut, bbIn->stmts[i] );
i++;
}
=20
@@ -580,7 +580,7 @@
di =3D unsafeIRDirty_0_N( 1, "setup_bbcc",=20
VG_(fnptr_to_fnentry)( & CLG_(setup_bbcc) =
),=20
argv);
- addStmtToIRBB( bbOut, IRStmt_Dirty(di) );
+ addStmtToIRSB( bbOut, IRStmt_Dirty(di) );
=20
instrCount =3D 0;
costOffset =3D 0;
@@ -640,7 +640,7 @@
cJumps++;
}
=20
- addStmtToIRBB( bbOut, st );
+ addStmtToIRSB( bbOut, st );
st =3D stnext;
}=20
while (!beforeIBoundary);
@@ -701,14 +701,14 @@
// any reason at all: to free up space, because the guest code was
// unmapped or modified, or for any arbitrary reason.
static
-void clg_discard_basic_block_info ( Addr64 orig_addr64, VexGuestExtents =
vge )
+void clg_discard_superblock_info ( Addr64 orig_addr64, VexGuestExtents v=
ge )
{
Addr orig_addr =3D (Addr)orig_addr64;
=20
tl_assert(vge.n_used > 0);
=20
if (0)
- VG_(printf)( "discard_basic_block_info: %p, %p, %llu\n",
+ VG_(printf)( "discard_superblock_info: %p, %p, %llu\n",
(void*)(Addr)orig_addr,
(void*)(Addr)vge.base[0], (ULong)vge.len[0]);
=20
@@ -1096,7 +1096,7 @@
CLG_(instrument),
CLG_(fini));
=20
- VG_(needs_basic_block_discards)(clg_discard_basic_block_info);
+ VG_(needs_superblock_discards)(clg_discard_superblock_info);
=20
=20
VG_(needs_command_line_options)(CLG_(process_cmd_line_option),
Modified: trunk/coregrind/m_tooliface.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_tooliface.c 2006-12-24 02:21:49 UTC (rev 6415)
+++ trunk/coregrind/m_tooliface.c 2006-12-24 02:24:11 UTC (rev 6416)
@@ -40,7 +40,7 @@
=20
void VG_(basic_tool_funcs)(
void(*post_clo_init)(void),
- IRBB*(*instrument)(VgCallbackClosure*, IRBB*,=20
+ IRSB*(*instrument)(VgCallbackClosure*, IRSB*,=20
VexGuestLayout*, VexGuestExtents*, IRType, IRType)=
,
void(*fini)(Int)
)
@@ -86,7 +86,7 @@
.core_errors =3D False,
.tool_errors =3D False,
.libc_freeres =3D False,
- .basic_block_discards =3D False,
+ .superblock_discards =3D False,
.command_line_options =3D False,
.client_requests =3D False,
.syscall_wrapper =3D False,
@@ -164,12 +164,12 @@
NEEDS(data_syms)
NEEDS(xml_output)
=20
-void VG_(needs_basic_block_discards)(
+void VG_(needs_superblock_discards)(
void (*discard)(Addr64, VexGuestExtents)
)
{
- VG_(needs).basic_block_discards =3D True;
- VG_(tdict).tool_discard_basic_block_info =3D discard;
+ VG_(needs).superblock_discards =3D True;
+ VG_(tdict).tool_discard_superblock_info =3D discard;
}
=20
void VG_(needs_tool_errors)(
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-12-24 02:21:49 UTC (rev 6415)
+++ trunk/coregrind/m_translate.c 2006-12-24 02:24:11 UTC (rev 6416)
@@ -208,26 +208,26 @@
we fall back to the case that handles an unknown SP change.
*/
static
-IRBB* vg_SP_update_pass ( void* closureV,
- IRBB* bb_in,=20
+IRSB* vg_SP_update_pass ( void* closureV,
+ IRSB* sb_in,=20
VexGuestLayout* layout,=20
VexGuestExtents* vge,
IRType gWordTy,=20
IRType hWordTy )
{
- Int i, j, minoff_ST, maxoff_ST, sizeof_SP, offset_SP;
- IRDirty *dcall, *d;
- IRStmt* st;
- IRExpr* e;
- IRArray* descr;
- IRType typeof_SP;
- Long delta, con;
+ Int i, j, minoff_ST, maxoff_ST, sizeof_SP, offset_SP;
+ IRDirty *dcall, *d;
+ IRStmt* st;
+ IRExpr* e;
+ IRRegArray* descr;
+ IRType typeof_SP;
+ Long delta, con;
=20
/* Set up BB */
- IRBB* bb =3D emptyIRBB();
- bb->tyenv =3D dopyIRTypeEnv(bb_in->tyenv);
- bb->next =3D dopyIRExpr(bb_in->next);
- bb->jumpkind =3D bb_in->jumpkind;
+ IRSB* bb =3D emptyIRSB();
+ bb->tyenv =3D deepCopyIRTypeEnv(sb_in->tyenv);
+ bb->next =3D deepCopyIRExpr(sb_in->next);
+ bb->jumpkind =3D sb_in->jumpkind;
=20
delta =3D 0;
=20
@@ -258,14 +258,14 @@
"track_" #kind "_mem_stack_" #syze, =
\
VG_(fnptr_to_fnentry)( =
\
VG_(tdict).track_##kind##_mem_stack_##syze ), =
\
- mkIRExprVec_1(IRExpr_Tmp(tmpp)) =
\
+ mkIRExprVec_1(IRExpr_RdTmp(tmpp)) =
\
); =
\
dcall->nFxState =3D 1; =
\
dcall->fxState[0].fx =3D Ifx_Read; =
\
dcall->fxState[0].offset =3D layout->offset_SP; =
\
dcall->fxState[0].size =3D layout->sizeof_SP; =
\
=
\
- addStmtToIRBB( bb, IRStmt_Dirty(dcall) ); =
\
+ addStmtToIRSB( bb, IRStmt_Dirty(dcall) ); =
\
=
\
update_SP_aliases(-delta); =
\
=
\
@@ -275,75 +275,75 @@
=20
clear_SP_aliases();
=20
- for (i =3D 0; i < bb_in->stmts_used; i++) {
+ for (i =3D 0; i < sb_in->stmts_used; i++) {
=20
- st =3D bb_in->stmts[i];
+ st =3D sb_in->stmts[i];
=20
/* t =3D Get(sp): curr =3D t, delta =3D 0 */
- if (st->tag !=3D Ist_Tmp) goto case2;
- e =3D st->Ist.Tmp.data;
+ if (st->tag !=3D Ist_WrTmp) goto case2;
+ e =3D st->Ist.WrTmp.data;
if (e->tag !=3D Iex_Get) goto case2;
if (e->Iex.Get.offset !=3D offset_SP) goto case2;
if (e->Iex.Get.ty !=3D typeof_SP) goto case2;
- add_SP_alias(st->Ist.Tmp.tmp, 0);
- addStmtToIRBB( bb, st );
+ add_SP_alias(st->Ist.WrTmp.tmp, 0);
+ addStmtToIRSB( bb, st );
continue;
=20
case2:
/* t' =3D curr +/- const: curr =3D t', delta +=3D/-=3D const */
- if (st->tag !=3D Ist_Tmp) goto case3;
- e =3D st->Ist.Tmp.data;
+ if (st->tag !=3D Ist_WrTmp) goto case3;
+ e =3D st->Ist.WrTmp.data;
if (e->tag !=3D Iex_Binop) goto case3;
- if (e->Iex.Binop.arg1->tag !=3D Iex_Tmp) goto case3;
- if (!get_SP_delta(e->Iex.Binop.arg1->Iex.Tmp.tmp, &delta)) goto ca=
se3;
+ if (e->Iex.Binop.arg1->tag !=3D Iex_RdTmp) goto case3;
+ if (!get_SP_delta(e->Iex.Binop.arg1->Iex.RdTmp.tmp, &delta)) goto =
case3;
if (e->Iex.Binop.arg2->tag !=3D Iex_Const) goto case3;
if (!IS_ADD_OR_SUB(e->Iex.Binop.op)) goto case3;
con =3D GET_CONST(e->Iex.Binop.arg2->Iex.Const.con);
if (IS_ADD(e->Iex.Binop.op)) {
- add_SP_alias(st->Ist.Tmp.tmp, delta + con);
+ add_SP_alias(st->Ist.WrTmp.tmp, delta + con);
} else {
- add_SP_alias(st->Ist.Tmp.tmp, delta - con);
+ add_SP_alias(st->Ist.WrTmp.tmp, delta - con);
}
- addStmtToIRBB( bb, st );
+ addStmtToIRSB( bb, st );
continue;
=20
case3:
/* t' =3D curr: curr =3D t' */
- if (st->tag !=3D Ist_Tmp) goto case4;
- e =3D st->Ist.Tmp.data;
- if (e->tag !=3D Iex_Tmp) goto case4;
- if (!get_SP_delta(e->Iex.Tmp.tmp, &delta)) goto case4;
- add_SP_alias(st->Ist.Tmp.tmp, delta);
- addStmtToIRBB( bb, st );
+ if (st->tag !=3D Ist_WrTmp) goto case4;
+ e =3D st->Ist.WrTmp.data;
+ if (e->tag !=3D Iex_RdTmp) goto case4;
+ if (!get_SP_delta(e->Iex.RdTmp.tmp, &delta)) goto case4;
+ add_SP_alias(st->Ist.WrTmp.tmp, delta);
+ addStmtToIRSB( bb, st );
continue;
=20
case4:
/* Put(sp) =3D curr */
if (st->tag !=3D Ist_Put) goto case5;
if (st->Ist.Put.offset !=3D offset_SP) goto case5;
- if (st->Ist.Put.data->tag !=3D Iex_Tmp) goto case5;
- if (get_SP_delta(st->Ist.Put.data->Iex.Tmp.tmp, &delta)) {
- IRTemp tttmp =3D st->Ist.Put.data->Iex.Tmp.tmp;
+ if (st->Ist.Put.data->tag !=3D Iex_RdTmp) goto case5;
+ if (get_SP_delta(st->Ist.Put.data->Iex.RdTmp.tmp, &delta)) {
+ IRTemp tttmp =3D st->Ist.Put.data->Iex.RdTmp.tmp;
switch (delta) {
- case 0: addStmtToIRBB(bb,st); contin=
ue;
- case 4: DO(die, 4, tttmp); addStmtToIRBB(bb,st); contin=
ue;
- case -4: DO(new, 4, tttmp); addStmtToIRBB(bb,st); contin=
ue;
- case 8: DO(die, 8, tttmp); addStmtToIRBB(bb,st); contin=
ue;
- case -8: DO(new, 8, tttmp); addStmtToIRBB(bb,st); contin=
ue;
- case 12: DO(die, 12, tttmp); addStmtToIRBB(bb,st); contin=
ue;
- case -12: DO(new, 12, tttmp); addStmtToIRBB(bb,st); contin=
ue;
- case 16: DO(die, 16, tttmp); addStmtToIRBB(bb,st); contin=
ue;
- case -16: DO(new, 16, tttmp); addStmtToIRBB(bb,st); contin=
ue;
- case 32: DO(die, 32, tttmp); addStmtToIRBB(bb,st); contin=
ue;
- case -32: DO(new, 32, tttmp); addStmtToIRBB(bb,st); contin=
ue;
- case 112: DO(die, 112, tttmp); addStmtToIRBB(bb,st); contin=
ue;
- case -112: DO(new, 112, tttmp); addStmtToIRBB(bb,st); contin=
ue;
- case 128: DO(die, 128, tttmp); addStmtToIRBB(bb,st); contin=
ue;
- case -128: DO(new, 128, tttmp); addStmtToIRBB(bb,st); contin=
ue;
- case 144: DO(die, 144, tttmp); addStmtToIRBB(bb,st); contin=
ue;
- case -144: DO(new, 144, tttmp); addStmtToIRBB(bb,st); contin=
ue;
- case 160: DO(die, 160, tttmp); addStmtToIRBB(bb,st); contin=
ue;
- case -160: DO(new, 160, tttmp); addStmtToIRBB(bb,st); contin=
ue;
+ case 0: addStmtToIRSB(bb,st); contin=
ue;
+ case 4: DO(die, 4, tttmp); addStmtToIRSB(bb,st); contin=
ue;
+ case -4: DO(new, 4, tttmp); addStmtToIRSB(bb,st); contin=
ue;
+ case 8: DO(die, 8, tttmp); addStmtToIRSB(bb,st); contin=
ue;
+ case -8: DO(new, 8, tttmp); addStmtToIRSB(bb,st); contin=
ue;
+ case 12: DO(die, 12, tttmp); addStmtToIRSB(bb,st); contin=
ue;
+ case -12: DO(new, 12, tttmp); addStmtToIRSB(bb,st); contin=
ue;
+ case 16: DO(die, 16, tttmp); addStmtToIRSB(bb,st); contin=
ue;
+ case -16: DO(new, 16, tttmp); addStmtToIRSB(bb,st); contin=
ue;
+ case 32: DO(die, 32, tttmp); addStmtToIRSB(bb,st); contin=
ue;
+ case -32: DO(new, 32, tttmp); addStmtToIRSB(bb,st); contin=
ue;
+ case 112: DO(die, 112, tttmp); addStmtToIRSB(bb,st); contin=
ue;
+ case -112: DO(new, 112, tttmp); addStmtToIRSB(bb,st); contin=
ue;
+ case 128: DO(die, 128, tttmp); addStmtToIRSB(bb,st); contin=
ue;
+ case -128: DO(new, 128, tttmp); addStmtToIRSB(bb,st); contin=
ue;
+ case 144: DO(die, 144, tttmp); addStmtToIRSB(bb,st); contin=
ue;
+ case -144: DO(new, 144, tttmp); addStmtToIRSB(bb,st); contin=
ue;
+ case 160: DO(die, 160, tttmp); addStmtToIRSB(bb,st); contin=
ue;
+ case -160: DO(new, 160, tttmp); addStmtToIRSB(bb,st); contin=
ue;
default: =20
/* common values for ppc64: 144 128 160 112 176 */
n_SP_updates_generic_known++;
@@ -359,23 +359,23 @@
generic:
/* Pass both the old and new SP values to this helper. */
old_SP =3D newIRTemp(bb->tyenv, typeof_SP);
- addStmtToIRBB(=20
+ addStmtToIRSB(=20
bb,
- IRStmt_Tmp( old_SP, IRExpr_Get(offset_SP, typeof_SP) )=20
+ IRStmt_WrTmp( old_SP, IRExpr_Get(offset_SP, typeof_SP) )=20
);
=20
dcall =3D unsafeIRDirty_0_N(=20
2/*regparms*/,=20
"VG_(unknown_SP_update)",=20
VG_(fnptr_to_fnentry)( &VG_(unknown_SP_update) ),
- mkIRExprVec_2( IRExpr_Tmp(old_SP), st->Ist.Put.data =
)=20
+ mkIRExprVec_2( IRExpr_RdTmp(old_SP), st->Ist.Put.dat=
a )=20
);
- addStmtToIRBB( bb, IRStmt_Dirty(dcall) );
+ addStmtToIRSB( bb, IRStmt_Dirty(dcall) );
=20
- addStmtToIRBB( bb, st );
+ addStmtToIRSB( bb, st );
=20
clear_SP_aliases();
- add_SP_alias(st->Ist.Put.data->Iex.Tmp.tmp, 0);
+ add_SP_alias(st->Ist.Put.data->Iex.RdTmp.tmp, 0);
continue;
}
=20
@@ -403,9 +403,9 @@
}
=20
/* well, not interesting. Just copy and keep going. */
- addStmtToIRBB( bb, st );
+ addStmtToIRSB( bb, st );
=20
- } /* for (i =3D 0; i < bb_in->stmts_used; i++) */
+ } /* for (i =3D 0; i < sb_in->stmts_used; i++) */
=20
return bb;
=20
@@ -617,11 +617,11 @@
redir stack, checking for stack overflow and generating code to
bomb out if so. */
=20
-static void gen_PUSH ( IRBB* bb, IRExpr* e )
+static void gen_PUSH ( IRSB* bb, IRExpr* e )
{
- IRArray* descr;
- IRTemp t1;
- IRExpr* one;
+ IRRegArray* descr;
+ IRTemp t1;
+ IRExpr* one;
=20
# if defined(VGP_ppc64_linux) || defined(VGP_ppc64_aix5)
Int stack_size =3D VEX_GUEST_PPC64_REDIR_STACK_SIZE;
@@ -655,16 +655,16 @@
vg_assert(sizeof(Word) =3D=3D VG_WORDSIZE);
vg_assert(sizeof(Addr) =3D=3D VG_WORDSIZE);
=20
- descr =3D mkIRArray( offB_REDIR_STACK, ty_Word, stack_size );
+ descr =3D mkIRRegArray( offB_REDIR_STACK, ty_Word, stack_size );
t1 =3D newIRTemp( bb->tyenv, ty_Word );
one =3D mkU(1);
=20
vg_assert(typeOfIRExpr(bb->tyenv, e) =3D=3D ty_Word);
=20
/* t1 =3D guest_REDIR_SP + 1 */
- addStmtToIRBB(
+ addStmtToIRSB(
bb,=20
- IRStmt_Tmp(
+ IRStmt_WrTmp(
t1,=20
IRExpr_Binop(op_Add, IRExpr_Get( offB_REDIR_SP, ty_Word ), one)
)
@@ -675,18 +675,18 @@
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(
+ addStmtToIRSB(
bb,
IRStmt_Put(offB_EMWARN, mkU32(EmWarn_PPC64_redir_overflow))
);
- addStmtToIRBB(
+ addStmtToIRSB(
bb,
IRStmt_Exit(
IRExpr_Binop(
op_CmpNE,
IRExpr_Binop(
op_Sar,
- IRExpr_Binop(op_Sub,mkU(stack_size-1),IRExpr_Tmp(t1)),
+ IRExpr_Binop(op_Sub,mkU(stack_size-1),IRExpr_RdTmp(t1)),
mkU8(8 * VG_WORDSIZE - 1)
),
mkU(0)
@@ -697,13 +697,13 @@
);
=20
/* guest_REDIR_SP =3D t1 */
- addStmtToIRBB(bb, IRStmt_Put(offB_REDIR_SP, IRExpr_Tmp(t1)));
+ addStmtToIRSB(bb, IRStmt_Put(offB_REDIR_SP, IRExpr_RdTmp(t1)));
=20
/* guest_REDIR_STACK[t1+0] =3D e */
/* PutI/GetI have I32-typed indexes regardless of guest word size */
- addStmtToIRBB(
+ addStmtToIRSB(
bb,=20
- IRStmt_PutI(descr, narrowTo32(bb->tyenv,IRExpr_Tmp(t1)), 0, e)
+ IRStmt_PutI(descr, narrowTo32(bb->tyenv,IRExpr_RdTmp(t1)), 0, e)
);
}
=20
@@ -712,7 +712,7 @@
stack, binding it to a new temporary, which is returned. As with
gen_PUSH, an overflow check is also performed. */
=20
-static IRTemp gen_POP ( IRBB* bb )
+static IRTemp gen_POP ( IRSB* bb )
{
# if defined(VGP_ppc64_linux) || defined(VGP_ppc64_aix5)
Int stack_size =3D VEX_GUEST_PPC64_REDIR_STACK_SIZE;
@@ -738,34 +738,34 @@
IRExpr*(*mkU)(UInt) =3D mkU32;
# endif
=20
- IRArray* descr =3D mkIRArray( offB_REDIR_STACK, ty_Word, stack_size )=
;
- IRTemp t1 =3D newIRTemp( bb->tyenv, ty_Word );
- IRTemp res =3D newIRTemp( bb->tyenv, ty_Word );
- IRExpr* one =3D mkU(1);
+ IRRegArray* descr =3D mkIRRegArray( offB_REDIR_STACK, ty_Word, stack_=
size );
+ IRTemp t1 =3D newIRTemp( bb->tyenv, ty_Word );
+ IRTemp res =3D newIRTemp( bb->tyenv, ty_Word );
+ IRExpr* one =3D mkU(1);
=20
vg_assert(sizeof(void*) =3D=3D VG_WORDSIZE);
vg_assert(sizeof(Word) =3D=3D VG_WORDSIZE);
vg_assert(sizeof(Addr) =3D=3D VG_WORDSIZE);
=20
/* t1 =3D guest_REDIR_SP */
- addStmtToIRBB(
+ addStmtToIRSB(
bb,=20
- IRStmt_Tmp( t1, IRExpr_Get( offB_REDIR_SP, ty_Word ) )
+ IRStmt_WrTmp( t1, IRExpr_Get( offB_REDIR_SP, ty_Word ) )
);
=20
/* Bomb out if t1 < 0. Same comments as gen_PUSH apply. */
- addStmtToIRBB(
+ addStmtToIRSB(
bb,
IRStmt_Put(offB_EMWARN, mkU32(EmWarn_PPC64_redir_underflow))
);
- addStmtToIRBB(
+ addStmtToIRSB(
bb,
IRStmt_Exit(
IRExpr_Binop(
op_CmpNE,
IRExpr_Binop(
op_Sar,
- IRExpr_Tmp(t1),
+ IRExpr_RdTmp(t1),
mkU8(8 * VG_WORDSIZE - 1)
),
mkU(0)
@@ -777,18 +777,18 @@
=20
/* res =3D guest_REDIR_STACK[t1+0] */
/* PutI/GetI have I32-typed indexes regardless of guest word size */
- addStmtToIRBB(
+ addStmtToIRSB(
bb,
- IRStmt_Tmp(
+ IRStmt_WrTmp(
res,=20
- IRExpr_GetI(descr, narrowTo32(bb->tyenv,IRExpr_Tmp(t1)), 0)
+ IRExpr_GetI(descr, narrowTo32(bb->tyenv,IRExpr_RdTmp(t1)), 0)
)
);
=20
/* guest_REDIR_SP =3D t1-1 */
- addStmtToIRBB(
+ addStmtToIRSB(
bb,=20
- IRStmt_Put(offB_REDIR_SP, IRExpr_Binop(op_Sub, IRExpr_Tmp(t1), one=
))
+ IRStmt_Put(offB_REDIR_SP, IRExpr_Binop(op_Sub, IRExpr_RdTmp(t1), o=
ne))
);
=20
return res;
@@ -801,7 +801,7 @@
intercept the return and restore R2 and L2 to the values saved
here. */
=20
-static void gen_push_and_set_LR_R2 ( IRBB* bb, Addr64 new_R2_value )
+static void gen_push_and_set_LR_R2 ( IRSB* bb, Addr64 new_R2_value )
{
# if defined(VGP_ppc64_linux) || defined(VGP_ppc64_aix5)
Addr64 bogus_RA =3D (Addr64)&VG_(ppctoc_magic_redirect_return_stub);
@@ -809,8 +809,8 @@
Int offB_LR =3D offsetof(VexGuestPPC64State,guest_LR);
gen_PUSH( bb, IRExpr_Get(offB_LR, Ity_I64) );
gen_PUSH( bb, IRExpr_Get(offB_GPR2, Ity_I64) );
- addStmtToIRBB( bb, IRStmt_Put( offB_LR, mkU64( bogus_RA )) );
- addStmtToIRBB( bb, IRStmt_Put( offB_GPR2, mkU64( new_R2_value )) );
+ addStmtToIRSB( bb, IRStmt_Put( offB_LR, mkU64( bogus_RA )) );
+ addStmtToIRSB( bb, IRStmt_Put( offB_GPR2, mkU64( new_R2_value )) );
=20
# elif defined(VGP_ppc32_aix5)
Addr32 bogus_RA =3D (Addr32)&VG_(ppctoc_magic_redirect_return_stub);
@@ -818,15 +818,15 @@
Int offB_LR =3D offsetof(VexGuestPPC32State,guest_LR);
gen_PUSH( bb, IRExpr_Get(offB_LR, Ity_I32) );
gen_PUSH( bb, IRExpr_Get(offB_GPR2, Ity_I32) );
- addStmtToIRBB( bb, IRStmt_Put( offB_LR, mkU32( bogus_RA )) );
- addStmtToIRBB( bb, IRStmt_Put( offB_GPR2, mkU32( new_R2_value )) );
+ addStmtToIRSB( bb, IRStmt_Put( offB_LR, mkU32( bogus_RA )) );
+ addStmtToIRSB( bb, IRStmt_Put( offB_GPR2, mkU32( new_R2_value )) );
=20
# else
# error Platform is not TOC-afflicted, fortunately
# endif
}
=20
-static void gen_pop_R2_LR_then_bLR ( IRBB* bb )
+static void gen_pop_R2_LR_then_bLR ( IRSB* bb )
{
# if defined(VGP_ppc64_linux) || defined(VGP_ppc64_aix5)
Int offB_GPR2 =3D offsetof(VexGuestPPC64State,guest_GPR2);
@@ -835,16 +835,16 @@
IRTemp old_LR =3D newIRTemp( bb->tyenv, Ity_I64 );
/* Restore R2 */
old_R2 =3D gen_POP( bb );
- addStmtToIRBB( bb, IRStmt_Put( offB_GPR2, IRExpr_Tmp(old_R2)) );
+ addStmtToIRSB( bb, IRStmt_Put( offB_GPR2, IRExpr_RdTmp(old_R2)) );
/* Restore LR */
old_LR =3D gen_POP( bb );
- addStmtToIRBB( bb, IRStmt_Put( offB_LR, IRExpr_Tmp(old_LR)) );
+ addStmtToIRSB( bb, IRStmt_Put( offB_LR, IRExpr_RdTmp(old_LR)) );
/* Branch to LR */
/* re boring, we arrived here precisely because a wrapped fn did a
blr (hence Ijk_Ret); so we should just mark this jump as Boring,
else one _Call will have resulted in two _Rets. */
bb->jumpkind =3D Ijk_Boring;
- bb->next =3D IRExpr_Binop(Iop_And64, IRExpr_Tmp(old_LR), mkU64(~(3ULL=
)));
+ bb->next =3D IRExpr_Binop(Iop_And64, IRExpr_RdTmp(old_LR), mkU64(~(3U=
LL)));
=20
# elif defined(VGP_ppc32_aix5)
Int offB_GPR2 =3D offsetof(VexGuestPPC32State,guest_GPR2);
@@ -853,17 +853,17 @@
IRTemp old_LR =3D newIRTemp( bb->tyenv, Ity_I32 );
/* Restore R2 */
old_R2 =3D gen_POP( bb );
- addStmtToIRBB( bb, IRStmt_Put( offB_GPR2, IRExpr_Tmp(old_R2)) );
+ addStmtToIRSB( bb, IRStmt_Put( offB_GPR2, IRExpr_RdTmp(old_R2)) );
/* Restore LR */
old_LR =3D gen_POP( bb );
- addStmtToIRBB( bb, IRStmt_Put( offB_LR, IRExpr_Tmp(old_LR)) );
+ addStmtToIRSB( bb, IRStmt_Put( offB_LR, IRExpr_RdTmp(old_LR)) );
=20
/* Branch to LR */
/* re boring, we arrived here precisely because a wrapped fn did a
blr (hence Ijk_Ret); so we should just mark this jump as Boring,
else one _Call will have resulted in two _Rets. */
bb->jumpkind =3D Ijk_Boring;
- bb->next =3D IRExpr_Binop(Iop_And32, IRExpr_Tmp(old_LR), mkU32(~3));
+ bb->next =3D IRExpr_Binop(Iop_And32, IRExpr_RdTmp(old_LR), mkU32(~3))=
;
=20
# else
# error Platform is not TOC-afflicted, fortunately
@@ -871,13 +871,13 @@
}
=20
static
-Bool mk_preamble__ppctoc_magic_return_stub ( void* closureV, IRBB* bb )
+Bool mk_preamble__ppctoc_magic_return_stub ( void* closureV, IRSB* bb )
{
VgCallbackClosure* closure =3D (VgCallbackClosure*)closureV;
- /* Since we're creating the entire IRBB right here, give it a
+ /* Since we're creating the entire IRSB right here, give it a
proper IMark, as it won't get one any other way, and cachegrind
will barf if it doesn't have one (fair enough really). */
- addStmtToIRBB( bb, IRStmt_IMark( closure->readdr, 4 ) );
+ addStmtToIRSB( bb, IRStmt_IMark( closure->readdr, 4 ) );
/* Generate the magic sequence:
pop R2 from hidden stack
pop LR from hidden stack
@@ -911,13 +911,13 @@
return stub address, and that in that case it can get the real LR
value from the hidden stack instead. */
static=20
-Bool mk_preamble__set_NRADDR_to_zero ( void* closureV, IRBB* bb )
+Bool mk_preamble__set_NRADDR_to_zero ( void* closureV, IRSB* bb )
{
Int nraddr_szB
=3D sizeof(((VexGuestArchState*)0)->guest_NRADDR);
vg_assert(nraddr_szB =3D=3D 4 || nraddr_szB =3D=3D 8);
vg_assert(nraddr_szB =3D=3D VG_WORDSIZE);
- addStmtToIRBB(=20
+ addStmtToIRSB(=20
bb,
IRStmt_Put(=20
offsetof(VexGuestArchState,guest_NRADDR),
@@ -926,7 +926,7 @@
);
# if defined(VG_PLAT_USES_PPCTOC)
{ VgCallbackClosure* closure =3D (VgCallbackClosure*)closureV;
- addStmtToIRBB(
+ addStmtToIRSB(
bb,
IRStmt_Put(
offsetof(VexGuestArchState,guest_NRADDR_GPR2),
@@ -944,14 +944,14 @@
can read _NRADDR and find the address of the function being
wrapped. On toc-afflicted platforms we must also snarf r2. */
static=20
-Bool mk_preamble__set_NRADDR_to_nraddr ( void* closureV, IRBB* bb )
+Bool mk_preamble__set_NRADDR_to_nraddr ( void* closureV, IRSB* bb )
{
VgCallbackClosure* closure =3D (VgCallbackClosure*)closureV;
Int nraddr_szB
=3D sizeof(((VexGuestArchState*)0)->guest_NRADDR);
vg_assert(nraddr_szB =3D=3D 4 || nraddr_szB =3D=3D 8);
vg_assert(nraddr_szB =3D=3D VG_WORDSIZE);
- addStmtToIRBB(=20
+ addStmtToIRSB(=20
bb,
IRStmt_Put(=20
offsetof(VexGuestArchState,guest_NRADDR),
@@ -962,7 +962,7 @@
);
# if defined(VGP_ppc64_linux) || defined(VGP_ppc32_aix5) \
|| defined(VGP_ppc64_aix5)
- addStmtToIRBB(=20
+ addStmtToIRSB(=20
bb,
IRStmt_Put(=20
offsetof(VexGuestArchState,guest_NRADDR_GPR2),
@@ -1067,10 +1067,10 @@
Int tmpbuf_used, verbosity, i;
Bool notrace_until_done, do_self_check;
UInt notrace_until_limit =3D 0;
- Bool (*preamble_fn)(void*,IRBB*);
+ Bool (*preamble_fn)(void*,IRSB*);
VexArch vex_arch;
VexArchInfo vex_archinfo;
- VexMiscInfo vex_miscinfo;
+ VexAbiInfo vex_abiinfo;
VexGuestExtents vge;
VexTranslateArgs vta;
VexTranslateResult tres;
@@ -1217,27 +1217,27 @@
/* Get the CPU info established at startup. */
VG_(machine_get_VexArchInfo)( &vex_arch, &vex_archinfo );
=20
- /* Set up 'misc info' structure with stuff Vex needs to know about
+ /* Set up 'abiinfo' structure with stuff Vex needs to know about
the guest and host ABIs. */
=20
- LibVEX_default_VexMiscInfo( &vex_miscinfo );
- vex_miscinfo.guest_stack_redzone_size =3D VG_STACK_REDZONE_SZB;
+ LibVEX_default_VexAbiInfo( &vex_abiinfo );
+ vex_abiinfo.guest_stack_redzone_size =3D VG_STACK_REDZONE_SZB;
=20
# if defined(VGP_ppc32_linux)
- vex_miscinfo.guest_ppc_zap_RZ_at_blr =3D False;
- vex_miscinfo.guest_ppc_zap_RZ_at_bl =3D NULL;
- vex_miscinfo.host_ppc32_regalign_int64_args =3D True;
+ vex_abiinfo.guest_ppc_zap_RZ_at_blr =3D False;
+ vex_abiinfo.guest_ppc_zap_RZ_at_bl =3D NULL;
+ vex_abiinfo.host_ppc32_regalign_int64_args =3D True;
# endif
# if defined(VGP_ppc64_linux)
- vex_miscinfo.guest_ppc_zap_RZ_at_blr =3D True;
- vex_miscinfo.guest_ppc_zap_RZ_at_bl =3D const_True;
- vex_miscinfo.host_ppc_calls_use_fndescrs =3D True;
+ vex_abiinfo.guest_ppc_zap_RZ_at_blr =3D True;
+ vex_abiinfo.guest_ppc_zap_RZ_at_bl =3D const_True;
+ vex_abiinfo.host_ppc_calls_use_fndescrs =3D True;
# endif
# if defined(VGP_ppc32_aix5) || defined(VGP_ppc64_aix5)
- vex_miscinfo.guest_ppc_zap_RZ_at_blr =3D False;
- vex_miscinfo.guest_ppc_zap_RZ_at_bl =3D bl_RZ_zap_ok_for_AIX;
- vex_miscinfo.guest_ppc_sc_continues_at_LR =3D True;
- vex_miscinfo.host_ppc_calls_use_fndescrs =3D True;
+ vex_abiinfo.guest_ppc_zap_RZ_at_blr =3D False;
+ vex_abiinfo.guest_ppc_zap_RZ_at_bl =3D bl_RZ_zap_ok_for_AIX;
+ vex_abiinfo.guest_ppc_sc_continues_at_LR =3D True;
+ vex_abiinfo.host_ppc_calls_use_fndescrs =3D True;
# endif
=20
/* Set up closure args. */
@@ -1250,7 +1250,7 @@
vta.archinfo_guest =3D vex_archinfo;
vta.arch_host =3D vex_arch;
vta.archinfo_host =3D vex_archinfo;
- vta.miscinfo_both =3D vex_miscinfo;
+ vta.abiinfo_both =3D vex_abiinfo;
vta.guest_bytes =3D (UChar*)ULong_to_Ptr(addr);
vta.guest_bytes_addr =3D (Addr64)addr;
vta.callback_opaque =3D (void*)&closure;
@@ -1266,14 +1266,14 @@
VgCallbackClosure*. Hence the following longwinded casts.
They are entirely legal but longwinded so as to maximise the
chance of the C typechecker picking up any type snafus. */
- IRBB*(*f)(VgCallbackClosure*,
- IRBB*,VexGuestLayout*,VexGuestExtents*,
+ IRSB*(*f)(VgCallbackClosure*,
+ IRSB*,VexGuestLayout*,VexGuestExtents*,
IRType,IRType)
=3D VG_(tdict).tool_instrument;
- IRBB*(*g)(void*,
- IRBB*,VexGuestLayout*,VexGuestExtents*,
+ IRSB*(*g)(void*,
+ IRSB*,VexGuestLayout*,VexGuestExtents*,
IRType,IRType)
- =3D (IRBB*(*)(void*,IRBB*,VexGuestLayout*,VexGuestExtents*,IRType=
,IRType))f;
+ =3D (IRSB*(*)(void*,IRSB*,VexGuestLayout*,VexGuestExtents*,IRType=
,IRType))f;
vta.instrument1 =3D g;
}
/* No need for type kludgery here. */
Modified: trunk/coregrind/m_transtab.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_transtab.c 2006-12-24 02:21:49 UTC (rev 6415)
+++ trunk/coregrind/m_transtab.c 2006-12-24 02:24:11 UTC (rev 6416)
@@ -701,8 +701,8 @@
vg_assert(sec->tt[i].n_tte2ec <=3D 3);
n_dump_osize +=3D vge_osize(&sec->tt[i].vge);
/* Tell the tool too. */
- if (VG_(needs).basic_block_discards) {
- VG_TDICT_CALL( tool_discard_basic_block_info,
+ if (VG_(needs).superblock_discards) {
+ VG_TDICT_CALL( tool_discard_superblock_info,
sec->tt[i].entry,
sec->tt[i].vge );
}
@@ -1034,8 +1034,8 @@
n_disc_osize +=3D vge_osize(&tte->vge);
=20
/* Tell the tool too. */
- if (VG_(needs).basic_block_discards) {
- VG_TDICT_CALL( tool_discard_basic_block_info,
+ if (VG_(needs).superblock_discards) {
+ VG_TDICT_CALL( tool_discard_superblock_info,
tte->entry,
tte->vge );
}
Modified: trunk/coregrind/pub_core_tooliface.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/coregrind/pub_core_tooliface.h 2006-12-24 02:21:49 UTC (rev 641=
5)
+++ trunk/coregrind/pub_core_tooliface.h 2006-12-24 02:24:11 UTC (rev 641=
6)
@@ -83,7 +83,7 @@
Bool libc_freeres;
Bool core_errors;
Bool tool_errors;
- Bool basic_block_discards;
+ Bool superblock_discards;
Bool command_line_options;
Bool client_requests;
Bool syscall_wrapper;
@@ -105,8 +105,8 @@
// Basic functions
void (*tool_pre_clo_init) (void);
void (*tool_post_clo_init)(void);
- IRBB* (*tool_instrument) (VgCallbackClosure*,
- IRBB*,=20
+ IRSB* (*tool_instrument) (VgCallbackClosure*,
+ IRSB*,=20
VexGuestLayout*, VexGuestExtents*,=20
IRType, IRType);
void (*tool_fini) (Int);
@@ -124,8 +124,8 @@
Char* (*tool_get_error_name) (Error*);
void (*tool_print_extra_suppression_info)(Error*);
=20
- // VG_(needs).basic_block_discards
- void (*tool_discard_basic_block_info)(Addr64, VexGuestExtents);
+ // VG_(needs).superblock_discards
+ void (*tool_discard_superblock_info)(Addr64, VexGuestExtents);
=20
// VG_(needs).command_line_options
Bool (*tool_process_cmd_line_option)(Char*);
Modified: trunk/helgrind/hg_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/helgrind/hg_main.c 2006-12-24 02:21:49 UTC (rev 6415)
+++ trunk/helgrind/hg_main.c 2006-12-24 02:24:11 UTC (rev 6416)
@@ -2297,8 +2297,8 @@
}
#endif
static
-IRBB* hg_instrument ( VgCallbackClosure* closure,
- IRBB* bb,
+IRSB* hg_instrument ( VgCallbackClosure* closure,
+ IRSB* bb,
VexGuestLayout* layout,=20
VexGuestExtents* vge,
IRType gWordTy, IRType hWordTy )
Modified: trunk/include/pub_tool_tooliface.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_tooliface.h 2006-12-24 02:21:49 UTC (rev 6415)
+++ trunk/include/pub_tool_tooliface.h 2006-12-24 02:24:11 UTC (rev 6416)
@@ -130,8 +130,8 @@
// with code addresses it will get into deep trouble if it does
// make this assumption.
//
- // IRBB* bb_in is the incoming bb to be instrumented, in flat IR
- // form.
+ // IRSB* sb_in is the incoming superblock to be instrumented,
+ // in flat IR form.
//
// VexGuestLayout* layout contains limited info on the layout of
// the guest state: where the stack pointer and program counter
@@ -232,8 +232,8 @@
comment in MC_(instrument) in memcheck/mc_translate.c for
details.
*/
- IRBB*(*instrument)(VgCallbackClosure* closure,=20
- IRBB* bb_in,=20
+ IRSB*(*instrument)(VgCallbackClosure* closure,=20
+ IRSB* sb_in,=20
VexGuestLayout* layout,=20
VexGuestExtents* vge,=20
IRType gWordTy,=20
@@ -345,7 +345,7 @@
.so unloading, or otherwise at the discretion of m_transtab, eg
when the table becomes too full) to avoid stale information being
reused for new translations. */
-extern void VG_(needs_basic_block_discards) (
+extern void VG_(needs_superblock_discards) (
// Discard any information that pertains to specific translations
// or instructions within the address range given. There are two
// possible approaches.
@@ -362,7 +362,7 @@
// translation, and so could be covered by the "extents" of more th=
an
// one call to this function.
// Doing it the first way (as eg. Cachegrind does) is probably easier=
.
- void (*discard_basic_block_info)(Addr64 orig_addr, VexGuestExtents ex=
tents)
+ void (*discard_superblock_info)(Addr64 orig_addr, VexGuestExtents ext=
ents)
);
=20
/* Tool defines its own command line options? */
Modified: trunk/lackey/lk_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/lackey/lk_main.c 2006-12-24 02:21:49 UTC (rev 6415)
+++ trunk/lackey/lk_main.c 2006-12-24 02:24:11 UTC (rev 6416)
@@ -302,7 +302,7 @@
}
=20
/* A helper that adds the instrumentation for a detail. */
-static void instrument_detail(IRBB* bb, Op op, IRType type)
+static void instrument_detail(IRSB* bb, Op op, IRType type)
{
IRDirty* di;
IRExpr** argv;
@@ -315,7 +315,7 @@
di =3D unsafeIRDirty_0_N( 1, "increment_detail",
VG_(fnptr_to_fnentry)( &increment_detail )=
,=20
argv);
- addStmtToIRBB( bb, IRStmt_Dirty(di) );
+ addStmtToIRSB( bb, IRStmt_Dirty(di) );
}
=20
/* Summarize and print the details. */
@@ -417,7 +417,7 @@
}
=20
=20
-static void flushEvents(IRBB* bb)
+static void flushEvents(IRSB* bb)
{
Int i;
Char* helperName;
@@ -452,7 +452,7 @@
di =3D unsafeIRDirty_0_N( /*regparms*/2,=20
helperName, VG_(fnptr_to_fnentry)( helpe=
rAddr ),
argv );
- addStmtToIRBB( bb, IRStmt_Dirty(di) );
+ addStmtToIRSB( bb, IRStmt_Dirty(di) );
}
=20
events_used =3D 0;
@@ -463,7 +463,7 @@
// must still call this function, addEvent_Ir() -- it is necessary to ad=
d
// the Ir events to the events list so that merging of paired load/store
// events into modify events works correctly.
-static void addEvent_Ir ( IRBB* bb, IRAtom* iaddr, UInt isize )
+static void addEvent_Ir ( IRSB* bb, IRAtom* iaddr, UInt isize )
{
Event* evt;
tl_assert( (VG_MIN_INSTR_SZB <=3D isize && isize <=3D VG_MAX_INSTR_SZ=
B)
@@ -479,7 +479,7 @@
}
=20
static
-void addEvent_Dr ( IRBB* bb, IRAtom* daddr, Int dsize )
+void addEvent_Dr ( IRSB* bb, IRAtom* daddr, Int dsize )
{
Event* evt;
tl_assert(isIRAtom(daddr));
@@ -495,7 +495,7 @@
}
=20
static
-void addEvent_Dw ( IRBB* bb, IRAtom* daddr, Int dsize )
+void addEvent_Dw ( IRSB* bb, IRAtom* daddr, Int dsize )
{
Event* lastEvt;
Event* evt;
@@ -541,15 +541,15 @@
}
=20
static
-IRBB* lk_instrument ( VgCallbackClosure* closure,
- IRBB* bbIn,=20
+IRSB* lk_instrument ( VgCallbackClosure* closure,
+ IRSB* bbIn,=20
VexGuestLayout* layout,=20
VexGuestExtents* vge,
IRType gWordTy, IRType hWordTy )
{
IRDirty* di;
Int i;
- IRBB* bbOut;
+ IRSB* bbOut;
Char fnname[100];
IRType type;
IRTypeEnv* tyenv =3D bbIn->tyenv;
@@ -560,12 +560,12 @@
}
=20
/* Set up BB */
- bbOut =3D dopyIRBBExceptStmts(bbIn);
+ bbOut =3D deepCopyIRSBExceptStmts(bbIn);
=20
// Copy verbatim any IR preamble preceding the first IMark
i =3D 0;
while (i < bbIn->stmts_used && bbIn->stmts[i]->tag !=3D Ist_IMark) {
- addStmtToIRBB( bbOut, bbIn->stmts[i] );
+ addStmtToIRSB( bbOut, bbIn->stmts[i] );
i++;
}
=20
@@ -574,7 +574,7 @@
di =3D unsafeIRDirty_0_N( 0, "add_one_BB_entered",=20
VG_(fnptr_to_fnentry)( &add_one_BB_ente=
red ),
mkIRExprVec_0() );
- addStmtToIRBB( bbOut, IRStmt_Dirty(di) );
+ addStmtToIRSB( bbOut, IRStmt_Dirty(di) );
}
=20
if (clo_trace_mem) {
@@ -590,7 +590,7 @@
di =3D unsafeIRDirty_0_N( 0, "add_one_IRStmt",=20
VG_(fnptr_to_fnentry)( &add_one_IRSt=
mt ),=20
mkIRExprVec_0() );
- addStmtToIRBB( bbOut, IRStmt_Dirty(di) );
+ addStmtToIRSB( bbOut, IRStmt_Dirty(di) );
}
=20
switch (st->tag) {
@@ -599,7 +599,7 @@
case Ist_Put:
case Ist_PutI:
case Ist_MFence:
- addStmtToIRBB( bbOut, st );
+ addStmtToIRSB( bbOut, st );
break;
=20
case Ist_IMark:
@@ -608,10 +608,10 @@
di =3D unsafeIRDirty_0_N( 0, "add_one_guest_instr",
VG_(fnptr_to_fnentry)( &add_on=
e_guest_instr ),=20
mkIRExprVec_0() );
- addStmtToIRBB( bbOut, IRStmt_Dirty(di) );
+ addStmtToIRSB( bbOut, IRStmt_Dirty(di) );
=20
/* An unconditional branch to a known destination in the
- * guest's instructions can be represented, in the IRBB t=
o
+ * guest's instructions can be represented, in the IRSB t=
o
* instrument, by the VEX statements that are the
* translation of that known destination. This feature is
* called 'BB chasing' and can be influenced by command
@@ -631,7 +631,7 @@
0, "add_one_func_call",=20
VG_(fnptr_to_fnentry)( &add_one_func_call )=
,=20
mkIRExprVec_0() );
- addStmtToIRBB( bbOut, IRStmt_Dirty(di) );
+ addStmtToIRSB( bbOut, IRStmt_Dirty(di) );
}
}
if (clo_trace_mem) {
@@ -641,20 +641,20 @@
addEvent_Ir( bbOut, mkIRExpr_HWord( (HWord)st->Ist.IMark.=
addr ),
st->Ist.IMark.len );
}
- addStmtToIRBB( bbOut, st );
+ addStmtToIRSB( bbOut, st );
break;
=20
- case Ist_Tmp:
+ case Ist_WrTmp:
// Add a call to trace_load() if --trace-mem=3Dyes.
if (clo_trace_mem) {
- IRExpr* data =3D st->Ist.Tmp.data;
+ IRExpr* data =3D st->Ist.WrTmp.data;
if (data->tag =3D=3D Iex_Load) {
addEvent_Dr( bbOut, data->Iex.Load.addr,
sizeofIRType(data->Iex.Load.ty) );
}
}
if (clo_detailed_counts) {
- IRExpr* expr =3D st->Ist.Tmp.data;
+ IRExpr* expr =3D st->Ist.WrTmp.data;
type =3D typeOfIRExpr(bbOut->tyenv, expr);
tl_assert(type !=3D Ity_INVALID);
switch (expr->tag) {
@@ -672,7 +672,7 @@
break;
}
}
- addStmtToIRBB( bbOut, st );
+ addStmtToIRSB( bbOut, st );
break;
=20
case Ist_Store:
@@ -686,7 +686,7 @@
tl_assert(type !=3D Ity_INVALID);
instrument_detail( bbOut, OpStore, type );
}
- addStmtToIRBB( bbOut, st );
+ addStmtToIRSB( bbOut, st );
break;
=20
case Ist_Dirty: {
@@ -705,7 +705,7 @@
tl_assert(d->mAddr =3D=3D NULL);
tl_assert(d->mSize =3D=3D 0);
}
- addStmtToIRBB( bbOut, st );
+ addStmtToIRSB( bbOut, st );
break;
}
=20
@@ -715,13 +715,13 @@
di =3D unsafeIRDirty_0_N( 0, "add_one_Jcc",=20
VG_(fnptr_to_fnentry)( &add_on=
e_Jcc ),=20
mkIRExprVec_0() );
- addStmtToIRBB( bbOut, IRStmt_Dirty(di) );
+ addStmtToIRSB( bbOut, IRStmt_Dirty(di) );
}
if (clo_trace_mem) {
flushEvents(bbOut);
}
=20
- addStmtToIRBB( bbOut, st ); // Original statement
+ addStmtToIRSB( bbOut, st ); // Original statement
=20
if (clo_basic_counts) {
/* Count non-taken Jcc */
@@ -729,7 +729,7 @@
VG_(fnptr_to_fnentry)(
&add_one_Jcc_untaken ),
mkIRExprVec_0() );
- addStmtToIRBB( bbOut, IRStmt_Dirty(di) );
+ addStmtToIRSB( bbOut, IRStmt_Dirty(di) );
}
break;
=20
@@ -743,7 +743,7 @@
di =3D unsafeIRDirty_0_N( 0, "add_one_BB_completed",=20
VG_(fnptr_to_fnentry)( &add_one_BB_comp=
leted ),
mkIRExprVec_0() );
- addStmtToIRBB( bbOut, IRStmt_Dirty(di) );
+ addStmtToIRSB( bbOut, IRStmt_Dirty(di) );
}
=20
if (clo_trace_mem) {
Modified: trunk/massif/ms_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/massif/ms_main.c 2006-12-24 02:21:49 UTC (rev 6415)
+++ trunk/massif/ms_main.c 2006-12-24 02:24:11 UTC (rev 6416)
@@ -1096,8 +1096,8 @@
/*------------------------------------------------------------*/
=20
static
-IRBB* ms_instrument ( VgCallbackClosure* closure,
- IRBB* bb_in,=20
+IRSB* ms_instrument ( VgCallbackClosure* closure,
+ IRSB* bb_in,=20
VexGuestLayout* layout,=20
VexGuestExtents* vge,
IRType gWordTy, IRType hWordTy )
Modified: trunk/memcheck/mc_include.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/memcheck/mc_include.h 2006-12-24 02:21:49 UTC (rev 6415)
+++ trunk/memcheck/mc_include.h 2006-12-24 02:24:11 UTC (rev 6416)
@@ -314,8 +314,8 @@
=20
/* Functions defined in mc_translate.c */
extern
-IRBB* MC_(instrument) ( VgCallbackClosure* closure,
- IRBB* bb_in,=20
+IRSB* MC_(instrument) ( VgCallbackClosure* closure,
+ IRSB* bb_in,=20
VexGuestLayout* layout,=20
VexGuestExtents* vge,
IRType gWordTy, IRType hWordTy );
Modified: trunk/memcheck/mc_translate.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/memcheck/mc_translate.c 2006-12-24 02:21:49 UTC (rev 6415)
+++ trunk/memcheck/mc_translate.c 2006-12-24 02:24:11 UTC (rev 6416)
@@ -69,8 +69,9 @@
/* Carries around state during memcheck instrumentation. */
typedef
struct _MCEnv {
- /* MODIFIED: the bb being constructed. IRStmts are added. */
- IRBB* bb;
+ /* MODIFIED: the superblock being constructed. IRStmts are
+ added. */
+ IRSB* bb;
=20
/* MODIFIED: a table [0 .. #temps_in_original_bb-1] which maps
original temps to their current their current shadow temp.
@@ -169,7 +170,7 @@
{
if (a1->tag =3D=3D Iex_Const)
return True;
- if (a1->tag =3D=3D Iex_Tmp && a1->Iex.Tmp.tmp < mc...
[truncated message content] |
|
From: <sv...@va...> - 2006-12-24 02:21:52
|
Author: sewardj Date: 2006-12-24 02:21:49 +0000 (Sun, 24 Dec 2006) New Revision: 6415 Log: Update. Modified: trunk/docs/internals/3_2_BUGSTATUS.txt Modified: trunk/docs/internals/3_2_BUGSTATUS.txt =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=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/docs/internals/3_2_BUGSTATUS.txt 2006-12-23 23:11:20 UTC (rev 6= 414) +++ trunk/docs/internals/3_2_BUGSTATUS.txt 2006-12-24 02:21:49 UTC (rev 6= 415) @@ -90,10 +90,15 @@ r6374 pending n-i-bz make User errors suppressible (XXX: DOCS!= ) =20 r6377/8 pending 136844 corrupted malloc line when using=20 - --gen-suppressions=3Dyes + =3D=3D138507 --gen-suppressions=3Dyes =20 vx1686 pending n-i-bz Reg-alloc speedups =20 +r6382/3 pending n-i-bz Fix confusing leak-checker flag hints + +r6384 r6385 n-i-bz Support recent autoswamp versions + + 135026 valgrind incorrectly complain that shm_nattch is uninitialized 135264 dcbzl instruction missing 136059 patch to add better support for some USB ioctls @@ -114,7 +119,9 @@ ppc64 bigpage stuff lackey trace-mem patch ? (6 dec, dev) =20 +jm-insns fixes (r6404/5) -> stable =20 + ------- Bugs reported and fixed in 3.2.0 ------ =20 SSE3 commits: vx1635,1636, v5997 |
Author: sewardj Date: 2006-12-24 02:20:24 +0000 (Sun, 24 Dec 2006) New Revision: 1689 Log: A large but non-functional commit: as suggested by Nick, rename some IR types, structure fields and functions to make IR a bit easier to understand. Specifically: dopyIR* -> deepCopyIR* sopyIR* -> shallowCopyIR* The presence of a .Tmp union in both IRExpr and IRStmt is=20 confusing. It has been renamed to RdTmp in IRExpr, reflecting=20 the fact that here we are getting the value of an IRTemp, and to=20 WrTmp in IRStmt, reflecting the fact that here we are assigning=20 to an IRTemp. IRBB (IR Basic Block) is renamed to IRSB (IR SuperBlock), reflecting the reality that Vex does not really operate in terms of basic blocks, but in terms of superblocks - single entry, multiple exit sequences. IRArray is renamed to IRRegArray, to make it clearer it refers to arrays of guest registers and not arrays in memory. VexMiscInfo is renamed to VexAbiInfo, since that's what it is -- relevant facts about the ABI (calling conventions, etc) for both the guest and host platforms. Modified: trunk/priv/guest-amd64/gdefs.h trunk/priv/guest-amd64/toIR.c trunk/priv/guest-arm/gdefs.h trunk/priv/guest-arm/toIR.c trunk/priv/guest-generic/bb_to_IR.c trunk/priv/guest-generic/bb_to_IR.h trunk/priv/guest-ppc/gdefs.h trunk/priv/guest-ppc/toIR.c trunk/priv/guest-x86/gdefs.h trunk/priv/guest-x86/toIR.c trunk/priv/host-amd64/hdefs.h trunk/priv/host-amd64/isel.c trunk/priv/host-arm/hdefs.h trunk/priv/host-arm/isel.c trunk/priv/host-ppc/hdefs.h trunk/priv/host-ppc/isel.c trunk/priv/host-x86/hdefs.h trunk/priv/host-x86/isel.c trunk/priv/ir/irdefs.c trunk/priv/ir/iropt.c trunk/priv/ir/iropt.h trunk/priv/main/vex_main.c trunk/pub/libvex.h trunk/pub/libvex_ir.h trunk/test_main.c [... diff too large to include ...] |
|
From: <js...@ac...> - 2006-12-24 01:16:04
|
Nightly build on g5 ( SuSE 10.1, ppc970 ) started at 2006-12-24 02:00:01 CET Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 221 tests, 6 stderr failures, 2 stdout failures, 0 posttest failures == memcheck/tests/deep_templates (stdout) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/pointer-trace (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) |
|
From: Josef W. <Jos...@gm...> - 2006-12-24 00:12:03
|
On Sunday 24 December 2006 01:06, Nicholas Nethercote wrote: > > I think it would be better to split this into two separate events, "run" and > > "stop". I agree. > Attached is a patch. I renamed the events "start_client_code" and > "stop_client_code" since that seems a better description. I'll commit in > the next day or two if nobody objects. Looks fine. Merry Xmas, Josef > > Nick |
|
From: Nicholas N. <nj...@cs...> - 2006-12-24 00:06:40
|
On Sat, 23 Dec 2006, Nicholas Nethercote wrote: >> Log: >> Change the core-tool interface 'thread_run' event to be more useful: >> >> - Rename the event to 'thread_runstate'. >> >> - Add arguments: pass also a boolean indicating whether the thread >> is running or stopping, and a 64-bit int showing how many blocks >> overall have run, so tools can make a rough estimate of workload. >> >> The boolean allows tools to see threads starting and stopping. >> Prior to this, de-schedule events were invisible to tools. > > Running and stopping are quite different. I imagine most tools are always > going to have event handlers like this: > > if (is_running) > do_stuff_1 > else > do_stuff_2 > > I think it would be better to split this into two separate events, "run" and > "stop". Attached is a patch. I renamed the events "start_client_code" and "stop_client_code" since that seems a better description. I'll commit in the next day or two if nobody objects. Nick |
|
From: Nicholas N. <nj...@cs...> - 2006-12-24 00:02:50
|
On Sun, 24 Dec 2006, Nicholas Nethercote wrote: >> What is your opinion about this ? > > I think allowing thread naming is a good idea. I forgot to add: one difficulty is that it involves changing Memcheck's error messages, and several tools (eg. GUI front-ends) take those messages as input, in text or XML form. However, there may be some other changes to Memcheck's error messages in 3.3.0 anyway, so maybe it's not a big deal. N |
|
From: Nicholas N. <nj...@cs...> - 2006-12-23 23:58:59
|
On Sat, 23 Dec 2006, Bart Van Assche wrote:
> Apparently it is not yet clear why I proposed to add the capability of
> associating names with threads to Valgrind's core, so I will try to
> explain this via the following example:
> [...]
> In the output above memcheck prints one error report. How is a user
> supposed to find out which thread the error report applies to ? My
> opinion is that Valgrind should print some information that allows to
> identify the thread unambiguously, such that thread ID's printed by
> the client can be correlated with thread ID's printed by Valgrind.
> This information could be one of the following:
> - Process ID. A process ID only identifies a thread when using
> linuxthreads, not when using NPTL or when using another OS than Linux.
> - POSIX thread ID. POSIX thread ID's are currently not known by
> Valgrinds core however.
> - lwpid. It is not very convenient however to obtain this ID from
> within a client -- a client either would have to call
> readlink("/proc/self") or would have to call gettid() via inline
> assembly (gettid() is not in glibc).
Some error messages already print a thread ID, eg. "address X is on thread
1's stack" -- which of these three does it correspond to?
> - Thread name, where thread names are stored in Valgrind's core and
> provided by the client via a client request.
>
> What is your opinion about this ?
I think allowing thread naming is a good idea.
Nick
|
|
From: <sv...@va...> - 2006-12-23 23:11:25
|
Author: weidendo
Date: 2006-12-23 23:11:20 +0000 (Sat, 23 Dec 2006)
New Revision: 6414
Log:
Callgrind: Throttle calls CLG_(run_thread) after r6413
After the change in r6413, CLG_(run_thread) is called a
lot more often, increasing the polling overhead to check
for a callgrind command file (created by callgrind_control
for controlling a callgrind run in an interactive way).
This reduces the calls to only be done every 5000 BBs,
which gives a similar polling frequency as before.
=20
Modified:
trunk/callgrind/main.c
Modified: trunk/callgrind/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/callgrind/main.c 2006-12-23 01:21:12 UTC (rev 6413)
+++ trunk/callgrind/main.c 2006-12-23 23:11:20 UTC (rev 6414)
@@ -1026,13 +1026,19 @@
Bool is_running,=20
ULong blocks_done )
{
+ static ULong last_blocks_done =3D 0;
+
if (0)
VG_(printf)("%d %c %llu\n",=20
(Int)tid, is_running ? 'R' : 's', blocks_done);
- /* Simply call onwards to CLG_(run_thread). Maybe this can be
- simplified later? */
- if (is_running)
- CLG_(run_thread)( tid );
+
+ if (!is_running) return;
+
+ /* throttle calls to CLG_(run_thread) by number of BBs executed */
+ if (blocks_done - last_blocks_done < 5000) return;
+ last_blocks_done =3D blocks_done;
+
+ CLG_(run_thread)( tid );
}
=20
static
|
|
From: Josef W. <Jos...@gm...> - 2006-12-23 23:06:34
|
On Saturday 23 December 2006 02:35, Julian Seward wrote:
> Josef, there may be some cleaning up possible w.r.t
> clg_thread_runstate_callback
> that I created. I did not want to modify CLG_(run_thread) because
> it is called from various places, not just as a callback, so I added
> this 'impedance matching' function instead.
Yes, thanks.
Regarding the frequency, I just checked how often the polling of
callgrind's command file was done before and after this change.
This is for startup and directly quitting xclock.
Before r6413:
:~> time strace -e open valgrind --tool=callgrind xclock &> z
real 0m8.028s
user 0m4.132s
sys 0m0.156s
:~> grep callgrind.cmd z | wc
709 7090 69130
After r6413:
:~> time strace -e open valgrind --tool=callgrind xclock &> z2
real 0m10.266s
user 0m4.840s
sys 0m1.784s
:~> grep callgrind.cmd z2 | wc
39003 390030 3822297
There were around 10 million BBs executed.
So yes, this needs some fine tuning. Polling around 200 times per user
second was already a lot, but 10000 per second is _way_ too much.
After calling CLG_(run_thread) only every 5000 BBs executed, I get
back to the old behavior:
:~> time strace -e open valgrind -v --tool=callgrind xclock &> z3
real 0m6.452s
user 0m4.132s
sys 0m0.180s
weidendo@linux:~/tmp/clg> grep callgrind.cmd z3 | wc
805 8050 78893
A lower polling frequency has to problem that the "interactivity"
gets lost if a client program is sleeping most of the time; and
that is the reason I should get rid of this polling method :-(
Josef
|
|
From: Bart V. A. <bar...@gm...> - 2006-12-23 12:50:20
|
On 12/23/06, Julian Seward <js...@ac...> wrote: > > Bart, Josef, I have committed in r6413, a change which I think > should give Bart the sequencing you need and Josef the ability to > count blocks that you need. The commit message for r6413 explains > the details. Pls yell if this isn't what you wanted. This patch works fine for me. Bart. |
|
From: Bart V. A. <bar...@gm...> - 2006-12-23 12:48:27
|
Apparently it is not yet clear why I proposed to add the capability of
associating names with threads to Valgrind's core, so I will try to
explain this via the following example:
$ VALGRIND_LIB=.in_place coregrind/valgrind --tool=memcheck
memcheck/tests/stack_switch
==7764== Memcheck, a memory error detector.
==7764== Copyright (C) 2002-2006, and GNU GPL'd, by Julian Seward et al.
==7764== Using LibVEX rev 1680, a library for dynamic binary translation.
==7764== Copyright (C) 2004-2006, and GNU GPL'd, by OpenWorks LLP.
==7764== Using valgrind-3.3.0.SVN, a dynamic binary instrumentation framework.
==7764== Copyright (C) 2000-2006, and GNU GPL'd, by Julian Seward et al.
==7764== For more details, rerun with: -v
==7764==
==7764== Syscall param clone(child_tidptr) contains uninitialised byte(s)
==7764== at 0x4110648: clone (in /lib/libc-2.4.so)
==7764== by 0x406887B: (below main) (in /lib/libc-2.4.so)
==7764==
==7764== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 3 from 1)
==7764== malloc/free: in use at exit: 0 bytes in 0 blocks.
==7764== malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
==7764== For counts of detected errors, rerun with: -v
==7764== All heap blocks were freed -- no leaks are possible.
In the output above memcheck prints one error report. How is a user
supposed to find out which thread the error report applies to ? My
opinion is that Valgrind should print some information that allows to
identify the thread unambiguously, such that thread ID's printed by
the client can be correlated with thread ID's printed by Valgrind.
This information could be one of the following:
- Process ID. A process ID only identifies a thread when using
linuxthreads, not when using NPTL or when using another OS than Linux.
- POSIX thread ID. POSIX thread ID's are currently not known by
Valgrinds core however.
- lwpid. It is not very convenient however to obtain this ID from
within a client -- a client either would have to call
readlink("/proc/self") or would have to call gettid() via inline
assembly (gettid() is not in glibc).
- Thread name, where thread names are stored in Valgrind's core and
provided by the client via a client request.
Thread ID's can e.g. be printed from within m_errormgr.c:
--- m_errormgr.c (revision 6413)
+++ m_errormgr.c (working copy)
@@ -628,6 +628,11 @@
n_errs_found++;
if (!is_first_shown_context)
VG_(message)(Vg_UserMsg, "");
+ else
+ {
+ VG_(message)(Vg_UserMsg, "thread context: %s",
+ VG_(get_thread_name)(VG_(get_running_tid())));
+ }
pp_Error(p);
is_first_shown_context = False;
n_errs_shown++;
What is your opinion about this ?
Bart.
|
|
From: Nicholas N. <nj...@cs...> - 2006-12-23 06:00:33
|
On Sat, 23 Dec 2006 sv...@va... wrote:
> Log:
> Change the core-tool interface 'thread_run' event to be more useful:
>
> - Rename the event to 'thread_runstate'.
>
> - Add arguments: pass also a boolean indicating whether the thread
> is running or stopping, and a 64-bit int showing how many blocks
> overall have run, so tools can make a rough estimate of workload.
>
> The boolean allows tools to see threads starting and stopping.
> Prior to this, de-schedule events were invisible to tools.
Running and stopping are quite different. I imagine most tools are always
going to have event handlers like this:
if (is_running)
do_stuff_1
else
do_stuff_2
I think it would be better to split this into two separate events, "run" and
"stop".
This would better match how the events are currently structured -- for
example, Memcheck calls a common handler function for some closely-related
events, eg. some of the new_mem_*/die_mem_* functions.
Nick
|
|
From: <js...@ac...> - 2006-12-23 05:31:03
|
Nightly build on minnie ( SuSE 10.0, ppc32 ) started at 2006-12-23 09:00:01 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 215 tests, 10 stderr failures, 6 stdout failures, 0 posttest failures == memcheck/tests/leak-tree (stderr) memcheck/tests/leakotron (stdout) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_changes (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) none/tests/ppc32/jm-fp (stdout) none/tests/ppc32/jm-fp (stderr) none/tests/ppc32/round (stdout) none/tests/ppc32/round (stderr) none/tests/ppc32/test_fx (stdout) none/tests/ppc32/test_fx (stderr) none/tests/ppc32/test_gx (stdout) |
|
From: <js...@ac...> - 2006-12-23 05:02:58
|
Nightly build on phoenix ( SuSE 10.0 ) started at 2006-12-23 04: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 == 250 tests, 6 stderr failures, 1 stdout failure, 0 posttest failures == memcheck/tests/leak-tree (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) |
|
From: Tom H. <to...@co...> - 2006-12-23 03:54:05
|
Nightly build on dunsmere ( athlon, Fedora Core 6 ) started at 2006-12-23 03:30:06 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 252 tests, 5 stderr failures, 2 stdout failures, 0 posttest failures == memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/xml1 (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) none/tests/pth_detached (stdout) |
|
From: Tom H. <th...@cy...> - 2006-12-23 03:24:43
|
Nightly build on dellow ( x86_64, Fedora Core 6 ) started at 2006-12-23 03:10:03 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 280 tests, 4 stderr failures, 1 stdout failure, 0 posttest failures == memcheck/tests/pointer-trace (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/xml1 (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) |
|
From: Julian S. <js...@ac...> - 2006-12-23 01:25:50
|
Bart, Josef, I have committed in r6413, a change which I think should give Bart the sequencing you need and Josef the ability to count blocks that you need. The commit message for r6413 explains the details. Pls yell if this isn't what you wanted. Josef, there may be some cleaning up possible w.r.t clg_thread_runstate_callback that I created. I did not want to modify CLG_(run_thread) because it is called from various places, not just as a callback, so I added this 'impedance matching' function instead. J On Tuesday 19 December 2006 10:24, Josef Weidendorfer wrote: > On Tuesday 19 December 2006 03:39, Julian Seward wrote: > > > I wonder if I can use a constant factor to keep my polling for a > > > command file happening at regular intervals, yet not producing too much > > > overhead. I suppose I misused this VG_TRACK(thread_run) event ... > > > > One simple solution is for VG_TRACK(thread_run) to take a second > > argument, which is a 64-bit number, the total number of blocks executed > > by V so far. By comparing this number against the number in the previous > > call you can find out how much progress the system made in between. Then > > you could base your polling decisions on that. How does that sound? > > Oh, that sounds very good. > > But do we need to change the signature of VG_TRACK(thread_run) for this? > I still think that I am only misusing this event for my polling. > Especially, the event does not trigger when the valgrind process sleeps. So > a solution which waits for commands e.g. on a socket would be far better. > > It would be nice to have a function VG_(blocks_done)() or similar to get > the total number of blocks executed so far. > > I have something like this in callgrind myself; but of course it is not > incremented when callgrind is in "no instrumentation" mode; still, the > command polling has to work to allow to switch on instrumentation. > > Josef > > > J > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share > your opinions on IT & business topics through brief surveys - and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Valgrind-developers mailing list > Val...@li... > https://lists.sourceforge.net/lists/listinfo/valgrind-developers |
|
From: <sv...@va...> - 2006-12-23 01:21:18
|
Author: sewardj
Date: 2006-12-23 01:21:12 +0000 (Sat, 23 Dec 2006)
New Revision: 6413
Log:
Change the core-tool interface 'thread_run' event to be more useful:
- Rename the event to 'thread_runstate'.
- Add arguments: pass also a boolean indicating whether the thread
is running or stopping, and a 64-bit int showing how many blocks
overall have run, so tools can make a rough estimate of workload.
The boolean allows tools to see threads starting and stopping.
Prior to this, de-schedule events were invisible to tools.
- Call the callback (hand the event to tools) just before client
code is run, and again immediately after it stops running. This
should give correct sequencing w.r.t posting of thread creation/
destruction events.
In order to make callgrind work without complex changes, I added a
simple impedance-matching function 'clg_thread_runstate_callback'=20
which hands thread-run events onwards to CLG_(thread_run).
Use this new 'thread_runstate' with care: it will be called before
and after every translation, which means it will be called ~500k
times in a startup of firefox. So the callback needs to be fast.
Modified:
trunk/callgrind/main.c
trunk/coregrind/m_scheduler/scheduler.c
trunk/coregrind/m_tooliface.c
trunk/coregrind/pub_core_tooliface.h
trunk/include/pub_tool_tooliface.h
Modified: trunk/callgrind/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/callgrind/main.c 2006-12-18 17:53:13 UTC (rev 6412)
+++ trunk/callgrind/main.c 2006-12-23 01:21:12 UTC (rev 6413)
@@ -1022,6 +1022,19 @@
/*--- Setup ---*/
/*--------------------------------------------------------------------*/
=20
+static void clg_thread_runstate_callback ( ThreadId tid,
+ Bool is_running,=20
+ ULong blocks_done )
+{
+ if (0)
+ VG_(printf)("%d %c %llu\n",=20
+ (Int)tid, is_running ? 'R' : 's', blocks_done);
+ /* Simply call onwards to CLG_(run_thread). Maybe this can be
+ simplified later? */
+ if (is_running)
+ CLG_(run_thread)( tid );
+}
+
static
void CLG_(post_clo_init)(void)
{
@@ -1088,7 +1101,7 @@
VG_(needs_syscall_wrapper)(CLG_(pre_syscalltime),
CLG_(post_syscalltime));
=20
- VG_(track_thread_run) ( & CLG_(run_thread) );
+ VG_(track_thread_runstate) ( & clg_thread_runstate_callback );
VG_(track_pre_deliver_signal) ( & CLG_(pre_signal) );
VG_(track_post_deliver_signal) ( & CLG_(post_signal) );
=20
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-12-18 17:53:13 UTC (rev =
6412)
+++ trunk/coregrind/m_scheduler/scheduler.c 2006-12-23 01:21:12 UTC (rev =
6413)
@@ -233,10 +233,6 @@
VG_(sprintf)(buf, " acquired lock (%s)", who);
print_sched_event(tid, buf);
}
-
- // While thre modeling is disable, issue thread_run events here
- // VG_(tm_thread_switchto)(tid);
- VG_TRACK( thread_run, tid );
}
=20
/*=20
@@ -616,6 +612,9 @@
VG_(printf)("\n");
}
=20
+ // Tell the tool this thread is about to run client code
+ VG_TRACK( thread_runstate, tid, True, bbs_done );
+
vg_assert(VG_(in_generated_code) =3D=3D False);
VG_(in_generated_code) =3D True;
=20
@@ -641,6 +640,9 @@
vg_assert(done_this_time >=3D 0);
bbs_done +=3D (ULong)done_this_time;
=20
+ // Tell the tool this thread has stopped running client code
+ VG_TRACK( thread_runstate, tid, False, bbs_done );
+
return trc;
}
=20
@@ -652,6 +654,7 @@
volatile Int jumped;
volatile ThreadState* tst;=20
volatile UWord argblock[4];
+ volatile UInt retval;
=20
/* Paranoia */
vg_assert(VG_(is_valid_tid)(tid));
@@ -686,6 +689,9 @@
argblock[2] =3D 0; /* next guest IP is written here */
argblock[3] =3D 0; /* guest state ptr afterwards is written here */
=20
+ // Tell the tool this thread is about to run client code
+ VG_TRACK( thread_runstate, tid, True, bbs_done );
+
vg_assert(VG_(in_generated_code) =3D=3D False);
VG_(in_generated_code) =3D True;
=20
@@ -703,16 +709,23 @@
vg_assert(argblock[2] =3D=3D 0); /* next guest IP was not written =
*/
vg_assert(argblock[3] =3D=3D 0); /* trc was not written */
block_signals(tid);
- return VG_TRC_FAULT_SIGNAL;
+ retval =3D VG_TRC_FAULT_SIGNAL;
} else {
/* store away the guest program counter */
VG_(set_IP)( tid, argblock[2] );
if (argblock[3] =3D=3D argblock[1])
/* the guest state pointer afterwards was unchanged */
- return VG_TRC_BORING;
+ retval =3D VG_TRC_BORING;
else
- return (UInt)argblock[3];
+ retval =3D (UInt)argblock[3];
}
+
+ bbs_done++;
+
+ // Tell the tool this thread has stopped running client code
+ VG_TRACK( thread_runstate, tid, False, bbs_done );
+
+ return retval;
}
=20
=20
Modified: trunk/coregrind/m_tooliface.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_tooliface.c 2006-12-18 17:53:13 UTC (rev 6412)
+++ trunk/coregrind/m_tooliface.c 2006-12-23 01:21:12 UTC (rev 6413)
@@ -321,7 +321,7 @@
=20
DEF(track_post_reg_write_clientcall_return, ThreadId, OffT, SizeT, Addr)
=20
-DEF(track_thread_run, ThreadId)
+DEF(track_thread_runstate, ThreadId, Bool, ULong)
=20
DEF(track_post_thread_create, ThreadId, ThreadId)
DEF(track_post_thread_join, ThreadId, ThreadId)
Modified: trunk/coregrind/pub_core_tooliface.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/coregrind/pub_core_tooliface.h 2006-12-18 17:53:13 UTC (rev 641=
2)
+++ trunk/coregrind/pub_core_tooliface.h 2006-12-23 01:21:12 UTC (rev 641=
3)
@@ -200,7 +200,7 @@
void (*track_post_reg_write)(CorePart, ThreadId, OffT, SizeT);
void (*track_post_reg_write_clientcall_return)(ThreadId, OffT, SizeT,=
Addr);
=20
- void (*track_thread_run)(ThreadId);
+ void (*track_thread_runstate)(ThreadId, Bool, ULong);
=20
void (*track_post_thread_create)(ThreadId, ThreadId);
void (*track_post_thread_join) (ThreadId, ThreadId);
Modified: trunk/include/pub_tool_tooliface.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_tooliface.h 2006-12-18 17:53:13 UTC (rev 6412)
+++ trunk/include/pub_tool_tooliface.h 2006-12-23 01:21:12 UTC (rev 6413)
@@ -537,9 +537,21 @@
=20
=20
/* Scheduler events (not exhaustive) */
-void VG_(track_thread_run)(void(*f)(ThreadId tid));
=20
+/* Called when 'tid' starts or stops running client code blocks.
+ Gives the total dispatched block count at that event. Note, this
+ is not the same as 'tid' holding the BigLock: a thread can hold the
+ lock for other purposes (making translations, etc) yet not be
+ running client blocks. Obviously though, a thread must hold the
+ lock in order to run client code blocks, so the times bracketed by
+ thread_runstate(tid, True, ..) .. thread_runstate(tid, False, ..)
+ are a subset of the times when 'tid' holds the cpu lock.
+*/
+void VG_(track_thread_runstate)(
+ void(*f)(ThreadId tid, Bool running, ULong blocks_dispatched)
+ );
=20
+
/* Thread events (not exhaustive)
=20
Called during thread create, before the new thread has run any
|
|
From: <js...@ac...> - 2006-12-23 01:16:07
|
Nightly build on g5 ( SuSE 10.1, ppc970 ) started at 2006-12-23 02:00:01 CET Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 221 tests, 6 stderr failures, 2 stdout failures, 0 posttest failures == memcheck/tests/deep_templates (stdout) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/pointer-trace (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) |
|
From: David G. <gr...@ob...> - 2006-12-22 21:15:23
|
David Greene wrote:
> Is there a version of the watchpoints patch that applies to 3.2.1?
> The version on Robert's page does not.
Urp, I take that back. It does indeed apply. User error.
> I understand the patch is intrusive but it would be really handy
> if a watchpoint capability could be added to the mainline
> distribution. As more and more programs become threaded, gdb
> is going to be less and less useful.
I still stand by this statement. :)
-Dave
|