commit 094b772eb61826a92baa02275769ac137991ad65
parent 5b8fa897dd2f03a55fc1509aef50e86f5e4d6e34
Author: sin <sin@2f30.org>
Date:   Fri,  1 Mar 2013 12:53:46 +0000
ops: Add traceme() and single_step()
Add these two wrappers to make things easier when porting to
OpenBSD.  The ptrace request names are slightly different on
OpenBSD and we don't want to use #ifdefs.
Diffstat:
3 files changed, 28 insertions(+), 10 deletions(-)
diff --git a/data.h b/data.h
@@ -134,6 +134,8 @@ void dump_mem_region_diff(struct mem_region_diff *rdiff);
 void free_mem_region_diff(struct mem_region_diff *rdiff);
 
 /* *_ops.c */
+int traceme(void);
+int single_step(pid_t pid);
 void readmem(pid_t pid, void *buf, off_t offset, size_t size);
 
 #endif
diff --git a/linux_ops.c b/linux_ops.c
@@ -2,6 +2,28 @@
 
 #include "data.h"
 
+int
+traceme(void)
+{
+	int ret;
+
+	ret = ptrace(PTRACE_TRACEME, 0, NULL, NULL);
+	if (ret < 0)
+		err(1, "ptrace");
+	return ret;
+}
+
+int
+single_step(pid_t pid)
+{
+	int ret;
+
+	ret = ptrace(PTRACE_SINGLESTEP, pid, NULL, NULL);
+	if (ret < 0)
+		err(1, "ptrace");
+	return ret;
+}
+
 void
 readmem(pid_t pid, void *buf, off_t offset, size_t size)
 {
diff --git a/memzap.c b/memzap.c
@@ -10,7 +10,7 @@ main(int argc, char *argv[])
 	struct mem_region *mr_old, *mr_new;
 	struct mem_tree *mt_old;
 	struct mem_region_diff *rdiff;
-	int ret, stat;
+	int stat;
 	pid_t pid;
 	unsigned char *buf, *buf_new;
 	char *addr;
@@ -36,9 +36,7 @@ main(int argc, char *argv[])
 
 	switch (pid) {
 	case 0:
-		ret = ptrace(PTRACE_TRACEME, 0, NULL, NULL);
-		if (ret < 0)
-			err(1, "ptrace");
+		traceme();
 		execl(argv[1], argv[1], (char *)NULL);
 		_Exit(1);
 	default:
@@ -56,9 +54,7 @@ main(int argc, char *argv[])
 		printf("Single stepping child with pid %jd\n",
 		       (intmax_t)pid);
 
-	ret = ptrace(PTRACE_SINGLESTEP, pid, NULL, NULL);
-	if (ret < 0)
-		err(1, "ptrace");
+	single_step(pid);
 	waitpid(pid, &stat, WSTOPPED);
 
 	if (!WIFSTOPPED(stat))
@@ -74,9 +70,7 @@ main(int argc, char *argv[])
 		if (!mt_old)
 			errx(1, "Failed to build memory tree\n");
 
-		ret = ptrace(PTRACE_SINGLESTEP, pid, NULL, NULL);
-		if (ret < 0)
-			err(1, "ptrace");
+		single_step(pid);
 		waitpid(pid, &stat, WSTOPPED);
 
 		if (!WIFSTOPPED(stat)) {