File: metadata.c

package info (click to toggle)
valgrind 1%3A3.19.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 170,080 kB
  • sloc: ansic: 782,981; exp: 26,134; xml: 22,780; asm: 14,072; cpp: 7,903; makefile: 6,768; perl: 6,097; sh: 5,669; javascript: 981; awk: 148
file content (50 lines) | stat: -rw-r--r-- 1,126 bytes parent folder | download | duplicates (12)
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

#include <stdio.h>
#include <stdlib.h>
#include "../memcheck.h"

/* Program demonstrating copying of metadata in memcheck. */

int main ( void )
{
  int* a = malloc(10 * sizeof(int));
  int* b = malloc(10 * sizeof(int));
  int* v = malloc(10 * sizeof(int));
  int i, sum, res;

  for (i = 0; i < 10; i++) {
     if (i != 5) 
        a[i] = i;
  }

  /* a[0 .. 4] and [6 .. 9] are defined, [5] is undefined. */
  for (i = 0; i < 10; i++)
     b[i] = 0;

  /* b[0 .. 9] is defined. */

  /* Get metadata for a and put it in v. */
  res = VALGRIND_GET_VBITS(a, v, 10*sizeof(int) );
  printf("result of GET is %d (1 for success)\n", res);

  for (i = 0; i < 10; i++)
     printf("%d 0x%08x\n", i, v[i]);

  /* and copy to b. */
  res = VALGRIND_SET_VBITS(b, v, 10*sizeof(int) );
  printf("result of SET is %d (1 for success)\n", res);
  
  /* Now we should have that b[5] is undefined since a[5] is
     undefined. */
  sum = 100;
  for (i = 0; i < 10; i++)
     sum += b[i];

  /* V should yelp at this point, that sum is undefined. */
  if (sum == 0) 
    printf("sum == 0\n"); 
  else
    printf("sum != 0\n");

  return 0;
}