| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
| |
For a call like "stap -l 'syscall.*'", I found that ~10% of the time was
spent compiling the blacklist regexps over again for each probe point.
By moving this functionality into the kernel dwflpp instance, we can
reuse the regexps and get an easy speed boost.
|
|
|
|
|
|
|
|
|
|
| |
Both kernel.function and kprobe.function were defining a global array
stap_unreg_kprobes to use in bulk kprobes unregistration. The compiler
allowed the duplicate definition as long as they were the same size, as
it was when exercised in buildok/thirtyone.
kprobe.function now uses a separate stap_unreg_kprobes2, and the
testcase is modified to produce an imbalanced number of probes.
|
|
|
|
|
|
| |
When a kernel.function or kprobe.function fails in registration, we
usually print a WARNING and move on. With this patch, kprobes that have
the optional '?' flag will not print any WARNING.
|
| |
|
|\ |
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
| |
| |
| |
| |
| | |
It's not a terribly clean split, but moving it helps reveals some of the
knots that need to be untangled.
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| | |
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".
|
|/
|
|
|
|
| |
* 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.
|
|
|
|
|
|
| |
* 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.
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
| |
Newer gcc (4.4) places more DW_TAG_subprograms with DW_AT_declaration
at call sites. iterate_over_labels should only be concerned about
complete declarations.
* tapsets.cxx (dwflpp::iterate_over_labels): Skip DW_TAG_subprogram
that has attribute DW_AT_declaration.
|
|
|
|
|
|
|
| |
Instead of just structs and unions, we now also process typedefs, enums,
and base types in iterate_over_globals, so declaration_resolve can find
more variations. This especially useful to let @casts reference typedef
names.
|
|
|
|
|
| |
In translate_components, give a cleaner warning about trying to
dereference an enum type, rather than "unexpected type tag".
|
|
|
|
|
|
|
|
| |
Older (2.6.18) based kernels defined struct kprobes symbol_name as char *,
but newer (2.6.27) based kernels defined the same field as const char *.
* tapsets.cxx (kprobe_derived_probe_group::emit_module_init):
Always cast to char * when assigning to kprobes.symbol_name field.
|
|
|
|
|
| |
* tapsets.cxx (kprobe_derived_probe): Use enter_k[ret]probe>>2<<_probe.
* testsuite/buildok/thirtyone.stp: Test this.
|
|
|
|
|
| |
The code to emit maxactive was almost there; it just needed to enable
the maxactive probe component and pass the value down.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
All of our other kprobe types will let the script continue after a
registration failure, as per PR6749. The dwarfless kprobes should be
no exception.
Also, the way they were exiting was causing an unclean shutdown, so I
added tests to badkprobe.exp to make sure that cleanup is always allowed
to run.
|
| |
|
|
|
|
|
|
|
| |
* tapsets.cxx: Add dwfl_report_offline_predicate to check pending
interrupts for an early abort.
* tapsets.h: Declare it.
* translate.cxx: Add callback to function call.
|
|
|
|
|
|
| |
* sdt.h: Use .quad instead of .long for .probe section addresses.
ia64 and s390 require 'nop 0' and x86 tolerates it.
* tapsets.cxx (build): Fetch probe_name in a big endian friendly fashion.
|
| |
|
|
|
|
|
|
|
| |
The special syntax to generate a module for type information is now:
- "kernel<path/to/header.h>" to use the kernel's build environment
- "<path/to/header.h>" to use no special build environment, and so use
gcc's default parameters only (for user mode).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
2009-04-21 David Smith <dsmith@redhat.com>
* tapsets.cxx (utrace_derived_probe::utrace_derived_probe): If
during target-variable-expanding the probe, we added a new block
or probe, add them.
(utrace_var_expanding_visitor::visit_target_symbol_cached): New
function to cache target variables in a generated syscall probe to
use in syscall.return probes.
(utrace_var_expanding_visitor::visit_target_symbol_context): In a
syscall.return probe, you can't access $syscall. So use
visit_target_symbol_cached() to cache the value for use here.
* testsuite/systemtap.base/utrace_syscall_args.stp: Test use of
$syscall in syscall.return probes.
|
| |
|
|
|
|
|
| |
Commit 462c90c3 did this for user modules, but it's needed for kernel
modules too.
|
|
|
|
|
|
|
| |
The module field in @cast can now also be "kmod<path/to/header.h>" or
"umod<path/to/header.h>" to generate a kernel or user module which
includes the specified header. The appropriate compiler flags are used
to save all possible type debuginfo from the header.
|
|
|
|
|
|
| |
If a @cast encounters a module that it can't load, it should just go on
to the next module instead of throwing an exception. If there is no
next module, we'll get a better "type not found" exception anyway.
|
|
|
|
| |
* tapsets.cxx (dwflpp::iterate_over_labels): Fix indentation.
|
|
|
|
|
|
|
|
| |
* tapsets.cxx (dwflpp::iterate_over_labels): Renamed from
iterate_over_cu_labels, method signature simplified.
(query_srcfile_label): New.
(query_cu): Use above.
* labels.exp: New tests for above.
|
|
|
|
|
| |
For uprobes 1 and 2, add unmap_u[ret]probe() and define UPROBES_API_VERSION=2.
Adapt tapsets.cxx accordingly.
|
|
|
|
|
|
|
|
|
| |
* tapsets.cxx (dwflpp::translate_components): Eliminate the extra
die-dereference at the end of the loop (a regression from @casts).
* runtime/loc2c-runtime.h (store_bitfield): Use the target as the
representative type, since the base is always int64_t. Also be a
bit more aggressive with masking and parentheses.
* testsuite/systemtap.base/bitfield.*: New test for R/W bitfields.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In commit c4ce66a1 I shifted some of the variable accesses around, and
that caused the error messages for $return variables to lose context.
The root problem in this case was that dwarf_attr didn't find the type
attribute, and that failure wasn't immediately caught. Now that result
is checked so we can provide a proper error message.
While I'm at it, changing that lookup to dwarf_attr_integrate is enough
to make the $return value usable again, at least for the reported test
case.
|
|
|
|
|
|
| |
* tapsets.cxx (iterate_over_cu_labels): Treat -l specially so the
output of a .label can be improved.
* labels.stp: Test -l
|