diff --git a/sys/arm64/arm64/identcpu.c b/sys/arm64/arm64/identcpu.c --- a/sys/arm64/arm64/identcpu.c +++ b/sys/arm64/arm64/identcpu.c @@ -2555,6 +2555,24 @@ return (false); } +bool +get_user_reg(u_int reg, uint64_t *val, bool fbsd) +{ + int i; + + for (i = 0; i < nitems(user_regs); i++) { + if (user_regs[i].reg == reg) { + if (fbsd) + *val = CPU_DESC_FIELD(user_cpu_desc, i); + else + *val = CPU_DESC_FIELD(l_user_cpu_desc, i); + return (true); + } + } + + return (false); +} + static uint64_t update_special_reg_field(uint64_t user_reg, u_int type, uint64_t value, u_int width, u_int shift, bool sign) diff --git a/sys/arm64/include/cpu.h b/sys/arm64/include/cpu.h --- a/sys/arm64/include/cpu.h +++ b/sys/arm64/include/cpu.h @@ -236,6 +236,7 @@ bool extract_user_id_field(u_int, u_int, uint8_t *); bool get_kernel_reg(u_int, uint64_t *); bool get_kernel_reg_masked(u_int, uint64_t *, uint64_t); +bool get_user_reg(u_int, uint64_t *, bool); void cpu_desc_init(void);