Implement a GDB server in Valgrind.  See #214909.
(Philippe Waroquiers, philippe.waroquiers@skynet.be)



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11727 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/gdbserver_tests/watchpoints.c b/gdbserver_tests/watchpoints.c
new file mode 100644
index 0000000..ae05d8f
--- /dev/null
+++ b/gdbserver_tests/watchpoints.c
@@ -0,0 +1,67 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+static void breakme(int line)
+{
+   fprintf(stderr, "breakme function called from line %d\n", line);
+   fflush(stderr);
+}
+static char undefined[10] = "undefined";
+int main (int argc, char *argv[])
+{
+
+   /* we will test 
+      read watchpoint at 0,
+      read/write watchpoints at 4
+      write watchpoints at 8 */
+
+   breakme(__LINE__); //break1
+
+   /* We verify read watchpoints are triggered at 0 and 4, not at 8 */
+   fprintf(stderr, "before reading 0/4/8\n");
+   if (undefined[0] == 'u')
+      fprintf(stderr, "u: Expected value at 0\n");
+   else
+      fprintf(stderr, "u: Unexpected value at 0\n");
+   
+   if (undefined[4] == 'f')
+      fprintf(stderr, "f: Expected value at 4\n");
+   else
+      fprintf(stderr, "f: Unexpected value at 4\n");
+   
+   if (undefined[8] == 'd')
+      fprintf(stderr, "d: Expected value at 8\n");
+   else
+      fprintf(stderr, "d: Unexpected value at 8\n");
+
+
+   /* We verify write watchpoints are triggered at 4 and 8, not at 0 */
+   fprintf(stderr, "before writing 0\n");
+   undefined[0] = 'U';
+
+   fprintf(stderr, "before writing 4\n");
+   undefined[4] = 'F';
+
+   fprintf(stderr, "before writing 8\n");
+   undefined[8] = 'D';
+
+   fprintf(stderr, "after writing 8\n");
+
+   /* after having remove the watchpoints, check we can read and write
+      without break. */
+   fprintf(stderr, "value %s\n", undefined);
+
+   fprintf(stderr, "before rewriting 0\n");
+   undefined[0] = '0';
+
+   fprintf(stderr, "before rewriting 4\n");
+   undefined[4] = '4';
+
+   fprintf(stderr, "before rewriting 8\n");
+   undefined[8] = '8';
+   
+   fprintf(stderr, "value %s\n", undefined);
+
+   exit(0);
+}