File: unified_annotations.h

package info (click to toggle)
valgrind 1%3A3.7.0-6
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 58,060 kB
  • sloc: ansic: 396,820; xml: 18,453; cpp: 6,698; asm: 5,584; perl: 5,008; sh: 4,852; makefile: 3,965; exp: 625; haskell: 195
file content (70 lines) | stat: -rw-r--r-- 1,419 bytes parent folder | download
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
65
66
67
68
69
70
#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_ */

/*
 * Local variables:
 * c-basic-offset: 2
 * End:
 */