You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
|
|
1
(31) |
2
(27) |
|
3
(25) |
4
(21) |
5
(21) |
6
(21) |
7
(32) |
8
(23) |
9
(15) |
|
10
(12) |
11
(9) |
12
(10) |
13
(10) |
14
(9) |
15
(7) |
16
(20) |
|
17
(14) |
18
(71) |
19
(67) |
20
(50) |
21
(25) |
22
(15) |
23
(37) |
|
24
(25) |
25
(41) |
26
(34) |
27
(57) |
28
(20) |
29
(30) |
30
(13) |
|
31
(18) |
|
|
|
|
|
|
|
From: Tom H. <to...@co...> - 2005-07-07 02:35:54
|
Nightly build on dunsmere ( athlon, Fedora Core 4 ) started at 2005-07-07 03:30:04 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 179 tests, 5 stderr failures, 0 stdout failures ================= memcheck/tests/leak-tree (stderr) memcheck/tests/weirdioctl (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2005-07-07 02:20:53
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2005-07-07 03:15:03 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 178 tests, 14 stderr failures, 1 stdout failure ================= memcheck/tests/addressable (stderr) memcheck/tests/describe-block (stderr) memcheck/tests/erringfds (stderr) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/match-overrun (stderr) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/sigkill (stderr) memcheck/tests/stack_changes (stderr) none/tests/faultstatus (stderr) none/tests/x86/int (stderr) none/tests/x86/yield (stdout) |
|
From: Tom H. <th...@cy...> - 2005-07-07 02:15:15
|
Nightly build on dellow ( x86_64, Fedora Core 4 ) started at 2005-07-07 03:10:07 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 156 tests, 7 stderr failures, 0 stdout failures ================= memcheck/tests/sigaltstack (stderr) memcheck/tests/sigprocmask (stderr) memcheck/tests/strchr (stderr) memcheck/tests/vgtest_ume (stderr) memcheck/tests/weirdioctl (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) |
|
From: Tom H. <th...@cy...> - 2005-07-07 02:11:30
|
Nightly build on aston ( x86_64, Fedora Core 3 ) started at 2005-07-07 03:05:09 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 156 tests, 7 stderr failures, 0 stdout failures ================= memcheck/tests/sigaltstack (stderr) memcheck/tests/sigprocmask (stderr) memcheck/tests/strchr (stderr) memcheck/tests/vgtest_ume (stderr) memcheck/tests/weirdioctl (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) |
|
From: Tom H. <th...@cy...> - 2005-07-07 02:04:16
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2005-07-07 03:00:03 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 156 tests, 8 stderr failures, 0 stdout failures ================= memcheck/tests/sigaltstack (stderr) memcheck/tests/sigprocmask (stderr) memcheck/tests/strchr (stderr) memcheck/tests/vgtest_ume (stderr) memcheck/tests/weirdioctl (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_fcntl (stderr) |
|
From: <sv...@va...> - 2005-07-07 01:32:25
|
Author: sewardj
Date: 2005-07-07 02:32:16 +0100 (Thu, 07 Jul 2005)
New Revision: 1262
Log:
Basic support for self-checking translations. It fits quite neatly
into the IR: if a translation self-check fails, the translation exits
passing VEX_TRC_JMP_TINVAL to the despatcher and with the
guest_TISTART/guest_TILEN pseudo-registers indicating what area of the
guest code needs to be invalidated. The actual checksumming is done
by a helper function which does (a variant of) the Adler32 checksum.
Space/time overhead, whilst substantial, looks tolerable. There's a
little room for optimisation of the basic scheme. It would certainly
be viable to run with self-checking for all translations to support
Valgrinding JITs (including V itself) without any assistance from the
JIT.
Modified:
trunk/priv/guest-generic/bb_to_IR.c
trunk/priv/guest-generic/bb_to_IR.h
trunk/priv/host-x86/hdefs.c
trunk/priv/main/vex_main.c
trunk/pub/libvex.h
trunk/pub/libvex_ir.h
Modified: trunk/priv/guest-generic/bb_to_IR.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/guest-generic/bb_to_IR.c 2005-07-05 23:54:16 UTC (rev 1261=
)
+++ trunk/priv/guest-generic/bb_to_IR.c 2005-07-07 01:32:16 UTC (rev 1262=
)
@@ -41,6 +41,10 @@
#include "guest-generic/bb_to_IR.h"
=20
=20
+/* Forwards .. */
+static UInt genericg_compute_adler32 ( HWord addr, UInt len );
+
+
/* Disassemble a complete basic block, starting at guest_IP_start,=20
returning a new IRBB. The disassembler may chase across basic
block boundaries if it wishes and if chase_into_ok allows it.
@@ -51,6 +55,13 @@
=20
dis_instr_fn is the arch-specific fn to disassemble on function; it
is this that does the real work.
+
+ do_self_check indicates that the caller needs a self-checking
+ translation.
+
+ offB_TIADDR and offB_TILEN are the offsets of guest_TIADDR and
+ guest_TILEN. Since this routine has to work for any guest state,
+ without knowing what it is, those offsets have to passed in.
*/
=20
static Bool const_False ( Addr64 a ) { return False; }
@@ -62,7 +73,10 @@
/*IN*/ Bool (*chase_into_ok)(Addr64),
/*IN*/ Bool host_bigendian,
/*IN*/ VexArchInfo* archinfo_guest,
- /*IN*/ IRType guest_word_type )
+ /*IN*/ IRType guest_word_type,
+ /*IN*/ Bool do_self_check,
+ /*IN*/ Int offB_TISTART,
+ /*IN*/ Int offB_TILEN )
{
Long delta;
Int i, n_instrs, first_stmt_idx;
@@ -71,6 +85,7 @@
IRStmt* imark;
static Int n_resteers =3D 0;
Int d_resteers =3D 0;
+ Int selfcheck_idx =3D 0;
IRBB* irbb;
Addr64 guest_IP_curr_instr;
=20
@@ -78,9 +93,15 @@
=20
debug_print =3D toBool(vex_traceflags & VEX_TRACE_FE);
=20
+ /* Note: for adler32 to work without % operation for the self
+ check, need to limit length of stuff it scans to 5552 bytes.
+ Therefore limiting the max bb len to 100 insns seems generously
+ conservative. */
+
/* check sanity .. */
+ vassert(sizeof(HWord) =3D=3D sizeof(void*));
vassert(vex_control.guest_max_insns >=3D 1);
- vassert(vex_control.guest_max_insns < 500);
+ vassert(vex_control.guest_max_insns < 100);
vassert(vex_control.guest_chase_thresh >=3D 0);
vassert(vex_control.guest_chase_thresh < vex_control.guest_max_insns)=
;
vassert(guest_word_type =3D=3D Ity_I32 || guest_word_type =3D=3D Ity_=
I64);
@@ -98,6 +119,17 @@
delta =3D 0;
n_instrs =3D 0;
=20
+ /* If asked to make a self-checking translation, leave a 3 spaces
+ in which to put the check statements. We'll fill them in later
+ when we know the length and adler32 of the area to check. */
+ if (do_self_check) {
+ selfcheck_idx =3D irbb->stmts_used;
+ addStmtToIRBB( irbb, IRStmt_NoOp() );
+ addStmtToIRBB( irbb, IRStmt_NoOp() );
+ addStmtToIRBB( irbb, IRStmt_NoOp() );
+ }
+
+ /* Process instructions. */
while (True) {
vassert(n_instrs < vex_control.guest_max_insns);
=20
@@ -106,6 +138,11 @@
resteerOK=20
=3D toBool(
n_instrs < vex_control.guest_chase_thresh
+ /* If making self-checking translations, don't chase
+ .. it makes the checks too complicated. We only want
+ to scan just one sequence of bytes in the check, not
+ a whole bunch. */
+ && !do_self_check
/* we can't afford to have a resteer once we're on the
last extent slot. */
&& vge->n_used < 3
@@ -182,11 +219,11 @@
}
=20
/* Update the VexGuestExtents we are constructing. */
- /* If vex_control.guest_max_insns is required to be < 500 and
- each insn is at max 15 bytes long, this limit of 10000 then
+ /* If vex_control.guest_max_insns is required to be < 100 and
+ each insn is at max 20 bytes long, this limit of 5000 then
seems reasonable since the max possible extent length will be
- 500 * 15 =3D=3D 7500. */
- vassert(vge->len[vge->n_used-1] < 10000);
+ 100 * 20 =3D=3D 2000. */
+ vassert(vge->len[vge->n_used-1] < 5000);
vge->len[vge->n_used-1]=20
=3D toUShort(toUInt( vge->len[vge->n_used-1] + dres.len ));
n_instrs++;
@@ -209,12 +246,12 @@
? IRConst_U32(toUInt(guest_IP_bbstart+delta))
: IRConst_U64(guest_IP_bbstart+delta)
);
- return irbb;
+ goto done;
}
break;
case Dis_StopHere:
vassert(irbb->next !=3D NULL);
- return irbb;
+ goto done;
case Dis_Resteer:
/* Check that we actually allowed a resteer .. */
vassert(resteerOK);
@@ -238,10 +275,115 @@
vpanic("bb_to_IR");
}
}
+ /*NOTREACHED*/
+ vassert(0);
+
+ done:
+ /* We're done. The only thing that might need attending to is that
+ a self-checking preamble may need to be created. */
+ if (do_self_check) {
+
+ UInt len2check, adler32;
+ IRConst* guest_IP_bbstart_IRConst;
+
+ vassert(vge->n_used =3D=3D 1);
+ len2check =3D vge->len[0];
+ if (len2check =3D=3D 0)=20
+ len2check =3D 1;
+
+ adler32 =3D genericg_compute_adler32( (HWord)guest_code, len2check =
);
+
+ guest_IP_bbstart_IRConst
+ =3D guest_word_type=3D=3DIty_I32=20
+ ? IRConst_U32(guest_IP_bbstart)
+ : IRConst_U64(guest_IP_bbstart);
+
+ /* Set TISTART and TILEN. These will describe to the despatcher
+ the area of guest code to invalidate should we exit with a
+ self-check failure. */
+
+ irbb->stmts[selfcheck_idx+0]
+ =3D IRStmt_Put( offB_TILEN,=20
+ guest_word_type=3D=3DIty_I32=20
+ ? IRExpr_Const(IRConst_U32(len2check))=20
+ : IRExpr_Const(IRConst_U64(len2check)) );
+
+ irbb->stmts[selfcheck_idx+1]
+ =3D IRStmt_Put( offB_TISTART, IRExpr_Const(guest_IP_bbstart_IRCo=
nst) );
+
+ irbb->stmts[selfcheck_idx+2]
+ =3D IRStmt_Exit(=20
+ IRExpr_Binop(=20
+ Iop_CmpNE32,=20
+ mkIRExprCCall(=20
+ Ity_I32,=20
+ 0/*regparms*/,=20
+ "genericg_compute_adler32",
+ &genericg_compute_adler32,
+ mkIRExprVec_2(=20
+ mkIRExpr_HWord( (HWord)guest_code ),=20
+ IRExpr_Const(IRConst_U32(len2check))
+ )
+ ),
+ IRExpr_Const(IRConst_U32(adler32))
+ ),
+ Ijk_TInval,
+ guest_IP_bbstart_IRConst
+ );
+ }
+
+ return irbb;
}
=20
=20
+/*-------------------------------------------------------------
+ A support routine for doing self-checking translations.=20
+ -------------------------------------------------------------*/
=20
+/* CLEAN HELPER */
+/* CALLED FROM GENERATED CODE */
+
+/* Compute the Adler32 checksum of host memory at [addr
+ .. addr+len-1]. This presumably holds guest code. Note this is
+ not a proper implementation of Adler32 in that it fails to mod the
+ counts with 65521 every 5552 bytes, but we really never expect to
+ get anywhere near that many bytes to deal with. This fn is called
+ once for every use of a self-checking translation, so it needs to
+ be as fast as possible. */
+static UInt genericg_compute_adler32 ( HWord addr, UInt len )
+{
+ UInt i;
+ UInt s1 =3D 1;
+ UInt s2 =3D 0;
+ UChar* buf =3D (UChar*)addr;
+ for (i =3D 0; i < len; i++) {
+ s1 +=3D (UInt)buf[i];
+ s2 +=3D s1;
+ }
+#if 0
+ while (len >=3D 4) {
+ s1 +=3D buf[0];
+ s2 +=3D s1;
+ s1 +=3D buf[1];
+ s2 +=3D s1;
+ s1 +=3D buf[2];
+ s2 +=3D s1;
+ s1 +=3D buf[3];
+ s2 +=3D s1;
+ buf +=3D 4;
+ len -=3D 4;
+ }
+ while (len > 0) {
+ s1 +=3D buf[0];
+ s2 +=3D s1;
+ len--;
+ buf++;
+ }
+#endif
+ return (s2 << 16) + s1;
+}
+
+
/*--------------------------------------------------------------------*/
/*--- end guest-generic/bb_to_IR.c ---*/
/*--------------------------------------------------------------------*/
Modified: trunk/priv/guest-generic/bb_to_IR.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/guest-generic/bb_to_IR.h 2005-07-05 23:54:16 UTC (rev 1261=
)
+++ trunk/priv/guest-generic/bb_to_IR.h 2005-07-07 01:32:16 UTC (rev 1262=
)
@@ -146,7 +146,10 @@
/*IN*/ Bool (*chase_into_ok)(Addr64),
/*IN*/ Bool host_bigendian,
/*IN*/ VexArchInfo* archinfo_guest,
- /*IN*/ IRType guest_word_type );
+ /*IN*/ IRType guest_word_type,
+ /*IN*/ Bool do_self_check,
+ /*IN*/ Int offB_TISTART,
+ /*IN*/ Int offB_TILEN );
=20
=20
#endif /* ndef GENERIC_BB_TO_IR_H */
Modified: trunk/priv/host-x86/hdefs.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/host-x86/hdefs.c 2005-07-05 23:54:16 UTC (rev 1261)
+++ trunk/priv/host-x86/hdefs.c 2005-07-07 01:32:16 UTC (rev 1262)
@@ -2151,6 +2151,9 @@
case Ijk_NoDecode:
*p++ =3D 0xBD;
p =3D emit32(p, VEX_TRC_JMP_NODECODE); break;
+ case Ijk_TInval:
+ *p++ =3D 0xBD;
+ p =3D emit32(p, VEX_TRC_JMP_TINVAL); break;
case Ijk_Ret:
case Ijk_Call:
case Ijk_Boring:
Modified: trunk/priv/main/vex_main.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/main/vex_main.c 2005-07-05 23:54:16 UTC (rev 1261)
+++ trunk/priv/main/vex_main.c 2005-07-07 01:32:16 UTC (rev 1262)
@@ -221,6 +221,7 @@
HInstrArray* vcode;
HInstrArray* rcode;
Int i, j, k, out_used, guest_sizeB;
+ Int offB_TISTART, offB_TILEN;
UChar insn_bytes[32];
IRType guest_word_type;
IRType host_word_type;
@@ -242,6 +243,8 @@
disInstrFn =3D NULL;
guest_word_type =3D Ity_INVALID;
host_word_type =3D Ity_INVALID;
+ offB_TISTART =3D 0;
+ offB_TILEN =3D 0;
=20
vex_traceflags =3D traceflags;
=20
@@ -322,9 +325,13 @@
guest_sizeB =3D sizeof(VexGuestX86State);
guest_word_type =3D Ity_I32;
guest_layout =3D &x86guest_layout;
+ offB_TISTART =3D offsetof(VexGuestX86State,guest_TISTART);
+ offB_TILEN =3D offsetof(VexGuestX86State,guest_TILEN);
vassert(archinfo_guest->subarch =3D=3D VexSubArchX86_sse0
|| archinfo_guest->subarch =3D=3D VexSubArchX86_sse1
|| archinfo_guest->subarch =3D=3D VexSubArchX86_sse2);
+ vassert(sizeof( ((VexGuestX86State*)0)->guest_TISTART ) =3D=3D =
4);
+ vassert(sizeof( ((VexGuestX86State*)0)->guest_TILEN ) =3D=3D 4)=
;
break;
=20
case VexArchAMD64:
@@ -334,7 +341,11 @@
guest_sizeB =3D sizeof(VexGuestAMD64State);
guest_word_type =3D Ity_I64;
guest_layout =3D &amd64guest_layout;
+ offB_TISTART =3D offsetof(VexGuestAMD64State,guest_TISTART)=
;
+ offB_TILEN =3D offsetof(VexGuestAMD64State,guest_TILEN);
vassert(archinfo_guest->subarch =3D=3D VexSubArch_NONE);
+ vassert(sizeof( ((VexGuestAMD64State*)0)->guest_TISTART ) =3D=3D=
8);
+ vassert(sizeof( ((VexGuestAMD64State*)0)->guest_TILEN ) =3D=3D =
8);
break;
=20
case VexArchARM:
@@ -344,6 +355,8 @@
guest_sizeB =3D sizeof(VexGuestARMState);
guest_word_type =3D Ity_I32;
guest_layout =3D &armGuest_layout;
+ offB_TISTART =3D 0; /* hack ... arm has bitrot */
+ offB_TILEN =3D 0; /* hack ... arm has bitrot */
vassert(archinfo_guest->subarch =3D=3D VexSubArchARM_v4);
break;
=20
@@ -354,8 +367,12 @@
guest_sizeB =3D sizeof(VexGuestPPC32State);
guest_word_type =3D Ity_I32;
guest_layout =3D &ppc32Guest_layout;
+ offB_TISTART =3D offsetof(VexGuestPPC32State,guest_TISTART)=
;
+ offB_TILEN =3D offsetof(VexGuestPPC32State,guest_TILEN);
vassert(archinfo_guest->subarch =3D=3D VexSubArchPPC32_noAV
|| archinfo_guest->subarch =3D=3D VexSubArchPPC32_AV);
+ vassert(sizeof( ((VexGuestPPC32State*)0)->guest_TISTART ) =3D=3D=
4);
+ vassert(sizeof( ((VexGuestPPC32State*)0)->guest_TILEN ) =3D=3D =
4);
break;
=20
default:
@@ -382,7 +399,10 @@
chase_into_ok,
host_is_bigendian,
archinfo_guest,
- guest_word_type );
+ guest_word_type,
+ False/*selfcheck*/,
+ offB_TISTART,
+ offB_TILEN );
=20
if (irbb =3D=3D NULL) {
/* Access failure. */
Modified: trunk/pub/libvex.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/pub/libvex.h 2005-07-05 23:54:16 UTC (rev 1261)
+++ trunk/pub/libvex.h 2005-07-07 01:32:16 UTC (rev 1262)
@@ -331,9 +331,15 @@
stack tags will not be as expected, and (2) after returning to
generated code, the generated code is likely to go wrong. This
really should be fixed.
+
+ ALL GUEST ARCHITECTURES
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ The architecture must contain two pseudo-registers, guest_TISTART
+ and guest_TILEN. These are used to pass the address of areas of
+ guest code, translations of which are to be invalidated, back to
+ the despatcher. Both pseudo-regs must have size equal to the guest
+ word size.
*/
-
-
#endif /* ndef __LIBVEX_H */
=20
/*---------------------------------------------------------------*/
Modified: trunk/pub/libvex_ir.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/pub/libvex_ir.h 2005-07-05 23:54:16 UTC (rev 1261)
+++ trunk/pub/libvex_ir.h 2005-07-07 01:32:16 UTC (rev 1262)
@@ -778,12 +778,12 @@
/* This describes hints which can be passed to the dispatcher at guest
control-flow transfer points.
=20
- Re Ijk_Invalidate: typically the guest state will have two
- pseudo-registers, guest_TISTART and guest_TILEN, which
- specify the start and length of the region to be invalidated.
- It is the responsibility of the relevant toIR.c to ensure that
- these are filled in with suitable values before issuing a jump
- of kind Ijk_TInval.
+ Re Ijk_Invalidate: the guest state _must_ have two
+ pseudo-registers, guest_TISTART and guest_TILEN, which specify the
+ start and length of the region to be invalidated. These are both
+ the size of a guest word. It is the responsibility of the relevant
+ toIR.c to ensure that these are filled in with suitable values
+ before issuing a jump of kind Ijk_TInval. =20
*/
typedef
enum {=20
|
|
From: <js...@ac...> - 2005-07-07 00:43:40
|
Nightly build on g5 ( YDL 4.0, ppc970 ) started at 2005-07-07 02:40:00 CEST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 152 tests, 101 stderr failures, 36 stdout failures ================= memcheck/tests/addressable (stdout) memcheck/tests/addressable (stderr) memcheck/tests/badaddrvalue (stdout) memcheck/tests/badaddrvalue (stderr) memcheck/tests/badfree-2trace (stderr) memcheck/tests/badfree (stderr) memcheck/tests/badjump (stderr) memcheck/tests/badjump2 (stderr) memcheck/tests/badloop (stderr) memcheck/tests/badpoll (stderr) memcheck/tests/badrw (stderr) memcheck/tests/brk (stderr) memcheck/tests/brk2 (stderr) memcheck/tests/buflen_check (stderr) memcheck/tests/clientperm (stdout) memcheck/tests/clientperm (stderr) memcheck/tests/custom_alloc (stderr) memcheck/tests/describe-block (stderr) memcheck/tests/doublefree (stderr) memcheck/tests/erringfds (stdout) memcheck/tests/erringfds (stderr) memcheck/tests/error_counts (stdout) memcheck/tests/errs1 (stderr) memcheck/tests/execve (stderr) memcheck/tests/execve2 (stderr) memcheck/tests/exitprog (stderr) memcheck/tests/fprw (stderr) memcheck/tests/fwrite (stdout) memcheck/tests/fwrite (stderr) memcheck/tests/inits (stderr) memcheck/tests/inline (stdout) memcheck/tests/inline (stderr) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/leakotron (stdout) memcheck/tests/malloc1 (stderr) memcheck/tests/malloc2 (stderr) memcheck/tests/malloc3 (stdout) memcheck/tests/malloc3 (stderr) memcheck/tests/manuel1 (stdout) memcheck/tests/manuel1 (stderr) memcheck/tests/manuel2 (stdout) memcheck/tests/manuel2 (stderr) memcheck/tests/manuel3 (stderr) memcheck/tests/match-overrun (stderr) memcheck/tests/memalign2 (stderr) memcheck/tests/memalign_test (stderr) memcheck/tests/memcmptest (stdout) memcheck/tests/memcmptest (stderr) memcheck/tests/mempool (stderr) memcheck/tests/mismatches (stderr) memcheck/tests/mmaptest (stderr) memcheck/tests/nanoleak (stderr) memcheck/tests/nanoleak_supp (stderr) memcheck/tests/new_nothrow (stderr) memcheck/tests/new_override (stdout) memcheck/tests/new_override (stderr) memcheck/tests/null_socket (stderr) memcheck/tests/overlap (stdout) memcheck/tests/overlap (stderr) memcheck/tests/partiallydefinedeq (stdout) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/post-syscall (stdout) memcheck/tests/post-syscall (stderr) memcheck/tests/realloc1 (stderr) memcheck/tests/realloc2 (stderr) memcheck/tests/realloc3 (stderr) memcheck/tests/sigaltstack (stderr) memcheck/tests/sigkill (stderr) memcheck/tests/signal2 (stdout) memcheck/tests/signal2 (stderr) memcheck/tests/sigprocmask (stderr) memcheck/tests/stack_changes (stdout) memcheck/tests/stack_changes (stderr) memcheck/tests/str_tester (stderr) memcheck/tests/strchr (stderr) memcheck/tests/supp1 (stderr) memcheck/tests/supp2 (stderr) memcheck/tests/suppfree (stderr) memcheck/tests/toobig-allocs (stderr) memcheck/tests/trivialleak (stderr) memcheck/tests/vgtest_ume (stderr) memcheck/tests/weirdioctl (stdout) memcheck/tests/weirdioctl (stderr) memcheck/tests/writev (stderr) memcheck/tests/xml1 (stdout) memcheck/tests/xml1 (stderr) memcheck/tests/zeropage (stdout) memcheck/tests/zeropage (stderr) cachegrind/tests/chdir (stderr) cachegrind/tests/dlclose (stdout) cachegrind/tests/dlclose (stderr) massif/tests/toobig-allocs (stderr) massif/tests/true_html (stderr) massif/tests/true_text (stderr) none/tests/async-sigs (stdout) none/tests/async-sigs (stderr) none/tests/blockfault (stderr) none/tests/coolo_sigaction (stdout) none/tests/coolo_sigaction (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/fdleak_creat (stderr) none/tests/fdleak_dup (stderr) none/tests/fdleak_dup2 (stderr) none/tests/fdleak_fcntl (stderr) none/tests/fdleak_ipv4 (stderr) none/tests/fdleak_open (stderr) none/tests/fdleak_pipe (stderr) none/tests/fdleak_socketpair (stderr) none/tests/pending (stdout) none/tests/pending (stderr) none/tests/pth_atfork1 (stdout) none/tests/pth_atfork1 (stderr) none/tests/pth_blockedsig (stdout) none/tests/pth_blockedsig (stderr) none/tests/pth_cancel1 (stdout) none/tests/pth_cancel1 (stderr) none/tests/pth_cvsimple (stdout) none/tests/pth_once (stdout) none/tests/pth_once (stderr) none/tests/pth_stackalign (stdout) none/tests/pth_stackalign (stderr) none/tests/res_search (stdout) none/tests/sigstackgrowth (stdout) none/tests/sigstackgrowth (stderr) none/tests/syscall-restart1 (stderr) none/tests/syscall-restart2 (stderr) none/tests/system (stderr) none/tests/thread-exits (stdout) none/tests/thread-exits (stderr) none/tests/threadederrno (stdout) none/tests/tls (stdout) none/tests/tls (stderr) |