summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkevinrs <kevinrs>2005-09-24 00:01:01 +0000
committerkevinrs <kevinrs>2005-09-24 00:01:01 +0000
commita22ea9ad0815615ce00663c20b3e6d83fe6396fe (patch)
treef9ffbf323d76bdb36ca8ec02aef95ab33de85769
parentfbb24b89ec28da5754719732edec3f2dc5bc773e (diff)
downloadsystemtap-steved-a22ea9ad0815615ce00663c20b3e6d83fe6396fe.tar.gz
systemtap-steved-a22ea9ad0815615ce00663c20b3e6d83fe6396fe.tar.xz
systemtap-steved-a22ea9ad0815615ce00663c20b3e6d83fe6396fe.zip
Arch agnostic function to get at return vals until $retval built-in is working.
-rw-r--r--tapset/return.stp20
1 files changed, 20 insertions, 0 deletions
diff --git a/tapset/return.stp b/tapset/return.stp
new file mode 100644
index 00000000..c6d0f48c
--- /dev/null
+++ b/tapset/return.stp
@@ -0,0 +1,20 @@
+function retval:long() %{
+
+ if (CONTEXT && CONTEXT->regs) {
+#if defined (__i386__)
+ THIS->__retvalue = CONTEXT->regs->eax;
+#elif defined (__x86_64__)
+ THIS->__retvalue = CONTEXT->regs->rax;
+#elif defined (__powerpc64__)
+ THIS->__retvalue = CONTEXT->regs->gpr[3];
+#elif defined (__ia64__)
+ THIS->__retvalue = CONTEXT->regs->r8;
+#elif defined (__sparc64__)
+ THIS->__retvalue = CONTEXT->regs->u_regs[UREG_RETPC];
+#else
+ THIS->__retvalue = -1;
+#endif
+ }
+ else
+ THIS->__retvalue = -1;
+%}