You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
1
(12) |
2
(5) |
3
(12) |
4
(9) |
5
(4) |
6
(7) |
|
7
(6) |
8
(10) |
9
(5) |
10
(5) |
11
(4) |
12
(7) |
13
(19) |
|
14
(11) |
15
(9) |
16
(6) |
17
(21) |
18
(13) |
19
(12) |
20
(9) |
|
21
(22) |
22
(24) |
23
(21) |
24
(12) |
25
(6) |
26
(3) |
27
(4) |
|
28
(3) |
29
(5) |
30
(11) |
31
(7) |
|
|
|
|
From: <sv...@va...> - 2008-12-03 21:44:56
|
Author: sewardj
Date: 2008-12-03 21:29:59 +0000 (Wed, 03 Dec 2008)
New Revision: 1874
Log:
Initial VEX-end support for Darwin (x86 and amd64).
Modified:
trunk/Makefile
trunk/priv/guest-amd64/ghelpers.c
trunk/priv/guest-amd64/toIR.c
trunk/priv/guest-x86/ghelpers.c
trunk/priv/guest-x86/toIR.c
trunk/priv/host-x86/hdefs.c
trunk/priv/ir/irdefs.c
trunk/pub/libvex_guest_amd64.h
trunk/pub/libvex_guest_x86.h
trunk/pub/libvex_ir.h
trunk/pub/libvex_trc_values.h
Modified: trunk/Makefile
===================================================================
--- trunk/Makefile 2008-11-17 20:25:37 UTC (rev 1873)
+++ trunk/Makefile 2008-12-03 21:29:59 UTC (rev 1874)
@@ -125,6 +125,18 @@
if [ ! -f TAG_amd64_linux ] ; then rm -f $(LIB_OBJS) TAG_* libvex.a ; fi
touch TAG_amd64_linux
+libvex_x86_darwin.a: TAG_x86_darwin libvex.a
+ mv -f libvex.a libvex_x86_darwin.a
+TAG_x86_darwin:
+ if [ ! -f TAG_x86_darwin ] ; then rm -f $(LIB_OBJS) TAG_* libvex.a ; fi
+ touch TAG_x86_darwin
+
+libvex_amd64_darwin.a: TAG_amd64_darwin libvex.a
+ mv -f libvex.a libvex_amd64_darwin.a
+TAG_amd64_darwin:
+ if [ ! -f TAG_amd64_darwin ] ; then rm -f $(LIB_OBJS) TAG_* libvex.a ; fi
+ touch TAG_amd64_darwin
+
libvex_ppc32_linux.a: TAG_ppc32_linux libvex.a
mv -f libvex.a libvex_ppc32_linux.a
TAG_ppc32_linux:
Modified: trunk/priv/guest-amd64/ghelpers.c
===================================================================
--- trunk/priv/guest-amd64/ghelpers.c 2008-11-17 20:25:37 UTC (rev 1873)
+++ trunk/priv/guest-amd64/ghelpers.c 2008-12-03 21:29:59 UTC (rev 1874)
@@ -838,7 +838,29 @@
return rflags;
}
+/* VISIBLE TO LIBVEX CLIENT */
+void
+LibVEX_GuestAMD64_put_rflag_c ( ULong new_carry_flag,
+ /*MOD*/VexGuestAMD64State* vex_state )
+{
+ ULong oszacp = amd64g_calculate_rflags_all_WRK(
+ vex_state->guest_CC_OP,
+ vex_state->guest_CC_DEP1,
+ vex_state->guest_CC_DEP2,
+ vex_state->guest_CC_NDEP
+ );
+ if (new_carry_flag & 1) {
+ oszacp |= AMD64G_CC_MASK_C;
+ } else {
+ oszacp &= ~AMD64G_CC_MASK_C;
+ }
+ vex_state->guest_CC_OP = AMD64G_CC_OP_COPY;
+ vex_state->guest_CC_DEP1 = oszacp;
+ vex_state->guest_CC_DEP2 = 0;
+ vex_state->guest_CC_NDEP = 0;
+}
+
/*---------------------------------------------------------------*/
/*--- %rflags translation-time function specialisers. ---*/
/*--- These help iropt specialise calls the above run-time ---*/
@@ -2225,8 +2247,6 @@
/* VISIBLE TO LIBVEX CLIENT */
void LibVEX_GuestAMD64_initialise ( /*OUT*/VexGuestAMD64State* vex_state )
{
- //Int i;
-
vex_state->guest_RAX = 0;
vex_state->guest_RCX = 0;
vex_state->guest_RDX = 0;
@@ -2291,7 +2311,11 @@
vex_state->guest_TISTART = 0;
vex_state->guest_TILEN = 0;
- vex_state->guest_NRADDR = 0;
+ vex_state->guest_NRADDR = 0;
+ vex_state->guest_SC_CLASS = 0;
+ vex_state->guest_GS_0x60 = 0;
+
+ vex_state->padding = 0;
}
Modified: trunk/priv/guest-amd64/toIR.c
===================================================================
--- trunk/priv/guest-amd64/toIR.c 2008-11-17 20:25:37 UTC (rev 1873)
+++ trunk/priv/guest-amd64/toIR.c 2008-12-03 21:29:59 UTC (rev 1874)
@@ -381,6 +381,7 @@
#define OFFB_RIP offsetof(VexGuestAMD64State,guest_RIP)
#define OFFB_FS_ZERO offsetof(VexGuestAMD64State,guest_FS_ZERO)
+#define OFFB_GS_0x60 offsetof(VexGuestAMD64State,guest_GS_0x60)
#define OFFB_CC_OP offsetof(VexGuestAMD64State,guest_CC_OP)
#define OFFB_CC_DEP1 offsetof(VexGuestAMD64State,guest_CC_DEP1)
@@ -2008,7 +2009,10 @@
}
if (pfx & PFX_GS) {
- unimplemented("amd64 %gs segment override");
+ /* Note that this is a darwin-kernel specific hack that relies
+ on the assumption that %gs is always 0x60. */
+ /* return virtual + guest_GS_0x60. */
+ virtual = binop(Iop_Add64, virtual, IRExpr_Get(OFFB_GS_0x60, Ity_I64));
}
/* cs, ds, es and ss are simply ignored in 64-bit mode. */
Modified: trunk/priv/guest-x86/ghelpers.c
===================================================================
--- trunk/priv/guest-x86/ghelpers.c 2008-11-17 20:25:37 UTC (rev 1873)
+++ trunk/priv/guest-x86/ghelpers.c 2008-12-03 21:29:59 UTC (rev 1874)
@@ -2633,7 +2633,8 @@
vex_state->guest_TISTART = 0;
vex_state->guest_TILEN = 0;
- vex_state->guest_NRADDR = 0;
+ vex_state->guest_NRADDR = 0;
+ vex_state->guest_SC_CLASS = 0;
}
Modified: trunk/priv/guest-x86/toIR.c
===================================================================
--- trunk/priv/guest-x86/toIR.c 2008-11-17 20:25:37 UTC (rev 1873)
+++ trunk/priv/guest-x86/toIR.c 2008-12-03 21:29:59 UTC (rev 1874)
@@ -12573,6 +12573,12 @@
case 0xCD: /* INT imm8 */
d32 = getIByte(delta); delta++;
+ /* For any of the cases where we emit a jump (that is, for all
+ currently handled cases), it's important that all ArchRegs
+ carry their up-to-date value at this point. So we declare an
+ end-of-block here, which forces any TempRegs caching ArchRegs
+ to be flushed. */
+
/* Handle int $0x40 .. $0x43 by synthesising a segfault and a
restart of this instruction (hence the "-2" two lines below,
to get the restart EIP to be this instruction. This is
@@ -12585,15 +12591,30 @@
break;
}
- if (d32 != 0x80) goto decode_failure;
- /* It's important that all ArchRegs carry their up-to-date value
- at this point. So we declare an end-of-block here, which
- forces any TempRegs caching ArchRegs to be flushed. */
- jmp_lit(Ijk_Sys_int128,((Addr32)guest_EIP_bbstart)+delta);
- dres.whatNext = Dis_StopHere;
- DIP("int $0x80\n");
- break;
+ /* Handle int $0x80 (linux syscalls), int $0x81 and $0x82
+ (darwin syscalls). */
+ if (d32 == 0x80) {
+ jmp_lit(Ijk_Sys_int128,((Addr32)guest_EIP_bbstart)+delta);
+ dres.whatNext = Dis_StopHere;
+ DIP("int $0x80\n");
+ break;
+ }
+ if (d32 == 0x81) {
+ jmp_lit(Ijk_Sys_int129,((Addr32)guest_EIP_bbstart)+delta);
+ dres.whatNext = Dis_StopHere;
+ DIP("int $0x81\n");
+ break;
+ }
+ if (d32 == 0x82) {
+ jmp_lit(Ijk_Sys_int130,((Addr32)guest_EIP_bbstart)+delta);
+ dres.whatNext = Dis_StopHere;
+ DIP("int $0x82\n");
+ break;
+ }
+ /* none of the above */
+ goto decode_failure;
+
/* ------------------------ Jcond, byte offset --------- */
case 0xEB: /* Jb (jump, byte offset) */
Modified: trunk/priv/host-x86/hdefs.c
===================================================================
--- trunk/priv/host-x86/hdefs.c 2008-11-17 20:25:37 UTC (rev 1873)
+++ trunk/priv/host-x86/hdefs.c 2008-12-03 21:29:59 UTC (rev 1874)
@@ -2276,6 +2276,12 @@
case Ijk_Sys_int128:
*p++ = 0xBD;
p = emit32(p, VEX_TRC_JMP_SYS_INT128); break;
+ case Ijk_Sys_int129:
+ *p++ = 0xBD;
+ p = emit32(p, VEX_TRC_JMP_SYS_INT129); break;
+ case Ijk_Sys_int130:
+ *p++ = 0xBD;
+ p = emit32(p, VEX_TRC_JMP_SYS_INT130); break;
case Ijk_Yield:
*p++ = 0xBD;
p = emit32(p, VEX_TRC_JMP_YIELD); break;
Modified: trunk/priv/ir/irdefs.c
===================================================================
--- trunk/priv/ir/irdefs.c 2008-11-17 20:25:37 UTC (rev 1873)
+++ trunk/priv/ir/irdefs.c 2008-12-03 21:29:59 UTC (rev 1874)
@@ -742,6 +742,8 @@
case Ijk_Sys_syscall: vex_printf("Sys_syscall"); break;
case Ijk_Sys_int32: vex_printf("Sys_int32"); break;
case Ijk_Sys_int128: vex_printf("Sys_int128"); break;
+ case Ijk_Sys_int129: vex_printf("Sys_int129"); break;
+ case Ijk_Sys_int130: vex_printf("Sys_int130"); break;
case Ijk_Sys_sysenter: vex_printf("Sys_sysenter"); break;
default: vpanic("ppIRJumpKind");
}
Modified: trunk/pub/libvex_guest_amd64.h
===================================================================
--- trunk/pub/libvex_guest_amd64.h 2008-11-17 20:25:37 UTC (rev 1873)
+++ trunk/pub/libvex_guest_amd64.h 2008-12-03 21:29:59 UTC (rev 1874)
@@ -152,6 +152,15 @@
replace-style ones. */
ULong guest_NRADDR;
+ /* Used for Darwin syscall dispatching. */
+ ULong guest_SC_CLASS;
+
+ /* HACK to make tls on darwin work. %gs only ever seems to
+ hold 0x60, and so guest_GS_0x60 holds the 64-bit offset
+ associated with a %gs value of 0x60. (A direct analogue
+ of the %fs-zero hack for amd64-linux). */
+ ULong guest_GS_0x60;
+
/* Padding to make it have an 16-aligned size */
ULong padding;
}
@@ -176,7 +185,14 @@
extern
ULong LibVEX_GuestAMD64_get_rflags ( /*IN*/VexGuestAMD64State* vex_state );
+/* Set the carry flag in the given state to 'new_carry_flag', which
+ should be zero or one. */
+extern
+void
+LibVEX_GuestAMD64_put_rflag_c ( ULong new_carry_flag,
+ /*MOD*/VexGuestAMD64State* vex_state );
+
#if 0
/* Convert a saved x87 FPU image (as created by fsave) and write it
into the supplied VexGuestX86State structure. The non-FP parts of
Modified: trunk/pub/libvex_guest_x86.h
===================================================================
--- trunk/pub/libvex_guest_x86.h 2008-11-17 20:25:37 UTC (rev 1873)
+++ trunk/pub/libvex_guest_x86.h 2008-12-03 21:29:59 UTC (rev 1874)
@@ -220,8 +220,11 @@
replace-style ones. */
UInt guest_NRADDR;
+ /* Used for Darwin syscall dispatching. */
+ UInt guest_SC_CLASS;
+
/* Padding to make it have an 16-aligned size */
- UInt padding;
+ /* UInt padding; */
}
VexGuestX86State;
Modified: trunk/pub/libvex_ir.h
===================================================================
--- trunk/pub/libvex_ir.h 2008-11-17 20:25:37 UTC (rev 1873)
+++ trunk/pub/libvex_ir.h 2008-12-03 21:29:59 UTC (rev 1874)
@@ -1217,6 +1217,8 @@
Ijk_Sys_syscall, /* amd64 'syscall', ppc 'sc' */
Ijk_Sys_int32, /* amd64/x86 'int $0x20' */
Ijk_Sys_int128, /* amd64/x86 'int $0x80' */
+ Ijk_Sys_int129, /* amd64/x86 'int $0x81' */
+ Ijk_Sys_int130, /* amd64/x86 'int $0x82' */
Ijk_Sys_sysenter /* x86 'sysenter'. guest_EIP becomes
invalid at the point this happens. */
}
Modified: trunk/pub/libvex_trc_values.h
===================================================================
--- trunk/pub/libvex_trc_values.h 2008-11-17 20:25:37 UTC (rev 1873)
+++ trunk/pub/libvex_trc_values.h 2008-12-03 21:29:59 UTC (rev 1874)
@@ -79,6 +79,9 @@
#define VEX_TRC_JMP_SYS_SYSCALL 73 /* do syscall before continuing */
#define VEX_TRC_JMP_SYS_INT32 75 /* do syscall before continuing */
#define VEX_TRC_JMP_SYS_INT128 77 /* do syscall before continuing */
+#define VEX_TRC_JMP_SYS_INT129 89 /* do syscall before continuing */
+#define VEX_TRC_JMP_SYS_INT130 91 /* do syscall before continuing */
+
#define VEX_TRC_JMP_SYS_SYSENTER 79 /* do syscall before continuing */
#endif /* ndef __LIBVEX_TRC_VALUES_H */
|
|
From: <sv...@va...> - 2008-12-03 21:44:55
|
Author: sewardj
Date: 2008-12-03 21:31:48 +0000 (Wed, 03 Dec 2008)
New Revision: 8804
Log:
Assert that the guest state size is a multiple of 16, not 8.
Modified:
trunk/coregrind/m_initimg/initimg-aix5.c
trunk/coregrind/m_initimg/initimg-linux.c
Modified: trunk/coregrind/m_initimg/initimg-aix5.c
===================================================================
--- trunk/coregrind/m_initimg/initimg-aix5.c 2008-12-03 11:39:37 UTC (rev 8803)
+++ trunk/coregrind/m_initimg/initimg-aix5.c 2008-12-03 21:31:48 UTC (rev 8804)
@@ -292,7 +292,7 @@
# if defined(VGP_ppc32_aix5)
- vg_assert(0 == sizeof(VexGuestPPC32State) % 8);
+ vg_assert(0 == sizeof(VexGuestPPC32State) % 16);
/* Zero out the initial state, and set up the simulated FPU in a
sane way. */
@@ -304,7 +304,7 @@
# else /* defined(VGP_ppc64_aix5) */
- vg_assert(0 == sizeof(VexGuestPPC64State) % 8);
+ vg_assert(0 == sizeof(VexGuestPPC64State) % 16);
/* Zero out the initial state, and set up the simulated FPU in a
sane way. */
Modified: trunk/coregrind/m_initimg/initimg-linux.c
===================================================================
--- trunk/coregrind/m_initimg/initimg-linux.c 2008-12-03 11:39:37 UTC (rev 8803)
+++ trunk/coregrind/m_initimg/initimg-linux.c 2008-12-03 21:31:48 UTC (rev 8804)
@@ -955,7 +955,7 @@
all other registers zeroed. */
# if defined(VGP_x86_linux)
- vg_assert(0 == sizeof(VexGuestX86State) % 8);
+ vg_assert(0 == sizeof(VexGuestX86State) % 16);
/* Zero out the initial state, and set up the simulated FPU in a
sane way. */
@@ -976,7 +976,7 @@
asm volatile("movw %%ss, %0" : : "m" (arch->vex.guest_SS));
# elif defined(VGP_amd64_linux)
- vg_assert(0 == sizeof(VexGuestAMD64State) % 8);
+ vg_assert(0 == sizeof(VexGuestAMD64State) % 16);
/* Zero out the initial state, and set up the simulated FPU in a
sane way. */
@@ -991,7 +991,7 @@
arch->vex.guest_RIP = iifii.initial_client_IP;
# elif defined(VGP_ppc32_linux)
- vg_assert(0 == sizeof(VexGuestPPC32State) % 8);
+ vg_assert(0 == sizeof(VexGuestPPC32State) % 16);
/* Zero out the initial state, and set up the simulated FPU in a
sane way. */
|
|
From: <sv...@va...> - 2008-12-03 11:53:49
|
Author: sewardj
Date: 2008-12-03 11:39:37 +0000 (Wed, 03 Dec 2008)
New Revision: 8803
Log:
Change the memory allocation strategy used by the conflicting-access
machinery, so as to allocate fewer chunks of memory. This increases
the speed of Helgrind by about 10% on some apps, which probably means
the conflicting-access machinery itself is about 20% faster.
Modified:
trunk/coregrind/m_wordfm.c
trunk/helgrind/libhb_core.c
trunk/include/pub_tool_wordfm.h
Modified: trunk/coregrind/m_wordfm.c
===================================================================
--- trunk/coregrind/m_wordfm.c 2008-11-27 17:48:36 UTC (rev 8802)
+++ trunk/coregrind/m_wordfm.c 2008-12-03 11:39:37 UTC (rev 8803)
@@ -621,7 +621,7 @@
{
MaybeWord oldV;
AvlNode* node;
- node = fm->alloc_nofail( fm->cc, sizeof(struct _AvlNode) );
+ node = fm->alloc_nofail( fm->cc, sizeof(AvlNode) );
node->key = k;
node->val = v;
oldV.b = False;
@@ -826,6 +826,12 @@
return nyu;
}
+// admin: what's the 'common' allocation size (for tree nodes?)
+SizeT VG_(getNodeSizeFM)( void )
+{
+ return sizeof(AvlNode);
+}
+
//------------------------------------------------------------------//
//--- end WordFM ---//
//--- Implementation ---//
Modified: trunk/helgrind/libhb_core.c
===================================================================
--- trunk/helgrind/libhb_core.c 2008-11-27 17:48:36 UTC (rev 8802)
+++ trunk/helgrind/libhb_core.c 2008-12-03 11:39:37 UTC (rev 8803)
@@ -2546,6 +2546,108 @@
/////////////////////////////////////////////////////////
// //
+// A simple group (memory) allocator //
+// //
+/////////////////////////////////////////////////////////
+
+//////////////// BEGIN general group allocator
+typedef
+ struct {
+ UWord elemSzB; /* element size */
+ UWord nPerGroup; /* # elems per group */
+ void* (*alloc)(HChar*, SizeT); /* group allocator */
+ HChar* cc; /* group allocator's cc */
+ void (*free)(void*); /* group allocator's free-er (unused) */
+ /* XArray of void* (pointers to groups). The groups themselves.
+ Each element is a pointer to a block of size (elemSzB *
+ nPerGroup) bytes. */
+ XArray* groups;
+ /* next free element. Is a pointer to an element in one of the
+ groups pointed to by .groups. */
+ void* nextFree;
+ }
+ GroupAlloc;
+
+static void init_GroupAlloc ( /*MOD*/GroupAlloc* ga,
+ UWord elemSzB,
+ UWord nPerGroup,
+ void* (*alloc)(HChar*, SizeT),
+ HChar* cc,
+ void (*free)(void*) )
+{
+ tl_assert(0 == (elemSzB % sizeof(UWord)));
+ tl_assert(elemSzB >= sizeof(UWord));
+ tl_assert(nPerGroup >= 100); /* let's say */
+ tl_assert(alloc);
+ tl_assert(cc);
+ tl_assert(free);
+ tl_assert(ga);
+ VG_(memset)(ga, 0, sizeof(*ga));
+ ga->elemSzB = elemSzB;
+ ga->nPerGroup = nPerGroup;
+ ga->groups = NULL;
+ ga->alloc = alloc;
+ ga->cc = cc;
+ ga->free = free;
+ ga->groups = VG_(newXA)( alloc, cc, free, sizeof(void*) );
+ ga->nextFree = NULL;
+ tl_assert(ga->groups);
+}
+
+/* The freelist is empty. Allocate a new group and put all the new
+ elements in it onto the freelist. */
+__attribute__((noinline))
+static void gal_add_new_group ( GroupAlloc* ga )
+{
+ Word i;
+ UWord* group;
+ tl_assert(ga);
+ tl_assert(ga->nextFree == NULL);
+ group = ga->alloc( ga->cc, ga->elemSzB * ga->nPerGroup );
+ tl_assert(group);
+ /* extend the freelist through the new group. Place the freelist
+ pointer in the first word of each element. That's why the
+ element size must be at least one word. */
+ for (i = ga->nPerGroup-1; i >= 0; i--) {
+ UChar* elemC = ((UChar*)group) + i * ga->elemSzB;
+ UWord* elem = (UWord*)elemC;
+ tl_assert(0 == (((UWord)elem) % sizeof(UWord)));
+ *elem = (UWord)ga->nextFree;
+ ga->nextFree = elem;
+ }
+ /* and add to our collection of groups */
+ VG_(addToXA)( ga->groups, &group );
+}
+
+inline static void* gal_Alloc ( GroupAlloc* ga )
+{
+ UWord* elem;
+ if (UNLIKELY(ga->nextFree == NULL)) {
+ gal_add_new_group(ga);
+ }
+ elem = ga->nextFree;
+ ga->nextFree = (void*)*elem;
+ *elem = 0; /* unnecessary, but just to be on the safe side */
+ return elem;
+}
+
+inline static void* gal_Alloc_w_size_check ( GroupAlloc* ga, SizeT n )
+{
+ tl_assert(n == ga->elemSzB);
+ return gal_Alloc( ga );
+}
+
+inline static void gal_Free ( GroupAlloc* ga, void* p )
+{
+ UWord* elem = (UWord*)p;
+ *elem = (UWord)ga->nextFree;
+ ga->nextFree = elem;
+}
+//////////////// END general group allocator
+
+
+/////////////////////////////////////////////////////////
+// //
// Change-event map2 //
// //
/////////////////////////////////////////////////////////
@@ -2613,8 +2715,8 @@
typedef
struct _RCEC {
+ UWord magic; /* sanity check only */
struct _RCEC* next;
- UWord magic;
UWord rc;
UWord rcX; /* used for crosschecking */
UWord frames[1 + N_FRAMES]; /* first word is hash of all the rest */
@@ -2655,6 +2757,20 @@
}
+//////////// BEGIN RCEC group allocator
+static GroupAlloc rcec_group_allocator;
+
+static RCEC* alloc_RCEC ( void ) {
+ return gal_Alloc ( &rcec_group_allocator );
+}
+
+static void free_RCEC ( RCEC* rcec ) {
+ tl_assert(rcec->magic == RCEC_MAGIC);
+ gal_Free( &rcec_group_allocator, rcec );
+}
+//////////// END OldRef group allocator
+
+
/* Find 'ec' in the RCEC list whose head pointer lives at 'headp' and
move it one step closer the the front of the list, so as to make
subsequent searches for it cheaper. */
@@ -2733,7 +2849,7 @@
move_RCEC_one_step_forward( &contextTab[hent], copy );
}
} else {
- copy = HG_(zalloc)( "libhb.cfoa.1", sizeof(RCEC) );
+ copy = alloc_RCEC();
tl_assert(copy != example);
*copy = *example;
copy->next = contextTab[hent];
@@ -2771,7 +2887,7 @@
}
///////////////////////////////////////////////////////
-//// Part (2): An OSet of OldRefs, that refer to (1)
+//// Part (2): A WordFM guest-addr -> OldRef, that refer to (1)
///
// (UInt) `echo "Old Reference Information" | md5sum`
@@ -2783,35 +2899,73 @@
typedef
struct {
- Addr ea;
- UWord magic;
+ UWord magic; /* sanity check only */
UWord gen; /* when most recently accessed */
+ /* or free list when not in use */
/* unused slots in this array have .thr == NULL */
Thr_n_RCEC accs[N_OLDREF_ACCS];
}
OldRef;
-static OSet* oldrefTree = NULL; /* OSet* of OldRef */
-static UWord oldrefGen = 0; /* current LRU generation # */
-static UWord oldrefTreeN = 0; /* # elems in oldrefTree */
-static UWord oldrefGenIncAt = 0; /* inc gen # when size hits this */
+//////////// BEGIN OldRef group allocator
+static GroupAlloc oldref_group_allocator;
+
+static OldRef* alloc_OldRef ( void ) {
+ return gal_Alloc ( &oldref_group_allocator );
+}
+
+static void free_OldRef ( OldRef* r ) {
+ tl_assert(r->magic == OldRef_MAGIC);
+ gal_Free( &oldref_group_allocator, r );
+}
+//////////// END OldRef group allocator
+
+//////////// BEGIN oldrefTree node group allocator
+static GroupAlloc oldrefnd_group_allocator;
+static void* oldrefnd_first_alloc = NULL;
+
+static void* alloc_OldRef_nd ( HChar* cc, SizeT n ) {
+ if (UNLIKELY(oldrefnd_first_alloc == NULL)) {
+ oldrefnd_first_alloc = HG_(zalloc)( "libhb.alloc_OldRef_nd.1", n );
+ return oldrefnd_first_alloc;
+ } else {
+ return gal_Alloc_w_size_check ( &oldrefnd_group_allocator, n );
+ }
+}
+
+static void free_OldRef_nd ( void* p ) {
+ if (UNLIKELY(p == oldrefnd_first_alloc)) {
+ HG_(free)( oldrefnd_first_alloc );
+ oldrefnd_first_alloc = NULL;
+ } else {
+ gal_Free( &oldrefnd_group_allocator, p );
+ }
+}
+//////////// BEGIN oldrefTree node group allocator
+
+static WordFM* oldrefTree = NULL; /* WordFM* Addr OldRef* */
+static UWord oldrefGen = 0; /* current LRU generation # */
+static UWord oldrefTreeN = 0; /* # elems in oldrefTree */
+static UWord oldrefGenIncAt = 0; /* inc gen # when size hits this */
+
static void event_map_bind ( Addr a, Thr* thr )
{
- OldRef key, *ref;
- RCEC* here;
- Word i, j;
+ OldRef* ref;
+ RCEC* here;
+ Word i, j;
+ UWord keyW, valW;
+ Bool b;
- key.ea = a;
- key.magic = OldRef_MAGIC;
+ b = VG_(lookupFM)( oldrefTree, &keyW, &valW, a );
- ref = VG_(OSetGen_Lookup)( oldrefTree, &key );
+ if (b) {
- if (ref) {
-
/* We already have a record for this address. We now need to
see if we have a stack trace pertaining to this thread's
access. */
+ tl_assert(keyW == a);
+ ref = (OldRef*)valW;
tl_assert(ref->magic == OldRef_MAGIC);
tl_assert(thr);
@@ -2858,7 +3012,6 @@
}
ref->gen = oldrefGen;
- tl_assert(ref->ea == a);
} else {
@@ -2871,10 +3024,11 @@
}
here = get_RCEC( thr );
ctxt__rcinc(here);
- ref = VG_(OSetGen_AllocNode)( oldrefTree, sizeof(OldRef) );
+
+
+ ref = alloc_OldRef();
ref->magic = OldRef_MAGIC;
ref->gen = oldrefGen;
- ref->ea = a;
ref->accs[0].rcec = here;
ref->accs[0].thr = thr;
tl_assert(thr); /* thr==NULL is used to signify an empty slot,
@@ -2883,7 +3037,7 @@
ref->accs[j].thr = NULL;
ref->accs[j].rcec = NULL;
}
- VG_(OSetGen_Insert)( oldrefTree, ref );
+ VG_(addToFM)( oldrefTree, a, (UWord)ref );
oldrefTreeN++;
}
@@ -2895,16 +3049,17 @@
/*OUT*/Thr** resThr,
Thr* thr_acc, Addr a )
{
- Word i;
- OldRef key, *ref;
+ Word i;
+ OldRef* ref;
+ UWord keyW, valW;
+ Bool b;
- tl_assert(thr_acc);
+ tl_assert(thr_acc);
- key.ea = a;
- key.magic = OldRef_MAGIC;
-
- ref = VG_(OSetGen_Lookup)( oldrefTree, &key );
- if (ref) {
+ b = VG_(lookupFM)( oldrefTree, &keyW, &valW, a );
+ if (b) {
+ ref = (OldRef*)valW;
+ tl_assert(keyW == a);
tl_assert(ref->magic == OldRef_MAGIC);
tl_assert(ref->accs[0].thr); /* first slot must always be used */
@@ -2937,20 +3092,46 @@
static void event_map_init ( void )
{
Word i;
+
+ /* Context (RCEC) group allocator */
+ init_GroupAlloc ( &rcec_group_allocator,
+ sizeof(RCEC),
+ 1000 /* RCECs per group */,
+ HG_(zalloc),
+ "libhb.event_map_init.1 (RCEC groups)",
+ HG_(free) );
+
+ /* Context table */
tl_assert(!contextTab);
- contextTab = HG_(zalloc)( "libhb.event_map_init.1 (context table)",
+ contextTab = HG_(zalloc)( "libhb.event_map_init.2 (context table)",
N_RCEC_TAB * sizeof(RCEC*) );
tl_assert(contextTab);
for (i = 0; i < N_RCEC_TAB; i++)
contextTab[i] = NULL;
+ /* Oldref group allocator */
+ init_GroupAlloc ( &oldref_group_allocator,
+ sizeof(OldRef),
+ 1000 /* OldRefs per group */,
+ HG_(zalloc),
+ "libhb.event_map_init.3 (OldRef groups)",
+ HG_(free) );
+
+ /* Oldref node group allocator */
+ init_GroupAlloc ( &oldrefnd_group_allocator,
+ VG_(getNodeSizeFM)(),
+ 1000 /* OldRefs per group */,
+ HG_(zalloc),
+ "libhb.event_map_init.3 (OldRef tree node groups)",
+ HG_(free) );
+
+ /* Oldref tree */
tl_assert(!oldrefTree);
- tl_assert(offsetof(OldRef,ea) == 0); /* prereq for unboxed cmps */
- oldrefTree = VG_(OSetGen_Create)(
- offsetof(OldRef,ea), /* == 0 */
- NULL, /* use unboxed cmp on OldRefs */
- HG_(zalloc), "libhb.event_map_init.2 (oldref tree)",
- HG_(free)
+ oldrefTree = VG_(newFM)(
+ alloc_OldRef_nd,
+ "libhb.event_map_init.4 (oldref tree)",
+ free_OldRef_nd,
+ NULL /* use unboxed cmp */
);
tl_assert(oldrefTree);
@@ -2965,6 +3146,7 @@
OldRef* oldref;
Word i;
UWord nEnts = 0;
+ UWord keyW, valW;
/* Set the 'check' reference counts to zero. Also, optionally
check that the real reference counts are non-zero. We allow
@@ -2987,8 +3169,9 @@
tl_assert(stats__ctxt_tab_curr <= stats__ctxt_tab_max);
/* visit all the referencing points, inc check ref counts */
- VG_(OSetGen_ResetIter)( oldrefTree );
- while ( (oldref = VG_(OSetGen_Next)( oldrefTree )) ) {
+ VG_(initIterFM)( oldrefTree );
+ while (VG_(nextIterFM)( oldrefTree, &keyW, &valW )) {
+ oldref = (OldRef*)valW;
tl_assert(oldref->magic == OldRef_MAGIC);
for (i = 0; i < N_OLDREF_ACCS; i++) {
if (oldref->accs[i].thr) {
@@ -3028,7 +3211,7 @@
VG_(printf)("libhb: event_map GC at size %lu\n", oldrefTreeN);
/* Check our counting is sane */
- tl_assert(oldrefTreeN == (UWord) VG_(OSetGen_Size)( oldrefTree ));
+ tl_assert(oldrefTreeN == VG_(sizeFM)( oldrefTree ));
/* Check the reference counts */
event_map__check_reference_counts( True/*before*/ );
@@ -3046,11 +3229,12 @@
/* genMap :: generation-number -> count-of-nodes-with-that-number */
- VG_(OSetGen_ResetIter)( oldrefTree );
- while ( (oldref = VG_(OSetGen_Next)( oldrefTree )) ) {
+ VG_(initIterFM)( oldrefTree );
+ while ( VG_(nextIterFM)( oldrefTree, &keyW, &valW )) {
- UWord ea;
- UWord key = oldref->gen;
+ UWord ea, key;
+ oldref = (OldRef*)valW;
+ key = oldref->gen;
/* BEGIN find 'ea', which is the index in genMap holding the
count for generation number 'key'. */
@@ -3116,7 +3300,7 @@
/* END find 'ea' from 'key' */
tl_assert(ea >= 0 && ea < genMap_size);
- /* and the whole point of this elaborate compuation of 'ea' is .. */
+ /* and the whole point of this elaborate computation of 'ea' is .. */
genMap[ea]++;
}
@@ -3162,17 +3346,18 @@
stuff from it, so first we need to copy them off somewhere
else. (sigh) */
refs2del = VG_(newXA)( HG_(zalloc), "libhb.emmG.2",
- HG_(free), sizeof(OldRef*) );
+ HG_(free), sizeof(Addr) );
if (retained < oldrefTreeN) {
/* This is the normal (expected) case. We discard any ref whose
generation number <= maxGen. */
- VG_(OSetGen_ResetIter)( oldrefTree );
- while ( (oldref = VG_(OSetGen_Next)( oldrefTree )) ) {
+ VG_(initIterFM)( oldrefTree );
+ while (VG_(nextIterFM)( oldrefTree, &keyW, &valW )) {
+ oldref = (OldRef*)valW;
tl_assert(oldref->magic == OldRef_MAGIC);
if (oldref->gen <= maxGen) {
- VG_(addToXA)( refs2del, &oldref );
+ VG_(addToXA)( refs2del, &keyW );
}
}
if (VG_(clo_verbosity) > 1) {
@@ -3190,13 +3375,14 @@
tree, so we need to have some other way of deciding which
refs to throw away. Just throw out half of them randomly. */
tl_assert(retained == oldrefTreeN);
- VG_(OSetGen_ResetIter)( oldrefTree );
- while ( (oldref = VG_(OSetGen_Next)( oldrefTree )) ) {
+ VG_(initIterFM)( oldrefTree );
+ while (VG_(nextIterFM)( oldrefTree, &keyW, &valW )) {
UInt n;
+ oldref = (OldRef*)valW;
tl_assert(oldref->magic == OldRef_MAGIC);
n = VG_(random)( &rand_seed );
if ((n & 0xFFF) < 0x800) {
- VG_(addToXA)( refs2del, &oldref );
+ VG_(addToXA)( refs2del, &keyW );
retained--;
}
}
@@ -3214,26 +3400,28 @@
if (0) VG_(printf)("%s","deleting entries\n");
for (i = 0; i < n2del; i++) {
- void* nd;
- OldRef* ref = *(OldRef**)VG_(indexXA)( refs2del, i );
- tl_assert(ref);
- tl_assert(ref->magic == OldRef_MAGIC);
+ Bool b;
+ Addr ga2del = *(Addr*)VG_(indexXA)( refs2del, i );
+ b = VG_(delFromFM)( oldrefTree, &keyW, &valW, ga2del );
+ tl_assert(b);
+ tl_assert(keyW == ga2del);
+ oldref = (OldRef*)valW;
for (j = 0; j < N_OLDREF_ACCS; j++) {
- if (ref->accs[j].rcec) {
- tl_assert(ref->accs[j].thr);
+ if (oldref->accs[j].rcec) {
+ tl_assert(oldref->accs[j].thr);
stats__ctxt_rcdec3++;
- ctxt__rcdec( ref->accs[j].rcec );
+ ctxt__rcdec( oldref->accs[j].rcec );
} else {
- tl_assert(!ref->accs[j].thr);
+ tl_assert(!oldref->accs[j].thr);
}
}
- nd = VG_(OSetGen_Remove)( oldrefTree, ref );
- VG_(OSetGen_FreeNode)( oldrefTree, nd );
+
+ free_OldRef( oldref );
}
VG_(deleteXA)( refs2del );
- tl_assert( VG_(OSetGen_Size)( oldrefTree ) == retained );
+ tl_assert( VG_(sizeFM)( oldrefTree ) == retained );
oldrefTreeN = retained;
oldrefGenIncAt = oldrefTreeN; /* start new gen right away */
@@ -3245,7 +3433,7 @@
while (p) {
if (p->rc == 0) {
*pp = p->next;
- HG_(free)(p);
+ free_RCEC(p);
p = *pp;
tl_assert(stats__ctxt_tab_curr > 0);
stats__ctxt_tab_curr--;
Modified: trunk/include/pub_tool_wordfm.h
===================================================================
--- trunk/include/pub_tool_wordfm.h 2008-11-27 17:48:36 UTC (rev 8802)
+++ trunk/include/pub_tool_wordfm.h 2008-12-03 11:39:37 UTC (rev 8803)
@@ -158,6 +158,9 @@
WordFM* VG_(dopyFM) ( WordFM* fm,
UWord(*dopyK)(UWord), UWord(*dopyV)(UWord) );
+// admin: what's the 'common' allocation size (for tree nodes?)
+SizeT VG_(getNodeSizeFM)( void );
+
//------------------------------------------------------------------//
//--- end WordFM ---//
//--- Public interface ---//
|
|
From: Nicholas N. <nj...@cs...> - 2008-12-03 06:08:06
|
On Tue, 2 Dec 2008, Robert Walsh wrote: > The Valgrind code is becoming dense with #ifdef's. As new > architecture and OS support is added, this is only likely to get > worse. I'm making this comment without any real thoughts on a good > (elegant and efficient) solution. Any ideas? Anyone else see this as > a problem, at least? AFAICT, for a lot of cases it's either #if/#ifdefs, or putting the arch/os/platform-specific code into a separate file. We currently use a mix of the two, #if/#ifdef for smaller things and separate files for bigger things. It's not great, but it is hard to see how else to do it. Nick |
|
From: Nicholas N. <nj...@cs...> - 2008-12-03 05:47:34
|
On Mon, 1 Dec 2008, Felix Schmidt wrote: > I want to know if my current address for memory access points to a stack or a heap. > How can I do that? If you're writing a Valgrind tool, the function 'describe_addr' in memcheck/mc_errors.c might be instructive. Nick |
|
From: Tom H. <th...@cy...> - 2008-12-03 04:11:25
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2008-12-03 03:15:02 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 == 374 tests, 89 stderr failures, 1 stdout failure, 29 post failures == exp-ptrcheck/tests/bad_percentify (stderr) exp-ptrcheck/tests/base (stderr) exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/fp (stderr) exp-ptrcheck/tests/globalerr (stderr) exp-ptrcheck/tests/hackedbz2 (stderr) exp-ptrcheck/tests/hp_bounds (stderr) exp-ptrcheck/tests/hp_dangle (stderr) exp-ptrcheck/tests/justify (stderr) exp-ptrcheck/tests/partial_bad (stderr) exp-ptrcheck/tests/partial_good (stderr) exp-ptrcheck/tests/preen_invars (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) exp-ptrcheck/tests/realloc (stderr) exp-ptrcheck/tests/stackerr (stderr) exp-ptrcheck/tests/strcpy (stderr) exp-ptrcheck/tests/supp (stderr) exp-ptrcheck/tests/tricky (stderr) exp-ptrcheck/tests/unaligned (stderr) exp-ptrcheck/tests/zero (stderr) helgrind/tests/bar_bad (stderr) helgrind/tests/bar_trivial (stderr) helgrind/tests/hg01_all_ok (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/hg06_readshared (stderr) helgrind/tests/pth_barrier1 (stderr) helgrind/tests/pth_barrier2 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/rwlock_test (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc02_simple_tls (stderr) helgrind/tests/tc03_re_excl (stderr) helgrind/tests/tc04_free_lock (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc07_hbl1 (stderr) helgrind/tests/tc08_hbl2 (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc11_XCHG (stderr) helgrind/tests/tc12_rwl_trivial (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc17_sembar (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) helgrind/tests/tc24_nonzero_sem (stderr) massif/tests/alloc-fns-A (post) massif/tests/alloc-fns-B (post) massif/tests/basic (post) massif/tests/basic2 (post) massif/tests/big-alloc (post) massif/tests/culling1 (stderr) massif/tests/culling2 (stderr) massif/tests/custom_alloc (post) massif/tests/deep-A (post) massif/tests/deep-B (stderr) massif/tests/deep-B (post) massif/tests/deep-C (stderr) massif/tests/deep-C (post) massif/tests/deep-D (post) massif/tests/ignoring (post) massif/tests/insig (post) massif/tests/long-names (post) massif/tests/long-time (post) massif/tests/new-cpp (post) massif/tests/null (post) massif/tests/one (post) massif/tests/overloaded-new (post) massif/tests/peak (post) massif/tests/peak2 (stderr) massif/tests/peak2 (post) massif/tests/realloc (stderr) massif/tests/realloc (post) massif/tests/thresholds_0_0 (post) massif/tests/thresholds_0_10 (post) massif/tests/thresholds_10_0 (post) massif/tests/thresholds_10_10 (post) massif/tests/thresholds_5_0 (post) massif/tests/thresholds_5_10 (post) massif/tests/zero1 (post) massif/tests/zero2 (post) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/long_namespace_xml (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/mismatches (stderr) memcheck/tests/origin1-yes (stderr) memcheck/tests/origin4-many (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_changes (stderr) memcheck/tests/varinfo1 (stderr) memcheck/tests/varinfo2 (stderr) memcheck/tests/varinfo3 (stderr) memcheck/tests/varinfo4 (stderr) memcheck/tests/varinfo5 (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/x86/bug152022 (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/xor-undef-x86 (stderr) memcheck/tests/xml1 (stderr) none/tests/blockfault (stderr) none/tests/mremap2 (stdout) none/tests/shell (stderr) none/tests/shell_valid1 (stderr) none/tests/shell_valid2 (stderr) none/tests/shell_valid3 (stderr) |
|
From: Tom H. <th...@cy...> - 2008-12-03 04:09:10
|
Nightly build on lloyd ( x86_64, Fedora 7 ) started at 2008-12-03 03:05:04 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 == 471 tests, 24 stderr failures, 0 stdout failures, 0 post failures == exp-ptrcheck/tests/base (stderr) exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/preen_invars (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) helgrind/tests/bar_bad (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/pth_barrier1 (stderr) helgrind/tests/pth_barrier2 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) memcheck/tests/x86/scalar (stderr) none/tests/blockfault (stderr) |
|
From: Tom H. <th...@cy...> - 2008-12-03 03:47:38
|
Nightly build on trojan ( x86_64, Fedora Core 6 ) started at 2008-12-03 03:25:07 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 == 475 tests, 23 stderr failures, 4 stdout failures, 0 post failures == exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/preen_invars (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/pth_barrier1 (stderr) helgrind/tests/pth_barrier2 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) memcheck/tests/x86/bug133694 (stdout) memcheck/tests/x86/bug133694 (stderr) memcheck/tests/x86/scalar (stderr) none/tests/blockfault (stderr) none/tests/cmdline1 (stdout) none/tests/cmdline2 (stdout) none/tests/mremap2 (stdout) |
|
From: Tom H. <th...@cy...> - 2008-12-03 03:29:27
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2008-12-03 03:00:04 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 == 477 tests, 37 stderr failures, 4 stdout failures, 0 post failures == drd/tests/pth_detached2 (stdout) exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/hackedbz2 (stderr) helgrind/tests/bar_bad (stderr) helgrind/tests/hg01_all_ok (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/pth_barrier1 (stderr) helgrind/tests/pth_barrier2 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/rwlock_test (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc17_sembar (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) none/tests/amd64/insn_ssse3 (stdout) none/tests/amd64/insn_ssse3 (stderr) none/tests/amd64/ssse3_misaligned (stderr) none/tests/blockfault (stderr) none/tests/fdleak_fcntl (stderr) none/tests/mremap2 (stdout) none/tests/x86/insn_ssse3 (stdout) none/tests/x86/insn_ssse3 (stderr) none/tests/x86/ssse3_misaligned (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 477 tests, 37 stderr failures, 3 stdout failures, 0 post failures == exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/hackedbz2 (stderr) helgrind/tests/bar_bad (stderr) helgrind/tests/hg01_all_ok (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/pth_barrier1 (stderr) helgrind/tests/pth_barrier2 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/rwlock_test (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc17_sembar (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) none/tests/amd64/insn_ssse3 (stdout) none/tests/amd64/insn_ssse3 (stderr) none/tests/amd64/ssse3_misaligned (stderr) none/tests/blockfault (stderr) none/tests/fdleak_fcntl (stderr) none/tests/mremap2 (stdout) none/tests/x86/insn_ssse3 (stdout) none/tests/x86/insn_ssse3 (stderr) none/tests/x86/ssse3_misaligned (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Wed Dec 3 03:14:32 2008 --- new.short Wed Dec 3 03:29:13 2008 *************** *** 8,10 **** ! == 477 tests, 37 stderr failures, 3 stdout failures, 0 post failures == exp-ptrcheck/tests/ccc (stderr) --- 8,11 ---- ! == 477 tests, 37 stderr failures, 4 stdout failures, 0 post failures == ! drd/tests/pth_detached2 (stdout) exp-ptrcheck/tests/ccc (stderr) |
|
From: J. B. <jb...@gm...> - 2008-12-03 01:11:35
|
Thanks! As I wrote, this is not meant for inclusion (yet -- among others, I need to clean it up), just a heads up where the current status is. I'll make sure to fix the issues you pointed out. -Johan On Tue, Dec 2, 2008 at 4:58 PM, Robert Walsh <rj...@du...> wrote: > Minor feedback on the patch: > > * In cg-arm.c, you might want to update the copyright, since you > created this file. > * In cg-arm.c, the warning message says "PPC32" instead of "ARM". > * d3basics.c has what looks like a debugging VG_(printf) left in > there. Also in m_machine.c, sigframe-arm-linux.c, etc. > * readdwarf.c comments out a debug message. Why? > * m_main.c forward-declares raise and __aeabi_unwind_cpp_pr0, and > then immediately implements them. Any reason why? > > I haven't looked beyond sigframe-arm-linux.c yet, so I may have more > when I get a moment to take a look. > > General comment: > > * Indenting is 3 spaces, no tabs. > > Note: I haven't tried this patch myself, as I don't have a linux-arm > box to try with. These comments are just from code inspection. > > Regards, > Robert. > |
|
From: Robert W. <rj...@du...> - 2008-12-03 01:07:33
|
The Valgrind code is becoming dense with #ifdef's. As new architecture and OS support is added, this is only likely to get worse. I'm making this comment without any real thoughts on a good (elegant and efficient) solution. Any ideas? Anyone else see this as a problem, at least? Regards, Robert. |
|
From: Robert W. <rj...@du...> - 2008-12-03 00:58:27
|
Minor feedback on the patch: * In cg-arm.c, you might want to update the copyright, since you created this file. * In cg-arm.c, the warning message says "PPC32" instead of "ARM". * d3basics.c has what looks like a debugging VG_(printf) left in there. Also in m_machine.c, sigframe-arm-linux.c, etc. * readdwarf.c comments out a debug message. Why? * m_main.c forward-declares raise and __aeabi_unwind_cpp_pr0, and then immediately implements them. Any reason why? I haven't looked beyond sigframe-arm-linux.c yet, so I may have more when I get a moment to take a look. General comment: * Indenting is 3 spaces, no tabs. Note: I haven't tried this patch myself, as I don't have a linux-arm box to try with. These comments are just from code inspection. Regards, Robert. |