From 7cea879aba02ce787ecd4e8b388e606bede2e22f Mon Sep 17 00:00:00 2001 From: Hui Li Date: Tue, 22 Aug 2023 11:33:05 +0800 Subject: [PATCH] Improve support for loongarch64 Signed-off-by: Hui Li --- 3001-Improve-support-for-loongarch64.patch | 530 +++++++++++++++++++++ strace.spec | 8 +- 2 files changed, 537 insertions(+), 1 deletion(-) create mode 100644 3001-Improve-support-for-loongarch64.patch diff --git a/3001-Improve-support-for-loongarch64.patch b/3001-Improve-support-for-loongarch64.patch new file mode 100644 index 0000000..8df4a9d --- /dev/null +++ b/3001-Improve-support-for-loongarch64.patch @@ -0,0 +1,530 @@ +From e549de9e7504f3f492f1ecd63e65f92158ece1ac Mon Sep 17 00:00:00 2001 +From: Hui Li +Date: Sat, 19 Aug 2023 14:11:49 +0800 +Subject: [PATCH] Improve support for loongarch64 + +Signed-off-by: Hui Li +--- + src/Makefile.am | 1 + + src/linux/loongarch64/arch_prstatus_regset.c | 12 -- + src/linux/loongarch64/get_syscall_args.c | 2 +- + src/linux/loongarch64/rt_sigframe.h | 13 ++ + src/xlat/audit_arch.h | 162 +++++++++---------- + src/xlat/audit_arch.in | 1 - + tests/dup.c | 8 + + tests/dup3.c | 8 + + tests/ptrace.c | 33 +--- + tests/rt_sigpending.c | 8 + + tests/rt_sigprocmask.c | 8 + + tests/sock_filter-v.c | 8 + + tests/strace-k.test | 2 +- + 13 files changed, 135 insertions(+), 131 deletions(-) + create mode 100644 src/linux/loongarch64/rt_sigframe.h + +diff --git a/src/Makefile.am b/src/Makefile.am +index 101b304..3633407 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -662,6 +662,7 @@ EXTRA_DIST = \ + linux/loongarch64/ioctls_arch0.h \ + linux/loongarch64/ioctls_inc0.h \ + linux/loongarch64/raw_syscall.h \ ++ linux/loongarch64/rt_sigframe.h \ + linux/loongarch64/set_error.c \ + linux/loongarch64/set_scno.c \ + linux/loongarch64/syscallent.h \ +diff --git a/src/linux/loongarch64/arch_prstatus_regset.c b/src/linux/loongarch64/arch_prstatus_regset.c +index 8df75aa..e58d82c 100644 +--- a/src/linux/loongarch64/arch_prstatus_regset.c ++++ b/src/linux/loongarch64/arch_prstatus_regset.c +@@ -20,10 +20,6 @@ arch_decode_prstatus_regset(struct tcb *const tcp, + PRINT_FIELD_ARRAY_UPTO(regs, regs, + fetch_size / 8, tcp, + print_xint_array_member); +- if (fetch_size > offsetof(struct_prstatus_regset, orig_a0)) { +- tprint_struct_next(); +- PRINT_FIELD_X(regs, orig_a0); +- } + if (fetch_size > offsetof(struct_prstatus_regset, csr_era)) { + tprint_struct_next(); + PRINT_FIELD_X(regs, csr_era); +@@ -32,14 +28,6 @@ arch_decode_prstatus_regset(struct tcb *const tcp, + tprint_struct_next(); + PRINT_FIELD_X(regs, csr_badv); + } +- const size_t offset_of_reserved = +- offsetof(struct_prstatus_regset, reserved); +- if (fetch_size > offset_of_reserved) { +- tprint_struct_next(); +- PRINT_FIELD_ARRAY_UPTO(regs, reserved, +- (fetch_size - offset_of_reserved) / 8, +- tcp, print_xint_array_member); +- } + if (size > sizeof(regs)) { + tprint_struct_next(); + tprint_more_data_follows(); +diff --git a/src/linux/loongarch64/get_syscall_args.c b/src/linux/loongarch64/get_syscall_args.c +index e97aa72..4383168 100644 +--- a/src/linux/loongarch64/get_syscall_args.c ++++ b/src/linux/loongarch64/get_syscall_args.c +@@ -9,7 +9,7 @@ + static int + arch_get_syscall_args(struct tcb *tcp) + { +- tcp->u_arg[0] = loongarch_regs.orig_a0; ++ tcp->u_arg[0] = loongarch_regs.regs[4]; + tcp->u_arg[1] = loongarch_regs.regs[5]; + tcp->u_arg[2] = loongarch_regs.regs[6]; + tcp->u_arg[3] = loongarch_regs.regs[7]; +diff --git a/src/linux/loongarch64/rt_sigframe.h b/src/linux/loongarch64/rt_sigframe.h +new file mode 100644 +index 0000000..ed10469 +--- /dev/null ++++ b/src/linux/loongarch64/rt_sigframe.h +@@ -0,0 +1,13 @@ ++/* ++ * Copyright (c) 2021 The strace developers. ++ * All rights reserved. ++ * ++ * SPDX-License-Identifier: LGPL-2.1-or-later ++ */ ++ ++#ifndef STRACE_RT_SIGFRAME_H ++# define STRACE_RT_SIGFRAME_H ++ ++# define OFFSETOF_SIGMASK_IN_RT_SIGFRAME 5664 ++ ++#endif /* !STRACE_RT_SIGFRAME_H */ +diff --git a/src/xlat/audit_arch.h b/src/xlat/audit_arch.h +index db085b8..1ed284b 100644 +--- a/src/xlat/audit_arch.h ++++ b/src/xlat/audit_arch.h +@@ -131,13 +131,6 @@ DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE + #else + # define AUDIT_ARCH_IA64 (EM_IA_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE) + #endif +-#if defined(AUDIT_ARCH_LOONGARCH32) || (defined(HAVE_DECL_AUDIT_ARCH_LOONGARCH32) && HAVE_DECL_AUDIT_ARCH_LOONGARCH32) +-DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE +-static_assert((AUDIT_ARCH_LOONGARCH32) == ((EM_LOONGARCH|__AUDIT_ARCH_LE)), "AUDIT_ARCH_LOONGARCH32 != (EM_LOONGARCH|__AUDIT_ARCH_LE)"); +-DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE +-#else +-# define AUDIT_ARCH_LOONGARCH32 (EM_LOONGARCH|__AUDIT_ARCH_LE) +-#endif + #if defined(AUDIT_ARCH_LOONGARCH64) || (defined(HAVE_DECL_AUDIT_ARCH_LOONGARCH64) && HAVE_DECL_AUDIT_ARCH_LOONGARCH64) + DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE + static_assert((AUDIT_ARCH_LOONGARCH64) == ((EM_LOONGARCH|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)), "AUDIT_ARCH_LOONGARCH64 != (EM_LOONGARCH|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)"); +@@ -459,117 +452,114 @@ static const struct xlat_data audit_arch_xdata[] = { + XLAT(AUDIT_ARCH_IA64), + #define XLAT_VAL_16 ((unsigned) (AUDIT_ARCH_IA64)) + #define XLAT_STR_16 STRINGIFY(AUDIT_ARCH_IA64) +- XLAT(AUDIT_ARCH_LOONGARCH32), +- #define XLAT_VAL_17 ((unsigned) (AUDIT_ARCH_LOONGARCH32)) +- #define XLAT_STR_17 STRINGIFY(AUDIT_ARCH_LOONGARCH32) + XLAT(AUDIT_ARCH_LOONGARCH64), +- #define XLAT_VAL_18 ((unsigned) (AUDIT_ARCH_LOONGARCH64)) +- #define XLAT_STR_18 STRINGIFY(AUDIT_ARCH_LOONGARCH64) ++ #define XLAT_VAL_17 ((unsigned) (AUDIT_ARCH_LOONGARCH64)) ++ #define XLAT_STR_17 STRINGIFY(AUDIT_ARCH_LOONGARCH64) + XLAT(AUDIT_ARCH_M32R), +- #define XLAT_VAL_19 ((unsigned) (AUDIT_ARCH_M32R)) +- #define XLAT_STR_19 STRINGIFY(AUDIT_ARCH_M32R) ++ #define XLAT_VAL_18 ((unsigned) (AUDIT_ARCH_M32R)) ++ #define XLAT_STR_18 STRINGIFY(AUDIT_ARCH_M32R) + XLAT(AUDIT_ARCH_M68K), +- #define XLAT_VAL_20 ((unsigned) (AUDIT_ARCH_M68K)) +- #define XLAT_STR_20 STRINGIFY(AUDIT_ARCH_M68K) ++ #define XLAT_VAL_19 ((unsigned) (AUDIT_ARCH_M68K)) ++ #define XLAT_STR_19 STRINGIFY(AUDIT_ARCH_M68K) + XLAT(AUDIT_ARCH_MICROBLAZE), +- #define XLAT_VAL_21 ((unsigned) (AUDIT_ARCH_MICROBLAZE)) +- #define XLAT_STR_21 STRINGIFY(AUDIT_ARCH_MICROBLAZE) ++ #define XLAT_VAL_20 ((unsigned) (AUDIT_ARCH_MICROBLAZE)) ++ #define XLAT_STR_20 STRINGIFY(AUDIT_ARCH_MICROBLAZE) + XLAT(AUDIT_ARCH_MIPS), +- #define XLAT_VAL_22 ((unsigned) (AUDIT_ARCH_MIPS)) +- #define XLAT_STR_22 STRINGIFY(AUDIT_ARCH_MIPS) ++ #define XLAT_VAL_21 ((unsigned) (AUDIT_ARCH_MIPS)) ++ #define XLAT_STR_21 STRINGIFY(AUDIT_ARCH_MIPS) + XLAT(AUDIT_ARCH_MIPS64), +- #define XLAT_VAL_23 ((unsigned) (AUDIT_ARCH_MIPS64)) +- #define XLAT_STR_23 STRINGIFY(AUDIT_ARCH_MIPS64) ++ #define XLAT_VAL_22 ((unsigned) (AUDIT_ARCH_MIPS64)) ++ #define XLAT_STR_22 STRINGIFY(AUDIT_ARCH_MIPS64) + XLAT(AUDIT_ARCH_MIPS64N32), +- #define XLAT_VAL_24 ((unsigned) (AUDIT_ARCH_MIPS64N32)) +- #define XLAT_STR_24 STRINGIFY(AUDIT_ARCH_MIPS64N32) ++ #define XLAT_VAL_23 ((unsigned) (AUDIT_ARCH_MIPS64N32)) ++ #define XLAT_STR_23 STRINGIFY(AUDIT_ARCH_MIPS64N32) + XLAT(AUDIT_ARCH_MIPSEL), +- #define XLAT_VAL_25 ((unsigned) (AUDIT_ARCH_MIPSEL)) +- #define XLAT_STR_25 STRINGIFY(AUDIT_ARCH_MIPSEL) ++ #define XLAT_VAL_24 ((unsigned) (AUDIT_ARCH_MIPSEL)) ++ #define XLAT_STR_24 STRINGIFY(AUDIT_ARCH_MIPSEL) + XLAT(AUDIT_ARCH_MIPSEL64), +- #define XLAT_VAL_26 ((unsigned) (AUDIT_ARCH_MIPSEL64)) +- #define XLAT_STR_26 STRINGIFY(AUDIT_ARCH_MIPSEL64) ++ #define XLAT_VAL_25 ((unsigned) (AUDIT_ARCH_MIPSEL64)) ++ #define XLAT_STR_25 STRINGIFY(AUDIT_ARCH_MIPSEL64) + XLAT(AUDIT_ARCH_MIPSEL64N32), +- #define XLAT_VAL_27 ((unsigned) (AUDIT_ARCH_MIPSEL64N32)) +- #define XLAT_STR_27 STRINGIFY(AUDIT_ARCH_MIPSEL64N32) ++ #define XLAT_VAL_26 ((unsigned) (AUDIT_ARCH_MIPSEL64N32)) ++ #define XLAT_STR_26 STRINGIFY(AUDIT_ARCH_MIPSEL64N32) + XLAT(AUDIT_ARCH_NDS32), +- #define XLAT_VAL_28 ((unsigned) (AUDIT_ARCH_NDS32)) +- #define XLAT_STR_28 STRINGIFY(AUDIT_ARCH_NDS32) ++ #define XLAT_VAL_27 ((unsigned) (AUDIT_ARCH_NDS32)) ++ #define XLAT_STR_27 STRINGIFY(AUDIT_ARCH_NDS32) + XLAT(AUDIT_ARCH_NDS32BE), +- #define XLAT_VAL_29 ((unsigned) (AUDIT_ARCH_NDS32BE)) +- #define XLAT_STR_29 STRINGIFY(AUDIT_ARCH_NDS32BE) ++ #define XLAT_VAL_28 ((unsigned) (AUDIT_ARCH_NDS32BE)) ++ #define XLAT_STR_28 STRINGIFY(AUDIT_ARCH_NDS32BE) + XLAT(AUDIT_ARCH_NIOS2), +- #define XLAT_VAL_30 ((unsigned) (AUDIT_ARCH_NIOS2)) +- #define XLAT_STR_30 STRINGIFY(AUDIT_ARCH_NIOS2) ++ #define XLAT_VAL_29 ((unsigned) (AUDIT_ARCH_NIOS2)) ++ #define XLAT_STR_29 STRINGIFY(AUDIT_ARCH_NIOS2) + XLAT(AUDIT_ARCH_OPENRISC), +- #define XLAT_VAL_31 ((unsigned) (AUDIT_ARCH_OPENRISC)) +- #define XLAT_STR_31 STRINGIFY(AUDIT_ARCH_OPENRISC) ++ #define XLAT_VAL_30 ((unsigned) (AUDIT_ARCH_OPENRISC)) ++ #define XLAT_STR_30 STRINGIFY(AUDIT_ARCH_OPENRISC) + XLAT(AUDIT_ARCH_PARISC), +- #define XLAT_VAL_32 ((unsigned) (AUDIT_ARCH_PARISC)) +- #define XLAT_STR_32 STRINGIFY(AUDIT_ARCH_PARISC) ++ #define XLAT_VAL_31 ((unsigned) (AUDIT_ARCH_PARISC)) ++ #define XLAT_STR_31 STRINGIFY(AUDIT_ARCH_PARISC) + XLAT(AUDIT_ARCH_PARISC64), +- #define XLAT_VAL_33 ((unsigned) (AUDIT_ARCH_PARISC64)) +- #define XLAT_STR_33 STRINGIFY(AUDIT_ARCH_PARISC64) ++ #define XLAT_VAL_32 ((unsigned) (AUDIT_ARCH_PARISC64)) ++ #define XLAT_STR_32 STRINGIFY(AUDIT_ARCH_PARISC64) + XLAT(AUDIT_ARCH_PPC), +- #define XLAT_VAL_34 ((unsigned) (AUDIT_ARCH_PPC)) +- #define XLAT_STR_34 STRINGIFY(AUDIT_ARCH_PPC) ++ #define XLAT_VAL_33 ((unsigned) (AUDIT_ARCH_PPC)) ++ #define XLAT_STR_33 STRINGIFY(AUDIT_ARCH_PPC) + XLAT(AUDIT_ARCH_PPC64), +- #define XLAT_VAL_35 ((unsigned) (AUDIT_ARCH_PPC64)) +- #define XLAT_STR_35 STRINGIFY(AUDIT_ARCH_PPC64) ++ #define XLAT_VAL_34 ((unsigned) (AUDIT_ARCH_PPC64)) ++ #define XLAT_STR_34 STRINGIFY(AUDIT_ARCH_PPC64) + XLAT(AUDIT_ARCH_PPC64LE), +- #define XLAT_VAL_36 ((unsigned) (AUDIT_ARCH_PPC64LE)) +- #define XLAT_STR_36 STRINGIFY(AUDIT_ARCH_PPC64LE) ++ #define XLAT_VAL_35 ((unsigned) (AUDIT_ARCH_PPC64LE)) ++ #define XLAT_STR_35 STRINGIFY(AUDIT_ARCH_PPC64LE) + XLAT(AUDIT_ARCH_RISCV32), +- #define XLAT_VAL_37 ((unsigned) (AUDIT_ARCH_RISCV32)) +- #define XLAT_STR_37 STRINGIFY(AUDIT_ARCH_RISCV32) ++ #define XLAT_VAL_36 ((unsigned) (AUDIT_ARCH_RISCV32)) ++ #define XLAT_STR_36 STRINGIFY(AUDIT_ARCH_RISCV32) + XLAT(AUDIT_ARCH_RISCV64), +- #define XLAT_VAL_38 ((unsigned) (AUDIT_ARCH_RISCV64)) +- #define XLAT_STR_38 STRINGIFY(AUDIT_ARCH_RISCV64) ++ #define XLAT_VAL_37 ((unsigned) (AUDIT_ARCH_RISCV64)) ++ #define XLAT_STR_37 STRINGIFY(AUDIT_ARCH_RISCV64) + XLAT(AUDIT_ARCH_S390), +- #define XLAT_VAL_39 ((unsigned) (AUDIT_ARCH_S390)) +- #define XLAT_STR_39 STRINGIFY(AUDIT_ARCH_S390) ++ #define XLAT_VAL_38 ((unsigned) (AUDIT_ARCH_S390)) ++ #define XLAT_STR_38 STRINGIFY(AUDIT_ARCH_S390) + XLAT(AUDIT_ARCH_S390X), +- #define XLAT_VAL_40 ((unsigned) (AUDIT_ARCH_S390X)) +- #define XLAT_STR_40 STRINGIFY(AUDIT_ARCH_S390X) ++ #define XLAT_VAL_39 ((unsigned) (AUDIT_ARCH_S390X)) ++ #define XLAT_STR_39 STRINGIFY(AUDIT_ARCH_S390X) + XLAT(AUDIT_ARCH_SH), +- #define XLAT_VAL_41 ((unsigned) (AUDIT_ARCH_SH)) +- #define XLAT_STR_41 STRINGIFY(AUDIT_ARCH_SH) ++ #define XLAT_VAL_40 ((unsigned) (AUDIT_ARCH_SH)) ++ #define XLAT_STR_40 STRINGIFY(AUDIT_ARCH_SH) + XLAT(AUDIT_ARCH_SH64), +- #define XLAT_VAL_42 ((unsigned) (AUDIT_ARCH_SH64)) +- #define XLAT_STR_42 STRINGIFY(AUDIT_ARCH_SH64) ++ #define XLAT_VAL_41 ((unsigned) (AUDIT_ARCH_SH64)) ++ #define XLAT_STR_41 STRINGIFY(AUDIT_ARCH_SH64) + XLAT(AUDIT_ARCH_SHEL), +- #define XLAT_VAL_43 ((unsigned) (AUDIT_ARCH_SHEL)) +- #define XLAT_STR_43 STRINGIFY(AUDIT_ARCH_SHEL) ++ #define XLAT_VAL_42 ((unsigned) (AUDIT_ARCH_SHEL)) ++ #define XLAT_STR_42 STRINGIFY(AUDIT_ARCH_SHEL) + XLAT(AUDIT_ARCH_SHEL64), +- #define XLAT_VAL_44 ((unsigned) (AUDIT_ARCH_SHEL64)) +- #define XLAT_STR_44 STRINGIFY(AUDIT_ARCH_SHEL64) ++ #define XLAT_VAL_43 ((unsigned) (AUDIT_ARCH_SHEL64)) ++ #define XLAT_STR_43 STRINGIFY(AUDIT_ARCH_SHEL64) + XLAT(AUDIT_ARCH_SPARC), +- #define XLAT_VAL_45 ((unsigned) (AUDIT_ARCH_SPARC)) +- #define XLAT_STR_45 STRINGIFY(AUDIT_ARCH_SPARC) ++ #define XLAT_VAL_44 ((unsigned) (AUDIT_ARCH_SPARC)) ++ #define XLAT_STR_44 STRINGIFY(AUDIT_ARCH_SPARC) + XLAT(AUDIT_ARCH_SPARC64), +- #define XLAT_VAL_46 ((unsigned) (AUDIT_ARCH_SPARC64)) +- #define XLAT_STR_46 STRINGIFY(AUDIT_ARCH_SPARC64) ++ #define XLAT_VAL_45 ((unsigned) (AUDIT_ARCH_SPARC64)) ++ #define XLAT_STR_45 STRINGIFY(AUDIT_ARCH_SPARC64) + XLAT(AUDIT_ARCH_TILEGX), +- #define XLAT_VAL_47 ((unsigned) (AUDIT_ARCH_TILEGX)) +- #define XLAT_STR_47 STRINGIFY(AUDIT_ARCH_TILEGX) ++ #define XLAT_VAL_46 ((unsigned) (AUDIT_ARCH_TILEGX)) ++ #define XLAT_STR_46 STRINGIFY(AUDIT_ARCH_TILEGX) + XLAT(AUDIT_ARCH_TILEGX32), +- #define XLAT_VAL_48 ((unsigned) (AUDIT_ARCH_TILEGX32)) +- #define XLAT_STR_48 STRINGIFY(AUDIT_ARCH_TILEGX32) ++ #define XLAT_VAL_47 ((unsigned) (AUDIT_ARCH_TILEGX32)) ++ #define XLAT_STR_47 STRINGIFY(AUDIT_ARCH_TILEGX32) + XLAT(AUDIT_ARCH_TILEPRO), +- #define XLAT_VAL_49 ((unsigned) (AUDIT_ARCH_TILEPRO)) +- #define XLAT_STR_49 STRINGIFY(AUDIT_ARCH_TILEPRO) ++ #define XLAT_VAL_48 ((unsigned) (AUDIT_ARCH_TILEPRO)) ++ #define XLAT_STR_48 STRINGIFY(AUDIT_ARCH_TILEPRO) + XLAT(AUDIT_ARCH_UNICORE), +- #define XLAT_VAL_50 ((unsigned) (AUDIT_ARCH_UNICORE)) +- #define XLAT_STR_50 STRINGIFY(AUDIT_ARCH_UNICORE) ++ #define XLAT_VAL_49 ((unsigned) (AUDIT_ARCH_UNICORE)) ++ #define XLAT_STR_49 STRINGIFY(AUDIT_ARCH_UNICORE) + XLAT(AUDIT_ARCH_V850), +- #define XLAT_VAL_51 ((unsigned) (AUDIT_ARCH_V850)) +- #define XLAT_STR_51 STRINGIFY(AUDIT_ARCH_V850) ++ #define XLAT_VAL_50 ((unsigned) (AUDIT_ARCH_V850)) ++ #define XLAT_STR_50 STRINGIFY(AUDIT_ARCH_V850) + XLAT(AUDIT_ARCH_X86_64), +- #define XLAT_VAL_52 ((unsigned) (AUDIT_ARCH_X86_64)) +- #define XLAT_STR_52 STRINGIFY(AUDIT_ARCH_X86_64) ++ #define XLAT_VAL_51 ((unsigned) (AUDIT_ARCH_X86_64)) ++ #define XLAT_STR_51 STRINGIFY(AUDIT_ARCH_X86_64) + XLAT(AUDIT_ARCH_XTENSA), +- #define XLAT_VAL_53 ((unsigned) (AUDIT_ARCH_XTENSA)) +- #define XLAT_STR_53 STRINGIFY(AUDIT_ARCH_XTENSA) ++ #define XLAT_VAL_52 ((unsigned) (AUDIT_ARCH_XTENSA)) ++ #define XLAT_STR_52 STRINGIFY(AUDIT_ARCH_XTENSA) + }; + const struct xlat audit_arch[1] = { { + .data = audit_arch_xdata, +@@ -734,9 +724,6 @@ const struct xlat audit_arch[1] = { { + # endif + # ifdef XLAT_VAL_52 + | XLAT_VAL_52 +-# endif +-# ifdef XLAT_VAL_53 +- | XLAT_VAL_53 + # endif + , + .flags_strsz = 0 +@@ -898,9 +885,6 @@ const struct xlat audit_arch[1] = { { + # endif + # ifdef XLAT_STR_52 + + sizeof(XLAT_STR_52) +-# endif +-# ifdef XLAT_STR_53 +- + sizeof(XLAT_STR_53) + # endif + , + } }; +@@ -1012,8 +996,6 @@ DIAG_POP_IGNORE_TAUTOLOGICAL_CONSTANT_COMPARE + # undef XLAT_VAL_51 + # undef XLAT_STR_52 + # undef XLAT_VAL_52 +-# undef XLAT_STR_53 +-# undef XLAT_VAL_53 + # endif /* !IN_MPERS */ + + #endif /* !XLAT_MACROS_ONLY */ +diff --git a/src/xlat/audit_arch.in b/src/xlat/audit_arch.in +index 0760eb7..8ba0be8 100644 +--- a/src/xlat/audit_arch.in ++++ b/src/xlat/audit_arch.in +@@ -25,7 +25,6 @@ AUDIT_ARCH_H8300 (EM_H8_300) /* Removed in v3.13-rc1~130^2~2 */ + AUDIT_ARCH_HEXAGON (EM_HEXAGON) + AUDIT_ARCH_I386 (EM_386|__AUDIT_ARCH_LE) + AUDIT_ARCH_IA64 (EM_IA_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE) +-AUDIT_ARCH_LOONGARCH32 (EM_LOONGARCH|__AUDIT_ARCH_LE) + AUDIT_ARCH_LOONGARCH64 (EM_LOONGARCH|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE) + AUDIT_ARCH_M32R (EM_M32R) + AUDIT_ARCH_M68K (EM_68K) +diff --git a/tests/dup.c b/tests/dup.c +index df0251f..b743247 100644 +--- a/tests/dup.c ++++ b/tests/dup.c +@@ -10,6 +10,8 @@ + #include "tests.h" + #include "scno.h" + ++#if defined __NR_dup && !defined __loongarch__ ++ + #include + #include + +@@ -62,3 +64,9 @@ main(void) + puts("+++ exited with 0 +++"); + return 0; + } ++ ++#else ++ ++SKIP_MAIN_UNDEFINED("__NR_dup && !defined __loongarch__") ++ ++#endif +diff --git a/tests/dup3.c b/tests/dup3.c +index 5f17ab2..fdfcceb 100644 +--- a/tests/dup3.c ++++ b/tests/dup3.c +@@ -10,6 +10,8 @@ + #include "tests.h" + #include "scno.h" + ++#if defined __NR_dup3 && !defined __loongarch__ ++ + #include + #include + #include "kernel_fcntl.h" +@@ -121,3 +123,9 @@ main(void) + puts("+++ exited with 0 +++"); + return 0; + } ++ ++#else ++ ++SKIP_MAIN_UNDEFINED("__NR_dup3 && !defined __loongarch__") ++ ++#endif +diff --git a/tests/ptrace.c b/tests/ptrace.c +index 00d8807..8427b71 100644 +--- a/tests/ptrace.c ++++ b/tests/ptrace.c +@@ -845,22 +845,15 @@ print_prstatus_regset(const void *const rs, const size_t size) + + # elif defined __loongarch__ + +- if (size > offsetof(TRACEE_REGS_STRUCT, regs)) { +- const size_t len = size - offsetof(TRACEE_REGS_STRUCT, regs); +- fputs("regs=[", stdout); +- for (unsigned int i = 0; i < ARRAY_SIZE(regs->regs); ++i) { +- if (len > i * sizeof(regs->regs[i])) { +- if (i) +- fputs(", ", stdout); +- PRINT_VAL_X(regs->regs[i]); +- } ++ fputs("regs=[", stdout); ++ for (unsigned int i = 0; i < ARRAY_SIZE(regs->regs); ++i) { ++ if (size > i * sizeof(regs->regs[i])) { ++ if (i) ++ fputs(", ", stdout); ++ PRINT_VAL_X(regs->regs[i]); + } +- fputs("]", stdout); +- } +- if (size >= offsetofend(TRACEE_REGS_STRUCT, orig_a0)) { +- fputs(", ", stdout); +- PRINT_FIELD_X(*regs, orig_a0); + } ++ fputs("]", stdout); + if (size >= offsetofend(TRACEE_REGS_STRUCT, csr_era)) { + fputs(", ", stdout); + PRINT_FIELD_X(*regs, csr_era); +@@ -869,18 +862,6 @@ print_prstatus_regset(const void *const rs, const size_t size) + fputs(", ", stdout); + PRINT_FIELD_X(*regs, csr_badv); + } +- if (size > offsetof(TRACEE_REGS_STRUCT, reserved)) { +- const size_t len = size - offsetof(TRACEE_REGS_STRUCT, reserved); +- fputs(", reserved=[", stdout); +- for (unsigned int i = 0; i < ARRAY_SIZE(regs->reserved); ++i) { +- if (len > i * sizeof(regs->reserved[i])) { +- if (i) +- fputs(", ", stdout); +- PRINT_VAL_X(regs->reserved[i]); +- } +- } +- fputs("]", stdout); +- } + + # endif /* + __aarch64__ || +diff --git a/tests/rt_sigpending.c b/tests/rt_sigpending.c +index 60d4232..f8d5c88 100644 +--- a/tests/rt_sigpending.c ++++ b/tests/rt_sigpending.c +@@ -11,6 +11,8 @@ + #include "tests.h" + #include "scno.h" + ++#if defined __NR_rt_sigpending && !defined __loongarch__ ++ + #include + #include + #include +@@ -99,3 +101,9 @@ main(void) + tprintf("+++ exited with 0 +++\n"); + return 0; + } ++ ++#else ++ ++SKIP_MAIN_UNDEFINED("__NR_rt_sigpending && !defined __loongarch__") ++ ++#endif +diff --git a/tests/rt_sigprocmask.c b/tests/rt_sigprocmask.c +index d3bcbd5..0cd161f 100644 +--- a/tests/rt_sigprocmask.c ++++ b/tests/rt_sigprocmask.c +@@ -11,6 +11,8 @@ + #include "tests.h" + #include "scno.h" + ++#if defined __NR_rt_sigprocmask && !defined __loongarch__ ++ + #include + #include + #include +@@ -145,3 +147,9 @@ main(void) + tprintf("+++ exited with 0 +++\n"); + return 0; + } ++ ++#else ++ ++SKIP_MAIN_UNDEFINED("__NR_rt_sigprocmask && !defined __loongarch__") ++ ++#endif +diff --git a/tests/sock_filter-v.c b/tests/sock_filter-v.c +index d55c20d..445f0f0 100644 +--- a/tests/sock_filter-v.c ++++ b/tests/sock_filter-v.c +@@ -10,6 +10,8 @@ + + #include "tests.h" + ++#if !defined __loongarch__ ++ + #include + #include + #include +@@ -198,3 +200,9 @@ main(void) + puts("+++ exited with 0 +++"); + return 0; + } ++ ++#else ++ ++SKIP_MAIN_UNDEFINED("!defined __loongarch__") ++ ++#endif +diff --git a/tests/strace-k.test b/tests/strace-k.test +index b303df6..625e43b 100755 +--- a/tests/strace-k.test ++++ b/tests/strace-k.test +@@ -89,7 +89,7 @@ __EOF__ + # These architectures are supported by elfutils libdw, + # see grep '\.*\' elfutils/backends + ;; +- arm) pattern='No DWARF information found' ++ arm|loongarch64) pattern='No DWARF information found' + # This is also supported by elfutils libdw + # but the latter needs debuginfo for unwinding. + ;; +-- +2.20.1 + diff --git a/strace.spec b/strace.spec index b3446a8..1a682e8 100644 --- a/strace.spec +++ b/strace.spec @@ -1,4 +1,4 @@ -%define anolis_release .0.1 +%define anolis_release .0.2 Summary: Tracks and displays system calls associated with a running process Name: strace Version: 5.18 @@ -304,6 +304,7 @@ Patch2001: 2001-limit-qual_fault-scope-on-aarch64.patch ## No longer needed, since upstream commit v5.15~9 #Patch2004: 2004-glibc-msgctl-semctl-shmctl-backport-workaround.patch +Patch3001: 3001-Improve-support-for-loongarch64.patch # We no longer need to build a separate strace32 binary, but we don't want # to break existing strace32 users' workflows. @@ -466,6 +467,8 @@ Doc pages for %{name}. #%patch2003 -p1 #%patch2004 -p1 +%patch3001 -p1 + chmod a+x tests/*.test echo -n %version-%release > .tarball-version @@ -544,6 +547,9 @@ echo 'END OF TEST SUITE INFORMATION' %doc CREDITS ChangeLog.gz ChangeLog-CVS.gz COPYING LGPL-2.1-or-later NEWS README %changelog +* Sat Aug 19 2023 Hui Li - 5.18-2.0.2 +- Improve support for loongarch64 + * Tue Jul 04 2023 Hangbo Fan - 5.18-2.0.1 - Add doc sub package -- Gitee