Josh Stone [Thu, 3 Apr 2014 00:34:25 +0000 (17:34 -0700)]
Make autocast distinct from cast
Some dwarf probes try to be helpful and fill in empty @cast modules, but
we don't want that for an automatic @cast that will determine its module
and type from its operand. So let's just make autocast separate.
* parse.cxx (parser::parse_dwarf_value): Create autocast_op, and assign
its token as that of the first addressof or peeked component.
* elaborate.cxx (void_statement_reducer::reduce_target_symbol): New,
collapse any kind of target_symbol to its operand and indexes. Call
this in all the void_statement_reducer target_symbol-like visitors.
* [Lots of added visitor::visit_autocast_op...]
Josh Stone [Thu, 3 Apr 2014 00:33:47 +0000 (17:33 -0700)]
parse: don't do auto-@cast promotion for old scripts
There's at least one case that will parse differently now:
(expression) [index] in array
Before: (expression); [index] in array
i.e. two separate statements
After: [(expression)[index]] in array
i.e. @cast-dereference the expression, then test that in array
I don't see any use for the case before, but it's still valid syntax
that has changed behavior, so we'll be compatible about it. Guard the
new @cast promotion for stap 2.6 and later only. (The Future!)
Josh Stone [Mon, 31 Mar 2014 21:52:03 +0000 (14:52 -0700)]
parse: allow dereferencing operators on all expressions
If it looks like a @cast, and smells like a @cast, make it a @cast!
* parse.cxx (parser::parse_dwarf_value): New step to parse dereferencing
operands in a central place. Add those components to existing
target_symbol types, or else create a new @cast to contain them.
(parser::parse_crement): Call parse_dwarf_value as the next step.
(parser::parse_cast_op,parse_atvar_op): Split from parse_target_symbol.
(parser::parse_value,parse_symbol): Don't worry about target_symbol
types now, as parse_dwarf_value will do it.
(parser::peek_target_symbol_components): Look for dereferences.
(parser::parse_defined_op): Parse any expression operand, as below.
* staptree.h (defined_op): Take any expression as the operand.
* tapsets.cxx (var_expanding_visitor::visit_defined_op): Adapt to
@defined's new generalized operand.
Josh Stone [Fri, 4 Apr 2014 21:14:41 +0000 (14:14 -0700)]
testsuite: perf counter test improvements
- Use anchored -re patterns for more precise matching.
- Remove unused counter_a/b that caused unmatched warnings.
- Allow "max towers" to be one digit less.
Jonathan Lebon [Wed, 2 Apr 2014 20:24:08 +0000 (16:24 -0400)]
PR16307: testsuite: use new kill proc
Replace 'exec kill' by a call to the new kill proc, which accounts for
double-dashing as necessary. Where it makes sense, the timeout argument
was also used so that a SIGKILL was also sent after a few seconds.
Jonathan Lebon [Wed, 2 Apr 2014 16:31:36 +0000 (12:31 -0400)]
PR16307: proc kill: new proc for safer killing
During setup, check what kind of kill executable we're dealing with to
find out whether we'll need to use double dashes when calling it. We
also create a new kill proc that takes this into account when calling
kill.
David Smith [Thu, 3 Apr 2014 20:08:56 +0000 (15:08 -0500)]
PR16716 partial fix: Better types in 'syscall.shutdown'.
* tapset/linux/syscalls2.stp: Fix types in syscall.shutdown.
* tapset/linux/aux_syscalls.stp: Convert _shutdown_how_str() to use
_stp_lookup_str().
* runtime/linux/compat_net.h: Define SHUT_* for RHEL5.
* testsuite/systemtap.syscall/shutdown.c: New testcase.
William Cohen [Wed, 2 Apr 2014 20:16:21 +0000 (16:16 -0400)]
Make vm.pagefault and vm.pagefault.return probe only one real function
Newer versions of the kernel have both __handle_mm_fault and
handle_mm_fault functions. The __handle_mm_fault may be inlined for
some kernel causing some arguments and the return probe to be
unavailable. The memory tapset should just watch one of these
functions to instrument.
Changed all remaining "sleep 0.2" test cases to "sleep 1", so that the
check.exp mapping to "/usr/bin/stress ...." is triggered. Further,
made the stress a little more stressy with more i/o workload.
William Cohen [Wed, 2 Apr 2014 19:50:23 +0000 (15:50 -0400)]
Adjust the output of sched_switch.stp to be more readable
Several numerical values were printed as one string of digits. Placed
spaces between the numbers and adjusted to formatting so that the output
is easier to read.
Jonathan Lebon [Mon, 31 Mar 2014 20:11:27 +0000 (16:11 -0400)]
stap: unite all dumping modes into s.dump_mode
Clean up the way dumping modes are implement. We create a new enum
member which tracks the type of dumping wanted. This enum handles all
stap invocations which do not directly handle a user-script:
-l/-L/--dump-probe-types/--dump-probe-aliases/--dump-functions. It also
allows us to clean up the cmdline_script/have_script hacks previously
used in switch handling.
The trickiest part about this patch is to now allow for the possibility
of s.user_file to be NULL throughout passes 1 and 2, which previously
always assumed a script was present.
Jonathan Lebon [Fri, 28 Mar 2014 22:02:20 +0000 (18:02 -0400)]
stap: add --dump-probe-aliases
We add a new --dump-probe-aliases switch, which dumps all the aliases
picked up in library files after pass 1 and then exits. Aliases whose
names don't start with '_' are hidden behind a -v.
Also change probe_alias::printsig() so that epilogue-style aliases are
printed properly.
David Smith [Tue, 1 Apr 2014 19:01:16 +0000 (14:01 -0500)]
Make _struct_sockaddr_u_impl() tapset function output more consistent.
* tapset/linux/aux_syscalls.stp (_struct_sockaddr_u_impl): Make output
more consistent. When _struct_sockaddr_u_impl() succeeds, it returns
'{INFO}'. When it failed, it returned '[...]'. Now when it fails it
returns '{...}'.
* testsuite/systemtap.syscall/bind.c: Updated expected test output.
* testsuite/systemtap.syscall/connect.c: Updated expected test output.
* testsuite/systemtap.syscall/sendto.c: Updated expected test output.
David Smith [Tue, 1 Apr 2014 18:30:06 +0000 (13:30 -0500)]
PR16716 partial fix: Better types in 'syscall.{send,sendto}'.
* tapset/linux/syscalls2.stp: Fixed types and nesting in
'syscall.{send,sendto}'. Fixed a few more types in
'syscall.{recv,recvfrom}'.
* tapset/linux/nd_syscalls2.stp: Ditto.
* runtime/linux/compat_unistd.h: Added __NR_sendto.
* tapset/linux/aux_syscalls.stp: Be sure we have the SYS_* defines by
including '<linux/net.h>'.
* testsuite/systemtap.syscall/send.c: New testcase.
* testsuite/systemtap.syscall/sendto.c: New testcase.
* testsuite/systemtap.syscall/recv.c: Added more testing of the 'flags'
parameter.
* testsuite/systemtap.syscall/recvfrom.c: Ditto.
* testsuite/systemtap.syscall/recvmmsg.c: Ditto.
* testsuite/systemtap.syscall/recvmsg.c: Ditto.
Frank Ch. Eigler [Sun, 30 Mar 2014 12:17:23 +0000 (08:17 -0400)]
PR16766 cont'd: tolerate STAP_SESSION_ERROR in module_refresh callback
If a systemtap module is in error state (but not yet shut down via
message from stapio/staprun), it may harmlessly continue receiving
and processing module-notification callbacks.
Josh Stone [Fri, 28 Mar 2014 20:53:15 +0000 (13:53 -0700)]
runtime: improve the preempt_enable_no_resched copy
The variant introduced in commit 651a87924c22 only handled the
CONFIG_PREEMPT_COUNT side of things, which causes mayhem when that's not
set, as with kernel-3.14.0-0.rc8.git0.1.fc21.x86_64. The #else case just
needs a barrier(). The former "TODO rethink" still stands.
David Smith [Fri, 28 Mar 2014 19:10:01 +0000 (14:10 -0500)]
PR16716 partial fix: Fix 'syscall.{recv,recvfrom}' on 32-bit platforms.
* tapset/uconversions.stp (user_ulong): New function.
(user_ulong_warn): Ditto.
* tapset/linux/syscalls2.stp: Change all calls to user_uint64() to
user_ulong(), so that 32-bit platforms are handled correctly.
* tapset/linux/nd_syscalls2.stp: Ditto. Also added asmlinkage() calls to
'nd_syscall.{recv,recvfrom}'.
* testsuite/buildok/conversions-embedded.stp: Added build tests for
user_ulong() and user_ulong_warn().
* testsuite/buildok/conversions.stp: Ditto.
David Smith [Fri, 28 Mar 2014 15:49:04 +0000 (10:49 -0500)]
Remove outdated comments from nd_syscalls.stp and nd_syscalls2.stp.
* tapset/linux/nd_syscalls.stp: No actual code change. Remove old comments
showing the syscall variant of the probe. These comments have gotten out
of date, and it isn't that hard to lookup the syscall variant of the
probe. In addition, having these comments present prevents easily
looking for actual '$var' references that shouldn't be there.
* tapset/linux/nd_syscalls2.stp: Ditto.
Frank Ch. Eigler [Fri, 28 Mar 2014 01:29:04 +0000 (21:29 -0400)]
PR16766: kernel crash for failed-init module-notification
Suppress the module_notifier callback for cases of failure of the
main generated systemtap module-initialization code, which checks
build-ids, privileges, etc. etc.; we don't want any module-notifier
callbacks after an error.
* runtime/transport/transport.c: Don't call module-notifier stuff
if initialization failed.
* translate.cxx (emit_module_refresh): Emit code to suppress callback
payload if somehow the notifier got activated anyway.
Jonathan Lebon [Wed, 26 Mar 2014 17:56:20 +0000 (13:56 -0400)]
initscript: skip dracut stap module by default
We previously always enabled the dracut stap module as long as there
were scripts to include. This can lead to issues since the params.conf
file may be obsolete/not in sync e.g. during a kernel update. We now
make the module an opt-in feature, and make the initscript explicit
specify its inclusion.
Jonathan Lebon [Wed, 26 Mar 2014 15:39:11 +0000 (11:39 -0400)]
initscript: use new-kernel-pkg after dracut
With this patch, we now also call new-kernel-pkg --update after creating
the new image so that the bootloader is updated if need be (see also
BZ1051649#c9).
This patch also includes some polishing re. console log output.
David Smith [Wed, 26 Mar 2014 14:43:23 +0000 (09:43 -0500)]
Replace _sendflags_str() and _recvflags_str() with _msg_flags_str().
* tapset/linux/aux_syscalls.stp (_msg_flags_str): New function to replace
_sendflags_str() and _recvflags_str().
(_sendflags_str): Deprecated and reimplemented with _msg_flags_str().
(_recvflags_str): Ditto.
* tapset/linux/syscalls2.stp: Replace _sendflags_str() and
_recvflags_str() with _msg_flags_str().
* tapset/linux/nd_syscalls2.stp: Ditto.
* testsuite/buildok/aux_syscalls-embedded.stp: Test _msg_flags_str().
* NEWS: Mention deprecations.
Josh Stone [Wed, 26 Mar 2014 00:04:00 +0000 (17:04 -0700)]
Minor testsuite tweaks for stapdyn
- global_end: Allow for zero time (i.e. less than 1 microsecond), and
don't double the _dyninst test suffix.
- process_by_cmd: Add an "int rc" just to give distinct IPs between
function start and the first mark, so we don't need to worry about
determinism of the probe order. (stapdyn was hitting the mark first.)
- suppress-time-limit: Expect the WARNING messages too, because stapdyn
often has them mixed with the normal script output.
Josh Stone [Tue, 25 Mar 2014 20:46:57 +0000 (13:46 -0700)]
socktop: Make sure *_str are always known as strings
The new removal of unreachable code meant socktop might remove its whole
filter setup, and all the related variables are left with unknown type.
They would typically be pruned away just fine, but socktop also has a
probe never with print statements to avoid autoprint. Changing those to
log() lets stap always know they are strings.
Josh Stone [Tue, 25 Mar 2014 20:43:29 +0000 (13:43 -0700)]
Tighten a semok/doubleglob.stp pattern
With 't**es(1)', we only intended to match 'timer.jiffies(1), but we
also matched a 'tcp[...].callees(1)' on accident. This odd instance has
some issues in variable expansion, so we should just avoid it. Using
'ti**es(1)' gets back to the original intent of the test.
Josh Stone [Tue, 25 Mar 2014 18:22:43 +0000 (11:22 -0700)]
Remove code that follows unconditional control statements
When a block contains return, next, break, or continue, any following
statements are unreachable. Warn and remove them.
This replaces tapset-perfmon's statement_counter, which didn't know
enough to deal with blocks like '{ { } }' that arise from perf aliases.
Now it just inserts a 'next', and the later optimization passes can
figure this out in a very generic way.
Josh Stone [Fri, 21 Mar 2014 18:46:03 +0000 (11:46 -0700)]
Read the perf process from -c during pass2
When a bare .process is used, it's value is inferred from -c CMD. This
must be checked during pass2, or else a changed -c CMD will not trigger
a hash change, and an incorrect cached module will be used.
This patch also unifies the wordexp argv[0] parsing of -c CMD into a
shared systemtap_session::cmd_file().
Josh Stone [Fri, 21 Mar 2014 18:39:42 +0000 (11:39 -0700)]
PR14223: Allow perf probes for mere @stapdev mortals
Even though we're using the kernel interface, perf checks CAP_SYS_ADMIN,
which our mere @stapdev user may not have. By running via a workqueue,
we'll be in an events/X kernel thread with sufficient privileges.
Jonathan Lebon [Sat, 22 Mar 2014 04:50:53 +0000 (00:50 -0400)]
semantic_error: also print source of error
When printing semantic_errors at high verbosity (-vv), it can be useful
to also know where the error came from. That information is already made
available through the errsrc member of semantic_error (initially
implemented for dup-error elimination).
We also change the ERRSRC macro to use __FILE__ rather than __FUNCTION__
to be not only more informative, but more foolproof (e.g. two errors
thrown from identically named functions at identical lines in separate
files before would have been considered equivalent by the dup-error
elimination).
The final result is e.g. something like this:
semantic error: unresolved type : identifier 'ActiveOpens' at :22:8
thrown from: elaborate.cxx:5239
source: global ActiveOpens
^
Josh Stone [Sat, 22 Mar 2014 00:32:06 +0000 (17:32 -0700)]
testsuite: big cleanup of sdt_misc types
- Use a central check() function throughout, so tests and messages are
easily uniform. Prefix the PASS/FAIL messages with "sdt_types" so
they are easily distinguishable from dejagnu PASS/FAIL in the log.
- Adjust most constants to test the bounds of their types.
- Add unsigned char and unsigned long long.
- Tighten the expect patterns to exactly one line at a time, and
increment $notok for extra lines (like WARNINGs).
Josh Stone [Fri, 21 Mar 2014 22:09:53 +0000 (15:09 -0700)]
testsuite: big cleanup of sdt_asm
- Use a central check() function throughout, so tests and messages are
easily uniform. Prefix the PASS/FAIL messages with "sdt_asm" so they
are easily distinguishable from dejagnu PASS/FAIL in the log.
- Save and restore SP when when changing it in sdt_asm.S, and prepare
the stack and return value at the end for a clean exit.
- Skip mark("*sp") for --runtime=dyninst, because it's not prepared to
deal with that bad stack state.
- Tighten the expect patterns to exactly one line at a time, and
increment $notok for extra lines (like WARNINGs).
Josh Stone [Fri, 21 Mar 2014 19:12:52 +0000 (12:12 -0700)]
Let synthesized end probes use foreach values again
When these were moved to parse_synthetic_probe, I neglected to maintain
use of the "foreach (val = ...)" syntax. Add this back in, and update
optim_arridx.exp to expect the internal underscored names.
Josh Stone [Thu, 20 Mar 2014 23:23:34 +0000 (16:23 -0700)]
PR16730 addendum, link java method probes to the user
After commit ede0102cfd22, the java method probes that were built using
parse_synthetic_probe don't look like they come from the user's script
anymore, so the listing mode skips them. Since the mark probe is the
one containing the user's code, link its probe->base back to the user.
Also move the test in printscript a bit so verbose diagnostics are still
printed, to help with issues like this.
There's no need to catch recursive_expansion_error since
try_suffix_expansion() rethrows it as a semantic_error. If it did
rethrow it as a recursive_expansion_error (which might have been the
original intent), the errors would have been printed as:
recursive loop in alias expansion...
while resolving probe point...
no match
Rather, it is printed as follow:
while resolving probe point...
recursive loop in alias expansion...
which kills the 'no match' msg and is more in line with what we do for
other errors (i.e. having the 'while resolving probe point' msg first).
Jonathan Lebon [Thu, 20 Mar 2014 20:12:27 +0000 (16:12 -0400)]
RHBZ1065757: don't delete objects that are in use
Catching a semantic_error does not mean that nothing was derived. This
can occur in the case of probe aliases, where the first alias_name was
derived, but the second wasn't. In those cases, the first derived probe
uses those created objects, so corruption may result if we delete them.
We instead rely on the size of the results vector to determine if it is
safe to delete the objects.
David Smith [Thu, 20 Mar 2014 18:52:30 +0000 (13:52 -0500)]
PR16716 partial fix: Better types in 'syscall.{getsockname,getsockopt}'.
* tapset/linux/syscalls.stp: Fix types in 'syscall.getsockname' and
'syscall.getsockopt'.
* tapset/linux/aux_syscalls.stp (_stp_lookup_str): Move to the top of the
file so that it can be called earlier.
(_stp_lookup_or_str): Ditto.
(_sockopt_optname_str): Convert to use _stp_lookup_or_str(). Update list
of values handled.
(_sockopt_level_str): Ditto.
* testsuite/systemtap.syscall/getsockname.c: New test case.
* testsuite/systemtap.syscall/getsockopt.c: Ditto.
David Smith [Wed, 19 Mar 2014 18:25:38 +0000 (13:25 -0500)]
PR16716 partial fix: Better types in 'syscall.{getpeername,getrusage}'.
* tapset/linux/syscalls.stp: Fix types in 'syscall.getpeername'. Add
better 'compat' support to 'syscall.getrusage' and fix types.
* tapset/linux/nd_syscalls.stp: Add better 'compat' support to
'nd_syscall.getrusage'.
* tapset/linux/aux_syscalls.stp (_rusage_who_str): Add support for
decoding 'RUSAGE_THREAD'.
* testsuite/systemtap.syscall/getpeername.c: New test case.
* testsuite/systemtap.syscall/getrusage.c: Ditto.
The 'kernel_dwfl' and 'user_dwfl' references kept for caching purposes
in setupdwfl.cxx were causing the Dwfl object to never actually be
released, which in turn resulted in multiple files remaining open beyond
pass-3.
David Smith [Wed, 19 Mar 2014 15:32:51 +0000 (10:32 -0500)]
PR16716 partial fix: Better types in 'syscall.{getitimer,setitimer}.
* tapset/linux/syscalls.stp: Fix argument types in 'syscall.getitimer' and
'syscall.compat_getitimer'.
* tapset/linux/syscalls2.stp: Fix argument types in 'syscall.setitimer' and
'syscall.compat_setitimer'.
* testsuite/systemtap.syscall/getitimer.c: New test case.
* testsuite/systemtap.syscall/setitimer.c: Ditto.
David Smith [Tue, 18 Mar 2014 21:23:19 +0000 (16:23 -0500)]
PR16716 partial fix: Better types in 'syscall.connect'.
* tapset/linux/syscalls.stp: Fix argument types in 'syscall.connect'.
* tapset/linux/nd_syscalls.stp: Ditto.
* testsuite/systemtap.syscall/socket.c: New test case.
Mark Wielaard [Mon, 17 Mar 2014 21:05:33 +0000 (22:05 +0100)]
symbol_table::get_from_elf use dwfl_module_getsym_info if available.
dwfl_module_getsym does adjust the sym.st_value but doesn't try to resolve
it to a function address. dwfl_module_getsym_info leaves the st_value in
tact (no adjustment applied) and also returns the fully resolved address.
This matters for architectures that use function descriptors where we
want the actual function entry address and not just the address in the
function decriptor table (like .odp on ppc64).
David Smith [Mon, 17 Mar 2014 16:19:19 +0000 (11:19 -0500)]
Fix PR16718 by making _stp_copy_from_user() more robust.
* runtime/linux/copy.c (_stp_copy_from_user): On failure, don't bother to
clear out the destination buffer (since we can't be sure the number of
bytes to copy is valid).
* tapset-procfs.cxx (procfs_var_expanding_visitor::visit_target_symbol):
When generating code that calls _ stp_copy_from_user(), be sure to
handle failure properly.