| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
| |
The nfs, rpc, and scsi tapsets use @cast on types that may be compiled
into a kernel module or into the main kernel binary. The @cast search
path separated with colons lets us search both the kernel and the module.
For a couple of cases, I also merged sequential @casts that work just
fine as a single cast with a multiple-level dereference.
|
|
|
|
|
|
|
|
|
|
|
|
| |
Sometimes @cast()ing can fail if the type needed may or may not be
defined in a kernel module. This patch lets @cast take a colon-
separated list of modules to search for the type definition.
* tapsets.cxx (dwarf_cast_query): Simplify. Take the module and
the code result as reference parameters, and use code.empty() as
the sign that the type isn't resolved yet.
(dwarf_cast_expanding_visitor::visit_cast_op): Split e->module by
colon into substrings, and loop until the type is resolved.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Some time ago we loosened up the code for all probe types to allow
interrupts during the handler. However, when probing something like
kernel.trace("*"), you get a mix of probes in and out of the interrupt
path, and it becomes much more common to have probes skipped due to
interrupt reentrancy.
The common_probe_entryfn_prologue and common_probe_entryfn_epilogue
functions had an interruptible flag, but this was no longer used
anywhere. I removed this flag, but then reused the logic to check an
INTERRUPTIBLE macro instead. Now users can use -DINTERRUPTIBLE=0 to
prevent interrupt reentrancy in their script, at the cost of a bit more
overhead to toggle the interrupt mask.
|
| |
|
|
|
|
| |
* include/sys/sdt.h: Initialize args when declaring. Use alternate keywords.
|
|
|
|
|
|
| |
For parity with the DWARF probes, this makes tracepoints also define
$$parms, which has the same value as $$vars (since tracepoints are
missing the concept of $$locals).
|
|
|
|
|
| |
The probe_point clear was nested in the overload processing code, I
believe accidentally. This just makes it always cleared on probe exit.
|
|
|
|
|
| |
This now checks that CONTEXT->regs actually exists, and that the
requested offset is in the correct range.
|
|
|
|
|
| |
* testsuite/systemtap.base/sdt.exp: Enable stap_run2 when installtest_p.
* testsuite/systemtap.base/sdt.stp: Fixed all arg to $arg typos.
|
| |
|
|
|
|
|
|
| |
* testsuite/systemtap.base/sdt.exp: New test file.
* testsuite/systemtap.base/sdt.stp: Likewise.
* testsuite/systemtap.base/sdt.c: Likewise.
|
|
|
|
| |
* includes/sys/sdt.h: Add #include <sys/types.h>.
|
|
|
|
| |
* includes/sys/sdt.h: Assign args, after declaration.
|
|
|
|
| |
includes/sys/sdt.h: Replace c++ comments with plain C comments.
|
|
|
|
|
| |
* testsuite/lib/stap_run2.exp: Compare found and expected number of lines.
* testsuite/systemtap.*/*.exp (result_string): Make number of lines exact.
|
|
|
|
|
| |
* includes/sys/sdt.h (STAP_PROBE_STRUCT_ARG): Remove ending semi-colon.
(STAP_LABEL_REF): Likewise.
|
|\ |
|
| |
| |
| |
| | |
avoid SEGV
|
| | |
|
| |
| |
| |
| |
| | |
After linux-next commit f2a8205c, it takes two parameters again,
so we autoconf for it rather than use KERNEL_VERSION ifdefs.
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| | |
* tapsets.cxx (query_dwarf_func): die_has_pc (dwarf_haspc) does not expect a
module_start for shared objects so don't call module_address_to_global for the
statement address.
* testsuite/systemtap.base/labels.exp: Add tests for executable .statement(N),
shared object .label("L") and so .statement(N).
|
|/ |
|
|
|
|
|
|
|
|
|
| |
If stap is run with "-t -DDEBUG_REENTRANCY", additional warnings will
be printed for every reentrancy event, including the probe points of
the resident and interloper probes.
* tapsets.cxx (common_probe_entryfn_prologue): Add "new_pp" argument,
update all callers. Print reentrancy details if needed.
|
| |
|
| |
|
|\ |
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The tracepoint API provides tracepoint_synchronize_unregister() as a way
to guarantee that all tracepoint handlers are inactive. This is
necessary after unregistering to allow the module to safely unload.
* tapsets.cxx (tracepoint_derived_probe_group::emit_module_init):
Call synchronize after unregistering tracepoints.
(tracepoint_derived_probe_group::emit_module_exit): Ditto.
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
At one point, the tracepoints API didn't have DECLARE_TRACE, and the
trace headers all used DEFINE_TRACE. This is what got pulled into RHEL,
so we need to support this older usage. The rest of the API stays the
same though.
* buildrun.cxx (make_tracequery): Redefine DEFINE_TRACE as well.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This uses a similar mechanism as marker probes for storing target
variables in locals of the probe body.
* tapsets.cxx (tracepoint_arg): Add fields to help $target access.
(tracepoint_var_expanding_visitor): Expand code to access target
variables - a $target for each tracepoint parameter, as well as
the special $$name and $$vars.
(tracepoint_derived_probe::tracepoint_derived_probe): Expand targets
(resolve_tracepoint_arg_type): Determine if a parameter is a type
that we can dereference, and store the underlying type.
(tracepoint_derived_probe::build_args): Resolve the types.
(tracepoint_derived_probe::emit_probe_context_vars): Emit $target
placeholders into the locals of the probe body.
(tracepoint_derived_probe_group::emit_module_decls): Initialize
$targets from the entry point parameters.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* tapsets.cxx (tracepoint_arg): New
(tracepoint_derived_probe): Add declaring header name and arg vector
(dwarf_type_name): Build a type string for a given type DIE
(tracepoint_derived_probe::build_args): Scan the function DIE for
the name and type of formal parameters required by the tracepoint.
(tracepoint_derived_probe::tracepoint_derived_probe): Call
build_args and determine the relevant header to include.
(tracepoint_derived_probe_group::emit_module_decls): For each
tracepoint, include its header and declare a probe entry point with
the right function signature.
(tracepoint_derived_probe_group::emit_module_init): Call the
registration for each tracepoint, and handle error unwinding.
(tracepoint_derived_probe_group::emit_module_exit): Unregister each.
|
| |
| |
| |
| |
| |
| | |
* tapsets.cxx (tracepoint_derived_probe): Create a skeleton probe
(tracepoint_derived_probe_group): Create a skeleton group
(tracepoint_query::handle_query_func): build a probe
|
| |
| |
| |
| |
| |
| |
| | |
* tapsets.cxx (tracepoint_query): Iterate over the modules, CUs, and
functions in tracequery.ko looking for our hijacked tracepoint
declarations.
(tracepoint_builder::build): Run a tracepoint_query
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* session.h (systemtap_session): add tracepoint_derived_probes
* buildrun.cxx (make_tracequery): New - builds a kernel module that
hijacks the tracepoint declarations, so we can query debuginfo.
* buildrun.h: declare above
* tapsets.cxx (tracepoint_builder): New builder for tracepoint
probes. For now it just handles the initialization to build the
tracequery kernel module.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* tapsets.cxx (dwflpp::iterate_over_functions): Change arg from
void* to base_query*, and add explicit function-search parameters.
(query_cu): update caller
(query_dwarf_func): update callback signature
(Note: instead of passing around callback functions, it might be nicer
to use a virtual method in base_query...)
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
We used to check & init module_cache in a few inconsistent places. Now
it is always handled in dwflpp::setup_user/setup_kernel.
* tapsets.cxx (dwflpp::setup_user): add module_cache check
(dwarf_builder::build): remove module_cache check
(dwarf_cast_expanding_visitor::visit_cast_op): ditto
|
| | |
|
| |
| |
| |
| | |
* includes/sys/sdt.h (STAP_PROBE): Don't add __VA_ARGS__.
|
| |
| |
| |
| |
| | |
* includes/sys/sdt.h (STAP_PROBEN_): New macros that take
advantage of __COUNTER__
|
| |
| |
| |
| |
| |
| |
| |
| | |
Rewrite some functions using type casting to
get rid of embedded C code in nfs, scsi, signal,
socket, rpc, task and vfs tapset.
Signed-off-by: Wenji Huang <wenji.huang@oracle.com>
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| | |
Dev Guide
|
|/ |
|
| |
|
| |
|
| |
|
| |
|