Mark Wielaard [Wed, 23 Jun 2010 19:47:53 +0000 (21:47 +0200)]
Correct testing for compat task. Always use our own test.
is_compat_task(), when defined in the kernel, is really just for testing
whether or not we are in a 32-compat syscall. It does not definitely tell
us whether or not the current task is a 32bit compat task. So always use
our own test_thread_flag() with the arch specific TIF_flag.
* runtime/autoconf-is-compat-task.c: Removed.
* buildrun.cxx (compile_pass): Remove is-compat-task check.
* runtime/compatdefs.h: Detect s390 specific TIF flag. Always define
_stp_is_compat_task() when CONFIG_COMPAT defined.
* tapset/conversions.stp (user_long): Use _stp_is_compat_task().
(user_long_warn): Likewise.
Mark Wielaard [Wed, 23 Jun 2010 19:07:33 +0000 (21:07 +0200)]
Better split kernel/user space address symbol lookups.
* runtime/sym.c (_stp_mod_sec_lookup): Don't fall through to kernel module
address search when we know to be looking for a user space module/vma.
* tapset/context-symbols.stp (probefunc): Clarify documentation.
Use user_mode(CONTEXT->regs) check. Pass NULL for task to
_stp_symbol_snprint().
(probemod): Clarify documentation. Pass NULL for task to
_stp_mod_sec_lookup().
(modname): Likewise.
(symname): Clarify documentation.
(symdata): Likewise.
David Smith [Wed, 23 Jun 2010 16:39:05 +0000 (11:39 -0500)]
Fixed PR11725 by adding big-endian support to systemtap.printf/bin6.exp.
* testsuite/systemtap.printf/bin6.exp: Added a big-endian result string
and code to pick the correct result string bassed on the system running
the test.
Josh Stone [Wed, 23 Jun 2010 00:44:35 +0000 (17:44 -0700)]
PR10830: Add pp1() for the high-level probe name
This is a new function which should return the same high-level name that
"stap -l" gives. (e.g. syscall.open instead of kernel.function...)
* translate.cxx (c_unparser::emit_common_header): Add probe_point_listing.
(translate_pass): Add pp1 to stap_probe, predicated on
STP_NEED_PROBE_POINT_LISTING so we don't waste space.
* tapsets.cxx (common_probe_init): Set pp1 to script_location().
(common_probe_entryfn_prologue): Write pp1 to the CONTEXT.
* tapset-timers.cxx (profile_derived_probe_group::emit_module_decls):
Fixup CONTEXT->probe_point_listing, since it loops individual probes
manually.
* tapset/context.stp (pp1): New, expose the location to scripts.
* testsuite/buildok/context-embedded.stp: Build pp1().
* testsuite/systemtap.base/pp.{exp,stp}: Test the difference between
pp() and pp1().
Josh Stone [Wed, 23 Jun 2010 00:02:37 +0000 (17:02 -0700)]
Factor out common probe elements
The probes in every tapset type all have a handler (ph) and a
probe_point (pp), which are initialized and used in exactly the same
way. Let's bring that out into a common stap_probe struct.
This will also ease new fields, e.g. for PR10830.
* translate.cxx (translate_pass): Define struct stap_probe, also making
the decision of whether pp is better as char* or char[].
* tapsets.cxx (common_probe_init): Initialize a runtime stap_probe from
any translator derived_probe.
(common_probe_entryfn_prologue): Take a stap_probe instead of pp.
* tapset*.cxx: Adjust all tapsets to use the features above.
Josh Stone [Tue, 22 Jun 2010 20:01:10 +0000 (13:01 -0700)]
Add a function for getting a probe's script location
* elaborate.cxx (derived_probe::script_location): New, factor out the
code for grabbing the "friendly" location of a probe, as specified in
the script.
* main.cxx (printscript): Use it.
Josh Stone [Tue, 22 Jun 2010 18:42:30 +0000 (11:42 -0700)]
Make probe::almost_basest() work
* staptree.h (probe::almost_basest): Probes are the basest, not almost.
* elaborate.h (derived_probe::almost_basest): If base says 0, then the
almost_basest is this one.
* main.cxx (printscript): Use p->almost_basest() instead of collecting
the entire derivation chain.
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.