summaryrefslogtreecommitdiffstats
path: root/tapset/conversions.stp
diff options
context:
space:
mode:
authorhunt <hunt>2006-02-01 20:21:27 +0000
committerhunt <hunt>2006-02-01 20:21:27 +0000
commit694605b44cd3574bc0b66d0d4a4fa4f3bc7727a3 (patch)
tree169d2b2f8371ff43428be8742cc36b314add05bc /tapset/conversions.stp
parentea18b5569264daa83c5ad8760a6dfd92180e9b22 (diff)
downloadsystemtap-steved-694605b44cd3574bc0b66d0d4a4fa4f3bc7727a3.tar.gz
systemtap-steved-694605b44cd3574bc0b66d0d4a4fa4f3bc7727a3.tar.xz
systemtap-steved-694605b44cd3574bc0b66d0d4a4fa4f3bc7727a3.zip
2006-02-01 Martin Hunt <hunt@redhat.com>
* syscalls.stp: New syscall file. * syscall2.stp: More syscalls. * i686/syscalls.stp: x86-specific calls. * x86_64/syscalls.stp: x86_64-specific calls.
Diffstat (limited to 'tapset/conversions.stp')
-rw-r--r--tapset/conversions.stp16
1 files changed, 16 insertions, 0 deletions
diff --git a/tapset/conversions.stp b/tapset/conversions.stp
index 51f9de19..9d50ca62 100644
--- a/tapset/conversions.stp
+++ b/tapset/conversions.stp
@@ -41,3 +41,19 @@ function user_string:string (addr:long) %{
CONTEXT->last_error = errmsg;
}
%}
+
+function user_string_safe:string (addr:long, n:long) %{
+ long rc;
+ if (n > MAXSTRINGLEN)
+ n = MAXSTRINGLEN;
+ rc = _stp_strncpy_from_user (THIS->__retvalue,
+ (const char __user*) (uintptr_t) THIS->addr,
+ MAXSTRINGLEN);
+ if (rc < 0)
+ {
+ static char errmsg[40];
+ snprintf (errmsg, 40, "user string copy fault at 0x%p",
+ (void *) (uintptr_t) THIS->addr);
+ CONTEXT->last_error = errmsg;
+ }
+%}