Dave Brolley [Wed, 12 Mar 2014 18:31:38 +0000 (14:31 -0400)]
PR 16645: Unhelpful feedback when stap fails
Under some conditions, stap automatically sets options which
have not been explicitely set, in an attempt to succeed where
it is known that translation would fail without these settings.
Examples are the automatic setting of the --privilege level and
the automatic request for translation via a compile-server for
unprivileged users.
In these cases, when translation still fails it would be helpful
to the user to explain what settings were changed automatically
and why.
It is also helpful to point the user at the appropriate documention
when futher configuration/setup on his part is required.
This change does the above for --privilege and --use-server.
Jonathan Lebon [Wed, 12 Mar 2014 15:10:32 +0000 (11:10 -0400)]
library probes: fix process path in listing mode
Previously, doing stap -l process("exe").library("*").function("myfunc")
would result in listings where the library field had the fully resolved
path, yet the process path retained the user-entered value.
With this commit, we override the user-entered value of process for the
absolute path, so that listing mode also shows it.
Jonathan Lebon [Thu, 6 Mar 2014 15:27:17 +0000 (10:27 -0500)]
callee probes: truly improve derivation for better listing
The previous attempt to do this (commit 80a63be) was hacky and was thus
reverted (see previous commit). In this commit, we try to do it
properly.
--- original commit msg ---
Previously, doing stap -L for function("foo").callee("*") would result
in listings directly for function("bar1"), function("bar2"), etc...
With this patch, we add an intermediate step in the derivation chain:
function("foo").callee("*") --> function("foo").callee("bar1")
This will cause -L to display this derivation instead, which is closer
to what users would expect for a function("foo").* probe.
To achieve this, we do three things:
1. We make func_info and inline_instance_info subclasses of a single
base_func_info class for uniform treatment when called from
query_cu() as well as cleaner passing of name/file/line/addr between
iterate_over_callees() and query_callee(). This can also help in
other cases (to be assessed...).
2. We remember and pass down the caller information in
iterate_over_callees(), so that query_callee() has it on hand when
creating the .function component.
3. In query_callee(), we create an intermediate probe point and a new
dwarf_query based on that probe point to create the final derived
probe.
David Smith [Wed, 12 Mar 2014 17:19:44 +0000 (12:19 -0500)]
If the syscall gate macros fail, just skip the probe.
* tapset/linux/syscalls.stpm (__syscall_gate): If _stp_syscall_nr() fails,
just skip this probe, since that probably means we're in kernel
context.
(__syscall_gate2): Ditto.
(__syscall_compat_gate): Ditto.
David Smith [Wed, 12 Mar 2014 14:07:58 +0000 (09:07 -0500)]
Improve task_finder/utrace shutdown.
* runtime/stp_utrace.c (utrace_exit): Move the call to
stp_task_work_exit() up above the calls to free the kmem caches. This
make sure any running task work items don't have the memory freed out
from under them.
* runtime/linux/task_finder2.c (__stp_task_finder_cleanup): Move
utrace_shutdown() call into stap_stop_task_finder().
(stap_stop_task_finder): Call utrace_shutdown() directly. Wait to make
sure all tracepoint probes are finished.
David Smith [Tue, 11 Mar 2014 21:24:55 +0000 (16:24 -0500)]
Only require a specific kernel if we're installing on RHEL4.
* systemtap.spec: Only have a kernel version requirement if we're doing a
RHEL4 build. The RHEL5+ and Fedora minimum kernel versions are past our
minimum kernel version. This change will help container versions of
Fedora that don't have a kernel installed.
Stan Cox [Tue, 11 Mar 2014 20:10:06 +0000 (16:10 -0400)]
Updates for python 3.3
* (celsius-bt.stp,celsius-var.stp): Don't to use the same script for
python2 and python3
* python.exp: Create python2/python3 versions of above.
* python2.stp (python2_backtrace, python2_get_variable): New.
* python3.stp (get_unicode, p3_get_dict_hash, p3_get_dict_key)
(p3_get_dict_value): Changes for python 3.3
(python3_backtrace, python3_get_variable): New.
Josh Stone [Tue, 11 Mar 2014 17:01:43 +0000 (10:01 -0700)]
BZ1073605 addendum, don't blacklist empty matches
For example, plt and symtab function probes have an empty filename, but
they should not be blocked for that. This patch adds an impossible ".^"
pattern as a placeholder in those blacklist patterns that aren't used
yet. Also add semok/semko tests to be sure probing "_start" is allowed
on entry but not on return.
Torsten Polle [Fri, 7 Mar 2014 20:39:31 +0000 (14:39 -0600)]
Fix: stap/staprun deadlocks when probing ends.
stap_stop_task_finder() exits utrace through utrace_exit(). At that
time, there might be outstanding task workers. Hence, waiting for
exiting the task work waits forever. Therefore exiting the task work
is done after canceling all task workers.
Lukas Berk [Fri, 7 Mar 2014 18:31:03 +0000 (13:31 -0500)]
Robustify stapbm javapid check for integers
*java/stapbm.in - previously the [[:digits:]] check would fail
if there was a digit mixed in the process name, such
as 'foo3bar'. Now this condition catches anything but
an integer.
Josh Stone [Thu, 6 Mar 2014 20:04:00 +0000 (12:04 -0800)]
Start using the parser for complicated code blocks
Sometimes we synthesize code to add to the user's script, and currently
this is done by manually building staptree components. This is error
prone, and we should let the parser do it when possible. This first
commit updates the automatic global-variable display to use the parser.
* staptree.h (struct stapfile): Add a synthetic flag.
* parse.cxx (lexer::set_current_token_chain): New, remember a token for
chaining synthetic code back to its origin.
(lexer::input_peek): Set the chained token.
(parser::parse_synthetic_probe): Directly parse a synthetic probe.
(parse_synthetic_probe): Expose this capability to the world.
* elaborate.cxx (add_global_var_display): Rewrite the synthetic end
probes as plain strings, then fed to the parser.
(symresolution_info::find_var): Don't warn about cross-file globals
from synthetic code.
* session.cxx (systemtap_session::print_error_source): Follow tok->chain
for all errors, not just macro parse_errors.
Lukas Berk [Thu, 6 Mar 2014 16:46:01 +0000 (11:46 -0500)]
PR16666: added strip -g testcase for symtab functionality
* minidebuginfo.exp - add new testcase, compile with debuginfo and
'strip -g' the resulting bin
* minidebuginfo.stp - change probe point to not explicitly list process
for reuse on new testcase
Jonathan Lebon [Wed, 5 Mar 2014 22:06:05 +0000 (17:06 -0500)]
callee.exp: adjust test for new listing and clean up
We fix the regexes for listing mode since they're now different (see
previous commit). We also fix the interface of expect_list and
expect_probe to be more intuitive (i.e. list the caller before the
callee).
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'.