Module Name: src Committed By: ryo Date: Mon Sep 14 10:53:02 UTC 2020
Modified Files: src/sys/arch/aarch64/aarch64: db_interface.c trap.c src/sys/arch/aarch64/include: db_machdep.h Log Message: sprinkle LE32TOH to fetch instructions on aarch64eb To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/arch/aarch64/aarch64/db_interface.c cvs rdiff -u -r1.36 -r1.37 src/sys/arch/aarch64/aarch64/trap.c cvs rdiff -u -r1.10 -r1.11 src/sys/arch/aarch64/include/db_machdep.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/aarch64/aarch64/db_interface.c diff -u src/sys/arch/aarch64/aarch64/db_interface.c:1.9 src/sys/arch/aarch64/aarch64/db_interface.c:1.10 --- src/sys/arch/aarch64/aarch64/db_interface.c:1.9 Tue Aug 11 19:46:56 2020 +++ src/sys/arch/aarch64/aarch64/db_interface.c Mon Sep 14 10:53:02 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: db_interface.c,v 1.9 2020/08/11 19:46:56 skrll Exp $ */ +/* $NetBSD: db_interface.c,v 1.10 2020/09/14 10:53:02 ryo Exp $ */ /* * Copyright (c) 2017 Ryo Shimizu <r...@nerv.org> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_interface.c,v 1.9 2020/08/11 19:46:56 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_interface.c,v 1.10 2020/09/14 10:53:02 ryo Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -234,6 +234,8 @@ SignExtend(int bitwidth, uint64_t imm, u db_addr_t db_branch_taken(db_expr_t inst, db_addr_t pc, db_regs_t *regs) { + LE32TOH(inst); + #define INSN_FMT_RN(insn) (((insn) >> 5) & 0x1f) #define INSN_FMT_IMM26(insn) ((insn) & 0x03ffffff) #define INSN_FMT_IMM19(insn) (((insn) >> 5) & 0x7ffff) @@ -267,6 +269,8 @@ db_branch_taken(db_expr_t inst, db_addr_ bool db_inst_unconditional_flow_transfer(db_expr_t inst) { + LE32TOH(inst); + if (((inst & 0xfffffc1f) == 0xd65f0000) || /* ret xN */ ((inst & 0xfc000000) == 0x94000000) || /* bl */ ((inst & 0xfffffc1f) == 0xd63f0000) || /* blr */ Index: src/sys/arch/aarch64/aarch64/trap.c diff -u src/sys/arch/aarch64/aarch64/trap.c:1.36 src/sys/arch/aarch64/aarch64/trap.c:1.37 --- src/sys/arch/aarch64/aarch64/trap.c:1.36 Sun Aug 2 06:58:16 2020 +++ src/sys/arch/aarch64/aarch64/trap.c Mon Sep 14 10:53:02 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.36 2020/08/02 06:58:16 maxv Exp $ */ +/* $NetBSD: trap.c,v 1.37 2020/09/14 10:53:02 ryo Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(1, "$NetBSD: trap.c,v 1.36 2020/08/02 06:58:16 maxv Exp $"); +__KERNEL_RCSID(1, "$NetBSD: trap.c,v 1.37 2020/09/14 10:53:02 ryo Exp $"); #include "opt_arm_intr_impl.h" #include "opt_compat_netbsd32.h" @@ -386,6 +386,7 @@ emul_aarch64_insn(struct trapframe *tf) return EMUL_ARM_FAULT; } + LE32TOH(insn); if ((insn & 0xffffffe0) == 0xd53b0020) { /* mrs x?,ctr_el0 */ unsigned int Xt = insn & 31; Index: src/sys/arch/aarch64/include/db_machdep.h diff -u src/sys/arch/aarch64/include/db_machdep.h:1.10 src/sys/arch/aarch64/include/db_machdep.h:1.11 --- src/sys/arch/aarch64/include/db_machdep.h:1.10 Wed Jul 8 03:45:13 2020 +++ src/sys/arch/aarch64/include/db_machdep.h Mon Sep 14 10:53:02 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: db_machdep.h,v 1.10 2020/07/08 03:45:13 ryo Exp $ */ +/* $NetBSD: db_machdep.h,v 1.11 2020/09/14 10:53:02 ryo Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -76,7 +76,11 @@ typedef uintptr_t db_addr_t; #define BKPT_ADDR(addr) (addr) #define BKPT_SIZE 4 +#ifdef __AARCH64EB__ +#define BKPT_INSN 0x000020d4 /* brk #0 */ +#else #define BKPT_INSN 0xd4200000 /* brk #0 */ +#endif #define BKPT_SET(insn, addr) (BKPT_INSN) typedef struct trapframe db_regs_t; @@ -99,18 +103,21 @@ int kdb_trap(int, struct trapframe *); static inline bool inst_return(db_expr_t insn) { + LE32TOH(insn); return ((insn & 0xfffffc1f) == 0xd65f0000); /* ret xN */ } static inline bool inst_trap_return(db_expr_t insn) { + LE32TOH(insn); return insn == 0xd69f03e0; /* eret */ } static inline bool inst_call(db_expr_t insn) { + LE32TOH(insn); return ((insn & 0xfc000000) == 0x94000000) /* bl */ || ((insn & 0xfffffc1f) == 0xd63f0000); /* blr */ } @@ -118,6 +125,7 @@ inst_call(db_expr_t insn) static inline bool inst_load(db_expr_t insn) { + LE32TOH(insn); return ((insn & 0xffe00c00) == 0xb8800000) || /* ldursw */ /* ldrsw imm{pre,post}idx */ @@ -155,6 +163,7 @@ inst_load(db_expr_t insn) static inline bool inst_store(db_expr_t insn) { + LE32TOH(insn); return ((insn & 0xbfe00000) == 0x88200000) || /* stlxp,stxp */ /* stp {pre,post}idx,stp signed,stnp */ @@ -178,6 +187,7 @@ inst_store(db_expr_t insn) static inline bool inst_branch(db_expr_t insn) { + LE32TOH(insn); return ((insn & 0xff000010) == 0x54000000) || /* b.cond */ ((insn & 0xfc000000) == 0x14000000) || /* b imm */