summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--stapfuncs.5.in3
-rw-r--r--tapset/ChangeLog4
-rw-r--r--tapset/context.stp12
3 files changed, 19 insertions, 0 deletions
diff --git a/stapfuncs.5.in b/stapfuncs.5.in
index 6d4546ab..d8a1a55c 100644
--- a/stapfuncs.5.in
+++ b/stapfuncs.5.in
@@ -252,6 +252,9 @@ Return the probe point's module name, if known.
target:long ()
Return the pid of the target process.
.TP
+user_mode:long ()
+Return 1 if the probe point occurred in user-mode.
+.TP
is_return:long ()
Return 1 if the probe point is a return probe. Deprecated.
diff --git a/tapset/ChangeLog b/tapset/ChangeLog
index 91148d70..21cb5f31 100644
--- a/tapset/ChangeLog
+++ b/tapset/ChangeLog
@@ -1,3 +1,7 @@
+2008-06-12 Will Cohen <wcohen@redhat.com>
+
+ * tasks.stp: Add user_mode.
+
2008-06-11 Zhaolei <zhaolei@cn.fujitsu.com>
* syscalls.stp: Add sys_fchmodat.
diff --git a/tapset/context.stp b/tapset/context.stp
index 45e3be30..10c52226 100644
--- a/tapset/context.stp
+++ b/tapset/context.stp
@@ -140,6 +140,18 @@ function registers_valid:long () %{ /* pure */
THIS->__retvalue = (CONTEXT->regs != NULL);
%}
+function user_mode:long () %{ /* pure */ /* currently a user-mode address? */
+ if (CONTEXT->regs) {
+#if defined(__i386__) || defined(__x86_64__)
+ THIS->__retvalue = (uint64_t) user_mode_vm (CONTEXT->regs);
+#else
+ THIS->__retvalue = (uint64_t) user_mode (CONTEXT->regs);
+#endif
+ } else {
+ THIS->__retvalue = 0;
+ }
+%}
+
function is_return:long () %{ /* pure */
if (CONTEXT->pi)
THIS->__retvalue = 1;