diff options
author | CoprDistGit <infra@openeuler.org> | 2024-10-20 12:51:22 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2024-10-20 12:51:22 +0000 |
commit | 8253480cab1b5ab7a18100d5c8f7e546fec4a862 (patch) | |
tree | 320d7f3104a4e12eef8303fc09c9fc4af685291c | |
parent | 85b0b9c5aa151408bf968dd47d107ad430af8eb7 (diff) |
automatic import of systemtapopeneuler24.03_LTS
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | Add-basic-LoongArch64-support.patch | 2442 | ||||
-rw-r--r-- | huawei-fix-network-tcp-test-error.patch | 63 | ||||
-rw-r--r-- | huawei-local-is-only-valid-in-functions-for-shellche-sc2168.patch | 26 | ||||
-rw-r--r-- | sources | 1 | ||||
-rw-r--r-- | systemtap.spec | 546 |
6 files changed, 3079 insertions, 0 deletions
@@ -0,0 +1 @@ +/systemtap-5.1.tar.gz diff --git a/Add-basic-LoongArch64-support.patch b/Add-basic-LoongArch64-support.patch new file mode 100644 index 0000000..fdc3ac2 --- /dev/null +++ b/Add-basic-LoongArch64-support.patch @@ -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, regs[29]); break; + case 30: ofs = offsetof(user_pt_regs, regs[30]); break; + case 31: ofs = offsetof(user_pt_regs, sp); break; ++#elif defined(__loongarch64) ++ case 0: ofs = offsetof(user_pt_regs, regs[0]); break; ++ case 1: ofs = offsetof(user_pt_regs, regs[1]); break; ++ case 2: ofs = offsetof(user_pt_regs, regs[2]); break; ++ case 3: ofs = offsetof(user_pt_regs, regs[3]); break; ++ case 4: ofs = offsetof(user_pt_regs, regs[4]); break; ++ case 5: ofs = offsetof(user_pt_regs, regs[5]); break; ++ case 6: ofs = offsetof(user_pt_regs, regs[6]); break; ++ case 7: ofs = offsetof(user_pt_regs, regs[7]); break; ++ case 8: ofs = offsetof(user_pt_regs, regs[8]); break; ++ case 9: ofs = offsetof(user_pt_regs, regs[9]); break; ++ case 10: ofs = offsetof(user_pt_regs, regs[10]); break; ++ case 11: ofs = offsetof(user_pt_regs, regs[11]); break; ++ case 12: ofs = offsetof(user_pt_regs, regs[12]); break; ++ case 13: ofs = offsetof(user_pt_regs, regs[13]); break; ++ case 14: ofs = offsetof(user_pt_regs, regs[14]); break; ++ case 15: ofs = offsetof(user_pt_regs, regs[15]); break; ++ case 16: ofs = offsetof(user_pt_regs, regs[16]); break; ++ case 17: ofs = offsetof(user_pt_regs, regs[17]); break; ++ case 18: ofs = offsetof(user_pt_regs, regs[18]); break; ++ case 19: ofs = offsetof(user_pt_regs, regs[19]); break; ++ case 20: ofs = offsetof(user_pt_regs, regs[20]); break; ++ case 21: ofs = offsetof(user_pt_regs, regs[21]); break; ++ case 22: ofs = offsetof(user_pt_regs, regs[22]); break; ++ case 23: ofs = offsetof(user_pt_regs, regs[23]); break; ++ case 24: ofs = offsetof(user_pt_regs, regs[24]); break; ++ case 25: ofs = offsetof(user_pt_regs, regs[25]); break; ++ case 26: ofs = offsetof(user_pt_regs, regs[26]); break; ++ case 27: ofs = offsetof(user_pt_regs, regs[27]); break; ++ case 28: ofs = offsetof(user_pt_regs, regs[28]); break; ++ case 29: ofs = offsetof(user_pt_regs, regs[29]); break; ++ case 30: ofs = offsetof(user_pt_regs, regs[30]); break; ++ case 31: ofs = offsetof(user_pt_regs, regs[31]); break; + #elif defined(__powerpc__) + case 0: ofs = offsetof(pt_regs, gpr[0]); break; + case 1: ofs = offsetof(pt_regs, gpr[1]); 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->regs[1]; ++ sp = regs->regs[3]; ++ 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->regs[i]); ++ 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 regs[32]; ++ ++ /* Saved special registers. */ ++ unsigned long csr_era; ++ unsigned long csr_badv; ++ unsigned long csr_crmd; ++ unsigned long csr_prmd; ++ unsigned long csr_euen; ++ unsigned long csr_ecfg; ++ unsigned long csr_estat; ++ unsigned long orig_a0; ++ unsigned long __last[]; ++} __attribute__ ((aligned (8))); ++#endif ++ + /* These are declarations of all interfaces that stapdyn may call in the + * module, either directly or via dyninst in the mutatee. To maintain + * compatibility as much as possible, function signatures should not be +diff --git a/runtime/linux/compat_structs.h b/runtime/linux/compat_structs.h +index fa9b855..1ca6de7 100644 +--- a/runtime/linux/compat_structs.h ++++ b/runtime/linux/compat_structs.h +@@ -133,7 +133,7 @@ typedef struct compat_siginfo { + #include <asm/ia32.h> + #endif /* __x86_64__ */ + +-#if defined(__aarch64__) ++#if defined(__aarch64__) || defined(__loongarch64) + typedef struct compat_siginfo { + int si_signo; + int si_errno; +@@ -193,6 +193,6 @@ typedef struct compat_siginfo { + } _sigsys; + } _sifields; + } compat_siginfo_t; +-#endif /* __aarch64__ */ ++#endif /* __aarch64__, __loongarch64 */ + + #endif /* _COMPAT_STRUCTS_H_ */ +diff --git a/runtime/linux/compat_unistd.h b/runtime/linux/compat_unistd.h +index a66be04..84052e0 100644 +--- a/runtime/linux/compat_unistd.h ++++ b/runtime/linux/compat_unistd.h +@@ -1860,7 +1860,7 @@ + + #endif /* __x86_64__ */ + +-#if defined(__powerpc64__) || defined (__s390x__) || defined(__aarch64__) ++#if defined(__powerpc64__) || defined (__s390x__) || defined(__aarch64__) || defined(__loongarch64) + + // On the ppc64 and s390x, the 32-bit syscalls use the same number + // as the 64-bit syscalls. +@@ -2217,7 +2217,7 @@ + #endif + #define __NR_compat_writev __NR_writev + +-#endif /* __powerpc64__ || __s390x__ || __aarch64__ */ ++#endif /* __powerpc64__ || __s390x__ || __aarch64__ || __loongarch64 */ + + #if defined(__ia64__) + +diff --git a/runtime/linux/regs.c b/runtime/linux/regs.c +index f2aaa74..dc0edef 100644 +--- a/runtime/linux/regs.c ++++ b/runtime/linux/regs.c +@@ -225,6 +225,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->regs[1]; ++ sp = regs->regs[3]; ++ 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->regs[i]); ++ if (i % 2 == 0) ++ _stp_printf("\n"); ++ } ++ _stp_printf("\n"); ++} ++ + #elif defined (__arm__) + + static const char *processor_modes[]= +diff --git a/runtime/linux/runtime.h b/runtime/linux/runtime.h +index a584079..c931e5e 100644 +--- a/runtime/linux/runtime.h ++++ b/runtime/linux/runtime.h +@@ -201,7 +201,7 @@ static struct + Only define STP_USE_DWARF_UNWINDER when STP_NEED_UNWIND_DATA, + as set through a pragma:unwind in one of the [u]context-unwind.stp + functions. */ +-#if (defined(__arm__) || defined(__i386__) || defined(__x86_64__) || defined(__powerpc64__)) || defined (__s390x__) || defined(__aarch64__) || defined(__mips__) || defined(__riscv) ++#if (defined(__arm__) || defined(__i386__) || defined(__x86_64__) || defined(__powerpc64__)) || defined (__s390x__) || defined(__aarch64__) || defined(__mips__) || defined(__riscv) || defined(__loongarch64) + #ifdef STP_NEED_UNWIND_DATA + #ifndef STP_USE_DWARF_UNWINDER + #define STP_USE_DWARF_UNWINDER +diff --git a/runtime/loc2c-runtime.h b/runtime/loc2c-runtime.h +index 073ba04..d2732af 100644 +--- a/runtime/loc2c-runtime.h ++++ b/runtime/loc2c-runtime.h +@@ -202,6 +202,16 @@ + (pt_regs->regs[regno] = (value)) + #define pt_regs_maxno 31 /* ignore special registers */ + ++#elif defined __loongarch64 ++ ++#undef pt_regs_fetch_register ++#undef pt_regs_store_register ++#define pt_regs_fetch_register(pt_regs,regno) \ ++ ((intptr_t) pt_regs->regs[regno]) ++#define pt_regs_store_register(pt_regs,regno,value) \ ++ (pt_regs->regs[regno] = (value)) ++#define pt_regs_maxno 31 /* register max number,ignore special registers */ ++ + #elif defined __riscv + + #define pt_dwarf_register_0(regs) regs->epc +@@ -310,6 +320,45 @@ + #define pt_dwarf_register_95(regs) ({uint64_t v; __asm__ __volatile__("mov %0, v31.d[0]" : "=r"(v)); v;}) + #define pt_regs_maxno 95 + ++#elif defined (__loongarch64) ++ ++#define pt_dwarf_register_0(pt_regs) pt_regs->regs[0] ++#define pt_dwarf_register_1(pt_regs) pt_regs->regs[1] ++#define pt_dwarf_register_2(pt_regs) pt_regs->regs[2] ++#define pt_dwarf_register_3(pt_regs) pt_regs->regs[3] ++#define pt_dwarf_register_4(pt_regs) pt_regs->regs[4] ++#define pt_dwarf_register_5(pt_regs) pt_regs->regs[5] ++#define pt_dwarf_register_6(pt_regs) pt_regs->regs[6] ++#define pt_dwarf_register_7(pt_regs) pt_regs->regs[7] ++#define pt_dwarf_register_8(pt_regs) pt_regs->regs[8] ++#define pt_dwarf_register_9(pt_regs) pt_regs->regs[9] ++ ++#define pt_dwarf_register_10(pt_regs) pt_regs->regs[10] ++#define pt_dwarf_register_11(pt_regs) pt_regs->regs[11] ++#define pt_dwarf_register_12(pt_regs) pt_regs->regs[12] ++#define pt_dwarf_register_13(pt_regs) pt_regs->regs[13] ++#define pt_dwarf_register_14(pt_regs) pt_regs->regs[14] ++#define pt_dwarf_register_15(pt_regs) pt_regs->regs[15] ++#define pt_dwarf_register_16(pt_regs) pt_regs->regs[16] ++#define pt_dwarf_register_17(pt_regs) pt_regs->regs[17] ++#define pt_dwarf_register_18(pt_regs) pt_regs->regs[18] ++#define pt_dwarf_register_19(pt_regs) pt_regs->regs[19] ++ ++#define pt_dwarf_register_20(pt_regs) pt_regs->regs[20] ++#define pt_dwarf_register_21(pt_regs) pt_regs->regs[21] ++#define pt_dwarf_register_22(pt_regs) pt_regs->regs[22] ++#define pt_dwarf_register_23(pt_regs) pt_regs->regs[23] ++#define pt_dwarf_register_24(pt_regs) pt_regs->regs[24] ++#define pt_dwarf_register_25(pt_regs) pt_regs->regs[25] ++#define pt_dwarf_register_26(pt_regs) pt_regs->regs[26] ++#define pt_dwarf_register_27(pt_regs) pt_regs->regs[27] ++#define pt_dwarf_register_28(pt_regs) pt_regs->regs[28] ++#define pt_dwarf_register_29(pt_regs) pt_regs->regs[29] ++ ++#define pt_dwarf_register_30(pt_regs) pt_regs->regs[30] ++#define pt_dwarf_register_31(pt_regs) pt_regs->regs[31] ++#define pt_regs_maxno 31 ++ + #elif defined (__arm__) + + #undef pt_regs_fetch_register +diff --git a/runtime/regs.h b/runtime/regs.h +index b0237fc..05c9dce 100644 +--- a/runtime/regs.h ++++ b/runtime/regs.h +@@ -64,6 +64,14 @@ + #define REG_SP(regs_arg) (regs_arg)->sp + #define REG_LINK(regs_arg) (regs_arg)->ra + ++#elif defined (__loongarch64) ++#define REG_IP(regs_arg) ((regs_arg)->csr_era) ++#ifdef REG_SP ++#undef REG_SP ++#define REG_SP(regs_arg) ((regs_arg)->regs[3]) ++#endif ++#define REG_LINK(regs_arg) ((regs_arg)->regs[1]) ++ + #elif defined (__s390__) || defined (__s390x__) + + #ifndef __s390x__ +diff --git a/runtime/syscall.h b/runtime/syscall.h +index 44d8a28..92a10e4 100644 +--- a/runtime/syscall.h ++++ b/runtime/syscall.h +@@ -158,6 +158,14 @@ + #define MREMAP_SYSCALL_NO(tsk) 216 + #endif + ++#if defined(__loongarch64) ++#define MMAP_SYSCALL_NO(tsk) 222 ++#define MMAP2_SYSCALL_NO(tsk) 222 ++#define MPROTECT_SYSCALL_NO(tsk) 226 ++#define MUNMAP_SYSCALL_NO(tsk) 215 ++#define MREMAP_SYSCALL_NO(tsk) 216 ++#endif ++ + #if !defined(MMAP_SYSCALL_NO) || !defined(MMAP2_SYSCALL_NO) \ + || !defined(MPROTECT_SYSCALL_NO) || !defined(MUNMAP_SYSCALL_NO) \ + || !defined(MREMAP_SYSCALL_NO) +@@ -261,6 +269,14 @@ _stp_syscall_get_nr(struct task_struct *task, struct pt_regs *regs) + } + #endif + ++#if defined(__loongarch64) ++static inline long ++_stp_syscall_get_nr(struct task_struct *task, struct pt_regs *regs) ++{ ++ return regs->regs[11]; ++} ++#endif ++ + #if defined(__aarch64__) + static inline long + _stp_syscall_get_nr(struct task_struct *task, struct pt_regs *regs) +@@ -327,6 +343,14 @@ syscall_get_return_value(struct task_struct *task, struct pt_regs *regs) + } + #endif + ++#if defined(__loongarch64) ++static inline long ++syscall_get_return_value(struct task_struct *task, struct pt_regs *regs) ++{ ++ return regs->regs[4]; ++} ++#endif ++ + #if defined(__arm__) + static inline long + syscall_get_return_value(struct task_struct *task, struct pt_regs *regs) +@@ -676,5 +700,23 @@ _stp_syscall_get_arguments(struct task_struct *task, struct pt_regs *regs, + } + #endif + ++#if defined(__loongarch64) ++static inline void ++_stp_syscall_get_arguments(struct task_struct *task, struct pt_regs *regs, ++ unsigned int i, unsigned int n, unsigned long *args) ++{ ++ if (!n) ++ return; ++ if (i == 0) { ++ args[0] = regs->orig_a0; ++ args++; ++ n--; ++ } else { ++ i--; ++ } ++ memcpy(args, ®s->regs[5] + i, n * sizeof(args[0])); ++} ++#endif ++ + #endif /* !STAPCONF_ASM_SYSCALL_H */ + #endif /* _SYSCALL_H_ */ +diff --git a/runtime/unwind/loongarch.h b/runtime/unwind/loongarch.h +new file mode 100644 +index 0000000..a5e5390 +--- /dev/null ++++ b/runtime/unwind/loongarch.h +@@ -0,0 +1,83 @@ ++/* -*- linux-c -*- ++ * ++ * LOONGARCH dwarf unwinder header file ++ * ++ * This file is part of systemtap, and is free software. You can ++ * redistribute it and/or modify it under the terms of the GNU General ++ * Public License (GPL); either version 2, or (at your option) any ++ * later version. ++ */ ++#ifndef _STP_LOONGARCH_UNWIND_H ++#define _STP_LOONGARCH_UNWIND_H ++ ++#include <linux/sched.h> ++#include <asm/ptrace.h> ++ ++#define _stp_get_unaligned(ptr) (*(ptr)) ++ ++#define UNW_PC(frame) (frame)->regs.csr_era ++#define UNW_SP(frame) (frame)->regs.regs[3] ++ ++#define STACK_LIMIT(ptr) (((ptr) - 1) & ~(THREAD_SIZE - 1)) ++ ++// runtime/unwind/unwind.h: ++// struct pt_regs regs; ++// #define PTREGS_INFO(f) EXTRA_INFO(regs.f) ++// ++#define UNW_REGISTER_INFO \ ++ PTREGS_INFO(regs[0]), \ ++ PTREGS_INFO(regs[1]), \ ++ PTREGS_INFO(regs[2]), \ ++ PTREGS_INFO(regs[3]), \ ++ PTREGS_INFO(regs[4]), \ ++ PTREGS_INFO(regs[5]), \ ++ PTREGS_INFO(regs[6]), \ ++ PTREGS_INFO(regs[7]), \ ++ PTREGS_INFO(regs[8]), \ ++ PTREGS_INFO(regs[9]), \ ++ PTREGS_INFO(regs[10]), \ ++ PTREGS_INFO(regs[11]), \ ++ PTREGS_INFO(regs[12]), \ ++ PTREGS_INFO(regs[13]), \ ++ PTREGS_INFO(regs[14]), \ ++ PTREGS_INFO(regs[16]), \ ++ PTREGS_INFO(regs[17]), \ ++ PTREGS_INFO(regs[18]), \ ++ PTREGS_INFO(regs[19]), \ ++ PTREGS_INFO(regs[20]), \ ++ PTREGS_INFO(regs[21]), \ ++ PTREGS_INFO(regs[22]), \ ++ PTREGS_INFO(regs[23]), \ ++ PTREGS_INFO(regs[24]), \ ++ PTREGS_INFO(regs[26]), \ ++ PTREGS_INFO(regs[27]), \ ++ PTREGS_INFO(regs[28]), \ ++ PTREGS_INFO(regs[29]), \ ++ PTREGS_INFO(regs[30]), \ ++ PTREGS_INFO(regs[31]), \ ++ PTREGS_INFO(csr_era) ++ ++//libunwind: include/libunwind-loongarch64.h UNW_LOONGARCH64_PC = 33 ++#define UNW_PC_IDX 33 ++// sp(r3) register ++#define UNW_SP_IDX 3 ++ ++/* Use default rules. The stack pointer should be set from the CFA. ++ And the instruction pointer should be set from the return address ++ column (which normally is the return register (regs[31]). */ ++ ++static inline void arch_unw_init_frame_info(struct unwind_frame_info *info, ++ /*const*/ struct pt_regs *regs, ++ int sanitize) ++{ ++ if (&info->regs == regs) { /* happens when unwinding kernel->user */ ++ info->call_frame = 1; ++ return; ++ } ++ ++ memset(info, 0, sizeof(*info)); ++ /* XXX handle sanitize??? */ ++ info->regs = *regs; ++} ++ ++#endif /* _STP_LOONGARCH_UNWIND_H */ +\ No newline at end of file +diff --git a/runtime/unwind/unwind.h b/runtime/unwind/unwind.h +index 1c77b50..cebae34 100644 +--- a/runtime/unwind/unwind.h ++++ b/runtime/unwind/unwind.h +@@ -38,6 +38,8 @@ struct unwind_frame_info + #include "mips.h" + #elif defined (__riscv) + #include "riscv.h" ++#elif defined (__loongarch64) ++#include "loongarch64.h" + #else + #error "Unsupported dwarf unwind architecture" + #endif +diff --git a/scripts/dump-syscalls.sh b/scripts/dump-syscalls.sh +index 57e5e42..420f620 100755 +--- a/scripts/dump-syscalls.sh ++++ b/scripts/dump-syscalls.sh +@@ -24,6 +24,7 @@ TAPSET_ARM=$TAPSET_SRC/linux/arm/syscall_num.stp + TAPSET_AARCH64=$TAPSET_SRC/linux/arm64/syscall_num.stp + TAPSET_MIPS=$TAPSET_SRC/linux/mips/syscall_num.stp + TAPSET_RISCV=$TAPSET_SRC/linux/riscv/syscall_num.stp ++TAPSET_LOONGARCH=$TAPSET_SRC/linux/loongarch64/syscall_num.stp + + SYSCALLS_32=$(mktemp) + SYSCALLS_64=$(mktemp) +@@ -132,5 +133,10 @@ __dump_syscalls $STRACE_SRC/linux/riscv64/syscallent.h 64 + # than nothing. + __dump_syscalls $STRACE_SRC/linux/riscv64/syscallent.h 32 + __generate_tapset $TAPSET_RISCV riscv ++# ======= loongarch64 ======= ++__init ++__dump_syscalls $STRACE_SRC/linux/64/syscallent.h 64 ++__dump_syscalls $STRACE_SRC/linux/loongarch64/syscallent.h 64 ++__generate_tapset $TAPSET_LOONGARCH loongarch64 + + rm -f $SYSCALLS_32 $SYSCALLS_64 +diff --git a/stapbpf/libbpf.c b/stapbpf/libbpf.c +index 09f20eb..95505c5 100644 +--- a/stapbpf/libbpf.c ++++ b/stapbpf/libbpf.c +@@ -20,7 +20,7 @@ + # define __NR_bpf 357 + # elif defined(__x86_64__) + # define __NR_bpf 321 +-# elif defined(__aarch64__) ++# elif defined(__aarch64__) || defined(__loongarch64) + # define __NR_bpf 280 + # else + # error __NR_bpf not defined. +diff --git a/stapdyn/mutatee.cxx b/stapdyn/mutatee.cxx +index c357b17..5438ee4 100644 +--- a/stapdyn/mutatee.cxx ++++ b/stapdyn/mutatee.cxx +@@ -62,6 +62,15 @@ get_dwarf_registers(BPatch_process *app, + "r20", "r21", "r22", "r23", + "r24", "r25", "r26", "r27", + "r28", "r29", "r30", "r31", ++#elif defined(__loongarch64) ++ "r0", "r1", "r2", "r3", ++ "r4", "r5", "r6", "r7", ++ "r8", "r9", "r10", "r11", ++ "r12", "r13", "r14", "r15", ++ "r16", "r17", "r18", "r19", ++ "r20", "r21", "r22", "r23", ++ "r24", "r25", "r26", "r27", ++ "r28", "r29", "r30", "r31", + #endif + NULL }; + +diff --git a/tapset/errno.stp b/tapset/errno.stp +index a75e3ba..d7c93f5 100644 +--- a/tapset/errno.stp ++++ b/tapset/errno.stp +@@ -392,6 +392,8 @@ static long _stp_returnval(struct pt_regs *regs) { + return regs->ARM_r0; + #elif defined (__mips__) + return regs->regs[2]; ++#elif defined (__loongarch64) ++ return regs->regs[4]; + #else + _stp_error("returnval() not defined for this architecture"); + return 0; +diff --git a/tapset/linux/aux_syscalls.stp b/tapset/linux/aux_syscalls.stp +index af6b0ae..6193f76 100644 +--- a/tapset/linux/aux_syscalls.stp ++++ b/tapset/linux/aux_syscalls.stp +@@ -3568,7 +3568,7 @@ static void _stp_sigaction_str(struct sigaction *act, char *ptr, int len) + strlcat (ptr, ", ", len); + _stp_lookup_or_str(_stp_sa_flags_list, act->sa_flags, ptr, len); + strlcat (ptr, ", ", len); +-#if !defined (__ia64__) && !defined (__mips__) && !defined(__riscv) ++#if !defined (__ia64__) && !defined (__mips__) && !defined(__riscv) && !defined (__loongarch64) + slen = strlen(ptr); + _stp_snprintf(ptr + slen, len - slen, + "0x%lx, ", (long)act->sa_restorer); +@@ -4129,6 +4129,9 @@ function _swapon_flags_str:string(flags:long) + #elif defined(__aarch64__) + long pstate = kread(®s->pstate); + STAP_RETVALUE = ((pstate & PSR_MODE_MASK) == PSR_MODE_EL0t); ++#elif defined(__loongarch64) ++ long csr_prmd = kread(®s->csr_prmd); ++ STAP_RETVALUE = ((csr_prmd & PLV_MASK) == PLV_USER); + #else + #error "Unimplemented architecture" + #endif +diff --git a/tapset/linux/loongarch64/aux_syscalls.stp b/tapset/linux/loongarch64/aux_syscalls.stp +new file mode 100644 +index 0000000..d7f2edd +--- /dev/null ++++ b/tapset/linux/loongarch64/aux_syscalls.stp +@@ -0,0 +1,12 @@ ++# arch-specific requests of ptrace ___________________________ ++# ++ ++function _arch_ptrace_argstr(request, pid, addr, data) ++{ ++ return("") ++} ++ ++function _ptrace_return_arch_prctl_addr:long(request:long, addr:long, data:long) ++{ ++ return 0 ++} +\ No newline at end of file +diff --git a/tapset/linux/loongarch64/registers.stp b/tapset/linux/loongarch64/registers.stp +new file mode 100644 +index 0000000..b2523f4 +--- /dev/null ++++ b/tapset/linux/loongarch64/registers.stp +@@ -0,0 +1,293 @@ ++/* Dwarfless register access for LOONGARCH */ ++ ++global _reg_offsets, _stp_regs_registered ++ ++function _stp_register_regs() { ++ offset_acx = 0 ++ /* Same order as struct pt_regs */ ++ _reg_offsets["$zero"] = 0 ++ _reg_offsets["$ra"] = 8 ++ _reg_offsets["$tp"] = 16 ++ _reg_offsets["$sp"] = 24 ++ _reg_offsets["$a0"] = 32 ++ _reg_offsets["$a1"] = 40 ++ _reg_offsets["$a2"] = 48 ++ _reg_offsets["$a3"] = 56 ++ _reg_offsets["$a4"] = 64 ++ _reg_offsets["$a5"] = 72 ++ _reg_offsets["$a6"] = 80 ++ _reg_offsets["$a7"] = 88 ++ _reg_offsets["$t0"] = 96 ++ _reg_offsets["$t1"] = 104 ++ _reg_offsets["$t2"] = 112 ++ _reg_offsets["$t3"] = 120 ++ _reg_offsets["$t4"] = 128 ++ _reg_offsets["$t5"] = 136 ++ _reg_offsets["$t6"] = 144 ++ _reg_offsets["$t7"] = 152 ++ _reg_offsets["$t8"] = 160 ++ _reg_offsets["$x"] = 168 ++ _reg_offsets["$fp"] = 176 ++ _reg_offsets["$s0"] = 184 ++ _reg_offsets["$s1"] = 192 ++ _reg_offsets["$s2"] = 200 ++ _reg_offsets["$s3"] = 208 ++ _reg_offsets["$s4"] = 216 ++ _reg_offsets["$s5"] = 224 ++ _reg_offsets["$s6"] = 232 ++ _reg_offsets["$s7"] = 240 ++ _reg_offsets["$s8"] = 248 ++ ++/* ignore special registers */ ++ ++ _stp_regs_registered = 1 ++} ++ ++function _stp_get_register_by_offset:long (offset:long) %{ /* pure */ ++ long value; ++ struct pt_regs *regs; ++ regs = (CONTEXT->user_mode_p ? CONTEXT->uregs : CONTEXT->kregs); ++ ++ if (!regs) { ++ CONTEXT->last_error = "No registers available in this context"; ++ return; ++ } ++ if (STAP_ARG_offset < 0 || STAP_ARG_offset > sizeof(struct pt_regs) - sizeof(long)) { ++ snprintf(CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer), ++ "Bad register offset: %lld", STAP_ARG_offset); ++ CONTEXT->last_error = CONTEXT->error_buffer; ++ return; ++ } ++ memcpy(&value, ((char *)regs) + STAP_ARG_offset, sizeof(value)); ++ STAP_RETVALUE = value; ++%} ++ ++function _stp_sign_extend32:long (value:long) { ++ if (value & 0x80000000) ++ value |= (0xffffffff << 32) ++ return value ++} ++ ++function _stp_register:long (name:string, sign_extend:long) { ++ if (!registers_valid()) { ++ error("cannot access CPU registers in this context") ++ return 0 ++ } ++ if (!_stp_regs_registered) ++ _stp_register_regs() ++ offset = _reg_offsets[name] ++ if (offset == 0 && !(name in _reg_offsets)) { ++ error("Unknown register: " . name) ++ return 0 ++ } ++ value = _stp_get_register_by_offset(offset) ++ return value ++} ++ ++/* Return the named register value as a signed value. */ ++function register:long (name:string) { ++ return _stp_register(name, 1) ++} ++ ++/* ++ * Return the named register value as an unsigned value. Specifically, ++ * don't sign-extend the register value when promoting it to 64 bits. ++ */ ++function u_register:long (name:string) { ++ return _stp_register(name, 0) ++} ++ ++ ++/* Dwarfless register access for loongarch */ ++ ++%{ ++// These functions are largely lifted from arch/loongarch/include/asm/ptrace.h. ++ ++static inline unsigned long _stp_kernel_stack_pointer(struct pt_regs *regs) ++{ ++ return regs->regs[3]; ++} ++ ++/** ++ * _stp_regs_within_kernel_stack() - check the address in the stack ++ * @regs: pt_regs which contains kernel stack pointer. ++ * @addr: address which is checked. ++ * ++ * _stp_regs_within_kernel_stack() checks @addr is within the kernel stack page(s). ++ * If @addr is within the kernel stack, it returns true. If not, returns false. ++ */ ++static inline int _stp_regs_within_kernel_stack(struct pt_regs *regs, unsigned long addr) ++{ ++ return ((addr & ~(THREAD_SIZE - 1)) == ++ (_stp_kernel_stack_pointer(regs) & ~(THREAD_SIZE - 1))); ++} ++ ++/* ++ * _stp_regs_get_kernel_stack_nth_addr() - get address of the Nth entry of the stack ++ * @regs: pt_regs which contains kernel stack pointer. ++ * @n: stack entry number. ++ * ++ * _stp_regs_get_kernel_stack_nth_addr() returns the address of the @n ++ * th entry of the kernel stack which is specified by @regs. If the @n ++ * th entry is NOT in the kernel stack, this returns 0. ++ */ ++long * ++_stp_regs_get_kernel_stack_nth_addr(struct pt_regs *regs, unsigned int n) ++{ ++ long *addr = (unsigned long *)_stp_kernel_stack_pointer(regs); ++ addr += n; ++ if (_stp_regs_within_kernel_stack(regs, (unsigned long)addr)) ++ return addr; ++ else ++ return 0; ++} ++ ++%} ++ ++function _stp_get_stack_nth:long (n:long) ++%{ /* pure */ ++ __label__ deref_fault; ++ unsigned int n = (unsigned int)STAP_ARG_n; ++ struct pt_regs *regs; ++ long *addr; ++ ++ STAP_RETVALUE = 0; ++ if (CONTEXT->user_mode_p) { ++ // This function only handles kernel arguments off the stack. ++ snprintf(CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer), ++ "cannot access function args in this context"); ++ CONTEXT->last_error = CONTEXT->error_buffer; ++ return; ++ } ++ regs = CONTEXT->kregs; ++ if (!regs) { ++ snprintf(CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer), ++ "cannot access function args in this context"); ++ CONTEXT->last_error = CONTEXT->error_buffer; ++ return; ++ } ++ ++ /* Get the address of the nth item on the stack. */ ++ addr = _stp_regs_get_kernel_stack_nth_addr(regs, n); ++ if (addr == NULL) { ++ snprintf(CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer), ++ "cannot access stack arg(%d)", n); ++ CONTEXT->last_error = CONTEXT->error_buffer; ++ return; ++ } ++ STAP_RETVALUE = kread(addr); ++ return; ++ ++deref_fault: /* branched to from kread() */ ++ snprintf(CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer), ++ "kernel fault at %#lx accessing stack arg(%d)", ++ (unsigned long)addr, n); ++ CONTEXT->last_error = CONTEXT->error_buffer; ++%} ++ ++/* ++ * Return the value of function arg #argnum (1=first arg). ++ * If truncate=1, mask off the top 32 bits. ++ * If sign_extend=1 and (truncate=1 or the probepoint we've hit is in a ++ * 32-bit app), sign-extend the 32-bit value. ++ */ ++function _stp_arg:long (argnum:long, sign_extend:long, truncate:long) { ++ val = 0 ++ if (argnum < 1 || argnum > 8) { ++ error(sprintf("Cannot access arg(%d)", argnum)) ++ return 0 ++ } ++ ++ if (argnum == 1) ++ val = u_register("$a0") ++ else if (argnum == 2) ++ val = u_register("$a1") ++ else if (argnum == 3) ++ val = u_register("$a2") ++ else if (argnum == 4) ++ val = u_register("$a3") ++ else if (argnum == 5) ++ val = u_register("$a4") ++ else if (argnum == 6) ++ val = u_register("$a5") ++ else if (argnum == 7) ++ val = u_register("$a6") ++ else if (argnum == 8) ++ val = u_register("$a7") ++ else ++ val = _stp_get_stack_nth(argnum - 5) ++ ++ if (truncate) { ++ if (sign_extend) ++ val = _stp_sign_extend32(val) ++ else ++ /* High bits may be garbage. */ ++ val = (val & 0xffffffff); ++ } ++ return val; ++} ++ ++function arch_bytes:long() %{ /* pure */ ++ STAP_RETVALUE = sizeof(long); ++%} ++ ++function uarch_bytes:long() { ++ assert(user_mode(), "requires user mode") ++ return probing_32bit_app() ? 4 : 8 ++} ++ ++/* Return the value of function arg #argnum (1=first arg) as a signed int. */ ++function int_arg:long (argnum:long) { ++ return _stp_arg(argnum, 1, 1) ++} ++ ++/* Return the value of function arg #argnum (1=first arg) as an unsigned int. */ ++function uint_arg:long (argnum:long) { ++ return _stp_arg(argnum, 0, 1) ++} ++ ++function long_arg:long (argnum:long) { ++ return _stp_arg(argnum, 1, 0) ++} ++ ++function ulong_arg:long (argnum:long) { ++ return _stp_arg(argnum, 0, 0) ++} ++ ++function longlong_arg:long (argnum:long) { ++ return _stp_arg(argnum, 0, 0) ++} ++ ++function ulonglong_arg:long (argnum:long) { ++ return longlong_arg(argnum) ++} ++ ++function pointer_arg:long (argnum:long) { ++ return _stp_arg(argnum, 0, 0) ++} ++ ++function s32_arg:long (argnum:long) { ++ return int_arg(argnum) ++} ++ ++function u32_arg:long (argnum:long) { ++ return uint_arg(argnum) ++} ++ ++function s64_arg:long (argnum:long) { ++ return longlong_arg(argnum) ++} ++ ++function u64_arg:long (argnum:long) { ++ return ulonglong_arg(argnum) ++} ++ ++function asmlinkage() %{ /* pure */ %} ++ ++function fastcall() %{ /* pure */ %} ++ ++function regparm() %{ ++ snprintf(CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer), ++ "regparm is invalid on mips."); ++ CONTEXT->last_error = CONTEXT->error_buffer; ++%} +\ No newline at end of file +diff --git a/tapset/linux/loongarch64/syscall_num.stp b/tapset/linux/loongarch64/syscall_num.stp +new file mode 100644 +index 0000000..284f6ba +--- /dev/null ++++ b/tapset/linux/loongarch64/syscall_num.stp +@@ -0,0 +1,1283 @@ ++# This is arch specific syscall table generated by scripts/dump-syscalls.sh ++ ++%( arch =="loongarch64" %? ++global __syscall_64_num2name[636] ++global __syscall_64_name2num[636] ++%) ++ ++probe init { ++%( arch =="loongarch64" %? ++__syscall_64_num2name[202]="accept" ++__syscall_64_num2name[202]="accept" ++__syscall_64_name2num["accept"]=202 ++__syscall_64_name2num["accept"]=202 ++__syscall_64_num2name[242]="accept4" ++__syscall_64_num2name[242]="accept4" ++__syscall_64_name2num["accept4"]=242 ++__syscall_64_name2num["accept4"]=242 ++__syscall_64_num2name[89]="acct" ++__syscall_64_num2name[89]="acct" ++__syscall_64_name2num["acct"]=89 ++__syscall_64_name2num["acct"]=89 ++__syscall_64_num2name[217]="add_key" ++__syscall_64_num2name[217]="add_key" ++__syscall_64_name2num["add_key"]=217 ++__syscall_64_name2num["add_key"]=217 ++__syscall_64_num2name[171]="adjtimex" ++__syscall_64_num2name[171]="adjtimex" ++__syscall_64_name2num["adjtimex"]=171 ++__syscall_64_name2num["adjtimex"]=171 ++__syscall_64_num2name[200]="bind" ++__syscall_64_num2name[200]="bind" ++__syscall_64_name2num["bind"]=200 ++__syscall_64_name2num["bind"]=200 ++__syscall_64_num2name[280]="bpf" ++__syscall_64_num2name[280]="bpf" ++__syscall_64_name2num["bpf"]=280 ++__syscall_64_name2num["bpf"]=280 ++__syscall_64_num2name[214]="brk" ++__syscall_64_num2name[214]="brk" ++__syscall_64_name2num["brk"]=214 ++__syscall_64_name2num["brk"]=214 ++__syscall_64_num2name[0+451]="cachestat" ++__syscall_64_num2name[0+451]="cachestat" ++__syscall_64_name2num["cachestat"]=0+451 ++__syscall_64_name2num["cachestat"]=0+451 ++__syscall_64_num2name[90]="capget" ++__syscall_64_num2name[90]="capget" ++__syscall_64_name2num["capget"]=90 ++__syscall_64_name2num["capget"]=90 ++__syscall_64_num2name[91]="capset" ++__syscall_64_num2name[91]="capset" ++__syscall_64_name2num["capset"]=91 ++__syscall_64_name2num["capset"]=91 ++__syscall_64_num2name[49]="chdir" ++__syscall_64_num2name[49]="chdir" ++__syscall_64_name2num["chdir"]=49 ++__syscall_64_name2num["chdir"]=49 ++__syscall_64_num2name[51]="chroot" ++__syscall_64_num2name[51]="chroot" ++__syscall_64_name2num["chroot"]=51 ++__syscall_64_name2num["chroot"]=51 ++__syscall_64_num2name[266]="clock_adjtime" ++__syscall_64_num2name[266]="clock_adjtime" ++__syscall_64_name2num["clock_adjtime"]=266 ++__syscall_64_name2num["clock_adjtime"]=266 ++__syscall_64_num2name[114]="clock_getres" ++__syscall_64_num2name[114]="clock_getres" ++__syscall_64_name2num["clock_getres"]=114 ++__syscall_64_name2num["clock_getres"]=114 ++__syscall_64_num2name[113]="clock_gettime" ++__syscall_64_num2name[113]="clock_gettime" ++__syscall_64_name2num["clock_gettime"]=113 ++__syscall_64_name2num["clock_gettime"]=113 ++__syscall_64_num2name[115]="clock_nanosleep" ++__syscall_64_num2name[115]="clock_nanosleep" ++__syscall_64_name2num["clock_nanosleep"]=115 ++__syscall_64_name2num["clock_nanosleep"]=115 ++__syscall_64_num2name[112]="clock_settime" ++__syscall_64_num2name[112]="clock_settime" ++__syscall_64_name2num["clock_settime"]=112 ++__syscall_64_name2num["clock_settime"]=112 ++__syscall_64_num2name[220]="clone" ++__syscall_64_num2name[220]="clone" ++__syscall_64_name2num["clone"]=220 ++__syscall_64_name2num["clone"]=220 ++__syscall_64_num2name[0+435]="clone3" ++__syscall_64_num2name[0+435]="clone3" ++__syscall_64_name2num["clone3"]=0+435 ++__syscall_64_name2num["clone3"]=0+435 ++__syscall_64_num2name[57]="close" ++__syscall_64_num2name[57]="close" ++__syscall_64_name2num["close"]=57 ++__syscall_64_name2num["close"]=57 ++__syscall_64_num2name[0+436]="close_range" ++__syscall_64_num2name[0+436]="close_range" ++__syscall_64_name2num["close_range"]=0+436 ++__syscall_64_name2num["close_range"]=0+436 ++__syscall_64_num2name[203]="connect" ++__syscall_64_num2name[203]="connect" ++__syscall_64_name2num["connect"]=203 ++__syscall_64_name2num["connect"]=203 ++__syscall_64_num2name[285]="copy_file_range" ++__syscall_64_num2name[285]="copy_file_range" ++__syscall_64_name2num["copy_file_range"]=285 ++__syscall_64_name2num["copy_file_range"]=285 ++__syscall_64_num2name[106]="delete_module" ++__syscall_64_num2name[106]="delete_module" ++__syscall_64_name2num["delete_module"]=106 ++__syscall_64_name2num["delete_module"]=106 ++__syscall_64_num2name[23]="dup" ++__syscall_64_num2name[23]="dup" ++__syscall_64_name2num["dup"]=23 ++__syscall_64_name2num["dup"]=23 ++__syscall_64_num2name[24]="dup3" ++__syscall_64_num2name[24]="dup3" ++__syscall_64_name2num["dup3"]=24 ++__syscall_64_name2num["dup3"]=24 ++__syscall_64_num2name[20]="epoll_create1" ++__syscall_64_num2name[20]="epoll_create1" ++__syscall_64_name2num["epoll_create1"]=20 ++__syscall_64_name2num["epoll_create1"]=20 ++__syscall_64_num2name[21]="epoll_ctl" ++__syscall_64_num2name[21]="epoll_ctl" ++__syscall_64_name2num["epoll_ctl"]=21 ++__syscall_64_name2num["epoll_ctl"]=21 ++__syscall_64_num2name[22]="epoll_pwait" ++__syscall_64_num2name[22]="epoll_pwait" ++__syscall_64_num2name[0+441]="epoll_pwait2" ++__syscall_64_num2name[0+441]="epoll_pwait2" ++__syscall_64_name2num["epoll_pwait2"]=0+441 ++__syscall_64_name2num["epoll_pwait2"]=0+441 ++__syscall_64_name2num["epoll_pwait"]=22 ++__syscall_64_name2num["epoll_pwait"]=22 ++__syscall_64_num2name[19]="eventfd2" ++__syscall_64_num2name[19]="eventfd2" ++__syscall_64_name2num["eventfd2"]=19 ++__syscall_64_name2num["eventfd2"]=19 ++__syscall_64_num2name[221]="execve" ++__syscall_64_num2name[221]="execve" ++__syscall_64_name2num["execve"]=221 ++__syscall_64_name2num["execve"]=221 ++__syscall_64_num2name[281]="execveat" ++__syscall_64_num2name[281]="execveat" ++__syscall_64_name2num["execveat"]=281 ++__syscall_64_name2num["execveat"]=281 ++__syscall_64_num2name[93]="exit" ++__syscall_64_num2name[93]="exit" ++__syscall_64_name2num["exit"]=93 ++__syscall_64_name2num["exit"]=93 ++__syscall_64_num2name[94]="exit_group" ++__syscall_64_num2name[94]="exit_group" ++__syscall_64_name2num["exit_group"]=94 ++__syscall_64_name2num["exit_group"]=94 ++__syscall_64_num2name[48]="faccessat" ++__syscall_64_num2name[48]="faccessat" ++__syscall_64_num2name[0+439]="faccessat2" ++__syscall_64_num2name[0+439]="faccessat2" ++__syscall_64_name2num["faccessat2"]=0+439 ++__syscall_64_name2num["faccessat2"]=0+439 ++__syscall_64_name2num["faccessat"]=48 ++__syscall_64_name2num["faccessat"]=48 ++__syscall_64_num2name[223]="fadvise64" ++__syscall_64_num2name[223]="fadvise64" ++__syscall_64_name2num["fadvise64"]=223 ++__syscall_64_name2num["fadvise64"]=223 ++__syscall_64_num2name[47]="fallocate" ++__syscall_64_num2name[47]="fallocate" ++__syscall_64_name2num["fallocate"]=47 ++__syscall_64_name2num["fallocate"]=47 ++__syscall_64_num2name[262]="fanotify_init" ++__syscall_64_num2name[262]="fanotify_init" ++__syscall_64_name2num["fanotify_init"]=262 ++__syscall_64_name2num["fanotify_init"]=262 ++__syscall_64_num2name[263]="fanotify_mark" ++__syscall_64_num2name[263]="fanotify_mark" ++__syscall_64_name2num["fanotify_mark"]=263 ++__syscall_64_name2num["fanotify_mark"]=263 ++__syscall_64_num2name[50]="fchdir" ++__syscall_64_num2name[50]="fchdir" ++__syscall_64_name2num["fchdir"]=50 ++__syscall_64_name2num["fchdir"]=50 ++__syscall_64_num2name[52]="fchmod" ++__syscall_64_num2name[52]="fchmod" ++__syscall_64_name2num["fchmod"]=52 ++__syscall_64_name2num["fchmod"]=52 ++__syscall_64_num2name[53]="fchmodat" ++__syscall_64_num2name[53]="fchmodat" ++__syscall_64_num2name[0+452]="fchmodat2" ++__syscall_64_num2name[0+452]="fchmodat2" ++__syscall_64_name2num["fchmodat2"]=0+452 ++__syscall_64_name2num["fchmodat2"]=0+452 ++__syscall_64_name2num["fchmodat"]=53 ++__syscall_64_name2num["fchmodat"]=53 ++__syscall_64_num2name[55]="fchown" ++__syscall_64_num2name[55]="fchown" ++__syscall_64_name2num["fchown"]=55 ++__syscall_64_name2num["fchown"]=55 ++__syscall_64_num2name[54]="fchownat" ++__syscall_64_num2name[54]="fchownat" ++__syscall_64_name2num["fchownat"]=54 ++__syscall_64_name2num["fchownat"]=54 ++__syscall_64_num2name[25]="fcntl" ++__syscall_64_num2name[25]="fcntl" ++__syscall_64_name2num["fcntl"]=25 ++__syscall_64_name2num["fcntl"]=25 ++__syscall_64_num2name[83]="fdatasync" ++__syscall_64_num2name[83]="fdatasync" ++__syscall_64_name2num["fdatasync"]=83 ++__syscall_64_name2num["fdatasync"]=83 ++__syscall_64_num2name[10]="fgetxattr" ++__syscall_64_num2name[10]="fgetxattr" ++__syscall_64_name2num["fgetxattr"]=10 ++__syscall_64_name2num["fgetxattr"]=10 ++__syscall_64_num2name[273]="finit_module" ++__syscall_64_num2name[273]="finit_module" ++__syscall_64_name2num["finit_module"]=273 ++__syscall_64_name2num["finit_module"]=273 ++__syscall_64_num2name[13]="flistxattr" ++__syscall_64_num2name[13]="flistxattr" ++__syscall_64_name2num["flistxattr"]=13 ++__syscall_64_name2num["flistxattr"]=13 ++__syscall_64_num2name[32]="flock" ++__syscall_64_num2name[32]="flock" ++__syscall_64_name2num["flock"]=32 ++__syscall_64_name2num["flock"]=32 ++__syscall_64_num2name[16]="fremovexattr" ++__syscall_64_num2name[16]="fremovexattr" ++__syscall_64_name2num["fremovexattr"]=16 ++__syscall_64_name2num["fremovexattr"]=16 ++__syscall_64_num2name[0+431]="fsconfig" ++__syscall_64_num2name[0+431]="fsconfig" ++__syscall_64_name2num["fsconfig"]=0+431 ++__syscall_64_name2num["fsconfig"]=0+431 ++__syscall_64_num2name[7]="fsetxattr" ++__syscall_64_num2name[7]="fsetxattr" ++__syscall_64_name2num["fsetxattr"]=7 ++__syscall_64_name2num["fsetxattr"]=7 ++__syscall_64_num2name[0+432]="fsmount" ++__syscall_64_num2name[0+432]="fsmount" ++__syscall_64_name2num["fsmount"]=0+432 ++__syscall_64_name2num["fsmount"]=0+432 ++__syscall_64_num2name[0+430]="fsopen" ++__syscall_64_num2name[0+430]="fsopen" ++__syscall_64_name2num["fsopen"]=0+430 ++__syscall_64_name2num["fsopen"]=0+430 ++__syscall_64_num2name[0+433]="fspick" ++__syscall_64_num2name[0+433]="fspick" ++__syscall_64_name2num["fspick"]=0+433 ++__syscall_64_name2num["fspick"]=0+433 ++__syscall_64_num2name[80]="fstat" ++__syscall_64_num2name[80]="fstat" ++__syscall_64_name2num["fstat"]=80 ++__syscall_64_name2num["fstat"]=80 ++__syscall_64_num2name[44]="fstatfs" ++__syscall_64_num2name[44]="fstatfs" ++__syscall_64_name2num["fstatfs"]=44 ++__syscall_64_name2num["fstatfs"]=44 ++__syscall_64_num2name[82]="fsync" ++__syscall_64_num2name[82]="fsync" ++__syscall_64_name2num["fsync"]=82 ++__syscall_64_name2num["fsync"]=82 ++__syscall_64_num2name[46]="ftruncate" ++__syscall_64_num2name[46]="ftruncate" ++__syscall_64_name2num["ftruncate"]=46 ++__syscall_64_name2num["ftruncate"]=46 ++__syscall_64_num2name[98]="futex" ++__syscall_64_num2name[98]="futex" ++__syscall_64_name2num["futex"]=98 ++__syscall_64_name2num["futex"]=98 ++__syscall_64_num2name[0+456]="futex_requeue" ++__syscall_64_num2name[0+456]="futex_requeue" ++__syscall_64_name2num["futex_requeue"]=0+456 ++__syscall_64_name2num["futex_requeue"]=0+456 ++__syscall_64_num2name[0+455]="futex_wait" ++__syscall_64_num2name[0+455]="futex_wait" ++__syscall_64_name2num["futex_wait"]=0+455 ++__syscall_64_name2num["futex_wait"]=0+455 ++__syscall_64_num2name[0+449]="futex_waitv" ++__syscall_64_num2name[0+449]="futex_waitv" ++__syscall_64_name2num["futex_waitv"]=0+449 ++__syscall_64_name2num["futex_waitv"]=0+449 ++__syscall_64_num2name[0+454]="futex_wake" ++__syscall_64_num2name[0+454]="futex_wake" ++__syscall_64_name2num["futex_wake"]=0+454 ++__syscall_64_name2num["futex_wake"]=0+454 ++__syscall_64_num2name[168]="getcpu" ++__syscall_64_num2name[168]="getcpu" ++__syscall_64_name2num["getcpu"]=168 ++__syscall_64_name2num["getcpu"]=168 ++__syscall_64_num2name[17]="getcwd" ++__syscall_64_num2name[17]="getcwd" ++__syscall_64_name2num["getcwd"]=17 ++__syscall_64_name2num["getcwd"]=17 ++__syscall_64_num2name[61]="getdents64" ++__syscall_64_num2name[61]="getdents64" ++__syscall_64_name2num["getdents64"]=61 ++__syscall_64_name2num["getdents64"]=61 ++__syscall_64_num2name[177]="getegid" ++__syscall_64_num2name[177]="getegid" ++__syscall_64_name2num["getegid"]=177 ++__syscall_64_name2num["getegid"]=177 ++__syscall_64_num2name[175]="geteuid" ++__syscall_64_num2name[175]="geteuid" ++__syscall_64_name2num["geteuid"]=175 ++__syscall_64_name2num["geteuid"]=175 ++__syscall_64_num2name[176]="getgid" ++__syscall_64_num2name[176]="getgid" ++__syscall_64_name2num["getgid"]=176 ++__syscall_64_name2num["getgid"]=176 ++__syscall_64_num2name[158]="getgroups" ++__syscall_64_num2name[158]="getgroups" ++__syscall_64_name2num["getgroups"]=158 ++__syscall_64_name2num["getgroups"]=158 ++__syscall_64_num2name[102]="getitimer" ++__syscall_64_num2name[102]="getitimer" ++__syscall_64_name2num["getitimer"]=102 ++__syscall_64_name2num["getitimer"]=102 ++__syscall_64_num2name[236]="get_mempolicy" ++__syscall_64_num2name[236]="get_mempolicy" ++__syscall_64_name2num["get_mempolicy"]=236 ++__syscall_64_name2num["get_mempolicy"]=236 ++__syscall_64_num2name[205]="getpeername" ++__syscall_64_num2name[205]="getpeername" ++__syscall_64_name2num["getpeername"]=205 ++__syscall_64_name2num["getpeername"]=205 ++__syscall_64_num2name[155]="getpgid" ++__syscall_64_num2name[155]="getpgid" ++__syscall_64_name2num["getpgid"]=155 ++__syscall_64_name2num["getpgid"]=155 ++__syscall_64_num2name[172]="getpid" ++__syscall_64_num2name[172]="getpid" ++__syscall_64_name2num["getpid"]=172 ++__syscall_64_name2num["getpid"]=172 ++__syscall_64_num2name[173]="getppid" ++__syscall_64_num2name[173]="getppid" ++__syscall_64_name2num["getppid"]=173 ++__syscall_64_name2num["getppid"]=173 ++__syscall_64_num2name[141]="getpriority" ++__syscall_64_num2name[141]="getpriority" ++__syscall_64_name2num["getpriority"]=141 ++__syscall_64_name2num["getpriority"]=141 ++__syscall_64_num2name[278]="getrandom" ++__syscall_64_num2name[278]="getrandom" ++__syscall_64_name2num["getrandom"]=278 ++__syscall_64_name2num["getrandom"]=278 ++__syscall_64_num2name[150]="getresgid" ++__syscall_64_num2name[150]="getresgid" ++__syscall_64_name2num["getresgid"]=150 ++__syscall_64_name2num["getresgid"]=150 ++__syscall_64_num2name[148]="getresuid" ++__syscall_64_num2name[148]="getresuid" ++__syscall_64_name2num["getresuid"]=148 ++__syscall_64_name2num["getresuid"]=148 ++__syscall_64_num2name[163]="getrlimit" ++__syscall_64_num2name[163]="getrlimit" ++__syscall_64_name2num["getrlimit"]=163 ++__syscall_64_name2num["getrlimit"]=163 ++__syscall_64_num2name[100]="get_robust_list" ++__syscall_64_num2name[100]="get_robust_list" ++__syscall_64_name2num["get_robust_list"]=100 ++__syscall_64_name2num["get_robust_list"]=100 ++__syscall_64_num2name[165]="getrusage" ++__syscall_64_num2name[165]="getrusage" ++__syscall_64_name2num["getrusage"]=165 ++__syscall_64_name2num["getrusage"]=165 ++__syscall_64_num2name[156]="getsid" ++__syscall_64_num2name[156]="getsid" ++__syscall_64_name2num["getsid"]=156 ++__syscall_64_name2num["getsid"]=156 ++__syscall_64_num2name[204]="getsockname" ++__syscall_64_num2name[204]="getsockname" ++__syscall_64_name2num["getsockname"]=204 ++__syscall_64_name2num["getsockname"]=204 ++__syscall_64_num2name[209]="getsockopt" ++__syscall_64_num2name[209]="getsockopt" ++__syscall_64_name2num["getsockopt"]=209 ++__syscall_64_name2num["getsockopt"]=209 ++__syscall_64_num2name[178]="gettid" ++__syscall_64_num2name[178]="gettid" ++__syscall_64_name2num["gettid"]=178 ++__syscall_64_name2num["gettid"]=178 ++__syscall_64_num2name[169]="gettimeofday" ++__syscall_64_num2name[169]="gettimeofday" ++__syscall_64_name2num["gettimeofday"]=169 ++__syscall_64_name2num["gettimeofday"]=169 ++__syscall_64_num2name[174]="getuid" ++__syscall_64_num2name[174]="getuid" ++__syscall_64_name2num["getuid"]=174 ++__syscall_64_name2num["getuid"]=174 ++__syscall_64_num2name[8]="getxattr" ++__syscall_64_num2name[8]="getxattr" ++__syscall_64_name2num["getxattr"]=8 ++__syscall_64_name2num["getxattr"]=8 ++__syscall_64_num2name[105]="init_module" ++__syscall_64_num2name[105]="init_module" ++__syscall_64_name2num["init_module"]=105 ++__syscall_64_name2num["init_module"]=105 ++__syscall_64_num2name[27]="inotify_add_watch" ++__syscall_64_num2name[27]="inotify_add_watch" ++__syscall_64_name2num["inotify_add_watch"]=27 ++__syscall_64_name2num["inotify_add_watch"]=27 ++__syscall_64_num2name[26]="inotify_init1" ++__syscall_64_num2name[26]="inotify_init1" ++__syscall_64_name2num["inotify_init1"]=26 ++__syscall_64_name2num["inotify_init1"]=26 ++__syscall_64_num2name[28]="inotify_rm_watch" ++__syscall_64_num2name[28]="inotify_rm_watch" ++__syscall_64_name2num["inotify_rm_watch"]=28 ++__syscall_64_name2num["inotify_rm_watch"]=28 ++__syscall_64_num2name[3]="io_cancel" ++__syscall_64_num2name[3]="io_cancel" ++__syscall_64_name2num["io_cancel"]=3 ++__syscall_64_name2num["io_cancel"]=3 ++__syscall_64_num2name[29]="ioctl" ++__syscall_64_num2name[29]="ioctl" ++__syscall_64_name2num["ioctl"]=29 ++__syscall_64_name2num["ioctl"]=29 ++__syscall_64_num2name[1]="io_destroy" ++__syscall_64_num2name[1]="io_destroy" ++__syscall_64_name2num["io_destroy"]=1 ++__syscall_64_name2num["io_destroy"]=1 ++__syscall_64_num2name[4]="io_getevents" ++__syscall_64_num2name[4]="io_getevents" ++__syscall_64_name2num["io_getevents"]=4 ++__syscall_64_name2num["io_getevents"]=4 ++__syscall_64_num2name[292]="io_pgetevents" ++__syscall_64_num2name[292]="io_pgetevents" ++__syscall_64_name2num["io_pgetevents"]=292 ++__syscall_64_name2num["io_pgetevents"]=292 ++__syscall_64_num2name[31]="ioprio_get" ++__syscall_64_num2name[31]="ioprio_get" ++__syscall_64_name2num["ioprio_get"]=31 ++__syscall_64_name2num["ioprio_get"]=31 ++__syscall_64_num2name[30]="ioprio_set" ++__syscall_64_num2name[30]="ioprio_set" ++__syscall_64_name2num["ioprio_set"]=30 ++__syscall_64_name2num["ioprio_set"]=30 ++__syscall_64_num2name[0]="io_setup" ++__syscall_64_num2name[0]="io_setup" ++__syscall_64_name2num["io_setup"]=0 ++__syscall_64_name2num["io_setup"]=0 ++__syscall_64_num2name[2]="io_submit" ++__syscall_64_num2name[2]="io_submit" ++__syscall_64_name2num["io_submit"]=2 ++__syscall_64_name2num["io_submit"]=2 ++__syscall_64_num2name[0+426]="io_uring_enter" ++__syscall_64_num2name[0+426]="io_uring_enter" ++__syscall_64_name2num["io_uring_enter"]=0+426 ++__syscall_64_name2num["io_uring_enter"]=0+426 ++__syscall_64_num2name[0+427]="io_uring_register" ++__syscall_64_num2name[0+427]="io_uring_register" ++__syscall_64_name2num["io_uring_register"]=0+427 ++__syscall_64_name2num["io_uring_register"]=0+427 ++__syscall_64_num2name[0+425]="io_uring_setup" ++__syscall_64_num2name[0+425]="io_uring_setup" ++__syscall_64_name2num["io_uring_setup"]=0+425 ++__syscall_64_name2num["io_uring_setup"]=0+425 ++__syscall_64_num2name[272]="kcmp" ++__syscall_64_num2name[272]="kcmp" ++__syscall_64_name2num["kcmp"]=272 ++__syscall_64_name2num["kcmp"]=272 ++__syscall_64_num2name[294]="kexec_file_load" ++__syscall_64_num2name[294]="kexec_file_load" ++__syscall_64_name2num["kexec_file_load"]=294 ++__syscall_64_name2num["kexec_file_load"]=294 ++__syscall_64_num2name[104]="kexec_load" ++__syscall_64_num2name[104]="kexec_load" ++__syscall_64_name2num["kexec_load"]=104 ++__syscall_64_name2num["kexec_load"]=104 ++__syscall_64_num2name[219]="keyctl" ++__syscall_64_num2name[219]="keyctl" ++__syscall_64_name2num["keyctl"]=219 ++__syscall_64_name2num["keyctl"]=219 ++__syscall_64_num2name[129]="kill" ++__syscall_64_num2name[129]="kill" ++__syscall_64_name2num["kill"]=129 ++__syscall_64_name2num["kill"]=129 ++__syscall_64_num2name[0+445]="landlock_add_rule" ++__syscall_64_num2name[0+445]="landlock_add_rule" ++__syscall_64_name2num["landlock_add_rule"]=0+445 ++__syscall_64_name2num["landlock_add_rule"]=0+445 ++__syscall_64_num2name[0+444]="landlock_create_ruleset" ++__syscall_64_num2name[0+444]="landlock_create_ruleset" ++__syscall_64_name2num["landlock_create_ruleset"]=0+444 ++__syscall_64_name2num["landlock_create_ruleset"]=0+444 ++__syscall_64_num2name[0+446]="landlock_restrict_self" ++__syscall_64_num2name[0+446]="landlock_restrict_self" ++__syscall_64_name2num["landlock_restrict_self"]=0+446 ++__syscall_64_name2num["landlock_restrict_self"]=0+446 ++__syscall_64_num2name[9]="lgetxattr" ++__syscall_64_num2name[9]="lgetxattr" ++__syscall_64_name2num["lgetxattr"]=9 ++__syscall_64_name2num["lgetxattr"]=9 ++__syscall_64_num2name[37]="linkat" ++__syscall_64_num2name[37]="linkat" ++__syscall_64_name2num["linkat"]=37 ++__syscall_64_name2num["linkat"]=37 ++__syscall_64_num2name[201]="listen" ++__syscall_64_num2name[201]="listen" ++__syscall_64_name2num["listen"]=201 ++__syscall_64_name2num["listen"]=201 ++__syscall_64_num2name[0+458]="listmount" ++__syscall_64_num2name[0+458]="listmount" ++__syscall_64_name2num["listmount"]=0+458 ++__syscall_64_name2num["listmount"]=0+458 ++__syscall_64_num2name[11]="listxattr" ++__syscall_64_num2name[11]="listxattr" ++__syscall_64_name2num["listxattr"]=11 ++__syscall_64_name2num["listxattr"]=11 ++__syscall_64_num2name[12]="llistxattr" ++__syscall_64_num2name[12]="llistxattr" ++__syscall_64_name2num["llistxattr"]=12 ++__syscall_64_name2num["llistxattr"]=12 ++__syscall_64_num2name[18]="lookup_dcookie" ++__syscall_64_num2name[18]="lookup_dcookie" ++__syscall_64_name2num["lookup_dcookie"]=18 ++__syscall_64_name2num["lookup_dcookie"]=18 ++__syscall_64_num2name[15]="lremovexattr" ++__syscall_64_num2name[15]="lremovexattr" ++__syscall_64_name2num["lremovexattr"]=15 ++__syscall_64_name2num["lremovexattr"]=15 ++__syscall_64_num2name[62]="lseek" ++__syscall_64_num2name[62]="lseek" ++__syscall_64_name2num["lseek"]=62 ++__syscall_64_name2num["lseek"]=62 ++__syscall_64_num2name[6]="lsetxattr" ++__syscall_64_num2name[6]="lsetxattr" ++__syscall_64_name2num["lsetxattr"]=6 ++__syscall_64_name2num["lsetxattr"]=6 ++__syscall_64_num2name[0+459]="lsm_get_self_attr" ++__syscall_64_num2name[0+459]="lsm_get_self_attr" ++__syscall_64_name2num["lsm_get_self_attr"]=0+459 ++__syscall_64_name2num["lsm_get_self_attr"]=0+459 ++__syscall_64_num2name[0+461]="lsm_list_modules" ++__syscall_64_num2name[0+461]="lsm_list_modules" ++__syscall_64_name2num["lsm_list_modules"]=0+461 ++__syscall_64_name2num["lsm_list_modules"]=0+461 ++__syscall_64_num2name[0+460]="lsm_set_self_attr" ++__syscall_64_num2name[0+460]="lsm_set_self_attr" ++__syscall_64_name2num["lsm_set_self_attr"]=0+460 ++__syscall_64_name2num["lsm_set_self_attr"]=0+460 ++__syscall_64_num2name[233]="madvise" ++__syscall_64_num2name[233]="madvise" ++__syscall_64_name2num["madvise"]=233 ++__syscall_64_name2num["madvise"]=233 ++__syscall_64_num2name[0+453]="map_shadow_stack" ++__syscall_64_num2name[0+453]="map_shadow_stack" ++__syscall_64_name2num["map_shadow_stack"]=0+453 ++__syscall_64_name2num["map_shadow_stack"]=0+453 ++__syscall_64_num2name[235]="mbind" ++__syscall_64_num2name[235]="mbind" ++__syscall_64_name2num["mbind"]=235 ++__syscall_64_name2num["mbind"]=235 ++__syscall_64_num2name[283]="membarrier" ++__syscall_64_num2name[283]="membarrier" ++__syscall_64_name2num["membarrier"]=283 ++__syscall_64_name2num["membarrier"]=283 ++__syscall_64_num2name[279]="memfd_create" ++__syscall_64_num2name[279]="memfd_create" ++__syscall_64_name2num["memfd_create"]=279 ++__syscall_64_name2num["memfd_create"]=279 ++__syscall_64_num2name[0+447]="memfd_secret" ++__syscall_64_num2name[0+447]="memfd_secret" ++__syscall_64_name2num["memfd_secret"]=0+447 ++__syscall_64_name2num["memfd_secret"]=0+447 ++__syscall_64_num2name[238]="migrate_pages" ++__syscall_64_num2name[238]="migrate_pages" ++__syscall_64_name2num["migrate_pages"]=238 ++__syscall_64_name2num["migrate_pages"]=238 ++__syscall_64_num2name[232]="mincore" ++__syscall_64_num2name[232]="mincore" ++__syscall_64_name2num["mincore"]=232 ++__syscall_64_name2num["mincore"]=232 ++__syscall_64_num2name[34]="mkdirat" ++__syscall_64_num2name[34]="mkdirat" ++__syscall_64_name2num["mkdirat"]=34 ++__syscall_64_name2num["mkdirat"]=34 ++__syscall_64_num2name[33]="mknodat" ++__syscall_64_num2name[33]="mknodat" ++__syscall_64_name2num["mknodat"]=33 ++__syscall_64_name2num["mknodat"]=33 ++__syscall_64_num2name[228]="mlock" ++__syscall_64_num2name[228]="mlock" ++__syscall_64_num2name[284]="mlock2" ++__syscall_64_num2name[284]="mlock2" ++__syscall_64_name2num["mlock"]=228 ++__syscall_64_name2num["mlock"]=228 ++__syscall_64_name2num["mlock2"]=284 ++__syscall_64_name2num["mlock2"]=284 ++__syscall_64_num2name[230]="mlockall" ++__syscall_64_num2name[230]="mlockall" ++__syscall_64_name2num["mlockall"]=230 ++__syscall_64_name2num["mlockall"]=230 ++__syscall_64_num2name[222]="mmap" ++__syscall_64_num2name[222]="mmap" ++__syscall_64_name2num["mmap"]=222 ++__syscall_64_name2num["mmap"]=222 ++__syscall_64_num2name[40]="mount" ++__syscall_64_num2name[40]="mount" ++__syscall_64_name2num["mount"]=40 ++__syscall_64_name2num["mount"]=40 ++__syscall_64_num2name[0+442]="mount_setattr" ++__syscall_64_num2name[0+442]="mount_setattr" ++__syscall_64_name2num["mount_setattr"]=0+442 ++__syscall_64_name2num["mount_setattr"]=0+442 ++__syscall_64_num2name[0+429]="move_mount" ++__syscall_64_num2name[0+429]="move_mount" ++__syscall_64_name2num["move_mount"]=0+429 ++__syscall_64_name2num["move_mount"]=0+429 ++__syscall_64_num2name[239]="move_pages" ++__syscall_64_num2name[239]="move_pages" ++__syscall_64_name2num["move_pages"]=239 ++__syscall_64_name2num["move_pages"]=239 ++__syscall_64_num2name[226]="mprotect" ++__syscall_64_num2name[226]="mprotect" ++__syscall_64_name2num["mprotect"]=226 ++__syscall_64_name2num["mprotect"]=226 ++__syscall_64_num2name[185]="mq_getsetattr" ++__syscall_64_num2name[185]="mq_getsetattr" ++__syscall_64_name2num["mq_getsetattr"]=185 ++__syscall_64_name2num["mq_getsetattr"]=185 ++__syscall_64_num2name[184]="mq_notify" ++__syscall_64_num2name[184]="mq_notify" ++__syscall_64_name2num["mq_notify"]=184 ++__syscall_64_name2num["mq_notify"]=184 ++__syscall_64_num2name[180]="mq_open" ++__syscall_64_num2name[180]="mq_open" ++__syscall_64_name2num["mq_open"]=180 ++__syscall_64_name2num["mq_open"]=180 ++__syscall_64_num2name[183]="mq_timedreceive" ++__syscall_64_num2name[183]="mq_timedreceive" ++__syscall_64_name2num["mq_timedreceive"]=183 ++__syscall_64_name2num["mq_timedreceive"]=183 ++__syscall_64_num2name[182]="mq_timedsend" ++__syscall_64_num2name[182]="mq_timedsend" ++__syscall_64_name2num["mq_timedsend"]=182 ++__syscall_64_name2num["mq_timedsend"]=182 ++__syscall_64_num2name[181]="mq_unlink" ++__syscall_64_num2name[181]="mq_unlink" ++__syscall_64_name2num["mq_unlink"]=181 ++__syscall_64_name2num["mq_unlink"]=181 ++__syscall_64_num2name[216]="mremap" ++__syscall_64_num2name[216]="mremap" ++__syscall_64_name2num["mremap"]=216 ++__syscall_64_name2num["mremap"]=216 ++__syscall_64_num2name[0+462]="mseal" ++__syscall_64_num2name[0+462]="mseal" ++__syscall_64_name2num["mseal"]=0+462 ++__syscall_64_name2num["mseal"]=0+462 ++__syscall_64_num2name[187]="msgctl" ++__syscall_64_num2name[187]="msgctl" ++__syscall_64_name2num["msgctl"]=187 ++__syscall_64_name2num["msgctl"]=187 ++__syscall_64_num2name[186]="msgget" ++__syscall_64_num2name[186]="msgget" ++__syscall_64_name2num["msgget"]=186 ++__syscall_64_name2num["msgget"]=186 ++__syscall_64_num2name[188]="msgrcv" ++__syscall_64_num2name[188]="msgrcv" ++__syscall_64_name2num["msgrcv"]=188 ++__syscall_64_name2num["msgrcv"]=188 ++__syscall_64_num2name[189]="msgsnd" ++__syscall_64_num2name[189]="msgsnd" ++__syscall_64_name2num["msgsnd"]=189 ++__syscall_64_name2num["msgsnd"]=189 ++__syscall_64_num2name[227]="msync" ++__syscall_64_num2name[227]="msync" ++__syscall_64_name2num["msync"]=227 ++__syscall_64_name2num["msync"]=227 ++__syscall_64_num2name[229]="munlock" ++__syscall_64_num2name[229]="munlock" ++__syscall_64_name2num["munlock"]=229 ++__syscall_64_name2num["munlock"]=229 ++__syscall_64_num2name[231]="munlockall" ++__syscall_64_num2name[231]="munlockall" ++__syscall_64_name2num["munlockall"]=231 ++__syscall_64_name2num["munlockall"]=231 ++__syscall_64_num2name[215]="munmap" ++__syscall_64_num2name[215]="munmap" ++__syscall_64_name2num["munmap"]=215 ++__syscall_64_name2num["munmap"]=215 ++__syscall_64_num2name[264]="name_to_handle_at" ++__syscall_64_num2name[264]="name_to_handle_at" ++__syscall_64_name2num["name_to_handle_at"]=264 ++__syscall_64_name2num["name_to_handle_at"]=264 ++__syscall_64_num2name[101]="nanosleep" ++__syscall_64_num2name[101]="nanosleep" ++__syscall_64_name2num["nanosleep"]=101 ++__syscall_64_name2num["nanosleep"]=101 ++__syscall_64_num2name[79]="newfstatat" ++__syscall_64_num2name[79]="newfstatat" ++__syscall_64_name2num["newfstatat"]=79 ++__syscall_64_name2num["newfstatat"]=79 ++__syscall_64_num2name[42]="nfsservctl" ++__syscall_64_num2name[42]="nfsservctl" ++__syscall_64_name2num["nfsservctl"]=42 ++__syscall_64_name2num["nfsservctl"]=42 ++__syscall_64_num2name[56]="openat" ++__syscall_64_num2name[56]="openat" ++__syscall_64_num2name[0+437]="openat2" ++__syscall_64_num2name[0+437]="openat2" ++__syscall_64_name2num["openat2"]=0+437 ++__syscall_64_name2num["openat2"]=0+437 ++__syscall_64_name2num["openat"]=56 ++__syscall_64_name2num["openat"]=56 ++__syscall_64_num2name[265]="open_by_handle_at" ++__syscall_64_num2name[265]="open_by_handle_at" ++__syscall_64_name2num["open_by_handle_at"]=265 ++__syscall_64_name2num["open_by_handle_at"]=265 ++__syscall_64_num2name[0+428]="open_tree" ++__syscall_64_num2name[0+428]="open_tree" ++__syscall_64_name2num["open_tree"]=0+428 ++__syscall_64_name2num["open_tree"]=0+428 ++__syscall_64_num2name[241]="perf_event_open" ++__syscall_64_num2name[241]="perf_event_open" ++__syscall_64_name2num["perf_event_open"]=241 ++__syscall_64_name2num["perf_event_open"]=241 ++__syscall_64_num2name[92]="personality" ++__syscall_64_num2name[92]="personality" ++__syscall_64_name2num["personality"]=92 ++__syscall_64_name2num["personality"]=92 ++__syscall_64_num2name[0+438]="pidfd_getfd" ++__syscall_64_num2name[0+438]="pidfd_getfd" ++__syscall_64_name2num["pidfd_getfd"]=0+438 ++__syscall_64_name2num["pidfd_getfd"]=0+438 ++__syscall_64_num2name[0+434]="pidfd_open" ++__syscall_64_num2name[0+434]="pidfd_open" ++__syscall_64_name2num["pidfd_open"]=0+434 ++__syscall_64_name2num["pidfd_open"]=0+434 ++__syscall_64_num2name[0+424]="pidfd_send_signal" ++__syscall_64_num2name[0+424]="pidfd_send_signal" ++__syscall_64_name2num["pidfd_send_signal"]=0+424 ++__syscall_64_name2num["pidfd_send_signal"]=0+424 ++__syscall_64_num2name[59]="pipe2" ++__syscall_64_num2name[59]="pipe2" ++__syscall_64_name2num["pipe2"]=59 ++__syscall_64_name2num["pipe2"]=59 ++__syscall_64_num2name[41]="pivot_root" ++__syscall_64_num2name[41]="pivot_root" ++__syscall_64_name2num["pivot_root"]=41 ++__syscall_64_name2num["pivot_root"]=41 ++__syscall_64_num2name[289]="pkey_alloc" ++__syscall_64_num2name[289]="pkey_alloc" ++__syscall_64_name2num["pkey_alloc"]=289 ++__syscall_64_name2num["pkey_alloc"]=289 ++__syscall_64_num2name[290]="pkey_free" ++__syscall_64_num2name[290]="pkey_free" ++__syscall_64_name2num["pkey_free"]=290 ++__syscall_64_name2num["pkey_free"]=290 ++__syscall_64_num2name[288]="pkey_mprotect" ++__syscall_64_num2name[288]="pkey_mprotect" ++__syscall_64_name2num["pkey_mprotect"]=288 ++__syscall_64_name2num["pkey_mprotect"]=288 ++__syscall_64_num2name[73]="ppoll" ++__syscall_64_num2name[73]="ppoll" ++__syscall_64_name2num["ppoll"]=73 ++__syscall_64_name2num["ppoll"]=73 ++__syscall_64_num2name[167]="prctl" ++__syscall_64_num2name[167]="prctl" ++__syscall_64_name2num["prctl"]=167 ++__syscall_64_name2num["prctl"]=167 ++__syscall_64_num2name[67]="pread64" ++__syscall_64_num2name[67]="pread64" ++__syscall_64_name2num["pread64"]=67 ++__syscall_64_name2num["pread64"]=67 ++__syscall_64_num2name[69]="preadv" ++__syscall_64_num2name[69]="preadv" ++__syscall_64_num2name[286]="preadv2" ++__syscall_64_num2name[286]="preadv2" ++__syscall_64_name2num["preadv2"]=286 ++__syscall_64_name2num["preadv2"]=286 ++__syscall_64_name2num["preadv"]=69 ++__syscall_64_name2num["preadv"]=69 ++__syscall_64_num2name[261]="prlimit64" ++__syscall_64_num2name[261]="prlimit64" ++__syscall_64_name2num["prlimit64"]=261 ++__syscall_64_name2num["prlimit64"]=261 ++__syscall_64_num2name[0+440]="process_madvise" ++__syscall_64_num2name[0+440]="process_madvise" ++__syscall_64_name2num["process_madvise"]=0+440 ++__syscall_64_name2num["process_madvise"]=0+440 ++__syscall_64_num2name[0+448]="process_mrelease" ++__syscall_64_num2name[0+448]="process_mrelease" ++__syscall_64_name2num["process_mrelease"]=0+448 ++__syscall_64_name2num["process_mrelease"]=0+448 ++__syscall_64_num2name[270]="process_vm_readv" ++__syscall_64_num2name[270]="process_vm_readv" ++__syscall_64_name2num["process_vm_readv"]=270 ++__syscall_64_name2num["process_vm_readv"]=270 ++__syscall_64_num2name[271]="process_vm_writev" ++__syscall_64_num2name[271]="process_vm_writev" ++__syscall_64_name2num["process_vm_writev"]=271 ++__syscall_64_name2num["process_vm_writev"]=271 ++__syscall_64_num2name[72]="pselect6" ++__syscall_64_num2name[72]="pselect6" ++__syscall_64_name2num["pselect6"]=72 ++__syscall_64_name2num["pselect6"]=72 ++__syscall_64_num2name[117]="ptrace" ++__syscall_64_num2name[117]="ptrace" ++__syscall_64_name2num["ptrace"]=117 ++__syscall_64_name2num["ptrace"]=117 ++__syscall_64_num2name[68]="pwrite64" ++__syscall_64_num2name[68]="pwrite64" ++__syscall_64_name2num["pwrite64"]=68 ++__syscall_64_name2num["pwrite64"]=68 ++__syscall_64_num2name[70]="pwritev" ++__syscall_64_num2name[70]="pwritev" ++__syscall_64_num2name[287]="pwritev2" ++__syscall_64_num2name[287]="pwritev2" ++__syscall_64_name2num["pwritev2"]=287 ++__syscall_64_name2num["pwritev2"]=287 ++__syscall_64_name2num["pwritev"]=70 ++__syscall_64_name2num["pwritev"]=70 ++__syscall_64_num2name[60]="quotactl" ++__syscall_64_num2name[60]="quotactl" ++__syscall_64_name2num["quotactl"]=60 ++__syscall_64_name2num["quotactl"]=60 ++__syscall_64_num2name[0+443]="quotactl_fd" ++__syscall_64_num2name[0+443]="quotactl_fd" ++__syscall_64_name2num["quotactl_fd"]=0+443 ++__syscall_64_name2num["quotactl_fd"]=0+443 ++__syscall_64_num2name[63]="read" ++__syscall_64_num2name[63]="read" ++__syscall_64_name2num["read"]=63 ++__syscall_64_name2num["read"]=63 ++__syscall_64_num2name[213]="readahead" ++__syscall_64_num2name[213]="readahead" ++__syscall_64_name2num["readahead"]=213 ++__syscall_64_name2num["readahead"]=213 ++__syscall_64_num2name[78]="readlinkat" ++__syscall_64_num2name[78]="readlinkat" ++__syscall_64_name2num["readlinkat"]=78 ++__syscall_64_name2num["readlinkat"]=78 ++__syscall_64_num2name[65]="readv" ++__syscall_64_num2name[65]="readv" ++__syscall_64_name2num["readv"]=65 ++__syscall_64_name2num["readv"]=65 ++__syscall_64_num2name[142]="reboot" ++__syscall_64_num2name[142]="reboot" ++__syscall_64_name2num["reboot"]=142 ++__syscall_64_name2num["reboot"]=142 ++__syscall_64_num2name[207]="recvfrom" ++__syscall_64_num2name[207]="recvfrom" ++__syscall_64_name2num["recvfrom"]=207 ++__syscall_64_name2num["recvfrom"]=207 ++__syscall_64_num2name[243]="recvmmsg" ++__syscall_64_num2name[243]="recvmmsg" ++__syscall_64_name2num["recvmmsg"]=243 ++__syscall_64_name2num["recvmmsg"]=243 ++__syscall_64_num2name[212]="recvmsg" ++__syscall_64_num2name[212]="recvmsg" ++__syscall_64_name2num["recvmsg"]=212 ++__syscall_64_name2num["recvmsg"]=212 ++__syscall_64_num2name[234]="remap_file_pages" ++__syscall_64_num2name[234]="remap_file_pages" ++__syscall_64_name2num["remap_file_pages"]=234 ++__syscall_64_name2num["remap_file_pages"]=234 ++__syscall_64_num2name[14]="removexattr" ++__syscall_64_num2name[14]="removexattr" ++__syscall_64_name2num["removexattr"]=14 ++__syscall_64_name2num["removexattr"]=14 ++__syscall_64_num2name[38]="renameat" ++__syscall_64_num2name[38]="renameat" ++__syscall_64_num2name[276]="renameat2" ++__syscall_64_num2name[276]="renameat2" ++__syscall_64_name2num["renameat2"]=276 ++__syscall_64_name2num["renameat2"]=276 ++__syscall_64_name2num["renameat"]=38 ++__syscall_64_name2num["renameat"]=38 ++__syscall_64_num2name[218]="request_key" ++__syscall_64_num2name[218]="request_key" ++__syscall_64_name2num["request_key"]=218 ++__syscall_64_name2num["request_key"]=218 ++__syscall_64_num2name[128]="restart_syscall" ++__syscall_64_num2name[128]="restart_syscall" ++__syscall_64_name2num["restart_syscall"]=128 ++__syscall_64_name2num["restart_syscall"]=128 ++__syscall_64_num2name[293]="rseq" ++__syscall_64_num2name[293]="rseq" ++__syscall_64_name2num["rseq"]=293 ++__syscall_64_name2num["rseq"]=293 ++__syscall_64_num2name[134]="rt_sigaction" ++__syscall_64_num2name[134]="rt_sigaction" ++__syscall_64_name2num["rt_sigaction"]=134 ++__syscall_64_name2num["rt_sigaction"]=134 ++__syscall_64_num2name[136]="rt_sigpending" ++__syscall_64_num2name[136]="rt_sigpending" ++__syscall_64_name2num["rt_sigpending"]=136 ++__syscall_64_name2num["rt_sigpending"]=136 ++__syscall_64_num2name[135]="rt_sigprocmask" ++__syscall_64_num2name[135]="rt_sigprocmask" ++__syscall_64_name2num["rt_sigprocmask"]=135 ++__syscall_64_name2num["rt_sigprocmask"]=135 ++__syscall_64_num2name[138]="rt_sigqueueinfo" ++__syscall_64_num2name[138]="rt_sigqueueinfo" ++__syscall_64_name2num["rt_sigqueueinfo"]=138 ++__syscall_64_name2num["rt_sigqueueinfo"]=138 ++__syscall_64_num2name[139]="rt_sigreturn" ++__syscall_64_num2name[139]="rt_sigreturn" ++__syscall_64_name2num["rt_sigreturn"]=139 ++__syscall_64_name2num["rt_sigreturn"]=139 ++__syscall_64_num2name[133]="rt_sigsuspend" ++__syscall_64_num2name[133]="rt_sigsuspend" ++__syscall_64_name2num["rt_sigsuspend"]=133 ++__syscall_64_name2num["rt_sigsuspend"]=133 ++__syscall_64_num2name[137]="rt_sigtimedwait" ++__syscall_64_num2name[137]="rt_sigtimedwait" ++__syscall_64_name2num["rt_sigtimedwait"]=137 ++__syscall_64_name2num["rt_sigtimedwait"]=137 ++__syscall_64_num2name[240]="rt_tgsigqueueinfo" ++__syscall_64_num2name[240]="rt_tgsigqueueinfo" ++__syscall_64_name2num["rt_tgsigqueueinfo"]=240 ++__syscall_64_name2num["rt_tgsigqueueinfo"]=240 ++__syscall_64_num2name[123]="sched_getaffinity" ++__syscall_64_num2name[123]="sched_getaffinity" ++__syscall_64_name2num["sched_getaffinity"]=123 ++__syscall_64_name2num["sched_getaffinity"]=123 ++__syscall_64_num2name[275]="sched_getattr" ++__syscall_64_num2name[275]="sched_getattr" ++__syscall_64_name2num["sched_getattr"]=275 ++__syscall_64_name2num["sched_getattr"]=275 ++__syscall_64_num2name[121]="sched_getparam" ++__syscall_64_num2name[121]="sched_getparam" ++__syscall_64_name2num["sched_getparam"]=121 ++__syscall_64_name2num["sched_getparam"]=121 ++__syscall_64_num2name[125]="sched_get_priority_max" ++__syscall_64_num2name[125]="sched_get_priority_max" ++__syscall_64_name2num["sched_get_priority_max"]=125 ++__syscall_64_name2num["sched_get_priority_max"]=125 ++__syscall_64_num2name[126]="sched_get_priority_min" ++__syscall_64_num2name[126]="sched_get_priority_min" ++__syscall_64_name2num["sched_get_priority_min"]=126 ++__syscall_64_name2num["sched_get_priority_min"]=126 ++__syscall_64_num2name[120]="sched_getscheduler" ++__syscall_64_num2name[120]="sched_getscheduler" ++__syscall_64_name2num["sched_getscheduler"]=120 ++__syscall_64_name2num["sched_getscheduler"]=120 ++__syscall_64_num2name[127]="sched_rr_get_interval" ++__syscall_64_num2name[127]="sched_rr_get_interval" ++__syscall_64_name2num["sched_rr_get_interval"]=127 ++__syscall_64_name2num["sched_rr_get_interval"]=127 ++__syscall_64_num2name[122]="sched_setaffinity" ++__syscall_64_num2name[122]="sched_setaffinity" ++__syscall_64_name2num["sched_setaffinity"]=122 ++__syscall_64_name2num["sched_setaffinity"]=122 ++__syscall_64_num2name[274]="sched_setattr" ++__syscall_64_num2name[274]="sched_setattr" ++__syscall_64_name2num["sched_setattr"]=274 ++__syscall_64_name2num["sched_setattr"]=274 ++__syscall_64_num2name[118]="sched_setparam" ++__syscall_64_num2name[118]="sched_setparam" ++__syscall_64_name2num["sched_setparam"]=118 ++__syscall_64_name2num["sched_setparam"]=118 ++__syscall_64_num2name[119]="sched_setscheduler" ++__syscall_64_num2name[119]="sched_setscheduler" ++__syscall_64_name2num["sched_setscheduler"]=119 ++__syscall_64_name2num["sched_setscheduler"]=119 ++__syscall_64_num2name[124]="sched_yield" ++__syscall_64_num2name[124]="sched_yield" ++__syscall_64_name2num["sched_yield"]=124 ++__syscall_64_name2num["sched_yield"]=124 ++__syscall_64_num2name[277]="seccomp" ++__syscall_64_num2name[277]="seccomp" ++__syscall_64_name2num["seccomp"]=277 ++__syscall_64_name2num["seccomp"]=277 ++__syscall_64_num2name[191]="semctl" ++__syscall_64_num2name[191]="semctl" ++__syscall_64_name2num["semctl"]=191 ++__syscall_64_name2num["semctl"]=191 ++__syscall_64_num2name[190]="semget" ++__syscall_64_num2name[190]="semget" ++__syscall_64_name2num["semget"]=190 ++__syscall_64_name2num["semget"]=190 ++__syscall_64_num2name[193]="semop" ++__syscall_64_num2name[193]="semop" ++__syscall_64_name2num["semop"]=193 ++__syscall_64_name2num["semop"]=193 ++__syscall_64_num2name[192]="semtimedop" ++__syscall_64_num2name[192]="semtimedop" ++__syscall_64_name2num["semtimedop"]=192 ++__syscall_64_name2num["semtimedop"]=192 ++__syscall_64_num2name[71]="sendfile" ++__syscall_64_num2name[71]="sendfile" ++__syscall_64_name2num["sendfile"]=71 ++__syscall_64_name2num["sendfile"]=71 ++__syscall_64_num2name[269]="sendmmsg" ++__syscall_64_num2name[269]="sendmmsg" ++__syscall_64_name2num["sendmmsg"]=269 ++__syscall_64_name2num["sendmmsg"]=269 ++__syscall_64_num2name[211]="sendmsg" ++__syscall_64_num2name[211]="sendmsg" ++__syscall_64_name2num["sendmsg"]=211 ++__syscall_64_name2num["sendmsg"]=211 ++__syscall_64_num2name[206]="sendto" ++__syscall_64_num2name[206]="sendto" ++__syscall_64_name2num["sendto"]=206 ++__syscall_64_name2num["sendto"]=206 ++__syscall_64_num2name[162]="setdomainname" ++__syscall_64_num2name[162]="setdomainname" ++__syscall_64_name2num["setdomainname"]=162 ++__syscall_64_name2num["setdomainname"]=162 ++__syscall_64_num2name[152]="setfsgid" ++__syscall_64_num2name[152]="setfsgid" ++__syscall_64_name2num["setfsgid"]=152 ++__syscall_64_name2num["setfsgid"]=152 ++__syscall_64_num2name[151]="setfsuid" ++__syscall_64_num2name[151]="setfsuid" ++__syscall_64_name2num["setfsuid"]=151 ++__syscall_64_name2num["setfsuid"]=151 ++__syscall_64_num2name[144]="setgid" ++__syscall_64_num2name[144]="setgid" ++__syscall_64_name2num["setgid"]=144 ++__syscall_64_name2num["setgid"]=144 ++__syscall_64_num2name[159]="setgroups" ++__syscall_64_num2name[159]="setgroups" ++__syscall_64_name2num["setgroups"]=159 ++__syscall_64_name2num["setgroups"]=159 ++__syscall_64_num2name[161]="sethostname" ++__syscall_64_num2name[161]="sethostname" ++__syscall_64_name2num["sethostname"]=161 ++__syscall_64_name2num["sethostname"]=161 ++__syscall_64_num2name[103]="setitimer" ++__syscall_64_num2name[103]="setitimer" ++__syscall_64_name2num["setitimer"]=103 ++__syscall_64_name2num["setitimer"]=103 ++__syscall_64_num2name[237]="set_mempolicy" ++__syscall_64_num2name[237]="set_mempolicy" ++__syscall_64_name2num["set_mempolicy"]=237 ++__syscall_64_name2num["set_mempolicy"]=237 ++__syscall_64_num2name[0+450]="set_mempolicy_home_node" ++__syscall_64_num2name[0+450]="set_mempolicy_home_node" ++__syscall_64_name2num["set_mempolicy_home_node"]=0+450 ++__syscall_64_name2num["set_mempolicy_home_node"]=0+450 ++__syscall_64_num2name[268]="setns" ++__syscall_64_num2name[268]="setns" ++__syscall_64_name2num["setns"]=268 ++__syscall_64_name2num["setns"]=268 ++__syscall_64_num2name[154]="setpgid" ++__syscall_64_num2name[154]="setpgid" ++__syscall_64_name2num["setpgid"]=154 ++__syscall_64_name2num["setpgid"]=154 ++__syscall_64_num2name[140]="setpriority" ++__syscall_64_num2name[140]="setpriority" ++__syscall_64_name2num["setpriority"]=140 ++__syscall_64_name2num["setpriority"]=140 ++__syscall_64_num2name[143]="setregid" ++__syscall_64_num2name[143]="setregid" ++__syscall_64_name2num["setregid"]=143 ++__syscall_64_name2num["setregid"]=143 ++__syscall_64_num2name[149]="setresgid" ++__syscall_64_num2name[149]="setresgid" ++__syscall_64_name2num["setresgid"]=149 ++__syscall_64_name2num["setresgid"]=149 ++__syscall_64_num2name[147]="setresuid" ++__syscall_64_num2name[147]="setresuid" ++__syscall_64_name2num["setresuid"]=147 ++__syscall_64_name2num["setresuid"]=147 ++__syscall_64_num2name[145]="setreuid" ++__syscall_64_num2name[145]="setreuid" ++__syscall_64_name2num["setreuid"]=145 ++__syscall_64_name2num["setreuid"]=145 ++__syscall_64_num2name[164]="setrlimit" ++__syscall_64_num2name[164]="setrlimit" ++__syscall_64_name2num["setrlimit"]=164 ++__syscall_64_name2num["setrlimit"]=164 ++__syscall_64_num2name[99]="set_robust_list" ++__syscall_64_num2name[99]="set_robust_list" ++__syscall_64_name2num["set_robust_list"]=99 ++__syscall_64_name2num["set_robust_list"]=99 ++__syscall_64_num2name[157]="setsid" ++__syscall_64_num2name[157]="setsid" ++__syscall_64_name2num["setsid"]=157 ++__syscall_64_name2num["setsid"]=157 ++__syscall_64_num2name[208]="setsockopt" ++__syscall_64_num2name[208]="setsockopt" ++__syscall_64_name2num["setsockopt"]=208 ++__syscall_64_name2num["setsockopt"]=208 ++__syscall_64_num2name[96]="set_tid_address" ++__syscall_64_num2name[96]="set_tid_address" ++__syscall_64_name2num["set_tid_address"]=96 ++__syscall_64_name2num["set_tid_address"]=96 ++__syscall_64_num2name[170]="settimeofday" ++__syscall_64_num2name[170]="settimeofday" ++__syscall_64_name2num["settimeofday"]=170 ++__syscall_64_name2num["settimeofday"]=170 ++__syscall_64_num2name[146]="setuid" ++__syscall_64_num2name[146]="setuid" ++__syscall_64_name2num["setuid"]=146 ++__syscall_64_name2num["setuid"]=146 ++__syscall_64_num2name[5]="setxattr" ++__syscall_64_num2name[5]="setxattr" ++__syscall_64_name2num["setxattr"]=5 ++__syscall_64_name2num["setxattr"]=5 ++__syscall_64_num2name[196]="shmat" ++__syscall_64_num2name[196]="shmat" ++__syscall_64_name2num["shmat"]=196 ++__syscall_64_name2num["shmat"]=196 ++__syscall_64_num2name[195]="shmctl" ++__syscall_64_num2name[195]="shmctl" ++__syscall_64_name2num["shmctl"]=195 ++__syscall_64_name2num["shmctl"]=195 ++__syscall_64_num2name[197]="shmdt" ++__syscall_64_num2name[197]="shmdt" ++__syscall_64_name2num["shmdt"]=197 ++__syscall_64_name2num["shmdt"]=197 ++__syscall_64_num2name[194]="shmget" ++__syscall_64_num2name[194]="shmget" ++__syscall_64_name2num["shmget"]=194 ++__syscall_64_name2num["shmget"]=194 ++__syscall_64_num2name[210]="shutdown" ++__syscall_64_num2name[210]="shutdown" ++__syscall_64_name2num["shutdown"]=210 ++__syscall_64_name2num["shutdown"]=210 ++__syscall_64_num2name[132]="sigaltstack" ++__syscall_64_num2name[132]="sigaltstack" ++__syscall_64_name2num["sigaltstack"]=132 ++__syscall_64_name2num["sigaltstack"]=132 ++__syscall_64_num2name[74]="signalfd4" ++__syscall_64_num2name[74]="signalfd4" ++__syscall_64_name2num["signalfd4"]=74 ++__syscall_64_name2num["signalfd4"]=74 ++__syscall_64_num2name[198]="socket" ++__syscall_64_num2name[198]="socket" ++__syscall_64_name2num["socket"]=198 ++__syscall_64_name2num["socket"]=198 ++__syscall_64_num2name[199]="socketpair" ++__syscall_64_num2name[199]="socketpair" ++__syscall_64_name2num["socketpair"]=199 ++__syscall_64_name2num["socketpair"]=199 ++__syscall_64_num2name[76]="splice" ++__syscall_64_num2name[76]="splice" ++__syscall_64_name2num["splice"]=76 ++__syscall_64_name2num["splice"]=76 ++__syscall_64_num2name[43]="statfs" ++__syscall_64_num2name[43]="statfs" ++__syscall_64_name2num["statfs"]=43 ++__syscall_64_name2num["statfs"]=43 ++__syscall_64_num2name[0+457]="statmount" ++__syscall_64_num2name[0+457]="statmount" ++__syscall_64_name2num["statmount"]=0+457 ++__syscall_64_name2num["statmount"]=0+457 ++__syscall_64_num2name[291]="statx" ++__syscall_64_num2name[291]="statx" ++__syscall_64_name2num["statx"]=291 ++__syscall_64_name2num["statx"]=291 ++__syscall_64_num2name[225]="swapoff" ++__syscall_64_num2name[225]="swapoff" ++__syscall_64_name2num["swapoff"]=225 ++__syscall_64_name2num["swapoff"]=225 ++__syscall_64_num2name[224]="swapon" ++__syscall_64_num2name[224]="swapon" ++__syscall_64_name2num["swapon"]=224 ++__syscall_64_name2num["swapon"]=224 ++__syscall_64_num2name[36]="symlinkat" ++__syscall_64_num2name[36]="symlinkat" ++__syscall_64_name2num["symlinkat"]=36 ++__syscall_64_name2num["symlinkat"]=36 ++__syscall_64_num2name[81]="sync" ++__syscall_64_num2name[81]="sync" ++__syscall_64_name2num["sync"]=81 ++__syscall_64_name2num["sync"]=81 ++__syscall_64_num2name[84]="sync_file_range" ++__syscall_64_num2name[84]="sync_file_range" ++__syscall_64_name2num["sync_file_range"]=84 ++__syscall_64_name2num["sync_file_range"]=84 ++__syscall_64_num2name[267]="syncfs" ++__syscall_64_num2name[267]="syncfs" ++__syscall_64_name2num["syncfs"]=267 ++__syscall_64_name2num["syncfs"]=267 ++__syscall_64_num2name[179]="sysinfo" ++__syscall_64_num2name[179]="sysinfo" ++__syscall_64_name2num["sysinfo"]=179 ++__syscall_64_name2num["sysinfo"]=179 ++__syscall_64_num2name[116]="syslog" ++__syscall_64_num2name[116]="syslog" ++__syscall_64_name2num["syslog"]=116 ++__syscall_64_name2num["syslog"]=116 ++__syscall_64_num2name[77]="tee" ++__syscall_64_num2name[77]="tee" ++__syscall_64_name2num["tee"]=77 ++__syscall_64_name2num["tee"]=77 ++__syscall_64_num2name[131]="tgkill" ++__syscall_64_num2name[131]="tgkill" ++__syscall_64_name2num["tgkill"]=131 ++__syscall_64_name2num["tgkill"]=131 ++__syscall_64_num2name[107]="timer_create" ++__syscall_64_num2name[107]="timer_create" ++__syscall_64_name2num["timer_create"]=107 ++__syscall_64_name2num["timer_create"]=107 ++__syscall_64_num2name[111]="timer_delete" ++__syscall_64_num2name[111]="timer_delete" ++__syscall_64_name2num["timer_delete"]=111 ++__syscall_64_name2num["timer_delete"]=111 ++__syscall_64_num2name[85]="timerfd_create" ++__syscall_64_num2name[85]="timerfd_create" ++__syscall_64_name2num["timerfd_create"]=85 ++__syscall_64_name2num["timerfd_create"]=85 ++__syscall_64_num2name[87]="timerfd_gettime" ++__syscall_64_num2name[87]="timerfd_gettime" ++__syscall_64_name2num["timerfd_gettime"]=87 ++__syscall_64_name2num["timerfd_gettime"]=87 ++__syscall_64_num2name[86]="timerfd_settime" ++__syscall_64_num2name[86]="timerfd_settime" ++__syscall_64_name2num["timerfd_settime"]=86 ++__syscall_64_name2num["timerfd_settime"]=86 ++__syscall_64_num2name[109]="timer_getoverrun" ++__syscall_64_num2name[109]="timer_getoverrun" ++__syscall_64_name2num["timer_getoverrun"]=109 ++__syscall_64_name2num["timer_getoverrun"]=109 ++__syscall_64_num2name[108]="timer_gettime" ++__syscall_64_num2name[108]="timer_gettime" ++__syscall_64_name2num["timer_gettime"]=108 ++__syscall_64_name2num["timer_gettime"]=108 ++__syscall_64_num2name[110]="timer_settime" ++__syscall_64_num2name[110]="timer_settime" ++__syscall_64_name2num["timer_settime"]=110 ++__syscall_64_name2num["timer_settime"]=110 ++__syscall_64_num2name[153]="times" ++__syscall_64_num2name[153]="times" ++__syscall_64_name2num["times"]=153 ++__syscall_64_name2num["times"]=153 ++__syscall_64_num2name[130]="tkill" ++__syscall_64_num2name[130]="tkill" ++__syscall_64_name2num["tkill"]=130 ++__syscall_64_name2num["tkill"]=130 ++__syscall_64_num2name[45]="truncate" ++__syscall_64_num2name[45]="truncate" ++__syscall_64_name2num["truncate"]=45 ++__syscall_64_name2num["truncate"]=45 ++__syscall_64_num2name[166]="umask" ++__syscall_64_num2name[166]="umask" ++__syscall_64_name2num["umask"]=166 ++__syscall_64_name2num["umask"]=166 ++__syscall_64_num2name[39]="umount2" ++__syscall_64_num2name[39]="umount2" ++__syscall_64_name2num["umount2"]=39 ++__syscall_64_name2num["umount2"]=39 ++__syscall_64_num2name[160]="uname" ++__syscall_64_num2name[160]="uname" ++__syscall_64_name2num["uname"]=160 ++__syscall_64_name2num["uname"]=160 ++__syscall_64_num2name[35]="unlinkat" ++__syscall_64_num2name[35]="unlinkat" ++__syscall_64_name2num["unlinkat"]=35 ++__syscall_64_name2num["unlinkat"]=35 ++__syscall_64_num2name[97]="unshare" ++__syscall_64_num2name[97]="unshare" ++__syscall_64_name2num["unshare"]=97 ++__syscall_64_name2num["unshare"]=97 ++__syscall_64_num2name[282]="userfaultfd" ++__syscall_64_num2name[282]="userfaultfd" ++__syscall_64_name2num["userfaultfd"]=282 ++__syscall_64_name2num["userfaultfd"]=282 ++__syscall_64_num2name[88]="utimensat" ++__syscall_64_num2name[88]="utimensat" ++__syscall_64_name2num["utimensat"]=88 ++__syscall_64_name2num["utimensat"]=88 ++__syscall_64_num2name[58]="vhangup" ++__syscall_64_num2name[58]="vhangup" ++__syscall_64_name2num["vhangup"]=58 ++__syscall_64_name2num["vhangup"]=58 ++__syscall_64_num2name[75]="vmsplice" ++__syscall_64_num2name[75]="vmsplice" ++__syscall_64_name2num["vmsplice"]=75 ++__syscall_64_name2num["vmsplice"]=75 ++__syscall_64_num2name[260]="wait4" ++__syscall_64_num2name[260]="wait4" ++__syscall_64_name2num["wait4"]=260 ++__syscall_64_name2num["wait4"]=260 ++__syscall_64_num2name[95]="waitid" ++__syscall_64_num2name[95]="waitid" ++__syscall_64_name2num["waitid"]=95 ++__syscall_64_name2num["waitid"]=95 ++__syscall_64_num2name[64]="write" ++__syscall_64_num2name[64]="write" ++__syscall_64_name2num["write"]=64 ++__syscall_64_name2num["write"]=64 ++__syscall_64_num2name[66]="writev" ++__syscall_64_num2name[66]="writev" ++__syscall_64_name2num["writev"]=66 ++__syscall_64_name2num["writev"]=66 ++%) ++} /* probe init */ +\ No newline at end of file +diff --git a/tapset/linux/syscalls.stpm b/tapset/linux/syscalls.stpm +index 9f14a99..3c79bc8 100644 +--- a/tapset/linux/syscalls.stpm ++++ b/tapset/linux/syscalls.stpm +@@ -402,7 +402,7 @@ + @define SYSC_CLONE_CHILD_TID_UADDR_ARGNO %( 5 %) + %) + +-%( arch == "i386" || arch == "arm" || arch == "powerpc" || arch == "mips" || arch == "riscv" %? ++%( arch == "i386" || arch == "arm" || arch == "powerpc" || arch == "mips" || arch == "riscv" || arch == "loongarch64" %? + @define arch_syscall_prefix %( "" %) + @define arch_syscall0_prefix %( "" %) + @define SYSC_CLONE_CLONE_FLAGS_ARGNO %( 1 %) +diff --git a/tapsets.cxx b/tapsets.cxx +index 49a0d1d..404a64c 100644 +--- a/tapsets.cxx ++++ b/tapsets.cxx +@@ -2582,6 +2582,7 @@ validate_module_elf (systemtap_session& sess, + case EM_AARCH64: expect_machine = "arm64"; break; + case EM_MIPS: expect_machine = "mips"; break; + case EM_RISCV: expect_machine = "riscv"; break; ++ case EM_LOONGARCH: expect_machine = "loongarch64"; break; + // XXX: fill in some more of these + default: expect_machine = "?"; break; + } +@@ -6961,6 +6962,43 @@ sdt_uprobe_var_expanding_visitor::build_dwarf_registers () + DRI ("$29", 29, mips_reg_width); + DRI ("$30", 30, mips_reg_width); + DRI ("$31", 31, mips_reg_width); ++ } else if (elf_machine == EM_LOONGARCH) { ++ Dwarf_Addr bias; ++ Elf* elf = (dwfl_module_getelf (dw.mod_info->mod, &bias)); ++ enum regwidths loongarch_reg_width = ++ (gelf_getclass (elf) == ELFCLASS32) ? SI : DI; // 32-bit: SI 64-bit: DI ++ DRI ("$r0", 0, loongarch_reg_width); DRI ("$zero", 0, loongarch_reg_width); ++ DRI ("$r1", 1, loongarch_reg_width); DRI ("$ra", 1, loongarch_reg_width); ++ DRI ("$r2", 2, loongarch_reg_width); DRI ("$tp", 2, loongarch_reg_width); ++ DRI ("$r3", 3, loongarch_reg_width); DRI ("$sp", 3, loongarch_reg_width); ++ DRI ("$r4", 4, loongarch_reg_width); DRI ("$a0", 4, loongarch_reg_width); DRI ("$v0", 4, loongarch_reg_width); ++ DRI ("$r5", 5, loongarch_reg_width); DRI ("$a1", 5, loongarch_reg_width); DRI ("$v1", 5, loongarch_reg_width); ++ DRI ("$r6", 6, loongarch_reg_width); DRI ("$a2", 6, loongarch_reg_width); ++ DRI ("$r7", 7, loongarch_reg_width); DRI ("$a3", 7, loongarch_reg_width); ++ DRI ("$r8", 8, loongarch_reg_width); DRI ("$a4", 8, loongarch_reg_width); ++ DRI ("$r9", 9, loongarch_reg_width); DRI ("$a5", 9, loongarch_reg_width); ++ DRI ("$r10", 10, loongarch_reg_width); DRI ("$a6", 10, loongarch_reg_width); ++ DRI ("$r11", 11, loongarch_reg_width); DRI ("$a7", 11, loongarch_reg_width); ++ DRI ("$r12", 12, loongarch_reg_width); DRI ("$t0", 12, loongarch_reg_width); ++ DRI ("$r13", 13, loongarch_reg_width); DRI ("$t1", 13, loongarch_reg_width); ++ DRI ("$r14", 14, loongarch_reg_width); DRI ("$t2", 14, loongarch_reg_width); ++ DRI ("$r15", 15, loongarch_reg_width); DRI ("$t3", 15, loongarch_reg_width); ++ DRI ("$r16", 16, loongarch_reg_width); DRI ("$t4", 16, loongarch_reg_width); ++ DRI ("$r17", 17, loongarch_reg_width); DRI ("$t5", 17, loongarch_reg_width); ++ DRI ("$r18", 18, loongarch_reg_width); DRI ("$t6", 18, loongarch_reg_width); ++ DRI ("$r19", 19, loongarch_reg_width); DRI ("$t7", 19, loongarch_reg_width); ++ DRI ("$r20", 20, loongarch_reg_width); DRI ("$t8", 20, loongarch_reg_width); ++ DRI ("$r21", 21, loongarch_reg_width); DRI ("$x", 21, loongarch_reg_width); ++ DRI ("$r22", 22, loongarch_reg_width); DRI ("$fp", 22, loongarch_reg_width); ++ DRI ("$r23", 23, loongarch_reg_width); DRI ("$s0", 23, loongarch_reg_width); ++ DRI ("$r24", 24, loongarch_reg_width); DRI ("$s1", 24, loongarch_reg_width); ++ DRI ("$r25", 25, loongarch_reg_width); DRI ("$s2", 25, loongarch_reg_width); ++ DRI ("$r26", 26, loongarch_reg_width); DRI ("$s3", 26, loongarch_reg_width); ++ DRI ("$r27", 27, loongarch_reg_width); DRI ("$s4", 27, loongarch_reg_width); ++ DRI ("$r28", 28, loongarch_reg_width); DRI ("$s5", 28, loongarch_reg_width); ++ DRI ("$r29", 29, loongarch_reg_width); DRI ("$s6", 29, loongarch_reg_width); ++ DRI ("$r30", 30, loongarch_reg_width); DRI ("$s7", 30, loongarch_reg_width); ++ DRI ("$r31", 31, loongarch_reg_width); DRI ("$s8", 31, loongarch_reg_width); + } else if (arg_count) { + /* permit this case; just fall back to dwarf */ + } +@@ -7134,7 +7172,7 @@ sdt_uprobe_var_expanding_visitor::try_parse_arg_literal (target_symbol *e, + vector<string> matches; + string regexp; + +- if (elf_machine == EM_AARCH64 || elf_machine == EM_MIPS) { ++ if (elf_machine == EM_AARCH64 || elf_machine == EM_MIPS || elf_machine == EM_LOONGARCH) { + regexp = "^([-]?[0-9][0-9]*)$"; + } else { + regexp = "^[i\\$#]([-]?[0-9][0-9]*)$"; +diff --git a/testsuite/lib/compile_flags.exp b/testsuite/lib/compile_flags.exp +index a84e7ca..06864df 100644 +--- a/testsuite/lib/compile_flags.exp ++++ b/testsuite/lib/compile_flags.exp +@@ -59,7 +59,11 @@ proc arch_compile_init {} { + } + + puts "Checking for $compat_arch_bits-bit support..." +- set flags "additional_flags=-g compiler=gcc additional_flags=-m$compat_arch_bits" ++ set flags "additional_flags=-g compiler=gcc " ++# GCC on loongarch64 doesn't recognize -m64 ++ if { ![regexp "^(loongarch64)$" $::tcl_platform(machine)] } { ++ set flags "$flags additional_flags=-m$compat_arch_bits" ++ } + set exe "hello-m$compat_arch_bits" + set result [target_compile $source $exe executable $flags] + if { $result != "" } { +@@ -109,6 +113,7 @@ proc arch_compile_flag_name { INDEX } { + {^(ia64|aarch64|ppc64le|ppc64)$} { return "m64" } + {^s390$} { return "m31" } + {^mips64$} { return "64" } ++ {^loongarch64$} { return "lp64d" } + default { return "m32" } + } + } +@@ -135,7 +140,7 @@ proc arch_compile_flag_bits { INDEX } { + # Notice that even though s390/s390x is 31 bits, we'll call it 32. + if { [arch_compile_flags] == 1 } { + switch -regexp $::tcl_platform(machine) { +- {^(ia64|aarch64|ppc64le|ppc64|mips64|s390x)$} { return 64 } ++ {^(ia64|aarch64|ppc64le|ppc64|mips64|s390x|loongarch64)$} { return 64 } + default { return 32 } + } + } +diff --git a/testsuite/lib/systemtap.exp b/testsuite/lib/systemtap.exp +index dcf5ee7..5463d5a 100644 +--- a/testsuite/lib/systemtap.exp ++++ b/testsuite/lib/systemtap.exp +@@ -85,7 +85,7 @@ proc uretprobes_p {} { + proc plt_probes_p {} { + # .plt probes need uprobes and a supported arch (x86 and arm) + return [expr [uprobes_p] \ +- && [regexp "^(x86_64|i.86|arm.*|aarch64)$" $::tcl_platform(machine)] ] ++ && [regexp "^(x86_64|i.86|arm.*|aarch64|loongarch64)$" $::tcl_platform(machine)] ] + } + + proc perf_probes_p {} { +@@ -570,6 +570,7 @@ proc normalize_arch { arch } { + if {$arch == "armv7l"} then {return "arm"} + if {$arch == "armv7lh"} then {return "arm"} + if {$arch == "aarch64"} then {return "arm64"} ++ if {$arch == "loongarch64"} then {return "loongarch64"} + if {$arch == "ppc64le"} then {return "powerpc"} + if {$arch == "mips64"} then {return "mips"} + return $arch +diff --git a/testsuite/systemtap.syscall/clone.c b/testsuite/systemtap.syscall/clone.c +index f1335ce..942d104 100644 +--- a/testsuite/systemtap.syscall/clone.c ++++ b/testsuite/systemtap.syscall/clone.c +@@ -61,7 +61,7 @@ __sys_clone2(int flags, void *ustack_base, size_t ustack_size, + #endif + #if defined(__powerpc__) || defined(__powerpc64__) \ + || defined(__arm__) || defined(__aarch64__) \ +- || defined(__i386__) ++ || defined(__i386__) || defined(__loongarch64) + #define CLONE_BACKWARDS + #endif + +diff --git a/translate.cxx b/translate.cxx +index 0a3b58a..90c3f1f 100644 +--- a/translate.cxx ++++ b/translate.cxx +@@ -8482,7 +8482,8 @@ translate_pass (systemtap_session& s) + + s.op->hdr->newline() << "#if (defined(__arm__) || defined(__i386__) " + "|| defined(__x86_64__) || defined(__powerpc64__)) " +- "|| defined (__s390x__) || defined(__aarch64__) || defined(__mips__)\n" ++ "|| defined (__s390x__) || defined(__aarch64__) || defined(__mips__) " ++ "|| defined(__loongarch64)\n" + "#ifdef STP_NEED_UNWIND_DATA\n" + "#ifndef STP_USE_DWARF_UNWINDER\n" + "#define STP_USE_DWARF_UNWINDER\n" +diff --git a/util.cxx b/util.cxx +index f2eaf54..24d3215 100644 +--- a/util.cxx ++++ b/util.cxx +@@ -1400,6 +1400,7 @@ normalize_machine(const string& machine) + else if (machine == "s390x") return "s390"; + else if (machine == "aarch64") return "arm64"; + else if (machine == "riscv64") return "riscv"; ++ else if (machine == "loongarch64") return "loongarch64"; + else if (machine.substr(0,3) == "ppc") return "powerpc"; + else if (machine.substr(0,4) == "mips") return "mips"; + else if (machine.substr(0,3) == "sh2") return "sh"; +@@ -1421,6 +1422,7 @@ elf_class_from_normalized_machine (const string &machine) + || machine == "powerpc" // see normalize_machine (). + || machine == "x86_64" + || machine == "ia64" ++ || machine == "loongarch64" + || machine == "arm64") + return ELFCLASS64; + +-- +2.33.0 + diff --git a/huawei-fix-network-tcp-test-error.patch b/huawei-fix-network-tcp-test-error.patch new file mode 100644 index 0000000..44be8c4 --- /dev/null +++ b/huawei-fix-network-tcp-test-error.patch @@ -0,0 +1,63 @@ +From 5d0424e51857d5f706e78d6d962f380fa70f49f0 Mon Sep 17 00:00:00 2001 +From: langfei <langfei@huawei.com> +Date: Wed, 5 Jul 2023 10:27:11 +0800 +Subject: [PATCH] fix network tcp test error + +Signed-off-by: langfei <langfei@huawei.com> +--- + tapset/linux/ipmib.stp | 4 ++-- + tapset/linux/linuxmib.stp | 2 +- + testsuite/systemtap.examples/network/tcp_trace.stp | 2 +- + 3 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/tapset/linux/ipmib.stp b/tapset/linux/ipmib.stp +index 6f51dfd..603c5d4 100644 +--- a/tapset/linux/ipmib.stp ++++ b/tapset/linux/ipmib.stp +@@ -271,7 +271,7 @@ probe ipmib.InAddrErrors=kernel.function("ip_route_input_noref").return!, + * IPSTATS_MIB_INUNKNOWNPROTOS) + */ + /* icmp_send() is called by ip_local_deliver_finish() */ +-probe ipmib.InUnknownProtos=kernel.function("icmp_send") ++probe ipmib.InUnknownProtos=kernel.function("__icmp_send") + { + skb = $skb_in; + op = 1; +@@ -360,7 +360,7 @@ probe ipmib.OutRequests=kernel.function("ip_output"), + * counted in the global @ReasmTimeout (equivalent to SNMP's MIB + * IPSTATS_MIB_REASMTIMEOUT) + */ +-probe ipmib.ReasmTimeout=kernel.function("icmp_send") ++probe ipmib.ReasmTimeout=kernel.function("__icmp_send") + { + skb = $skb_in; + op = 0; +diff --git a/tapset/linux/linuxmib.stp b/tapset/linux/linuxmib.stp +index 63ec248..cb92875 100644 +--- a/tapset/linux/linuxmib.stp ++++ b/tapset/linux/linuxmib.stp +@@ -30,7 +30,7 @@ probe linuxmib.DelayedACKs = _linuxmib.DelayedACKs.* {} + + probe _linuxmib.DelayedACKs.A = kernel.function("tcp_send_ack") + { +- sk=$sk ++ sk=pointer_arg(1) + if ( !indelack_timer[sk] ) next + op=1 + key = linuxmib_filter_key(sk,op); +diff --git a/testsuite/systemtap.examples/network/tcp_trace.stp b/testsuite/systemtap.examples/network/tcp_trace.stp +index 65a32f2..98c77c0 100755 +--- a/testsuite/systemtap.examples/network/tcp_trace.stp ++++ b/testsuite/systemtap.examples/network/tcp_trace.stp +@@ -192,7 +192,7 @@ probe kernel.{function("tcp_rcv_established"), + } + } + +-probe kernel.function("tcp_transmit_skb") ++probe kernel.function("__tcp_transmit_skb") + { + sk = $sk + key = filter_key(sk) +-- +2.33.0 + diff --git a/huawei-local-is-only-valid-in-functions-for-shellche-sc2168.patch b/huawei-local-is-only-valid-in-functions-for-shellche-sc2168.patch new file mode 100644 index 0000000..c50837f --- /dev/null +++ b/huawei-local-is-only-valid-in-functions-for-shellche-sc2168.patch @@ -0,0 +1,26 @@ +From cea3c6a744e5f0d2017e5cc11033b8d226b482f9 Mon Sep 17 00:00:00 2001 +From: langfei <langfei@huawei.com> +Date: Wed, 5 Jul 2023 10:45:23 +0800 +Subject: [PATCH] local is only valid in functions for shellcheck sc2168 + +Signed-off-by: langfei <langfei@huawei.com> +--- + doc/Tapset_Reference_Guide/publicanize.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/doc/Tapset_Reference_Guide/publicanize.sh b/doc/Tapset_Reference_Guide/publicanize.sh +index 330409e..97254fe 100755 +--- a/doc/Tapset_Reference_Guide/publicanize.sh ++++ b/doc/Tapset_Reference_Guide/publicanize.sh +@@ -22,7 +22,7 @@ do + val=`printf %s $1 | awk -F= '{print $2}'` + shift + if test -z "$val"; then +- local possibleval=$1 ++ possibleval=$1 + printf %s $1 "$possibleval" | grep ^- >/dev/null 2>&1 + if test "$?" != "0"; then + val=$possibleval +-- +2.33.0 + @@ -0,0 +1 @@ +d4f8d8f2ed09031a9a284e894c95103e systemtap-5.1.tar.gz diff --git a/systemtap.spec b/systemtap.spec new file mode 100644 index 0000000..cc9d299 --- /dev/null +++ b/systemtap.spec @@ -0,0 +1,546 @@ +%ifarch x86_64 +%{!?with_crash: %global with_crash 1} +%{!?with_dyninst: %global with_dyninst 1} +%{!?with_mokutil: %global with_mokutil 1} +%{!?with_openssl: %global with_openssl 1} +%global crash_config --enable-crash +%global dyninst_config --with-dyninst +%else +%{!?with_crash: %global with_crash 0} +%{!?with_dyninst: %global with_dyninst 0} +%{!?with_mokutil: %global with_mokutil 0} +%{!?with_openssl: %global with_openssl 0} +%global crash_config --disable-crash +%global dyninst_config --without-dyninst +%endif + +%define udevrulesdir /usr/lib/udev/rules.d +%define dracutstap %{_prefix}/lib/dracut/modules.d/99stap +%define dracutbindir /sbin +%{!?_rpmmacrodir: %define _rpmmacrodir %{_rpmconfigdir}/macros.d} +%undefine __brp_mangle_shebangs + +Name: systemtap +Version: 5.1 +Release: 1 +Summary: Linux trace and probe tool +License: GPL-2.0-or-later and Public Domain +URL: https://sourceware.org/systemtap +Source: https://sourceware.org/systemtap/ftp/releases/%{name}-%{version}.tar.gz + +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 + +BuildRequires: gcc-c++ emacs systemd python3-setuptools +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 elfutils-debuginfod-client elfutils-debuginfod-client-devel +BuildRequires: sqlite-devel > 3.7 +%if %{with_dyninst} +BuildRequires: dyninst-devel >= 8.0 +BuildRequires: pkgconfig(libselinux) +%endif +%if %{with_crash} +BuildRequires: crash-devel zlib-devel +%endif + +Requires: systemtap-client = %{version}-%{release} + +%description +SystemTap is an instrumentation system for systems running Linux. +Developers can write instrumentation scripts to collect data on +the operation of the system. The base systemtap package contains/requires +the components needed to locally develop and execute systemtap scripts. + +%package devel +Summary: Programmable system-wide instrumentation system - development headers, tools +License: GPL-2.0-or-later +Requires: make kernel-devel systemd +Requires: systemtap-translations = %{version}-%{release} + +%description devel +This package contains the components needed to compile a systemtap +script from source form into executable (.ko) forms. It may be +installed on a self-contained developer workstation (along with the +systemtap-client and systemtap-runtime packages), or on a dedicated +remote server (alongside the systemtap-server package). It includes +a copy of the standard tapset library and the runtime library C files. + +%package translations +Summary: translation files for %{name} +Buildarch: noarch +Conflicts: systemtap-server < 5.1 +Conflicts: systemtap-devel < 5.1 +Conflicts: systemtap-runtime < 5.1 +Conflicts: systemtap-client < 5.1 + +%description translations +This package contains tranlation files for %{name} + +%package server +Summary: Instrumentation System Server +License: GPL-2.0-or-later +Requires: systemtap-devel = %{version}-%{release} +Requires: systemtap-translations = %{version}-%{release} +Requires: coreutils nss zip unzip +Requires(pre): shadow-utils +BuildRequires: nss-devel avahi-devel +%if %{with_openssl} +Requires: openssl +%endif + +%description server +This is the remote script compilation server component of systemtap. +It announces itself to nearby clients with avahi (if available), and +compiles systemtap scripts to kernel objects on their demand. + +%package runtime +Summary: Programmable system-wide instrumentation system - runtime +License: GPL-2.0-or-later +Requires(pre): shadow-utils +Requires: systemtap-translations = %{version}-%{release} + +%description runtime +SystemTap runtime contains the components needed to execute +a systemtap script that was already compiled into a module +using a local or remote systemtap-devel installation. + +%package client +Summary: Programmable system-wide instrumentation system - client +License: GPL-2.0-or-later +Requires: zip unzip +Requires: systemtap-runtime = %{version}-%{release} +Requires: systemtap-translations = %{version}-%{release} +Requires: coreutils grep sed unzip zip +Requires: openssh-clients +%if %{with_mokutil} +Requires: mokutil +%endif + +%description client +This package contains/requires the components needed to develop +systemtap scripts, and compile them using a local systemtap-devel +or a remote systemtap-server installation, then run them using a +local or remote systemtap-runtime. It includes script samples and +documentation, and a copy of the tapset library for reference. + +%package sdt-devel +Summary: Static probe support tools +License: GPL-2.0-or-later and Public Domain +Requires: python3-pyparsing + +%description sdt-devel +This package includes the <sys/sdt.h> header file used for static +instrumentation compiled into userspace programs and libraries, along +with the optional dtrace-compatibility preprocessor to process related +.d files into tracing-macro-laden .h headers. + +%package testsuite +Summary: Instrumentation System Testsuite +License: GPL-2.0-or-later +Requires: systemtap = %{version}-%{release} +Requires: systemtap-sdt-devel = %{version}-%{release} +Requires: systemtap-server = %{version}-%{release} +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 + +%description testsuite +This package includes the dejagnu-based systemtap stress self-testing +suite. This may be used by system administrators to thoroughly check +systemtap on the current system. + +%package runtime-python3 +Summary: Systemtap Python 3 Runtime Support +License: GPL-2.0-or-later +Requires: systemtap-runtime = %{version}-%{release} + +%description runtime-python3 +This package includes support files needed to run systemtap scripts +that probe python3 processes. + +%package stap-exporter +Summary: Systemtap-prometheus interoperation mechanism +License: GPL-2.0-or-later +Requires: systemtap-runtime = %{version}-%{release} + +%description stap-exporter +This package includes files for a systemd service that manages +systemtap sessions and relays prometheus metrics from the sessions +to remote requesters on demand. + +%package jupyter +Summary: ISystemtap jupyter kernel and examples +License: GPL-2.0-or-later +Requires: systemtap = %{version}-%{release} + +%description jupyter +This package includes files needed to build and run +the interactive systemtap Jupyter kernel, either locally +or within a container. + +%package_help + +%prep +%autosetup -p1 + +%build +%configure \ + %{dyninst_config} \ + %{crash_config} \ + --with-bpf \ + --disable-httpd \ + --with-dracutstap=%{dracutstap} \ + --with-dracutbindir=%{dracutbindir} \ + --with-python3 \ + --with-python3-probes \ + --enable-pie \ + --with-rpm \ + --enable-sqlite \ + --disable-silent-rules \ + --with-extra-version="rpm %{version}-%{release}" + +%make_build +%{_emacs_bytecompile} emacs/systemtap-mode.el + +%install +%make_install +%find_lang %{name} + +ln -s %{_datadir}/systemtap/examples +find $RPM_BUILD_ROOT%{_datadir}/systemtap/examples -type f -name '*.stp' -print0 | xargs -0 sed -i -r -e '1s@^#!.+stap@#!%{_bindir}/stap@' +chmod 755 $RPM_BUILD_ROOT%{_bindir}/staprun +install -c -m 755 stap-prep $RPM_BUILD_ROOT%{_bindir}/stap-prep +cp -rp testsuite $RPM_BUILD_ROOT%{_datadir}/systemtap +mkdir docs.installed +mv $RPM_BUILD_ROOT%{_datadir}/doc/systemtap/*.pdf docs.installed/ +install -D -m 644 macros.systemtap $RPM_BUILD_ROOT%{_rpmmacrodir}/macros.systemtap +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/stap-server +mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/stap-server +mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/stap-server/.systemtap +mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/stap-server +touch $RPM_BUILD_ROOT%{_localstatedir}/log/stap-server/log +mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/cache/systemtap +mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/run/systemtap +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d +install -m 644 initscript/logrotate.stap-server $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/stap-server + +mkdir -p $RPM_BUILD_ROOT%{_unitdir} +touch $RPM_BUILD_ROOT%{_unitdir}/systemtap.service +install -m 644 initscript/systemtap.service $RPM_BUILD_ROOT%{_unitdir}/systemtap.service +mkdir -p $RPM_BUILD_ROOT%{_sbindir} +install -m 755 initscript/systemtap $RPM_BUILD_ROOT%{_sbindir}/systemtap-service + +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/systemtap +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/systemtap/conf.d +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/systemtap/script.d +install -m 644 initscript/config.systemtap $RPM_BUILD_ROOT%{_sysconfdir}/systemtap/config + +mkdir -p $RPM_BUILD_ROOT%{_unitdir} +touch $RPM_BUILD_ROOT%{_unitdir}/stap-server.service +install -m 644 stap-server.service $RPM_BUILD_ROOT%{_unitdir}/stap-server.service +mkdir -p $RPM_BUILD_ROOT%{_tmpfilesdir} +install -m 644 stap-server.conf $RPM_BUILD_ROOT%{_tmpfilesdir}/stap-server.conf + +mkdir -p $RPM_BUILD_ROOT%{_emacs_sitelispdir} +install -p -m 644 emacs/systemtap-mode.el* $RPM_BUILD_ROOT%{_emacs_sitelispdir} +mkdir -p $RPM_BUILD_ROOT%{_emacs_sitestartdir} +install -p -m 644 emacs/systemtap-init.el $RPM_BUILD_ROOT%{_emacs_sitestartdir}/systemtap-init.el +for subdir in ftdetect ftplugin indent syntax +do + mkdir -p $RPM_BUILD_ROOT%{_datadir}/vim/vimfiles/$subdir + install -p -m 644 vim/$subdir/*.vim $RPM_BUILD_ROOT%{_datadir}/vim/vimfiles/$subdir +done + +mkdir -p $RPM_BUILD_ROOT%{dracutstap} +install -p -m 755 initscript/99stap/module-setup.sh $RPM_BUILD_ROOT%{dracutstap} +install -p -m 755 initscript/99stap/install $RPM_BUILD_ROOT%{dracutstap} +install -p -m 755 initscript/99stap/check $RPM_BUILD_ROOT%{dracutstap} +install -p -m 755 initscript/99stap/start-staprun.sh $RPM_BUILD_ROOT%{dracutstap} +touch $RPM_BUILD_ROOT%{dracutstap}/params.conf + +mkdir -p $RPM_BUILD_ROOT/stap-exporter +install -p -m 755 stap-exporter/stap-exporter $RPM_BUILD_ROOT%{_bindir} +install -m 644 stap-exporter/stap-exporter.service $RPM_BUILD_ROOT%{_unitdir} +install -m 644 stap-exporter/stap-exporter.8* $RPM_BUILD_ROOT%{_mandir}/man8 + +%pre runtime +getent group stapusr >/dev/null || groupadd -g 156 -r stapusr 2>/dev/null || groupadd -r stapusr +getent group stapsys >/dev/null || groupadd -g 157 -r stapsys 2>/dev/null || groupadd -r stapsys +getent group stapdev >/dev/null || groupadd -g 158 -r stapdev 2>/dev/null || groupadd -r stapdev +exit 0 + +%pre server +getent group stap-server >/dev/null || groupadd -g 155 -r stap-server 2>/dev/null || groupadd -r stap-server +getent passwd stap-server >/dev/null || \ + useradd -c "Systemtap Compile Server" -u 155 -g stap-server -d %{_localstatedir}/lib/stap-server -r -s /sbin/nologin stap-server 2>/dev/null || \ + useradd -c "Systemtap Compile Server" -g stap-server -d %{_localstatedir}/lib/stap-server -r -s /sbin/nologin stap-server + +%pre testsuite +getent passwd stapusr >/dev/null || \ + useradd -c "Systemtap 'stapusr' User" -g stapusr -r -s /sbin/nologin stapusr +getent passwd stapsys >/dev/null || \ + useradd -c "Systemtap 'stapsys' User" -g stapsys -G stapusr -r -s /sbin/nologin stapsys +getent passwd stapdev >/dev/null || \ + useradd -c "Systemtap 'stapdev' User" -g stapdev -G stapusr -r -s /sbin/nologin stapdev +exit 0 + +%post server +test -e ~stap-server && chmod 750 ~stap-server +if [ ! -f ~stap-server/.systemtap/rc ]; then + mkdir -p ~stap-server/.systemtap + chown stap-server:stap-server ~stap-server/.systemtap + numcpu=`/usr/bin/getconf _NPROCESSORS_ONLN` + if [ -z "$numcpu" -o "$numcpu" -lt 1 ]; then numcpu=1; fi + nproc=`expr $numcpu \* 30` + echo "--rlimit-as=614400000 --rlimit-cpu=60 --rlimit-nproc=$nproc --rlimit-stack=1024000 --rlimit-fsize=51200000" > ~stap-server/.systemtap/rc + chown stap-server:stap-server ~stap-server/.systemtap/rc +fi + +test -e %{_localstatedir}/log/stap-server/log || { + touch %{_localstatedir}/log/stap-server/log + chmod 644 %{_localstatedir}/log/stap-server/log + chown stap-server:stap-server %{_localstatedir}/log/stap-server/log +} +/bin/systemd-tmpfiles --create %{_tmpfilesdir}/stap-server.conf >/dev/null 2>&1 || : +exit 0 + +%triggerin client -- systemtap-server +if test -e ~stap-server/.systemtap/ssl/server/stap.cert; then + %{_libexecdir}/systemtap/stap-authorize-cert ~stap-server/.systemtap/ssl/server/stap.cert %{_sysconfdir}/systemtap/ssl/client >/dev/null + %{_libexecdir}/systemtap/stap-authorize-cert ~stap-server/.systemtap/ssl/server/stap.cert %{_sysconfdir}/systemtap/staprun >/dev/null +fi +exit 0 + +%preun server +if [ $1 = 0 ] ; then + /bin/systemctl --no-reload disable stap-server.service >/dev/null 2>&1 || : + /bin/systemctl stop stap-server.service >/dev/null 2>&1 || : +fi +exit 0 + +%postun server +if [ "$1" -ge "1" ] ; then + /bin/systemctl condrestart stap-server.service >/dev/null 2>&1 || : +fi +exit 0 + +%postun +if [ "$1" -ge "1" ] ; then + /bin/systemctl condrestart systemtap.service >/dev/null 2>&1 || : +fi +exit 0 + +%preun stap-exporter +if [ "$1" -eq "0" ] ; then +/bin/systemctl stop stap-exporter.service >/dev/null 2>&1 || : +/bin/systemctl disable stap-exporter.service >/dev/null 2>&1 || : +fi +exit 0 + +%post +/bin/systemctl enable systemtap.service >/dev/null 2>&1 || : +(make -C %{_datadir}/systemtap/runtime/uprobes clean) >/dev/null 2>&1 || true +(/sbin/rmmod uprobes) >/dev/null 2>&1 || true + +%preun +if [ $1 = 0 ] ; then + /bin/systemctl --no-reload disable systemtap.service >/dev/null 2>&1 || : + /bin/systemctl stop systemtap.service >/dev/null 2>&1 || : +fi +exit 0 +(make -C %{_datadir}/systemtap/runtime/uprobes clean) >/dev/null 2>&1 || true +(/sbin/rmmod uprobes) >/dev/null 2>&1 || true + +%files +%license COPYING +%doc README README.unprivileged AUTHORS NEWS +%{_unitdir}/systemtap.service +%{_sbindir}/systemtap-service +%dir %{_sysconfdir}/systemtap +%dir %{_sysconfdir}/systemtap/conf.d +%dir %{_sysconfdir}/systemtap/script.d +%config(noreplace) %{_sysconfdir}/systemtap/config +%dir %{_localstatedir}/cache/systemtap +%ghost %{_localstatedir}/run/systemtap +%dir %{dracutstap} +%{dracutstap}/* + +%files translations -f systemtap.lang + +%files server +%{_bindir}/stap-server +%dir %{_libexecdir}/systemtap +%{_libexecdir}/systemtap/stap-serverd +%{_libexecdir}/systemtap/stap-start-server +%{_libexecdir}/systemtap/stap-stop-server +%{_libexecdir}/systemtap/stap-gen-cert +%{_libexecdir}/systemtap/stap-sign-module +%{_libexecdir}/systemtap/stap-authorize-cert +%{_libexecdir}/systemtap/stap-env +%{_unitdir}/stap-server.service +%{_tmpfilesdir}/stap-server.conf +%config(noreplace) %{_sysconfdir}/logrotate.d/stap-server +%dir %{_sysconfdir}/stap-server +%dir %attr(0750,stap-server,stap-server) %{_localstatedir}/lib/stap-server +%dir %attr(0700,stap-server,stap-server) %{_localstatedir}/lib/stap-server/.systemtap +%dir %attr(0755,stap-server,stap-server) %{_localstatedir}/log/stap-server +%ghost %config(noreplace) %attr(0644,stap-server,stap-server) %{_localstatedir}/log/stap-server/log +%ghost %attr(0755,stap-server,stap-server) %{_localstatedir}/run/stap-server + +%files devel +%{_bindir}/stap +%{_bindir}/stap-prep +%{_bindir}/stap-profile-annotate +%{_bindir}/stap-report +%dir %{_datadir}/systemtap +%{_datadir}/systemtap/runtime +%{_datadir}/systemtap/tapset +%dir %{_libexecdir}/systemtap +%{_emacs_sitelispdir}/*.el* +%{_emacs_sitestartdir}/systemtap-init.el +%{_datadir}/vim/vimfiles/*/*.vim +%{_libexecdir}/systemtap/python/stap-resolve-module-function.py + +%files runtime +%attr(4110,root,stapusr) %{_bindir}/staprun +%{_bindir}/stapsh +%{_bindir}/stap-merge +%{_bindir}/stap-report +%{_bindir}/stapbpf +%dir %{_libexecdir}/systemtap +%{_libexecdir}/systemtap/stapio +%{_libexecdir}/systemtap/stap-authorize-cert +%if %{with_dyninst} + %{_bindir}/stapdyn +%endif +%if %{with_crash} + %dir %{_libdir}/systemtap + %{_libdir}/systemtap/staplog.so* +%endif + +%files client +%{_datadir}/systemtap/examples +%license COPYING +%doc docs.installed/*.pdf +%{_bindir}/stap +%{_bindir}/stap-prep +%{_bindir}/stap-report +%dir %{_datadir}/systemtap +%{_datadir}/systemtap/tapset + +%files sdt-devel +%{_bindir}/dtrace +%{_includedir}/sys/sdt.h +%{_includedir}/sys/sdt-config.h +%{_rpmmacrodir}/macros.systemtap + +%files testsuite +%dir %{_datadir}/systemtap +%{_datadir}/systemtap/testsuite + +%files runtime-python3 +%{python3_sitearch}/HelperSDT +%{python3_sitearch}/HelperSDT-*.egg-info + +%files stap-exporter +%{_unitdir}/stap-exporter.service +%{_bindir}/stap-exporter +/etc/stap-exporter/* +/usr/sbin/stap-exporter +/etc/sysconfig/stap-exporter + +%files jupyter +%{_bindir}/stap-jupyter-container +%{_bindir}/stap-jupyter-install +%{_mandir}/man1/stap-jupyter.1* +%dir %{_datadir}/systemtap +%{_datadir}/systemtap/interactive-notebook + +%files help +%{_mandir}/man?/* +%lang(cs) %{_mandir}/cs/man?/* + +%changelog +* Sun Oct 20 2024 Funda Wang <fundawang@yeah.net> - 5.1-1 +- update to 5.1 + +* 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. + - 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 +- SUG:NA +- DESC:Upgrade to 4.9 + +* Tue Aug 8 2023 langfei<langfei@huawei.com> - 4.5-7 +- Type:bugfix +- CVE:NA +- SUG:NA +- DESC:Adapts to gcc 12 and python 3.11 + +* Wed Jul 5 2023 langfei<langfei@huawei.com> - 4.5-6 +- Type:bugfix +- CVE:NA +- SUG:NA +- DESC:Fix some test cases fail to be executed, Resolve the sc2168 warning detected by the shellcheck tool. + +* Mon Feb 6 2023 langfei<langfei@huawei.com> - 4.5-5 +- Type:bugfix +- CVE:NA +- SUG:NA +- DESC:Solve systemtap build problem in openEuler:MultiLanguage + +* Mon Dec 5 2022 langfei<langfei@huawei.com> - 4.5-4 +- Type:bugfix +- CVE:NA +- SUG:NA +- DESC:Resolve stap-exporter.service chenge to disable when upgraded systemtap-stap-exporter package + +* Fri Apr 8 2022 zhouwenpei <zhouwenpei1@h-partners.com> - 4.5-3 +- Add int type cast to resolve gcc issue for option Wformat=2 + +* Tue Feb 15 2022 zhouwenpei <zhouwenpei1@h-partners.com> - 4.5-2 +- Remove requires on gcc and systemtap-devel + +* Thu Dec 2 2021 zhouwenpei <zhouwenpei1@huawei.com> - 4.5-1 +- upgrade to 4.5 + +* Mon Feb 1 2021 xinghe <xinghe1@huawei.com> - 4.4-1 +- upgrade to 4.4 + +* Tue Jul 21 2020 jinzhimin <jinzhimin2@huawei.com> - 4.3-1 +- upgrade to 4.3 + +* Fri Mar 13 2020 yuxiangyang <yuxiangyang4@huawei.com> - 4.1.3 +- remove java-runtime + +* Fri Feb 21 2020 yuxiangyang <yuxiangyang4@huawei.com> - 4.1.2 +- Delete the requirement of python2-pyparsing + +* Mon Aug 12 2019 openEuler Buildteam <buildteam@openeuler.org> - 4.1.1 +- Package init |