diff options
author | David Smith <dsmith@redhat.com> | 2009-04-27 15:53:21 -0500 |
---|---|---|
committer | David Smith <dsmith@redhat.com> | 2009-04-27 15:53:21 -0500 |
commit | 975a582b1274eb66088466a66a2eb2c3a70cf766 (patch) | |
tree | 6e03237e25be2e1ec639666fa85688743598c1ce | |
parent | 097e4a5b397b9e826453e01caa1f8169886128c5 (diff) | |
download | systemtap-steved-975a582b1274eb66088466a66a2eb2c3a70cf766.tar.gz systemtap-steved-975a582b1274eb66088466a66a2eb2c3a70cf766.tar.xz systemtap-steved-975a582b1274eb66088466a66a2eb2c3a70cf766.zip |
Fixed itrace on RHEL5 (PR10091).
PR10091 fix.
* runtime/itrace.c: Includes ptrace_compatibility.h.
(usr_itrace_report_quiesce): Corrected return value for original version
of utrace.
* runtime/ptrace_compatibility.h: Defines arch_has_single_step() and
arch_has_block_step() in terms of ARCH_HAS_SINGLE_STEP and
ARCH_HAS_BLOCK_STEP.
-rw-r--r-- | runtime/itrace.c | 3 | ||||
-rw-r--r-- | runtime/ptrace_compatibility.h | 50 |
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_ */ |