systemtap/Add-basic-LoongArch64-support.patch

2443 lines
91 KiB
Diff
Raw Permalink Normal View History

2024-07-05 15:14:31 +08:00
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, &regs->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(&regs->pstate);
STAP_RETVALUE = ((pstate & PSR_MODE_MASK) == PSR_MODE_EL0t);
+#elif defined(__loongarch64)
+ long csr_prmd = kread(&regs->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