Projects
Mega:24.09
systemtap
Sign Up
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 3
View file
_service:tar_scm:systemtap.spec
Changed
@@ -22,7 +22,7 @@ Name: systemtap Version: 5.0 -Release: 1 +Release: 3 Summary: Linux trace and probe tool License: GPLv2+ and Public Domain URL: http://sourceware.org/systemtap @@ -30,6 +30,8 @@ Patch9000: huawei-fix-network-tcp-test-error.patch Patch9001: huawei-local-is-only-valid-in-functions-for-shellche-sc2168.patch +Patch9002: Add-basic-LoongArch64-support.patch +Patch9003: Make-stp_task_work-compatible-with-6.11-kernels.patch BuildRequires: gcc-c++ emacs systemd python3-setuptools BuildRequires: gettext-devel rpm-devel readline-devel @@ -477,6 +479,18 @@ %{_mandir}/man1378/* %changelog +* Wed Sep 04 2024 wangxiao <wangxiao184@h-partners.com> - 5.0-3 +- Type:bugfix +- CVE:NA +- SUG:NA +- DESC:Make stp_task_work compatible with 6.11 kernels + +* Fri Jul 05 2024 wangqiang <wangqiang1@kylinos.cn> - 5.0-2 +- Type:update +- CVE:NA +- SUG:NA +- DESC:Add basic loongarch64 support + * Wed Jan 24 2024 liuchao <liuchao173@huawei.com> - 5.0-1 - Upgrade to 5.0: - Performance improvements in uprobe registration and module startup.
View file
_service:tar_scm:Add-basic-LoongArch64-support.patch
Added
@@ -0,0 +1,2442 @@ +From 3c7f981349c02da5baee0d1f721571078aa6bbc6 Mon Sep 17 00:00:00 2001 +From: wangqiang <wangqiang1@kylinos.cn> +Date: Fri, 5 Jul 2024 15:51:29 +0800 +Subject: PATCH Add basic LoongArch64 support + +LoongArch is a new RISC ISA, which is a bit like MIPS or RISC-V. +LoongArch includes a reduced 32-bit version (LA32R), a standard 32-bit +version (LA32S) and a 64-bit version (LA64). LoongArch use ACPI as its +boot protocol LoongArch-specific interrupt controllers (similar to APIC) +are already added in the next revision of ACPI Specification (current +revision is 6.4). + +This patchset is adding basic LoongArch support in mainline systemtap. +--- + bpf-translate.cxx | 33 + + buildrun.cxx | 9 +- + dwflpp.cxx | 1 + + dwflpp.h | 4 + + runtime/dyninst/regs.c | 20 + + runtime/dyninst/stapdyn.h | 26 + + runtime/linux/compat_structs.h | 4 +- + runtime/linux/compat_unistd.h | 4 +- + runtime/linux/regs.c | 20 + + runtime/linux/runtime.h | 2 +- + runtime/loc2c-runtime.h | 49 + + runtime/regs.h | 8 + + runtime/syscall.h | 42 + + runtime/unwind/loongarch.h | 83 + + runtime/unwind/unwind.h | 2 + + scripts/dump-syscalls.sh | 6 + + stapbpf/libbpf.c | 2 +- + stapdyn/mutatee.cxx | 9 + + tapset/errno.stp | 2 + + tapset/linux/aux_syscalls.stp | 5 +- + tapset/linux/loongarch64/aux_syscalls.stp | 12 + + tapset/linux/loongarch64/registers.stp | 293 +++++ + tapset/linux/loongarch64/syscall_num.stp | 1283 +++++++++++++++++++++ + tapset/linux/syscalls.stpm | 2 +- + tapsets.cxx | 40 +- + testsuite/lib/compile_flags.exp | 9 +- + testsuite/lib/systemtap.exp | 3 +- + testsuite/systemtap.syscall/clone.c | 2 +- + translate.cxx | 3 +- + util.cxx | 2 + + 30 files changed, 1964 insertions(+), 16 deletions(-) + create mode 100644 runtime/unwind/loongarch.h + create mode 100644 tapset/linux/loongarch64/aux_syscalls.stp + create mode 100644 tapset/linux/loongarch64/registers.stp + create mode 100644 tapset/linux/loongarch64/syscall_num.stp + +diff --git a/bpf-translate.cxx b/bpf-translate.cxx +index 1a93024..8867d8e 100644 +--- a/bpf-translate.cxx ++++ b/bpf-translate.cxx +@@ -3328,6 +3328,39 @@ bpf_unparser::visit_target_register (target_register* e) + case 29: ofs = offsetof(user_pt_regs, regs29); break; + case 30: ofs = offsetof(user_pt_regs, regs30); break; + case 31: ofs = offsetof(user_pt_regs, sp); break; ++#elif defined(__loongarch64) ++ case 0: ofs = offsetof(user_pt_regs, regs0); break; ++ case 1: ofs = offsetof(user_pt_regs, regs1); break; ++ case 2: ofs = offsetof(user_pt_regs, regs2); break; ++ case 3: ofs = offsetof(user_pt_regs, regs3); break; ++ case 4: ofs = offsetof(user_pt_regs, regs4); break; ++ case 5: ofs = offsetof(user_pt_regs, regs5); break; ++ case 6: ofs = offsetof(user_pt_regs, regs6); break; ++ case 7: ofs = offsetof(user_pt_regs, regs7); break; ++ case 8: ofs = offsetof(user_pt_regs, regs8); break; ++ case 9: ofs = offsetof(user_pt_regs, regs9); break; ++ case 10: ofs = offsetof(user_pt_regs, regs10); break; ++ case 11: ofs = offsetof(user_pt_regs, regs11); break; ++ case 12: ofs = offsetof(user_pt_regs, regs12); break; ++ case 13: ofs = offsetof(user_pt_regs, regs13); break; ++ case 14: ofs = offsetof(user_pt_regs, regs14); break; ++ case 15: ofs = offsetof(user_pt_regs, regs15); break; ++ case 16: ofs = offsetof(user_pt_regs, regs16); break; ++ case 17: ofs = offsetof(user_pt_regs, regs17); break; ++ case 18: ofs = offsetof(user_pt_regs, regs18); break; ++ case 19: ofs = offsetof(user_pt_regs, regs19); break; ++ case 20: ofs = offsetof(user_pt_regs, regs20); break; ++ case 21: ofs = offsetof(user_pt_regs, regs21); break; ++ case 22: ofs = offsetof(user_pt_regs, regs22); break; ++ case 23: ofs = offsetof(user_pt_regs, regs23); break; ++ case 24: ofs = offsetof(user_pt_regs, regs24); break; ++ case 25: ofs = offsetof(user_pt_regs, regs25); break; ++ case 26: ofs = offsetof(user_pt_regs, regs26); break; ++ case 27: ofs = offsetof(user_pt_regs, regs27); break; ++ case 28: ofs = offsetof(user_pt_regs, regs28); break; ++ case 29: ofs = offsetof(user_pt_regs, regs29); break; ++ case 30: ofs = offsetof(user_pt_regs, regs30); break; ++ case 31: ofs = offsetof(user_pt_regs, regs31); break; + #elif defined(__powerpc__) + case 0: ofs = offsetof(pt_regs, gpr0); break; + case 1: ofs = offsetof(pt_regs, gpr1); break; +diff --git a/buildrun.cxx b/buildrun.cxx +index 8168420..3eaf7a6 100644 +--- a/buildrun.cxx ++++ b/buildrun.cxx +@@ -144,8 +144,13 @@ make_any_make_cmd(systemtap_session& s, const string& dir, const string& target) + + // Add architecture, except for old powerpc (RHBZ669082) + if (s.architecture != "powerpc" || +- (strverscmp (s.kernel_base_release.c_str(), "2.6.15") >= 0)) +- make_cmd.push_back("ARCH=" + s.architecture); // need make-quoting? ++ (strverscmp (s.kernel_base_release.c_str(), "2.6.15") >= 0)) { ++ if (s.architecture == "loongarch64") { ++ make_cmd.push_back("ARCH=loongarch"); ++ } else { ++ make_cmd.push_back("ARCH=" + s.architecture); // need make-quoting? ++ } ++ } + + // PR29837: Suppress the kernel version warning + make_cmd.push_back("CC_VERSION_TEXT=foo"); +diff --git a/dwflpp.cxx b/dwflpp.cxx +index 9fccca0..d1b2b70 100644 +--- a/dwflpp.cxx ++++ b/dwflpp.cxx +@@ -1355,6 +1355,7 @@ dwflpp::iterate_over_libraries<void>(void (*callback)(void*, const char*), + && interpreter != "/lib/ld-linux-armhf.so.3" // arm + && interpreter != "/lib/ld-linux-aarch64.so.1" // arm64 + && interpreter != "/lib64/ld64.so.2" // ppc64le ++ && interpreter != "/lib64/ld-linux-loongarch-lp64d.so.1" // loongarch64 + ) + { + sess.print_warning (_F("module %s --ldd skipped: unsupported interpreter: %s", +diff --git a/dwflpp.h b/dwflpp.h +index d90ce94..a604992 100644 +--- a/dwflpp.h ++++ b/dwflpp.h +@@ -36,6 +36,10 @@ + #define EM_RISCV 243 + #endif + ++// Old elf.h doesn't know about this machine type. ++#ifndef EM_LOONGARCH ++#define EM_LOONGARCH 258 ++#endif + + #define write_uleb128(ptr,val) ({ \ + uint32_t valv = (val); \ +diff --git a/runtime/dyninst/regs.c b/runtime/dyninst/regs.c +index 8389ebd..664e45d 100644 +--- a/runtime/dyninst/regs.c ++++ b/runtime/dyninst/regs.c +@@ -87,6 +87,26 @@ static void _stp_print_regs(struct pt_regs * regs) + _stp_printf("\n"); + } + ++#elif defined (__loongarch64) ++static void _stp_print_regs(struct pt_regs * regs) ++{ ++ int i, top_reg; ++ u64 lr, sp; ++ ++ lr = regs->regs1; ++ sp = regs->regs3; ++ top_reg = 31; ++ ++ _stp_printf("pc : <%016llx> lr : <%016llx> estat: %08llx\n", ++ regs->csr_era, lr, regs->csr_estat); ++ for (i = top_reg; i >= 0; i--) { ++ _stp_printf("x%-2d: %016llx ", i, regs->regsi); ++ if (i % 2 == 0) ++ _stp_printf("\n"); ++ } ++ _stp_printf("\n"); ++} ++ + #endif + + #endif /* _DYNINST_REGS_C_ */ +diff --git a/runtime/dyninst/stapdyn.h b/runtime/dyninst/stapdyn.h +index 4045dfc..2467f9a 100644 +--- a/runtime/dyninst/stapdyn.h ++++ b/runtime/dyninst/stapdyn.h +@@ -52,6 +52,32 @@ struct pt_regs { + }; + #endif + ++#if defined(__loongarch64) ++ ++/* ++ * This struct defines the way the registers are stored on the stack during a ++ * system call/exception. ++ * ++ * If you add a register here, also add it to regoffset_table in ++ * arch/loongarch/kernel/ptrace.c. ++ */ ++struct pt_regs { ++ /* Saved main processor registers. */ ++ unsigned long regs32; ++ ++ /* Saved special registers. */ ++ unsigned long csr_era; ++ unsigned long csr_badv; ++ unsigned long csr_crmd; ++ unsigned long csr_prmd; ++ unsigned long csr_euen;
View file
_service:tar_scm:Make-stp_task_work-compatible-with-6.11-kernels.patch
Added
@@ -0,0 +1,99 @@ +From a64dc4e2e0195ca80c6509df511a42459b40e9af Mon Sep 17 00:00:00 2001 +From: Martin Cermak <mcermak@redhat.com> +Date: Wed, 24 Jul 2024 16:47:42 +0200 +Subject: PATCH Make stp_task_work compatible with 6.11 kernels + +Update systemtap runtime so that it works with kernel commit +68cbd415dd4b task_work: + +s/task_work_cancel()/task_work_cancel_func()/ +--- + buildrun.cxx | 1 + + .../linux/autoconf-task_work_cancel_func.c | 3 +++ + runtime/linux/runtime.h | 2 +- + runtime/stp_task_work.c | 21 ++++++++++++++----- + 4 files changed, 21 insertions(+), 6 deletions(-) + create mode 100644 runtime/linux/autoconf-task_work_cancel_func.c + +diff --git a/buildrun.cxx b/buildrun.cxx +index a7fcd6297..e3f2f83d1 100644 +--- a/buildrun.cxx ++++ b/buildrun.cxx +@@ -400,6 +400,7 @@ compile_pass (systemtap_session& s) + output_exportconf(s, o2, "__module_text_address", "STAPCONF_MODULE_TEXT_ADDRESS"); + output_exportconf(s, o2, "add_timer_on", "STAPCONF_ADD_TIMER_ON"); + output_autoconf(s, o, cs, "autoconf-514-panic.c", "STAPCONF_514_PANIC", NULL); ++ output_autoconf(s, o, cs, "autoconf-task_work_cancel_func.c", "STAPCONF_TASK_WORK_CANCEL_FUNC", NULL); + + output_dual_exportconf(s, o2, "probe_kernel_read", "probe_kernel_write", "STAPCONF_PROBE_KERNEL"); + output_autoconf(s, o, cs, "autoconf-hw_breakpoint_context.c", +diff --git a/runtime/linux/autoconf-task_work_cancel_func.c b/runtime/linux/autoconf-task_work_cancel_func.c +new file mode 100644 +index 000000000..0d460de6c +--- /dev/null ++++ b/runtime/linux/autoconf-task_work_cancel_func.c +@@ -0,0 +1,3 @@ ++#include <linux/task_work.h> ++ ++void* c = & task_work_cancel_func; +diff --git a/runtime/linux/runtime.h b/runtime/linux/runtime.h +index 0e9fe3fea..bd9307385 100644 +--- a/runtime/linux/runtime.h ++++ b/runtime/linux/runtime.h +@@ -265,7 +265,7 @@ static void *kallsyms_uprobe_get_swbp_addr; + static void *kallsyms_task_work_add; + #endif + #if !defined(STAPCONF_TASK_WORK_CANCEL_EXPORTED) +-static void *kallsyms_task_work_cancel; ++static void *kallsyms_task_work_cancel_fn; + #endif + + #if !defined(STAPCONF_TRY_TO_WAKE_UP_EXPORTED) && !defined(STAPCONF_WAKE_UP_STATE_EXPORTED) +diff --git a/runtime/stp_task_work.c b/runtime/stp_task_work.c +index 0dd3095b6..4818fecbf 100644 +--- a/runtime/stp_task_work.c ++++ b/runtime/stp_task_work.c +@@ -3,14 +3,25 @@ + + #include "linux/task_work_compatibility.h" + ++// Handle kernel commit 68cbd415dd4b9c5b9df69f0f091879e56bf5907a ++// task_work: s/task_work_cancel()/task_work_cancel_func()/ ++#if defined(STAPCONF_TASK_WORK_CANCEL_FUNC) ++#define TASK_WORK_CANCEL_FN task_work_cancel_func ++#else ++#define TASK_WORK_CANCEL_FN task_work_cancel ++#endif ++ ++#define STRINGIFY(x) #x ++#define TOSTRING(x) STRINGIFY(x) ++ + #if !defined(STAPCONF_TASK_WORK_ADD_EXPORTED) + // First typedef from the original decls, then #define as typecasted calls. + typedef typeof(&task_work_add) task_work_add_fn; + #define task_work_add(a,b,c) ibt_wrapper(int, (* (task_work_add_fn)kallsyms_task_work_add)((a), (b), (c))) + #endif + #if !defined(STAPCONF_TASK_WORK_CANCEL_EXPORTED) +-typedef typeof(&task_work_cancel) task_work_cancel_fn; +-#define task_work_cancel(a,b) ibt_wrapper(struct callback_head *, (* (task_work_cancel_fn)kallsyms_task_work_cancel)((a), (b))) ++typedef typeof(&TASK_WORK_CANCEL_FN) task_work_cancel_fn; ++#define task_work_cancel(a,b) ibt_wrapper(struct callback_head *, (* (task_work_cancel_fn)kallsyms_task_work_cancel_fn)((a), (b))) + #endif + + /* To avoid a crash when a task_work callback gets called after the +@@ -35,9 +46,9 @@ stp_task_work_init(void) + } + #endif + #if !defined(STAPCONF_TASK_WORK_CANCEL_EXPORTED) +- kallsyms_task_work_cancel = (void *)kallsyms_lookup_name("task_work_cancel"); +- if (kallsyms_task_work_cancel == NULL) { +- _stp_error("Can't resolve task_work_cancel!"); ++ kallsyms_task_work_cancel_fn = (void *)kallsyms_lookup_name(TOSTRING(TASK_WORK_CANCEL_FN)); ++ if (kallsyms_task_work_cancel_fn == NULL) { ++ _stp_error("Can't resolve %s!", TOSTRING(TASK_WORK_CANCEL_FN)); + return -ENOENT; + } + #endif +-- +2.33.0 +
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2