summaryrefslogtreecommitdiffstats
path: root/tapset
diff options
context:
space:
mode:
authorDavid Smith <dsmith@redhat.com>2010-04-06 13:17:15 -0500
committerDavid Smith <dsmith@redhat.com>2010-04-06 13:17:15 -0500
commit602eddb22e42fd0ae51549240f54a247d13afe17 (patch)
tree28470660f76d1df1b62ce82e7063e056ba95ed5a /tapset
parentdd3d6ed1d4187da281fac6c344ebe765274325bc (diff)
downloadsystemtap-steved-602eddb22e42fd0ae51549240f54a247d13afe17.tar.gz
systemtap-steved-602eddb22e42fd0ae51549240f54a247d13afe17.tar.xz
systemtap-steved-602eddb22e42fd0ae51549240f54a247d13afe17.zip
Added atomic_read() embedded-C function and tests.
* tapset/atomic.stp: Added atomic_read(). * testsuite/buildok/atomic.stp: Added atomic_read() compile test. * testsuite/systemtap.base/atomic.exp: Added atomic_read() tests. * testsuite/lib/stap_run_error.exp (stap_run_error): Logs stap command and tries to ensure inferior process is killed.
Diffstat (limited to 'tapset')
-rw-r--r--tapset/atomic.stp12
1 files changed, 12 insertions, 0 deletions
diff --git a/tapset/atomic.stp b/tapset/atomic.stp
index ab20eb5e..a295af65 100644
--- a/tapset/atomic.stp
+++ b/tapset/atomic.stp
@@ -6,6 +6,18 @@
// Public License (GPL); either version 2, or (at your option) any
// later version.
+function atomic_read:long(addr:long)
+%{ /* pure */
+ atomic_t *a = (atomic_t *)(long)THIS->addr;
+
+ /* We call deref() here to ensure the memory is valid to read.
+ * Note the result is thrown away, then we use the "real"
+ * atomic read function now that we know the address is safe. */
+ (void)deref(sizeof(*a), a);
+ THIS->__retvalue = atomic_read(a);
+ CATCH_DEREF_FAULT();
+%}
+
function atomic_long_read:long(addr:long)
%{ /* pure */
#ifdef ATOMIC_LONG_INIT