From: Bart Van Assche Date: Mon, 30 Jun 2008 17:10:29 +0000 (+0000) Subject: Split client requests into public and tool-internal. X-Git-Tag: svn/VALGRIND_3_4_0~401 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=56913b806c17cf1ea766c3404c9a71218be3b6a9;p=thirdparty%2Fvalgrind.git Split client requests into public and tool-internal. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8322 --- diff --git a/exp-drd/Makefile.am b/exp-drd/Makefile.am index 9f033852e1..16199f4043 100644 --- a/exp-drd/Makefile.am +++ b/exp-drd/Makefile.am @@ -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 index 0000000000..d3be7bd2e6 --- /dev/null +++ b/exp-drd/drd.h @@ -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 */ diff --git a/exp-drd/drd_clientreq.h b/exp-drd/drd_clientreq.h index 46f56e241c..595a8eeb40 100644 --- a/exp-drd/drd_clientreq.h +++ b/exp-drd/drd_clientreq.h @@ -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 diff --git a/exp-drd/tests/fp_race.c b/exp-drd/tests/fp_race.c index d23d7580b8..683fc6d6bf 100644 --- a/exp-drd/tests/fp_race.c +++ b/exp-drd/tests/fp_race.c @@ -28,7 +28,7 @@ #include // printf() #include #include // usleep() -#include "../drd_clientreq.h" +#include "../drd.h" // Local functions declarations. diff --git a/exp-drd/tests/omp_prime.c b/exp-drd/tests/omp_prime.c index 69a7c79a7d..bc4df51765 100644 --- a/exp-drd/tests/omp_prime.c +++ b/exp-drd/tests/omp_prime.c @@ -10,7 +10,7 @@ #include #include #include // getopt() -#include "../drd_clientreq.h" +#include "../drd.h" static int is_prime(int* const pflag, int v) diff --git a/exp-drd/tests/pth_cond_race.c b/exp-drd/tests/pth_cond_race.c index ad77bacf62..cc830dec55 100644 --- a/exp-drd/tests/pth_cond_race.c +++ b/exp-drd/tests/pth_cond_race.c @@ -6,7 +6,7 @@ #include // printf() #include #include // usleep() -#include "../drd_clientreq.h" +#include "../drd.h" // Local functions declarations. diff --git a/exp-drd/tests/pth_detached.c b/exp-drd/tests/pth_detached.c index 8e64f91427..a2857e046e 100644 --- a/exp-drd/tests/pth_detached.c +++ b/exp-drd/tests/pth_detached.c @@ -8,7 +8,7 @@ #include #include #include -#include "../drd_clientreq.h" +#include "../drd.h" static int s_finished_count; diff --git a/exp-drd/tests/pth_detached_sem.c b/exp-drd/tests/pth_detached_sem.c index 91b0bb0cf7..d76f6c97d7 100644 --- a/exp-drd/tests/pth_detached_sem.c +++ b/exp-drd/tests/pth_detached_sem.c @@ -13,7 +13,7 @@ #include #include #include -#include "../drd_clientreq.h" +#include "../drd.h" static sem_t s_sem; diff --git a/exp-drd/tests/rwlock_race.c b/exp-drd/tests/rwlock_race.c index d3d29efa10..9f4fe0b052 100644 --- a/exp-drd/tests/rwlock_race.c +++ b/exp-drd/tests/rwlock_race.c @@ -11,7 +11,7 @@ #include #include #include -#include "../drd_clientreq.h" +#include "../drd.h" static pthread_rwlock_t s_rwlock; diff --git a/exp-drd/tests/sem_as_mutex.c b/exp-drd/tests/sem_as_mutex.c index 7a1c358ee3..d88b35019a 100644 --- a/exp-drd/tests/sem_as_mutex.c +++ b/exp-drd/tests/sem_as_mutex.c @@ -29,7 +29,7 @@ #include #include #include // usleep() -#include "../drd_clientreq.h" +#include "../drd.h" // Local functions declarations. diff --git a/exp-drd/tests/sigalrm.c b/exp-drd/tests/sigalrm.c index e1d0a6838a..042ad31f13 100644 --- a/exp-drd/tests/sigalrm.c +++ b/exp-drd/tests/sigalrm.c @@ -9,7 +9,8 @@ #include #include #include -#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: ");