systemtap/systemtap-build-source-dir.patch
Tony Jones 3c37373be1 - Upgrade to version 5.2. See systemtap.changes for changelog
- Upgrade to version 5.2. See systemtap.changes for changelog 
- Upgrade to version 5.2. See systemtap.changes for changelog 
- Resolve errors with linux-6.13 based kernels.
  Building trivial 'hello world' failed with:
    <command-line>: fatal error: {path_to}stapconf.h: No such file or directory
  Attemptng to preserve build directory (-k) caused an infinite loop of:
    /usr/src/linux-6.13.4-1/scripts/Makefile.build:370: warning: overriding 
      recipe for target 'modules.order'
  New patch: linux-6.13-fedora-compatibility.patch
  New patch: rawhide-6.13-kbuild-compatibility.patch
- Update to version 5.2
  Summary of changes:
  * SystemTap frontend (stap) changes
    - New /* pragma:suffix */ for file-level embedded C code blocks to be
      placed near the end of the emitted kernel module C file.
       Corresponding macros allow additional C hooks for module init/exit.
    - With elfutils 0.192's release on 2024-10-18, the "metadata" based
      probes announced in systemtap 5.0 should now be increasingly available.
  * SystemTap backend changes
    - Numerous kernel portability changes
    - "probe never" probes don't emit C code at all any more.
    - The standard Fedora spec packaging breaks up the sdt.h header file
       and the /usr/bin/dtrace stub-builder script, for those cases where
       the macros in sdt.h are sufficient.
    - More robust message transport draining during shutdown to prevent
      message losses.
  * SystemTap tapset changes
    - Numerous kernel portability changes
    - Added a few functions to inet_sock.stp.
  * SystemTap sample scripts
    - traceio3.stp: Trace VFS operations by filename regex.
    - swapmonitor.stp: Trace swap operations.
  * Bugfixes
    - PR31597  Systemtap not extracting all the data sent to the print data 
               in the buffers before shutdown
    - PR31707  Need a way to postpone emitting the file-level embedded C blocks
    - PR31708  Probe never handlers still emit C code for the handler handlers 
               and probe local structs
    - PR31699  UBSAN errors for systemtap map functions with Fedora Rawhide and
               Fedora 39 6.8.8 kernels
    - PR31740  @hist_log affects the result of @variance
    - PR31893  access_ok() was called without turning off page faults
    - PR32064  SEC_ERROR_BAD_DATABASE during very first stap-server start
    - PR31703  Git detection false positive when 'which' not available
    - PR32107  Drop obsolete -Werror hack in buildrun.cxx
    - PR32194  Reflect the uprobe_unregister() split
    - PR32209  No tracepoints seen using kernel-6.12
    - PR32302  Unrecognized tracepoints
    - RHEL-55262  Handle S390_lowcore macro removal
    - RHEL-66275  Add some inet_sock.stp tapset functions.
    - RHEL-66150  Fix cachestat.stp for newer kernels.
    - RHEL-66577  Add swapmonitor.stp example script.

OBS-URL: https://build.opensuse.org/package/show/devel:tools/systemtap?expand=0&rev=154
2025-02-25 21:43:00 +00:00

91 lines
3.5 KiB
Diff

From: Tony Jones <tonyj@suse.de>
Subject: adjust build source dir for SuSE packaging
References: bnc#796574
kernel-$flavor:
/lib/modules/$version-$flavor
kernel-$flavor-devel: requires kernel-source
/usr/src/linux-$version-obj/$arch/$flavor
/lib/modules/$version-$flavor/build -> /usr/src/linux-$version-obj/$arch/$flavor
/lib/modules/$version-$flavor/source -> /usr/src/linux-$version [kernel-source]
kernel-flavor-debugsource:
/usr/src/debug/kernel-$flavor/
linux-obj/ {corresponds to /lib/modules/$version-$flavor/build}
linux-3.0/ {mirrors kernel-source}
DW_AT_comp_dir points to debugsource/linux-obj directory but internal trace
headers are only found in linux-3.0. Regardless, we don't want to require
debugsource as devel already requires kernel-source which provides the
necessary headers.
---
session.cxx | 28 ++++++++++++++++++++++++----
1 file changed, 24 insertions(+), 4 deletions(-)
Index: systemtap-5.2/session.cxx
===================================================================
--- systemtap-5.2.orig/session.cxx 2024-11-08 11:25:26.000000000 -0800
+++ systemtap-5.2/session.cxx 2025-02-25 12:58:15.330925215 -0800
@@ -112,6 +112,7 @@
kernel_release = string (buf.release);
release = kernel_release;
kernel_build_tree = "/lib/modules/" + kernel_release + "/build";
+ kernel_source_tree = "/lib/modules/" + kernel_release + "/source";
architecture = machine = normalize_machine(buf.machine);
for (unsigned i=0; i<5; i++) perpass_verbose[i]=0;
@@ -317,6 +318,7 @@
{
release = kernel_release = kern;
kernel_build_tree = "/lib/modules/" + kernel_release + "/build";
+ kernel_source_tree = "/lib/modules/" + kernel_release + "/source";
kernel_extra_cflags = other.kernel_extra_cflags;
architecture = machine = normalize_machine(arch);
setup_kernel_release(kern.c_str());
@@ -2346,21 +2348,39 @@
// normal search in tapsets.cxx. Without CONFIG_DEBUG_INFO, we'd
// need heuristics such as this one:
- string some_random_source_only_file = kernel_build_tree + "/COPYING";
+ // SUSE: if "build" link specified, attempt to determine "source" link
+ // N.B we won't match using above tapsets.cxx check
+ struct stat buf;
+ string source_tree = kernel_build_tree;
+
+ if (lstat(kernel_build_tree.c_str(), &buf) != -1 && S_ISLNK(buf.st_mode)) {
+ size_t pos = source_tree.find_last_of('/');
+ if (pos < source_tree.length() && source_tree.substr(pos+1, string::npos) == "build")
+ source_tree.replace(pos+1, string::npos, "source");
+ }
+
+retry:
+ string some_random_source_only_file = source_tree + "/COPYING";
ifstream epic (some_random_source_only_file.c_str());
if (! epic.fail())
{
- kernel_source_tree = kernel_build_tree;
+ kernel_source_tree = source_tree;
if (verbose > 2)
clog << _F("Located kernel source tree (COPYING) at '%s'", kernel_source_tree.c_str()) << endl;
- }
+ } else if (source_tree != kernel_build_tree) {
+ // one last try using kernel_build_tree (local fs build)
+ source_tree = kernel_build_tree;
+ goto retry;
+ }
}
else
{
update_release_sysroot = true;
kernel_release = kstr;
- if (!kernel_release.empty())
+ if (!kernel_release.empty()) {
kernel_build_tree = "/lib/modules/" + kernel_release + "/build";
+ kernel_source_tree = "/lib/modules/" + kernel_release + "/source";
+ }
// PR10745
// Let's not look for the kernel_source_tree; it's definitely