]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/valgrind/src/valgrind-3.6.0-svn/exp-ptrcheck/tests/arith_include2.c
update
[l4.git] / l4 / pkg / valgrind / src / valgrind-3.6.0-svn / exp-ptrcheck / tests / arith_include2.c
1
2    // Comment "both" means tp[0] and tp[-1] are both bad.
3    // Otherwise only tp[-1] is bad.
4
5    #define TTT \
6       if (__builtin_setjmp(TTT_jmpbuf) == 0) \
7       { fprintf(stderr,  "about to do %d [0]\n", __LINE__); tn = tp[ 0]; } \
8       if (__builtin_setjmp(TTT_jmpbuf) == 0) \
9       { fprintf(stderr, "about to do %d [-1]\n", __LINE__); tn = tp[-1]; }
10
11    #define b(    a,  c)   tp = (long*)a;                    TTT
12    #define ui(op, a,  c)  tp = (long*)op(long)a;            TTT
13    #define g(op, a,b,c)   tp = (long*)((long)a op (long)b); TTT
14    #define UNU            __attribute__((unused))
15
16    struct sigaction sigsegv;
17    // Scratch values
18    long  a, tn __attribute__((unused));
19    long* tp;
20    
21    // Known pointers
22    long* p = malloc(sizeof(long)*10);  UNU long* p2 = malloc(sizeof(long)*10);
23    UNU long* pp = p;
24    // Unknown pointers
25 //   long up[10], UNU up2[10];
26
27    // Known nonptrs;  make them zero and known
28    long n = a ^ a, UNU n2 = n+1, UNU n7F = 0x7fffffffUL, UNU nFF = ~n;
29    
30    // Unknown nonptrs;  make them zero but unknown
31    long un = 0x01100000UL, UNU un2 = un;
32
33    // Known nonptr, from pointerness range check
34    UNU long nn = 0;
35
36    // Intall SEGV handler 
37    memset(&sigsegv, 0, sizeof(sigsegv));
38    sigsegv.sa_handler = SEGV_handler;
39    sigsegv.sa_flags   = SA_NODEFER; /* so we can handle signal many times */
40    assert( 0 == sigemptyset( &sigsegv.sa_mask ) );
41    assert( 0 == sigaction(SIGSEGV, &sigsegv, NULL) );