From 25114db1ce9c65a1b6844b9541c28f6e960821d8 Mon Sep 17 00:00:00 2001 From: fche Date: Wed, 23 Jan 2008 23:42:06 +0000 Subject: PR2521: configurable debuginfo search path 2008-01-23 Frank Ch. Eigler PR 2151 * tapsets.cxx (dwflpp::setup): Parametrize debuginfo_path. * stap.1.in: Document this. PR 2521. * systemtap.base/debugpath.exp: New test. --- ChangeLog | 6 ++++++ stap.1.in | 9 ++++++++- tapsets.cxx | 5 ++++- testsuite/ChangeLog | 5 +++++ testsuite/systemtap.base/debugpath.exp | 18 ++++++++++++++++++ 5 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 testsuite/systemtap.base/debugpath.exp diff --git a/ChangeLog b/ChangeLog index 511beaca..2d0281f0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -15,6 +15,12 @@ variables without indices. (c_unparser::emit_module_exit): Likewise. +2008-01-23 Frank Ch. Eigler + + PR 2151 + * tapsets.cxx (dwflpp::setup): Parametrize debuginfo_path. + * stap.1.in: Document this. + 2008-01-22 Jim Keniston * runtime/uprobes/uprobes.c: Fix from Srinivasa: Recast diff --git a/stap.1.in b/stap.1.in index 16a799cf..05eecda2 100644 --- a/stap.1.in +++ b/stap.1.in @@ -932,7 +932,14 @@ The location of kernel module building infrastructure. @prefix@/lib/debug/lib/modules/VERSION The location of kernel debugging information when packaged into the .IR kernel\-debuginfo -RPM. +RPM, unless overridden by the +.I SYSTEMTAP_DEBUGINFO_PATH +environment variable. The default value for this variable is +.IR \-:.debug:/usr/lib/debug . +This path is interpreted by elfutils as a list of base directories of +which various subdirectories will be searched. The \- at the front +means to skip CRC matching for separated debug objects and is a small +performance win if no possible corruption is suspected. .TP @prefix@/bin/staprun The auxiliary program supervising module loading, interaction, and diff --git a/tapsets.cxx b/tapsets.cxx index 937f34b3..06aa73aa 100644 --- a/tapsets.cxx +++ b/tapsets.cxx @@ -716,7 +716,10 @@ struct dwflpp { // XXX: this is where the session -R parameter could come in static char debuginfo_path_arr[] = "-:.debug:/usr/lib/debug"; - static char *debuginfo_path = debuginfo_path_arr; + static char *debuginfo_env_arr = getenv("SYSTEMTAP_DEBUGINFO_PATH"); + + static char *debuginfo_path = (debuginfo_env_arr ? + debuginfo_env_arr : debuginfo_path_arr); static const Dwfl_Callbacks proc_callbacks = { diff --git a/testsuite/ChangeLog b/testsuite/ChangeLog index e13092ac..6d3bf44d 100644 --- a/testsuite/ChangeLog +++ b/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-01-23 Frank Ch. Eigler + + PR 2521. + * systemtap.base/debugpath.exp: New test. + 2008-01-18 Frank Ch. Eigler * configure.ac: Bump version to 0.6.1. diff --git a/testsuite/systemtap.base/debugpath.exp b/testsuite/systemtap.base/debugpath.exp new file mode 100644 index 00000000..67b9eb70 --- /dev/null +++ b/testsuite/systemtap.base/debugpath.exp @@ -0,0 +1,18 @@ + +set test "debugpath-bad" +spawn env SYSTEMTAP_DEBUGINFO_PATH=/dev/null stap -e "probe kernel.function(\"sys_open\") {}" -p4 +expect { + -re {^semantic error:.*missing.*debuginfo} { pass $test } + timeout { fail "$test (timeout1)" } + eof { fail "$test (eof)" } +} +catch { close; wait } + +set test "debugpath-good" +spawn env SYSTEMTAP_DEBUGINFO_PATH=:/usr/lib/debug stap -e "probe kernel.function(\"sys_open\") {}" -p2 +expect { + -re {kernel.function.*pc=} { pass $test } + timeout { fail "$test (timeout2)" } + eof { fail "$test (eof)" } +} +catch { close ; wait } -- cgit