1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be
3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file.
4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/dynamic_annotations.h"
6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef NVALGRIND
8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Each function is empty and called (via a macro) only in debug mode.
9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The arguments are captured by dynamic tools at runtime.
10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotateRWLockCreate(const char *file, int line,
12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                     const volatile void *lock) {}
13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotateRWLockDestroy(const char *file, int line,
14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                      const volatile void *lock) {}
15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotateRWLockAcquired(const char *file, int line,
16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                       const volatile void *lock, long is_w) {}
17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotateRWLockReleased(const char *file, int line,
18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                       const volatile void *lock, long is_w) {}
19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotateCondVarWait(const char *file, int line,
20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                    const volatile void *cv,
21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                    const volatile void *lock) {}
22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotateCondVarSignal(const char *file, int line,
23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                      const volatile void *cv) {}
24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotateCondVarSignalAll(const char *file, int line,
25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                         const volatile void *cv) {}
26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotatePublishMemoryRange(const char *file, int line,
27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                           const volatile void *address,
28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                           long size) {}
29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotatePCQCreate(const char *file, int line,
30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                  const volatile void *pcq) {}
31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotatePCQDestroy(const char *file, int line,
32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                   const volatile void *pcq) {}
33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotatePCQPut(const char *file, int line,
34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                               const volatile void *pcq) {}
35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotatePCQGet(const char *file, int line,
36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                               const volatile void *pcq) {}
37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotateNewMemory(const char *file, int line,
38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                  const volatile void *mem,
39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                  long size) {}
40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotateExpectRace(const char *file, int line,
41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                   const volatile void *mem,
42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                   const char *description) {}
43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotateBenignRace(const char *file, int line,
44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                   const volatile void *mem,
45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                   const char *description) {}
46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotateMutexIsUsedAsCondVar(const char *file, int line,
47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                            const volatile void *mu) {}
48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotateTraceMemory(const char *file, int line,
49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                    const volatile void *arg) {}
50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotateThreadName(const char *file, int line,
51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                   const char *name) {}
52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotateIgnoreReadsBegin(const char *file, int line) {}
53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotateIgnoreReadsEnd(const char *file, int line) {}
54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotateIgnoreWritesBegin(const char *file, int line) {}
55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotateIgnoreWritesEnd(const char *file, int line) {}
56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" void AnnotateNoOp(const char *file, int line,
57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                             const volatile void *arg) {}
58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // NVALGRIND
59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// When running under valgrind, a non-zero value will be returned.
61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottextern "C" int RunningOnValgrind() {
62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if defined(NVALGRIND)
63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return 0;
64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#else
65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return RUNNING_ON_VALGRIND;
66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif
67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
68