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
(25) |
2
(25) |
3
(5) |
4
(13) |
|
5
(4) |
6
(8) |
7
(6) |
8
|
9
(10) |
10
(15) |
11
(9) |
|
12
(14) |
13
(10) |
14
(24) |
15
(41) |
16
(13) |
17
(9) |
18
(3) |
|
19
(10) |
20
(11) |
21
(28) |
22
(36) |
23
(52) |
24
(36) |
25
(12) |
|
26
(31) |
27
(27) |
28
(20) |
29
(15) |
30
(22) |
31
(17) |
|
|
From: <sv...@va...> - 2009-07-04 15:00:18
|
Author: bart Date: 2009-07-04 16:00:12 +0100 (Sat, 04 Jul 2009) New Revision: 10413 Log: Added yet another expected output file. Added: trunk/drd/tests/tc23_bogus_condwait.stderr.exp2 Modified: trunk/drd/tests/Makefile.am Modified: trunk/drd/tests/Makefile.am =================================================================== --- trunk/drd/tests/Makefile.am 2009-07-04 14:33:53 UTC (rev 10412) +++ trunk/drd/tests/Makefile.am 2009-07-04 15:00:12 UTC (rev 10413) @@ -208,6 +208,7 @@ tc22_exit_w_lock.stderr.exp-64bit \ tc22_exit_w_lock.vgtest \ tc23_bogus_condwait.stderr.exp \ + tc23_bogus_condwait.stderr.exp2 \ tc23_bogus_condwait.vgtest \ tc24_nonzero_sem.stderr.exp \ tc24_nonzero_sem.vgtest \ Added: trunk/drd/tests/tc23_bogus_condwait.stderr.exp2 =================================================================== --- trunk/drd/tests/tc23_bogus_condwait.stderr.exp2 (rev 0) +++ trunk/drd/tests/tc23_bogus_condwait.stderr.exp2 2009-07-04 15:00:12 UTC (rev 10413) @@ -0,0 +1,16 @@ + +The object at address 0x........ is not a mutex. + at 0x........: pthread_cond_wait* (drd_pthread_intercepts.c:?) + by 0x........: main (tc23_bogus_condwait.c:69) + +The object at address 0x........ is not a mutex. + at 0x........: pthread_cond_wait* (drd_pthread_intercepts.c:?) + by 0x........: main (tc23_bogus_condwait.c:69) + +Process terminating with default action of signal 7 (SIGBUS) + Invalid address alignment at address 0x........ + at 0x........: (within libpthread-?.?.so) + by 0x........: pthread_cond_wait@@GLIBC_2.3.2(within libpthread-?.?.so) + by 0x........: main (tc23_bogus_condwait.c:69) + +ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0) |
|
From: <sv...@va...> - 2009-07-04 14:34:00
|
Author: sewardj
Date: 2009-07-04 15:33:53 +0100 (Sat, 04 Jul 2009)
New Revision: 10412
Log:
Make this test work on PowerPC too.
Modified:
trunk/memcheck/tests/Makefile.am
trunk/memcheck/tests/atomic_incs.c
Modified: trunk/memcheck/tests/Makefile.am
===================================================================
--- trunk/memcheck/tests/Makefile.am 2009-07-04 14:20:43 UTC (rev 10411)
+++ trunk/memcheck/tests/Makefile.am 2009-07-04 14:33:53 UTC (rev 10412)
@@ -185,6 +185,7 @@
check_PROGRAMS = \
addressable \
+ atomic_incs \
badaddrvalue badfree badjump badjump2 \
badloop badpoll badrw brk2 buflen_check \
clientperm custom_alloc \
@@ -230,11 +231,7 @@
wrap1 wrap2 wrap3 wrap4 wrap5 wrap6 wrap7 wrap7so.so wrap8 \
writev
-if VGCONF_ARCHS_INCLUDE_X86
-check_PROGRAMS += atomic_incs
-endif
-
AM_CFLAGS += $(AM_FLAG_M3264_PRI)
AM_CXXFLAGS += $(AM_FLAG_M3264_PRI)
Modified: trunk/memcheck/tests/atomic_incs.c
===================================================================
--- trunk/memcheck/tests/atomic_incs.c 2009-07-04 14:20:43 UTC (rev 10411)
+++ trunk/memcheck/tests/atomic_incs.c 2009-07-04 14:33:53 UTC (rev 10412)
@@ -7,6 +7,7 @@
#include <stdlib.h>
#include <stdio.h>
+#include <string.h>
#include <assert.h>
#include <unistd.h>
#include <sys/wait.h>
@@ -14,12 +15,15 @@
#define NNN 3456987
+#define IS_8_ALIGNED(_ptr) (0 == (((unsigned long)(_ptr)) & 7))
+
+
__attribute__((noinline)) void atomic_add_8bit ( char* p, int n )
{
+#if defined(VGA_x86)
unsigned long block[2];
block[0] = (unsigned long)p;
block[1] = n;
-#if defined(VGA_x86)
__asm__ __volatile__(
"movl 0(%%esi),%%eax" "\n\t"
"movl 4(%%esi),%%ebx" "\n\t"
@@ -27,23 +31,61 @@
: : "S"(&block[0])/* S means "esi only" */ : "memory","cc","eax","ebx"
);
#elif defined(VGA_amd64)
+ unsigned long block[2];
+ block[0] = (unsigned long)p;
+ block[1] = n;
__asm__ __volatile__(
"movq 0(%%rsi),%%rax" "\n\t"
"movq 8(%%rsi),%%rbx" "\n\t"
"lock; addb %%bl,(%%rax)" "\n"
: : "S"(&block[0])/* S means "rsi only" */ : "memory","cc","rax","rbx"
);
+#elif defined(VGA_ppc32)
+ /* Nasty hack. Does correctly atomically do *p += n, but only if p
+ is 8-aligned -- guaranteed by caller. */
+ unsigned long success;
+ do {
+ __asm__ __volatile__(
+ "lwarx 15,0,%1" "\n\t"
+ "add 15,15,%2" "\n\t"
+ "stwcx. 15,0,%1" "\n\t"
+ "mfcr %0" "\n\t"
+ "srwi %0,%0,29" "\n\t"
+ "andi. %0,%0,1" "\n"
+ : /*out*/"=b"(success)
+ : /*in*/ "b"(p), "b"(((unsigned long)n) << 24)
+ : /*trash*/ "memory", "cc", "r15"
+ );
+ } while (success != 1);
+#elif defined(VGA_ppc64)
+ /* Nasty hack. Does correctly atomically do *p += n, but only if p
+ is 8-aligned -- guaranteed by caller. */
+ unsigned long success;
+ do {
+ __asm__ __volatile__(
+ "ldarx 15,0,%1" "\n\t"
+ "add 15,15,%2" "\n\t"
+ "stdcx. 15,0,%1" "\n\t"
+ "mfcr %0" "\n\t"
+ "srwi %0,%0,29" "\n\t"
+ "andi. %0,%0,1" "\n"
+ : /*out*/"=b"(success)
+ : /*in*/ "b"(p), "b"(((unsigned long)n) << 56)
+ : /*trash*/ "memory", "cc", "r15"
+ );
+ } while (success != 1);
#else
# error "Unsupported arch"
#endif
}
+
__attribute__((noinline)) void atomic_add_16bit ( short* p, int n )
{
+#if defined(VGA_x86)
unsigned long block[2];
block[0] = (unsigned long)p;
block[1] = n;
-#if defined(VGA_x86)
__asm__ __volatile__(
"movl 0(%%esi),%%eax" "\n\t"
"movl 4(%%esi),%%ebx" "\n\t"
@@ -51,12 +93,49 @@
: : "S"(&block[0])/* S means "esi only" */ : "memory","cc","eax","ebx"
);
#elif defined(VGA_amd64)
+ unsigned long block[2];
+ block[0] = (unsigned long)p;
+ block[1] = n;
__asm__ __volatile__(
"movq 0(%%rsi),%%rax" "\n\t"
"movq 8(%%rsi),%%rbx" "\n\t"
"lock; addw %%bx,(%%rax)" "\n"
: : "S"(&block[0])/* S means "rsi only" */ : "memory","cc","rax","rbx"
);
+#elif defined(VGA_ppc32)
+ /* Nasty hack. Does correctly atomically do *p += n, but only if p
+ is 8-aligned -- guaranteed by caller. */
+ unsigned long success;
+ do {
+ __asm__ __volatile__(
+ "lwarx 15,0,%1" "\n\t"
+ "add 15,15,%2" "\n\t"
+ "stwcx. 15,0,%1" "\n\t"
+ "mfcr %0" "\n\t"
+ "srwi %0,%0,29" "\n\t"
+ "andi. %0,%0,1" "\n"
+ : /*out*/"=b"(success)
+ : /*in*/ "b"(p), "b"(((unsigned long)n) << 16)
+ : /*trash*/ "memory", "cc", "r15"
+ );
+ } while (success != 1);
+#elif defined(VGA_ppc64)
+ /* Nasty hack. Does correctly atomically do *p += n, but only if p
+ is 8-aligned -- guaranteed by caller. */
+ unsigned long success;
+ do {
+ __asm__ __volatile__(
+ "ldarx 15,0,%1" "\n\t"
+ "add 15,15,%2" "\n\t"
+ "stdcx. 15,0,%1" "\n\t"
+ "mfcr %0" "\n\t"
+ "srwi %0,%0,29" "\n\t"
+ "andi. %0,%0,1" "\n"
+ : /*out*/"=b"(success)
+ : /*in*/ "b"(p), "b"(((unsigned long)n) << 48)
+ : /*trash*/ "memory", "cc", "r15"
+ );
+ } while (success != 1);
#else
# error "Unsupported arch"
#endif
@@ -64,10 +143,10 @@
__attribute__((noinline)) void atomic_add_32bit ( int* p, int n )
{
+#if defined(VGA_x86)
unsigned long block[2];
block[0] = (unsigned long)p;
block[1] = n;
-#if defined(VGA_x86)
__asm__ __volatile__(
"movl 0(%%esi),%%eax" "\n\t"
"movl 4(%%esi),%%ebx" "\n\t"
@@ -75,12 +154,47 @@
: : "S"(&block[0])/* S means "esi only" */ : "memory","cc","eax","ebx"
);
#elif defined(VGA_amd64)
+ unsigned long block[2];
+ block[0] = (unsigned long)p;
+ block[1] = n;
__asm__ __volatile__(
"movq 0(%%rsi),%%rax" "\n\t"
"movq 8(%%rsi),%%rbx" "\n\t"
"lock; addl %%ebx,(%%rax)" "\n"
: : "S"(&block[0])/* S means "rsi only" */ : "memory","cc","rax","rbx"
);
+#elif defined(VGA_ppc32)
+ unsigned long success;
+ do {
+ __asm__ __volatile__(
+ "lwarx 15,0,%1" "\n\t"
+ "add 15,15,%2" "\n\t"
+ "stwcx. 15,0,%1" "\n\t"
+ "mfcr %0" "\n\t"
+ "srwi %0,%0,29" "\n\t"
+ "andi. %0,%0,1" "\n"
+ : /*out*/"=b"(success)
+ : /*in*/ "b"(p), "b"(n)
+ : /*trash*/ "memory", "cc", "r15"
+ );
+ } while (success != 1);
+#elif defined(VGA_ppc64)
+ /* Nasty hack. Does correctly atomically do *p += n, but only if p
+ is 8-aligned -- guaranteed by caller. */
+ unsigned long success;
+ do {
+ __asm__ __volatile__(
+ "ldarx 15,0,%1" "\n\t"
+ "add 15,15,%2" "\n\t"
+ "stdcx. 15,0,%1" "\n\t"
+ "mfcr %0" "\n\t"
+ "srwi %0,%0,29" "\n\t"
+ "andi. %0,%0,1" "\n"
+ : /*out*/"=b"(success)
+ : /*in*/ "b"(p), "b"(((unsigned long)n) << 32)
+ : /*trash*/ "memory", "cc", "r15"
+ );
+ } while (success != 1);
#else
# error "Unsupported arch"
#endif
@@ -88,20 +202,35 @@
__attribute__((noinline)) void atomic_add_64bit ( long long int* p, int n )
{
- // this is a bit subtle. It relies on the fact that, on a 64-bit platform,
- // sizeof(unsigned long long int) == sizeof(unsigned long) == sizeof(void*)
+#if defined(VGA_x86) || defined(VGA_ppc32)
+ /* do nothing; is not supported */
+#elif defined(VGA_amd64)
+ // this is a bit subtle. It relies on the fact that, on a 64-bit platform,
+ // sizeof(unsigned long long int) == sizeof(unsigned long) == sizeof(void*)
unsigned long long int block[2];
block[0] = (unsigned long long int)(unsigned long)p;
block[1] = n;
-#if defined(VGA_x86)
- /* do nothing; is not supported */
-#elif defined(VGA_amd64)
__asm__ __volatile__(
"movq 0(%%rsi),%%rax" "\n\t"
"movq 8(%%rsi),%%rbx" "\n\t"
"lock; addq %%rbx,(%%rax)" "\n"
: : "S"(&block[0])/* S means "rsi only" */ : "memory","cc","rax","rbx"
);
+#elif defined(VGA_ppc64)
+ unsigned long success;
+ do {
+ __asm__ __volatile__(
+ "ldarx 15,0,%1" "\n\t"
+ "add 15,15,%2" "\n\t"
+ "stdcx. 15,0,%1" "\n\t"
+ "mfcr %0" "\n\t"
+ "srwi %0,%0,29" "\n\t"
+ "andi. %0,%0,1" "\n"
+ : /*out*/"=b"(success)
+ : /*in*/ "b"(p), "b"(n)
+ : /*trash*/ "memory", "cc", "r15"
+ );
+ } while (success != 1);
#else
# error "Unsupported arch"
#endif
@@ -132,6 +261,13 @@
p32 = (int*)(page+512);
p64 = (long long int*)(page+768);
+ assert( IS_8_ALIGNED(p8) );
+ assert( IS_8_ALIGNED(p16) );
+ assert( IS_8_ALIGNED(p32) );
+ assert( IS_8_ALIGNED(p64) );
+
+ memset(page, 0, 1024);
+
*p8 = 0;
*p16 = 0;
*p32 = 0;
@@ -175,12 +311,12 @@
assert(WIFEXITED(status));
printf("FINAL VALUES: 8 bit %d, 16 bit %d, 32 bit %d, 64 bit %lld\n",
- (int)(*p8), (int)(*p16), *p32, *p64 );
+ (int)(*(signed char*)p8), (int)(*p16), *p32, *p64 );
- if (-74 == (int)(*p8)
+ if (-74 == (int)(*(signed char*)p8)
&& 32694 == (int)(*p16)
&& 6913974 == *p32
- && (0LL == *p64 || 682858642110 == *p64)) {
+ && (0LL == *p64 || 682858642110LL == *p64)) {
printf("PASS\n");
} else {
printf("FAIL -- see source code for expected values\n");
|
|
From: <sv...@va...> - 2009-07-04 14:21:02
|
Author: bart Date: 2009-07-04 15:20:43 +0100 (Sat, 04 Jul 2009) New Revision: 10411 Log: Un-break PPC build. Modified: trunk/memcheck/tests/Makefile.am Modified: trunk/memcheck/tests/Makefile.am =================================================================== --- trunk/memcheck/tests/Makefile.am 2009-07-04 12:44:08 UTC (rev 10410) +++ trunk/memcheck/tests/Makefile.am 2009-07-04 14:20:43 UTC (rev 10411) @@ -185,7 +185,6 @@ check_PROGRAMS = \ addressable \ - atomic_incs \ badaddrvalue badfree badjump badjump2 \ badloop badpoll badrw brk2 buflen_check \ clientperm custom_alloc \ @@ -231,7 +230,11 @@ wrap1 wrap2 wrap3 wrap4 wrap5 wrap6 wrap7 wrap7so.so wrap8 \ writev +if VGCONF_ARCHS_INCLUDE_X86 +check_PROGRAMS += atomic_incs +endif + AM_CFLAGS += $(AM_FLAG_M3264_PRI) AM_CXXFLAGS += $(AM_FLAG_M3264_PRI) |
|
From: <sv...@va...> - 2009-07-04 13:07:37
|
Author: sewardj
Date: 2009-07-04 14:07:30 +0100 (Sat, 04 Jul 2009)
New Revision: 1906
Log:
Fix ppc64 guest layout description following recent DCAS hackery.
Modified:
trunk/priv/guest_ppc_helpers.c
Modified: trunk/priv/guest_ppc_helpers.c
===================================================================
--- trunk/priv/guest_ppc_helpers.c 2009-07-02 12:36:08 UTC (rev 1905)
+++ trunk/priv/guest_ppc_helpers.c 2009-07-04 13:07:30 UTC (rev 1906)
@@ -808,7 +808,7 @@
/* Describe any sections to be regarded by Memcheck as
'always-defined'. */
- .n_alwaysDefd = 12,
+ .n_alwaysDefd = 11,
.alwaysDefd
= { /* 0 */ ALWAYSDEFD64(guest_CIA),
|
|
From: <sv...@va...> - 2009-07-04 12:58:42
|
Author: bart
Date: 2009-07-04 13:20:04 +0100 (Sat, 04 Jul 2009)
New Revision: 10408
Log:
Added regression test for pthread cleanup handling.
Added:
trunk/drd/tests/pth_cleanup_handler.c
trunk/drd/tests/pth_cleanup_handler.stderr.exp
trunk/drd/tests/pth_cleanup_handler.vgtest
Modified:
trunk/drd/tests/Makefile.am
Modified: trunk/drd/tests/Makefile.am
===================================================================
--- trunk/drd/tests/Makefile.am 2009-07-04 12:17:58 UTC (rev 10407)
+++ trunk/drd/tests/Makefile.am 2009-07-04 12:20:04 UTC (rev 10408)
@@ -98,6 +98,8 @@
pth_broadcast.vgtest \
pth_cancel_locked.stderr.exp \
pth_cancel_locked.vgtest \
+ pth_cleanup_handler.stderr.exp \
+ pth_cleanup_handler.vgtest \
pth_cond_race.stderr.exp \
pth_cond_race.vgtest \
pth_cond_race2.stderr.exp \
@@ -228,6 +230,7 @@
new_delete \
pth_broadcast \
pth_cancel_locked \
+ pth_cleanup_handler \
pth_cond_race \
pth_create_chain \
pth_detached \
@@ -286,6 +289,8 @@
monitor_example_SOURCES = monitor_example.cpp
new_delete_SOURCES = new_delete.cpp
+pth_cleanup_handler_CFLAGS = @FLAG_W_NO_EMPTY_BODY@
+
tsan_unittest_SOURCES = tsan_unittest.cpp
tsan_unittest_CXXFLAGS = $(AM_CXXFLAGS) \
-DTHREAD_WRAPPERS='"tsan_thread_wrappers_pthread.h"'
Added: trunk/drd/tests/pth_cleanup_handler.c
===================================================================
--- trunk/drd/tests/pth_cleanup_handler.c (rev 0)
+++ trunk/drd/tests/pth_cleanup_handler.c 2009-07-04 12:20:04 UTC (rev 10408)
@@ -0,0 +1,66 @@
+/*
+ * Test program for verifying whether pthread cleanup handlers are invoked
+ * correctly.
+ */
+
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <stdlib.h>
+
+
+static pthread_rwlock_t rwl;
+
+
+static void cleanup_handler(void* param)
+{
+ fprintf(stderr, "Cleanup handler has been called.\n");
+ pthread_rwlock_unlock(&rwl);
+}
+
+static void* f(void *p)
+{
+ if (pthread_rwlock_rdlock(&rwl) != 0)
+ {
+ fprintf(stderr, "pthread_rwlock_rdlock()\n");
+ exit(1);
+ }
+
+ pthread_cleanup_push(cleanup_handler, NULL);
+ pthread_exit(0);
+ pthread_cleanup_pop(true);
+}
+
+
+int main()
+{
+ pthread_t pt1, pt2;
+
+ // Make sure the program exits in case a deadlock has been triggered.
+ alarm(2);
+
+ if (pthread_rwlock_init(&rwl, NULL) != 0)
+ {
+ fprintf(stderr, "pthread_rwlock_init()\n");
+ exit(1);
+ }
+ if (pthread_create(&pt1, NULL, f, NULL) != 0)
+ {
+ fprintf(stderr, "pthread_create()\n");
+ exit(1);
+ }
+ if (pthread_create(&pt2, NULL, f, NULL) != 0)
+ {
+ fprintf(stderr, "pthread_create()\n");
+ exit(1);
+ }
+
+ pthread_join(pt1, 0);
+ pthread_join(pt2, 0);
+
+ fprintf(stderr, "Test succeeded.\n");
+
+ return 0;
+}
Added: trunk/drd/tests/pth_cleanup_handler.stderr.exp
===================================================================
--- trunk/drd/tests/pth_cleanup_handler.stderr.exp (rev 0)
+++ trunk/drd/tests/pth_cleanup_handler.stderr.exp 2009-07-04 12:20:04 UTC (rev 10408)
@@ -0,0 +1,6 @@
+
+Cleanup handler has been called.
+Cleanup handler has been called.
+Test succeeded.
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Added: trunk/drd/tests/pth_cleanup_handler.vgtest
===================================================================
--- trunk/drd/tests/pth_cleanup_handler.vgtest (rev 0)
+++ trunk/drd/tests/pth_cleanup_handler.vgtest 2009-07-04 12:20:04 UTC (rev 10408)
@@ -0,0 +1,3 @@
+prereq: test -e pth_cleanup_handler && ./supported_libpthread
+vgopts: --var-info=yes --check-stack-var=yes
+prog: pth_cleanup_handler
|
|
From: <sv...@va...> - 2009-07-04 12:58:37
|
Author: bart Date: 2009-07-04 13:20:44 +0100 (Sat, 04 Jul 2009) New Revision: 10409 Log: Updated ignore list. Modified: trunk/drd/tests/ Property changes on: trunk/drd/tests ___________________________________________________________________ Name: svn:ignore - *.dSYM *.stderr.diff* *.stderr.out *.stdout.diff* *.stdout.out .deps annotate_rwlock atomic_var bar_bad bar_trivial boost_thread circular_buffer drd_bitmap_test fp_race hg01_all_ok hg02_deadlock hg03_inherit hg04_race hg05_race2 hg06_readshared hold_lock linuxthreads_det Makefile Makefile.in matinv memory_allocation monitor_example new_delete omp_matinv omp_prime omp_printf pth_barrier pth_barrier_race pth_barrier_reinit pth_broadcast pth_cancel_locked pth_cond_race pth_create_chain pth_create_glibc_2_0 pth_detached pth_detached_sem pth_inconsistent_cond_wait pth_mutex_reinit pth_process_shared_mutex pth_spinlock qt4_mutex qt4_rwlock qt4_semaphore recursive_mutex rwlock_race rwlock_test sem_as_mutex sigalrm tc01_simple_race tc02_simple_tls tc03_re_excl tc04_free_lock tc05_simple_race tc06_two_races tc07_hbl1 tc08_hbl2 tc09_bad_unlock tc10_rec_lock tc11_XCHG tc12_rwl_trivial tc13_laog1 tc15_laog_lockdel tc16_byterace tc17_sembar tc18_semabuse tc19_shadowmem tc20_verifywrap tc21_pthonce tc22_exit_w_lock tc23_bogus_condwait tc24_nonzero_sem thread_name trylock tsan_unittest unit_bitmap unit_vc vg_regtest.tmp* + *.dSYM *.stderr.diff* *.stderr.out *.stdout.diff* *.stdout.out .deps Makefile Makefile.in annotate_rwlock atomic_var bar_bad bar_trivial boost_thread circular_buffer drd_bitmap_test fp_race hg01_all_ok hg02_deadlock hg03_inherit hg04_race hg05_race2 hg06_readshared hold_lock linuxthreads_det matinv memory_allocation monitor_example new_delete omp_matinv omp_prime omp_printf pth_barrier pth_barrier_race pth_barrier_reinit pth_broadcast pth_cancel_locked pth_cleanup_handler pth_cond_race pth_create_chain pth_create_glibc_2_0 pth_detached pth_detached_sem pth_inconsistent_cond_wait pth_mutex_reinit pth_process_shared_mutex pth_spinlock qt4_mutex qt4_rwlock qt4_semaphore recursive_mutex rwlock_race rwlock_test sem_as_mutex sigalrm tc01_simple_race tc02_simple_tls tc03_re_excl tc04_free_lock tc05_simple_race tc06_two_races tc07_hbl1 tc08_hbl2 tc09_bad_unlock tc10_rec_lock tc11_XCHG tc12_rwl_trivial tc13_laog1 tc15_laog_lockdel tc16_byterace tc17_sembar tc18_semabuse tc19_shadowmem tc20_verifywrap tc21_pthonce tc22_exit_w_lock tc23_bogus_condwait tc24_nonzero_sem thread_name trylock tsan_unittest unit_bitmap unit_vc vg_regtest.tmp* |
|
From: <sv...@va...> - 2009-07-04 12:54:12
|
Author: bart Date: 2009-07-04 13:17:07 +0100 (Sat, 04 Jul 2009) New Revision: 10406 Log: Restored configure test for -Wno-empty-body. Modified: trunk/configure.in Modified: trunk/configure.in =================================================================== --- trunk/configure.in 2009-07-04 00:38:11 UTC (rev 10405) +++ trunk/configure.in 2009-07-04 12:17:07 UTC (rev 10406) @@ -1196,6 +1196,29 @@ fi +# does this compiler support -Wno-empty-body ? + +AC_MSG_CHECKING([if gcc accepts -Wno-empty-body]) + +safe_CFLAGS=$CFLAGS +CFLAGS="-Wno-empty-body" + +AC_TRY_COMPILE( +[ ], +[ + return 0; +], +[ +AC_SUBST([FLAG_W_NO_EMPTY_BODY], [-Wno-empty-body]) +AC_MSG_RESULT([yes]) +], +[ +AC_SUBST([FLAG_W_NO_EMPTY_BODY], []) +AC_MSG_RESULT([no]) +]) +CFLAGS=$safe_CFLAGS + + # does this compiler support -Wno-format-zero-length ? AC_MSG_CHECKING([if gcc accepts -Wno-format-zero-length]) |
|
From: <sv...@va...> - 2009-07-04 12:54:12
|
Author: bart Date: 2009-07-04 13:17:58 +0100 (Sat, 04 Jul 2009) New Revision: 10407 Log: Enabled the DRD command line flags --var-info=yes and --check-stack-var=yes for the pth_cancel_locked regression test. Modified: trunk/drd/tests/pth_cancel_locked.vgtest Modified: trunk/drd/tests/pth_cancel_locked.vgtest =================================================================== --- trunk/drd/tests/pth_cancel_locked.vgtest 2009-07-04 12:17:07 UTC (rev 10406) +++ trunk/drd/tests/pth_cancel_locked.vgtest 2009-07-04 12:17:58 UTC (rev 10407) @@ -1,2 +1,3 @@ prereq: ./supported_libpthread +vgopts: --var-info=yes --check-stack-var=yes prog: pth_cancel_locked |
|
From: <sv...@va...> - 2009-07-04 12:54:07
|
Author: sewardj
Date: 2009-07-04 13:44:08 +0100 (Sat, 04 Jul 2009)
New Revision: 10410
Log:
Add tests to verify behaviour of atomic instruction handling.
Added:
trunk/memcheck/tests/atomic_incs.c
trunk/memcheck/tests/atomic_incs.stderr.exp
trunk/memcheck/tests/atomic_incs.stdout.exp-32bit
trunk/memcheck/tests/atomic_incs.stdout.exp-64bit
trunk/memcheck/tests/atomic_incs.vgtest
trunk/none/tests/amd64/amd64locked.c
trunk/none/tests/amd64/amd64locked.stderr.exp
trunk/none/tests/amd64/amd64locked.stdout.exp
trunk/none/tests/amd64/amd64locked.vgtest
trunk/none/tests/x86/x86locked.c
trunk/none/tests/x86/x86locked.stderr.exp
trunk/none/tests/x86/x86locked.stdout.exp
trunk/none/tests/x86/x86locked.vgtest
Modified:
trunk/memcheck/tests/Makefile.am
trunk/none/tests/amd64/Makefile.am
trunk/none/tests/x86/Makefile.am
Modified: trunk/memcheck/tests/Makefile.am
===================================================================
--- trunk/memcheck/tests/Makefile.am 2009-07-04 12:20:44 UTC (rev 10409)
+++ trunk/memcheck/tests/Makefile.am 2009-07-04 12:44:08 UTC (rev 10410)
@@ -36,6 +36,8 @@
EXTRA_DIST = \
addressable.stderr.exp addressable.stdout.exp addressable.vgtest \
+ atomic_incs.stderr.exp atomic_incs.vgtest \
+ atomic_incs.stdout.exp-32bit atomic_incs.stdout.exp-64bit \
badaddrvalue.stderr.exp \
badaddrvalue.stdout.exp badaddrvalue.vgtest \
badfree-2trace.stderr.exp badfree-2trace.vgtest \
@@ -183,6 +185,7 @@
check_PROGRAMS = \
addressable \
+ atomic_incs \
badaddrvalue badfree badjump badjump2 \
badloop badpoll badrw brk2 buflen_check \
clientperm custom_alloc \
Added: trunk/memcheck/tests/atomic_incs.c
===================================================================
--- trunk/memcheck/tests/atomic_incs.c (rev 0)
+++ trunk/memcheck/tests/atomic_incs.c 2009-07-04 12:44:08 UTC (rev 10410)
@@ -0,0 +1,192 @@
+
+/* This is an example of a program which does atomic memory operations
+ between two processes which share a page. Valgrind 3.4.1 and
+ earlier produce incorrect answers because it does not preserve
+ atomicity of the relevant instructions in the generated code; but
+ the post-DCAS-merge versions of Valgrind do behave correctly. */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+#include <unistd.h>
+#include <sys/wait.h>
+#include <sys/mman.h>
+
+#define NNN 3456987
+
+__attribute__((noinline)) void atomic_add_8bit ( char* p, int n )
+{
+ unsigned long block[2];
+ block[0] = (unsigned long)p;
+ block[1] = n;
+#if defined(VGA_x86)
+ __asm__ __volatile__(
+ "movl 0(%%esi),%%eax" "\n\t"
+ "movl 4(%%esi),%%ebx" "\n\t"
+ "lock; addb %%bl,(%%eax)" "\n"
+ : : "S"(&block[0])/* S means "esi only" */ : "memory","cc","eax","ebx"
+ );
+#elif defined(VGA_amd64)
+ __asm__ __volatile__(
+ "movq 0(%%rsi),%%rax" "\n\t"
+ "movq 8(%%rsi),%%rbx" "\n\t"
+ "lock; addb %%bl,(%%rax)" "\n"
+ : : "S"(&block[0])/* S means "rsi only" */ : "memory","cc","rax","rbx"
+ );
+#else
+# error "Unsupported arch"
+#endif
+}
+
+__attribute__((noinline)) void atomic_add_16bit ( short* p, int n )
+{
+ unsigned long block[2];
+ block[0] = (unsigned long)p;
+ block[1] = n;
+#if defined(VGA_x86)
+ __asm__ __volatile__(
+ "movl 0(%%esi),%%eax" "\n\t"
+ "movl 4(%%esi),%%ebx" "\n\t"
+ "lock; addw %%bx,(%%eax)" "\n"
+ : : "S"(&block[0])/* S means "esi only" */ : "memory","cc","eax","ebx"
+ );
+#elif defined(VGA_amd64)
+ __asm__ __volatile__(
+ "movq 0(%%rsi),%%rax" "\n\t"
+ "movq 8(%%rsi),%%rbx" "\n\t"
+ "lock; addw %%bx,(%%rax)" "\n"
+ : : "S"(&block[0])/* S means "rsi only" */ : "memory","cc","rax","rbx"
+ );
+#else
+# error "Unsupported arch"
+#endif
+}
+
+__attribute__((noinline)) void atomic_add_32bit ( int* p, int n )
+{
+ unsigned long block[2];
+ block[0] = (unsigned long)p;
+ block[1] = n;
+#if defined(VGA_x86)
+ __asm__ __volatile__(
+ "movl 0(%%esi),%%eax" "\n\t"
+ "movl 4(%%esi),%%ebx" "\n\t"
+ "lock; addl %%ebx,(%%eax)" "\n"
+ : : "S"(&block[0])/* S means "esi only" */ : "memory","cc","eax","ebx"
+ );
+#elif defined(VGA_amd64)
+ __asm__ __volatile__(
+ "movq 0(%%rsi),%%rax" "\n\t"
+ "movq 8(%%rsi),%%rbx" "\n\t"
+ "lock; addl %%ebx,(%%rax)" "\n"
+ : : "S"(&block[0])/* S means "rsi only" */ : "memory","cc","rax","rbx"
+ );
+#else
+# error "Unsupported arch"
+#endif
+}
+
+__attribute__((noinline)) void atomic_add_64bit ( long long int* p, int n )
+{
+ // this is a bit subtle. It relies on the fact that, on a 64-bit platform,
+ // sizeof(unsigned long long int) == sizeof(unsigned long) == sizeof(void*)
+ unsigned long long int block[2];
+ block[0] = (unsigned long long int)(unsigned long)p;
+ block[1] = n;
+#if defined(VGA_x86)
+ /* do nothing; is not supported */
+#elif defined(VGA_amd64)
+ __asm__ __volatile__(
+ "movq 0(%%rsi),%%rax" "\n\t"
+ "movq 8(%%rsi),%%rbx" "\n\t"
+ "lock; addq %%rbx,(%%rax)" "\n"
+ : : "S"(&block[0])/* S means "rsi only" */ : "memory","cc","rax","rbx"
+ );
+#else
+# error "Unsupported arch"
+#endif
+}
+
+int main ( int argc, char** argv )
+{
+ int i, status;
+ char* page;
+ char* p8;
+ short* p16;
+ int* p32;
+ long long int* p64;
+ pid_t child, p2;
+
+ printf("parent, pre-fork\n");
+
+ page = mmap( 0, sysconf(_SC_PAGESIZE),
+ PROT_READ|PROT_WRITE,
+ MAP_ANONYMOUS|MAP_SHARED, -1, 0 );
+ if (page == MAP_FAILED) {
+ perror("mmap failed");
+ exit(1);
+ }
+
+ p8 = (char*)(page+0);
+ p16 = (short*)(page+256);
+ p32 = (int*)(page+512);
+ p64 = (long long int*)(page+768);
+
+ *p8 = 0;
+ *p16 = 0;
+ *p32 = 0;
+ *p64 = 0;
+
+ child = fork();
+ if (child == -1) {
+ perror("fork() failed\n");
+ return 1;
+ }
+
+ if (child == 0) {
+ /* --- CHILD --- */
+ printf("child\n");
+ for (i = 0; i < NNN; i++) {
+ atomic_add_8bit(p8, 1);
+ atomic_add_16bit(p16, 1);
+ atomic_add_32bit(p32, 1);
+ atomic_add_64bit(p64, 98765 ); /* ensure we hit the upper 32 bits */
+ }
+ return 1;
+ /* NOTREACHED */
+
+ }
+
+ /* --- PARENT --- */
+
+ printf("parent\n");
+
+ for (i = 0; i < NNN; i++) {
+ atomic_add_8bit(p8, 1);
+ atomic_add_16bit(p16, 1);
+ atomic_add_32bit(p32, 1);
+ atomic_add_64bit(p64, 98765 ); /* ensure we hit the upper 32 bits */
+ }
+
+ p2 = waitpid(child, &status, 0);
+ assert(p2 == child);
+
+ /* assert that child finished normally */
+ assert(WIFEXITED(status));
+
+ printf("FINAL VALUES: 8 bit %d, 16 bit %d, 32 bit %d, 64 bit %lld\n",
+ (int)(*p8), (int)(*p16), *p32, *p64 );
+
+ if (-74 == (int)(*p8)
+ && 32694 == (int)(*p16)
+ && 6913974 == *p32
+ && (0LL == *p64 || 682858642110 == *p64)) {
+ printf("PASS\n");
+ } else {
+ printf("FAIL -- see source code for expected values\n");
+ }
+
+ printf("parent exits\n");
+
+ return 0;
+}
Added: trunk/memcheck/tests/atomic_incs.stderr.exp
===================================================================
Added: trunk/memcheck/tests/atomic_incs.stdout.exp-32bit
===================================================================
Added: trunk/memcheck/tests/atomic_incs.stdout.exp-64bit
===================================================================
--- trunk/memcheck/tests/atomic_incs.stdout.exp-64bit (rev 0)
+++ trunk/memcheck/tests/atomic_incs.stdout.exp-64bit 2009-07-04 12:44:08 UTC (rev 10410)
@@ -0,0 +1,7 @@
+parent, pre-fork
+child
+parent, pre-fork
+parent
+FINAL VALUES: 8 bit -74, 16 bit 32694, 32 bit 6913974, 64 bit 682858642110
+PASS
+parent exits
Added: trunk/memcheck/tests/atomic_incs.vgtest
===================================================================
--- trunk/memcheck/tests/atomic_incs.vgtest (rev 0)
+++ trunk/memcheck/tests/atomic_incs.vgtest 2009-07-04 12:44:08 UTC (rev 10410)
@@ -0,0 +1,2 @@
+prog: atomic_incs
+vgopts: -q --track-origins=yes
Modified: trunk/none/tests/amd64/Makefile.am
===================================================================
--- trunk/none/tests/amd64/Makefile.am 2009-07-04 12:20:44 UTC (rev 10409)
+++ trunk/none/tests/amd64/Makefile.am 2009-07-04 12:44:08 UTC (rev 10410)
@@ -17,6 +17,7 @@
# to avoid packaging screwups if 'make dist' is run on a machine
# which failed the BUILD_SSE3_TESTS test in configure.in.
EXTRA_DIST = \
+ amd64locked.vgtest amd64locked.stdout.exp amd64locked.stderr.exp \
bug127521-64.vgtest bug127521-64.stdout.exp bug127521-64.stderr.exp \
bug132813-amd64.vgtest bug132813-amd64.stdout.exp \
bug132813-amd64.stderr.exp \
@@ -50,6 +51,7 @@
slahf-amd64.vgtest
check_PROGRAMS = \
+ amd64locked \
bug127521-64 bug132813-amd64 bug132918 \
clc \
$(INSN_TESTS) \
@@ -80,6 +82,7 @@
AM_CCASFLAGS += @FLAG_M64@
# generic C ones
+amd64locked_CFLAGS = $(AM_CFLAGS) -O
bug132918_LDADD = -lm
insn_basic_SOURCES = insn_basic.def
insn_basic_LDADD = -lm
Added: trunk/none/tests/amd64/amd64locked.c
===================================================================
--- trunk/none/tests/amd64/amd64locked.c (rev 0)
+++ trunk/none/tests/amd64/amd64locked.c 2009-07-04 12:44:08 UTC (rev 10410)
@@ -0,0 +1,1062 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#define VERBOSE 0
+
+typedef unsigned int UInt;
+typedef unsigned char UChar;
+typedef unsigned long long int ULong;
+typedef signed long long int Long;
+typedef signed int Int;
+typedef unsigned short UShort;
+typedef unsigned long UWord;
+typedef char HChar;
+
+/////////////////////////////////////////////////////////////////
+// BEGIN crc32 stuff //
+/////////////////////////////////////////////////////////////////
+
+static const UInt crc32Table[256] = {
+
+ /*-- Ugly, innit? --*/
+
+ 0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L,
+ 0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L,
+ 0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L,
+ 0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL,
+ 0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L,
+ 0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L,
+ 0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L,
+ 0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL,
+ 0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L,
+ 0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L,
+ 0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L,
+ 0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL,
+ 0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L,
+ 0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L,
+ 0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L,
+ 0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL,
+ 0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL,
+ 0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L,
+ 0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L,
+ 0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL,
+ 0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL,
+ 0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L,
+ 0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L,
+ 0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL,
+ 0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL,
+ 0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L,
+ 0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L,
+ 0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL,
+ 0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL,
+ 0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L,
+ 0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L,
+ 0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL,
+ 0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L,
+ 0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL,
+ 0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL,
+ 0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L,
+ 0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L,
+ 0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL,
+ 0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL,
+ 0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L,
+ 0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L,
+ 0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL,
+ 0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL,
+ 0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L,
+ 0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L,
+ 0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL,
+ 0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL,
+ 0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L,
+ 0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L,
+ 0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL,
+ 0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L,
+ 0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L,
+ 0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L,
+ 0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL,
+ 0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L,
+ 0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L,
+ 0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L,
+ 0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL,
+ 0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L,
+ 0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L,
+ 0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L,
+ 0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL,
+ 0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L,
+ 0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L
+};
+
+#define UPDATE_CRC(crcVar,cha) \
+{ \
+ crcVar = (crcVar << 8) ^ \
+ crc32Table[(crcVar >> 24) ^ \
+ ((UChar)cha)]; \
+}
+
+static UInt crcBytes ( UChar* bytes, UWord nBytes, UInt crcIn )
+{
+ UInt crc = crcIn;
+ while (nBytes >= 4) {
+ UPDATE_CRC(crc, bytes[0]);
+ UPDATE_CRC(crc, bytes[1]);
+ UPDATE_CRC(crc, bytes[2]);
+ UPDATE_CRC(crc, bytes[3]);
+ bytes += 4;
+ nBytes -= 4;
+ }
+ while (nBytes >= 1) {
+ UPDATE_CRC(crc, bytes[0]);
+ bytes += 1;
+ nBytes -= 1;
+ }
+ return crc;
+}
+
+static UInt crcFinalise ( UInt crc ) {
+ return ~crc;
+}
+
+////////
+
+static UInt theCRC = 0xFFFFFFFF;
+
+static HChar outBuf[1024];
+// take output that's in outBuf, length as specified, and
+// update the running crc.
+static void send ( int nbytes )
+{
+ assert( ((unsigned int)nbytes) < sizeof(outBuf)-1);
+ assert(outBuf[nbytes] == 0);
+ theCRC = crcBytes( (UChar*)&outBuf[0], nbytes, theCRC );
+ if (VERBOSE) printf("SEND %08x %s", theCRC, outBuf);
+}
+
+
+/////////////////////////////////////////////////////////////////
+// END crc32 stuff //
+/////////////////////////////////////////////////////////////////
+
+#if 0
+
+// full version
+#define NVALS 76
+
+static ULong val[NVALS]
+ = { 0x00ULL, 0x01ULL, 0x02ULL, 0x03ULL,
+ 0x3FULL, 0x40ULL, 0x41ULL,
+ 0x7EULL, 0x7FULL, 0x80ULL, 0x81ULL, 0x82ULL,
+ 0xBFULL, 0xC0ULL, 0xC1ULL,
+ 0xFCULL, 0xFDULL, 0xFEULL, 0xFFULL,
+
+ 0xFF00ULL, 0xFF01ULL, 0xFF02ULL, 0xFF03ULL,
+ 0xFF3FULL, 0xFF40ULL, 0xFF41ULL,
+ 0xFF7EULL, 0xFF7FULL, 0xFF80ULL, 0xFF81ULL, 0xFF82ULL,
+ 0xFFBFULL, 0xFFC0ULL, 0xFFC1ULL,
+ 0xFFFCULL, 0xFFFDULL, 0xFFFEULL, 0xFFFFULL,
+
+ 0xFFFFFF00ULL, 0xFFFFFF01ULL, 0xFFFFFF02ULL, 0xFFFFFF03ULL,
+ 0xFFFFFF3FULL, 0xFFFFFF40ULL, 0xFFFFFF41ULL,
+ 0xFFFFFF7EULL, 0xFFFFFF7FULL, 0xFFFFFF80ULL, 0xFFFFFF81ULL, 0xFFFFFF82ULL,
+ 0xFFFFFFBFULL, 0xFFFFFFC0ULL, 0xFFFFFFC1ULL,
+ 0xFFFFFFFCULL, 0xFFFFFFFDULL, 0xFFFFFFFEULL, 0xFFFFFFFFULL,
+
+ 0xFFFFFFFFFFFFFF00ULL, 0xFFFFFFFFFFFFFF01ULL, 0xFFFFFFFFFFFFFF02ULL,
+ 0xFFFFFFFFFFFFFF03ULL,
+ 0xFFFFFFFFFFFFFF3FULL, 0xFFFFFFFFFFFFFF40ULL, 0xFFFFFFFFFFFFFF41ULL,
+ 0xFFFFFFFFFFFFFF7EULL, 0xFFFFFFFFFFFFFF7FULL, 0xFFFFFFFFFFFFFF80ULL,
+ 0xFFFFFFFFFFFFFF81ULL, 0xFFFFFFFFFFFFFF82ULL,
+ 0xFFFFFFFFFFFFFFBFULL, 0xFFFFFFFFFFFFFFC0ULL, 0xFFFFFFFFFFFFFFC1ULL,
+ 0xFFFFFFFFFFFFFFFCULL, 0xFFFFFFFFFFFFFFFDULL, 0xFFFFFFFFFFFFFFFEULL,
+ 0xFFFFFFFFFFFFFFFFULL
+ };
+
+#else
+
+// shortened version, for use as valgrind regtest
+#define NVALS 36
+
+static ULong val[NVALS]
+ = { 0x00ULL, 0x01ULL,
+ 0x3FULL, 0x40ULL,
+ 0x7FULL, 0x80ULL,
+ 0xBFULL, 0xC0ULL,
+ 0xFFULL,
+
+ 0xFF00ULL, 0xFF01ULL,
+ 0xFF3FULL, 0xFF40ULL,
+ 0xFF7FULL, 0xFF80ULL,
+ 0xFFBFULL, 0xFFC0ULL,
+ 0xFFFFULL,
+
+ 0xFFFFFF00ULL, 0xFFFFFF01ULL,
+ 0xFFFFFF3FULL, 0xFFFFFF40ULL,
+ 0xFFFFFF7EULL, 0xFFFFFF7FULL,
+ 0xFFFFFFBFULL, 0xFFFFFFC0ULL,
+ 0xFFFFFFFFULL,
+
+ 0xFFFFFFFFFFFFFF00ULL, 0xFFFFFFFFFFFFFF01ULL,
+ 0xFFFFFFFFFFFFFF3FULL, 0xFFFFFFFFFFFFFF40ULL,
+ 0xFFFFFFFFFFFFFF7FULL, 0xFFFFFFFFFFFFFF80ULL,
+ 0xFFFFFFFFFFFFFFBFULL, 0xFFFFFFFFFFFFFFC0ULL,
+ 0xFFFFFFFFFFFFFFFFULL
+ };
+
+#endif
+
+/////////////////////////////////////
+
+#define CC_C 0x0001
+#define CC_P 0x0004
+#define CC_A 0x0010
+#define CC_Z 0x0040
+#define CC_S 0x0080
+#define CC_O 0x0800
+
+#define CC_MASK (CC_C | CC_P | CC_A | CC_Z | CC_S | CC_O)
+
+#define GEN_do_locked_G_E(_name,_eax) \
+ \
+ __attribute__((noinline)) void do_locked_G_E_##_name ( void ) \
+ { \
+ volatile Long e_val, g_val, e_val_before; \
+ Long o, s, z, a, c, p, v1, v2, flags_in; \
+ Long block[4]; \
+ \
+ for (v1 = 0; v1 < NVALS; v1++) { \
+ for (v2 = 0; v2 < NVALS; v2++) { \
+ \
+ for (o = 0; o < 2; o++) { \
+ for (s = 0; s < 2; s++) { \
+ for (z = 0; z < 2; z++) { \
+ for (a = 0; a < 2; a++) { \
+ for (c = 0; c < 2; c++) { \
+ for (p = 0; p < 2; p++) { \
+ \
+ flags_in = (o ? CC_O : 0) \
+ | (s ? CC_S : 0) \
+ | (z ? CC_Z : 0) \
+ | (a ? CC_A : 0) \
+ | (c ? CC_C : 0) \
+ | (p ? CC_P : 0); \
+ \
+ g_val = val[v1]; \
+ e_val = val[v2]; \
+ e_val_before = e_val; \
+ \
+ block[0] = flags_in; \
+ block[1] = g_val; \
+ block[2] = (long)&e_val; \
+ block[3] = 0; \
+ __asm__ __volatile__( \
+ "movq 0(%0), %%rax\n\t" \
+ "pushq %%rax\n\t" \
+ "popfq\n\t" \
+ "movq 8(%0), %%rax\n\t" \
+ "movq 16(%0), %%rbx\n\t" \
+ "lock; " #_name " %%" #_eax ",(%%rbx)\n\t" \
+ "pushfq\n\t" \
+ "popq %%rax\n\t" \
+ "movq %%rax, 24(%0)\n\t" \
+ : : "r"(&block[0]) : "rax","rbx","cc","memory" \
+ ); \
+ \
+ send( \
+ sprintf(outBuf, \
+ "%s G=%016llx E=%016llx CCIN=%08llx -> E=%016llx CCOUT=%08llx\n", \
+ #_name, g_val, e_val_before, flags_in, \
+ e_val, block[3] & CC_MASK)); \
+ \
+ }}}}}} \
+ \
+ }} \
+ }
+
+GEN_do_locked_G_E(addb,al)
+GEN_do_locked_G_E(addw,ax)
+GEN_do_locked_G_E(addl,eax)
+GEN_do_locked_G_E(addq,rax)
+
+GEN_do_locked_G_E(orb, al)
+GEN_do_locked_G_E(orw, ax)
+GEN_do_locked_G_E(orl, eax)
+GEN_do_locked_G_E(orq, rax)
+
+GEN_do_locked_G_E(adcb,al)
+GEN_do_locked_G_E(adcw,ax)
+GEN_do_locked_G_E(adcl,eax)
+GEN_do_locked_G_E(adcq,rax)
+
+GEN_do_locked_G_E(sbbb,al)
+GEN_do_locked_G_E(sbbw,ax)
+GEN_do_locked_G_E(sbbl,eax)
+GEN_do_locked_G_E(sbbq,rax)
+
+GEN_do_locked_G_E(andb,al)
+GEN_do_locked_G_E(andw,ax)
+GEN_do_locked_G_E(andl,eax)
+GEN_do_locked_G_E(andq,rax)
+
+GEN_do_locked_G_E(subb,al)
+GEN_do_locked_G_E(subw,ax)
+GEN_do_locked_G_E(subl,eax)
+GEN_do_locked_G_E(subq,rax)
+
+GEN_do_locked_G_E(xorb,al)
+GEN_do_locked_G_E(xorw,ax)
+GEN_do_locked_G_E(xorl,eax)
+GEN_do_locked_G_E(xorq,rax)
+
+
+
+
+#define GEN_do_locked_imm_E(_name,_eax,_imm) \
+ \
+ __attribute__((noinline)) void do_locked_imm_E_##_name##_##_imm ( void ) \
+ { \
+ volatile Long e_val, e_val_before; \
+ Long o, s, z, a, c, p, v2, flags_in; \
+ Long block[3]; \
+ \
+ for (v2 = 0; v2 < NVALS; v2++) { \
+ \
+ for (o = 0; o < 2; o++) { \
+ for (s = 0; s < 2; s++) { \
+ for (z = 0; z < 2; z++) { \
+ for (a = 0; a < 2; a++) { \
+ for (c = 0; c < 2; c++) { \
+ for (p = 0; p < 2; p++) { \
+ \
+ flags_in = (o ? CC_O : 0) \
+ | (s ? CC_S : 0) \
+ | (z ? CC_Z : 0) \
+ | (a ? CC_A : 0) \
+ | (c ? CC_C : 0) \
+ | (p ? CC_P : 0); \
+ \
+ e_val = val[v2]; \
+ e_val_before = e_val; \
+ \
+ block[0] = flags_in; \
+ block[1] = (long)&e_val; \
+ block[2] = 0; \
+ __asm__ __volatile__( \
+ "movq 0(%0), %%rax\n\t" \
+ "pushq %%rax\n\t" \
+ "popfq\n\t" \
+ "movq 8(%0), %%rbx\n\t" \
+ "lock; " #_name " $" #_imm ",(%%rbx)\n\t" \
+ "pushfq\n\t" \
+ "popq %%rax\n\t" \
+ "movq %%rax, 16(%0)\n\t" \
+ : : "r"(&block[0]) : "rax","rbx","cc","memory" \
+ ); \
+ \
+ send( \
+ sprintf(outBuf, \
+ "%s I=%s E=%016llx CCIN=%08llx -> E=%016llx CCOUT=%08llx\n", \
+ #_name, #_imm, e_val_before, flags_in, \
+ e_val, block[2] & CC_MASK)); \
+ \
+ }}}}}} \
+ \
+ } \
+ }
+
+GEN_do_locked_imm_E(addb,al,0x7F)
+GEN_do_locked_imm_E(addb,al,0xF1)
+GEN_do_locked_imm_E(addw,ax,0x7E)
+GEN_do_locked_imm_E(addw,ax,0x9325)
+GEN_do_locked_imm_E(addl,eax,0x7D)
+GEN_do_locked_imm_E(addl,eax,0x31415927)
+GEN_do_locked_imm_E(addq,rax,0x7D)
+GEN_do_locked_imm_E(addq,rax,0x31415927)
+
+GEN_do_locked_imm_E(orb,al,0x7F)
+GEN_do_locked_imm_E(orb,al,0xF1)
+GEN_do_locked_imm_E(orw,ax,0x7E)
+GEN_do_locked_imm_E(orw,ax,0x9325)
+GEN_do_locked_imm_E(orl,eax,0x7D)
+GEN_do_locked_imm_E(orl,eax,0x31415927)
+GEN_do_locked_imm_E(orq,rax,0x7D)
+GEN_do_locked_imm_E(orq,rax,0x31415927)
+
+GEN_do_locked_imm_E(adcb,al,0x7F)
+GEN_do_locked_imm_E(adcb,al,0xF1)
+GEN_do_locked_imm_E(adcw,ax,0x7E)
+GEN_do_locked_imm_E(adcw,ax,0x9325)
+GEN_do_locked_imm_E(adcl,eax,0x7D)
+GEN_do_locked_imm_E(adcl,eax,0x31415927)
+GEN_do_locked_imm_E(adcq,rax,0x7D)
+GEN_do_locked_imm_E(adcq,rax,0x31415927)
+
+GEN_do_locked_imm_E(sbbb,al,0x7F)
+GEN_do_locked_imm_E(sbbb,al,0xF1)
+GEN_do_locked_imm_E(sbbw,ax,0x7E)
+GEN_do_locked_imm_E(sbbw,ax,0x9325)
+GEN_do_locked_imm_E(sbbl,eax,0x7D)
+GEN_do_locked_imm_E(sbbl,eax,0x31415927)
+GEN_do_locked_imm_E(sbbq,rax,0x7D)
+GEN_do_locked_imm_E(sbbq,rax,0x31415927)
+
+GEN_do_locked_imm_E(andb,al,0x7F)
+GEN_do_locked_imm_E(andb,al,0xF1)
+GEN_do_locked_imm_E(andw,ax,0x7E)
+GEN_do_locked_imm_E(andw,ax,0x9325)
+GEN_do_locked_imm_E(andl,eax,0x7D)
+GEN_do_locked_imm_E(andl,eax,0x31415927)
+GEN_do_locked_imm_E(andq,rax,0x7D)
+GEN_do_locked_imm_E(andq,rax,0x31415927)
+
+GEN_do_locked_imm_E(subb,al,0x7F)
+GEN_do_locked_imm_E(subb,al,0xF1)
+GEN_do_locked_imm_E(subw,ax,0x7E)
+GEN_do_locked_imm_E(subw,ax,0x9325)
+GEN_do_locked_imm_E(subl,eax,0x7D)
+GEN_do_locked_imm_E(subl,eax,0x31415927)
+GEN_do_locked_imm_E(subq,rax,0x7D)
+GEN_do_locked_imm_E(subq,rax,0x31415927)
+
+GEN_do_locked_imm_E(xorb,al,0x7F)
+GEN_do_locked_imm_E(xorb,al,0xF1)
+GEN_do_locked_imm_E(xorw,ax,0x7E)
+GEN_do_locked_imm_E(xorw,ax,0x9325)
+GEN_do_locked_imm_E(xorl,eax,0x7D)
+GEN_do_locked_imm_E(xorl,eax,0x31415927)
+GEN_do_locked_imm_E(xorq,rax,0x7D)
+GEN_do_locked_imm_E(xorq,rax,0x31415927)
+
+#define GEN_do_locked_unary_E(_name,_eax) \
+ \
+ __attribute__((noinline)) void do_locked_unary_E_##_name ( void ) \
+ { \
+ volatile Long e_val, e_val_before; \
+ Long o, s, z, a, c, p, v2, flags_in; \
+ Long block[3]; \
+ \
+ for (v2 = 0; v2 < NVALS; v2++) { \
+ \
+ for (o = 0; o < 2; o++) { \
+ for (s = 0; s < 2; s++) { \
+ for (z = 0; z < 2; z++) { \
+ for (a = 0; a < 2; a++) { \
+ for (c = 0; c < 2; c++) { \
+ for (p = 0; p < 2; p++) { \
+ \
+ flags_in = (o ? CC_O : 0) \
+ | (s ? CC_S : 0) \
+ | (z ? CC_Z : 0) \
+ | (a ? CC_A : 0) \
+ | (c ? CC_C : 0) \
+ | (p ? CC_P : 0); \
+ \
+ e_val = val[v2]; \
+ e_val_before = e_val; \
+ \
+ block[0] = flags_in; \
+ block[1] = (long)&e_val; \
+ block[2] = 0; \
+ __asm__ __volatile__( \
+ "movq 0(%0), %%rax\n\t" \
+ "pushq %%rax\n\t" \
+ "popfq\n\t" \
+ "movq 8(%0), %%rbx\n\t" \
+ "lock; " #_name " (%%rbx)\n\t" \
+ "pushfq\n\t" \
+ "popq %%rax\n\t" \
+ "movq %%rax, 16(%0)\n\t" \
+ : : "r"(&block[0]) : "rax","rbx","cc","memory" \
+ ); \
+ \
+ send( \
+ sprintf(outBuf, \
+ "%s E=%016llx CCIN=%08llx -> E=%016llx CCOUT=%08llx\n", \
+ #_name, e_val_before, flags_in, \
+ e_val, block[2] & CC_MASK)); \
+ \
+ }}}}}} \
+ \
+ } \
+ }
+
+GEN_do_locked_unary_E(decb,al)
+GEN_do_locked_unary_E(decw,ax)
+GEN_do_locked_unary_E(decl,eax)
+GEN_do_locked_unary_E(decq,rax)
+
+GEN_do_locked_unary_E(incb,al)
+GEN_do_locked_unary_E(incw,ax)
+GEN_do_locked_unary_E(incl,eax)
+GEN_do_locked_unary_E(incq,rax)
+
+GEN_do_locked_unary_E(negb,al)
+GEN_do_locked_unary_E(negw,ax)
+GEN_do_locked_unary_E(negl,eax)
+GEN_do_locked_unary_E(negq,rax)
+
+GEN_do_locked_unary_E(notb,al)
+GEN_do_locked_unary_E(notw,ax)
+GEN_do_locked_unary_E(notl,eax)
+GEN_do_locked_unary_E(notq,rax)
+
+
+/////////////////////////////////////////////////////////////////
+
+ULong btsq_mem ( UChar* base, int bitno )
+{
+ ULong res;
+ __asm__
+ __volatile__("lock; btsq\t%2, %0\n\t"
+ "setc %%dl\n\t"
+ "movzbq %%dl,%1\n"
+ : "=m" (*base), "=r" (res)
+ : "r" ((ULong)bitno) : "rdx","cc","memory" );
+ /* Pretty meaningless to dereference base here, but that's what you
+ have to do to get a btsl insn which refers to memory starting at
+ base. */
+ return res;
+}
+ULong btsl_mem ( UChar* base, int bitno )
+{
+ ULong res;
+ __asm__
+ __volatile__("lock; btsl\t%2, %0\n\t"
+ "setc %%dl\n\t"
+ "movzbq %%dl,%1\n"
+ : "=m" (*base), "=r" (res)
+ : "r" ((UInt)bitno));
+ return res;
+}
+ULong btsw_mem ( UChar* base, int bitno )
+{
+ ULong res;
+ __asm__
+ __volatile__("lock; btsw\t%w2, %0\n\t"
+ "setc %%dl\n\t"
+ "movzbq %%dl,%1\n"
+ : "=m" (*base), "=r" (res)
+ : "r" ((ULong)bitno));
+ return res;
+}
+
+ULong btrq_mem ( UChar* base, int bitno )
+{
+ ULong res;
+ __asm__
+ __volatile__("lock; btrq\t%2, %0\n\t"
+ "setc %%dl\n\t"
+ "movzbq %%dl,%1\n"
+ : "=m" (*base), "=r" (res)
+ : "r" ((ULong)bitno));
+ return res;
+}
+ULong btrl_mem ( UChar* base, int bitno )
+{
+ ULong res;
+ __asm__
+ __volatile__("lock; btrl\t%2, %0\n\t"
+ "setc %%dl\n\t"
+ "movzbq %%dl,%1\n"
+ : "=m" (*base), "=r" (res)
+ : "r" ((UInt)bitno));
+ return res;
+}
+ULong btrw_mem ( UChar* base, int bitno )
+{
+ ULong res;
+ __asm__
+ __volatile__("lock; btrw\t%w2, %0\n\t"
+ "setc %%dl\n\t"
+ "movzbq %%dl,%1\n"
+ : "=m" (*base), "=r" (res)
+ : "r" ((ULong)bitno));
+ return res;
+}
+
+ULong btcq_mem ( UChar* base, int bitno )
+{
+ ULong res;
+ __asm__
+ __volatile__("lock; btcq\t%2, %0\n\t"
+ "setc %%dl\n\t"
+ "movzbq %%dl,%1\n"
+ : "=m" (*base), "=r" (res)
+ : "r" ((ULong)bitno));
+ return res;
+}
+ULong btcl_mem ( UChar* base, int bitno )
+{
+ ULong res;
+ __asm__
+ __volatile__("lock; btcl\t%2, %0\n\t"
+ "setc %%dl\n\t"
+ "movzbq %%dl,%1\n"
+ : "=m" (*base), "=r" (res)
+ : "r" ((UInt)bitno));
+ return res;
+}
+ULong btcw_mem ( UChar* base, int bitno )
+{
+ ULong res;
+ __asm__
+ __volatile__("lock; btcw\t%w2, %0\n\t"
+ "setc %%dl\n\t"
+ "movzbq %%dl,%1\n"
+ : "=m" (*base), "=r" (res)
+ : "r" ((ULong)bitno));
+ return res;
+}
+
+ULong btq_mem ( UChar* base, int bitno )
+{
+ ULong res;
+ __asm__
+ __volatile__("btq\t%2, %0\n\t"
+ "setc %%dl\n\t"
+ "movzbq %%dl,%1\n"
+ : "=m" (*base), "=r" (res)
+ : "r" ((ULong)bitno)
+ : "cc", "memory");
+ return res;
+}
+ULong btl_mem ( UChar* base, int bitno )
+{
+ ULong res;
+ __asm__
+ __volatile__("btl\t%2, %0\n\t"
+ "setc %%dl\n\t"
+ "movzbq %%dl,%1\n"
+ : "=m" (*base), "=r" (res)
+ : "r" ((UInt)bitno)
+ : "cc", "memory");
+ return res;
+}
+ULong btw_mem ( UChar* base, int bitno )
+{
+ ULong res;
+ __asm__
+ __volatile__("btw\t%w2, %0\n\t"
+ "setc %%dl\n\t"
+ "movzbq %%dl,%1\n"
+ : "=m" (*base), "=r" (res)
+ : "r" ((ULong)bitno));
+ return res;
+}
+
+ULong rol1 ( ULong x )
+{
+ return (x << 1) | (x >> 63);
+}
+
+void do_bt_G_E_tests ( void )
+{
+ ULong n, bitoff, op;
+ ULong c;
+ UChar* block;
+ ULong carrydep, res;;
+
+ /*------------------------ MEM-Q -----------------------*/
+
+ carrydep = 0;
+ block = calloc(200,1);
+ block += 100;
+ /* Valid bit offsets are -800 .. 799 inclusive. */
+
+ for (n = 0; n < 10000; n++) {
+ bitoff = (random() % 1600) - 800;
+ op = random() % 4;
+ c = 2;
+ switch (op) {
+ case 0: c = btsq_mem(block, bitoff); break;
+ case 1: c = btrq_mem(block, bitoff); break;
+ case 2: c = btcq_mem(block, bitoff); break;
+ case 3: c = btq_mem(block, bitoff); break;
+ }
+ c &= 255;
+ assert(c == 0 || c == 1);
+ carrydep = c ? (rol1(carrydep) ^ (Long)bitoff) : carrydep;
+ }
+
+ /* Compute final result */
+ block -= 100;
+ res = 0;
+ for (n = 0; n < 200; n++) {
+ UChar ch = block[n];
+ /* printf("%d ", (int)block[n]); */
+ res = rol1(res) ^ (ULong)ch;
+ }
+
+ send( sprintf(outBuf,
+ "bt{s,r,c}q: final res 0x%llx, carrydep 0x%llx\n",
+ res, carrydep));
+ free(block);
+
+ /*------------------------ MEM-L -----------------------*/
+
+ carrydep = 0;
+ block = calloc(200,1);
+ block += 100;
+ /* Valid bit offsets are -800 .. 799 inclusive. */
+
+ for (n = 0; n < 10000; n++) {
+ bitoff = (random() % 1600) - 800;
+ op = random() % 4;
+ c = 2;
+ switch (op) {
+ case 0: c = btsl_mem(block, bitoff); break;
+ case 1: c = btrl_mem(block, bitoff); break;
+ case 2: c = btcl_mem(block, bitoff); break;
+ case 3: c = btl_mem(block, bitoff); break;
+ }
+ c &= 255;
+ assert(c == 0 || c == 1);
+ carrydep = c ? (rol1(carrydep) ^ (Long)(Int)bitoff) : carrydep;
+ }
+
+ /* Compute final result */
+ block -= 100;
+ res = 0;
+ for (n = 0; n < 200; n++) {
+ UChar ch = block[n];
+ /* printf("%d ", (int)block[n]); */
+ res = rol1(res) ^ (ULong)ch;
+ }
+
+ send( sprintf(outBuf,
+ "bt{s,r,c}l: final res 0x%llx, carrydep 0x%llx\n",
+ res, carrydep));
+ free(block);
+
+ /*------------------------ MEM-W -----------------------*/
+
+ carrydep = 0;
+ block = calloc(200,1);
+ block += 100;
+ /* Valid bit offsets are -800 .. 799 inclusive. */
+
+ for (n = 0; n < 10000; n++) {
+ bitoff = (random() % 1600) - 800;
+ op = random() % 4;
+ c = 2;
+ switch (op) {
+ case 0: c = btsw_mem(block, bitoff); break;
+ case 1: c = btrw_mem(block, bitoff); break;
+ case 2: c = btcw_mem(block, bitoff); break;
+ case 3: c = btw_mem(block, bitoff); break;
+ }
+ c &= 255;
+ assert(c == 0 || c == 1);
+ carrydep = c ? (rol1(carrydep) ^ (Long)(Int)bitoff) : carrydep;
+ }
+
+ /* Compute final result */
+ block -= 100;
+ res = 0;
+ for (n = 0; n < 200; n++) {
+ UChar ch = block[n];
+ /* printf("%d ", (int)block[n]); */
+ res = rol1(res) ^ (ULong)ch;
+ }
+
+ send(sprintf(outBuf,
+ "bt{s,r,c}w: final res 0x%llx, carrydep 0x%llx\n",
+ res, carrydep));
+ free(block);
+}
+
+
+/////////////////////////////////////////////////////////////////
+
+/* Given a word, do bt/bts/btr/btc on bits 0, 1, 2 and 3 of it, and
+ also reconstruct the original bits 0, 1, 2, 3 by looking at the
+ carry flag. Returned result has mashed bits 0-3 at the bottom and
+ the reconstructed original bits 0-3 as 4-7. */
+
+ULong mash_mem_Q ( ULong* origp )
+{
+ ULong reconstructed, mashed;
+ __asm__ __volatile__ (
+ "movq %2, %%rdx\n\t"
+ ""
+ "movq $0, %%rax\n\t"
+ "\n\t"
+ "btq $0, (%%rdx)\n\t"
+ "setb %%cl\n\t"
+ "movzbq %%cl, %%rcx\n\t"
+ "orq %%rcx, %%rax\n\t"
+ "\n\t"
+ "lock; btsq $1, (%%rdx)\n\t"
+ "setb %%cl\n\t"
+ "movzbq %%cl, %%rcx\n\t"
+ "shlq $1, %%rcx\n\t"
+ "orq %%rcx, %%rax\n\t"
+ "\n\t"
+ "lock; btrq $2, (%%rdx)\n\t"
+ "setb %%cl\n\t"
+ "movzbq %%cl, %%rcx\n\t"
+ "shlq $2, %%rcx\n\t"
+ "orq %%rcx, %%rax\n\t"
+ "\n\t"
+ "lock; btcq $3, (%%rdx)\n\t"
+ "setb %%cl\n\t"
+ "movzbq %%cl, %%rcx\n\t"
+ "shlq $3, %%rcx\n\t"
+ "orq %%rcx, %%rax\n\t"
+ "\n\t"
+ "movq %%rax, %0\n\t"
+ "movq (%%rdx), %1"
+ : "=r" (reconstructed), "=r" (mashed)
+ : "r" (origp)
+ : "rax", "rcx", "rdx", "cc");
+ return (mashed & 0xF) | ((reconstructed & 0xF) << 4);
+}
+
+ULong mash_mem_L ( UInt* origp )
+{
+ ULong reconstructed; UInt mashed;
+ __asm__ __volatile__ (
+ "movq %2, %%rdx\n\t"
+ ""
+ "movq $0, %%rax\n\t"
+ "\n\t"
+ "btl $0, (%%rdx)\n\t"
+ "setb %%cl\n\t"
+ "movzbq %%cl, %%rcx\n\t"
+ "orq %%rcx, %%rax\n\t"
+ "\n\t"
+ "lock; btsl $1, (%%rdx)\n\t"
+ "setb %%cl\n\t"
+ "movzbq %%cl, %%rcx\n\t"
+ "shlq $1, %%rcx\n\t"
+ "orq %%rcx, %%rax\n\t"
+ "\n\t"
+ "lock; btrl $2, (%%rdx)\n\t"
+ "setb %%cl\n\t"
+ "movzbq %%cl, %%rcx\n\t"
+ "shlq $2, %%rcx\n\t"
+ "orq %%rcx, %%rax\n\t"
+ "\n\t"
+ "lock; btcl $3, (%%rdx)\n\t"
+ "setb %%cl\n\t"
+ "movzbq %%cl, %%rcx\n\t"
+ "shlq $3, %%rcx\n\t"
+ "orq %%rcx, %%rax\n\t"
+ "\n\t"
+ "movq %%rax, %0\n\t"
+ "movl (%%rdx), %1"
+ : "=r" (reconstructed), "=r" (mashed)
+ : "r" (origp)
+ : "rax", "rcx", "rdx", "cc");
+ return (mashed & 0xF) | ((reconstructed & 0xF) << 4);
+}
+
+ULong mash_mem_W ( UShort* origp )
+{
+ ULong reconstructed, mashed;
+ __asm__ __volatile__ (
+ "movq %2, %%rdx\n\t"
+ ""
+ "movq $0, %%rax\n\t"
+ "\n\t"
+ "btw $0, (%%rdx)\n\t"
+ "setb %%cl\n\t"
+ "movzbq %%cl, %%rcx\n\t"
+ "orq %%rcx, %%rax\n\t"
+ "\n\t"
+ "lock; btsw $1, (%%rdx)\n\t"
+ "setb %%cl\n\t"
+ "movzbq %%cl, %%rcx\n\t"
+ "shlq $1, %%rcx\n\t"
+ "orq %%rcx, %%rax\n\t"
+ "\n\t"
+ "lock; btrw $2, (%%rdx)\n\t"
+ "setb %%cl\n\t"
+ "movzbq %%cl, %%rcx\n\t"
+ "shlq $2, %%rcx\n\t"
+ "orq %%rcx, %%rax\n\t"
+ "\n\t"
+ "lock; btcw $3, (%%rdx)\n\t"
+ "setb %%cl\n\t"
+ "movzbq %%cl, %%rcx\n\t"
+ "shlq $3, %%rcx\n\t"
+ "orq %%rcx, %%rax\n\t"
+ "\n\t"
+ "movq %%rax, %0\n\t"
+ "movzwq (%%rdx), %1"
+ : "=r" (reconstructed), "=r" (mashed)
+ : "r" (origp)
+ : "rax", "rcx", "rdx", "cc");
+ return (mashed & 0xF) | ((reconstructed & 0xF) << 4);
+}
+
+
+void do_bt_imm_E_tests( void )
+{
+ ULong i;
+ ULong* iiq = malloc(sizeof(ULong));
+ UInt* iil = malloc(sizeof(UInt));
+ UShort* iiw = malloc(sizeof(UShort));
+ for (i = 0; i < 0x10; i++) {
+ *iiq = i;
+ *iil = i;
+ *iiw = i;
+ send(sprintf(outBuf,"0x%llx -> 0x%02llx 0x%02llx 0x%02llx\n", i,
+ mash_mem_Q(iiq), mash_mem_L(iil), mash_mem_W(iiw)));
+ }
+ free(iiq);
+ free(iil);
+ free(iiw);
+}
+
+
+/////////////////////////////////////////////////////////////////
+
+int main ( void )
+{
+ do_locked_G_E_addb();
+ do_locked_G_E_addw();
+ do_locked_G_E_addl();
+ do_locked_G_E_addq();
+
+ do_locked_G_E_orb();
+ do_locked_G_E_orw();
+ do_locked_G_E_orl();
+ do_locked_G_E_orq();
+
+ do_locked_G_E_adcb();
+ do_locked_G_E_adcw();
+ do_locked_G_E_adcl();
+ do_locked_G_E_adcq();
+
+ do_locked_G_E_sbbb();
+ do_locked_G_E_sbbw();
+ do_locked_G_E_sbbl();
+ do_locked_G_E_sbbq();
+
+ do_locked_G_E_andb();
+ do_locked_G_E_andw();
+ do_locked_G_E_andl();
+ do_locked_G_E_andq();
+
+ do_locked_G_E_subb();
+ do_locked_G_E_subw();
+ do_locked_G_E_subl();
+ do_locked_G_E_subq();
+
+ do_locked_G_E_xorb();
+ do_locked_G_E_xorw();
+ do_locked_G_E_xorl();
+ do_locked_G_E_xorq();
+ // 4 * 7
+
+ do_locked_imm_E_addb_0x7F();
+ do_locked_imm_E_addb_0xF1();
+ do_locked_imm_E_addw_0x7E();
+ do_locked_imm_E_addw_0x9325();
+ do_locked_imm_E_addl_0x7D();
+ do_locked_imm_E_addl_0x31415927();
+ do_locked_imm_E_addq_0x7D();
+ do_locked_imm_E_addq_0x31415927();
+
+ do_locked_imm_E_orb_0x7F();
+ do_locked_imm_E_orb_0xF1();
+ do_locked_imm_E_orw_0x7E();
+ do_locked_imm_E_orw_0x9325();
+ do_locked_imm_E_orl_0x7D();
+ do_locked_imm_E_orl_0x31415927();
+ do_locked_imm_E_orq_0x7D();
+ do_locked_imm_E_orq_0x31415927();
+
+ do_locked_imm_E_adcb_0x7F();
+ do_locked_imm_E_adcb_0xF1();
+ do_locked_imm_E_adcw_0x7E();
+ do_locked_imm_E_adcw_0x9325();
+ do_locked_imm_E_adcl_0x7D();
+ do_locked_imm_E_adcl_0x31415927();
+ do_locked_imm_E_adcq_0x7D();
+ do_locked_imm_E_adcq_0x31415927();
+
+ do_locked_imm_E_sbbb_0x7F();
+ do_locked_imm_E_sbbb_0xF1();
+ do_locked_imm_E_sbbw_0x7E();
+ do_locked_imm_E_sbbw_0x9325();
+ do_locked_imm_E_sbbl_0x7D();
+ do_locked_imm_E_sbbl_0x31415927();
+ do_locked_imm_E_sbbq_0x7D();
+ do_locked_imm_E_sbbq_0x31415927();
+
+ do_locked_imm_E_andb_0x7F();
+ do_locked_imm_E_andb_0xF1();
+ do_locked_imm_E_andw_0x7E();
+ do_locked_imm_E_andw_0x9325();
+ do_locked_imm_E_andl_0x7D();
+ do_locked_imm_E_andl_0x31415927();
+ do_locked_imm_E_andq_0x7D();
+ do_locked_imm_E_andq_0x31415927();
+
+ do_locked_imm_E_subb_0x7F();
+ do_locked_imm_E_subb_0xF1();
+ do_locked_imm_E_subw_0x7E();
+ do_locked_imm_E_subw_0x9325();
+ do_locked_imm_E_subl_0x7D();
+ do_locked_imm_E_subl_0x31415927();
+ do_locked_imm_E_subq_0x7D();
+ do_locked_imm_E_subq_0x31415927();
+
+ do_locked_imm_E_xorb_0x7F();
+ do_locked_imm_E_xorb_0xF1();
+ do_locked_imm_E_xorw_0x7E();
+ do_locked_imm_E_xorw_0x9325();
+ do_locked_imm_E_xorl_0x7D();
+ do_locked_imm_E_xorl_0x31415927();
+ do_locked_imm_E_xorq_0x7D();
+ do_locked_imm_E_xorq_0x31415927();
+ // 4 * 7 + 8 * 7 == 84
+
+ do_locked_unary_E_decb();
+ do_locked_unary_E_decw();
+ do_locked_unary_E_decl();
+ do_locked_unary_E_decq();
+
+ do_locked_unary_E_incb();
+ do_locked_unary_E_incw();
+ do_locked_unary_E_incl();
+ do_locked_unary_E_incq();
+
+ do_locked_unary_E_negb();
+ do_locked_unary_E_negw();
+ do_locked_unary_E_negl();
+ do_locked_unary_E_negq();
+
+ do_locked_unary_E_notb();
+ do_locked_unary_E_notw();
+ do_locked_unary_E_notl();
+ do_locked_unary_E_notq();
+ // 100
+
+ do_bt_G_E_tests();
+ // 109
+ do_bt_imm_E_tests();
+ // 118
+
+ // So there should be 118 lock-prefixed instructions in the
+ // disassembly of this compilation unit.
+ // confirm with
+ // objdump -d ./amd64locked | grep lock | grep -v do_lock | grep -v elf64 | wc
+
+
+ { UInt crcExpd = 0x1F677629;
+ theCRC = crcFinalise( theCRC );
+ if (theCRC == crcExpd) {
+ printf("amd64locked: PASS: CRCs actual 0x%08X expected 0x%08X\n",
+ theCRC, crcExpd);
+ } else {
+ printf("amd64locked: FAIL: CRCs actual 0x%08X expected 0x%08X\n",
+ theCRC, crcExpd);
+ printf("amd64locked: set #define VERBOSE 1 to diagnose\n");
+ }
+ }
+
+ return 0;
+}
Added: trunk/none/tests/amd64/amd64locked.stderr.exp
===================================================================
--- trunk/none/tests/amd64/amd64locked.stderr.exp (rev 0)
+++ trunk/none/tests/amd64/amd64locked.stderr.exp 2009-07-04 12:44:08 UTC (rev 10410)
@@ -0,0 +1,2 @@
+
+
Added: trunk/none/tests/amd64/amd64locked.stdout.exp
===================================================================
--- trunk/none/tests/amd64/amd64locked.stdout.exp (rev 0)
+++ trunk/none/tests/amd64/amd64locked.stdout.exp 2009-07-04 12:44:08 UTC (rev 10410)
@@ -0,0 +1 @@
+amd64locked: PASS: CRCs actual 0x1F677629 expected 0x1F677629
Added: trunk/none/tests/amd64/amd64locked.vgtest
===================================================================
--- trunk/none/tests/amd64/amd64locked.vgtest (rev 0)
+++ trunk/none/tests/amd64/amd64locked.vgtest 2009-07-04 12:44:08 UTC (rev 10410)
@@ -0,0 +1 @@
+prog: amd64locked
Modified: trunk/none/tests/x86/Makefile.am
===================================================================
--- trunk/none/tests/x86/Makefile.am 2009-07-04 12:20:44 UTC (rev 10409)
+++ trunk/none/tests/x86/Makefile.am 2009-07-04 12:44:08 UTC (rev 10410)
@@ -52,6 +52,7 @@
smc1.stderr.exp smc1.stdout.exp smc1.vgtest \
ssse3_misaligned.stderr.exp ssse3_misaligned.stdout.exp \
ssse3_misaligned.vgtest ssse3_misaligned.c \
+ x86locked.vgtest x86locked.stdout.exp x86locked.stderr.exp \
yield.stderr.exp yield.stdout.exp yield.disabled
check_PROGRAMS = \
@@ -82,6 +83,7 @@
pushpopseg \
sbbmisc \
smc1 \
+ x86locked \
yield
if BUILD_SSSE3_TESTS
check_PROGRAMS += ssse3_misaligned
@@ -123,6 +125,7 @@
insn_sse3_LDADD = -lm
insn_ssse3_SOURCES = insn_ssse3.def
insn_ssse3_LDADD = -lm
+x86locked_CFLAGS = $(AM_CFLAGS) -O
yield_LDADD = -lpthread
.def.c: $(srcdir)/gen_insn_test.pl
Added: trunk/none/tests/x86/x86locked.c
===================================================================
--- trunk/none/tests/x86/x86locked.c (rev 0)
+++ trunk/none/tests/x86/x86locked.c 2009-07-04 12:44:08 UTC (rev 10410)
@@ -0,0 +1,864 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#define VERBOSE 0
+
+typedef unsigned int UInt;
+typedef unsigned char UChar;
+typedef unsigned long long int ULong;
+typedef signed long long int Long;
+typedef signed int Int;
+typedef unsigned short UShort;
+typedef unsigned long UWord;
+typedef char HChar;
+
+/////////////////////////////////////////////////////////////////
+// BEGIN crc32 stuff //
+/////////////////////////////////////////////////////////////////
+
+static const UInt crc32Table[256] = {
+
+ /*-- Ugly, innit? --*/
+
+ 0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L,
+ 0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L,
+ 0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L,
+ 0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL,
+ 0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L,
+ 0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L,
+ 0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L,
+ 0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL,
+ 0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L,
+ 0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L,
+ 0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L,
+ 0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL,
+ 0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L,
+ 0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L,
+ 0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L,
+ 0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL,
+ 0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL,
+ 0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L,
+ 0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L,
+ 0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL,
+ 0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL,
+ 0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L,
+ 0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L,
+ 0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL,
+ 0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL,
+ 0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L,
+ 0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L,
+ 0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL,
+ 0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL,
+ 0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L,
+ 0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L,
+ 0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL,
+ 0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L,
+ 0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL,
+ 0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL,
+ 0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L,
+ 0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L,
+ 0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL,
+ 0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL,
+ 0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L,
+ 0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L,
+ 0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL,
+ 0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL,
+ 0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L,
+ 0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L,
+ 0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL,
+ 0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL,
+ 0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L,
+ 0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L,
+ 0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL,
+ 0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L,
+ 0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L,
+ 0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L,
+ 0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL,
+ 0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L,
+ 0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L,
+ 0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L,
+ 0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL,
+ 0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L,
+ 0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L,
+ 0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L,
+ 0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL,
+ 0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L,
+ 0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L
+};
+
+#define UPDATE_CRC(crcVar,cha) \
+{ \
+ crcVar = (crcVar << 8) ^ \
+ crc32Table[(crcVar >> 24) ^ \
+ ((UChar)cha)]; \
+}
+
+static UInt crcBytes ( UChar* bytes, UWord nBytes, UInt crcIn )
+{
+ UInt crc = crcIn;
+ while (nBytes >= 4) {
+ UPDATE_CRC(crc, bytes[0]);
+ UPDATE_CRC(crc, bytes[1]);
+ UPDATE_CRC(crc, bytes[2]);
+ UPDATE_CRC(crc, bytes[3]);
+ bytes += 4;
+ nBytes -= 4;
+ }
+ while (nBytes >= 1) {
+ UPDATE_CRC(crc, bytes[0]);
+ bytes += 1;
+ nBytes -= 1;
+ }
+ return crc;
+}
+
+static UInt crcFinalise ( UInt crc ) {
+ return ~crc;
+}
+
+////////
+
+static UInt theCRC = 0xFFFFFFFF;
+
+static HChar outBuf[1024];
+// take output that's in outBuf, length as specified, and
+// update the running crc.
+static void send ( int nbytes )
+{
+ assert( ((unsigned int)nbytes) < sizeof(outBuf)-1);
+ assert(outBuf[nbytes] == 0);
+ theCRC = crcBytes( (UChar*)&outBuf[0], nbytes, theCRC );
+ if (VERBOSE) printf("SEND %08x %s", theCRC, outBuf);
+}
+
+
+/////////////////////////////////////////////////////////////////
+// END crc32 stuff //
+/////////////////////////////////////////////////////////////////
+
+#if 0
+
+// full version
+#define NVALS 57
+
+static unsigned int val[NVALS]
+ = { 0x00, 0x01, 0x02, 0x03,
+ 0x3F, 0x40, 0x41,
+ 0x7E, 0x7F, 0x80, 0x81, 0x82,
+ 0xBF, 0xC0, 0xC1,
+ 0xFC, 0xFD, 0xFE, 0xFF,
+
+ 0xFF00, 0xFF01, 0xFF02, 0xFF03,
+ 0xFF3F, 0xFF40, 0xFF41,
+ 0xFF7E, 0xFF7F, 0xFF80, 0xFF81, 0xFF82,
+ 0xFFBF, 0xFFC0, 0xFFC1,
+ 0xFFFC, 0xFFFD, 0xFFFE, 0xFFFF,
+
+ 0xFFFFFF00, 0xFFFFFF01, 0xFFFFFF02, 0xFFFFFF03,
+ 0xFFFFFF3F, 0xFFFFFF40, 0xFFFFFF41,
+ 0xFFFFFF7E, 0xFFFFFF7F, 0xFFFFFF80, 0xFFFFFF81, 0xFFFFFF82,
+ 0xFFFFFFBF, 0xFFFFFFC0, 0xFFFFFFC1,
+ 0xFFFFFFFC, 0xFFFFFFFD, 0xFFFFFFFE, 0xFFFFFFFF
+ };
+
+#else
+
+// shortened version, for use as valgrind regtest
+#define NVALS 27
+
+static unsigned int val[NVALS]
+ = { 0x00, 0x01,
+ 0x3F, 0x40,
+ 0x7F, 0x80,
+ 0xBF, 0xC0,
+ 0xFF,
+
+ 0xFF00, 0xFF01,
+ 0xFF3F, 0xFF40,
+ 0xFF7F, 0xFF80,
+ 0xFFBF, 0xFFC0,
+ 0xFFFF,
+
+ 0xFFFFFF00, 0xFFFFFF01,
+ 0xFFFFFF3F, 0xFFFFFF40,
+ 0xFFFFFF7F, 0xFFFFFF80,
+ 0xFFFFFFBF, 0xFFFFFFC0,
+ 0xFFFFFFFF
+ };
+
+#endif
+
+/////////////////////////////////////
+
+#define CC_C 0x0001
+#define CC_P 0x0004
+#define CC_A 0x0010
+#define CC_Z 0x0040
+#define CC_S 0x0080
+#define CC_O 0x0800
+
+#define CC_MASK (CC_C | CC_P | CC_A | CC_Z | CC_S | CC_O)
+
+#define GEN_do_locked_G_E(_name,_eax) \
+ \
+ __attribute__((noinline)) void do_locked_G_E_##_name ( void ) \
+ { \
+ volatile int e_val, g_val, e_val_before; \
+ int o, s, z, a, c, p, v1, v2, flags_in; \
+ int block[4]; \
+ \
+ for (v1 = 0; v1 < NVALS; v1++) { \
+ for (v2 = 0; v2 < NVALS; v2++) { \
+ \
+ for (o = 0; o < 2; o++) { \
+ for (s = 0; s < 2; s++) { \
+ for (z = 0; z < 2; z++) { \
+ for (a = 0; a < 2; a++) { \
+ for (c = 0; c < 2; c++) { \
+ for (p = 0; p < 2; p++) { \
+ \
+ flags_in = (o ? CC_O : 0) \
+ | (s ? CC_S : 0) \
+ | (z ? CC_Z : 0) \
+ | (a ? CC_A : 0) \
+ | (c ? CC_C : 0) \
+ | (p ? CC_P : 0); \
+ \
+ g_val = val[v1]; \
+ e_val = val[v2]; \
+ e_val_before = e_val; \
+ \
+ block[0] = flags_in; \
+ block[1] = g_val; \
+ block[2] = (int)(long)&e_val; \
+ block[3] = 0; \
+ __asm__ __volatile__( \
+ "movl 0(%0), %%eax\n\t" \
+ "pushl %%eax\n\t" \
+ "popfl\n\t" \
+ "movl 4(%0), %%eax\n\t" \
+ "movl 8(%0), %%ebx\n\t" \
+ "lock; " #_name " %%" #_eax ",(%%ebx)\n\t" \
+ "pushfl\n\t" \
+ "popl %%eax\n\t" \
+ "movl %%eax, 12(%0)\n\t" \
+ : : "r"(&block[0]) : "eax","ebx","cc","memory" \
+ ); \
+ \
+ send( \
+ sprintf(outBuf, \
+ "%s G=%08x E=%08x CCIN=%08x -> E=%08x CCOUT=%08x\n", \
+ #_name, g_val, e_val_before, flags_in, \
+ e_val, block[3] & CC_MASK) ); \
+ \
+ }}}}}} \
+ \
+ }} \
+ }
+
+GEN_do_locked_G_E(addb,al)
+GEN_do_locked_G_E(addw,ax)
+GEN_do_locked_G_E(addl,eax)
+
+GEN_do_locked_G_E(orb, al)
+GEN_do_locked_G_E(orw, ax)
+GEN_do_locked_G_E(orl, eax)
+
+GEN_do_locked_G_E(adcb,al)
+GEN_do_locked_G_E(adcw,ax)
+GEN_do_locked_G_E(adcl,eax)
+
+GEN_do_locked_G_E(sbbb,al)
+GEN_do_locked_G_E(sbbw,ax)
+GEN_do_locked_G_E(sbbl,eax)
+
+GEN_do_locked_G_E(andb,al)
+GEN_do_locked_G_E(andw,ax)
+GEN_do_locked_G_E(andl,eax)
+
+GEN_do_locked_G_E(subb,al)
+GEN_do_locked_G_E(subw,ax)
+GEN_do_locked_G_E(subl,eax)
+
+GEN_do_locked_G_E(xorb,al)
+GEN_do_locked_G_E(xorw,ax)
+GEN_do_locked_G_E(xorl,eax)
+
+
+
+
+#define GEN_do_locked_imm_E(_name,_eax,_imm) \
+ \
+ __attribute__((noinline)) void do_locked_imm_E_##_name##_##_imm ( void ) \
+ { \
+ volatile int e_val, e_val_before; \
+ int o, s, z, a, c, p, v2, flags_in; \
+ int block[3]; \
+ \
+ for (v2 = 0; v2 < NVALS; v2++) { \
+ \
+ for (o = 0; o < 2; o++) { \
+ for (s = 0; s < 2; s++) { \
+ for (z = 0; z < 2; z++) { \
+ for (a = 0; a < 2; a++) { \
+ for (c = 0; c < 2; c++) { \
+ for (p = 0; p < 2; p++) { \
+ \
+ flags_in = (o ? CC_O : 0) \
+ | (s ? CC_S : 0) \
+ | (z ? CC_Z : 0) \
+ | (a ? CC_A : 0) \
+ | (c ? CC_C : 0) \
+ | (p ? CC_P : 0); \
+ \
+ e_val = val[v2]; \
+ e_val_before = e_val; \
+ \
+ block[0] = flags_in; \
+ block[1] = (int)(long)&e_val; \
+ block[2] = 0; \
+ __asm__ __volatile__( \
+ "movl 0(%0), %%eax\n\t" \
+ "pushl %%eax\n\t" \
+ "popfl\n\t" \
+ "movl 4(%0), %%ebx\n\t" \
+ "lock; " #_name " $" #_imm ",(%%ebx)\n\t" \
+ "pushfl\n\t" \
+ "popl %%eax\n\t" \
+ "movl %%eax, 8(%0)\n\t" \
+ : : "r"(&block[0]) : "eax","ebx","cc","memory" \
+ ); \
+ \
+ send( \
+ sprintf(outBuf, \
+ "%s I=%s E=%08x CCIN=%08x -> E=%08x CCOUT=%08x\n", \
+ #_name, #_imm, e_val_before, flags_in, \
+ e_val, block[2] & CC_MASK) ); \
+ \
+ }}}}}} \
+ \
+ } \
+ }
+
+GEN_do_locked_imm_E(addb,al,0x7F)
+GEN_do_locked_imm_E(addb,al,0xF1)
+GEN_do_locked_imm_E(addw,ax,0x7E)
+GEN_do_locked_imm_E(addw,ax,0x9325)
+GEN_do_locked_imm_E(addl,eax,0x7D)
+GEN_do_locked_imm_E(addl,eax,0x31415927)
+
+GEN_do_locked_imm_E(orb,al,0x7F)
+GEN_do_locked_imm_E(orb,al,0xF1)
+GEN_do_locked_imm_E(orw,ax,0x7E)
+GEN_do_locked_imm_E(orw,ax,0x9325)
+GEN_do_locked_imm_E(orl,eax,0x7D)
+GEN_do_locked_imm_E(orl,eax,0x31415927)
+
+GEN_do_locked_imm_E(adcb,al,0x7F)
+GEN_do_locked_imm_E(adcb,al,0xF1)
+GEN_do_locked_imm_E(adcw,ax,0x7E)
+GEN_do_locked_imm_E(adcw,ax,0x9325)
+GEN_do_locked_imm_E(adcl,eax,0x7D)
+GEN_do_locked_imm_E(adcl,eax,0x31415927)
+
+GEN_do_locked_imm_E(sbbb,al,0x7F)
+GEN_do_locked_imm_E(sbbb,al,0xF1)
+GEN_do_locked_imm_E(sbbw,ax,0x7E)
+GEN_do_locked_imm_E(sbbw,ax,0x9325)
+GEN_do_locked_imm_E(sbbl,eax,0x7D)
+GEN_do_locked_imm_E(sbbl,eax,0x31415927)
+
+GEN_do_locked_imm_E(andb,al,0x7F)
+GEN_do_locked_imm_E(andb,al,0xF1)
+GEN_do_locked_imm_E(andw,ax,0x7E)
+GEN_do_locked_imm_E(andw,ax,0x9325)
+GEN_do_locked_imm_E(andl,eax,0x7D)
+GEN_do_locked_imm_E(andl,eax,0x31415927)
+
+GEN_do_locked_imm_E(subb,al,0x7F)
+GEN_do_locked_imm_E(subb,al,0xF1)
+GEN_do_locked_imm_E(subw,ax,0x7E)
+GEN_do_locked_imm_E(subw,ax,0x9325)
+GEN_do_locked_imm_E(subl,eax,0x7D)
+GEN_do_locked_imm_E(subl,eax,0x31415927)
+
+GEN_do_locked_imm_E(xorb,al,0x7F)
+GEN_do_locked_imm_E(xorb,al,0xF1)
+GEN_do_locked_imm_E(xorw,ax,0x7E)
+GEN_do_locked_imm_E(xorw,ax,0x9325)
+GEN_do_locked_imm_E(xorl,eax,0x7D)
+GEN_do_locked_imm_E(xorl,eax,0x31415927)
+
+#define GEN_do_locked_unary_E(_name,_eax) \
+ \
+ __attribute__((noinline)) void do_locked_unary_E_##_name ( void ) \
+ { \
+ volatile int e_val, e_val_before; \
+ int o, s, z, a, c, p, v2, flags_in; \
+ int block[3]; \
+ \
+ for (v2 = 0; v2 < NVALS; v2++) { \
+ \
+ for (o = 0; o < 2; o++) { \
+ for (s = 0; s < 2; s++) { \
+ for (z = 0; z < 2; z++) { \
+ for (a = 0; a < 2; a++) { \
+ for (c = 0; c < 2; c++) { \
+ for (p = 0; p < 2; p++) { \
+ \
+ flags_in = (o ? CC_O : 0) \
+ | (s ? CC_S : 0) \
+ | (z ? CC_Z : 0) \
+ | (a ? CC_A : 0) \
+ | (c ? CC_C : 0) \
+ | (p ? CC_P : 0); \
+ \
+ e_val = val[v2]; \
+ e_val_before = e_val; \
+ \
+ block[0] = flags_in; \
+ block[1] = (int)(long)&e_val; \
+ block[2] = 0; \
+ __asm__ __volatile__( \
+ "movl 0(%0), %%eax\n\t" \
+ "pushl %%eax\n\t" \
+ "popfl\n\t" \
+ "movl 4(%0), %%ebx\n\t" \
+ "lock; " #_name " (%%ebx)\n\t" \
+ "pushfl\n\t" \
+ "popl %%eax\n\t" \
+ "movl %%eax, 8(%0)\n\t" \
+ : : "r"(&block[0]) : "eax","ebx","cc","memory" \
+ ); \
+ \
+ send( \
+ sprintf(outBuf, \
+ "%s E=%08x CCIN=%08x -> E=%08x CCOUT=%08x\n", \
+ #_name, e_val_before, flags_in, \
+ e_val, block[2] & CC_MASK)); \
+ \
+ }}}}}} \
+ \
+ } \
+ }
+
+GEN_do_locked_unary_E(decb,al)
+GEN_do_locked_unary_E(decw,ax)
+GEN_do_locked_unary_E(decl,eax)
+
+GEN_do_locked_unary_E(incb,al)
+GEN_do_locked_unary_E(incw,ax)
+GEN_do_locked_unary_E(incl,eax)
+
+GEN_do_locked_unary_E(negb,al)
+GEN_do_locked_unary_E(negw,ax)
+GEN_do_locked_unary_E(negl,eax)
+
+GEN_do_locked_unary_E(notb,al)
+GEN_do_locked_unary_E(notw,ax)
+GEN_do_locked_unary_E(notl,eax)
+
+
+/////////////////////////////////////////////////////////////////
+
+unsigned int btsl_mem ( UChar* base, int bitno )
+{
+ unsigned char res;
+ __asm__
+ __volatile__("lock; btsl\t%2, %0\n\t"
+ "setc\t%1"
+ : "=m" (*base), "=q" (res)
+ : "r" (bitno));
+ /* Pretty meaningless to dereference base here, but that's what you
+ have to do to get a btsl insn which refers to memory starting at
+ base. */
+ return res;
+}
+unsigned int btsw_mem ( UChar* base, int bitno )
+{
+ unsigned char res;
+ __asm__
+ __volatile__("lock; btsw\t%w2, %0\n\t"
+ "setc\t%1"
+ : "=m" (*base), "=q" (res)
+ : "r" (bitno));
+ return res;
+}
+
+unsigned int btrl_mem ( UChar* base, int bitno )
+{
+ unsigned char res;
+ __asm__
+ __volatile__("lock; btrl\t%2, %0\n\t"
+ "setc\t%1"
+ : "=m" (*base), "=q" (res)
+ : "r" (bitno));
+ return res;
+}
+unsigned int btrw_mem ( UChar* base, int bitno )
+{
+ unsigned char res;
+ __asm__
+ __volatile__("lock; btrw\t%w2, %0\n\t"
+ "setc\t%1"
+ : "=m" (*base), "=q" (res)
+ : "r" (bitno));
+ return res;
+}
+
+unsigned int btcl_mem ( UChar* base, int bitno )
+{
+ unsigned char res;
+ __asm__
+ __volatile__("lock; btcl\t%2, %0\n\t"
+ "setc\t%1"
+ : "=m" (*base), "=q" (res)
+ : "r" (bitno));
+ return res;
+}
+unsigned int btcw_mem ( UChar* base, int bitno )
+{
+ unsigned char res;
+ __asm__
+ __volatile__("lock; btcw\t%w2, %0\n\t"
+ "setc\t%1"
+ : "=m" (*base), "=q" (res)
+ : "r" (bitno));
+ return res;
+}
+
+unsigned int btl_mem ( UChar* base, int bitno )
+{
+ unsigned char res;
+ __asm__
+ __volatile__("btl\t%2, %0\n\t"
+ "setc\t%1"
+ : "=m" (*base), "=q" (res)
+ : "r" (bitno)
+ : "cc", "memory");
+ return res;
+}
+unsigned int btw_mem ( UChar* base, int bitno )
+{
+ unsigned char res;
+ __asm__
+ __volatile__("btw\t%w2, %0\n\t"
+ "setc\t%1"
+ : "=m" (*base), "=q" (res)
+ : "r" (bitno));
+ return res;
+}
+
+ULong rol1 ( ULong x )
+{
+ return (x << 1) | (x >> 63);
+}
+
+void do_bt_G_E_tests ( void )
+{
+ UInt n, bitoff, op;
+ UInt c;
+ UChar* block;
+ ULong carrydep, res;;
+
+ /*------------------------ MEM-L -----------------------*/
+
+ carrydep = 0;
+ block = calloc(200,1);
+ block += 100;
+ /* Valid bit offsets are -800 .. 799 inclusive. */
+
+ for (n = 0; n < 10000; n++) {
+ bitoff = (random() % 1600) - 800;
+ op = random() % 4;
+ c = 2;
+ switch (op) {
+ case 0: c = btsl_mem(block, bitoff); break;
+ case 1: c = btrl_mem(block, bitoff); break;
+ case 2: c = btcl_mem(bl...
[truncated message content] |
|
From: Bart V. A. <bar...@gm...> - 2009-07-04 07:44:01
|
Nightly build on georgia-tech-cellbuzz-native ( cellbuzz, ppc64, Fedora 7, native ) Started at 2009-07-04 02:13:13 EDT Ended at 2009-07-04 03:43:33 EDT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... done Regression test results follow == 420 tests, 154 stderr failures, 49 stdout failures, 0 post failures == memcheck/tests/addressable (stdout) memcheck/tests/addressable (stderr) memcheck/tests/badaddrvalue (stdout) memcheck/tests/badaddrvalue (stderr) memcheck/tests/badfree-2trace (stderr) memcheck/tests/badfree (stderr) memcheck/tests/badjump (stderr) memcheck/tests/badjump2 (stderr) memcheck/tests/badloop (stderr) memcheck/tests/badpoll (stderr) memcheck/tests/badrw (stderr) memcheck/tests/brk2 (stderr) memcheck/tests/buflen_check (stderr) memcheck/tests/clientperm (stdout) memcheck/tests/clientperm (stderr) memcheck/tests/custom_alloc (stderr) memcheck/tests/deep_templates (stdout) memcheck/tests/describe-block (stderr) memcheck/tests/doublefree (stderr) memcheck/tests/erringfds (stdout) memcheck/tests/erringfds (stderr) memcheck/tests/error_counts (stdout) memcheck/tests/errs1 (stderr) memcheck/tests/execve (stderr) memcheck/tests/execve2 (stderr) memcheck/tests/exitprog (stderr) memcheck/tests/file_locking (stderr) memcheck/tests/fprw (stderr) memcheck/tests/fwrite (stderr) memcheck/tests/inits (stderr) memcheck/tests/inline (stdout) memcheck/tests/inline (stderr) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cases-full (stderr) memcheck/tests/leak-cases-summary (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-pool-0 (stderr) memcheck/tests/leak-pool-1 (stderr) memcheck/tests/leak-pool-2 (stderr) memcheck/tests/leak-pool-3 (stderr) memcheck/tests/leak-pool-4 (stderr) memcheck/tests/leak-pool-5 (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/linux/brk (stderr) memcheck/tests/linux/capget (stderr) memcheck/tests/linux/stack_switch (stderr) memcheck/tests/linux/with-space (stdout) memcheck/tests/linux/with-space (stderr) memcheck/tests/linux-syscalls-2007 (stderr) memcheck/tests/linux-syslog-syscall (stderr) memcheck/tests/long_namespace_xml (stdout) memcheck/tests/long_namespace_xml (stderr) memcheck/tests/lsframe1 (stderr) memcheck/tests/lsframe2 (stderr) memcheck/tests/mallinfo (stderr) memcheck/tests/malloc1 (stderr) memcheck/tests/malloc2 (stderr) memcheck/tests/malloc3 (stdout) memcheck/tests/malloc3 (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/malloc_usable (stderr) memcheck/tests/manuel1 (stdout) memcheck/tests/manuel1 (stderr) memcheck/tests/manuel2 (stdout) memcheck/tests/manuel2 (stderr) memcheck/tests/manuel3 (stderr) memcheck/tests/match-overrun (stderr) memcheck/tests/memalign2 (stderr) memcheck/tests/memalign_test (stderr) memcheck/tests/memcmptest (stdout) memcheck/tests/memcmptest (stderr) memcheck/tests/mempool (stderr) memcheck/tests/metadata (stdout) memcheck/tests/metadata (stderr) memcheck/tests/mismatches (stderr) memcheck/tests/mmaptest (stderr) memcheck/tests/nanoleak2 (stderr) memcheck/tests/nanoleak_supp (stderr) memcheck/tests/new_nothrow (stderr) memcheck/tests/new_override (stdout) memcheck/tests/new_override (stderr) memcheck/tests/noisy_child (stderr) memcheck/tests/null_socket (stderr) memcheck/tests/origin1-yes (stderr) memcheck/tests/origin2-not-quite (stderr) memcheck/tests/origin3-no (stderr) memcheck/tests/origin4-many (stderr) memcheck/tests/origin5-bz2 (stdout) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/origin6-fp (stderr) memcheck/tests/overlap (stdout) memcheck/tests/overlap (stderr) memcheck/tests/partial_load_dflt (stderr) memcheck/tests/partial_load_ok (stderr) memcheck/tests/partiallydefinedeq (stdout) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/pdb-realloc (stderr) memcheck/tests/pdb-realloc2 (stdout) memcheck/tests/pdb-realloc2 (stderr) memcheck/tests/pipe (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/post-syscall (stderr) memcheck/tests/realloc1 (stderr) memcheck/tests/realloc2 (stderr) memcheck/tests/realloc3 (stderr) memcheck/tests/sh-mem-random (stdout) memcheck/tests/sh-mem-random (stderr) memcheck/tests/sh-mem (stderr) memcheck/tests/sigaltstack (stderr) memcheck/tests/sigkill (stderr) memcheck/tests/signal2 (stdout) memcheck/tests/signal2 (stderr) memcheck/tests/sigprocmask (stderr) memcheck/tests/stack_changes (stdout) memcheck/tests/stack_changes (stderr) memcheck/tests/str_tester (stderr) memcheck/tests/strchr (stderr) memcheck/tests/supp1 (stderr) memcheck/tests/supp2 (stderr) memcheck/tests/supp_unknown (stderr) memcheck/tests/suppfree (stderr) memcheck/tests/trivialleak (stderr) memcheck/tests/unit_libcbase (stderr) memcheck/tests/unit_oset (stdout) memcheck/tests/unit_oset (stderr) memcheck/tests/varinfo1 (stderr) memcheck/tests/varinfo2 (stderr) memcheck/tests/varinfo3 (stderr) memcheck/tests/varinfo4 (stdout) memcheck/tests/varinfo4 (stderr) memcheck/tests/varinfo5 (stderr) memcheck/tests/varinfo6 (stdout) memcheck/tests/varinfo6 (stderr) memcheck/tests/vcpu_bz2 (stdout) memcheck/tests/vcpu_bz2 (stderr) memcheck/tests/vcpu_fbench (stdout) memcheck/tests/vcpu_fbench (stderr) memcheck/tests/vcpu_fnfns (stdout) memcheck/tests/vcpu_fnfns (stderr) memcheck/tests/wrap1 (stdout) memcheck/tests/wrap1 (stderr) memcheck/tests/wrap2 (stdout) memcheck/tests/wrap2 (stderr) memcheck/tests/wrap3 (stdout) memcheck/tests/wrap3 (stderr) memcheck/tests/wrap4 (stdout) memcheck/tests/wrap4 (stderr) memcheck/tests/wrap5 (stdout) memcheck/tests/wrap5 (stderr) memcheck/tests/wrap6 (stdout) memcheck/tests/wrap6 (stderr) memcheck/tests/wrap7 (stdout) memcheck/tests/wrap7 (stderr) memcheck/tests/wrap8 (stdout) memcheck/tests/wrap8 (stderr) memcheck/tests/writev (stderr) memcheck/tests/xml1 (stdout) memcheck/tests/xml1 (stderr) none/tests/empty-exe (stderr) none/tests/linux/mremap (stderr) none/tests/linux/mremap2 (stdout) none/tests/ppc32/jm-fp (stdout) none/tests/ppc32/jm-vmx (stdout) none/tests/ppc32/round (stdout) none/tests/ppc32/test_gx (stdout) none/tests/ppc64/jm-fp (stdout) none/tests/ppc64/jm-vmx (stdout) none/tests/ppc64/round (stdout) none/tests/shell (stdout) none/tests/shell (stderr) none/tests/shell_valid1 (stderr) none/tests/shell_valid2 (stderr) none/tests/shell_valid3 (stderr) none/tests/shell_zerolength (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/tc23_bogus_condwait (stderr) drd/tests/tc23_bogus_condwait (stderr) drd/tests/unit_bitmap (stderr) drd/tests/unit_vc (stderr) exp-ptrcheck/tests/bad_percentify (stdout) 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 (stdout) 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 (stdout) 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) |
|
From: Tom H. <th...@cy...> - 2009-07-04 02:49:14
|
Nightly build on lloyd ( x86_64, Fedora 7 ) Started at 2009-07-04 03:05:08 BST Ended at 2009-07-04 03:48:01 BST 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 == 492 tests, 7 stderr failures, 1 stdout failure, 0 post failures == memcheck/tests/x86-linux/scalar (stderr) memcheck/tests/x86-linux/scalar_exit_group (stderr) memcheck/tests/x86-linux/scalar_supp (stderr) none/tests/amd64/bug127521-64 (stdout) none/tests/amd64/bug127521-64 (stderr) exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) |
|
From: Tom H. <th...@cy...> - 2009-07-04 02:29:27
|
Nightly build on mg ( x86_64, Fedora 9 ) Started at 2009-07-04 03:10:04 BST Ended at 2009-07-04 03:29:10 BST 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 == 498 tests, 2 stderr failures, 1 stdout failure, 0 post failures == none/tests/linux/mremap2 (stdout) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) |
|
From: <sv...@va...> - 2009-07-04 01:17:17
|
Author: njn Date: 2009-07-04 01:38:11 +0100 (Sat, 04 Jul 2009) New Revision: 10405 Log: Include valgrind.spec in the tarball, as it makes things easier for packagers. Fixes bug 188560. Also updated the contents of valgrind.spec.in a bit. Modified: trunk/Makefile.am trunk/valgrind.spec.in Modified: trunk/Makefile.am =================================================================== --- trunk/Makefile.am 2009-07-02 20:47:53 UTC (rev 10404) +++ trunk/Makefile.am 2009-07-04 00:38:11 UTC (rev 10405) @@ -89,13 +89,16 @@ # Nb: no need to include any Makefile.am files here, or files included from # them, as automake includes them automatically. Also not COPYING, README # or NEWS. +# We include valgrind.spec as well as valgrind.spec.in to save packagers +# from having to run configure (bug 188560). EXTRA_DIST = \ COPYING.DOCS \ README_DEVELOPERS \ README_PACKAGERS \ README_MISSING_SYSCALL_OR_IOCTL \ valgrind.pc.in \ - valgrind.spec.in + valgrind.spec.in \ + valgrind.spec dist_noinst_SCRIPTS = \ vg-in-place Modified: trunk/valgrind.spec.in =================================================================== --- trunk/valgrind.spec.in 2009-07-02 20:47:53 UTC (rev 10404) +++ trunk/valgrind.spec.in 2009-07-04 00:38:11 UTC (rev 10405) @@ -6,23 +6,20 @@ License: GPL URL: http://www.valgrind.org/ Group: Development/Debuggers -Packager: Jeremy Fitzhardinge <je...@go...> +Packager: Julian Seward <js...@ac...> Source: @PACKAGE@-@VERSION@.tar.bz2 Buildroot: %{_tmppath}/%{name}-root %description -Valgrind is an award-winning suite of tools for debugging and profiling -Linux programs. With the tools that come with Valgrind, you can -automatically detect many memory management and threading bugs, avoiding -hours of frustrating bug-hunting, making your programs more stable. You can -also perform detailed profiling, to speed up and reduce memory use of your -programs. +Valgrind is an award-winning instrumentation framework for building dynamic +analysis tools. There are Valgrind tools that can automatically detect many +memory management and threading bugs, and profile your programs in detail. You +can also use Valgrind to build new tools. Valgrind runs on the following +platforms: x86/Linux, AMD64/Linux, PPC32/Linux, PPC64/Linux, x86/MacOSX, +AMD64/MacOSX. -The Valgrind distribution currently includes five tools: two memory error -detectors, a thread error detector, a cache profiler and a heap profiler. - %prep %setup -n @PACKAGE@-@VERSION@ @@ -39,7 +36,7 @@ %files %defattr(-,root,root) -%doc AUTHORS COPYING FAQ.txt INSTALL NEWS README* +%doc AUTHORS COPYING FAQ.txt NEWS README* %doc docs.installed/html/*.html docs.installed/html/images/*.png %{_bindir}/* %{_includedir}/valgrind |