1b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include <stdlib.h>
2b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include <stdio.h>
3b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include <string.h>
4b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void breakme(int line)
6b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   fprintf(stderr, "breakme function called from line %d\n", line);
8b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   fflush(stderr);
9b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic char undefined[10] = "undefined";
11b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovint main (int argc, char *argv[])
12b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
13b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
14b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* we will test
15b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      read watchpoint at 0,
16b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      read/write watchpoints at 4
17b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      write watchpoints at 8 */
18b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
19b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   breakme(__LINE__); //break1
20b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
21b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* We verify read watchpoints are triggered at 0 and 4, not at 8 */
22b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   fprintf(stderr, "before reading 0/4/8\n");
23b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (undefined[0] == 'u')
24b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      fprintf(stderr, "u: Expected value at 0\n");
25b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   else
26b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      fprintf(stderr, "u: Unexpected value at 0\n");
27b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
28b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (undefined[4] == 'f')
29b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      fprintf(stderr, "f: Expected value at 4\n");
30b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   else
31b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      fprintf(stderr, "f: Unexpected value at 4\n");
32b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
33b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (undefined[8] == 'd')
34b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      fprintf(stderr, "d: Expected value at 8\n");
35b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   else
36b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      fprintf(stderr, "d: Unexpected value at 8\n");
37b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
38b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
39b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* We verify write watchpoints are triggered at 4 and 8, not at 0 */
40b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   fprintf(stderr, "before writing 0\n");
41b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   undefined[0] = 'U';
42b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
43b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   fprintf(stderr, "before writing 4\n");
44b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   undefined[4] = 'F';
45b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
46b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   fprintf(stderr, "before writing 8\n");
47b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   undefined[8] = 'D';
48b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
49b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   fprintf(stderr, "after writing 8\n");
50b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
51b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* after having remove the watchpoints, check we can read and write
52b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      without break. */
53b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   fprintf(stderr, "value %s\n", undefined);
54b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
55b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   fprintf(stderr, "before rewriting 0\n");
56b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   undefined[0] = '0';
57b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
58b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   fprintf(stderr, "before rewriting 4\n");
59b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   undefined[4] = '4';
60b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
61b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   fprintf(stderr, "before rewriting 8\n");
62b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   undefined[8] = '8';
63b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
64b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   fprintf(stderr, "value %s\n", undefined);
65b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
66436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   {
67436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      char *k50 = malloc(50000);
68436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      memset (k50, 'p', 50000);
69436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      fprintf(stderr, "value of k50[1000] %c\n", k50[1000]);
70436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      free(k50); //break2
71436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   }
72436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
73b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   exit(0);
74b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
75