summaryrefslogtreecommitdiffstats
path: root/runtime/syscall.h
diff options
context:
space:
mode:
authorDavid Smith <dsmith@redhat.com>2008-06-23 14:42:03 -0500
committerDavid Smith <dsmith@redhat.com>2008-06-23 14:43:07 -0500
commit30fa13cdf6b8225d590642226e1255d3f574ef8a (patch)
tree2bb1c1b7f5419b12592bca1fb66a1311e1574cfc /runtime/syscall.h
parent86e6b319e54eb69a3c83d148f5ca8d62e041f05c (diff)
downloadsystemtap-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.h32
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 &regs->ax;
+#elif defined(__x86_64__)
+ return &regs->rax;
+#elif defined (__i386__)
+ return &regs->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 &regs->bx + n;
-#elif defined(CONFIG_X86_64)
+#else
+ return &regs->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 &regs->bx;
case 1: return &regs->cx;
case 2: return &regs->dx;
case 3: return &regs->si;
case 4: return &regs->di;
case 5: return &regs->bp;
+#else
+ case 0: return &regs->rbx;
+ case 1: return &regs->rcx;
+ case 2: return &regs->rdx;
+ case 3: return &regs->rsi;
+ case 4: return &regs->rdi;
+ case 5: return &regs->rbp;
+#endif
default:
_stp_error("syscall arg > 5");
return NULL;
}
#endif /* CONFIG_IA32_EMULATION */
switch (n) {
+#if defined(STAPCONF_X86_UNIREGS)
case 0: return &regs->di;
case 1: return &regs->si;
case 2: return &regs->dx;
case 3: return &regs->r10;
case 4: return &regs->r8;
case 5: return &regs->r9;
+#else
+ case 0: return &regs->rdi;
+ case 1: return &regs->rsi;
+ case 2: return &regs->rdx;
+ case 3: return &regs->r10;
+ case 4: return &regs->r8;
+ case 5: return &regs->r9;
+#endif
default:
_stp_error("syscall arg > 5");
return NULL;