PATCH add more syntax for shared library probing
Stan Cox
scox@redhat.com
Wed Mar 23 15:12:00 GMT 2011
Comments on this patch to add more syntax for shared library probing?
Example:
1. library wildcard for function in libc.so
stap -c "/usr/bin/printf '%s\n' 'ABCD'" -e 'probe
process("/usr/bin/printf").library("*").function("__snprintf_chk") {printf("at
printf begin\n")} probe
process("/usr/bin/printf").library("*").function("__snprintf_chk").return
{printf("at printf end\n")} probe
process("/usr/bin/printf").library("*").statement("__snprintf_chk@snprintf_chk.c+2")
{printf("in printf body\n")}'
ABCD
at printf begin
in printf body
at printf end
2. Similar for -L. Perhaps filling in the wildcard with the matched library
would be useful.
stap -L 'process("/usr/bin/printf").library("*").function("__snprintf_chk")'
process("/usr/bin/printf").library("*").function("__snprintf_chk")? $s:char*
$maxlen:size_t $flags:int $slen:size_t $format:char const* $arg:va_list $done:int
3. Probe in a user SO
stap -c ./sdt_misc_uprobe_shared.x -e 'probe process
("./sdt_misc_uprobe_shared.x").library("*").statement("bar@sdt_misc.c+9") ?
{printf ("In bar i=%d\n",$i)}'
In bar i=2
* dwflpp.cxx (iterate_over_libraries): New. Just calls
iterate_over_libraries_dynamic with the Dwfl_Module.
(iterate_over_libraries_dynamic): Iterate through SHT_DYNAMIC for
the Dwfl_Module. Save DT_RPATH/DT_RUNPATH for library search.
DT_NEEDED/DT_SONAME are potentially SOs to search. Insure we
haven't already seen it, call the callback, then find the SOs
that this so references via iterate_over_libraries_module. The
system default library paths are explicitly appended to runpath.
(iterate_over_libraries_module): Get the Dwfl_Module for this SO
via dwfl_getmodules which just callbacks iterate_over_libraries_dynamic.
* util.cxx (find_executable): Add rpath and runpath default parameters.
Search: 1. LD_RPATH 2. LD_LIBRARY_PATH 3. LD_RUNPATH 4. system libraries
* tapsets.cxx (base_query): If this is a library then save the
executable path.
(query_module): For a library, call query_library_callback via
iterate_over_libraries.
(query_library_callback): New. Calls query_library.
(query_library): Substitute the library name into the chain then
derive_probes.
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: ,git.diff
URL: <http://sourceware.org/pipermail/systemtap/attachments/20110323/efc2f8f9/attachment.ksh>
More information about the Systemtap
mailing list