ftmemsim-valgrind/drd/tests/annotate_ignore_write.c
Bart Van Assche 58b046b78d drd, s390: Make the annotate_ignore_* and the pth_barrier* tests produce
the same output on s390 as on other systems (not tested yet).


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12103
2011-10-05 13:10:30 +00:00

70 lines
1.2 KiB
C

/* Test program for the annotations that suppress write operations. */
#include <assert.h> /* assert() */
#include <pthread.h>
#include <stdint.h>
#include <stdio.h> /* EOF */
#include <unistd.h> /* getopt() */
#include "../../drd/drd.h"
static int8_t s_a;
static int8_t s_b;
static int8_t s_c;
static void* thread_func(void* arg)
{
/* Read s_a and modify s_b. */
s_b = s_a;
/* Modify s_c. */
s_c = 1;
return NULL;
}
int main(int argc, char** argv)
{
const struct timespec delay = { 0, 100 * 1000 * 1000 };
int optchar;
int ign_rw = 1;
pthread_t tid;
while ((optchar = getopt(argc, argv, "r")) != EOF)
{
switch (optchar)
{
case 'r':
ign_rw = 0;
break;
default:
assert(0);
}
}
pthread_create(&tid, 0, thread_func, 0);
/* Let the code in the created thread run first. */
nanosleep(&delay, 0);
if (ign_rw)
ANNOTATE_IGNORE_WRITES_BEGIN();
/* Read s_b and modify s_a. */
s_a = s_b;
if (ign_rw)
ANNOTATE_IGNORE_WRITES_END();
/*
* Insert a delay here in order to make sure the load of s_c happens
* after s_c has been modified.
*/
nanosleep(&delay, 0);
/* Read s_c and modify s_a. */
s_a = s_c;
pthread_join(tid, 0);
fprintf(stderr, "Finished.\n");
return 0;
}