diff options
author | Jim Keniston <jkenisto@us.ibm.com> | 2008-08-05 14:39:01 -0700 |
---|---|---|
committer | Jim Keniston <jkenisto@us.ibm.com> | 2008-08-05 14:39:01 -0700 |
commit | 44ab6f3be72e7b5eeaa2514cea0553b87007ee9c (patch) | |
tree | 9e219cf0a2de40e4ecfbb409e2e1ef8758497a04 | |
parent | 5e112f921fb7b05115f021319e18f90e68594a19 (diff) | |
download | systemtap-steved-44ab6f3be72e7b5eeaa2514cea0553b87007ee9c.tar.gz systemtap-steved-44ab6f3be72e7b5eeaa2514cea0553b87007ee9c.tar.xz systemtap-steved-44ab6f3be72e7b5eeaa2514cea0553b87007ee9c.zip |
Fix i386 dwarf_register_4() to work in uprobe handlers.
-rw-r--r-- | runtime/loc2c-runtime.h | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/runtime/loc2c-runtime.h b/runtime/loc2c-runtime.h index 215676ee..1247da51 100644 --- a/runtime/loc2c-runtime.h +++ b/runtime/loc2c-runtime.h @@ -113,16 +113,13 @@ kernel mode, it is not saved in the trap frame (struct pt_regs). The `esp' (and `xss') fields are valid only for a user-mode trap. For a kernel mode trap, the interrupted state's esp is actually an - address inside where the `struct pt_regs' on the kernel trap stack points. - - For now we assume all traps are from kprobes in kernel-mode code. - For extra paranoia, could do BUG_ON((regs->xcs & 3) == 3). */ + address inside where the `struct pt_regs' on the kernel trap stack points. */ #define dwarf_register_0(regs) regs->eax #define dwarf_register_1(regs) regs->ecx #define dwarf_register_2(regs) regs->edx #define dwarf_register_3(regs) regs->ebx -#define dwarf_register_4(regs) ((long) ®s->esp) +#define dwarf_register_4(regs) (user_mode(regs) ? regs->esp : (long)®s->esp) #define dwarf_register_5(regs) regs->ebp #define dwarf_register_6(regs) regs->esi #define dwarf_register_7(regs) regs->edi |