summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2012-07-10 16:36:32 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2012-07-10 16:36:32 +0200
commit26bc0606d96d05d30ba263939a0451889340a64c (patch)
tree66abf2673eebfc6147de934d097d71fe6b8d15f3
parentd7df59197d406b14af21cbc734d286c27108e2db (diff)
downloadstrace-26bc0606d96d05d30ba263939a0451889340a64c.tar.gz
Enable usage of PTRACE_SEIZE
* defs.h: Define USE_SEIZE to 1. Remove PTRACE_SEIZE_DEVEL and PTRACE_EVENT_STOP1. * strace.c (ptrace_attach_or_seize): Replace PTRACE_SEIZE_DEVEL with 0. (trace): Do not check for PTRACE_EVENT_STOP1. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--defs.h11
-rw-r--r--strace.c6
2 files changed, 8 insertions, 9 deletions
diff --git a/defs.h b/defs.h
index 9979fcbd9..7814bbd12 100644
--- a/defs.h
+++ b/defs.h
@@ -300,8 +300,10 @@ extern long ptrace(int, int, char *, long);
# define PTRACE_EVENT_EXIT 6
#endif
-/* Experimental code using PTRACE_SEIZE can be enabled here: */
-//# define USE_SEIZE 1
+/* Experimental code using PTRACE_SEIZE can be enabled here.
+ * This needs Linux kernel 3.4.x or later to work.
+ */
+#define USE_SEIZE 1
#ifdef USE_SEIZE
# undef PTRACE_SEIZE
@@ -310,11 +312,8 @@ extern long ptrace(int, int, char *, long);
# define PTRACE_INTERRUPT 0x4207
# undef PTRACE_LISTEN
# define PTRACE_LISTEN 0x4208
-# undef PTRACE_SEIZE_DEVEL
-# define PTRACE_SEIZE_DEVEL 0x80000000
# undef PTRACE_EVENT_STOP
-# define PTRACE_EVENT_STOP 7
-# define PTRACE_EVENT_STOP1 128
+# define PTRACE_EVENT_STOP 128
#endif
#if defined(I386)
diff --git a/strace.c b/strace.c
index 9d7ee7b31..e6d6d687f 100644
--- a/strace.c
+++ b/strace.c
@@ -335,7 +335,7 @@ ptrace_attach_or_seize(int pid)
int r;
if (!use_seize)
return ptrace(PTRACE_ATTACH, pid, 0, 0);
- r = ptrace(PTRACE_SEIZE, pid, 0, PTRACE_SEIZE_DEVEL);
+ r = ptrace(PTRACE_SEIZE, pid, 0, 0);
if (r)
return r;
r = ptrace(PTRACE_INTERRUPT, pid, 0, 0);
@@ -1382,7 +1382,7 @@ test_ptrace_seize(void)
* attaching tracee continues to run unless a trap condition occurs.
* PTRACE_SEIZE doesn't affect signal or group stop state.
*/
- if (ptrace(PTRACE_SEIZE, pid, 0, PTRACE_SEIZE_DEVEL) == 0) {
+ if (ptrace(PTRACE_SEIZE, pid, 0, 0) == 0) {
post_attach_sigstop = 0; /* this sets use_seize to 1 */
} else if (debug_flag) {
fprintf(stderr, "PTRACE_SEIZE doesn't work\n");
@@ -2074,7 +2074,7 @@ trace(void)
if (event != 0) {
/* Ptrace event */
#ifdef USE_SEIZE
- if (event == PTRACE_EVENT_STOP || event == PTRACE_EVENT_STOP1) {
+ if (event == PTRACE_EVENT_STOP) {
/*
* PTRACE_INTERRUPT-stop or group-stop.
* PTRACE_INTERRUPT-stop has sig == SIGTRAP here.