From 65dd4b7405baeee812f6d41f0ee74824b601a47a Mon Sep 17 00:00:00 2001 From: David Smith Date: Wed, 7 Apr 2010 16:02:24 -0500 Subject: Added kernel_pointer()/set_kernel_pointer() tapset functions. * tapset/conversions.stp (kernel_pointer): New function. * tapset/conversions-guru.stp (set_kernel_pointer): Ditto. * testsuite/buildok/conversions-embedded.stp: Added kernel_pointer() test. * testsuite/buildok/conversions.stp: Ditto. * testsuite/buildok/set_kernel.stp: Added set_kernel_pointer() test. * tapset/nfs.stp: Removed __d_loff_t() function. Uses new kernel_pointer() function instead. * testsuite/buildok/nfs-embedded.stp: Removed __d_loff_t() test. --- tapset/conversions.stp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'tapset/conversions.stp') diff --git a/tapset/conversions.stp b/tapset/conversions.stp index 3bbbb725..fbaba6e4 100644 --- a/tapset/conversions.stp +++ b/tapset/conversions.stp @@ -1,5 +1,5 @@ // conversions tapset -// Copyright (C) 2005-2009 Red Hat Inc. +// Copyright (C) 2005-2010 Red Hat Inc. // Copyright (C) 2007 Intel Corporation. // // This file is part of systemtap, and is free software. You can @@ -113,6 +113,24 @@ deref_fault: /* branched to from kread() */ } %} +/** + * sfunction kernel_pointer - Retrieves a pointer value stored in + * kernel memory. + * @addr: The kernel address to retrieve the pointer from. + * + * Description: Returns the pointer value from a given kernel memory + * address. Reports an error when reading from the given address + * fails. + */ +function kernel_pointer:long (addr:long) %{ /* pure */ + THIS->__retvalue = (int64_t) kread((void **) (intptr_t) THIS->addr); + if (0) { +deref_fault: /* branched to from kread() */ + snprintf (CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer), + "kernel pointer copy fault at 0x%p", (void *) (uintptr_t) THIS->addr); + CONTEXT->last_error = CONTEXT->error_buffer; + } +%} /** * sfunction user_string - Retrieves string from user space. -- cgit