@@ -99,10 +99,6 @@ arm_probe_decode_insn(probe_opcode_t insn, struct arch_probe_insn *api)
9999 aarch64_insn_is_blr (insn ) ||
100100 aarch64_insn_is_ret (insn )) {
101101 api -> handler = simulate_br_blr_ret ;
102- } else if (aarch64_insn_is_ldr_lit (insn )) {
103- api -> handler = simulate_ldr_literal ;
104- } else if (aarch64_insn_is_ldrsw_lit (insn )) {
105- api -> handler = simulate_ldrsw_literal ;
106102 } else {
107103 /*
108104 * Instruction cannot be stepped out-of-line and we don't
@@ -140,6 +136,17 @@ arm_kprobe_decode_insn(kprobe_opcode_t *addr, struct arch_specific_insn *asi)
140136 probe_opcode_t insn = le32_to_cpu (* addr );
141137 probe_opcode_t * scan_end = NULL ;
142138 unsigned long size = 0 , offset = 0 ;
139+ struct arch_probe_insn * api = & asi -> api ;
140+
141+ if (aarch64_insn_is_ldr_lit (insn )) {
142+ api -> handler = simulate_ldr_literal ;
143+ decoded = INSN_GOOD_NO_SLOT ;
144+ } else if (aarch64_insn_is_ldrsw_lit (insn )) {
145+ api -> handler = simulate_ldrsw_literal ;
146+ decoded = INSN_GOOD_NO_SLOT ;
147+ } else {
148+ decoded = arm_probe_decode_insn (insn , & asi -> api );
149+ }
143150
144151 /*
145152 * If there's a symbol defined in front of and near enough to
@@ -157,7 +164,6 @@ arm_kprobe_decode_insn(kprobe_opcode_t *addr, struct arch_specific_insn *asi)
157164 else
158165 scan_end = addr - MAX_ATOMIC_CONTEXT_SIZE ;
159166 }
160- decoded = arm_probe_decode_insn (insn , & asi -> api );
161167
162168 if (decoded != INSN_REJECTED && scan_end )
163169 if (is_probed_address_atomic (addr - 1 , scan_end ))
0 commit comments