Jonathan Lebon [Mon, 3 Mar 2014 22:48:10 +0000 (17:48 -0500)]
PR14436: fix target vars for process.function.return probes
Because uretprobes rely on modifying the stack in order to catch
returns, they always had to be placed at the function's entrypc, which
meant that prologue searching could not be performed (see also PR13200).
This patch re-enables prologue searching for .return probes if necessary
(i.e. if code is unoptimized). The uretprobe remains at the entrypc, but
target variables are expanded at the prologue end and the paired entry
probe is also placed there rather than at the entrypc.
David Smith [Mon, 3 Mar 2014 21:44:35 +0000 (15:44 -0600)]
Improve 'syscall.listen' probe alias and testing.
* tapset/linux/syscalls.stp (syscall.listen): The 'fd' variable is 32-bits
on the user side. Truncate it.
* testsuite/systemtap.syscall/listen.c: New testcase.
David Smith [Fri, 28 Feb 2014 20:27:56 +0000 (14:27 -0600)]
Small syscall/nd_syscall tapset and testsuite fixes and improvements.
* tapset/linux/syscalls.stp (syscall.bind): Make 'fd' variable an integer
instead of a long.
* tapset/linux/nd_syscalls2.stp (nd_syscall.readv): Make 'fd' and 'count'
variables integers instead of longs.
(nd_syscall.writev): Ditto.
* testsuite/systemtap.syscall/rename.c (main): Fix typo in expected test
output.
* testsuite/systemtap.syscall/bind.c: New testcase.
Jonathan Lebon [Fri, 28 Feb 2014 17:25:37 +0000 (12:25 -0500)]
PR6941: skip prologue-skipping for GCC optimized code
If the code was compiled using -g -O2, then prologue searching is not
necessary since location data is valid there. We determine this by
looking for DW_AT_location attributes with data of form
DW_FORM_sec_offset (see GDB's PR12573 and also RHBZ612253#c6).
David Smith [Thu, 27 Feb 2014 22:15:38 +0000 (16:15 -0600)]
The systemtap-server rpm now requires 'openssl'.
* systemtap.spec: Make 'systemtap-server' require 'openssl', since the
server needs openssl to generate MOKs.
* stap-serverd.cxx (generate_mok): Removed comment about needing to
require openssl.
Jonathan Lebon [Wed, 26 Feb 2014 17:25:06 +0000 (12:25 -0500)]
dwflpp/prologue: use function's decl_line for older GCCs
This patch restores a heuristic we previously used, which worked well in
previous versions of GCC. In a nutshell, decl_line is now meaningless
for determining prologue ends, but for versions of GCC prior to 4.4.0,
it can be useful since it represents the lineno of '{', which should be
the same lineno as the entrypc, otherwise we consider it naked.
Josh Stone [Wed, 26 Feb 2014 22:55:40 +0000 (14:55 -0800)]
PR16472: Add an indent_depth() tapset function
- Add indent_depth() as a global analogue of thread_indent_depth()
- Reuse _generic_indent_depth() from _generic_indent() too.
- Expand buildok/indent.stp for all indentation functions.
David Smith [Wed, 26 Feb 2014 17:57:18 +0000 (11:57 -0600)]
Fix PR16636 by separating out preadv()/pwritev() testing.
* tapset/linux/syscalls2.stp (syscall.preadv): The 'fd' and 'count'
variables are 32-bits on the user side. Truncate them.
(syscall.pwritev): Ditto.
(syscall.readv): Ditto.
(syscall.writev): Ditto.
* testsuite/systemtap.syscall/readwrite.c: Move readv(), writev(),
preadv(), pwritev() testing to their own files.
* testsuite/systemtap.syscall/preadv.c: New test.
* testsuite/systemtap.syscall/pwritev.c: Ditto.
* testsuite/systemtap.syscall/readv.c: Ditto.
* testsuite/systemtap.syscall/writev.c: Ditto.
David Smith [Tue, 25 Feb 2014 19:24:11 +0000 (13:24 -0600)]
Fix PR16616 by handling a NULL servername in sunrpc probes.
* tapset/linux/rpc.stp (sunrpc.clnt.entry): Use __rpc_format_servername()
to generate the 'servername' convenience variable.
(__rpc_format_servername): New function.
* tapset/linux/conversions.stp (kernel_string): Fix odd formatting of NULL
value in the error message.
Jonathan Lebon [Fri, 21 Feb 2014 21:11:13 +0000 (16:11 -0500)]
fixed prologue comment re. -fomit-frame-pointer
Although the base pointer register is not used when -fomit-frame-pointer
is used, looking at the assembly shows that the address at which we're
done pushing things on the stack does correspond to the line record
following the declaration's line record, so the heuristic indeed works
properly in that case as well. (I previously thought the right spot
should be the same as the entrypc, but hadn't looked closely enough at
the assembly).
Jonathan Lebon [Wed, 12 Feb 2014 17:23:57 +0000 (12:23 -0500)]
dwflpp: improve prologue-end searching heuristics
This patch adds support for the prologue_end marker, which is set by
compilers such as clang. Otherwise, we determine prologue endings by
looking for the same (or larger) line number (which allows for detecting
GCC's 0-line advances).
Josh Stone [Thu, 20 Feb 2014 00:51:11 +0000 (16:51 -0800)]
Large rewrite of schedtimes example
- Greatly simplified timestamp updates
- Use task->in_iowait directly on 2.6.32+
- Record new execnames after process exec
- Stop accumulating time after process exit
Jonathan Lebon [Tue, 18 Feb 2014 22:50:53 +0000 (17:50 -0500)]
Merge branch 'templates' into jlebon/callee
This branch converts all the iterate_over_* functions into templates,
which allow for typesafe callbacks. Casts should no longer be used in
callback functions.
Jonathan Lebon [Fri, 7 Feb 2014 15:49:02 +0000 (10:49 -0500)]
callee.exp: new testcase for callee probes
This testcase tests all the aspects callee probes have to handle, such
as inlined functions, exported functions, nested [inlined] functions,
and relocation.
Jonathan Lebon [Tue, 18 Feb 2014 22:13:52 +0000 (17:13 -0500)]
make .callee[s] probes only trigger when called from target callers
Here, we prefix a block to the callee's probe handler to only pass
through if all the callers up the chain match with the current stack.
For .callee("func") probes, we simply add a check for [u]stack(1) ==
"func". For .callees(N) probes, we add a check that the N callers up the
callstack match those iterate_over_callees() found during static
analysis.
These checks are done at runtime by the caller_match() tapset function,
which calls _stp_[uk]module_relocate() to get the relocated address of
the expected caller and _stp_stack_[user|kernel]_get() to get the
unwinding address in the wanted stack frame.
Jonathan Lebon [Tue, 28 Jan 2014 19:51:07 +0000 (14:51 -0500)]
implement iterate_over_callees()
In this patch, we actually implement iterate_over_callees(). This
function looks for inlined subroutines or GNU_call_sites and calls the
callback for each found. The query_callee() callback for now simply does
a query_statement on the callee found. Logic is added in the next patch
to limit probing to calls from caller only.
David Smith [Tue, 18 Feb 2014 21:19:13 +0000 (15:19 -0600)]
Add a rpm require on 'mokutil' when needed.
* systemtap.spec: Make the client subpackage require 'mokutil' when
needed.
* session.cxx (get_mok_info): Remove 'FIXME' comment about needing to
require 'mokutil'.
Frank Ch. Eigler [Tue, 18 Feb 2014 20:03:21 +0000 (15:03 -0500)]
PR16603: correct time drift on fluctuating-cpufreq unsync-tsc boxes
* runtime/time.c: Restructure the per-cpu base_ns/base_cycles logic so
a common function is used during initialization, the regular timer
callback, and the irregular cpufreq callback (via an IPI there).
Josh Stone [Sat, 15 Feb 2014 01:25:12 +0000 (17:25 -0800)]
stapdyn: Reorganize utrace probing, and get end-by-exec working
* mutatee.cxx (mutatee::exec_reset_instrumentation): Save process.end
probes into exec_proc_end_probes, and clear the rest of attached_probes.
(mutatee::call_utrace_dynprobes): Take a whole vector of probes, and do
the lookup for utrace_enter_function here.
(mutatee::find_attached_probes): Return the vector directly.
(mutatee::thread_callback): Use find_attached_probes, and pass that to
call_utrace_dynprobes as is.
(mutatee::begin_callback): Ditto.
(mutatee::exit_callback): Ditto, except treat exec specially.
(mutatee::instrument_dynprobes): Don't try to deal with exec here,
because the stap module probably isn't ready yet.
* mutator.cxx (mutator::exec_callback): Call mutatee::exit_callback.
(mutator::exit_callback): Align the fake-local probe hits to work more
similarly to mutatee::exit_callback.
David Smith [Thu, 13 Feb 2014 19:54:35 +0000 (13:54 -0600)]
Fix PR16580 by decoding the 'protocol' argument of 'syscall.socket{pair}'.
* tapset/linux/aux_syscalls.stp (_sock_protocol_str): New function.
* tapset/linux/syscalls2.stp: Decode the 'protocol' argument in
syscall.socket and syscall.socketpair with _sock_protocol_str().
* tapset/linux/nd_syscalls2.stp: Ditto.
* testsuite/systemtap.syscall/socket.c: New test.
* testsuite/systemtap.syscall/socketpair.c: Updated test to expect decoded
'protocol' arguments.
* testsuite/systemtap.syscall/net1.c: Ditto.
Lukas Berk [Thu, 13 Feb 2014 16:18:18 +0000 (11:18 -0500)]
Check directories exist before sym linking runtime-java helpers
* systemtap.spec - When we're linking libHelperSDT_*.so and
HelperSDT.jar we need to make sure that the openjdk
dirs we're linking to actually exist if yum/openjdk
failed to remove the base dir on an openjdk upgrade.
Jonathan Lebon [Wed, 12 Feb 2014 21:43:47 +0000 (16:43 -0500)]
find_and_build: set from_glob for globby functors
We don't want to create suggestions for probe points created from globby
functors (e.g. syscall.*). Otherwise, we'll be creating a lot of
overhead calculating levenshtein distances for no reason.
Dave Brolley [Wed, 12 Feb 2014 21:03:51 +0000 (16:03 -0500)]
RHBZ 847285: Don't allow 'systemctl reload'.
'reload' is not supported by the stap-server script. The
ExecReload line in stap-server.service was calling
'stap-server restart' which stops the server and starts a
new one. This behavior is not expected or tolerated by systemd
which promptly sends SIGKILL to the new server.
We cannot supported 'reload' in systemctl. Note that 'restart'
is supported and works properly.
David Smith [Wed, 12 Feb 2014 18:58:41 +0000 (12:58 -0600)]
Fix PR16570 by speeding up the syscall.exp/nd_syscall.exp testcases.
* testsuite/systemtap.syscall/syscall.exp: Compile the module once.
* testsuite/systemtap.syscall/nd_syscall.exp: Ditto.
* testsuite/systemtap.syscall/test.tcl (run_one_test): Use staprun to load
the previously compiled module.
David Smith [Tue, 11 Feb 2014 18:07:57 +0000 (12:07 -0600)]
Small scheduler tapset testsuite fixes.
* testsuite/buildok/scheduler-cpu_on.stp: New file.
* testsuite/buildok/scheduler-detailed.stp: Moved 'scheduler.cpu_on' test
to scheduler-cpu_on.stp.
* testsuite/buildok/scheduler-migrate.stp: Removed unneeded
'__scheduler.migrate.kp' test.
David Smith [Tue, 11 Feb 2014 18:03:58 +0000 (12:03 -0600)]
Make 'signal.checkperm.return' optional, since it can be inlined.
* tapset/linux/signal.stp: On some kernels, check_kill_permission() can be
only inlined, so make 'signal.checkperm.return' optional.
* testsuite/buildok/signal-detailed.stp: Make the
'signal.checkperm.return' test optional
David Smith [Tue, 11 Feb 2014 17:38:03 +0000 (11:38 -0600)]
Fix PR16557 by improving the vm.mmap probe alias.
* tapset/linux/memory.stp (vm.mmap): Improve probe alias by probing
do_mmap_pgoff() (when available) instead of do_mmap(), which can be
always inlined.
David Smith [Mon, 10 Feb 2014 23:08:13 +0000 (17:08 -0600)]
Fix kernels that have CONFIG_USER_NS, but uid/gids are still simple values.
* buildrun.cxx (compile_pass): Add an export test for "from_kuid_munged".
* runtime/linux/runtime.h: If we don't have "from_kuid_munged", define our
own from_kgid_munged()/from_kgid_munged() that do nothing.
Jonathan Lebon [Mon, 10 Feb 2014 20:47:25 +0000 (15:47 -0500)]
delete initscript/README.stap-server
The large majority of information in README.stap-server was already part
of the stap-server(8) man page. A few examples and clarifications were
transferred over.
- initscript/README.stap-server: delete it
- man/stap-server.8: incorporate some of the examples from the README
and some clarifications
- systemtap.spec: remove README.stap-server from $files list
- NEWS: add blurb about removal
David Smith [Mon, 10 Feb 2014 19:07:09 +0000 (13:07 -0600)]
Fix PR16541 by updating the nfsd.stp tapset.
* tapset/linux/nfsd.stp: Two fixes. Handle kernels with CONFIG_USER_NS,
whose uids/gids aren't simple types. In nfsd.close, handle the inlined
case were we can't find the argument.