|
@@ -246,7 +246,8 @@ static __always_inline bool aarch64_insn_is_##abbr(u32 code) \
|
|
static __always_inline u32 aarch64_insn_get_##abbr##_value(void) \
|
|
static __always_inline u32 aarch64_insn_get_##abbr##_value(void) \
|
|
{ return (val); }
|
|
{ return (val); }
|
|
|
|
|
|
-__AARCH64_INSN_FUNCS(adr_adrp, 0x1F000000, 0x10000000)
|
|
|
|
|
|
+__AARCH64_INSN_FUNCS(adr, 0x9F000000, 0x10000000)
|
|
|
|
+__AARCH64_INSN_FUNCS(adrp, 0x9F000000, 0x90000000)
|
|
__AARCH64_INSN_FUNCS(prfm_lit, 0xFF000000, 0xD8000000)
|
|
__AARCH64_INSN_FUNCS(prfm_lit, 0xFF000000, 0xD8000000)
|
|
__AARCH64_INSN_FUNCS(str_reg, 0x3FE0EC00, 0x38206800)
|
|
__AARCH64_INSN_FUNCS(str_reg, 0x3FE0EC00, 0x38206800)
|
|
__AARCH64_INSN_FUNCS(ldr_reg, 0x3FE0EC00, 0x38606800)
|
|
__AARCH64_INSN_FUNCS(ldr_reg, 0x3FE0EC00, 0x38606800)
|
|
@@ -318,6 +319,11 @@ __AARCH64_INSN_FUNCS(msr_reg, 0xFFF00000, 0xD5100000)
|
|
bool aarch64_insn_is_nop(u32 insn);
|
|
bool aarch64_insn_is_nop(u32 insn);
|
|
bool aarch64_insn_is_branch_imm(u32 insn);
|
|
bool aarch64_insn_is_branch_imm(u32 insn);
|
|
|
|
|
|
|
|
+static inline bool aarch64_insn_is_adr_adrp(u32 insn)
|
|
|
|
+{
|
|
|
|
+ return aarch64_insn_is_adr(insn) || aarch64_insn_is_adrp(insn);
|
|
|
|
+}
|
|
|
|
+
|
|
int aarch64_insn_read(void *addr, u32 *insnp);
|
|
int aarch64_insn_read(void *addr, u32 *insnp);
|
|
int aarch64_insn_write(void *addr, u32 insn);
|
|
int aarch64_insn_write(void *addr, u32 insn);
|
|
enum aarch64_insn_encoding_class aarch64_get_insn_class(u32 insn);
|
|
enum aarch64_insn_encoding_class aarch64_get_insn_class(u32 insn);
|
|
@@ -398,6 +404,9 @@ int aarch64_insn_patch_text_nosync(void *addr, u32 insn);
|
|
int aarch64_insn_patch_text_sync(void *addrs[], u32 insns[], int cnt);
|
|
int aarch64_insn_patch_text_sync(void *addrs[], u32 insns[], int cnt);
|
|
int aarch64_insn_patch_text(void *addrs[], u32 insns[], int cnt);
|
|
int aarch64_insn_patch_text(void *addrs[], u32 insns[], int cnt);
|
|
|
|
|
|
|
|
+s32 aarch64_insn_adrp_get_offset(u32 insn);
|
|
|
|
+u32 aarch64_insn_adrp_set_offset(u32 insn, s32 offset);
|
|
|
|
+
|
|
bool aarch32_insn_is_wide(u32 insn);
|
|
bool aarch32_insn_is_wide(u32 insn);
|
|
|
|
|
|
#define A32_RN_OFFSET 16
|
|
#define A32_RN_OFFSET 16
|