Josh Stone [Wed, 20 May 2009 21:46:25 +0000 (14:46 -0700)]
PR10177: init/kill time in sleepy context only
Previously, _stp_init_time and _stp_kill_time were being called from
begin/end/error probes, which will run with preemption disabled. The
BUG reported on RT kernels showed that cpufreq_unregister_notifier can
end up sleeping, which violates our preemption block.
This patch moves the init/kill into systemtap_module_init/exit, where it
is safe to sleep. The code maintains a new predicate with the define
STAP_NEED_GETTIMEOFDAY, so we don't still incur any timer overhead if
it's not used.
Mark Wielaard [Wed, 20 May 2009 21:11:43 +0000 (23:11 +0200)]
Properly read eh_frame and pass is_ehframe correctly.
* runtime/unwind.c (adjustStartLoc): Add extra dbug_unwind.
(_stp_search_unwind_hdr): Always pass true for is_ehframe.
(unwind_frame): Properly pass through is_ehframe to adjustStartLoc().
(unwind): Add extra dbug_unwind.
* translate.cxx (dump_unwindsyms): Output and use correct eh_frame
and eh_len.
Mark Wielaard [Wed, 20 May 2009 14:51:24 +0000 (16:51 +0200)]
Use debug_frame table, then fallback to eh_frame when necessary.
* runtime/unwind.c (unwind): Call new unwind_frame() first with debug_frame
data, then if that wasn't able to unwind again with eh_frame data.
(unwind_frame): Adapted version of old unwind() function that takes a
table, table length and whether it is an eh_frame table.
Mark Wielaard [Wed, 20 May 2009 13:40:29 +0000 (15:40 +0200)]
Pass and use ptrType and is_ehframe to unwind adjustStartLoc.
* runtime/unwind.c (adjustStartLoc): Add ptrType and is_ehframe as arguments.
Use these to adjust location when necessary.
(DEBUG_UNWIND): Move block before adjustStartLoc.
Pass false for is_ehframe throughout.
Mark Wielaard [Wed, 20 May 2009 13:24:02 +0000 (15:24 +0200)]
Fetch and store both debug_frame and eh_frame tables.
* runtime/sym.h (_stp_module): Remove unwind_data, unwind_data_len and
unwind_is_ehframe fields. Add debug_frame, eh_frame, debug_frame_len,
eh_frame_len and eh_frame_addr fields.
* runtime/unwind.c: Use debug_frame and debug_frame_len instead of
unwind_data and unwind_data_len throughout.
(cie_for_fde): Take unwind_data and is_ehframe as direct arguments.
* runtime/unwind/unwind.h (cie_for_fde): New function declaration.
* translate.cxx (get_unwind_data): Fetch and return both debug_frame
and eh_frame tables.
(dump_unwindsyms): Dump both debug_frame and eh_frame tables.
Unify formatting of syscalls.stp and syscalls2.stp.
Rules:
- Specify probe points for aliases starting from the alias declaration
line and with one probe point per line.
- Use K&R indent style -- probe alias/point/function opening brace goes
to the line following the declaration, other opening braces are kept
on the same line as the control statements.
- Indent using tabs.
- Surround operators with spaces.
- Put spaces after commas.
- Avoid trailing whitespaces.
Complete the names-to-numbers conversion in nd_syscalls.stp.
Replace in-scope variables references with *_arg functions. Use 'kprobe'
family of probes instead of 'kernel' family for dwarfless probing. Also
fix a few typos and unify formatting.
David Smith [Mon, 18 May 2009 18:05:01 +0000 (13:05 -0500)]
PR10091 fixes.
* runtime/itrace.c (usr_itrace_report_signal): Add a workaround for
ppc-specific problem.
* testsuite/systemtap.base/itrace.exp: Improved tests. Improved test
completeness. Will also no longer give fails for systems that don't
support single or block step (will give xfails instead).
Josh Stone [Fri, 15 May 2009 20:14:52 +0000 (13:14 -0700)]
Merge the dwflpp::query_cu_..._address methods
The method query_cu_containing_global_address was only called by
query_cu_containing_module_address, and the latter was just doing a
simple argument transform. They are now merged into a single method,
query_cu_containing_address. The function module_address_to_global is
also merged here at its only call site.
Mark Wielaard [Fri, 15 May 2009 13:06:33 +0000 (15:06 +0200)]
Tidy/tighten DEBUG_UNWIND ptrType a bit.
* runtime/unwind.c (_stp_enc_hi_name): Include prefix for hi == 0.
(_stp_enc_lo_name): Don't include prefix.
(_stp_eh_enc_name): Always include hi_name.
(unwind): Always include newline in dbug_unwind() calls.
Josh Stone [Fri, 15 May 2009 01:47:33 +0000 (18:47 -0700)]
[tracepoints] Print pointer arguments with %p
We know the full type of every tracepoint argument, so for those that
are pointers, print $$vars/$$parms using "%p". The integer-type
arguments continue to use the generic "%#x".
Mark Wielaard [Thu, 14 May 2009 17:07:10 +0000 (19:07 +0200)]
PR10139 Mark .probes section SHF_ALLOC.
* includes/sys/sdt.h (STAP_PROBE_DATA_): Mark .probes section SHF_ALLOC.
* tapsets.cxx (dwarf_builder::build): Search in either dwarf or main elf
file for .probes section.
Keiichi KII [Wed, 13 May 2009 20:55:11 +0000 (16:55 -0400)]
PR 6930: Add additional testcases for flight recorder mode
* testsuite/parseko/cmdline17.stp:
command line check - bad combination with -D and -L
* testsuite/parseko/cmdline18.stp:
command line check - bad combination with -D and -d
* testsuite/parseko/cmdline19.stp:
command line check - bad combination with -D and -c
* testsuite/parseko/cmdline20.stp:
command line check - need output file with -D
* testsuite/parseko/cmdline21.stp:
command line check - need output file with -S
* testsuite/systemtap.base/flightrec3.exp:
New test case for file switching with bulk mode
* testsuite/systemtap.base/flightrec3.stp:
Test script for file switching per cpu
Mark Wielaard [Sun, 10 May 2009 18:24:40 +0000 (20:24 +0200)]
Get .probes section through dwarf debuginfo file if necessary.
* tapsets.cxx (dwarf_builder::build): Add some comments, verbose log
messages and get Elf through dwarf_getelf if it exists before searching
for .probes section.
Josh Stone [Sat, 9 May 2009 02:30:42 +0000 (19:30 -0700)]
Allow @cast failures to get optimized away
We have the saved_conversion_error field, but I wasn't using it. Now
@cast errors are saved in that field, so they're only seen if the
optimizer doesn't remove the @cast.
Josh Stone [Sat, 9 May 2009 01:32:17 +0000 (18:32 -0700)]
PR10054: Unify the translate_components errors
Since translate_components is the one that knows the details of its
failures, it makes more sense to let it throw its own errors, instead of
relying on each caller to do it. The function now always either returns
successfully or throws an error.
Josh Stone [Sat, 9 May 2009 00:50:28 +0000 (17:50 -0700)]
Refactor anonymous lookups in translate_components
The previous code recursed the entirety of translate_components, and
it seemed to be restarting the components list every time, so it would
only work if the anonymous portion was the first component. Even then,
examining the code output by semok/thirtythree revealed that it wasn't
fully translating the locations when multiple anonymous pieces were
involved.
Instead, it now recurses in a separate function, find_struct_member,
which does just enough to find the member die and return. It also
builds a vector of the locations passed through, so translate_components
can output code for the full chain of anonymity.
The generated code for semok/thirtythree's $page->mapping now appears to
match the offsets from my manual inspection of struct page. I also
added a test for $page->first_page->mapping, which works now but would
segfault the old code.
Josh Stone [Fri, 8 May 2009 19:40:43 +0000 (12:40 -0700)]
Simplify buildok/context_test.stp
The test was using optional probes on uptime_read_proc, which doesn't
exist anymore on 2.6.30. The problem is that when those optional probes
are skipped, the test doesn't really do anything.
For a buildok test of the context functions, the actual probe point
doesn't matter, so I've changed it to just a begin probe that calls all
of the functions.
Mark Wielaard [Fri, 8 May 2009 08:30:41 +0000 (10:30 +0200)]
Search for only under $(SRCDIR)/tapsets for tapsets.xml and cleanup.
* doc/SystemTap_Tapset_Reference/Makefile.am (tapsets.xml): Only search
under $(SRCDIR)/tapsets for .stp files. Cleanup tapsets.xml.new.
* doc/SystemTap_Tapset_Reference/Makefile.in: Regenerated.
Josh Stone [Fri, 8 May 2009 02:06:52 +0000 (19:06 -0700)]
Merge branch 'tapsets-cleanup'
This merge splits some of the built-in tapsets into their own files, so
we can better maintain clean interfaces. Still TODO are the dwarf-
dependent tapsets though, because that's a much bigger mess to untangle.
Josh Stone [Wed, 6 May 2009 23:43:51 +0000 (16:43 -0700)]
Separate built-in timer tapsets
All of the timer.* tapsets are now built and handled in their own
tapset-timers.cxx, as the first step of many to pare down the current
monolithic tapsets.cxx.
Wenji Huang [Tue, 5 May 2009 23:26:38 +0000 (19:26 -0400)]
PR10102: tolerate the failure related to optional probe
This patch will make stap silently accept the
failure related to optional probe. It puts try/catch
around find_and_build which can cover most probe types.
The specific treatment for dwarf_derived_probe in
commit ed82b7c902d6a2e26452ec51c9cdb9665dbf9e97 is
reverted.