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
(11) |
2
(13) |
3
(7) |
|
4
(9) |
5
(23) |
6
(19) |
7
(18) |
8
(2) |
9
(7) |
10
(21) |
|
11
(13) |
12
|
13
(8) |
14
(17) |
15
(19) |
16
(25) |
17
(43) |
|
18
(22) |
19
(12) |
20
(19) |
21
(12) |
22
(9) |
23
(12) |
24
(5) |
|
25
(16) |
26
(25) |
27
(24) |
28
(19) |
29
(26) |
30
(25) |
31
(6) |
|
From: Nicholas N. <nj...@ca...> - 2004-07-25 22:17:07
|
On Sun, 25 Jul 2004, Nicholas Nethercote wrote:
> - fix_auxv() isn't working, because there are apparently only 2 auxv entries,
> neither of which are the ones we want. On x86 there are usually 17 AFAICT.
> Any ideas? Does anyone know a program that reads auxv entries so I can check
> this is really happening? Currently, I'm just ignoring this matter and
> proceeding anyway.
>
> [Actually, the two entries are the added ones AT_UME_{PADFD,EXECFD}, which
> makes me think that the original auxv is getting clobbered somehow. I will
> investigate further.]
Ok, worked this out -- auxv wasn't being found properly because I hadn't
change the size of the auxv type for 64-bits, and also I wasn't accounting
for argc/argv all being 64-bits also. It now gets quite a bit further
before crashing :) My other questions still stand, though...
N
|
|
From: Nicholas N. <nj...@ca...> - 2004-07-25 21:40:44
|
Hi,
I'm attempting x86-64, I've got Valgrind compiling, which required
allowing for pointers and ints to be different sizes, and changing the
register set, and excising a whole lot of code that I didn't want to deal
with at the moment (eg. all the tools except Nulgrind, a lot of the signal
handling, etc).
Now I'm fighting through the startup stuff. I'm proceeding until
something breaks, then I try to fix it. Or ignore it, if it doesn't look
too dangerous. Here's what I've done so far, perhaps people can assist...
- I noticed that the s/start/_ume_entry in stage2.lds is unnecessary since
the -Wl,-e,_ume_entry option is passed to stage2. No matter.
- I changed kickstart_base to 0x70000000; having it at 0xb0000000 I get
lots of weird linker errors; it complains about truncations, I don't
understand.
- fix_auxv() isn't working, because there are apparently only 2 auxv
entries, neither of which are the ones we want. On x86 there are usually
17 AFAICT. Any ideas? Does anyone know a program that reads auxv entries
so I can check this is really happening? Currently, I'm just ignoring
this matter and proceeding anyway.
[Actually, the two entries are the added ones AT_UME_{PADFD,EXECFD}, which
makes me think that the original auxv is getting clobbered somehow. I
will investigate further.]
- When ume_go() is called to call stage2's main(), I get a seg fault, I
can't work out why. ume_go()'s x86 definition puzzles me:
/*
Jump to a particular EIP with a particular ESP. This is intended
to simulate the initial CPU state when the kernel starts an program
after exec; it therefore also clears all the other registers.
*/
void ume_go(addr_t eip, addr_t esp)
{
asm volatile ("movl %1, %%esp;" /* set esp */
"pushl %%eax;" /* push esp */
"xorl %%eax,%%eax;" /* clear registers */
"xorl %%ebx,%%ebx;"
"xorl %%ecx,%%ecx;"
"xorl %%edx,%%edx;"
"xorl %%esi,%%esi;"
"xorl %%edi,%%edi;"
"xorl %%ebp,%%ebp;"
"ret" /* return into entry */
: : "a" (eip), "r" (esp));
/* we should never get here */
for(;;)
asm volatile("ud2");
}
(I have of course changed this for x86-64.)
I can't see how %eip is set by this -- I don't understand inline asm
very well but there's no mention of %0, and what's the "pushl %eax" for?
Is eip being passed in register %eax? Surely not without
__attribute__((regparms(n)))?
- I find the whole startup (up until stage2's main()) sequence very
confusing. Several different files, several different headers, no use of
the VG_() macro so it's hard to see what's exported and what's local, very
few comments despite it doing some decidedly tricky stuff... hmm.
All ideas welcome. I could try tarballing up the mess I've got in case
anyone else wants a go. Thanks.
N
|
|
From: Jeremy F. <je...@go...> - 2004-07-25 19:35:22
|
On Sun, 2004-07-25 at 13:21 +0100, Nicholas Nethercote wrote: > So, can VG_(add_redirect_sym)() be abolished, and its uses replaced by > interceptions? Having two ways of doing things is not good... No, because that's the underlying mechanism to implement everything. And the symtab hackery probably can't deal with every possible case. J |
|
From: Tom H. <th...@cy...> - 2004-07-25 15:43:09
|
CVS commit by thughes:
Move the decoding of SFENCE out of the SSE only part of disInstr as it
exists on Athlon's that have MMXEXT support and those don't have SSE state
so won't decode it where it was.
CCMAIL: 859...@bu...
M +19 -3 vg_to_ucode.c 1.144
--- valgrind/coregrind/vg_to_ucode.c #1.143:1.144
@@ -3985,8 +3985,8 @@ static Addr disInstr ( UCodeBlock* cb, A
}
- /* LFENCE/MFENCE/SFENCE -- flush pending operations to memory */
+ /* LFENCE/MFENCE -- flush pending operations to memory */
if (insn[0] == 0x0F && insn[1] == 0xAE
&& (epartIsReg(insn[2]))
- && (gregOfRM(insn[2]) >= 5 && gregOfRM(insn[2]) <= 7))
+ && (gregOfRM(insn[2]) >= 5 && gregOfRM(insn[2]) <= 6))
{
vg_assert(sz == 4);
@@ -3995,5 +3995,5 @@ static Addr disInstr ( UCodeBlock* cb, A
Lit16, (((UShort)0x0F) << 8) | (UShort)0xAE,
Lit16, (UShort)insn[2] );
- DIP("sfence\n");
+ DIP("%sfence\n", gregOfRM(insn[2]) == 5 ? "l" : "m");
goto decode_success;
}
@@ -6853,4 +6853,20 @@ static Addr disInstr ( UCodeBlock* cb, A
break;
+ case 0xAE: /* SFENCE */
+ vg_assert(sz == 4);
+ modrm = getUChar(eip);
+ if (!epartIsReg(modrm)) {
+ goto decode_failure;
+ }
+ if (gregOfRM(modrm) != 7) {
+ goto decode_failure;
+ }
+ eip += lengthAMode(eip);
+ uInstr2(cb, SSE3, 0, /* ignore sz for internal ops */
+ Lit16, (((UShort)0x0F) << 8) | (UShort)0xAE,
+ Lit16, (UShort)modrm );
+ DIP("sfence\n");
+ break;
+
case 0x71: case 0x72: case 0x73: {
/* (sz==4): PSLL/PSRA/PSRL mmxreg by imm8 */
|
|
From: Tom H. <th...@cy...> - 2004-07-25 15:18:33
|
CVS commit by thughes:
Add instruction tests for the LFENCE/MFENCE/SFENCE instructions.
M +1 -0 addrcheck/tests/insn_mmxext.stdout.exp 1.2
M +1 -0 addrcheck/tests/insn_sse.stdout.exp 1.2
M +2 -0 addrcheck/tests/insn_sse2.stdout.exp 1.2
M +1 -0 cachegrind/tests/insn_mmxext.stdout.exp 1.2
M +1 -0 cachegrind/tests/insn_sse.stdout.exp 1.2
M +2 -0 cachegrind/tests/insn_sse2.stdout.exp 1.2
M +1 -0 helgrind/tests/insn_mmxext.stdout.exp 1.2
M +1 -0 helgrind/tests/insn_sse.stdout.exp 1.2
M +2 -0 helgrind/tests/insn_sse2.stdout.exp 1.2
M +1 -0 memcheck/tests/insn_mmxext.stdout.exp 1.2
M +1 -0 memcheck/tests/insn_sse.stdout.exp 1.2
M +2 -0 memcheck/tests/insn_sse2.stdout.exp 1.2
M +79 -66 none/tests/gen_insn_test.pl 1.8
M +1 -0 none/tests/insn_mmxext.def 1.2
M +1 -0 none/tests/insn_mmxext.stdout.exp 1.2
M +1 -0 none/tests/insn_sse.def 1.3
M +1 -0 none/tests/insn_sse.stdout.exp 1.2
M +2 -0 none/tests/insn_sse2.def 1.3
M +2 -0 none/tests/insn_sse2.stdout.exp 1.2
--- valgrind/addrcheck/tests/insn_mmxext.stdout.exp #1.1:1.2
@@ -27,2 +27,3 @@
pshufw_1 ... ok
pshufw_2 ... ok
+sfence_1 ... ok
--- valgrind/addrcheck/tests/insn_sse.stdout.exp #1.1:1.2
@@ -118,4 +118,5 @@
rsqrtss_1 ... ok
rsqrtss_2 ... ok
+sfence_1 ... ok
shufps_1 ... ok
shufps_2 ... ok
--- valgrind/addrcheck/tests/insn_sse2.stdout.exp #1.1:1.2
@@ -73,8 +73,10 @@
divsd_1 ... ok
divsd_2 ... ok
+lfence_1 ... ok
maxpd_1 ... ok
maxpd_2 ... ok
maxsd_1 ... ok
maxsd_2 ... ok
+mfence_1 ... ok
minpd_1 ... ok
minpd_2 ... ok
--- valgrind/cachegrind/tests/insn_mmxext.stdout.exp #1.1:1.2
@@ -27,2 +27,3 @@
pshufw_1 ... ok
pshufw_2 ... ok
+sfence_1 ... ok
--- valgrind/cachegrind/tests/insn_sse.stdout.exp #1.1:1.2
@@ -118,4 +118,5 @@
rsqrtss_1 ... ok
rsqrtss_2 ... ok
+sfence_1 ... ok
shufps_1 ... ok
shufps_2 ... ok
--- valgrind/cachegrind/tests/insn_sse2.stdout.exp #1.1:1.2
@@ -73,8 +73,10 @@
divsd_1 ... ok
divsd_2 ... ok
+lfence_1 ... ok
maxpd_1 ... ok
maxpd_2 ... ok
maxsd_1 ... ok
maxsd_2 ... ok
+mfence_1 ... ok
minpd_1 ... ok
minpd_2 ... ok
--- valgrind/helgrind/tests/insn_mmxext.stdout.exp #1.1:1.2
@@ -27,2 +27,3 @@
pshufw_1 ... ok
pshufw_2 ... ok
+sfence_1 ... ok
--- valgrind/helgrind/tests/insn_sse.stdout.exp #1.1:1.2
@@ -118,4 +118,5 @@
rsqrtss_1 ... ok
rsqrtss_2 ... ok
+sfence_1 ... ok
shufps_1 ... ok
shufps_2 ... ok
--- valgrind/helgrind/tests/insn_sse2.stdout.exp #1.1:1.2
@@ -73,8 +73,10 @@
divsd_1 ... ok
divsd_2 ... ok
+lfence_1 ... ok
maxpd_1 ... ok
maxpd_2 ... ok
maxsd_1 ... ok
maxsd_2 ... ok
+mfence_1 ... ok
minpd_1 ... ok
minpd_2 ... ok
--- valgrind/memcheck/tests/insn_mmxext.stdout.exp #1.1:1.2
@@ -27,2 +27,3 @@
pshufw_1 ... ok
pshufw_2 ... ok
+sfence_1 ... ok
--- valgrind/memcheck/tests/insn_sse.stdout.exp #1.1:1.2
@@ -118,4 +118,5 @@
rsqrtss_1 ... ok
rsqrtss_2 ... ok
+sfence_1 ... ok
shufps_1 ... ok
shufps_2 ... ok
--- valgrind/memcheck/tests/insn_sse2.stdout.exp #1.1:1.2
@@ -73,8 +73,10 @@
divsd_1 ... ok
divsd_2 ... ok
+lfence_1 ... ok
maxpd_1 ... ok
maxpd_2 ... ok
maxsd_1 ... ok
maxsd_2 ... ok
+mfence_1 ... ok
minpd_1 ... ok
minpd_2 ... ok
--- valgrind/none/tests/gen_insn_test.pl #1.7:1.8
@@ -166,10 +166,15 @@
my $results;
- if (/^(\S+)\s+(?:(\S+(?:\s+\S+)*)\s+:\s+)?((?:\S+\s+)*)=>\s+(\S+(?:\s+\S+)*)$/)
+ if (/^(\S+)\s+(?:(\S+(?:\s+\S+)*)\s+:\s+)?((?:\S+\s+)*?)(?:=>\s+(\S+(?:\s+\S+)*))?$/)
{
$insn = $1;
$presets = $2 || "";
- $args = $3;
- $results = $4;
+ $args = $3 || "";
+ $results = $4 || "";
+
+# print STDERR "insn: $insn\n";
+# print STDERR "presets: $presets\n";
+# print STDERR "args: $args\n";
+# print STDERR "results: $results\n";
}
else
@@ -858,80 +863,88 @@
print qq|\n|;
- print qq| if \(|;
-
- $prefix = "";
-
- foreach my $result (@results)
+ if (@results)
{
- my $type = $result->{type};
- my $subtype = $result->{subtype};
- my $suffix = $SubTypeSuffixes{$subtype};
- my @values = @{$result->{values}};
-
- if ($type eq "eflags")
- {
- print qq|${prefix}\($result->{name}.ud[0] & $values[0]UL\) == $values[1]UL|;
- }
- elsif ($type =~ /^fpu[cs]w$/)
- {
- print qq|${prefix}\($result->{name}.uw[0] & $values[0]\) == $values[1]|;
- }
- else
+ print qq| if \(|;
+
+ $prefix = "";
+
+ foreach my $result (@results)
{
- foreach my $value (0 .. $#values)
+ my $type = $result->{type};
+ my $subtype = $result->{subtype};
+ my $suffix = $SubTypeSuffixes{$subtype};
+ my @values = @{$result->{values}};
+
+ if ($type eq "eflags")
{
- if ($subtype eq "ps")
- {
- print qq|${prefix}eq_float($result->{name}.$subtype\[$value\], $values[$value]$suffix)|;
- }
- elsif ($subtype eq "pd")
- {
- print qq|${prefix}eq_double($result->{name}.$subtype\[$value\], $values[$value]$suffix)|;
- }
- else
+ print qq|${prefix}\($result->{name}.ud[0] & $values[0]UL\) == $values[1]UL|;
+ }
+ elsif ($type =~ /^fpu[cs]w$/)
+ {
+ print qq|${prefix}\($result->{name}.uw[0] & $values[0]\) == $values[1]|;
+ }
+ else
+ {
+ foreach my $value (0 .. $#values)
{
- print qq|${prefix}$result->{name}.$subtype\[$value\] == $values[$value]$suffix|;
+ if ($subtype eq "ps")
+ {
+ print qq|${prefix}eq_float($result->{name}.$subtype\[$value\], $values[$value]$suffix)|;
+ }
+ elsif ($subtype eq "pd")
+ {
+ print qq|${prefix}eq_double($result->{name}.$subtype\[$value\], $values[$value]$suffix)|;
+ }
+ else
+ {
+ print qq|${prefix}$result->{name}.$subtype\[$value\] == $values[$value]$suffix|;
+ }
+
+ $prefix = " && ";
}
-
- $prefix = " && ";
}
+
+ $prefix = " &&\n ";
}
- $prefix = " &&\n ";
- }
-
- print qq| \)\n|;
- print qq| \{\n|;
- print qq| printf("$test ... ok\\n");\n|;
- print qq| \}\n|;
- print qq| else\n|;
- print qq| \{\n|;
- print qq| printf("$test ... not ok\\n");\n|;
-
- foreach my $result (@results)
- {
- my $type = $result->{type};
- my $subtype = $result->{subtype};
- my $suffix = $SubTypeSuffixes{$subtype};
- my @values = @{$result->{values}};
-
- if ($type eq "eflags")
- {
- print qq| printf(" eflags & 0x%lx = 0x%lx (expected 0x%lx)\\n", $values[0]UL, $result->{name}.ud\[0\] & $values[0]UL, $values[1]UL);\n|;
- }
- elsif ($type =~ /^fpu[cs]w$/)
- {
- print qq| printf(" $type & 0x%x = 0x%x (expected 0x%x)\\n", $values[0], $result->{name}.uw\[0\] & $values[0], $values[1]);\n|;
- }
- else
+ print qq| \)\n|;
+ print qq| \{\n|;
+ print qq| printf("$test ... ok\\n");\n|;
+ print qq| \}\n|;
+ print qq| else\n|;
+ print qq| \{\n|;
+ print qq| printf("$test ... not ok\\n");\n|;
+
+ foreach my $result (@results)
{
- foreach my $value (0 .. $#values)
+ my $type = $result->{type};
+ my $subtype = $result->{subtype};
+ my $suffix = $SubTypeSuffixes{$subtype};
+ my @values = @{$result->{values}};
+
+ if ($type eq "eflags")
+ {
+ print qq| printf(" eflags & 0x%lx = 0x%lx (expected 0x%lx)\\n", $values[0]UL, $result->{name}.ud\[0\] & $values[0]UL, $values[1]UL);\n|;
+ }
+ elsif ($type =~ /^fpu[cs]w$/)
+ {
+ print qq| printf(" $type & 0x%x = 0x%x (expected 0x%x)\\n", $values[0], $result->{name}.uw\[0\] & $values[0], $values[1]);\n|;
+ }
+ else
{
- print qq| printf(" $result->{name}.$subtype\[$value\] = $SubTypeFormats{$subtype} (expected $SubTypeFormats{$subtype})\\n", $result->{name}.$subtype\[$value\], $values[$value]$suffix);\n|;
+ foreach my $value (0 .. $#values)
+ {
+ print qq| printf(" $result->{name}.$subtype\[$value\] = $SubTypeFormats{$subtype} (expected $SubTypeFormats{$subtype})\\n", $result->{name}.$subtype\[$value\], $values[$value]$suffix);\n|;
+ }
}
}
+
+ print qq| \}\n|;
}
-
- print qq| \}\n|;
+ else
+ {
+ print qq| printf("$test ... ok\\n");\n|;
+ }
+
print qq| \}\n|;
print qq| else\n|;
--- valgrind/none/tests/insn_mmxext.def #1.1:1.2
@@ -27,2 +27,3 @@
pshufw imm8[0x1b] mm.sw[11,22,33,44] mm.sw[0,0,0,0] => 2.sw[44,33,22,11]
pshufw imm8[0x1b] m64.sw[11,22,33,44] mm.sw[0,0,0,0] => 2.sw[44,33,22,11]
+sfence
--- valgrind/none/tests/insn_mmxext.stdout.exp #1.1:1.2
@@ -27,2 +27,3 @@
pshufw_1 ... ok
pshufw_2 ... ok
+sfence_1 ... ok
--- valgrind/none/tests/insn_sse.def #1.2:1.3
@@ -118,4 +118,5 @@
rsqrtss xmm.ps[16.0,5.55,6.66,7.77] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[0.249939,2.22,3.33,4.44]
rsqrtss m128.ps[16.0,5.55,6.66,7.77] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[0.249939,2.22,3.33,4.44]
+sfence
shufps imm8[0xe4] xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[12.34,56.78,43.21,87.65] => 2.ps[12.34,56.78,43.21,87.65]
shufps imm8[0xb1] m128.ps[12.34,56.78,43.21,87.65] xmm.ps[12.34,56.78,43.21,87.65] => 2.ps[56.78,12.34,87.65,43.21]
--- valgrind/none/tests/insn_sse.stdout.exp #1.1:1.2
@@ -118,4 +118,5 @@
rsqrtss_1 ... ok
rsqrtss_2 ... ok
+sfence_1 ... ok
shufps_1 ... ok
shufps_2 ... ok
--- valgrind/none/tests/insn_sse2.def #1.2:1.3
@@ -73,8 +73,10 @@
divsd xmm.pd[2.0,3.0] xmm.pd[24.68,3.69] => 1.pd[12.34,3.69]
divsd m128.pd[2.0,3.0] xmm.pd[24.68,3.69] => 1.pd[12.34,3.69]
+lfence
maxpd xmm.pd[22.222,44.444] xmm.pd[55.555,33.333] => 1.pd[55.555,44.444]
maxpd m128.pd[22.222,44.444] xmm.pd[55.555,33.333] => 1.pd[55.555,44.444]
maxsd xmm.pd[22.222,44.444] xmm.pd[55.555,33.333] => 1.pd[55.555,33.333]
maxsd m128.pd[44.444,22.222] xmm.pd[33.333,55.555] => 1.pd[44.444,55.555]
+mfence
minpd xmm.pd[22.222,44.444] xmm.pd[55.555,33.333] => 1.pd[22.222,33.333]
minpd m128.pd[22.222,44.444] xmm.pd[55.555,33.333] => 1.pd[22.222,33.333]
--- valgrind/none/tests/insn_sse2.stdout.exp #1.1:1.2
@@ -73,8 +73,10 @@
divsd_1 ... ok
divsd_2 ... ok
+lfence_1 ... ok
maxpd_1 ... ok
maxpd_2 ... ok
maxsd_1 ... ok
maxsd_2 ... ok
+mfence_1 ... ok
minpd_1 ... ok
minpd_2 ... ok
|
|
From: Tom H. <th...@cy...> - 2004-07-25 14:33:14
|
In message <Pin...@he...>
Nicholas Nethercote <nj...@ca...> wrote:
> Looking in /usr/include/stdlib.h, I see this declaration:
>
> #ifdef __USE_XOPEN2K
> /* Allocate memory of SIZE bytes with an alignment of ALIGNMENT. */
> extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
> __THROW __attribute_malloc__;
> #endif
>
> I guess the __USE_XOPEN2K is the problem, whatever that signifies.
> I see the same thing on three different machines.
>
> So I'm a bit puzzled. Is posix_memalign() standard? Should I not add a
> regression test using it? (It would result in a warning.)
It appears to be standard, as the linux manual page says:
CONFORMING TO
The function valloc() appeared in 3.0 BSD. It is documented as being
obsolete in BSD 4.3, and as legacy in SUSv2. It no longer occurs in
SUSv3. The function memalign() appears in SunOS 4.1.3 but not in BSD
4.4. The function posix_memalign() comes from POSIX 1003.1d.
The manual page also has this to say about header files:
HEADERS
Everybody agrees that posix_memalign() is declared in <stdlib.h>. In
order to declare it, glibc needs _GNU_SOURCE defined, or _XOPEN_SOURCE
defined to a value not less than 600.
Tom
--
Tom Hughes (th...@cy...)
Software Engineer, Cyberscience Corporation
http://www.cyberscience.com/
|
|
From: Nicholas N. <nj...@ca...> - 2004-07-25 12:33:35
|
On Fri, 23 Jul 2004, Kingsley G. Morse Jr. wrote:
>>>> Ah, are you using a 1G:3G user:kernel
>>>> address space split?
>>>
>>> How can I check?
>>
>> Well, it's a kernel build option, so look there
>> first. If not dmesg probably has a clue.
>
> Yes, and, if I recall correctly, I found through
> Google that there was evidently a patch for kernel
> 2.4.(23?) that added it as a configuration option.
>
> However, unless I overlooked it, neither "make
> xconfig" or "dmesg" revealed such an option for my
> 2.4.19-aa kernel.
Assuming you have a 1G:3G user:kernel split, you could try the patch for
coregrind/Makefile below (against 2.1.2 or the CVS HEAD; apply patch to
an already-built Valgrind, then re-build) which restricts everything to be
in the first 1G. It didn't work for me -- there was an error trying to
load shared libraries above 0x30000000 -- but it might work on your
system. If it does work on your system, it's likely you won't be able to
valgrind any very large programs, because there is so little user-space
memory available.
HTH
N
*** 178,182 ****
stage2_DEPENDENCIES = $(srcdir)/valgrind.vs x86/stage2.lds
stage2_LDFLAGS = -Wl,--export-dynamic -Wl,-e,_ume_entry -g \
! -Wl,-defsym,kickstart_base=0x30000000 \
-Wl,-T,x86/stage2.lds \
-Wl,-version-script $(srcdir)/valgrind.vs
--- 178,182 ----
stage2_DEPENDENCIES = $(srcdir)/valgrind.vs x86/stage2.lds
stage2_LDFLAGS = -Wl,--export-dynamic -Wl,-e,_ume_entry -g \
! -Wl,-defsym,kickstart_base=0xb0000000 \
-Wl,-T,x86/stage2.lds \
-Wl,-version-script $(srcdir)/valgrind.vs
|
|
From: Nicholas N. <nj...@ca...> - 2004-07-25 12:21:28
|
On Tue, 20 Jul 2004, Jeremy Fitzhardinge wrote: >> Maybe LIBALIAS instead of the redirection table for strchr()? I don't >> know, I don't understand the redirection stuff at all. > > There's a few things going on here. You can explicitly register a > redirect with VG_(add_redirect_sym)(). This is the base mechanism, but > I don't like it much because it forces you to scatter special knowledge > into too many places. > > The preferred mechanism is the implicit one, where a shared object (ie, > Tool, or something else), magically registers its own redirections. > Unfortunately this has the appearance of being a bit magical, because > this stuff is encoded into special symbols with special names (courtesy > of Robert). It's a bit ugly, but its nicer than the alternatives which > were 1) more complex and 2) ELF-specific. So, can VG_(add_redirect_sym)() be abolished, and its uses replaced by interceptions? Having two ways of doing things is not good... N |
|
From: Nicholas N. <nj...@ca...> - 2004-07-25 12:19:37
|
Hi, I've started looking at an Opteron port. In making the code 64-bit clean, one big area that needs fixing is the allocator, vg_malloc2.c. I've completely reworked it so that it's (almost) 64-bit clean. The diff is at www.cl.cam.ac.uk/~njn25/diff.64-bit-alloc The new version of vg_malloc2.c is at www.cl.cam.ac.uk/~njn25/vg_malloc2.c Reading the diff is hard because so much has changed in vg_malloc2.c. The change log is below. I'd be interested in hearing feedback. I'd like to see the changes go in now, even though Opteron support is still a long way off. I think I improved enough things while doing the change for it to be worthwhile (eg. I find it easier to understand, there are more comments, some incorrect corner cases are now working, magic numbers have been removed), and it would be good to have it in earlier to flush out any problems that would affect x86 (32-bit machines) sooner rather than later. Opinions? Thanks. N Big overhaul of the allocator. Much of the structure is the same, but lots of the details changed. Made the following generalisations: - Recast everything to be entirely terms of bytes, instead of a mixture of (32-bit) words and bytes. This is a bit easier to understand, and made the following generalisations possible... - Almost 64-bit clean; no longer assuming 32-bit words/pointers. Only (I think) non-64-bit clean part is that VG_(malloc)() et al take an Int as the size arg, and size_t is 64-bits on 64-bit machines. - Made the alignment of blocks returned by malloc() et al completely controlled by a single value, VG_MIN_MALLOC_SZB. (Previously there were various magic numbers and assumptions about block alignment scattered throughout.) I tested this, all the regression tests pass with VG_MIN_MALLOC_SZB of 4, 8, 16, 32, 64. One thing required for this was to make redzones elastic; the asked-for redzone size is now the minimum size; it will use bigger ones if necessary to get the required alignment. Some other specific changes: - Made use of types a bit more; ie. actually using the type 'Block', rather than just having everything as arrays of words, so that should be a bit safer. - Removed a->rz_check, which was redundant wrt. a->clientmem. - Removed VG_(is_inside_segment_mmapd_by_low_level_MM)(), which was not being used. - Fixed up the decision about which list to use so the 4 lists which weren't ever being used now are -- the problem was that this hasn't been properly updated when alignment changed from 4 to 8 bytes. - Added a regression test for memalign() and posix_memalign(). memalign() was aborting if passed a bad alignment argument. - Added some high-level comments in various places, explaining how the damn thing works. |
|
From: Nicholas N. <nj...@ca...> - 2004-07-25 12:01:26
|
Hi,
I've written a regression test that uses posix_memalign(). When I compile
it, I get this warning:
memalign2.c:35: warning: implicit declaration of function `posix_memalign'
But it compiles and runs ok.
Looking in /usr/include/stdlib.h, I see this declaration:
#ifdef __USE_XOPEN2K
/* Allocate memory of SIZE bytes with an alignment of ALIGNMENT. */
extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
__THROW __attribute_malloc__;
#endif
I guess the __USE_XOPEN2K is the problem, whatever that signifies.
I see the same thing on three different machines.
So I'm a bit puzzled. Is posix_memalign() standard? Should I not add a
regression test using it? (It would result in a warning.)
N
|
|
From: <js...@ac...> - 2004-07-25 03:01:23
|
Nightly build on nemesis ( SuSE 9.1 ) started at 2004-07-25 03:50:00 BST Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow sem: valgrind ./sem semlimit: valgrind ./semlimit sha1_test: valgrind ./sha1_test shortpush: valgrind ./shortpush shorts: valgrind ./shorts smc1: valgrind ./smc1 susphello: valgrind ./susphello syscall-restart1: valgrind ./syscall-restart1 syscall-restart2: valgrind ./syscall-restart2 system: valgrind ./system yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 168 tests, 4 stderr failures, 0 stdout failures ================= corecheck/tests/as_mmap (stderr) corecheck/tests/fdleak_fcntl (stderr) memcheck/tests/writev (stderr) memcheck/tests/zeropage (stderr) make: *** [regtest] Error 1 |
|
From: Tom H. <to...@co...> - 2004-07-25 02:25:19
|
Nightly build on dunsmere ( Fedora Core 2 ) started at 2004-07-25 03:20:02 BST Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow shorts: valgrind ./shorts smc1: valgrind ./smc1 susphello: valgrind ./susphello syscall-restart1: valgrind ./syscall-restart1 syscall-restart2: valgrind ./syscall-restart2 system: valgrind ./system yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 173 tests, 7 stderr failures, 1 stdout failure ================= corecheck/tests/fdleak_cmsg (stderr) corecheck/tests/fdleak_fcntl (stderr) corecheck/tests/fdleak_ipv4 (stderr) corecheck/tests/fdleak_socketpair (stderr) memcheck/tests/buflen_check (stderr) memcheck/tests/execve (stderr) memcheck/tests/writev (stderr) none/tests/exec-sigmask (stdout) make: *** [regtest] Error 1 |
|
From: Tom H. <th...@cy...> - 2004-07-25 02:19:24
|
Nightly build on audi ( Red Hat 9 ) started at 2004-07-25 03:15:02 BST Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow shortpush: valgrind ./shortpush shorts: valgrind ./shorts smc1: valgrind ./smc1 susphello: valgrind ./susphello syscall-restart1: valgrind ./syscall-restart1 syscall-restart2: valgrind ./syscall-restart2 system: valgrind ./system yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 173 tests, 7 stderr failures, 0 stdout failures ================= corecheck/tests/fdleak_cmsg (stderr) corecheck/tests/fdleak_fcntl (stderr) corecheck/tests/fdleak_ipv4 (stderr) corecheck/tests/fdleak_socketpair (stderr) memcheck/tests/buflen_check (stderr) memcheck/tests/execve (stderr) memcheck/tests/writev (stderr) make: *** [regtest] Error 1 |
|
From: Tom H. <th...@cy...> - 2004-07-25 02:13:20
|
Nightly build on ginetta ( Red Hat 8.0 ) started at 2004-07-25 03:10:03 BST Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow sem: valgrind ./sem semlimit: valgrind ./semlimit sha1_test: valgrind ./sha1_test shortpush: valgrind ./shortpush shorts: valgrind ./shorts smc1: valgrind ./smc1 susphello: valgrind ./susphello syscall-restart1: valgrind ./syscall-restart1 syscall-restart2: valgrind ./syscall-restart2 system: valgrind ./system yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 173 tests, 4 stderr failures, 0 stdout failures ================= helgrind/tests/deadlock (stderr) helgrind/tests/race (stderr) helgrind/tests/race2 (stderr) memcheck/tests/writev (stderr) make: *** [regtest] Error 1 |
|
From: Tom H. <th...@cy...> - 2004-07-25 02:08:13
|
Nightly build on alvis ( Red Hat 7.3 ) started at 2004-07-25 03:05:01 BST Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow shortpush: valgrind ./shortpush shorts: valgrind ./shorts smc1: valgrind ./smc1 susphello: valgrind ./susphello syscall-restart1: valgrind ./syscall-restart1 syscall-restart2: valgrind ./syscall-restart2 system: valgrind ./system yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 173 tests, 6 stderr failures, 1 stdout failure ================= addrcheck/tests/toobig-allocs (stderr) memcheck/tests/badjump (stderr) memcheck/tests/brk (stderr) memcheck/tests/error_counts (stdout) memcheck/tests/new_nothrow (stderr) memcheck/tests/toobig-allocs (stderr) memcheck/tests/writev (stderr) make: *** [regtest] Error 1 |
|
From: Tom H. <th...@cy...> - 2004-07-25 02:07:25
|
Nightly build on standard ( Red Hat 7.2 ) started at 2004-07-25 03:00:02 BST Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow rcrl: valgrind ./rcrl readline1: valgrind ./readline1 resolv: valgrind ./resolv rlimit_nofile: valgrind ./rlimit_nofile seg_override: valgrind ./seg_override sem: valgrind ./sem semlimit: valgrind ./semlimit sha1_test: valgrind ./sha1_test shortpush: valgrind ./shortpush shorts: valgrind ./shorts smc1: valgrind ./smc1 susphello: valgrind ./susphello syscall-restart1: valgrind ./syscall-restart1 syscall-restart2: valgrind ./syscall-restart2 system: valgrind ./system yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 173 tests, 0 stderr failures, 0 stdout failures ================= |