summaryrefslogtreecommitdiffstats
path: root/tapset/utrace.stp
diff options
context:
space:
mode:
authorDave Brolley <brolley@redhat.com>2009-04-21 11:11:02 -0400
committerDave Brolley <brolley@redhat.com>2009-04-21 11:11:02 -0400
commit09fd19d66b9e3318e9e33f604eb2dbe623955123 (patch)
tree073dc18e4ca3ca4bac674c7225a9a54e5fafc7f7 /tapset/utrace.stp
parentd4935c2f80122827a02d9f66c020d7e8ef6d6ade (diff)
parent9a6d143c6e2c79cee1082d0455da92cfa78b03c7 (diff)
downloadsystemtap-steved-09fd19d66b9e3318e9e33f604eb2dbe623955123.tar.gz
systemtap-steved-09fd19d66b9e3318e9e33f604eb2dbe623955123.tar.xz
systemtap-steved-09fd19d66b9e3318e9e33f604eb2dbe623955123.zip
Merge branch 'master' of git://sources.redhat.com/git/systemtap
Conflicts: aclocal.m4 configure
Diffstat (limited to 'tapset/utrace.stp')
-rw-r--r--tapset/utrace.stp24
1 files changed, 15 insertions, 9 deletions
diff --git a/tapset/utrace.stp b/tapset/utrace.stp
index 00f427e6..0d26ed5f 100644
--- a/tapset/utrace.stp
+++ b/tapset/utrace.stp
@@ -1,20 +1,26 @@
/* utrace-only subset of register accessors */
-
%{
#include "syscall.h"
%}
-function _utrace_syscall_nr:long () %{
- THIS->__retvalue = syscall_get_nr(current, CONTEXT->regs); /* pure */
+function _utrace_syscall_nr:long () %{ /* pure */
+ THIS->__retvalue = syscall_get_nr(current, CONTEXT->regs);
%}
-function _utrace_syscall_arg:long (n:long) %{
- unsigned long arg = 0; /* pure */
- syscall_get_arguments(current, CONTEXT->regs, (int)THIS->n, 1, &arg);
- THIS->__retvalue = arg;
+function _utrace_syscall_arg:long (n:long) %{ /* pure */
+ unsigned long arg = 0;
+ syscall_get_arguments(current, CONTEXT->regs, (int)THIS->n, 1, &arg);
+ THIS->__retvalue = arg;
%}
-function _utrace_syscall_return:long () %{
- THIS->__retvalue = syscall_get_return_value(current, CONTEXT->regs); /* pure */
+function _utrace_syscall_return:long () %{ /* pure */
+ /*
+ * Here's the reason for the "unsigned long" cast. Since all
+ * values inside systemtap are 64-bit numbers, return values were
+ * getting sign extended. This caused return values to not match
+ * up with the same values passes as arguments.
+ */
+ THIS->__retvalue = (unsigned long)syscall_get_return_value(current,
+ CONTEXT->regs);
%}