From b19a43768009076de3aea638922dfaebb687e3e9 Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Thu, 8 Jan 2015 14:47:20 -0800 Subject: [PATCH] Use the kernel source symlink for tracepoints When the source symlink is different than the build symlink, as for out-of-tree kernel builds and Debian linux-headers, then we should use that path as a prefix for finding tracepoint headers. --- tapsets.cxx | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/tapsets.cxx b/tapsets.cxx index 6f3068eff..85fd76b44 100644 --- a/tapsets.cxx +++ b/tapsets.cxx @@ -11116,7 +11116,7 @@ tracepoint_builder::init_dw(systemtap_session& s) glob_t trace_glob; - // find kernel_source_tree + // find kernel_source_tree from DW_AT_comp_dir if (s.kernel_source_tree == "") { unsigned found; @@ -11152,6 +11152,20 @@ tracepoint_builder::init_dw(systemtap_session& s) dwfl_end (dwfl); } + // find kernel_source_tree from a source link, when different from build + if (s.kernel_source_tree == "" && endswith(s.kernel_build_tree, "/build")) + { + string source_tree = s.kernel_build_tree; + source_tree.replace(source_tree.length() - 5, 5, "source"); + if (file_exists(source_tree) && + resolve_path(source_tree) != resolve_path(s.kernel_build_tree)) + { + if (s.verbose > 2) + clog << _F("Located kernel source tree at '%s'", source_tree.c_str()) << endl; + s.kernel_source_tree = source_tree; + } + } + // prefixes vector glob_prefixes; glob_prefixes.push_back (s.kernel_build_tree); -- 2.43.5