Stan Cox [Tue, 22 Jun 2010 16:37:43 +0000 (12:37 -0400)]
Handle $N numeric literal for -DSTAP_SDT_V2 probe asm arg descriptor.
sdt.h (__stap_argN): Switch gcc asm constraint from "ro" to "ron" to allow $N
tapsets.cxx (sdt_uprobe_var_expanding_visitor::visit_target_symbol):
Add literal_arg to support $N.
Mark Wielaard [Tue, 22 Jun 2010 13:53:47 +0000 (15:53 +0200)]
PR11722 Handle signed "addresses" from 32-on-64 user processes.
A systemtap long is signed, and so can contain a "negative" address.
Make sure to "chop off" the signedness when processing these longs
for 32-on-64 bit user tasks.
* runtime/compatdefs.h: Always (redifine) TIF_32BIT.
* runtime/sym.c (_stp_kallsyms_lookup): Detect long used as 32bit address.
* runtime/vma.c (_stp_vma_module_name): Likewise.
Lukas Berk [Mon, 21 Jun 2010 20:25:44 +0000 (16:25 -0400)]
Addressing bug 11706 "unautoconfiscation of most stap*.in manual
pages. autoconfiguration paths were moved to a new stappaths (7)
manual page while the other manual pages were changed to refer
to stappaths (7) in case of a dynamic path. Tested using a fresh
install with a set --prefix during configuration and evn MANPATHS to
match the given $prefix.
Lukas Berk [Mon, 21 Jun 2010 19:53:56 +0000 (15:53 -0400)]
Addressing bug 11706 "unautoconfiscation of most stap*.in manual pages".
Autoconfiguration paths were moved to a new stappaths (7) manual page,
while the other manual pages were changed to refer to stappaths(7) in
case of dynamic paths. Tested using a fresh install with a set --prefix
during configuration and evn MANPATHS to match the given $prefix.
Lukas Berk [Mon, 21 Jun 2010 19:48:52 +0000 (15:48 -0400)]
Addressing bug 11706 unautoconfiscation of most stap*.in manual pages
autoconfiguration paths were moved to a new stappaths (7) manual page
while the other manual pages were changed to refer to stappaths (7)
in case of a dynamic path. Tested using a fresh install with a
set --prefix during configuration and evn MANPATHS to match the given
$prefix.
David Smith [Mon, 21 Jun 2010 15:09:58 +0000 (10:09 -0500)]
Large update to kprobes test scripts.
* scripts/kprobes_test/kprobes_test.py: Python script to replace old
expect scripts.
* scripts/kprobes_test/whitelist.exp: Removed old expect script.
* scripts/kprobes_test/whitelist_lib.exp: Ditto.
* scripts/kprobes_test/gen_code.py: Changed so that could be included by
another python module, or directly executed.
* scripts/kprobes_test/is_probed.py: Ditto.
* scripts/kprobes_test/run_module.py: Ditto.
* scripts/kprobes_test/config_opts.py: Commented config options.
* scripts/kprobes_test/default.cfg: Commented out ltp tests that require a
server.
* scripts/kprobes_test/.gitignore: Updated.
Mark Wielaard [Mon, 21 Jun 2010 11:57:16 +0000 (13:57 +0200)]
Rework usymbols.exp to create arch specific executables and library names.
This makes it more clear what setup is specifically tested. But it also
seems to work around a bug where systemtap apparently picks up the wrong
copy (cached?) of similarly named executables/shared libraries. PR11735.
* testsuite/systemtap.context/usymbols.exp: Make testexename/testlibname
derived from arch under test.
Mark Wielaard [Mon, 21 Jun 2010 09:40:38 +0000 (11:40 +0200)]
usymbols.exp set maintestflags and testlibflags correctly for compat (-m32).
Testcase now really compiles both for default and compat (-m32) arches for
platforms that support it. This makes the 32-on-64 x86_64 fail similarly
to the ppc case (user_long fetches a kernel long, not the user space long).
* testsuite/systemtap.context/usymbols.exp: Set maintestflags and
testlibflags not just testflags.
David Smith [Fri, 18 Jun 2010 20:13:17 +0000 (15:13 -0500)]
Fixed PR11719 by fixing cmd_parse.exp for ppc.
* testsuite/systemtap.base/cmd_parse.exp: Mapped 'ppc64' to 'powerpc' (and
similar changes form s390x and i686) because that is the internal kernel
architecture.
Frank Ch. Eigler [Wed, 16 Jun 2010 21:03:01 +0000 (17:03 -0400)]
PR11553: better error messages for .return probes on inlined functions
* tapsets.cxx (dwarf_query): Add inlined_non_returnable field.
(query_dwarf_funct): Add to it as appropriate.
(dwarf_builder::build): Report on it as appropriate, function
of verbosity, match-count, warning-suppression. Yey.
(query_inline_instance_info): Assert !has_return.
David Smith [Wed, 16 Jun 2010 14:18:02 +0000 (09:18 -0500)]
Fixed PR11710 so that nd_syscall probes work on s390x systems.
* tapset/s390/registers.stp (_stp_arg): Fixed logic error. The last case
was missing an "if", which caused all _stp_arg() calls to only return
the value of r6.
Josh Stone [Tue, 15 Jun 2010 22:46:47 +0000 (15:46 -0700)]
The Death of target_symbol::base_name
Once upon a time, target_symbol was not a symbol, such shame.
But lo! one fateful day, an new inheritance raised its game.
Henceforth let target_symbol be known by its symbol::name.
Josh Stone [Tue, 15 Jun 2010 22:17:39 +0000 (15:17 -0700)]
PR3672: Auto-stringify char* and char[]
* tapsets.cxx (dwarf_pretty_print::print_chars): New, if the referenced
type looks like a C-string, dereference it as such.
(dwarf_pretty_print::recurse_array): Try print_chars first.
(dwarf_pretty_print::recurse_pointer): Ditto.
* tapset/conversions.stp (kernel_string2): New, with error string.
Josh Stone [Tue, 15 Jun 2010 00:18:43 +0000 (17:18 -0700)]
PR3672: don't print "_vptr.foo" members
The only use I can think for the vtable pointer is to try to identify an
instance's subclass, but I don't think that's useful in the general
case. We might want to think about how to expose that for power users
though, because our syntax doesn't allow "$p->_vptr.foo".
* tapsets.cxx (dwarf_pretty_print::recurse_struct_members): Filter out
members which start with "_vptr.foo".
Josh Stone [Tue, 15 Jun 2010 22:00:08 +0000 (15:00 -0700)]
Ensure synthetic functions get symbol resolution
When writing the pretty-print functions, I had trouble because the
referents weren't being automatically filled in. Rather than assigning
them manually, this change now adds synthetic functions to the session
in a way that they will get symbol resolution later.
* elaborate.cxx (semantic_pass_symbols): Process probes before
functions, in case synthetic functions are added to the file.
* staptree.cxx (functiondecl::join): New, add a synthetic function to
the session functions, and append it to the file's functions for later
symbol resolution.
* tapsets.cxx (dwarf_pretty_print::expand): Use fdecl->join to add the
function to the session, and leave referents as default for later.
(dwarf_pretty_print::deref): Ditto.
(dwarf_var_expanding_visitor::visit_target_symbol): Ditto.
(dwarf_cast_query::handle_query_module): Ditto.
(tracepoint_var_expanding_visitor::visit_target_symbol_arg): Ditto.
(tracepoint_var_expanding_visitor::visit_target_symbol_context): Ditto.
* tapset-procfs.cxx (procfs_var_expanding_visitor::visit_target_symbol):
Ditto.
Frank Ch. Eigler [Tue, 15 Jun 2010 21:45:40 +0000 (17:45 -0400)]
PR11684 cont'd
* doc/langref.tex: remove all references to tapset-defined functions.
Leave in just "formatted output" a la printf. Correct explanation
of $1 token-pasting. Still several bits left to fix later.
Josh Stone [Mon, 14 Jun 2010 17:44:10 +0000 (10:44 -0700)]
Banish the SyScall
We don't need to deal with the SYSCALL_WRAPPERS-generated SyS_foo,
because since the dawn of that feature they have also provided a normal
sys_foo alias. So as long as alias tracking is working, both in our
translator and in kallsyms for kprobe.function, we can be blissfully
ignorant.
David Smith [Tue, 15 Jun 2010 19:36:23 +0000 (14:36 -0500)]
Fixed PR11707 so that nd_syscall probes work on ppc64 systems.
* tapset/powerpc/registers.stp (_stp_get_register_by_offset): Fixed
compile error.
(_stp_arg): Fixed logic error. The last case was missing an "if", which
caused all _stp_arg() to only return the value of r10.
David Smith [Tue, 15 Jun 2010 16:39:43 +0000 (11:39 -0500)]
Added endian.stp/errno.stp build testcases.
* testsuite/buildok/endian-embedded.stp: New endian.stp testcase.
* testsuite/buildok/errno-embedded.stp: New errno.stp testcase.
* testsuite/buildok/ioscheduler-all-probes.stp: Made executable.
David Smith [Tue, 15 Jun 2010 16:25:31 +0000 (11:25 -0500)]
Added new dev.stp and ctime.stp build testcases and updated dentry testcase.
* testsuite/buildok/conversions-guru-embedded.stp: Renamed from
set_kernel.stp.
* testsuite/buildok/ctime-embedded.stp: New testcase.
* testsuite/buildok/dentry-embedded.stp: Renamed from dentry.stp and added
the rest of the functions from dentry.stp.
* testsuite/buildok/dev-embedded.stp: New testcase.
Josh Stone [Sat, 12 Jun 2010 01:22:56 +0000 (18:22 -0700)]
PR11698: Track aliases even with ppc function descriptors
We can include function descriptors in the symbol table, and just make
sure that we don't try to probe them with query_module_symtab. This
lets update_symtab do its thing resolving aliased names.
* dwflpp.h (func_info): Add a descriptor flag.
* tapsets.cxx (symbol_table::add_symbol): Set the descriptor flag.
(symbol_table::read_symbols): Not descriptors.
(symbol_table::get_from_elf): Functions from powerpc rejected sections
are function descriptors.
(dwarf_query::query_module_symtab): Don't probe descriptors.
Josh Stone [Sat, 12 Jun 2010 00:44:51 +0000 (17:44 -0700)]
PR10327: Fix and test alias matching
The optimization in commit 4df79aa broke alias matching for functions
without wildcards, but we didn't have any testing. :(
* dwflpp.cxx (dwflpp::iterate_single_function): Call update_symtab after
building the module function cache, to enable alias matching.
* testsuite/systemtap.base/func_alias.{exp,c}: New test.
William Cohen [Mon, 14 Jun 2010 14:30:06 +0000 (10:30 -0400)]
Make sure that the tapset documentation title descriptions are on a single line
The docproc program that extracts information information from the tapset
comments needs the title line to be a single line. Otherwise the second
line get counted as a description line and conflicts with the later
"Description:" section.
David Smith [Fri, 11 Jun 2010 20:26:46 +0000 (15:26 -0500)]
Got tty.stp working everywhere.
* tapset/tty.stp: Large update to get working on RHEL4, RHEL5,
RHEL6(beta), f12, f13, and rawhide.
* testsuite/buildok/tty-detailed.stp: Renamed from
testsuite/buildok/tty.stp and added more functions.
* testsuite/buildok/tty-resize.stp: Separate probe testcase since it can
fail because of PR 1155 (can't find inline function arguments).
* testsuite/buildok/tty-embedded.stp: New testcase.
* testsuite/systemtap.pass1-4/buildok.exp: Kfail the tty-resize.stp.
Tony Jones [Fri, 11 Jun 2010 17:15:50 +0000 (13:15 -0400)]
use probe_kernel_read for build-id verification if available
Post 1.1 I've been seeing the following on i686 (x86_64 is ok):
ERROR: Build-id mismatch: "kernel" vs. "vmlinux-2.6.34-8-default.debug" byte 0 (0x00 vs 0x00) rc -14 -14
Pass 5: run failed. Try again with another '--vp 00001' option.
as per irc discussion, following test diff fixed the problem on i686, I've not
tested on any other archs.
After the task_finder is started, no new targets can reliably be added.
So make sure that all registration/enabling of the task_finder and/or
the vma tracker is done in one place (task_finder_derived_probe_group).
* task_finder.h: Defined enable_vma_tracker and vma_tracker_enabled.
* task_finder.cxx: Implement enable_vma_tracker and vma_tracker_enabled.
(task_finder_derived_probe_group::emit_module_init): Also handle
vma_tracker.
* elaborate.cxx (visit_embeddedcode): Use enable_vma_tracker and
vma_tracker_enabled.
* session.h (systemtap_session): Remove need_vma_tracker.
* session.cxx (initialize): Remove need_vma_tracker initialization.
(parse_cmdline): Enable vma tracking early when -d user mode module found.
* translate.cxx (c_unparser::emit_module_init): Don't try to start
task finder and vma tracker here.
(c_unparser::emit_module_exit): Don't try to stop task finder here.
(emit_symbol_data_done): Don't emit static _stp_need_vma_tracker.
* runtime/sym.h: Remove static _stp_need_vma_tracker.
* runtime/sym.c (_stp_sym_init): Return error when registration failed.
* runtime/task_finder.c (stap_register_task_finder_target): Add sanity
checks to detect double registration or registration after task finder
was already started.
(stap_start_task_finder): Sanity check that task finder wasn't already
started.
Mark Wielaard [Fri, 11 Jun 2010 12:20:08 +0000 (14:20 +0200)]
Don't double print error message on bad stap command line option.
Bug introduced in commit db1354. getopt_long will already have printed
an appropriate error message in case of an invalid/unrecognized option
or an option missing an required argument. So don't print another error
message in that case.
Stan Cox [Thu, 10 Jun 2010 21:40:29 +0000 (17:40 -0400)]
Fix tests for -DSTAP_SDT_V2.
dtrace -G -s foo.d builds foo.o so it must pass -DSTAP_SDT_V2 to gcc. Add a -D
flag (sun dtrace also has a -D flag) and pass that to the gcc invocation.
* dtrace.in (semaphore_def_append): Make -DSTAP_SDT_V1 the default.
(generate): Likewise.
(main): Add -D and pass to cpp and gcc.
* sdt_misc.exp: Run dtrace every iteration and pass it -DSTAP_SDT_V2.
Tony Jones [Thu, 10 Jun 2010 13:38:14 +0000 (09:38 -0400)]
fix !CONFIG_FRAME_POINTER, !CONFIG_UTRACE case
In a kernel without FRAME_POINTERS (using the DWARF UNWINDER) and without
UTRACE I see the following in latest git master:
[...]
In file included from /tmp/stap/share/systemtap/runtime/stack.c:56:0,
from /tmp/stapPHqTen/stap_12068.c:52:
/tmp/stap/share/systemtap/runtime/stack-i386.c: In function "__stp_stack_print":
/tmp/stap/share/systemtap/runtime/stack-i386.c:69:25: error: implicit declaration of function "uprobe_get_pc".
AFAICT the autoconf test should result in STAPCONF_UPROBE_GET_PC=0 for the
case where CONFIG_UTRACE is unset since UPROBES requires UTRACE.
Josh Stone [Thu, 10 Jun 2010 01:48:51 +0000 (21:48 -0400)]
Give non-x86 a chance at uprobes SDT
* tapsets.cxx (sdt_uprobe_var_expanding_visitor): No need to assert that
we know dwarf_regs unless we actually encountered STAP_SDT_V2 with
arg_count > 0. V1 should continue to work on other architectures.
Josh Stone [Thu, 10 Jun 2010 01:44:42 +0000 (21:44 -0400)]
Let probe_bench work on archs besides x86_64
The cycles code is too x86_64-centric, but for now at least it's been
neutered to let other archs report basic timing numbers.
* scripts/probe_bench/bench.stp: Use get_cycles() instead of rdtsc().
* scripts/probe_bench/bench.c (rdtsc): Return 0 unless on x86_64. This
needs more work and inline assembly to fit more architectures.
Previously, the STAP_SDT_V2 -> V1 downgrade logic was half way down in the
header file, by which time some STAP_SDT_V2 definitions had already taken
effect.
Mark Wielaard [Wed, 9 Jun 2010 09:50:48 +0000 (11:50 +0200)]
Loop on utrace_barrier if utrace_control UTRACE_DETACH returns -EINPROGRESS.
When utrace_control(tsk, eng, UTRACE_DETACH) returns -EINPROGRESS that
means there are still handlers running. So loop on utrace_barrier(tsk, eng)
in that case, till it no longer returns -ERESTARTSYS. That makes sure that
no engine handler will be called afterwards, so we can safely unload the
stap module. Not doing this might have caused PR11672
(utrace_report_syscall_exit crash), although we don't yet have a simple
reproducer for that issue.
* runtime/itrace.c (remove_usr_itrace_info): Loop on utrace_barrier if
utrace_control returned -EINPROGRESS.
* runtime/task_finder.c (stap_utrace_detach): Likewise.
(stap_utrace_detach_ops): Likewise. And warn if stap_utrace_detach
didn't return successfully.
(__stp_utrace_attach): Loop on -ERESTARTSYS after utrace_barrier.
(__stp_utrace_task_finder_target_quiesce): Likewise.
Josh Stone [Fri, 4 Jun 2010 23:01:32 +0000 (16:01 -0700)]
uprobes_ppc: define MSR_MASK and clean up error cases
- The emulate_step code was copied from the kernel, but needs to have
the #define MSR_MASK too.
- A case in emulate_step could fall through with an illegal instruction,
just break and return 0 instead.
- A few privileged instructions can't be emulated and so return -1, but
we don't want uprobe_emulate_insn to see that as non-zero -> TRUE.
At a minimum, this restores whatever SSOL-faulty behavior would have
existed before emulate_step was added. We should also add checks in
arch_validate_probed_insn to avoid such instructions in the first place.
Signed-off-by: Josh Stone <jistone@redhat.com> Acked-by: Jim Keniston <jkenisto@us.ibm.com>
Mark Wielaard [Tue, 8 Jun 2010 11:32:21 +0000 (13:32 +0200)]
PR11678 Pick up ld.so (and other absolute shlibs) through stap --ldd.
* translate.cxx (add_unwindsym_ldd): Make scan slightly stricter, require
shlib to start as absolute path and address to be hex. Also allow direct
absolute shlib paths without soname.
Josh Stone [Mon, 7 Jun 2010 20:28:58 +0000 (13:28 -0700)]
Guard embeddedcode_info_pass from failures
We should not run this pass if there were previous errors, as
functioncall_traversing_visitor require referents on all calls. Fixes
a segfault in semko/five.stp after an arg-count mismatch, as well as the
new semko/nofunc.stp with a completely missing function.
* elaborate.cxx (semantic_pass): Only do embeddedcode_info_pass if !rc.
* testsuite/semko/nofunc.stp: New, as I couldn't find such a test.
Josh Stone [Mon, 7 Jun 2010 20:14:37 +0000 (13:14 -0700)]
Improve identification of arity-mismatch errors
Instead of pointing at the declaration site, we now finger the use which
is trying to set a bad arity, and also mention who originally set the
arity if possible. For example, semok/six.stp now says:
semantic error: inconsistent arity (1 vs. 2): identifier 'bar' at ../testsuite/semko/six.stp:6:3
source: bar[1, 2] = 3; # inconsistent array dimensions
^
semantic error: arity 1 first inferred here: identifier 'bar' at :5:3
source: bar[1] = 2;
^
* staptree.cxx (vardecl::set_arity): Require a token from the caller,
and report the original caller's token as well.
* elaborate.cxx (symresolution_info::visit_symbol): Pass the token.
(symresolution_info::find_var): Ditto.
* parse.cxx (parser::parse_global): Ditto.
* tapset-mark.cxx (mark_derived_probe::mark_derived_probe): Ditto.
* tapset-utrace.cxx
(utrace_var_expanding_visitor::visit_target_symbol_cached): Ditto.
* tapsets.cxx (tracepoint_derived_probe::tracepoint_derived_probe):
Ditto.
Josh Stone [Mon, 7 Jun 2010 19:58:00 +0000 (12:58 -0700)]
Never permit homonymous vars with different arity
It was previously possible to generate a global array and local scalar
having the same name, because find_var was glossing over globals that
didn't have compatible_arity.
Fixes semko/nine, and improves semko/six to an arity-mismatch error
rather than a local-array error.
* elaborate.cxx (symresolution_info::find_var): Use set_arity without
checking compatibile_arity, so that compatibility gets asserted.
(symresolution_info::visit_foreach_loop): Add "missing global" hint.
(symresolution_info::visit_arrayindex): Don't create local arrays.
Mark Wielaard [Mon, 7 Jun 2010 14:20:56 +0000 (16:20 +0200)]
PR11665 Add umodname(addr) tapset function.
* runtime/sym.c (_stp_tf_mmap_cb): Always register module name in vma_map.
(_stp_module_name): New function.
* tapset/ucontext.stp: New tapset.
* testsuite/buildok/ucontext.stp: New pass 4 test.
* testsuite/systemtap.context/usymbols.exp: Extend pass 5 test to include
umodname(handler).
Mark Wielaard [Mon, 7 Jun 2010 13:09:07 +0000 (15:09 +0200)]
Increase TASK_FINDER_VMA_ENTRY_ITEMS default.
Somewhat arbitrary default, this is often way too much for tracking
single process, but often too little when tracking whole system.
FIXME Would be nice to make this dynamic. PR11671
* runtime/task_finder_vma.c: Clean up some (bad) comments.
#define TASK_FINDER_VMA_ENTRY_ITEMS 1536.