diff options
author | David Smith <dsmith@redhat.com> | 2008-06-23 14:42:03 -0500 |
---|---|---|
committer | David Smith <dsmith@redhat.com> | 2008-06-23 14:43:07 -0500 |
commit | 30fa13cdf6b8225d590642226e1255d3f574ef8a (patch) | |
tree | 2bb1c1b7f5419b12592bca1fb66a1311e1574cfc /runtime/syscall.h | |
parent | 86e6b319e54eb69a3c83d148f5ca8d62e041f05c (diff) | |
download | systemtap-steved-30fa13cdf6b8225d590642226e1255d3f574ef8a.tar.gz systemtap-steved-30fa13cdf6b8225d590642226e1255d3f574ef8a.tar.xz systemtap-steved-30fa13cdf6b8225d590642226e1255d3f574ef8a.zip |
Made RHEL5 changes.
2008-06-23 David Smith <dsmith@redhat.com>
* task_finder_vma.c (__stp_tf_vma_hash): Improved determination of
whether this is a 64-bit platform.
* syscall.h: Handles kernels with older style register
definitions.
Diffstat (limited to 'runtime/syscall.h')
-rw-r--r-- | runtime/syscall.h | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/runtime/syscall.h b/runtime/syscall.h index 3e37b550..36fed2ff 100644 --- a/runtime/syscall.h +++ b/runtime/syscall.h @@ -84,7 +84,13 @@ __stp_user_syscall_return_value(struct task_struct *task, struct pt_regs *regs) regs->ax = (long) (int) regs->ax; # endif #endif +#if defined(STAPCONF_X86_UNIREGS) return ®s->ax; +#elif defined(__x86_64__) + return ®s->rax; +#elif defined (__i386__) + return ®s->eax; +#endif } #endif @@ -93,34 +99,56 @@ static inline long * __stp_user_syscall_arg(struct task_struct *task, struct pt_regs *regs, unsigned int n) { -#if defined(CONFIG_X86_32) +#if defined(__i386__) if (n > 5) { _stp_error("syscall arg > 5"); return NULL; } +#if defined(STAPCONF_X86_UNIREGS) return ®s->bx + n; -#elif defined(CONFIG_X86_64) +#else + return ®s->ebx + n; +#endif +#elif defined(__x86_64__) #ifdef CONFIG_IA32_EMULATION if (test_tsk_thread_flag(task, TIF_IA32)) switch (n) { +#if defined(STAPCONF_X86_UNIREGS) case 0: return ®s->bx; case 1: return ®s->cx; case 2: return ®s->dx; case 3: return ®s->si; case 4: return ®s->di; case 5: return ®s->bp; +#else + case 0: return ®s->rbx; + case 1: return ®s->rcx; + case 2: return ®s->rdx; + case 3: return ®s->rsi; + case 4: return ®s->rdi; + case 5: return ®s->rbp; +#endif default: _stp_error("syscall arg > 5"); return NULL; } #endif /* CONFIG_IA32_EMULATION */ switch (n) { +#if defined(STAPCONF_X86_UNIREGS) case 0: return ®s->di; case 1: return ®s->si; case 2: return ®s->dx; case 3: return ®s->r10; case 4: return ®s->r8; case 5: return ®s->r9; +#else + case 0: return ®s->rdi; + case 1: return ®s->rsi; + case 2: return ®s->rdx; + case 3: return ®s->r10; + case 4: return ®s->r8; + case 5: return ®s->r9; +#endif default: _stp_error("syscall arg > 5"); return NULL; |