riscv: add macro to get instruction length
Extract the calculation of instruction length for common use. Signed-off-by: Zong Li <zong.li@sifive.com> Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
This commit is contained in:
parent
d27c3c9081
commit
b42d763a2d
|
@ -19,6 +19,14 @@
|
|||
#define __BUG_INSN_32 _UL(0x00100073) /* ebreak */
|
||||
#define __BUG_INSN_16 _UL(0x9002) /* c.ebreak */
|
||||
|
||||
#define GET_INSN_LENGTH(insn) \
|
||||
({ \
|
||||
unsigned long __len; \
|
||||
__len = ((insn & __INSN_LENGTH_MASK) == __INSN_LENGTH_32) ? \
|
||||
4UL : 2UL; \
|
||||
__len; \
|
||||
})
|
||||
|
||||
typedef u32 bug_insn_t;
|
||||
|
||||
#ifdef CONFIG_GENERIC_BUG_RELATIVE_POINTERS
|
||||
|
|
|
@ -118,7 +118,8 @@ static inline unsigned long get_break_insn_length(unsigned long pc)
|
|||
|
||||
if (probe_kernel_address((bug_insn_t *)pc, insn))
|
||||
return 0;
|
||||
return (((insn & __INSN_LENGTH_MASK) == __INSN_LENGTH_32) ? 4UL : 2UL);
|
||||
|
||||
return GET_INSN_LENGTH(insn);
|
||||
}
|
||||
|
||||
asmlinkage __visible void do_trap_break(struct pt_regs *regs)
|
||||
|
|
Loading…
Reference in New Issue
Block a user