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
(17) |
2
(21) |
3
(17) |
4
(28) |
5
(21) |
6
(11) |
|
7
(13) |
8
(21) |
9
(21) |
10
(9) |
11
(11) |
12
(15) |
13
(23) |
|
14
(15) |
15
(22) |
16
(28) |
17
(12) |
18
(15) |
19
(8) |
20
(7) |
|
21
(8) |
22
(12) |
23
(13) |
24
(7) |
25
(7) |
26
(3) |
27
(9) |
|
28
(13) |
29
(7) |
30
(7) |
31
(9) |
|
|
|
|
From: Jeremy F. <je...@go...> - 2004-03-15 23:47:02
|
CVS commit by fitzhardinge:
Ooops. Fix overly-hasty commit.
M +4 -2 vg_signals.c 1.63
--- valgrind/coregrind/vg_signals.c #1.62:1.63
@@ -1717,9 +1717,9 @@ static void vg_default_action(const vki_
if (terminate) {
+ struct vki_rlimit corelim;
+
if (core) {
/* If they set the core-size limit to zero, don't generate a
core file */
- static struct vki_rlimit zero = { 0, 0 };
- struct vki_rlimit corelim;
VG_(getrlimit)(VKI_RLIMIT_CORE, &corelim);
@@ -1797,4 +1797,6 @@ static void vg_default_action(const vki_
if (core) {
+ static struct vki_rlimit zero = { 0, 0 };
+
make_coredump(tid, info, corelim.rlim_cur);
|
|
From: Jeremy F. <je...@go...> - 2004-03-15 23:44:18
|
CVS commit by fitzhardinge:
Be a bit clearer about core-dumping messages (don't say we are if we're not)
M +13 -7 vg_signals.c 1.62
--- valgrind/coregrind/vg_signals.c #1.61:1.62
@@ -1717,4 +1717,16 @@ static void vg_default_action(const vki_
if (terminate) {
+ if (core) {
+ /* If they set the core-size limit to zero, don't generate a
+ core file */
+ static struct vki_rlimit zero = { 0, 0 };
+ struct vki_rlimit corelim;
+
+ VG_(getrlimit)(VKI_RLIMIT_CORE, &corelim);
+
+ if (corelim.rlim_cur == 0)
+ core = False;
+ }
+
if (VG_(clo_verbosity) != 0 && (core || VG_(clo_verbosity) > 1)) {
VG_(message)(Vg_UserMsg, "");
@@ -1785,10 +1797,4 @@ static void vg_default_action(const vki_
if (core) {
- static struct vki_rlimit zero = { 0, 0 };
- struct vki_rlimit corelim;
-
- VG_(getrlimit)(VKI_RLIMIT_CORE, &corelim);
-
- if (corelim.rlim_cur > 0)
make_coredump(tid, info, corelim.rlim_cur);
|
|
From: Jeremy F. <je...@go...> - 2004-03-15 22:50:16
|
On Mon, 2004-03-15 at 09:56, Josef Weidendorfer wrote: > here is the patch... That looks simple enough. The really simple approach would be to just set VG_(clo_pointercheck) = False in SK_(post_clo_init). Since cachegrind is intended for basically working programs, wild pointers shouldn't be a huge problem... J |
|
From: Jeremy F. <je...@go...> - 2004-03-15 22:31:10
|
On Mon, 2004-03-15 at 13:05, Julian Seward wrote: > First arg is Bool, conceptually 1-bit and in fact unsigned char > (see include/vg_skin.h). But then there are calls > > emit_movb_reg_regmem ( size & DO_BOUNDSCHECK, reg1, reg2 ); > > This just can't be right, and I'm not even sure what the caller > intends here. Yeah, it's a bit of a nasty hack. I snarfed a bit in the "size" parameter to mean "this should be a checked memory operation". This test masks out the size part, and just grabs the flag. The code should probably be something like ((size & DO_BOUNDSCHECK) != 0) to generate a proper boolean result. I guess the cleaner approach is to add a separate flag argument rather than encoding the bounds-checking flag in the size. > Not to mention DO_BOUNDSCHECK is 1 << 8 so is > zero when interpreted as Bool. If the bounds check always happens > for instructions emitted by this call, it's because size just > happens to always be 1, 2 or 4 but never zero -- and completely > nothing to do with DO_BOUNDSCHECK. Well, the expression is evaluated as an int, so you'll get 0x100 or 0x0 as the result. It will also probably be passed as an int; I'm not sure when the bits are masked off (if ever). > I guess the C "type system" (so-called) gets to wear the pointy > hat and stand in the corner :-) Anybody know of a way to define > a Bool type in C in such a way the compiler can't silently confuse > it with any flavour of int? Not really. C has a boolean type, and it's called "int". The interpretation is 0 = False, non-0 = True. The cleanest way of making a "proper" boolean type would be to use an enum, but C still lets you easily cast between int and enum types. J |
|
From: Julian S. <js...@ac...> - 2004-03-15 20:55:54
|
> Can somebody (Jeremy?) review it and commit it if it is OK? Just discovered "Kompare". Nice tool! At least in the details, it looks OK. I am a somewhat concerned about the type system abuse that's already there, though (nothing to do with your patch). static void emit_movb_reg_regmem ( Bool bounds, Int reg1, Int reg2 ) First arg is Bool, conceptually 1-bit and in fact unsigned char (see include/vg_skin.h). But then there are calls emit_movb_reg_regmem ( size & DO_BOUNDSCHECK, reg1, reg2 ); This just can't be right, and I'm not even sure what the caller intends here. Not to mention DO_BOUNDSCHECK is 1 << 8 so is zero when interpreted as Bool. If the bounds check always happens for instructions emitted by this call, it's because size just happens to always be 1, 2 or 4 but never zero -- and completely nothing to do with DO_BOUNDSCHECK. I guess the C "type system" (so-called) gets to wear the pointy hat and stand in the corner :-) Anybody know of a way to define a Bool type in C in such a way the compiler can't silently confuse it with any flavour of int? J |
|
From: Josef W. <Jos...@gm...> - 2004-03-15 17:57:32
|
Oops, here is the patch... Josef |
|
From: Josef W. <Jos...@gm...> - 2004-03-15 17:53:52
|
Hi, As introducing CLOAD/CSTORE for memory accesses of the client code would be a *huge* patch, I go the other way round: Introduce VGLOAD/VGSTORE which is able to touch Valgrind memory space in addition to client space. This keeps the patch quite small. Can somebody (Jeremy?) review it and commit it if it is OK? Thanks, Josef |
|
From: Tom H. <th...@cy...> - 2004-03-15 16:44:11
|
CVS commit by thughes:
Move the handling of PSHUFW from the SSE code to the MMX code so that
it will work on older Athlons which only have MMXEXT support.
M +19 -0 cachegrind/cg_main.c 1.65
M +50 -0 coregrind/vg_from_ucode.c 1.75
M +57 -9 coregrind/vg_to_ucode.c 1.133
M +17 -8 coregrind/vg_translate.c 1.71
M +17 -0 helgrind/hg_main.c 1.74
M +9 -0 include/vg_skin.h.base 1.16
M +19 -0 memcheck/mc_translate.c 1.37
--- valgrind/cachegrind/cg_main.c #1.64:1.65
@@ -605,4 +605,11 @@ static Int compute_BBCC_array_size(UCode
break;
+ case MMX2a1_MemRd:
+ sk_assert(u_in->size == 8);
+ sk_assert(!is_LOAD && !is_STORE && !is_FPU_R && !is_FPU_W);
+ t_read = u_in->val3;
+ is_FPU_R = True;
+ break;
+
case SSE2a_MemRd:
case SSE2a1_MemRd:
@@ -858,4 +865,16 @@ UCodeBlock* SK_(instrument)(UCodeBlock*
VG_(copy_UInstr)(cb, u_in);
break;
+ break;
+
+ case MMX2a1_MemRd:
+ sk_assert(u_in->size == 8);
+ t_read = u_in->val3;
+ t_read_addr = newTemp(cb);
+ uInstr2(cb, MOV, 4, TempReg, u_in->val3, TempReg, t_read_addr);
+ data_size = ( u_in->size <= MIN_LINE_SIZE
+ ? u_in->size
+ : MIN_LINE_SIZE);
+ VG_(copy_UInstr)(cb, u_in);
+ break;
case SSE2a_MemRd:
--- valgrind/coregrind/vg_from_ucode.c #1.74:1.75
@@ -1498,4 +1498,26 @@ static void emit_MMX2_regmem ( FlagSet u
}
+static void emit_MMX2a1 ( FlagSet uses_sflags,
+ FlagSet sets_sflags,
+ UChar first_byte,
+ UChar second_byte,
+ UChar third_byte,
+ Int ireg )
+{
+ VG_(new_emit)(True, uses_sflags, sets_sflags);
+
+ boundscheck();
+
+ VG_(emitB) ( 0x0F );
+ VG_(emitB) ( first_byte );
+ second_byte &= 0x38; /* mask out mod and rm fields */
+ emit_amode_regmem_reg ( ireg, second_byte >> 3 );
+ VG_(emitB) ( third_byte );
+ if (dis)
+ VG_(printf)("\n\t\tmmx2a1-0x%x:0x%x:0x%x-(%s)\n",
+ (UInt)first_byte, (UInt)second_byte, (UInt)third_byte,
+ nameIReg(4,ireg) );
+}
+
static void emit_SSE2a ( FlagSet uses_sflags,
FlagSet sets_sflags,
@@ -3274,4 +3296,15 @@ static void synth_MMX2_regmem ( Bool use
+static void synth_MMX2a1 ( Bool uses_flags, Bool sets_flags,
+ UChar first_byte,
+ UChar second_byte,
+ UChar third_byte,
+ Int ireg )
+{
+ emit_MMX2a1 ( uses_flags, sets_flags,
+ first_byte, second_byte, third_byte, ireg );
+}
+
+
static void synth_MMX2_reg_to_mmxreg ( Bool uses_flags, Bool sets_flags,
UChar first_byte,
@@ -4077,4 +4110,21 @@ static void emitUInstr ( UCodeBlock* cb,
break;
+ case MMX2a1_MemRd:
+ vg_assert(u->size == 8);
+ vg_assert(u->tag1 == Lit16);
+ vg_assert(u->tag2 == Lit16);
+ vg_assert(u->tag3 == RealReg);
+ vg_assert(!anyFlagUse(u));
+ if (!(*sselive)) {
+ emit_get_sse_state();
+ *sselive = True;
+ }
+ synth_MMX2a1 ( u->flags_r, u->flags_w,
+ (u->val1 >> 8) & 0xFF,
+ u->val1 & 0xFF,
+ u->val2 & 0xFF,
+ u->val3 );
+ break;
+
case MMX2_ERegRd:
vg_assert(u->tag1 == Lit16);
--- valgrind/coregrind/vg_to_ucode.c #1.132:1.133
@@ -3290,4 +3290,55 @@ Addr dis_MMXop_regmem_to_reg ( UCodeBloc
+/* Simple MMX operations, either
+ op (src)mmxreg, (dst)mmxreg
+ or
+ op (src)address, (dst)mmxreg
+ opc is the byte following the 0x0F prefix.
+*/
+static
+Addr dis_MMXop_regmem_to_reg_Imm8 ( UCodeBlock* cb,
+ UChar sorb,
+ Addr eip,
+ UChar opc,
+ Char* name,
+ Bool show_granularity )
+{
+ Char dis_buf[50];
+ UChar modrm = getUChar(eip);
+ UChar imm8;
+ Bool isReg = epartIsReg(modrm);
+
+ if (isReg) {
+ eip++;
+ imm8 = getUChar(eip);
+ eip++;
+ uInstr2(cb, MMX3, 0,
+ Lit16,
+ (((UShort)(opc)) << 8) | ((UShort)modrm),
+ Lit16,
+ ((UShort)imm8));
+ } else {
+ UInt pair = disAMode ( cb, sorb, eip, dis_buf );
+ Int tmpa = LOW24(pair);
+ eip += HI8(pair);
+ imm8 = getUChar(eip);
+ eip++;
+ uInstr3(cb, MMX2a1_MemRd, 8,
+ Lit16,
+ (((UShort)(opc)) << 8) | ((UShort)modrm),
+ Lit16,
+ ((UShort)imm8),
+ TempReg, tmpa);
+ }
+
+ DIP("%s%s %s, %s, $%d\n",
+ name, show_granularity ? nameMMXGran(opc & 3) : (Char*)"",
+ ( isReg ? nameMMXReg(eregOfRM(modrm)) : dis_buf ),
+ nameMMXReg(gregOfRM(modrm)), (Int)imm8 );
+
+ return eip;
+}
+
+
/* Simple SSE operations, either
@@ -4218,13 +4269,4 @@ static Addr disInstr ( UCodeBlock* cb, A
}
- /* PSHUFW */
- if (sz == 4
- && insn[0] == 0x0F && insn[1] == 0x70) {
- eip = dis_SSE2_reg_or_mem_Imm8 ( cb, sorb, eip+2, 8,
- "pshufw",
- insn[0], insn[1] );
- goto decode_success;
- }
-
/* SHUFPD */
if (sz == 2 && insn[0] == 0x0F && insn[1] == 0xC6) {
@@ -7144,4 +7186,10 @@ static Addr disInstr ( UCodeBlock* cb, A
break;
+ case 0x70:
+ /* PSHUFW imm8, (src)mmxreg-or-mem, (dst)mmxreg */
+ vg_assert(sz == 4);
+ eip = dis_MMXop_regmem_to_reg_Imm8 ( cb, sorb, eip, opc, "pshufw", False );
+ break;
+
case 0xD7:
/* PMOVMSKB (src)mmxreg, (dst)ireg */
--- valgrind/coregrind/vg_translate.c #1.70:1.71
@@ -562,4 +562,5 @@ Bool VG_(saneUInstr) ( Bool beforeRA, Bo
case MMX2_MemRd: return LIT0 && SZ48 && CC0 && Ls1 && TR2 && N3 && XOTHER;
case MMX2_MemWr: return LIT0 && SZ48 && CC0 && Ls1 && TR2 && N3 && XOTHER;
+ case MMX2a1_MemRd: return LIT0 && SZ8 && CC0 && Ls1 && Ls2 && TR3 && XOTHER;
case MMX2_ERegRd: return LIT0 && SZ4 && CC0 && Ls1 && TR2 && N3 && XOTHER;
case MMX2_ERegWr: return LIT0 && SZ4 && CC0 && Ls1 && TR2 && N3 && XOTHER;
@@ -898,4 +899,5 @@ Char* VG_(name_UOpcode) ( Bool upper, Op
case MMX2_MemRd: return "MMX2_MRd" ;
case MMX2_MemWr: return "MMX2_MWr" ;
+ case MMX2a1_MemRd: return "MMX2a1_MRd" ;
case MMX2_ERegRd: return "MMX2_eRRd" ;
case MMX2_ERegWr: return "MMX2_eRWr" ;
@@ -1068,4 +1070,10 @@ void pp_UInstrWorker ( Int instrNo, UIns
break;
+ case MMX2a1_MemRd:
+ VG_(printf)("0x%x:0x%x:0x%x",
+ (u->val1 >> 8) & 0xFF, u->val1 & 0xFF, u->val2 & 0xFF );
+ VG_(pp_UOperand)(u, 3, 4, True);
+ break;
+
case SSE2a_MemWr:
case SSE2a_MemRd:
@@ -1297,4 +1305,5 @@ Int VG_(get_reg_usage) ( UInstr* u, Tag
case SSE3ag_MemRd_RegWr: RD(1); WR(2); break;
+ case MMX2a1_MemRd: RD(3); break;
case MMX2_ERegRd: RD(2); break;
case MMX2_ERegWr: WR(2); break;
@@ -1452,5 +1461,5 @@ Int maybe_uinstrReadsArchReg ( UInstr* u
case FPU: case FPU_R: case FPU_W:
case MMX1: case MMX2: case MMX3:
- case MMX2_MemRd: case MMX2_MemWr:
+ case MMX2_MemRd: case MMX2_MemWr: case MMX2a1_MemRd:
case MMX2_ERegRd: case MMX2_ERegWr:
case SSE2a_MemWr: case SSE2a_MemRd: case SSE2a1_MemRd:
--- valgrind/helgrind/hg_main.c #1.73:1.74
@@ -2146,4 +2146,21 @@ UCodeBlock* SK_(instrument) ( UCodeBlock
}
+ case MMX2a1_MemRd: {
+ sk_assert(8 == u_in->size);
+
+ t_size = newTemp(cb);
+ uInstr2(cb, MOV, 4, Literal, 0, TempReg, t_size);
+ uLiteral(cb, (UInt)u_in->size);
+
+ /* XXX all registers should be flushed to baseblock
+ here */
+ uInstr2(cb, CCALL, 0, TempReg, u_in->val3, TempReg, t_size);
+ uCCall(cb, (Addr) & eraser_mem_help_read_N, 2, 2, False);
+
+ VG_(copy_UInstr)(cb, u_in);
+ t_size = INVALID_TEMPREG;
+ break;
+ }
+
case SSE2a_MemRd:
case SSE2a1_MemRd:
--- valgrind/include/vg_skin.h.base #1.15:1.16
@@ -666,4 +666,13 @@
MMX2_MemWr,
+ /* 3 bytes, reads/writes mem. Insns of the form
+ bbbbbbbb:mod mmxreg r/m:bbbbbbbb
+ Held in val1[15:0] and val2[7:0], and mod and rm are to be
+ replaced at codegen time by a reference to the Temp/RealReg
+ holding the address. Arg2 holds this Temp/Real Reg.
+ Transfer is always at size 8.
+ */
+ MMX2a1_MemRd,
+
/* 2 bytes, reads/writes an integer ("E") register. Insns of the form
bbbbbbbb:11 mmxreg ireg.
--- valgrind/memcheck/mc_translate.c #1.36:1.37
@@ -1076,4 +1076,23 @@ static UCodeBlock* memcheck_instrument (
}
+ case MMX2a1_MemRd: {
+ Int t_size = INVALID_TEMPREG;
+
+ sk_assert(u_in->size == 8);
+
+ sk_assert(u_in->tag3 == TempReg);
+ uInstr1(cb, TESTV, 4, TempReg, SHADOW(u_in->val3));
+ uInstr1(cb, SETV, 4, TempReg, SHADOW(u_in->val3));
+
+ t_size = newTemp(cb);
+ uInstr2(cb, MOV, 4, Literal, 0, TempReg, t_size);
+ uLiteral(cb, u_in->size);
+ uInstr2(cb, CCALL, 0, TempReg, u_in->val3, TempReg, t_size);
+ uCCall(cb, (Addr) & MC_(fpu_read_check), 2, 2, False);
+
+ VG_(copy_UInstr)(cb, u_in);
+ break;
+ }
+
/* SSE ins referencing scalar integer registers */
case SSE2g_RegWr:
|
|
From: Jeremy F. <je...@go...> - 2004-03-15 16:22:42
|
On Mon, 2004-03-15 at 02:09, Aleksander Salwa wrote: > Here is a patch that implements semaphore remapping in constant time. > Function sem_destroy really works now. Applications that create and > destroy a lot of semaphores will work (you may still need to increase > VG_N_SEMAPHORES if you use a lot of semaphores at a time). > > Performance is better because of: > - simple pointer look-ups in se_new, se_remap, se_unmap - no linear > search > - locking is no longer needed in se_remap > > Storing pointers to V's internal data in user's sem_t seems to be an > advantage, not disadvantage, because: > - now Valgrind can detect overwrites of user's sem_t (additional error > checking - SEM_CHECK_MAGIC) - previously it would go undetected > - if invalid pointer is passed to one of sem_xxx functions, Valgrind > will report invalid memory access in se_remap or se_new - previously > se_remap would silently allocate new semaphore > > Patch is attached. Could someone with write access commit it into CVS ? It looks pretty good, but I have a few comments: Why still keep the big array? Can't this be made dynamic so that there's no need for VG_N_SEMAPHORES? Also, barf() seems to be mostly used for reporting vg_libpthread internal errors, where as the places you use it seem to be all client bugs; maybe just using VG_INTERNAL_PRINTF_BACKTRACE. And finally, could you write a regression test case and add it to none/tests? Something which would have failed before, but now works, and exercises as much of the semaphore machinery as possible. Thanks, J |
|
From: Jeremy F. <je...@go...> - 2004-03-15 16:13:22
|
CVS commit by fitzhardinge:
Don't bother setting the EI_OSABI entry in the core elf header, since
the kernel doesn't, nobody uses it, and RH7.2 systems don't define it.
M +0 -1 vg_signals.c 1.61
--- valgrind/coregrind/vg_signals.c #1.60:1.61
@@ -1308,5 +1308,4 @@ static void fill_ehdr(Elf32_Ehdr *ehdr,
ehdr->e_ident[EI_DATA] = ELFDATA2LSB;
ehdr->e_ident[EI_VERSION] = EV_CURRENT;
- ehdr->e_ident[EI_OSABI] = ELFOSABI_LINUX;
ehdr->e_type = ET_CORE;
|
|
From: Tom H. <th...@cy...> - 2004-03-15 12:59:02
|
CVS commit by thughes:
Fix compiler warnings.
M +4 -4 pushpopseg.c 1.2 [POSSIBLY UNSAFE: printf]
--- valgrind/none/tests/pushpopseg.c #1.1:1.2
@@ -24,6 +24,6 @@ int main(int argc, char **argv)
);
- printf("sp change after push = %d\n", sp2 - sp1);
- printf("sp change after pop = %d\n", sp3 - sp2);
+ printf("sp change after push = %ld\n", sp2 - sp1);
+ printf("sp change after pop = %ld\n", sp3 - sp2);
printf("fs after push and pop = %04x\n", fs1);
@@ -40,6 +40,6 @@ int main(int argc, char **argv)
);
- printf("sp change after push = %d\n", sp2 - sp1);
- printf("sp change after pop = %d\n", sp3 - sp2);
+ printf("sp change after push = %ld\n", sp2 - sp1);
+ printf("sp change after pop = %ld\n", sp3 - sp2);
printf("fs after push and pop = %04x\n", fs1);
|
|
From: Aleksander S. <A....@os...> - 2004-03-15 10:09:17
|
Here is a patch that implements semaphore remapping in constant time. Function sem_destroy really works now. Applications that create and destroy a lot of semaphores will work (you may still need to increase VG_N_SEMAPHORES if you use a lot of semaphores at a time). Performance is better because of: - simple pointer look-ups in se_new, se_remap, se_unmap - no linear search - locking is no longer needed in se_remap Storing pointers to V's internal data in user's sem_t seems to be an advantage, not disadvantage, because: - now Valgrind can detect overwrites of user's sem_t (additional error checking - SEM_CHECK_MAGIC) - previously it would go undetected - if invalid pointer is passed to one of sem_xxx functions, Valgrind will report invalid memory access in se_remap or se_new - previously se_remap would silently allocate new semaphore Patch is attached. Could someone with write access commit it into CVS ? Olek S. |
|
From: Tom H. <th...@cy...> - 2004-03-15 09:41:53
|
In message <yek...@au...>
Tom Hughes <th...@cy...> wrote:
> Or maybe it just isn't set at all? Certainly the kernel doesn't
> normally fill in ELFOSABI_LINUX for that value when generating a
> core dump. The code in kernel/binfmt_elf.c looks like this:
That should fs/binfmt_elf.c of course...
Tom
--
Tom Hughes (th...@cy...)
Software Engineer, Cyberscience Corporation
http://www.cyberscience.com/
|
|
From: Tom H. <th...@cy...> - 2004-03-15 09:36:51
|
In message <E1B...@st...>
Tom Hughes <th...@cy...> wrote:
> gcc -DHAVE_CONFIG_H -I. -I. -I.. -I./demangle -I../include -I./x86 -DVG_LIBDIR="\"/tmp/valgrind.7607/valgrind/Inst/lib/valgrind"\" -Winline -Wall -Wshadow -O -fno-omit-frame-pointer -mpreferred-stack-boundary=2 -g -DELFSZ=32 -c `test -f 'vg_signals.c' || echo './'`vg_signals.c
> vg_signals.c: In function `fill_ehdr':
> vg_signals.c:1310: `ELFOSABI_LINUX' undeclared (first use in this function)
> vg_signals.c:1310: (Each undeclared identifier is reported only once
> vg_signals.c:1310: for each function it appears in.)
It appears that /usr/include/elf.h on RH 7.2 doesn't declare this
constant. Curiously all the programs I've looked at on my linux boxes
have the ABI set to SYSV in their header anyway...
Or maybe it just isn't set at all? Certainly the kernel doesn't
normally fill in ELFOSABI_LINUX for that value when generating a
core dump. The code in kernel/binfmt_elf.c looks like this:
memcpy(elf->e_ident, ELFMAG, SELFMAG);
elf->e_ident[EI_CLASS] = ELF_CLASS;
elf->e_ident[EI_DATA] = ELF_DATA;
elf->e_ident[EI_VERSION] = EV_CURRENT;
memset(elf->e_ident+EI_PAD, 0, EI_NIDENT-EI_PAD);
So everything except the magic number, class, endianness and version
is just zero filled.
Tom
--
Tom Hughes (th...@cy...)
Software Engineer, Cyberscience Corporation
http://www.cyberscience.com/
|
|
From: John C. <joh...@ta...> - 2004-03-15 05:36:02
|
I'm getting the message stated in the subject line from
--gen-suppression=yes.
Is this a known bug? Lack of debug symbols? (there is
some assembler involved) Or perhaps user error?
---- Print suppression ? --- [Return/N/n/Y/y/C/c] ---- y
{
<insert a suppression name here>
Memcheck:Param
sigaction(act)
???:??? # unknown, suppression will not work, sorry)
???:??? # unknown, suppression will not work, sorry)
???:??? # unknown, suppression will not work, sorry)
}
The version is CVS latest (I need the static libs stuff) as at Mon Mar 15
05:34:50 UTC 2004
Thanks,
John Carter Phone : (64)(3) 358 6639
Tait Electronics Fax : (64)(3) 359 4632
PO Box 1645 Christchurch Email : joh...@ta...
New Zealand
|
|
From: <js...@ac...> - 2004-03-15 04:06:51
|
Nightly build on phoenix ( SuSE 8.2 ) started at 2004-03-15 04:00:00 GMT Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow resolv: valgrind ./resolv seg_override: valgrind ./seg_override sha1_test: valgrind ./sha1_test shortpush: valgrind ./shortpush shorts: valgrind ./shorts smc1: valgrind ./smc1 syscall-restart1: valgrind ./syscall-restart1 syscall-restart2: valgrind ./syscall-restart2 system: valgrind ./system yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 143 tests, 5 stderr failures, 0 stdout failures ================= corecheck/tests/as_mmap (stderr) corecheck/tests/fdleak_fcntl (stderr) helgrind/tests/inherit (stderr) memcheck/tests/writev (stderr) memcheck/tests/zeropage (stderr) make: *** [regtest] Error 1 |
|
From: <js...@ac...> - 2004-03-15 03:47:52
|
Nightly build on nemesis ( SuSE 9.0 ) started at 2004-03-15 03:50:00 GMT Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow system: valgrind ./system yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 143 tests, 13 stderr failures, 0 stdout failures ================= corecheck/tests/as_mmap (stderr) corecheck/tests/fdleak_cmsg (stderr) corecheck/tests/fdleak_creat (stderr) corecheck/tests/fdleak_dup (stderr) corecheck/tests/fdleak_dup2 (stderr) corecheck/tests/fdleak_fcntl (stderr) corecheck/tests/fdleak_ipv4 (stderr) corecheck/tests/fdleak_open (stderr) corecheck/tests/fdleak_pipe (stderr) corecheck/tests/fdleak_socketpair (stderr) helgrind/tests/inherit (stderr) memcheck/tests/writev (stderr) memcheck/tests/zeropage (stderr) make: *** [regtest] Error 1 |
|
From: Tom H. <to...@co...> - 2004-03-15 03:22:54
|
Nightly build on dunsmere ( Fedora Core 1 ) started at 2004-03-15 03:20:02 GMT Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow == 148 tests, 16 stderr failures, 1 stdout failure ================= corecheck/tests/fdleak_cmsg (stderr) corecheck/tests/fdleak_creat (stderr) corecheck/tests/fdleak_dup (stderr) corecheck/tests/fdleak_dup2 (stderr) corecheck/tests/fdleak_fcntl (stderr) corecheck/tests/fdleak_ipv4 (stderr) corecheck/tests/fdleak_open (stderr) corecheck/tests/fdleak_pipe (stderr) corecheck/tests/fdleak_socketpair (stderr) helgrind/tests/inherit (stderr) memcheck/tests/buflen_check (stderr) memcheck/tests/execve (stderr) memcheck/tests/fwrite (stderr) memcheck/tests/trivialleak (stderr) memcheck/tests/weirdioctl (stderr) memcheck/tests/writev (stderr) none/tests/exec-sigmask (stdout) make: *** [regtest] Error 1 |
|
From: Tom H. <th...@cy...> - 2004-03-15 03:18:09
|
Nightly build on audi ( Red Hat 9 ) started at 2004-03-15 03:15:02 GMT Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow rcl_assert: valgrind ./rcl_assert rcrl: valgrind ./rcrl readline1: valgrind ./readline1 resolv: valgrind ./resolv seg_override: valgrind ./seg_override sha1_test: valgrind ./sha1_test shortpush: valgrind ./shortpush shorts: valgrind ./shorts smc1: valgrind ./smc1 syscall-restart1: valgrind ./syscall-restart1 syscall-restart2: valgrind ./syscall-restart2 system: valgrind ./system yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 148 tests, 2 stderr failures, 0 stdout failures ================= corecheck/tests/pth_cancel2 (stderr) helgrind/tests/inherit (stderr) make: *** [regtest] Error 1 |
|
From: Tom H. <th...@cy...> - 2004-03-15 03:13:05
|
Nightly build on ginetta ( Red Hat 8.0 ) started at 2004-03-15 03:10:03 GMT Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow seg_override: valgrind ./seg_override sha1_test: valgrind ./sha1_test shortpush: valgrind ./shortpush shorts: valgrind ./shorts smc1: valgrind ./smc1 syscall-restart1: valgrind ./syscall-restart1 syscall-restart2: valgrind ./syscall-restart2 system: valgrind ./system yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 148 tests, 6 stderr failures, 0 stdout failures ================= helgrind/tests/deadlock (stderr) helgrind/tests/inherit (stderr) helgrind/tests/race (stderr) helgrind/tests/race2 (stderr) memcheck/tests/nanoleak (stderr) memcheck/tests/trivialleak (stderr) make: *** [regtest] Error 1 |
|
From: Tom H. <th...@cy...> - 2004-03-15 03:08:03
|
Nightly build on alvis ( Red Hat 7.3 ) started at 2004-03-15 03:05:03 GMT Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow smc1: valgrind ./smc1 syscall-restart1: valgrind ./syscall-restart1 syscall-restart2: valgrind ./syscall-restart2 system: valgrind ./system yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 148 tests, 9 stderr failures, 1 stdout failure ================= helgrind/tests/deadlock (stderr) helgrind/tests/inherit (stderr) helgrind/tests/race (stderr) helgrind/tests/race2 (stderr) memcheck/tests/badfree-2trace (stderr) memcheck/tests/badjump (stderr) memcheck/tests/brk (stderr) memcheck/tests/error_counts (stdout) memcheck/tests/new_nothrow (stderr) memcheck/tests/writev (stderr) make: *** [regtest] Error 1 |
|
From: Tom H. <th...@cy...> - 2004-03-15 03:01:02
|
Nightly build on standard ( Red Hat 7.2 ) started at 2004-03-15 03:00:03 GMT Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow make[2]: Leaving directory `/tmp/valgrind.20338/valgrind/coregrind/x86' Making check in demangle make[2]: Entering directory `/tmp/valgrind.20338/valgrind/coregrind/demangle' make[2]: Nothing to be done for `check'. make[2]: Leaving directory `/tmp/valgrind.20338/valgrind/coregrind/demangle' Making check in . make[2]: Entering directory `/tmp/valgrind.20338/valgrind/coregrind' source='vg_signals.c' object='vg_signals.o' libtool=no \ depfile='.deps/vg_signals.Po' tmpdepfile='.deps/vg_signals.TPo' \ depmode=gcc3 /bin/sh ../depcomp \ gcc -DHAVE_CONFIG_H -I. -I. -I.. -I./demangle -I../include -I./x86 -DVG_LIBDIR="\"/tmp/valgrind.20338/valgrind/Inst/lib/valgrind"\" -Winline -Wall -Wshadow -O -fno-omit-frame-pointer -mpreferred-stack-boundary=2 -g -DELFSZ=32 -c `test -f 'vg_signals.c' || echo './'`vg_signals.c vg_signals.c: In function `fill_ehdr': vg_signals.c:1310: `ELFOSABI_LINUX' undeclared (first use in this function) vg_signals.c:1310: (Each undeclared identifier is reported only once vg_signals.c:1310: for each function it appears in.) make[2]: *** [vg_signals.o] Error 1 make[2]: Leaving directory `/tmp/valgrind.20338/valgrind/coregrind' make[1]: *** [check-recursive] Error 1 make[1]: Leaving directory `/tmp/valgrind.20338/valgrind/coregrind' make: *** [check-recursive] Error 1 |