diff options
-rw-r--r-- | stapfuncs.5.in | 3 | ||||
-rw-r--r-- | tapset/ChangeLog | 4 | ||||
-rw-r--r-- | tapset/context.stp | 12 |
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; |