Josh Stone [Wed, 23 Jun 2010 21:28:16 +0000 (14:28 -0700)]
PR10830 cont'd: Rename pp1() -> pn() and isolate it
The new name is "pn" to evoke "probe name". It is also now isolated in
its own tapset file, so it's less likely to be pulled into and conflict
with a user's script accidentally.
No real code changes here -- it's roughly just s/pp1/pn/ and
s/probe_point_listing/probe_name/.
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.