summaryrefslogtreecommitdiffstats
path: root/dwflpp.h
Commit message (Collapse)AuthorAgeFilesLines
* PR3498 cont'd, fix wildcard module("*") probesFrank Ch. Eigler2009-07-081-1/+1
| | | | | | | | * dwflpp.cxx (name_has_wildcard): Make static. (dwfl_report_offline_predicate): Check & adjust behavior. * dwflpp.h: Corresponding changes. * tapsets.cxx: Note that kern_dw[] keys may be wildcard strings. * testsuite/buildok/fortysix.stp: New test.
* PR3498: speed up pass-2 and pass-3 for kernel offline dwfl module searchingFrank Ch. Eigler2009-07-071-2/+2
| | | | | | | | | | | | | | | | | | | * dwflpp.cxx (dwflpp ctor): Parametrize for user/kernel modes. Update callers. (dwfl_report_offline_predicate): New function. Filter and abort searches early if possible. (setup_kernel): Use new predicate. * dwflpp.h: Corresponding changes. * tapsets.cxx (dwfl_report_offline_predicate): Remove this shared implementation. (dwarf_builder): Turn kern_dw into module_name->dwflpp* map, just like user_dw. (get_kern_dw): Adapt. (dwarf_build_no_more): Adapt. * tapsets.h: Remove old shared predicate. * translate.cxx (dwfl_report_offline_predicate2): New function. Filter and abort searches early if possible. (emit_symbol_data): Use it.
* PR10327: resolve symbol aliases to dwarf functionsJosh Stone2009-07-011-22/+1
| | | | | | | | | | | | | | | | | | | | | This will first read in the symbol table for modules, and update the dwarf cu_function_cache with aliased names too. Then when iterating in dwarf, all of the possible names are matched, instead of only the canonical dwarf name. * dwflpp.cxx (dwflpp::iterate_over_functions): call update_symtab, and track wildcard addresses in a set to avoid alias dupes * dwflpp.h (symbol_table::Compare): removed * tapsets.cxx (symbol_table::map_by_addr): replaces list_by_addr (symbol_table::sort): removed -- multimap doesn't need sorting (symbol_table::mark_dwarf_redundancies): removed, see update_symtab (symbol_table::purge_syscall_stubs): remove map elements inline (dwarf_query::handle_query_module): preload the symtable. (query_dwarf_func): don't compare the function a second time, especially since it may have been an alias that matched at first. (module_info::get_symtab): allow being called multiple times (module_info::update_symtab): copy dies from the cache to the symtab, and also add aliased names to the cache
* PR10305 Mark probes fail on prelinked shared library.Mark Wielaard2009-06-241-0/+2
| | | | | | | | | | | | | | Mark probes rely on literal statement addresses, these are based on the on-disk module address space. Introduce helper function to turn such addresses into symbol addresses as expected by libdwfl. Also properly adjust for dw bias when such addresses are used in dw queries. * dwflpp.h (dwflpp::literal_addr_to_sym_addr): New method. * dwflpp.cxx (query_cu_containing_address): Don't "globalize" address. (literal_addr_to_sym_addr): New method. * tapsets.cxx (query_module_dwarf): Turn literal addresses into symbol addresses. (query_dwarf_func): Likewise and adjust for dw module bias.
* Remove needless string copyingJosh Stone2009-06-231-6/+6
| | | | | | | | | | | | More fat-trimming optimization for ~7% off listing syscall.*. * dwflpp.cxx (dwflpp::iterate_over_functions): remove a parameter copy (dwflpp::module_name_matches): Use const string& parameters (dwflpp::name_has_wildcard): Ditto. (dwflpp::module_name_final_match): Ditto. (dwflpp::function_name_matches_pattern): Ditto. (dwflpp::function_name_matches): Ditto. (dwflpp::function_name_final_match): Ditto.
* PR 10313 Build error due to deprecation of elf_getshstrndx in elfutils (old)Mark Wielaard2009-06-231-0/+3
| | | | | | | | Really old versions of elfutils didn't have version.h, but we still want to support them. So add workaround also for that case. * dwflpp.h: Define elf_getshdrstrndx as elf_getshstrndx also for really old elfutils versions.
* PR 10313 Build error due to deprecation of elf_getshstrndx in elfutils.Mark Wielaard2009-06-231-0/+7
| | | | | | | | * dwflpp.h: Check elfutils version, define elf_getshdrstrndx as elf_getshstrndx if elfutils 0.142 detected. * dwflpp.cxx (get_blacklist_section): Use elf_getshdrstrndx. * tapsets.cxx (probe_table): Likewise. (prepare_section_rejection): Likewise.
* Remove dwflpp::default_nameJosh Stone2009-06-081-2/+0
| | | | | | It was just a basic NULL check, but creating its string temporaries was causing a fair slowdown. Removing this function and adjusting the callers shaves ~5% off the syscall.* elaboration time.
* Cache the last result of dwarf_getscopesJosh Stone2009-06-021-0/+5
| | | | | | | | | | | This one function accounted for ~30% of my callgrind profile of "stap -l 'syscall.*'", even though it was only called ~1200 times. We call dwarf_getscopes for each $target variable, with the same parameters within a given probe. Since they're no nicely grouped, it's easy to just cache the most recent call, and the next few calls will be a hit. Overall this cuts the number of calls down to about 300, for an easy speed gain.
* Move the blacklist functions into dwflppJosh Stone2009-06-011-0/+21
| | | | | | | 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.
* Privatize many dwflpp membersJosh Stone2009-05-151-56/+56
| | | | | This helps make it more obvious which methods are accessed by external classes, which should help in refactoring.
* Simplify our unordered_map typedefsJosh Stone2009-05-151-13/+9
|
* Break the dwflpp dependence on query_cuJosh Stone2009-05-151-2/+1
|
* Break the dwflpp dependence on query_moduleJosh Stone2009-05-151-3/+0
|
* Merge the dwflpp::query_cu_..._address methodsJosh Stone2009-05-151-4/+1
| | | | | | | | 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.
* Remove unused dwflpp methodsJosh Stone2009-05-151-4/+0
| | | | | | | | These three methods had no callers, and are thus obsolete: dwflpp::focus_on_module_containing_global_address(Dwarf_Addr a) dwflpp::global_address_to_module(Dwarf_Addr a) dwflpp::cu_name_matches(string pattern)
* Move dfwlpp into its own fileJosh Stone2009-05-121-0/+383
It's not a terribly clean split, but moving it helps reveals some of the knots that need to be untangled.