Author: bart Date: 2009-06-06 12:27:58 +0100 (Sat, 06 Jun 2009) New Revision: 10263 Log: svn merge -r10225:10262 svn://svn.valgrind.org/valgrind/trunk . Removed: branches/DRDDEV/exp-omega/ Modified: branches/DRDDEV/ACKNOWLEDGEMENTS branches/DRDDEV/AUTHORS branches/DRDDEV/Makefile.am branches/DRDDEV/NEWS branches/DRDDEV/README_PACKAGERS branches/DRDDEV/configure.in branches/DRDDEV/coregrind/m_aspacemgr/aspacemgr-linux.c branches/DRDDEV/coregrind/m_syswrap/priv_syswrap-darwin.h branches/DRDDEV/coregrind/m_syswrap/syswrap-darwin.c branches/DRDDEV/coregrind/m_syswrap/syswrap-main.c branches/DRDDEV/coregrind/m_syswrap/syswrap-x86-linux.c branches/DRDDEV/drd/Testing.txt branches/DRDDEV/drd/drd.h branches/DRDDEV/drd/drd_malloc_wrappers.h branches/DRDDEV/drd/drd_semaphore.c branches/DRDDEV/drd/scripts/download-and-build-gcc branches/DRDDEV/drd/tests/Makefile.am branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3 branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3-b branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.5 branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.5-ppc branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.8 branches/DRDDEV/drd/tests/tsan_unittest.cpp branches/DRDDEV/exp-ptrcheck/h_main.c branches/DRDDEV/include/vki/vki-scnums-darwin.h branches/DRDDEV/nightly/README.txt branches/DRDDEV/nightly/bin/nightly branches/DRDDEV/nightly/conf/georgia-tech-cellbuzz-cross.conf Modified: branches/DRDDEV/ACKNOWLEDGEMENTS =================================================================== --- branches/DRDDEV/ACKNOWLEDGEMENTS 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/ACKNOWLEDGEMENTS 2009-06-06 11:27:58 UTC (rev 10263) @@ -52,7 +52,6 @@ Josef wrote Callgrind and the associated KCachegrind GUI. -Omega was written by Bryan Meredith and is maintained by Rich Coe. DRD was written by and is maintained by Bart Van Assche. Frederic Gobry helped with autoconf and automake. Daniel Berlin Modified: branches/DRDDEV/AUTHORS =================================================================== --- branches/DRDDEV/AUTHORS 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/AUTHORS 2009-06-06 11:27:58 UTC (rev 10263) @@ -38,7 +38,6 @@ Michael Matz and Simon Hausmann modified the GNU binutils demangler(s) for use in Valgrind. -Omega was written by Bryan Meredith and is maintained by Rich Coe. DRD was written by and is maintained by Bart Van Assche. And lots and lots of other people sent bug reports, patches, and very Modified: branches/DRDDEV/Makefile.am =================================================================== --- branches/DRDDEV/Makefile.am 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/Makefile.am 2009-06-06 11:27:58 UTC (rev 10263) @@ -12,8 +12,7 @@ helgrind \ drd -EXP_TOOLS = exp-omega \ - exp-ptrcheck +EXP_TOOLS = exp-ptrcheck # DDD: once all tools work on Darwin, TEST_TOOLS and TEST_EXP_TOOLS can be # replaced with TOOLS and EXP_TOOLS. @@ -28,7 +27,7 @@ lackey \ none - TEST_EXP_TOOLS = exp-omega + TEST_EXP_TOOLS = endif # Put docs last because building the HTML is slow and we want to get Modified: branches/DRDDEV/NEWS =================================================================== --- branches/DRDDEV/NEWS 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/NEWS 2009-06-06 11:27:58 UTC (rev 10263) @@ -1,14 +1,17 @@ Release 3.5.0 (???) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -* XXX: Mac OS X support - - x86/Darwin. - - probably amd64/Darwin. - - Requires Mac OS X 10.5 Leopard or later. - - No support for Mac OS X on PowerPC machines. - - Many thanks to Greg Parker for developing this port over several years. +* Mac OS X is now supported. (Note that Mac OS X is often called "Darwin" + because that is the name of the OS core.) - Things that don't work + Supported machines: + - x86 machines are supported fairly well. + - AMD64 (a.k.a. x86-64) are supported, but not as well. + - Older PowerPC machines are not supported. + - It requires Mac OS X 10.5 Leopard or later. Porting to 10.4 is not + planned because it would require work and 10.4 is only becoming less common. + + Things that don't work: - Objective-C garbage collection - --db-attach=yes - Messages like the following indicate a mismatch between Valgrind's @@ -16,7 +19,15 @@ multithreaded programs. If the failure repeats for the same address range, then there may be a problem causing false errors or crashes. sync check at ...: FAILED + - If you have Rogue Amoeba's "Instant Hijack" program installed, Valgrind + will fail with a SIGTRAP at start-up. This is apparently Instant + Hijack's fault. See https://bugs.kde.org/show_bug.cgi?id=193917 for + details and a simple work-around. + Many thanks to Greg Parker for developing this port over several years. + +* XXX: something about improved Wine support? + * A new Memcheck client request VALGRIND_COUNT_LEAK_BLOCKS has been added. It is similar to VALGRIND_COUNT_LEAKS but counts blocks instead of bytes. [XXX: consider adding VALGRIND_COUNT_LEAK_BYTES as a synonym and @@ -54,6 +65,8 @@ Stack traces produced when --xml=yes is specified are different and unchanged. +* XXX: XML output has changed... + * The graphs drawn by Massif's ms_print program have changed slightly: - The half-height chars '.' and ',' are no longer drawn, because they are confusing. The --y option can be used if the default y-resolution is @@ -62,6 +75,12 @@ gap until the next snapshot. This makes it clear that the memory usage has not dropped to zero between snapshots. +* exp-Omega, an experimental instantaneous leak-detecting tool, was disabled + in 3.4.0 due to a lack of interest and maintenance, although the source + code was still in the distribution. The source code has now been removed + from the distribution. For anyone interested, the removal occurred in SVN + revision r10247. + * The location of some install files has changed. This should not affect most users. Those who might be affected: - For people who use Valgrind with MPI programs, the installed @@ -88,6 +107,13 @@ 189763 DRD - pthread_create@GLIBC_2.0() no longer triggers an assertion failure. n-i-bz DRD - fixed assertion failure triggered by mutex reinitialization. + Note: DRD did report the mutex reinitialization before reporting the + assertion failure. +n-i-bz DRD - fixed a bug that caused incorrect messages to be printed about + memory allocation events with memory access tracing enabled (fixed + in r10191). +n-i-bz DRD - fixed a memory leak triggered by vector clock deallocation + (fixed in r10228). Modified: branches/DRDDEV/README_PACKAGERS =================================================================== --- branches/DRDDEV/README_PACKAGERS 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/README_PACKAGERS 2009-06-06 11:27:58 UTC (rev 10263) @@ -78,7 +78,7 @@ -- Don't strip symbols from lib/valgrind/$platform/{cachegrind, - callgrind,drd,exp-omega,helgrind,lackey,massif,memcheck,none} + callgrind,drd,helgrind,lackey,massif,memcheck,none} in the installation tree. Doing so will likely cause problems. Removing the line number info is probably OK, although that has not been tested by the Valgrind developers. Modified: branches/DRDDEV/configure.in =================================================================== --- branches/DRDDEV/configure.in 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/configure.in 2009-06-06 11:27:58 UTC (rev 10263) @@ -1233,29 +1233,6 @@ 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]) @@ -1916,9 +1893,6 @@ none/tests/darwin/Makefile none/tests/x86-linux/Makefile none/docs/Makefile - exp-omega/Makefile - exp-omega/tests/Makefile - exp-omega/docs/Makefile exp-ptrcheck/Makefile exp-ptrcheck/tests/Makefile exp-ptrcheck/docs/Makefile Modified: branches/DRDDEV/coregrind/m_aspacemgr/aspacemgr-linux.c =================================================================== --- branches/DRDDEV/coregrind/m_aspacemgr/aspacemgr-linux.c 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/coregrind/m_aspacemgr/aspacemgr-linux.c 2009-06-06 11:27:58 UTC (rev 10263) @@ -3374,6 +3374,8 @@ else if (nsegments[i].kind == SkFree || nsegments[i].kind == SkResvn) { /* Add mapping for SkResvn regions */ ChangedSeg* cs = &css_local[css_used_local]; + // If this assert fails, the css_size arg passed to + // VG_(get_changed_segments) needs to be increased. aspacem_assert(css_used_local < css_size_local); cs->is_added = True; cs->start = addr; @@ -3433,8 +3435,9 @@ if (nsegments[i].kind != SkFree && nsegments[i].kind != SkResvn) { // V has a mapping, kernel doesn't ChangedSeg* cs = &css_local[css_used_local]; + // If this assert fails, the css_size arg passed to + // VG_(get_changed_segments) needs to be increased. aspacem_assert(css_used_local < css_size_local); - cs->is_added = True; cs->is_added = False; cs->start = nsegments[i].start; cs->end = nsegments[i].end; Modified: branches/DRDDEV/coregrind/m_syswrap/priv_syswrap-darwin.h =================================================================== --- branches/DRDDEV/coregrind/m_syswrap/priv_syswrap-darwin.h 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/coregrind/m_syswrap/priv_syswrap-darwin.h 2009-06-06 11:27:58 UTC (rev 10263) @@ -241,7 +241,7 @@ DECL_TEMPLATE(darwin, swtch_pri); // Machine-dependent traps -DECL_TEMPLATE(darwin, pthread_set_self); +DECL_TEMPLATE(darwin, thread_fast_set_cthread_self); // syswrap-<arch>-darwin.c #include <mach/mach.h> Modified: branches/DRDDEV/coregrind/m_syswrap/syswrap-darwin.c =================================================================== --- branches/DRDDEV/coregrind/m_syswrap/syswrap-darwin.c 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/coregrind/m_syswrap/syswrap-darwin.c 2009-06-06 11:27:58 UTC (rev 10263) @@ -592,10 +592,13 @@ static void sync_mappings(const HChar *when, const HChar *where, Int num) { - // I haven't seen more than 1 segment be added or removed in a single calls - // to sync_mappings(). So 20 seems generous. The upper bound is the - // number of segments currently in use. --njn - #define CSS_SIZE 20 + // Usually the number of segments added/removed in a single calls is very + // small e.g. 1. But the limit was 20 at one point, and that wasn't enough + // for at least one invocation of Firefox. If we need to go much bigger, + // should probably make VG_(get_changed_segments) fail if the size isn't + // big enough, and repeatedly redo it with progressively bigger dynamically + // allocated buffers until it succeeds. + #define CSS_SIZE 100 ChangedSeg css[CSS_SIZE]; Int css_used; Int i; @@ -6873,13 +6876,12 @@ } #endif -PRE(pthread_set_self) +PRE(thread_fast_set_cthread_self) { - PRINT("pthread_set_self ( %#lx )", ARG1); - PRE_REG_READ1(void, "pthread_set_self", struct pthread_t *, self); + PRINT("thread_fast_set_cthread_self ( %#lx )", ARG1); + PRE_REG_READ1(void, "thread_fast_set_cthread_self", struct pthread_t *, self); #if defined(VGA_x86) - // GrP fixme hack this isn't really pthread_set_self // Point the USER_CTHREAD ldt entry (slot 6, reg 0x37) at this pthread { VexGuestX86SegDescr *ldt; @@ -6912,7 +6914,7 @@ // and use that to set the syscall return status. SET_STATUS_from_SysRes( VG_(mk_SysRes_x86_darwin)( - VG_DARWIN_SYSNO_CLASS(__NR_pthread_set_self), + VG_DARWIN_SYSNO_CLASS(__NR_thread_fast_set_cthread_self), False, 0, 0x37 ) ); @@ -6928,7 +6930,7 @@ // see comments on x86 case just above SET_STATUS_from_SysRes( VG_(mk_SysRes_amd64_darwin)( - VG_DARWIN_SYSNO_CLASS(__NR_pthread_set_self), + VG_DARWIN_SYSNO_CLASS(__NR_thread_fast_set_cthread_self), False, 0, 0x60 ) ); @@ -7524,11 +7526,11 @@ #if defined(VGA_x86) const SyscallTableEntry ML_(mdep_trap_table)[] = { - MACX_(__NR_pthread_set_self, pthread_set_self), + MACX_(__NR_thread_fast_set_cthread_self, thread_fast_set_cthread_self), }; #elif defined(VGA_amd64) const SyscallTableEntry ML_(mdep_trap_table)[] = { - MACX_(__NR_pthread_set_self, pthread_set_self), + MACX_(__NR_thread_fast_set_cthread_self, thread_fast_set_cthread_self), }; #else #error unknown architecture Modified: branches/DRDDEV/coregrind/m_syswrap/syswrap-main.c =================================================================== --- branches/DRDDEV/coregrind/m_syswrap/syswrap-main.c 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/coregrind/m_syswrap/syswrap-main.c 2009-06-06 11:27:58 UTC (rev 10263) @@ -1622,9 +1622,9 @@ when they really should call SET_STATUS_from_SysRes. The former create a UNIX-class syscall result on Darwin, which may not be correct for the syscall; if that's the case then this assertion - fires. See PRE(pthread_set_self) for an example. On non-Darwin - platforms this assertion is should never fail, and this comment - is completely irrelevant. */ + fires. See PRE(thread_fast_set_cthread_self) for an example. On + non-Darwin platforms this assertion is should never fail, and this + comment is completely irrelevant. */ /* Ok, looks sane */ /* Get the system call number. Because the pre-handler isn't Modified: branches/DRDDEV/coregrind/m_syswrap/syswrap-x86-linux.c =================================================================== --- branches/DRDDEV/coregrind/m_syswrap/syswrap-x86-linux.c 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/coregrind/m_syswrap/syswrap-x86-linux.c 2009-06-06 11:27:58 UTC (rev 10263) @@ -647,8 +647,11 @@ idx = info->entry_number; if (idx == -1) { - /* Find and use the first free entry. */ - for (idx = 0; idx < VEX_GUEST_X86_GDT_NENT; idx++) { + /* Find and use the first free entry. Don't allocate entry + zero, because the hardware will never do that, and apparently + doing so confuses some code (perhaps stuff running on + Wine). */ + for (idx = 1; idx < VEX_GUEST_X86_GDT_NENT; idx++) { if (gdt[idx].LdtEnt.Words.word1 == 0 && gdt[idx].LdtEnt.Words.word2 == 0) break; @@ -656,7 +659,8 @@ if (idx == VEX_GUEST_X86_GDT_NENT) return VG_(mk_SysRes_Error)( VKI_ESRCH ); - } else if (idx < 0 || idx >= VEX_GUEST_X86_GDT_NENT) { + } else if (idx < 0 || idx == 0 || idx >= VEX_GUEST_X86_GDT_NENT) { + /* Similarly, reject attempts to use GDT[0]. */ return VG_(mk_SysRes_Error)( VKI_EINVAL ); } Modified: branches/DRDDEV/drd/Testing.txt =================================================================== --- branches/DRDDEV/drd/Testing.txt 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/drd/Testing.txt 2009-06-06 11:27:58 UTC (rev 10263) @@ -32,11 +32,8 @@ 6. Run the regression tests as follows: perl tests/vg_regtest drd -7. Run Konstantin's regression tests: - mkdir -p drt/unittest - svn checkout http://data-race-test.googlecode.com/svn/trunk/unittest drt/unittest - make -C drt/unittest -s all - ./vg-in-place --tool=drd --check-stack-var=yes drt/unittest/racecheck_unittest 2>&1|less +7. Run the regression tests that were developed for Thread Sanitizer: + ./vg-in-place --tool=drd --check-stack-var=yes drt/test/tsan_unittest 2>&1|less 8. Test the slowdown for matinv for various matrix sizes via the script drd/scripts/run-matinv (must be about 24 for i == 1 and about @@ -55,7 +52,25 @@ having closed the GNOME terminal window: ./vg-in-place --tool=drd --var-info=yes --trace-children=yes gnome-terminal -11. Test DRD with Firefox. First of all, make sure that Valgrind is patched +11. Rerun the GraphicsMagick test suite: + 1. Recompile gcc via drd/scripts/download-and-build-gcc. + 2. Replace the distro-provided libgomp.so* by the newly compiled versions: + cp $HOME/gcc-.../lib/libgomp.so.1.0.0.0 /usr/lib + cp $HOME/gcc-.../lib64/libgomp.so.1.0.0.0 /usr/lib64 + rpm --verify libgomp43-32bit + rpm --verify libgomp43 + 3. Build and install Valgrind in /usr: + ./autogen.sh && ./configure --prefix=/usr CC=$HOME/gcc-4.4.0/bin/gcc \ + && make -s && make -s install + 4. Download the GraphicsMagick source code: + cvs -d :pserver:ano...@cv...:/GraphicsMagick login + cvs -d :pserver:ano...@cv...:/GraphicsMagick co GraphicsMagick + cd GraphicsMagick + ./configure --prefix=$HOME/GraphicsMagick-cvs + export OMP_NUM_THREADS=4 + make -s drd + +12. Test DRD with Firefox. First of all, make sure that Valgrind is patched such that it supports libjemalloc.so: drd/scripts/add-libjemalloc-support Next, build and install Firefox 3: Modified: branches/DRDDEV/drd/drd.h =================================================================== --- branches/DRDDEV/drd/drd.h 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/drd/drd.h 2009-06-06 11:27:58 UTC (rev 10263) @@ -174,16 +174,29 @@ #define ANNOTATE_RWLOCK_RELEASED(rwlock, is_w) \ DRDCL_(annotate_rwlock)(rwlock, 3, is_w) -/** @todo Implement this annotation. */ +/** + * Tell DRD that a FIFO queue has been created. The abbreviation PCQ stands for + * <em>producer-consumer</em>. + */ #define ANNOTATE_PCQ_CREATE(pcq) do { } while(0) -/** @todo Implement this annotation. */ +/** Tell DRD that a FIFO queue has been destroyed. */ #define ANNOTATE_PCQ_DESTROY(pcq) do { } while(0) -/** @todo Implement this annotation. */ +/** + * Tell DRD that an element has been added to the FIFO queue at address pcq. + */ #define ANNOTATE_PCQ_PUT(pcq) do { } while(0) -/** @todo Implement this annotation. */ +/** + * Tell DRD that an element has been removed from the FIFO queue at address pcq, + * and that DRD should insert a happens-before relationship between the memory + * accesses that occurred before the corresponding ANNOTATE_PCQ_PUT(pcq) + * annotation and the memory accesses after this annotation. Correspondence + * between PUT and GET annotations happens in FIFO order. Since locking + * of the queue is needed anyway to add elements to or to remove elements from + * the queue, for DRD all four FIFO annotations are defined as no-ops. + */ #define ANNOTATE_PCQ_GET(pcq) do { } while(0) /** Modified: branches/DRDDEV/drd/drd_malloc_wrappers.h =================================================================== --- branches/DRDDEV/drd/drd_malloc_wrappers.h 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/drd/drd_malloc_wrappers.h 2009-06-06 11:27:58 UTC (rev 10263) @@ -31,8 +31,8 @@ #include "pub_tool_execontext.h" /* ExeContext */ -typedef void (*StartUsingMem)(const Addr a1, const Addr a2, UInt ec_uniq); -typedef void (*StopUsingMem)(const Addr a1, const Addr a2); +typedef void (*StartUsingMem)(const Addr a1, const SizeT len, UInt ec_uniq); +typedef void (*StopUsingMem)(const Addr a1, const SizeT len); void DRD_(register_malloc_wrappers)(const StartUsingMem start_callback, Modified: branches/DRDDEV/drd/drd_semaphore.c =================================================================== --- branches/DRDDEV/drd/drd_semaphore.c 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/drd/drd_semaphore.c 2009-06-06 11:27:58 UTC (rev 10263) @@ -274,13 +274,22 @@ p ? p->value : 0, p ? p->value - 1 : 0); } - tl_assert(p); - tl_assert(p->waiters > 0); - p->waiters--; - tl_assert((int)p->waiters >= 0); - tl_assert((int)p->value >= 0); - if (p->value == 0) + + if (p) { + p->waiters--; + p->value--; + } + + /* + * Note: if another thread destroyed and reinitialized a semaphore while + * the current thread was waiting in sem_wait, p->waiters may have been + * set to zero by DRD_(semaphore_initialize)() after + * DRD_(semaphore_pre_wait)() has finished before + * DRD_(semaphore_post_wait)() has been called. + */ + if (p == NULL || (int)p->value < 0 || (int)p->waiters < 0) + { SemaphoreErrInfo sei = { DRD_(thread_get_running_tid)(), semaphore }; VG_(maybe_record_error)(VG_(get_running_tid)(), SemaphoreErr, @@ -289,8 +298,7 @@ &sei); return; } - p->value--; - tl_assert((int)p->value >= 0); + if (p->waits_to_skip > 0) p->waits_to_skip--; else Modified: branches/DRDDEV/drd/scripts/download-and-build-gcc =================================================================== --- branches/DRDDEV/drd/scripts/download-and-build-gcc 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/drd/scripts/download-and-build-gcc 2009-06-06 11:27:58 UTC (rev 10263) @@ -6,7 +6,7 @@ # are called gmp-devel and mpfr-devel. -GCC_VERSION=4.3.2 +GCC_VERSION=4.4.0 FSF_MIRROR=ftp://ftp.easynet.be/gnu SRCDIR=$HOME/software DOWNLOADS=$SRCDIR/downloads Modified: branches/DRDDEV/drd/tests/Makefile.am =================================================================== --- branches/DRDDEV/drd/tests/Makefile.am 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/drd/tests/Makefile.am 2009-06-06 11:27:58 UTC (rev 10263) @@ -291,8 +291,7 @@ tsan_unittest_SOURCES = tsan_unittest.cpp tsan_unittest_CXXFLAGS = $(AM_CXXFLAGS) \ - -DTHREAD_WRAPPERS='"tsan_thread_wrappers_pthread.h"' \ - -Wno-sign-compare -Wno-shadow @FLAG_W_NO_EMPTY_BODY@ + -DTHREAD_WRAPPERS='"tsan_thread_wrappers_pthread.h"' unit_bitmap_CFLAGS = $(AM_CFLAGS) -O2 \ -DENABLE_DRD_CONSISTENCY_CHECKS \ Modified: branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3 =================================================================== --- branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3 2009-06-06 11:27:58 UTC (rev 10263) @@ -137,11 +137,11 @@ semaphore 0x........ was first observed at: at 0x........: sem_init* (drd_pthread_intercepts.c:?) by 0x........: main (tc20_verifywrap.c:228) -[1/1] semaphore_post 0x........ value 0 -> 1 +[1/1] semaphore_post 0x........ value 4294967295 -> 0 FIXME: can't figure out how to verify wrap of sem_post -[1/1] semaphore_destroy 0x........ value 1 +[1/1] semaphore_destroy 0x........ value 0 ------------ dealloc of mem holding locks ------------ Modified: branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3-b =================================================================== --- branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3-b 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3-b 2009-06-06 11:27:58 UTC (rev 10263) @@ -148,11 +148,11 @@ semaphore 0x........ was first observed at: at 0x........: sem_init* (drd_pthread_intercepts.c:?) by 0x........: main (tc20_verifywrap.c:228) -[1/1] semaphore_post 0x........ value 0 -> 1 +[1/1] semaphore_post 0x........ value 4294967295 -> 0 FIXME: can't figure out how to verify wrap of sem_post -[1/1] semaphore_destroy 0x........ value 1 +[1/1] semaphore_destroy 0x........ value 0 ------------ dealloc of mem holding locks ------------ Modified: branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.5 =================================================================== --- branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.5 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.5 2009-06-06 11:27:58 UTC (rev 10263) @@ -136,11 +136,11 @@ semaphore 0x........ was first observed at: at 0x........: sem_init* (drd_pthread_intercepts.c:?) by 0x........: main (tc20_verifywrap.c:228) -[1/1] semaphore_post 0x........ value 0 -> 1 +[1/1] semaphore_post 0x........ value 4294967295 -> 0 FIXME: can't figure out how to verify wrap of sem_post -[1/1] semaphore_destroy 0x........ value 1 +[1/1] semaphore_destroy 0x........ value 0 ------------ dealloc of mem holding locks ------------ Modified: branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.5-ppc =================================================================== --- branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.5-ppc 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.5-ppc 2009-06-06 11:27:58 UTC (rev 10263) @@ -136,11 +136,11 @@ semaphore 0x........ was first observed at: at 0x........: sem_init* (drd_pthread_intercepts.c:?) by 0x........: main (tc20_verifywrap.c:228) -[1/1] semaphore_post 0x........ value 0 -> 1 +[1/1] semaphore_post 0x........ value 4294967295 -> 0 FIXME: can't figure out how to verify wrap of sem_post -[1/1] semaphore_destroy 0x........ value 1 +[1/1] semaphore_destroy 0x........ value 0 ------------ dealloc of mem holding locks ------------ Modified: branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.8 =================================================================== --- branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.8 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/drd/tests/tc20_verifywrap2.stderr.exp-glibc2.8 2009-06-06 11:27:58 UTC (rev 10263) @@ -136,11 +136,11 @@ semaphore 0x........ was first observed at: at 0x........: sem_init* (drd_pthread_intercepts.c:?) by 0x........: main (tc20_verifywrap.c:228) -[1/1] semaphore_post 0x........ value 0 -> 1 +[1/1] semaphore_post 0x........ value 4294967295 -> 0 FIXME: can't figure out how to verify wrap of sem_post -[1/1] semaphore_destroy 0x........ value 1 +[1/1] semaphore_destroy 0x........ value 0 ------------ dealloc of mem holding locks ------------ Modified: branches/DRDDEV/drd/tests/tsan_unittest.cpp =================================================================== --- branches/DRDDEV/drd/tests/tsan_unittest.cpp 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/drd/tests/tsan_unittest.cpp 2009-06-06 11:27:58 UTC (rev 10263) @@ -60,13 +60,13 @@ // Helgrind memory usage testing stuff // If not present in dynamic_annotations.h/.cc - ignore #ifndef ANNOTATE_RESET_STATS -#define ANNOTATE_RESET_STATS() +#define ANNOTATE_RESET_STATS() do { } while(0) #endif #ifndef ANNOTATE_PRINT_STATS -#define ANNOTATE_PRINT_STATS() +#define ANNOTATE_PRINT_STATS() do { } while(0) #endif #ifndef ANNOTATE_PRINT_MEMORY_USAGE -#define ANNOTATE_PRINT_MEMORY_USAGE(a) +#define ANNOTATE_PRINT_MEMORY_USAGE(a) do { } while(0) #endif // @@ -1691,7 +1691,7 @@ std::vector<MyThread*> vec(Nlog); - for (int i = 0; i < N_iter; i++) { + for (int j = 0; j < N_iter; j++) { // Create and start Nlog threads for (int i = 0; i < Nlog; i++) { vec[i] = new MyThread(Worker); @@ -2833,14 +2833,16 @@ void Worker2() { FLAG1=GLOB2; - while(!FLAG2); + while(!FLAG2) + ; GLOB2=FLAG2; } void Worker1() { FLAG2=GLOB1; - while(!FLAG1); + while(!FLAG1) + ; GLOB1=FLAG1; } @@ -5411,11 +5413,11 @@ // do few more random publishes. for (int i = 0; i < 20; i++) { - int beg = rand() % N; - int size = (rand() % (N - beg)) + 1; + const int begin = rand() % N; + const int size = (rand() % (N - begin)) + 1; CHECK(size > 0); - CHECK(beg + size <= N); - PublishRange(beg, beg + size); + CHECK(begin + size <= N); + PublishRange(begin, begin + size); } printf("GLOB = %d\n", (int)GLOB[0]); Modified: branches/DRDDEV/exp-ptrcheck/h_main.c =================================================================== --- branches/DRDDEV/exp-ptrcheck/h_main.c 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/exp-ptrcheck/h_main.c 2009-06-06 11:27:58 UTC (rev 10263) @@ -2461,7 +2461,7 @@ ADD(0, __NR_task_self_trap); // Machine-dependent syscalls. - ADD(0, __NR_pthread_set_self); + ADD(0, __NR_thread_fast_set_cthread_self); /* ------------------------------------ */ Modified: branches/DRDDEV/include/vki/vki-scnums-darwin.h =================================================================== --- branches/DRDDEV/include/vki/vki-scnums-darwin.h 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/include/vki/vki-scnums-darwin.h 2009-06-06 11:27:58 UTC (rev 10263) @@ -116,18 +116,21 @@ #if defined(VGA_x86) // osfmk/i386/machdep_call.c -// # define __NR_thread_get_cthread_self VG_DARWIN_SYSCALL_CONSTRUCT_MDEP(0) -// # define __NR_thread_set_cthread_self VG_DARWIN_SYSCALL_CONSTRUCT_MDEP(1) -// # define __NR_2 VG_DARWIN_SYSCALL_CONSTRUCT_MDEP(2) -# define __NR_pthread_set_self VG_DARWIN_SYSCALL_CONSTRUCT_MDEP(3) -// # define __NR_thread_set_user_ldt VG_DARWIN_SYSCALL_CONSTRUCT_MDEP(4) -// # define __NR_i386_set_ldt VG_DARWIN_SYSCALL_CONSTRUCT_MDEP(5) -// # define __NR_i386_get_ldt VG_DARWIN_SYSCALL_CONSTRUCT_MDEP(6) +// DDD: the last two are BSD_CALL instead of CALL... +//#define __NR_thread_get_cthread_self VG_DARWIN_SYSCALL_CONSTRUCT_MDEP(0) +//#define __NR_thread_set_cthread_self VG_DARWIN_SYSCALL_CONSTRUCT_MDEP(1) +// 2 is invalid +#define __NR_thread_fast_set_cthread_self VG_DARWIN_SYSCALL_CONSTRUCT_MDEP(3) +//#define __NR_thread_set_user_ldt VG_DARWIN_SYSCALL_CONSTRUCT_MDEP(4) +//#define __NR_i386_set_ldt VG_DARWIN_SYSCALL_CONSTRUCT_MDEP(5) +//#define __NR_i386_get_ldt VG_DARWIN_SYSCALL_CONSTRUCT_MDEP(6) #elif defined(VGA_amd64) // osfmk/i386/machdep_call.c -# define __NR_pthread_set_self VG_DARWIN_SYSCALL_CONSTRUCT_MDEP(3) +// 0, 1, 2 are invalid +#define __NR_thread_fast_set_cthread_self VG_DARWIN_SYSCALL_CONSTRUCT_MDEP(3) +// 4, 5, 6 are invalid #else # error unknown architecture Modified: branches/DRDDEV/nightly/README.txt =================================================================== --- branches/DRDDEV/nightly/README.txt 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/nightly/README.txt 2009-06-06 11:27:58 UTC (rev 10263) @@ -1,44 +1,204 @@ - +INTRO +----- This directory (nightly/) contains a simple, automatic build-and-test -system for Valgrind, intended to be run by cron. +system for Valgrind, intended to be run nightly by cron or a similar +program. -Note (importantly) it doesn't test the sources in the tree of which -this directory is a part (viz, nightly/..). Instead it checks out -a complete new tree, builds and tests that independently of the -existing tree. -To use, choose a tag, probably a machine name, and run +BASIC OPERATIONS +---------------- +When run, the system checks out two trees: the SVN trunk from 24 hours ago +and the SVN trunk from now. ("24 hours ago" and "now" are determined when +the script starts running, so if any commits happen while the tests are +running they will not be tested.) - bin/nightly /path/to/valgrind/nightly/ <tag> +If the two trees are different (i.e. there have been commits in the past 24 +hours) it builds ("make"), installs ("make install") and runs the regression +tests ("make regtest") in both, and compares the results. Note that the +"make install" isn't necessary in order to run the tests because the +regression tests use the code built (with "make") within the tree, but it's +worth doing because it tests that "make install" isn't totally broken. +After checking both trees, it emails a summary of the results to a +recipient. All this typically takes something like 30 minutes. -and supply the following two config files: +If the two trees are identical, the tests are not run and no results are +emailed. This avoids spamming people with uninteresting results emails when +no commits have happened recently. -- conf/<tag>.conf: this is sourced by the 'nightly' script, and can define - any or all of the following environment variables: - ABT_DETAILS: describes the machine in more detail, eg. the OS. The default - is empty. - ABT_CONFIGURE_OPTIONS: gives extra configure options. The default is empty. - ABT_EVAL: if provided, it must be the name of a shell script that executes - the shell command $1 with arguments $2 .. ${$#}. Allows to compile and - run the Valgrind regression tests on another system than the system the - 'nightly' script runs on. It is assumed that the remote system shares the - local filesystem tree through e.g. NFS. It is the responsibility of the - shell script to set the remote working directory such that it matches the - local current directory ($PWD). - ABT_RUN_REGTEST: if provided, it must be the name of an argumentless shell - function (also specified in the tag.conf file) that will be used to run - the tests. If not specified, the usual "perl tests/vg_regtest --all" - will be used. - ABT_JOBS: allows parallel builds -- it's passed as the argument to "make - -j" when building Valgrind and the tests. The default is 1. - [XXX: the .NOTPARALLEL that currently resides in Makefile.all.am foils - this!] +SETTING UP +---------- +To set up nightly testing for a machine, do the following. -- conf/<tag>.sendmail: this should be a script that sends an email to the - desired recipient (eg. the valgrind-developers list). It takes three - command line arguments. The first is the email subject line, the second - is the name of the file containing the email's body (showing the tests - that failed, and the difference between now and 24 hours ago), the third - is the name of the file containing all the diffs (which can be made into - an attachment, for example). +(1) Check out just this directory from the repository, eg: + + svn co svn://svn.valgrind.org/valgrind/trunk/nightly $DIR + + where $DIR is the name of the directory you want it to be in. + + Note that this doesn't check out the whole Valgrind tree, just the + directory containing the nightly testing stuff. This is possible + because the testing script doesn't check the code in the tree it belongs + to; rather it checks out new trees (within $DIR) and tests them + independently. + +(2) Choose a tag that identifies the test results. This is usually the + machine name. We'll call it $TAG in what follows. + +(3) Create a configuration file $DIR/conf/$TAG.conf. It is sourced by the + 'nightly' script, and can define any or all of the following environment + variables. (In most cases, only ABT_DETAILS is needed.) + + - ABT_DETAILS: describes the machine in more detail, eg. the OS. The + default is empty, but you should define it. An example: + + export ABT_DETAILS="Ubuntu 9.04, Intel x86-64" + + You could also use some invocation of 'uname' or something similar + to generate this string. Eg. on Ubuntu Linux this works nicely: + + export ABT_DETAILS="`cat /etc/issue.net`, `uname -m`" + + And on Mac OS X this works nicely: + + export ABT_DETAILS=`uname -mrs` + + The advantage of doing it like this is that if you update the OS on + the test machine you won't have to update ABT_DETAILS manually. + + - ABT_CONFIGURE_OPTIONS: gives extra configure options. The default is + empty. + + - ABT_EVAL: if provided, it must be the name of a shell script that + executes the shell command $1 with arguments $2 .. ${$#}. Allows to + compile and run the Valgrind regression tests on another system than + the system the 'nightly' script runs on. It is assumed that the remote + system shares the local filesystem tree through e.g. NFS. It is the + responsibility of the shell script to set the remote working directory + such that it matches the local current directory ($PWD). + + - ABT_RUN_REGTEST: if provided, it must be the name of an argumentless + shell function (also specified in the $TAG.conf file) that will be used + to run the tests. If not specified, the usual "make regtest" will be + used. + + - ABT_JOBS: allows parallel builds -- it's passed as the argument to + "make -j" when building Valgrind and the tests. The default is 1. + [XXX: the .NOTPARALLEL that currently resides in Makefile.all.am foils + this!] + + Note that the appropriate syntax to use in this file will depend on the + shell from which the $DIR/bin/nightly script is run (which in turn may + depend on what shell is used by cron or any similar program). + +(4) Create a mailer script $DIR/conf/$TAG.sendmail. It must be executable. + It's used to send email results to the desired recipient (e.g. + val...@li...) It must handle three command + line arguments. + + - The first argument is the email subject line. It contains + $ABT_DETAILS plus some other stuff. + + - The second argument is the name of the file containing the email's + body (which shows the tests that failed, and the differences between now + and 24 hours ago). + + - The third is the name of the file containing all the diffs from + failing tests. Depending on the test results you get, you could + inline this file into the email body, or attach it, or compress and + attach it, or even omit it. The right choice depends on how many + failures you typically get -- if you get few failures, inlining the + results make them easier to read; if you get many failures, + compressing might be a good idea to minimise the size of the emails. + + The best way to do this depends on how mail is set up on your machine. + You might be able to use /usr/bin/mail, or you might need something more + elaborate like using Mutt to send mail via an external account. + + At first, you should probably just send emails to yourself for testing + purposes. After it's working, then sending it to others might be + appropriate. + +(5) To run the tests, execute: + + $DIR/bin/nightly $DIR $TAG + + You probably want to put this command into a cron file or equivalent + so it is run regularly (preferably every night). Actually, it's + probably better to put that command inside a script, and run the script + from cron, rather than running $DIR/bin/nightly directly. That way you + can put any other configuration stuff that's necessary inside the + script (e.g. make sure that programs used by the mailer script are in + your PATH). + + +OUTPUT FILES +------------ +If the tests are run, the following files are produced: + +- $DIR/old.verbose and $DIR/new.verbose contain full output of the whole + process for each of the two trees. + +- $DIR/old.short and $DIR/new.short contain summary output of the process + for each of the two trees. The diff between these two files goes in + $DIR/diff.short. + +- $DIR/final contains the overall summary, constructed from $DIR/old.short, + $DIR/new.short, $DIR/diff.short and some other bits and pieces. (The name + of this file is what's passed as the second argument to + $DIR/conf/$TAG.sendmail.) + +- $DIR/diffs holds the diffs from all the failing tests in the newer tree, + concatenated together; the diff from each failure is truncated at 100 + lines to minimise possible size blow-outs. (The name of this file is + what's passed as the third argument to $DIR/conf/$TAG.sendmail.) + +- $DIR/sendmail.log contains the output (stdout and stderr) from + $DIR/conf/$TAG.sendmail goes in $DIR/sendmail.log. + +- $DIR/valgrind-old/ and $DIR/valgrind-new/ contain the tested trees (and + $DIR/valgrind-old/Inst/ and $DIR/valgrind-new/Inst/ contain the installed + code). + +If the tests aren't run, the following file is produced: + +- $DIR/unchanged.log is created only if no tests were run because the two + trees were identical. It will contain a short explanatory message. + +Each time the tests are run, all files from previous runs are deleted. + + +TROUBLESHOOTING +--------------- +If something goes wrong, looking at the output files can be useful. For +example, if no email was sent but you expected one, check sendmail.log to +see if the mailer script had a problem. Or check if unchanged.log exists. + +Occasionally the SVN server isn't available when the tests runs, for either +or both trees. When this happens the email will be sent but it won't be +very informative. Usually it's just a temporary server problem and it'll +run fine the next time without you having to do anything. + +Note that the test suite is imperfect: +- There are very few machines where all tests pass; that's why the old/new + diff is produced. Some of the tests may not be as portable as intended. +- Some tests are non-deterministic, and so may pass one day and fail the + next. + +Improving the test suite to avoid these problems is a long-term goal but it +isn't easy. + + +MAINTENANCE +----------- +The scripts in the nightly/ directory occasionally get updated. If that +happens, you can just "svn update" within $DIR to get the updated versions, +which will then be used the next time the tests run. (It's possible that +the scripts will be changed in a way that requires changes to the files in +$DIR/conf/, but we try to avoid this.) + +If you want such updates to happen automatically, you could write a script +that does all the steps in SETTING UP above, and instead run that script +from cron. + + Modified: branches/DRDDEV/nightly/bin/nightly =================================================================== --- branches/DRDDEV/nightly/bin/nightly 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/nightly/bin/nightly 2009-06-06 11:27:58 UTC (rev 10263) @@ -19,11 +19,13 @@ str=$2 shift 2 - # Header in short logfile - echo -n " $str ... " >> $logfile.short + # Header in short logfile. + # We use "printf" to avoid printing a newline; "echo -n" isn't POSIX and + # so isn't supported on all systems. + printf " $str ... " >> $logfile.short # Header and command in verbose logfile - echo -n " $str ... " >> $logfile.verbose + printf " $str ... " >> $logfile.verbose echo "$*" >> $logfile.verbose # Run the command @@ -54,23 +56,43 @@ fi # Get args from command line -ABT_TOP=$1 -ABT_MACHINE=$2 +DIR=$1 +TAG=$2 # Get times and date -ABT_START=`date "+%F %H:%M:%S %Z"` +START=`date "+%F %H:%M:%S %Z"` -svn_old_date=`date --date=yesterday +%Y-%m-%dT%H:%M:%S` -svn_new_date=`date --date=today +%Y-%m-%dT%H:%M:%S` +# This is one of the formats SVN accepts. Yes, the 'T' appears in the final +# string, it's supposed to be like that. +svn_date_format="+%Y-%m-%dT%H:%M:%S" -cd $ABT_TOP +# The time-and-date from 24 hours ago is tricky; Linux and Darwin have +# different ways of getting it, so we try things until something works. +svn_old_date= +if [ "z" = "z${svn_old_date}" ] ; then + # Linux method. + svn_old_date=`date --date=yesterday $svn_date_format 2> /dev/null` +fi +if [ "z" = "z${svn_old_date}" ] ; then + # Darwin method. + svn_old_date=`date -v-24H $svn_date_format 2> /dev/null` +fi +if [ "z" = "z${svn_old_date}" ] ; then + echo "Sorry, can't work out the time and date for 24 hours ago, aborting" + exit 1; +fi +# The time-and-date for now is easy. +svn_new_date=`date $svn_date_format` + +cd $DIR + # Clean up output files produced by a previous run. -rm -rf diffs diff.short final Inst new.short new.verbose old.short old.verbose -rm -rf sendmail.log unchanged.log valgrind +rm -rf diffs diff.short final new.short new.verbose old.short old.verbose +rm -rf sendmail.log unchanged.log valgrind-old valgrind-new # Setup any relevant environment variables from conf/<tag>.conf. -. conf/$ABT_MACHINE.conf +. conf/$TAG.conf if [ "${ABT_JOBS}" = "" ]; then ABT_JOBS=1 fi @@ -78,7 +100,7 @@ ABT_EVAL="eval" fi if [ "${ABT_RUN_REGTEST}" = "" ]; then - ABT_RUN_REGTEST="cd valgrind && perl tests/vg_regtest --all" + ABT_RUN_REGTEST="make regtest" fi @@ -98,9 +120,6 @@ # for the current one. for logfile in old new ; do - # Remove the old valgrind directory. - rm -rf valgrind - # Remove old short and verbose log files, and start the new ones for ext in short verbose ; do echo > $logfile.$ext @@ -118,19 +137,19 @@ # Check out, build, run tests runcmd $logfile \ "Checking out valgrind source tree" \ - "svn co ${valgrind_svn_repo} -r {$svn_date} valgrind" && \ + "svn co ${valgrind_svn_repo} -r {$svn_date} valgrind-$logfile" && \ \ runcmd $logfile \ "Configuring valgrind " \ - "cd valgrind && ./autogen.sh && ./configure --prefix=`pwd`/Inst ${ABT_CONFIGURE_OPTIONS}" && \ + "cd valgrind-$logfile && ./autogen.sh && ./configure --prefix=`pwd`/valgrind-$logfile/Inst ${ABT_CONFIGURE_OPTIONS}" && \ \ runcmd $logfile \ "Building valgrind " \ - "cd valgrind && make -j ${ABT_JOBS} && make -j ${ABT_JOBS} check && make install" && \ + "cd valgrind-$logfile && make -j ${ABT_JOBS} && make -j ${ABT_JOBS} check && make install" && \ \ runcmd $logfile \ "Running regression tests " \ - "${ABT_RUN_REGTEST}" + "cd valgrind-$logfile && ${ABT_RUN_REGTEST}" # Grab some indicative text for the short log file -- if the regtests # succeeded, show their results. If we didn't make it that far, show the @@ -152,10 +171,14 @@ # Prepare results and send #---------------------------------------------------------------------------- +# Get times and date +END=`date "+%F %H:%M:%S %Z"` + # 'final' shows the difference between the old and new results -echo > final -echo "Nightly build on" $ABT_MACHINE "(" $ABT_DETAILS ")" \ - "started at" $ABT_START >> final +echo > final +echo "Nightly build on" $TAG "(" $ABT_DETAILS ")" >> final +echo "Started at" $START >> final +echo "Ended at" $END >> final # If the results differ from 24 hours ago, print extra stuff. diff -C1 old.short new.short > diff.short @@ -208,7 +231,7 @@ fi # Use the conf/<tag>.sendmail script to email the results. -conf/$ABT_MACHINE.sendmail \ - "$changed_str$ABT_START nightly build ($ABT_MACHINE, $ABT_DETAILS)" \ +conf/$TAG.sendmail \ + "$changed_str$START nightly build ($TAG, $ABT_DETAILS)" \ final \ diffs > sendmail.log 2>&1 Modified: branches/DRDDEV/nightly/conf/georgia-tech-cellbuzz-cross.conf =================================================================== --- branches/DRDDEV/nightly/conf/georgia-tech-cellbuzz-cross.conf 2009-06-06 10:56:40 UTC (rev 10262) +++ branches/DRDDEV/nightly/conf/georgia-tech-cellbuzz-cross.conf 2009-06-06 11:27:58 UTC (rev 10263) @@ -14,7 +14,6 @@ ABT_JOBS=3 cellbuzz_run_regtest() { - cd valgrind || return $? rm -f regtest-output.txt jobid=`echo "{ cd $PWD && perl tests/vg_regtest --all; } >& $PWD/regtest-output.txt" | qsub` echo "Job ID = ${jobid}" |