Dave Brolley [Tue, 5 Oct 2010 18:25:20 +0000 (14:25 -0400)]
Miscellaneous improvements.
- break out starting of a server into start_server to be used by
setup_server and elsewhere.
- call cleanup before exiting if smoke tests fail.
- cleanup *.sgn files.
Dave Brolley [Mon, 27 Sep 2010 16:03:39 +0000 (12:03 -0400)]
PR 11922: Restrict compile-server client attempts to resolve server hosts.
Most times we can get the proper host name/ip address from avahi or from
certificates in our databases. Only attempt to resolve hosts for servers
specified directly using --use-server.
David Smith [Tue, 5 Oct 2010 21:52:30 +0000 (16:52 -0500)]
Run clone/fork/vfork tests with and without semaphores.
* testsuite/systemtap.clone/dtrace_clone.exp: Run the test twice - once
without semaphores, once with semaphores.
* testsuite/systemtap.clone/dtrace_fork_exec.exp: Ditto.
* testsuite/systemtap.clone/dtrace_vfork_exec.exp: Ditto.
* testsuite/systemtap.clone/test_progs.tcl: Automatically run "make clean"
when needed. Allow callers to specify extra CFLAGS values.
* testsuite/systemtap.clone/dtrace_child.c: Allow semaphores to be
ifdef'ed out.
* testsuite/systemtap.clone/dtrace_clone.c: Ditto.
* testsuite/systemtap.clone/dtrace_fork_parent.c: Ditto.
* testsuite/systemtap.clone/dtrace_vfork_parent.c: Ditto.
* testsuite/systemtap.clone/Makefile.fork_exec: Removed unused define.
* testsuite/systemtap.clone/Makefile.vfork_exec: Ditto.
David Smith [Tue, 5 Oct 2010 21:07:31 +0000 (16:07 -0500)]
In the syscall.*utime probes, get values directly.
* tapset/syscalls2.stp (syscall.utime): Instead of calling a function to
get actime/modtime, use user_long() to get the value.
(syscall.compat_utime): Ditto.
Josh Stone [Tue, 5 Oct 2010 00:56:26 +0000 (17:56 -0700)]
PR11739: Add an STP_ALIBI flag
Primarily just for testing purposes, define STP_ALIBI to shortcut all
probe handlers, so they're nothing but an atomic_inc. It prints a hit
report similar to STP_TIMING at the end.
Note that any logic that would have called exit() will also be blocked,
so you need other ways to end the script: SIGINT, finished -c, etc.
* tapsets.cxx (common_probe_entryfn_prologue): #ifdef STP_ALIBI, reduce
the probe handler to just an atomic_inc().
(common_probe_entryfn_epilogue): Close the #ifdef from above.
* translate.cxx (translate_pass): Add an atomic_t to stap_probe for
STP_ALIBI to track probe hits.
(c_unparser::emit_module_exit): Print alibi hit-report.
David Smith [Mon, 4 Oct 2010 20:46:38 +0000 (15:46 -0500)]
Fixed BZ634242 for older kernels.
* runtime/uprobes/uprobes.c (uprobe_report_clone): If two processes are
are sharing the same memory space (CLONE_VM) don't remove probes, since
that will remove the probes from both processes.
Josh Stone [Mon, 4 Oct 2010 19:26:30 +0000 (12:26 -0700)]
PR12081: Name procfs buffers based on a local index
We shouldn't use probe->name for the buffers, as that name is not
necessarily unique after our probe de-duplication efforts. Instead, we
can use a simple index variable to get a unique name for each procfs probe.
* tapset-procfs.cxx (procfs_derived_probe_group::emit_module_decls):
Declare and use the buffers with a name based on a simple index.
David Smith [Mon, 4 Oct 2010 15:45:36 +0000 (10:45 -0500)]
Small kprobes_test updates.
* scripts/kprobes_test/run_module.py: Improved waiting on spawned load
commands. Makes 30 attempts to find output (instead of trying
forever).
* scripts/kprobes_test/.gitignore: Ignore 'Module.markers' file and config
files.
* scripts/kprobes_test/kprobes_test.py: Minor update.
Josh Stone [Fri, 1 Oct 2010 23:41:19 +0000 (16:41 -0700)]
Replace kretprobe->entry_ph with a full stap_probe
This ensures that pp, pn, and STP_TIMING can be kept distinct for entry
handlers vs. their normal kretprobe handlers.
* tapsets.cxx (dwarf_derived_probe_group::emit_module_decls): Replace
entry_ph with entry_probe, pointing to the global stap_probes[], and
update all references.
Josh Stone [Fri, 1 Oct 2010 22:47:45 +0000 (15:47 -0700)]
Centralize stap_probe, and make STP_TIMING data-driven
With the move to per-probe_point STP_TIMING statistics, the design which
wrote a separate code block for every Stat suddenly ran into scalability
issues. We should instead be using a data-driven loop for this.
So, the scattered stap_probe structs are now pulled together in one
global, stap_probes[]. This contains the usual suspects: ph, pp, and pn;
it also keeps the extras that STP_TIMING needs: a Stat, the script
location, and the derivation record.
* translate.cxx (translate_pass): Add the STP_TIMING data to stap_probe,
and output the global stap_probes[] with everything.
(c_unparser::emit_module_init): Iterate the timing init at runtime.
(c_unparser::emit_module_exit): Iterate the timing output at runtime.
* tapsets.cxx (common_probe_init): Just return the right global stap_probe*
* tapset*.cxx, runtime/*: Make pointers of all stap_probe's, and make
the s/\./->/ change where needed too.
* elaborate.cxx (derived_probe::derived_locations): New, gives a string
reporting the derivation steps which reached this probe point.
David Smith [Fri, 1 Oct 2010 17:56:54 +0000 (12:56 -0500)]
Fixed BZ634242 by always looking up pids in the global namespace.
* runtime/uprobes2/uprobes.c (uprobe_get_tg_leader): Always look up the
pid in the global pid namespace. From Roland McGrath
<roland@redhat.com>
(uprobe_fork_uproc): Ditto. From Roland McGrath <roland@redhat.com>
(uprobe_report_clone): If two processes are are sharing the same memory
space (CLONE_VM) don't remove probes, since that will remove the probes
from both processes.
* tapsets.cxx (emit_module_exit): Make sure we always look up pids
in the global pid namespace, not in any private pid namespace.
* runtime/uprobes-common.c (stap_uprobe_change_plus): Ignore EEXIST
errors.
Josh Stone [Wed, 29 Sep 2010 20:51:30 +0000 (13:51 -0700)]
Improve the derivation output of STP_TIMING
We can't assume location[0] from the probes in the derivation chain, as
it may include e.g. an alias with multiple expansions. Instead, a new
"base_pp" member tracks which probe_point actually led to each step of
the derivation.
* elaborate.cxx (derived_probe::derived_probe): Remember the unmodified
probe_point as base_pp, esp. before any components are rewritten.
(derived_probe::collect_derivation_pp_chain): New, collect base_pp.
* translate.cxx (c_unparser::emit_module_exit): Use the pp chain in
STP_TIMING output.
Josh Stone [Wed, 29 Sep 2010 20:36:51 +0000 (13:36 -0700)]
Standardize how derived_probes dupe their location
A few of the derived_probe subclasses make duplicates of their
probe_point so they can rewrite it to something more specific. This
patch standardizes that behavior.
It also fixes kprobe_derived_probe and hwbkpt_derived_probe, which were
rewriting components without making a copy first.
Tony Jones [Wed, 29 Sep 2010 16:47:52 +0000 (12:47 -0400)]
PR10812: relocate module build-id
Relocate the build_id_vaddr obtained from dwfl_module_build_id. Failure to
do this was causing ppc64 systems to fail the build-id check for cases such as:
Josh Stone [Tue, 28 Sep 2010 21:41:37 +0000 (14:41 -0700)]
Allow de-duping in spite of STP_TIMING
To enable this, we can use a Stat pointer in the same place we keep the
individual pp data, so now even when the probe body is shared, separate
timing data is kept.
* elaborate.h (derived_probe): Add a "real" name which is unchanging,
unlike the regular name that may face de-duping.
* tapsets.cxx (common_probe_init): Use the "real" name for timing data.
(common_probe_entryfn_prologue): Use a local stat instead of
CONTEXT->statp, and initialize it from the probe data.
(common_probe_entryfn_epilogue): Also use the local stat.
* translate.cxx (c_unparser::emit_common_header): Remove statp, and
don't use any timing anti-dupe.
(c_unparser::emit_module_init): Timing globals are now based on the
"real" probe names.
(c_unparser::emit_module_exit): Ditto.
(c_unparser::emit_probe): No more timing anti-dupe.
(translate_pass): Declare the new global timing struct, and point to
it accordingly in STAP_PROBE_INIT.
Josh Stone [Fri, 24 Sep 2010 22:16:36 +0000 (15:16 -0700)]
Simplify the '?' removal for STP_TIMING
Add a new flag to probe_point::print() so the extra details can be
avoided. This skips '?', '!', and any conditionals as well.
* staptree.cxx (probe_point::print): Make the extras optional.
(probe_point::str): Pass along the choice of extras.
* translate.cxx (c_unparser::emit_module_exit): Let the print routine
skip the extra flags, rather than trying to strip them out manually.
Josh Stone [Tue, 28 Sep 2010 22:41:52 +0000 (15:41 -0700)]
Fix SDTv2 with separate debuginfo
We had a case where the ".probes" section was found in the main binary,
but then sdt_query::init_probe_scn got its Elf* by looking first via the
debuginfo and then falling back to the executable. So when we got the
raw data pointer, it was using the wrong Elf* for that section.
This fix is to let dwflpp::get_section return the Elf* in which it found
the appropriate section, so init_probe_scn doesn't have to guess.
* dwflpp.cxx (dwflpp::get_section): Add an optional Elf** return
pointer, and fill it in if needed.
* tapsets.cxx (sdt_query::init_probe_scn): Use that Elf* for the section.
Stan Cox [Mon, 27 Sep 2010 19:26:53 +0000 (15:26 -0400)]
Add v3 sdt.h awareness to scripts/probe_perf.
* scripts/probe_perf/bench.sh (stap_test): Use testsuite/sdt.h so we
can build for any of v1, v2, v3.
(main): Add -testsrcdir for pointing to testsuite/sdt.h.
Stan Cox [Wed, 22 Sep 2010 02:24:51 +0000 (22:24 -0400)]
Disambiguate asm operand parsing for v3 sdt.h
* tapsets.cxx (sdt_uprobe_var_expanding_visitor): Add probe_loc.
(sdt_uprobe_var_expanding_visitor::visit_target_symbol):
Support i as literal prefix so register names are unambiguous.
William Cohen [Tue, 21 Sep 2010 19:50:30 +0000 (15:50 -0400)]
PR12035 - staprun fails to build on ia64
The _SDT_ARGFMT and _SDT_ARG macros are adjusted to work around the ia64
compiler on RHEL-5. The ia64 gcc is not able to handle %c in the asm statement.
The ia64 and s390 also require an argument for the assembly language
nop instruction.
Roland McGrath [Wed, 18 Aug 2010 08:39:45 +0000 (01:39 -0700)]
Clean up test compilations using sys/sdt.h, test new and old variants
* testsuite/sys/sdt.h: New file.
* testsuite/lib/systemtap.exp (sdt_includes): New function.
* testsuite/systemtap.base/const_value.exp: Use [sdt_includes].
* testsuite/systemtap.base/cxxclass.exp: Likewise.
* testsuite/systemtap.base/vta-test.exp: Likewise.
* testsuite/systemtap.exelib/exelib.exp: Likewise.
* testsuite/systemtap.base/sdt.exp: Likewise.
Test new version plus sdt-compat.h v1 and v2 variants.
* testsuite/systemtap.base/sdt_misc.exp: Likewise.
Roland McGrath [Wed, 18 Aug 2010 08:35:40 +0000 (01:35 -0700)]
Make sdt-compat.h play nice with new sys/sdt.h
* sdt-compat.h: Change multiple inclusion protection to _SDT_COMPAT_H.
Omit probe macros if _SYS_SDT_H is defined.
* tapsets.cxx: Include "sys/sdt.h" before "sdt-compat.h".
Roland McGrath [Wed, 18 Aug 2010 06:49:01 +0000 (23:49 -0700)]
Move old sys/sdt.h to sdt-compat.h for translator use
* includes/sys/sdt.h: File renamed to ...
* sdt-compat.h: ... here.
* Makefile.am (noinst_HEADERS): New variable, add it.
* tapset.cxx: Include "sdt-compat.h" instead of "sys/sdt.h".
Roland McGrath [Tue, 17 Aug 2010 20:25:45 +0000 (13:25 -0700)]
Add configury for using .section "?" in sdt.h
* includes/sys/sdt-config.h.in: New file.
* configure.ac: Check for assembler support of .section name,"?".
* configure: Regenerated.
* Makefile.in: Regenerated.
Roland McGrath [Wed, 18 Aug 2010 22:37:22 +0000 (15:37 -0700)]
Test case for DW_OP_GNU_implicit_pointer support
* testsuite/systemtap.base/implicitptr.c: New file.
* testsuite/systemtap.base/implicitptr.stp: New file.
* testsuite/systemtap.base/implicitptr.exp: New file.
Roland McGrath [Tue, 27 Jul 2010 11:55:48 +0000 (04:55 -0700)]
loc2c internal reorganization and DW_OP_GNU_implicit_pointer handling
* loc2c.c (struct location_context): New type.
(struct location): New member context points to that.
Add pointer variant with .type = loc_implicit_pointer.
(alloc_location): Take just context pointer as argument.
(FAIL): Use context pointer.
(new_context): New function.
(translate_constant): New function, broken out of ...
(c_translate_constant): ... here. Call it.
(new_synthetic_loc): Don't take pool argument, origin->context has it.
(lose): Take new argument LEN, overall length of LEXPR.
Don't mention the offset into LEXPR if LEXPR is NULL or I is past LEN.
(translate): Take context argument instead of pool, addrbias.
Handle DW_OP_GNU_implicit_pointer.
(location_from_address): Take context argument instead of pool, fail,
fail_arg, emit_address, dwbias, attr, address, fb_attr, cfa_ops.
(location_from_attr): New function.
(translate_offset): New function, broken out of ...
(location_relative): ... here. Call it.
Take context argument instead of pool, dwbias, attr, address.
(c_translate_location): Use new_context.
(c_translate_argument): Likewise.
(emit_base_fetch): Diagnose for loc_implicit_pointer.
(emit_base_store): Likewise.
(c_translate_addressof, c_translate_array): Likewise.
(discontiguify): Likewise. Take context argument instead of pool.
(c_translate_pointer): Handle loc_implicit_pointer.
(c_translate_array_pointer): Likewise.
(c_emit_location): Likewise.
William Cohen [Wed, 15 Sep 2010 19:57:53 +0000 (15:57 -0400)]
Improved latencytap.stp
This version of latencytap.stp has the following improvements:
-Print out the data sorted on the total time waiting for each cause
-Have a debug flag to print out stack backtraces when there is no cause listed.
This is enabled by compiling latencytap to a module and then using:
staprun latentap.ko debug=1
William Cohen [Tue, 14 Sep 2010 21:39:55 +0000 (17:39 -0400)]
Use decimal output for automatic printing of global aggregates
Previously, the automatic printing of global aggregates was hexidecimal.
Most people find it more convenient to look at this information in decimal
form. Thus, the output is now decimal based. If one really needs or wants
the old behavior a --compatible=1.3 option can be added to the command line.
Stan Cox [Mon, 13 Sep 2010 18:49:45 +0000 (14:49 -0400)]
Use common handler for sdt.h v2/v3 and change sdt.h v2 to use it.
* tapsets.cxx (sdt_query::iterate_over_probe_entries): Replaces get_next_probe.
(sdt_query::handle_query_module): Use it.
(sdt_query::handle_probe_entry): New. Used by sdt.h v2/v3
Dave Brolley [Fri, 10 Sep 2010 18:18:07 +0000 (14:18 -0400)]
PR 11905: Take more care with stap-server config files.
- Config files now have a fixed suffix which avoids collisions with other
stap-server files.
- Config files are now interpreted in order to avoid execution of random
code.
William Cohen [Thu, 9 Sep 2010 16:49:22 +0000 (12:49 -0400)]
Updated latencytap.stp
The updated latencytap.stp uses more portable probe points for the collecting
the data. The script also maps the functions in the traceback to reasons the
sleep. The reasons for the sleeps were mechanically generated from
latencytop-0.5 latencytop.trans file.
Mark Wielaard [Thu, 9 Sep 2010 14:38:53 +0000 (16:38 +0200)]
Validate backtrace addresses.
* runtime/stack-i386.c (_stp_valid_pc_addr): New function.
(_stp_stack_print_fallback): Use it.
(__stp_stack_print): Use it.
* runtime/stack-x86_64.c (_stp_valid_pc_addr): New function.
(_stp_stack_print_fallback): Use it.
(__stp_stack_print): Use it.
* runtime/unwind/i386.h (arch_unw_user_mode): Removed.
* runtime/unwind/x86_64.h (arch_unw_user_mode): Likewise.
Roland McGrath [Mon, 30 Aug 2010 22:43:43 +0000 (15:43 -0700)]
Give staprun/stapio/stap-merge a standalone configure and makefile
* Makefile.am: New file.
* configure.ac: New file.
* Makefile.in: New generated file.
* aclocal.m4: New generated file.
* config.in: New generated file.
* configure: New generated file.