diff options
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/kernel/kprobes-decode.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/arch/arm/kernel/kprobes-decode.c b/arch/arm/kernel/kprobes-decode.c index 54c175906787..8f3f03e46ace 100644 --- a/arch/arm/kernel/kprobes-decode.c +++ b/arch/arm/kernel/kprobes-decode.c | |||
@@ -1102,13 +1102,16 @@ space_cccc_000x(kprobe_opcode_t insn, struct arch_specific_insn *asi) | |||
1102 | } | 1102 | } |
1103 | 1103 | ||
1104 | /* cccc 0000 xxxx xxxx xxxx xxxx xxxx 1001 xxxx */ | 1104 | /* cccc 0000 xxxx xxxx xxxx xxxx xxxx 1001 xxxx */ |
1105 | else if ((insn & 0x0f000090) == 0x00000090) { | 1105 | else if ((insn & 0x0f0000f0) == 0x00000090) { |
1106 | 1106 | ||
1107 | /* MUL : cccc 0000 0000 xxxx xxxx xxxx 1001 xxxx : */ | 1107 | /* MUL : cccc 0000 0000 xxxx xxxx xxxx 1001 xxxx : */ |
1108 | /* MULS : cccc 0000 0001 xxxx xxxx xxxx 1001 xxxx :cc */ | 1108 | /* MULS : cccc 0000 0001 xxxx xxxx xxxx 1001 xxxx :cc */ |
1109 | /* MLA : cccc 0000 0010 xxxx xxxx xxxx 1001 xxxx : */ | 1109 | /* MLA : cccc 0000 0010 xxxx xxxx xxxx 1001 xxxx : */ |
1110 | /* MLAS : cccc 0000 0011 xxxx xxxx xxxx 1001 xxxx :cc */ | 1110 | /* MLAS : cccc 0000 0011 xxxx xxxx xxxx 1001 xxxx :cc */ |
1111 | /* UMAAL : cccc 0000 0100 xxxx xxxx xxxx 1001 xxxx : */ | 1111 | /* UMAAL : cccc 0000 0100 xxxx xxxx xxxx 1001 xxxx : */ |
1112 | /* undef : cccc 0000 0101 xxxx xxxx xxxx 1001 xxxx : */ | ||
1113 | /* MLS : cccc 0000 0110 xxxx xxxx xxxx 1001 xxxx : */ | ||
1114 | /* undef : cccc 0000 0111 xxxx xxxx xxxx 1001 xxxx : */ | ||
1112 | /* UMULL : cccc 0000 1000 xxxx xxxx xxxx 1001 xxxx : */ | 1115 | /* UMULL : cccc 0000 1000 xxxx xxxx xxxx 1001 xxxx : */ |
1113 | /* UMULLS : cccc 0000 1001 xxxx xxxx xxxx 1001 xxxx :cc */ | 1116 | /* UMULLS : cccc 0000 1001 xxxx xxxx xxxx 1001 xxxx :cc */ |
1114 | /* UMLAL : cccc 0000 1010 xxxx xxxx xxxx 1001 xxxx : */ | 1117 | /* UMLAL : cccc 0000 1010 xxxx xxxx xxxx 1001 xxxx : */ |
@@ -1117,9 +1120,11 @@ space_cccc_000x(kprobe_opcode_t insn, struct arch_specific_insn *asi) | |||
1117 | /* SMULLS : cccc 0000 1101 xxxx xxxx xxxx 1001 xxxx :cc */ | 1120 | /* SMULLS : cccc 0000 1101 xxxx xxxx xxxx 1001 xxxx :cc */ |
1118 | /* SMLAL : cccc 0000 1110 xxxx xxxx xxxx 1001 xxxx : */ | 1121 | /* SMLAL : cccc 0000 1110 xxxx xxxx xxxx 1001 xxxx : */ |
1119 | /* SMLALS : cccc 0000 1111 xxxx xxxx xxxx 1001 xxxx :cc */ | 1122 | /* SMLALS : cccc 0000 1111 xxxx xxxx xxxx 1001 xxxx :cc */ |
1120 | if ((insn & 0x0fe000f0) == 0x00000090) { | 1123 | if ((insn & 0x00d00000) == 0x00500000) { |
1124 | return INSN_REJECTED; | ||
1125 | } else if ((insn & 0x00e00000) == 0x00000000) { | ||
1121 | return prep_emulate_rd16rs8rm0_wflags(insn, asi); | 1126 | return prep_emulate_rd16rs8rm0_wflags(insn, asi); |
1122 | } else if ((insn & 0x0fe000f0) == 0x00200090) { | 1127 | } else if ((insn & 0x00a00000) == 0x00200000) { |
1123 | return prep_emulate_rd16rn12rs8rm0_wflags(insn, asi); | 1128 | return prep_emulate_rd16rn12rs8rm0_wflags(insn, asi); |
1124 | } else { | 1129 | } else { |
1125 | return prep_emulate_rdhi16rdlo12rs8rm0_wflags(insn, asi); | 1130 | return prep_emulate_rdhi16rdlo12rs8rm0_wflags(insn, asi); |