File: unified_annotations.h

package info (click to toggle)
valgrind 1%3A3.12.0~svn20160714-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 120,428 kB
  • ctags: 70,855
  • sloc: ansic: 674,645; exp: 26,134; xml: 21,574; asm: 7,570; cpp: 7,567; makefile: 7,380; sh: 6,188; perl: 5,855; haskell: 195
file content (64 lines) | stat: -rw-r--r-- 1,362 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#ifndef _UNIFIED_ANNOTATIONS_H_
#define _UNIFIED_ANNOTATIONS_H_


#include "../../drd/drd.h"


/*
 * Define annotation macros such that these can be intercepted by DRD, Helgrind
 * and ThreadSanitizer. See also
 * http://code.google.com/p/data-race-test/source/browse/trunk/dynamic_annotations/dynamic_annotations.h
 */
#define U_ANNOTATE_NEW_MEMORY(addr, size) ANNOTATE_NEW_MEMORY(addr, size)
#define U_ANNOTATE_HAPPENS_BEFORE(addr) U_AnnotateHappensBefore(addr)
#define U_ANNOTATE_HAPPENS_AFTER(addr) U_AnnotateHappensAfter(addr)
#define U_ANNOTATE_HAPPENS_DONE(addr)		\
  do {						\
    ANNOTATE_HAPPENS_DONE(addr);		\
  } while(0)


#ifdef __cplusplus
extern "C" {
#endif
#if 0
}
#endif


void  __attribute__((weak,noinline))
AnnotateCondVarSignal(const char *file, int line, const volatile void *cv)
{
  asm("");
}

void  __attribute__((weak,noinline))
AnnotateCondVarWait(const char *file, int line, const volatile void *cv,
		    const volatile void *lock)
{
  asm("");
}

static __inline__ void U_AnnotateHappensBefore(void* addr)
{
  ANNOTATE_HAPPENS_BEFORE(addr);
  AnnotateCondVarSignal(__FILE__, __LINE__, addr);
}

static __inline__ void U_AnnotateHappensAfter(void *addr)
{
  ANNOTATE_HAPPENS_AFTER(addr);
  AnnotateCondVarWait(__FILE__, __LINE__, addr, NULL);
}


#if 0
{
#endif
#ifdef __cplusplus
}
#endif


#endif /* _UNIFIED_ANNOTATIONS_H_ */