diff options
| author | David Smith <dsmith@redhat.com> | 2010-04-06 13:17:15 -0500 |
|---|---|---|
| committer | David Smith <dsmith@redhat.com> | 2010-04-06 13:17:15 -0500 |
| commit | 602eddb22e42fd0ae51549240f54a247d13afe17 (patch) | |
| tree | 28470660f76d1df1b62ce82e7063e056ba95ed5a /tapset | |
| parent | dd3d6ed1d4187da281fac6c344ebe765274325bc (diff) | |
| download | systemtap-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.stp | 12 |
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 |
