Version 0.3.21

* Get rid of arch/breakpoint.c; we can do it arch-independent
diff --git a/sysdeps/linux-gnu/breakpoint.c b/sysdeps/linux-gnu/breakpoint.c
new file mode 100644
index 0000000..e2bd6d7
--- /dev/null
+++ b/sysdeps/linux-gnu/breakpoint.c
@@ -0,0 +1,49 @@
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <sys/ptrace.h>
+#include "arch.h"
+#include "options.h"
+#include "output.h"
+
+static unsigned char break_insn[] = BREAKPOINT_VALUE;
+
+void
+enable_breakpoint(pid_t pid, struct breakpoint * sbp) {
+	int i,j;
+
+	if (opt_d>1) {
+		output_line(0, "enable_breakpoint(%d,0x%08x)", pid, sbp->addr);
+	}
+
+	for(i=0; i < 1+((BREAKPOINT_LENGTH-1)/sizeof(long)); i++) {
+		long a = ptrace(PTRACE_PEEKTEXT, pid, sbp->addr + i*sizeof(long), 0);
+		for(j=0; j<sizeof(long) && i*sizeof(long)+j < BREAKPOINT_LENGTH; j++) {
+			unsigned char * bytes = (unsigned char *)&a;
+
+			sbp->orig_value[i*sizeof(long)+j] = bytes[i*sizeof(long)+j];
+			bytes[i*sizeof(long)+j] = break_insn[i*sizeof(long)+j];
+		}
+		ptrace(PTRACE_POKETEXT, pid, sbp->addr + i*sizeof(long), a);
+	}
+}
+
+void
+disable_breakpoint(pid_t pid, const struct breakpoint * sbp) {
+	int i,j;
+
+	if (opt_d>1) {
+		output_line(0, "disable_breakpoint(%d,0x%08x)", pid, sbp->addr);
+	}
+
+	for(i=0; i < 1+((BREAKPOINT_LENGTH-1)/sizeof(long)); i++) {
+		long a = ptrace(PTRACE_PEEKTEXT, pid, sbp->addr + i*sizeof(long), 0);
+		for(j=0; j<sizeof(long) && i*sizeof(long)+j < BREAKPOINT_LENGTH; j++) {
+			unsigned char * bytes = (unsigned char *)&a;
+
+			bytes[i*sizeof(long)+j] = sbp->orig_value[i*sizeof(long)+j];
+		}
+		ptrace(PTRACE_POKETEXT, pid, sbp->addr + i*sizeof(long), a);
+	}
+}