summaryrefslogtreecommitdiffstats
path: root/runtime
diff options
context:
space:
mode:
authorDave Brolley <brolley@redhat.com>2009-04-30 11:45:09 -0400
committerDave Brolley <brolley@redhat.com>2009-04-30 11:45:09 -0400
commitb03d329d5ad9d22d684b61859971a7b12b5e5104 (patch)
treec32105776a6c009ed96f5c1a2205849f8cda647d /runtime
parent4c797c5eaeb10d8d22501c5ad82766b69d8cf988 (diff)
parent3ba2eb82cafa938c1c3f7ef9d2da06912a49d8e0 (diff)
downloadsystemtap-steved-b03d329d5ad9d22d684b61859971a7b12b5e5104.tar.gz
systemtap-steved-b03d329d5ad9d22d684b61859971a7b12b5e5104.tar.xz
systemtap-steved-b03d329d5ad9d22d684b61859971a7b12b5e5104.zip
Merge branch 'master' of git://sources.redhat.com/git/systemtap
Diffstat (limited to 'runtime')
-rw-r--r--runtime/itrace.c3
-rw-r--r--runtime/ptrace_compatibility.h50
2 files changed, 52 insertions, 1 deletions
diff --git a/runtime/itrace.c b/runtime/itrace.c
index 97ba427e..68f85301 100644
--- a/runtime/itrace.c
+++ b/runtime/itrace.c
@@ -18,6 +18,7 @@
#include <linux/sched.h>
#include <linux/rcupdate.h>
#include <linux/utrace.h>
+#include "ptrace_compatibility.h"
/* PR9974: Adapt to struct renaming. */
#ifdef UTRACE_API_VERSION
@@ -143,7 +144,7 @@ static u32 usr_itrace_report_quiesce(enum utrace_resume_action action,
WARN_ON(!ui);
#ifdef UTRACE_ORIG_VERSION
- return (ui->step_flag); // XXX XXX XXX
+ return (ui->step_flag | UTRACE_ACTION_NEWSTATE);
#else
return (event == 0 ? ui->step_flag : UTRACE_RESUME);
#endif
diff --git a/runtime/ptrace_compatibility.h b/runtime/ptrace_compatibility.h
new file mode 100644
index 00000000..939c3b56
--- /dev/null
+++ b/runtime/ptrace_compatibility.h
@@ -0,0 +1,50 @@
+#ifndef _PTRACE_COMPATIBILITY_H_
+#define _PTRACE_COMPATIBILITY_H_
+
+#include <linux/ptrace.h>
+
+/* Older kernel's linux/ptrace.h don't define
+ * arch_has_single_step()/arch_has_block_step(). */
+
+#ifndef arch_has_single_step
+
+#include <linux/tracehook.h>
+
+/**
+ * arch_has_single_step - does this CPU support user-mode single-step?
+ *
+ * If this is defined, then there must be function declarations or
+ * inlines for user_enable_single_step() and user_disable_single_step().
+ * arch_has_single_step() should evaluate to nonzero iff the machine
+ * supports instruction single-step for user mode.
+ * It can be a constant or it can test a CPU feature bit.
+ */
+
+#ifdef ARCH_HAS_SINGLE_STEP
+#define arch_has_single_step() (ARCH_HAS_SINGLE_STEP)
+#else
+#define arch_has_single_step() (0)
+#endif /* ARCH_HAS_SINGLE_STEP */
+
+#endif /* arch_has_single_step */
+
+#ifndef arch_has_block_step
+/**
+ * arch_has_block_step - does this CPU support user-mode block-step?
+ *
+ * If this is defined, then there must be a function declaration or inline
+ * for user_enable_block_step(), and arch_has_single_step() must be defined
+ * too. arch_has_block_step() should evaluate to nonzero iff the machine
+ * supports step-until-branch for user mode. It can be a constant or it
+ * can test a CPU feature bit.
+ */
+
+#ifdef ARCH_HAS_BLOCK_STEP
+#define arch_has_block_step() (ARCH_HAS_BLOCK_STEP)
+#else
+#define arch_has_block_step() (0)
+#endif /* ARCH_HAS_BLOCK_STEP */
+
+#endif /* arch_has_block_step */
+
+#endif /* _PTRACE_COMPATIBILITY_H_ */