diff --git a/0001-PR30405-stapkp_init-we-should-not-disable-preemption.patch b/0001-PR30405-stapkp_init-we-should-not-disable-preemption.patch deleted file mode 100644 index 865d015..0000000 --- a/0001-PR30405-stapkp_init-we-should-not-disable-preemption.patch +++ /dev/null @@ -1,37 +0,0 @@ -From ff265fa1ed86b85e021ec0f16a28ab48c237414a Mon Sep 17 00:00:00 2001 -From: "Yichun Zhang (agentzh)" -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 - diff --git a/0001-PR30415-conflicting-types-for-kallsyms_on_each_symbo.patch b/0001-PR30415-conflicting-types-for-kallsyms_on_each_symbo.patch deleted file mode 100644 index 5cb96bc..0000000 --- a/0001-PR30415-conflicting-types-for-kallsyms_on_each_symbo.patch +++ /dev/null @@ -1,231 +0,0 @@ -From 33fae2d0107fb6166b4eac3fdffd277829849ab0 Mon Sep 17 00:00:00 2001 -From: Martin Cermak -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 - diff --git a/0001-Support-newer-kernels-with-struct-module_memory.patch b/0001-Support-newer-kernels-with-struct-module_memory.patch deleted file mode 100644 index 55fcf28..0000000 --- a/0001-Support-newer-kernels-with-struct-module_memory.patch +++ /dev/null @@ -1,67 +0,0 @@ -From c893e0eaa4dedc90fafc9353ea00fc34ad4b6d42 Mon Sep 17 00:00:00 2001 -From: William Cohen -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 -+ -+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 - diff --git a/systemtap-4.9.tar.gz b/systemtap-4.9.tar.gz deleted file mode 100644 index 8f22669..0000000 Binary files a/systemtap-4.9.tar.gz and /dev/null differ diff --git a/systemtap-5.0.tar.gz b/systemtap-5.0.tar.gz new file mode 100644 index 0000000..5566045 Binary files /dev/null and b/systemtap-5.0.tar.gz differ diff --git a/systemtap.spec b/systemtap.spec index ee59303..a74c0af 100644 --- a/systemtap.spec +++ b/systemtap.spec @@ -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 - 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 - 4.9-1 - Type:bugfix - CVE:NA