Upgrade to 5.0

Signed-off-by: SuperSix173 <liuchao173@huawei.com>
This commit is contained in:
SuperSix173 2024-01-24 10:44:40 +08:00
parent 379b83b21b
commit 4c7d1732a4
6 changed files with 15 additions and 341 deletions

View File

@ -1,37 +0,0 @@
From ff265fa1ed86b85e021ec0f16a28ab48c237414a Mon Sep 17 00:00:00 2001
From: "Yichun Zhang (agentzh)" <yichun@openresty.com>
Date: Sat, 6 May 2023 15:21:14 -0700
Subject: [PATCH] PR30405: stapkp_init(): we should not disable preemption
around the kallsyms_on_each_symbol() call
---
runtime/linux/kprobes.c | 4 ----
1 file changed, 4 deletions(-)
diff --git a/runtime/linux/kprobes.c b/runtime/linux/kprobes.c
index 09f0e0665..1875092c5 100644
--- a/runtime/linux/kprobes.c
+++ b/runtime/linux/kprobes.c
@@ -763,9 +763,7 @@ stapkp_init(struct stap_kprobe_probe *probes,
#ifdef STAPCONF_MODULE_MUTEX
mutex_lock(&module_mutex);
#endif
- preempt_disable();
kallsyms_on_each_symbol(stapkp_symbol_callback, &sd);
- preempt_enable();
#ifdef STAPCONF_MODULE_MUTEX
mutex_unlock(&module_mutex);
#endif
@@ -835,9 +833,7 @@ stapkp_refresh(const char *modname,
#ifdef STAPCONF_MODULE_MUTEX
mutex_lock(&module_mutex);
#endif
- preempt_disable();
kallsyms_on_each_symbol(stapkp_symbol_callback, &sd);
- preempt_enable();
#ifdef STAPCONF_MODULE_MUTEX
mutex_unlock(&module_mutex);
#endif
--
2.39.1

View File

@ -1,231 +0,0 @@
From 33fae2d0107fb6166b4eac3fdffd277829849ab0 Mon Sep 17 00:00:00 2001
From: Martin Cermak <mcermak@redhat.com>
Date: Fri, 2 Jun 2023 23:28:07 +0200
Subject: [PATCH] =?UTF-8?q?PR30415:=20conflicting=20types=20for=20?=
=?UTF-8?q?=E2=80=98kallsyms=5Fon=5Feach=5Fsymbol=E2=80=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
runtime/linux/kprobes.c | 28 ++++++++++++++++++++++++-
runtime/linux/runtime.h | 8 +++++--
runtime/sym.c | 39 +++++++++++++++++++++++++++++++++++
runtime/transport/symbols.c | 4 ++++
runtime/transport/transport.c | 1 +
staprun/staprun.c | 13 +++++++++++-
6 files changed, 89 insertions(+), 4 deletions(-)
diff --git a/runtime/linux/kprobes.c b/runtime/linux/kprobes.c
index 1875092c5..6b30f2c52 100644
--- a/runtime/linux/kprobes.c
+++ b/runtime/linux/kprobes.c
@@ -28,6 +28,9 @@ extern void *_stp_kallsyms_on_each_symbol;
#endif
#endif
+// No export check and gates. This one seems simply like a non-export.
+extern void *_stp_module_kallsyms_on_each_symbol;
+
#if defined(STAPCONF_KALLSYMS_ON_EACH_SYMBOL) && defined(STAPCONF_KALLSYMS_ON_EACH_SYMBOL_EXPORTED)
#define USE_KALLSYMS_ON_EACH_SYMBOL (1)
#elif defined(STAPCONF_KALLSYMS_ON_EACH_SYMBOL)
@@ -684,7 +687,7 @@ struct stapkp_symbol_data {
static int
-stapkp_symbol_callback(void *data, const char *name,
+__stapkp_symbol_callback(void *data, const char *name,
struct module *mod, unsigned long addr)
{
struct stapkp_symbol_data *sd = data;
@@ -733,6 +736,19 @@ stapkp_symbol_callback(void *data, const char *name,
return 0;
}
+static int
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,4,0)
+stapkp_symbol_callback(void *data, const char *name,
+ unsigned long addr)
+{
+ struct module *mod = NULL;
+#else
+stapkp_symbol_callback(void *data, const char *name,
+ struct module *mod, unsigned long addr)
+{
+#endif
+ return __stapkp_symbol_callback(data, name, mod, addr);
+}
static int
stapkp_init(struct stap_kprobe_probe *probes,
@@ -764,6 +780,11 @@ stapkp_init(struct stap_kprobe_probe *probes,
mutex_lock(&module_mutex);
#endif
kallsyms_on_each_symbol(stapkp_symbol_callback, &sd);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,3,0)
+ module_kallsyms_on_each_symbol(sd.modname, stapkp_symbol_callback, &sd);
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(5,12,0)
+ module_kallsyms_on_each_symbol(stapkp_symbol_callback, &sd);
+#endif
#ifdef STAPCONF_MODULE_MUTEX
mutex_unlock(&module_mutex);
#endif
@@ -834,6 +855,11 @@ stapkp_refresh(const char *modname,
mutex_lock(&module_mutex);
#endif
kallsyms_on_each_symbol(stapkp_symbol_callback, &sd);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,3,0)
+ module_kallsyms_on_each_symbol(sd.modname, stapkp_symbol_callback, &sd);
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(5,12,0)
+ module_kallsyms_on_each_symbol(stapkp_symbol_callback, &sd);
+#endif
#ifdef STAPCONF_MODULE_MUTEX
mutex_unlock(&module_mutex);
#endif
diff --git a/runtime/linux/runtime.h b/runtime/linux/runtime.h
index 86d64fd0d..f7b3cdcf0 100644
--- a/runtime/linux/runtime.h
+++ b/runtime/linux/runtime.h
@@ -221,11 +221,15 @@ static void *_stp_kallsyms_lookup_name;
#ifndef CONFIG_PPC64
#define STAPCONF_KALLSYMS_ON_EACH_SYMBOL
#if !defined(STAPCONF_KALLSYMS_ON_EACH_SYMBOL_EXPORTED)
-// XXX Should not be static, since it is linked into kprobes.c.
-static void *_stp_kallsyms_on_each_symbol;
+// Not static, since it is linked into kprobes.c:
+void *_stp_kallsyms_on_each_symbol;
#endif
#endif
+// No export check and gates. This one seems simply like a non-export.
+// Not static, since it is linked into kprobes.c:
+void *_stp_module_kallsyms_on_each_symbol;
+
// PR13489, inode-uprobes sometimes lacks the necessary SYMBOL_EXPORT's.
#if !defined(STAPCONF_TASK_USER_REGSET_VIEW_EXPORTED)
static void *kallsyms_task_user_regset_view;
diff --git a/runtime/sym.c b/runtime/sym.c
index fc81ac5e8..29171b45f 100644
--- a/runtime/sym.c
+++ b/runtime/sym.c
@@ -1155,9 +1155,15 @@ unsigned long kallsyms_lookup_name (const char *name)
typedef typeof(&kallsyms_on_each_symbol) kallsyms_on_each_symbol_fn;
// XXX Will be linked in place of the kernel's kallsyms_on_each_symbol:
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,4,0)
+int kallsyms_on_each_symbol(int (*fn)(void *, const char *,
+ unsigned long),
+ void *data)
+#else
int kallsyms_on_each_symbol(int (*fn)(void *, const char *, struct module *,
unsigned long),
void *data)
+#endif
{
/* First, try to use a kallsyms_lookup_name address passed to us
through the relocation mechanism. */
@@ -1170,6 +1176,39 @@ int kallsyms_on_each_symbol(int (*fn)(void *, const char *, struct module *,
_stp_error("BUG: attempting to use unavailable kallsyms_on_each_symbol!!\n");
return 0;
}
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,12,0)
+typedef typeof(&module_kallsyms_on_each_symbol) module_kallsyms_on_each_symbol_fn;
+
+// XXX Will be linked in place of the kernel's module_kallsyms_on_each_symbol:
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,4,0)
+int module_kallsyms_on_each_symbol(const char *modname,
+ int (*fn)(void *, const char *,
+ unsigned long),
+ void *data)
+#else
+int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *, struct module *,
+ unsigned long),
+ void *data)
+#endif
+{
+ /* First, try to use a kallsyms_lookup_name address passed to us
+ through the relocation mechanism. */
+ if (_stp_module_kallsyms_on_each_symbol != NULL)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,4,0)
+ return (* (module_kallsyms_on_each_symbol_fn)_stp_module_kallsyms_on_each_symbol)(modname, fn, data);
+#else
+ return (* (module_kallsyms_on_each_symbol_fn)_stp_module_kallsyms_on_each_symbol)(fn, data);
+#endif
+
+ /* Next, give up and signal a BUG. We should have detected
+ that this function is not available and used a different
+ mechanism! */
+ _stp_error("BUG: attempting to use unavailable module_kallsyms_on_each_symbol!!\n");
+ return 0;
+}
+#endif
+
#endif
diff --git a/runtime/transport/symbols.c b/runtime/transport/symbols.c
index 7f2fe0fc8..3af9a1098 100644
--- a/runtime/transport/symbols.c
+++ b/runtime/transport/symbols.c
@@ -119,6 +119,10 @@ static void _stp_do_relocation(const char __user *buf, size_t count)
_stp_kallsyms_on_each_symbol = (void *) msg.address;
}
#endif
+ if (!strcmp ("kernel", msg.module)
+ && !strcmp ("module_kallsyms_on_each_symbol", msg.reloc)) {
+ _stp_module_kallsyms_on_each_symbol = (void *) msg.address;
+ }
_stp_kmodule_update_address(msg.module, msg.reloc, msg.address);
}
diff --git a/runtime/transport/transport.c b/runtime/transport/transport.c
index 3db76badf..cf57d4286 100644
--- a/runtime/transport/transport.c
+++ b/runtime/transport/transport.c
@@ -614,6 +614,7 @@ static int _stp_transport_init(void)
#if defined(STAPCONF_KALLSYMS_ON_EACH_SYMBOL) && !defined(STAPCONF_KALLSYMS_ON_EACH_SYMBOL_EXPORTED)
_stp_kallsyms_on_each_symbol = NULL;
#endif
+ _stp_module_kallsyms_on_each_symbol = NULL;
#if defined(CONFIG_KALLSYMS) && !defined(STAPCONF_KALLSYMS_LOOKUP_NAME_EXPORTED)
_stp_need_kallsyms_stext = 0;
#endif
diff --git a/staprun/staprun.c b/staprun/staprun.c
index edd1bc67a..8437f3af6 100644
--- a/staprun/staprun.c
+++ b/staprun/staprun.c
@@ -640,6 +640,7 @@ int send_relocation_kernel ()
int found_stext = 0;
int found_kallsyms_lookup_name = 0;
int found_kallsyms_on_each_symbol = 0;
+ int found_module_kallsyms_on_each_symbol = 0;
int done_with_kallsyms = 0;
char *line = NULL;
size_t linesz = 0;
@@ -681,10 +682,20 @@ int send_relocation_kernel ()
found_kallsyms_on_each_symbol = 1;
}
+ else if (linesize - pos == sizeof "module_kallsyms_on_each_symbol"
+ && !strcmp(line + pos, "module_kallsyms_on_each_symbol" "\n"))
+ {
+ rc = send_a_relocation ("kernel", "module_kallsyms_on_each_symbol", address);
+ if (rc != 0) // non fatal, follows perror()
+ dbug(1, "Relocation was reloc module_kallsyms_on_each_symbol=%llx\n", address);
+
+ found_module_kallsyms_on_each_symbol = 1;
+ }
}
done_with_kallsyms = found_stext
&& found_kallsyms_lookup_name
- && found_kallsyms_on_each_symbol;
+ && found_kallsyms_on_each_symbol
+ && found_module_kallsyms_on_each_symbol;
}
free (line);
fclose (kallsyms);
--
2.39.1

View File

@ -1,67 +0,0 @@
From c893e0eaa4dedc90fafc9353ea00fc34ad4b6d42 Mon Sep 17 00:00:00 2001
From: William Cohen <wcohen@redhat.com>
Date: Wed, 17 May 2023 10:38:31 -0400
Subject: [PATCH] Support newer kernels with struct module_memory
The upstream kernel commit ac3b43283923440900b4f36ca5f9f0b1ca43b70e
changed the structures for modules. The runtime printing of kernel
information accessed information about modules and the fields in
module structure. A test has been added to the autoconf list to
determine the appropriate fields to get information about the
module.
---
buildrun.cxx | 2 ++
runtime/linux/autoconf-module_memory.c | 3 +++
runtime/linux/print.c | 6 ++++++
3 files changed, 11 insertions(+)
create mode 100644 runtime/linux/autoconf-module_memory.c
diff --git a/buildrun.cxx b/buildrun.cxx
index a4a254c7d..7f4ad860d 100644
--- a/buildrun.cxx
+++ b/buildrun.cxx
@@ -512,6 +512,8 @@ compile_pass (systemtap_session& s)
output_autoconf(s, o, cs, "autoconf-module_layout.c",
"STAPCONF_MODULE_LAYOUT", NULL);
+ output_autoconf(s, o, cs, "autoconf-module_memory.c",
+ "STAPCONF_MODULE_MEMORY", NULL);
output_autoconf(s, o, cs, "autoconf-mod_kallsyms.c",
"STAPCONF_MOD_KALLSYMS", NULL);
output_exportconf(s, o2, "get_user_pages_remote", "STAPCONF_GET_USER_PAGES_REMOTE");
diff --git a/runtime/linux/autoconf-module_memory.c b/runtime/linux/autoconf-module_memory.c
new file mode 100644
index 000000000..db04b8d2e
--- /dev/null
+++ b/runtime/linux/autoconf-module_memory.c
@@ -0,0 +1,3 @@
+#include <linux/module.h>
+
+struct module_memory ml;
diff --git a/runtime/linux/print.c b/runtime/linux/print.c
index 57a157986..594b155be 100644
--- a/runtime/linux/print.c
+++ b/runtime/linux/print.c
@@ -361,6 +361,11 @@ static void _stp_print_kernel_info(char *sname, char *vstr, int ctx, int num_pro
(unsigned long) (THIS_MODULE->core_layout.size - THIS_MODULE->core_layout.text_size)/1024,
(unsigned long) (THIS_MODULE->core_layout.text_size)/1024,
#else
+#if STAPCONF_MODULE_MEMORY
+ (unsigned long) THIS_MODULE->mem[MOD_TEXT].base,
+ (unsigned long) (THIS_MODULE->mem[MOD_DATA].size)/1024,
+ (unsigned long) (THIS_MODULE->mem[MOD_TEXT].size)/1024,
+#else
#ifndef STAPCONF_GRSECURITY
(unsigned long) THIS_MODULE->module_core,
(unsigned long) (THIS_MODULE->core_size - THIS_MODULE->core_text_size)/1024,
@@ -370,6 +375,7 @@ static void _stp_print_kernel_info(char *sname, char *vstr, int ctx, int num_pro
(unsigned long) (THIS_MODULE->core_size_rw - THIS_MODULE->core_size_rx)/1024,
(unsigned long) (THIS_MODULE->core_size_rx)/1024,
#endif
+#endif
#endif
ctx/1024,
_stp_allocated_net_memory/1024,
--
2.39.1

Binary file not shown.

BIN
systemtap-5.0.tar.gz Normal file

Binary file not shown.

View File

@ -21,17 +21,13 @@
%undefine __brp_mangle_shebangs
Name: systemtap
Version: 4.9
Version: 5.0
Release: 1
Summary: Linux trace and probe tool
License: GPLv2+ and Public Domain
URL: http://sourceware.org/systemtap
Source: https://sourceware.org/systemtap/ftp/releases/%{name}-%{version}.tar.gz
Patch1: 0001-PR30405-stapkp_init-we-should-not-disable-preemption.patch
Patch2: 0001-Support-newer-kernels-with-struct-module_memory.patch
Patch3: 0001-PR30415-conflicting-types-for-kallsyms_on_each_symbo.patch
Patch9000: huawei-fix-network-tcp-test-error.patch
Patch9001: huawei-local-is-only-valid-in-functions-for-shellche-sc2168.patch
@ -40,7 +36,7 @@ BuildRequires: gettext-devel rpm-devel readline-devel
BuildRequires: pkgconfig(nss) pkgconfig(avahi-client)
BuildRequires: pkgconfig(ncurses) pkgconfig(json-c)
BuildRequires: jpackage-utils python3-devel
BuildRequires: elfutils-devel >= 0.142
BuildRequires: elfutils-devel >= 0.142 elfutils-debuginfod-client elfutils-debuginfod-client-devel
BuildRequires: sqlite-devel > 3.7
%if %{with_dyninst}
BuildRequires: dyninst-devel >= 8.0
@ -136,6 +132,7 @@ Requires: dejagnu which elfutils grep nc
Requires: gcc gcc-c++ make glibc-devel
Requires: strace nc avahi perf
Requires: systemtap-runtime-python3 = %{version}-%{release}
Requires: elfutils-debuginfod
%if %{with_crash}
Requires: crash
%endif
@ -480,6 +477,18 @@ exit 0
%{_mandir}/man[1378]/*
%changelog
* Wed Jan 24 2024 liuchao <liuchao173@huawei.com> - 5.0-1
- Upgrade to 5.0:
- Performance improvements in uprobe registration and module startup.
- More probe point process details are printed in "-L" list mode with more "-v".
- For the case where newer kernels may break systemtap runtime APIs, better pass-4 failure diagnostics are printed.
- Tapset function print_ubacktrace_fileline() now understands DWARF5.
- The target(s) of process probes may be specified by path name globs, as located selected debuginfod servers.
- The kernel-user message transport system added framing codes, making the transport more reliable, but becoming incompatible across pre-5.0 versions. Use matching versions of stap and staprun.
- The testsuite Makefile has been simplified to remove concurrency, so "parallel" and "resume" modes are gone.
- New runtime macro STP_TIMING_NSECS is now supported for reporting probe timing stats in nsecs instead of cycles. This may become default later.
- Add new runtime macro STP_FORCE_STDOUT_TTY to override STP_STDOUT_NOT_ATTY.
* Wed Sep 6 2023 langfei<langfei@huawei.com> - 4.9-1
- Type:bugfix
- CVE:NA