|
From: <sv...@va...> - 2008-06-30 17:10:27
|
Author: bart
Date: 2008-06-30 18:10:29 +0100 (Mon, 30 Jun 2008)
New Revision: 8322
Log:
Split client requests into public and tool-internal.
Added:
trunk/exp-drd/drd.h
Modified:
trunk/exp-drd/Makefile.am
trunk/exp-drd/drd_clientreq.h
trunk/exp-drd/tests/fp_race.c
trunk/exp-drd/tests/omp_prime.c
trunk/exp-drd/tests/pth_cond_race.c
trunk/exp-drd/tests/pth_detached.c
trunk/exp-drd/tests/pth_detached_sem.c
trunk/exp-drd/tests/rwlock_race.c
trunk/exp-drd/tests/sem_as_mutex.c
trunk/exp-drd/tests/sigalrm.c
Modified: trunk/exp-drd/Makefile.am
===================================================================
--- trunk/exp-drd/Makefile.am 2008-06-30 13:15:33 UTC (rev 8321)
+++ trunk/exp-drd/Makefile.am 2008-06-30 17:10:29 UTC (rev 8322)
@@ -100,6 +100,10 @@
drd_semaphore.c \
drd_suppression.c
+drdincludedir = $(includedir)/valgrind
+
+drdinclude_HEADERS = drd.h
+
noinst_HEADERS = \
drd_barrier.h \
drd_bitmap.h \
Added: trunk/exp-drd/drd.h
===================================================================
--- trunk/exp-drd/drd.h (rev 0)
+++ trunk/exp-drd/drd.h 2008-06-30 17:10:29 UTC (rev 8322)
@@ -0,0 +1,131 @@
+
+/*
+ ----------------------------------------------------------------
+
+ Notice that the following BSD-style license applies to this one
+ file (drd.h) only. The rest of Valgrind is licensed under the
+ terms of the GNU General Public License, version 2, unless
+ otherwise indicated. See the COPYING file in the source
+ distribution for details.
+
+ ----------------------------------------------------------------
+
+ This file is part of drd, a Valgrind tool for verification of
+ multithreaded programs.
+
+ Copyright (C) 2006-2008 Bart Van Assche. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. The origin of this software must not be misrepresented; you must
+ not claim that you wrote the original software. If you use this
+ software in a product, an acknowledgment in the product
+ documentation would be appreciated but is not required.
+
+ 3. Altered source versions must be plainly marked as such, and must
+ not be misrepresented as being the original software.
+
+ 4. The name of the author may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ ----------------------------------------------------------------
+
+ Notice that the above BSD-style license applies to this one file
+ (drd.h) only. The entire rest of Valgrind is licensed under
+ the terms of the GNU General Public License, version 2. See the
+ COPYING file in the source distribution for details.
+
+ ----------------------------------------------------------------
+*/
+
+#ifndef __VALGRIND_DRD_H
+#define __VALGRIND_DRD_H
+
+
+#include "valgrind.h"
+
+
+/* !! ABIWARNING !! ABIWARNING !! ABIWARNING !! ABIWARNING !!
+ This enum comprises an ABI exported by Valgrind to programs
+ which use client requests. DO NOT CHANGE THE ORDER OF THESE
+ ENTRIES, NOR DELETE ANY -- add new ones at the end.
+ */
+
+
+/** Tell DRD to suppress data race detection on the specified variable. */
+#define DRD_IGNORE_VAR(x) vg_drd_ignore_range(&(x), sizeof(x))
+
+/** Tell DRD to trace all memory accesses on the specified variable.
+ * until the memory that was allocated for the variable is freed.
+ */
+#define DRD_TRACE_VAR(x) vg_drd_trace_range(&(x), sizeof(x))
+
+
+enum
+{
+ /* Ask the core the thread ID assigned by Valgrind. */
+ VG_USERREQ__GET_THREAD_SELF = VG_USERREQ_TOOL_BASE('D','R'),
+ /* args: none. */
+
+ /* To tell the drd tool to suppress data race detection on the specified */
+ /* address range. */
+ VG_USERREQ__DRD_START_SUPPRESSION,
+ /* args: start address, size in bytes */
+ /* To tell the drd tool no longer to suppress data race detection on the */
+ /* specified address range. */
+ VG_USERREQ__DRD_FINISH_SUPPRESSION,
+ /* args: start address, size in bytes */
+
+ /* To ask the drd tool to trace all accesses to the specified range. */
+ VG_USERREQ__DRD_START_TRACE_ADDR,
+ /* args: Addr, SizeT. */
+ /* To ask the drd tool to stop tracing accesses to the specified range. */
+ VG_USERREQ__DRD_STOP_TRACE_ADDR,
+ /* args: Addr, SizeT. */
+};
+
+
+static __inline__
+int vg_get_drd_threadid(void)
+{
+ int res;
+ VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__GET_THREAD_SELF, 0,0,0,0,0);
+ return res;
+}
+
+static __inline__
+void vg_drd_ignore_range(const void* const p, const int size)
+{
+ int res;
+ VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__DRD_START_SUPPRESSION,
+ p, size, 0, 0, 0);
+}
+
+static __inline__
+void vg_drd_trace_range(const void* const p, const int size)
+{
+ int res;
+ VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__DRD_START_TRACE_ADDR,
+ p, size, 0, 0, 0);
+}
+
+
+#endif /* __VALGRIND_DRD_H */
Modified: trunk/exp-drd/drd_clientreq.h
===================================================================
--- trunk/exp-drd/drd_clientreq.h 2008-06-30 13:15:33 UTC (rev 8321)
+++ trunk/exp-drd/drd_clientreq.h 2008-06-30 17:10:29 UTC (rev 8322)
@@ -2,39 +2,17 @@
#define __DRD_CLIENTREQ_H
-#include "valgrind.h" // VG_USERREQ_TOOL_BASE()
+#include "drd.h"
-#define DRD_IGNORE_VAR(x) { int res; VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__DRD_START_SUPPRESSION, &(x), sizeof(x), 0, 0, 0); }
-#define DRD_TRACE_VAR(x) { int res; VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__DRD_START_TRACE_ADDR, &(x), sizeof(x), 0, 0, 0); }
-
-
enum {
- /* Ask the core the thread ID assigned by Valgrind. */
- VG_USERREQ__GET_THREAD_SELF = VG_USERREQ_TOOL_BASE('D', 'R'),
- /* args: none. */
-
- /* To tell the drd tool to suppress data race detection on the specified */
- /* address range. */
- VG_USERREQ__DRD_START_SUPPRESSION,
- /* args: start address, size in bytes */
- /* To tell the drd tool no longer to suppress data race detection on the */
- /* specified address range. */
- VG_USERREQ__DRD_FINISH_SUPPRESSION,
- /* args: start address, size in bytes */
/* Ask drd to suppress data race reports on all currently allocated stack */
/* data of the current thread. */
- VG_USERREQ__DRD_SUPPRESS_CURRENT_STACK,
+ VG_USERREQ__DRD_SUPPRESS_CURRENT_STACK = VG_USERREQ_TOOL_BASE('D', 'r'),
/* args: none */
/* To ask the drd tool to start a new segment in the specified thread. */
VG_USERREQ__DRD_START_NEW_SEGMENT,
/* args: POSIX thread ID. */
- /* To ask the drd tool to trace all accesses to the specified range. */
- VG_USERREQ__DRD_START_TRACE_ADDR,
- /* args: Addr, SizeT. */
- /* To ask the drd tool to stop tracing accesses to the specified range. */
- VG_USERREQ__DRD_STOP_TRACE_ADDR,
- /* args: Addr, SizeT. */
/* Let the drd tool stop recording memory accesses in the calling thread. */
VG_USERREQ__DRD_STOP_RECORDING,
/* args: none. */
@@ -185,4 +163,5 @@
gomp_barrier = 2
} BarrierT;
+
#endif // __DRD_CLIENTREQ_H
Modified: trunk/exp-drd/tests/fp_race.c
===================================================================
--- trunk/exp-drd/tests/fp_race.c 2008-06-30 13:15:33 UTC (rev 8321)
+++ trunk/exp-drd/tests/fp_race.c 2008-06-30 17:10:29 UTC (rev 8322)
@@ -28,7 +28,7 @@
#include <stdio.h> // printf()
#include <pthread.h>
#include <unistd.h> // usleep()
-#include "../drd_clientreq.h"
+#include "../drd.h"
// Local functions declarations.
Modified: trunk/exp-drd/tests/omp_prime.c
===================================================================
--- trunk/exp-drd/tests/omp_prime.c 2008-06-30 13:15:33 UTC (rev 8321)
+++ trunk/exp-drd/tests/omp_prime.c 2008-06-30 17:10:29 UTC (rev 8322)
@@ -10,7 +10,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> // getopt()
-#include "../drd_clientreq.h"
+#include "../drd.h"
static int is_prime(int* const pflag, int v)
Modified: trunk/exp-drd/tests/pth_cond_race.c
===================================================================
--- trunk/exp-drd/tests/pth_cond_race.c 2008-06-30 13:15:33 UTC (rev 8321)
+++ trunk/exp-drd/tests/pth_cond_race.c 2008-06-30 17:10:29 UTC (rev 8322)
@@ -6,7 +6,7 @@
#include <stdio.h> // printf()
#include <pthread.h>
#include <unistd.h> // usleep()
-#include "../drd_clientreq.h"
+#include "../drd.h"
// Local functions declarations.
Modified: trunk/exp-drd/tests/pth_detached.c
===================================================================
--- trunk/exp-drd/tests/pth_detached.c 2008-06-30 13:15:33 UTC (rev 8321)
+++ trunk/exp-drd/tests/pth_detached.c 2008-06-30 17:10:29 UTC (rev 8322)
@@ -8,7 +8,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
-#include "../drd_clientreq.h"
+#include "../drd.h"
static int s_finished_count;
Modified: trunk/exp-drd/tests/pth_detached_sem.c
===================================================================
--- trunk/exp-drd/tests/pth_detached_sem.c 2008-06-30 13:15:33 UTC (rev 8321)
+++ trunk/exp-drd/tests/pth_detached_sem.c 2008-06-30 17:10:29 UTC (rev 8322)
@@ -13,7 +13,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
-#include "../drd_clientreq.h"
+#include "../drd.h"
static sem_t s_sem;
Modified: trunk/exp-drd/tests/rwlock_race.c
===================================================================
--- trunk/exp-drd/tests/rwlock_race.c 2008-06-30 13:15:33 UTC (rev 8321)
+++ trunk/exp-drd/tests/rwlock_race.c 2008-06-30 17:10:29 UTC (rev 8322)
@@ -11,7 +11,7 @@
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
-#include "../drd_clientreq.h"
+#include "../drd.h"
static pthread_rwlock_t s_rwlock;
Modified: trunk/exp-drd/tests/sem_as_mutex.c
===================================================================
--- trunk/exp-drd/tests/sem_as_mutex.c 2008-06-30 13:15:33 UTC (rev 8321)
+++ trunk/exp-drd/tests/sem_as_mutex.c 2008-06-30 17:10:29 UTC (rev 8322)
@@ -29,7 +29,7 @@
#include <pthread.h>
#include <semaphore.h>
#include <unistd.h> // usleep()
-#include "../drd_clientreq.h"
+#include "../drd.h"
// Local functions declarations.
Modified: trunk/exp-drd/tests/sigalrm.c
===================================================================
--- trunk/exp-drd/tests/sigalrm.c 2008-06-30 13:15:33 UTC (rev 8321)
+++ trunk/exp-drd/tests/sigalrm.c 2008-06-30 17:10:29 UTC (rev 8322)
@@ -9,8 +9,9 @@
#include <time.h>
#include <unistd.h>
#include <asm/unistd.h>
-#include "../drd_clientreq.h"
+#include "../drd.h"
+
static int s_debug = 0;
@@ -23,13 +24,6 @@
#endif
}
-static int getvgtid()
-{
- int res;
- VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__GET_THREAD_SELF, 0, 0, 0,0,0);
- return res;
-}
-
static void print_thread_id(const char* const label)
{
if (s_debug)
@@ -37,7 +31,7 @@
char msg[256];
snprintf(msg, sizeof(msg),
"%spid %d / kernel thread ID %d / Valgrind thread ID %d\n",
- label, getpid(), getktid(), getvgtid());
+ label, getpid(), getktid(), vg_get_drd_threadid());
write(STDOUT_FILENO, msg, strlen(msg));
}
}
@@ -67,7 +61,7 @@
if (argc > 1)
s_debug = 1;
- vgthreadid = getvgtid();
+ vgthreadid = vg_get_drd_threadid();
print_thread_id("main: ");
|