]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Split client requests into public and tool-internal.
authorBart Van Assche <bvanassche@acm.org>
Mon, 30 Jun 2008 17:10:29 +0000 (17:10 +0000)
committerBart Van Assche <bvanassche@acm.org>
Mon, 30 Jun 2008 17:10:29 +0000 (17:10 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8322

exp-drd/Makefile.am
exp-drd/drd.h [new file with mode: 0644]
exp-drd/drd_clientreq.h
exp-drd/tests/fp_race.c
exp-drd/tests/omp_prime.c
exp-drd/tests/pth_cond_race.c
exp-drd/tests/pth_detached.c
exp-drd/tests/pth_detached_sem.c
exp-drd/tests/rwlock_race.c
exp-drd/tests/sem_as_mutex.c
exp-drd/tests/sigalrm.c

index 9f033852e18c9894f5bee7691a45357c5a086613..16199f4043da65f5d5b8e07947c0c5c3f5068423 100644 (file)
@@ -100,6 +100,10 @@ DRD_SOURCES_COMMON =    \
   drd_semaphore.c       \
   drd_suppression.c
 
+drdincludedir = $(includedir)/valgrind
+
+drdinclude_HEADERS = drd.h
+
 noinst_HEADERS =        \
   drd_barrier.h         \
   drd_bitmap.h          \
diff --git a/exp-drd/drd.h b/exp-drd/drd.h
new file mode 100644 (file)
index 0000000..d3be7bd
--- /dev/null
@@ -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 */
index 46f56e241ceae1e9f531bc94959a3539648c35dd..595a8eeb400a6d317fb73d25eaa574a4a0e36288 100644 (file)
@@ -2,39 +2,17 @@
 #define __DRD_CLIENTREQ_H
 
 
-#include "valgrind.h" // VG_USERREQ_TOOL_BASE()
-
-
-#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); }
+#include "drd.h"
 
 
 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 @@ typedef enum
     gomp_barrier = 2
   } BarrierT;
 
+
 #endif //  __DRD_CLIENTREQ_H
index d23d7580b8d262e92c3b2a1679ef5b894664355c..683fc6d6bf0aacaec83fe94687fc7f0ac96a65d6 100644 (file)
@@ -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.
index 69a7c79a7daccbc71c301ca70ef944adcaec7290..bc4df51765dc61b675c7fe8c16150b71dffe4f6d 100644 (file)
@@ -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)
index ad77bacf62838ca42fd666b68dfbf3687886c809..cc830dec55be84279ea41b5ed7efee3cbfc6c7c2 100644 (file)
@@ -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.
index 8e64f91427b54009a7f34de33d6da20d5f9ce7b3..a2857e046efee3d1312455c1759e3c7b3106e13f 100644 (file)
@@ -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;
index 91b0bb0cf7d6e1de21ef7833ee57d01ffcacfc5a..d76f6c97d74568f53b375b5af853107d82b094a2 100644 (file)
@@ -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;
index d3d29efa107d50386008aa51e6daa1ba9af82f58..9f4fe0b052e271d63b398e432d47430c493688cf 100644 (file)
@@ -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;
index 7a1c358ee3f6f54f22f6a7f3f3cee8d6c0cc7a6a..d88b35019ac8d5463e2e2d2584180dbcafb1f1b3 100644 (file)
@@ -29,7 +29,7 @@
 #include <pthread.h>
 #include <semaphore.h>
 #include <unistd.h>    // usleep()
-#include "../drd_clientreq.h"
+#include "../drd.h"
 
 
 // Local functions declarations.
index e1d0a6838a3aba6f20b22a9faf683cb8ddacb281..042ad31f1371a805b29bec7e01b789531743acf3 100644 (file)
@@ -9,7 +9,8 @@
 #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 @@ static int getktid()
 #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 @@ static void print_thread_id(const char* const label)
     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 @@ int main(int argc, char** argv)
   if (argc > 1)
     s_debug = 1;
 
-  vgthreadid = getvgtid();
+  vgthreadid = vg_get_drd_threadid();
 
   print_thread_id("main: ");