diff options
| -rw-r--r-- | arch/arm/kernel/kprobes-arm.c | 44 |
1 files changed, 30 insertions, 14 deletions
diff --git a/arch/arm/kernel/kprobes-arm.c b/arch/arm/kernel/kprobes-arm.c index d252e7821fcc..1ee38adeb82d 100644 --- a/arch/arm/kernel/kprobes-arm.c +++ b/arch/arm/kernel/kprobes-arm.c | |||
| @@ -1275,19 +1275,25 @@ static const union decode_item arm_cccc_000x_____1xx1_table[] = { | |||
| 1275 | DECODE_EMULATEX (0x0e5000d0, 0x004000d0, emulate_ldrdstrd, | 1275 | DECODE_EMULATEX (0x0e5000d0, 0x004000d0, emulate_ldrdstrd, |
| 1276 | REGS(NOPCWB, NOPCX, 0, 0, 0)), | 1276 | REGS(NOPCWB, NOPCX, 0, 0, 0)), |
| 1277 | 1277 | ||
| 1278 | /* Reject Rd is PC */ | ||
| 1279 | /* TODO: fold this into next entry when it is made a DECODE_EMULATE */ | ||
| 1280 | DECODE_REJECT (0x0000f000, 0x0000f000), | ||
| 1281 | |||
| 1282 | /* STRH (register) cccc 000x x0x0 xxxx xxxx xxxx 1011 xxxx */ | 1278 | /* STRH (register) cccc 000x x0x0 xxxx xxxx xxxx 1011 xxxx */ |
| 1279 | DECODE_EMULATEX (0x0e5000f0, 0x000000b0, emulate_str, | ||
| 1280 | REGS(NOPCWB, NOPC, 0, 0, NOPC)), | ||
| 1281 | |||
| 1283 | /* LDRH (register) cccc 000x x0x1 xxxx xxxx xxxx 1011 xxxx */ | 1282 | /* LDRH (register) cccc 000x x0x1 xxxx xxxx xxxx 1011 xxxx */ |
| 1284 | /* LDRSB (register) cccc 000x x0x1 xxxx xxxx xxxx 1101 xxxx */ | 1283 | /* LDRSB (register) cccc 000x x0x1 xxxx xxxx xxxx 1101 xxxx */ |
| 1285 | /* LDRSH (register) cccc 000x x0x1 xxxx xxxx xxxx 1111 xxxx */ | 1284 | /* LDRSH (register) cccc 000x x0x1 xxxx xxxx xxxx 1111 xxxx */ |
| 1285 | DECODE_EMULATEX (0x0e500090, 0x00100090, emulate_ldr, | ||
| 1286 | REGS(NOPCWB, NOPC, 0, 0, NOPC)), | ||
| 1287 | |||
| 1286 | /* STRH (immediate) cccc 000x x1x0 xxxx xxxx xxxx 1011 xxxx */ | 1288 | /* STRH (immediate) cccc 000x x1x0 xxxx xxxx xxxx 1011 xxxx */ |
| 1289 | DECODE_EMULATEX (0x0e5000f0, 0x004000b0, emulate_str, | ||
| 1290 | REGS(NOPCWB, NOPC, 0, 0, 0)), | ||
| 1291 | |||
| 1287 | /* LDRH (immediate) cccc 000x x1x1 xxxx xxxx xxxx 1011 xxxx */ | 1292 | /* LDRH (immediate) cccc 000x x1x1 xxxx xxxx xxxx 1011 xxxx */ |
| 1288 | /* LDRSB (immediate) cccc 000x x1x1 xxxx xxxx xxxx 1101 xxxx */ | 1293 | /* LDRSB (immediate) cccc 000x x1x1 xxxx xxxx xxxx 1101 xxxx */ |
| 1289 | /* LDRSH (immediate) cccc 000x x1x1 xxxx xxxx xxxx 1111 xxxx */ | 1294 | /* LDRSH (immediate) cccc 000x x1x1 xxxx xxxx xxxx 1111 xxxx */ |
| 1290 | DECODE_CUSTOM (0x0e000090, 0x00000090, prep_emulate_ldr_str), | 1295 | DECODE_EMULATEX (0x0e500090, 0x00500090, emulate_ldr, |
| 1296 | REGS(NOPCWB, NOPC, 0, 0, 0)), | ||
| 1291 | 1297 | ||
| 1292 | DECODE_END | 1298 | DECODE_END |
| 1293 | }; | 1299 | }; |
| @@ -1558,15 +1564,25 @@ static const union decode_item arm_cccc_01xx_table[] = { | |||
| 1558 | /* LDRB/STRB pc,[...] cccc 01xx x0xx xxxx xxxx xxxx xxxx xxxx */ | 1564 | /* LDRB/STRB pc,[...] cccc 01xx x0xx xxxx xxxx xxxx xxxx xxxx */ |
| 1559 | DECODE_REJECT (0x0c40f000, 0x0440f000), | 1565 | DECODE_REJECT (0x0c40f000, 0x0440f000), |
| 1560 | 1566 | ||
| 1561 | /* LDR cccc 01xx x0x1 xxxx xxxx xxxx xxxx xxxx */ | 1567 | /* STR (immediate) cccc 010x x0x0 xxxx xxxx xxxx xxxx xxxx */ |
| 1562 | /* LDRB cccc 01xx x1x1 xxxx xxxx xxxx xxxx xxxx */ | 1568 | /* STRB (immediate) cccc 010x x1x0 xxxx xxxx xxxx xxxx xxxx */ |
| 1563 | /* LDRBT cccc 01x0 x111 xxxx xxxx xxxx xxxx xxxx */ | 1569 | DECODE_EMULATEX (0x0e100000, 0x04000000, emulate_str, |
| 1564 | /* LDRT cccc 01x0 x011 xxxx xxxx xxxx xxxx xxxx */ | 1570 | REGS(NOPCWB, ANY, 0, 0, 0)), |
| 1565 | /* STR cccc 01xx x0x0 xxxx xxxx xxxx xxxx xxxx */ | 1571 | |
| 1566 | /* STRB cccc 01xx x1x0 xxxx xxxx xxxx xxxx xxxx */ | 1572 | /* LDR (immediate) cccc 010x x0x1 xxxx xxxx xxxx xxxx xxxx */ |
| 1567 | /* STRBT cccc 01x0 x110 xxxx xxxx xxxx xxxx xxxx */ | 1573 | /* LDRB (immediate) cccc 010x x1x1 xxxx xxxx xxxx xxxx xxxx */ |
| 1568 | /* STRT cccc 01x0 x010 xxxx xxxx xxxx xxxx xxxx */ | 1574 | DECODE_EMULATEX (0x0e100000, 0x04100000, emulate_ldr, |
| 1569 | DECODE_CUSTOM (0x0c000000, 0x04000000, prep_emulate_ldr_str), | 1575 | REGS(NOPCWB, ANY, 0, 0, 0)), |
| 1576 | |||
| 1577 | /* STR (register) cccc 011x x0x0 xxxx xxxx xxxx xxxx xxxx */ | ||
| 1578 | /* STRB (register) cccc 011x x1x0 xxxx xxxx xxxx xxxx xxxx */ | ||
| 1579 | DECODE_EMULATEX (0x0e100000, 0x06000000, emulate_str, | ||
| 1580 | REGS(NOPCWB, ANY, 0, 0, NOPC)), | ||
| 1581 | |||
| 1582 | /* LDR (register) cccc 011x x0x1 xxxx xxxx xxxx xxxx xxxx */ | ||
| 1583 | /* LDRB (register) cccc 011x x1x1 xxxx xxxx xxxx xxxx xxxx */ | ||
| 1584 | DECODE_EMULATEX (0x0e100000, 0x06100000, emulate_ldr, | ||
| 1585 | REGS(NOPCWB, ANY, 0, 0, NOPC)), | ||
| 1570 | 1586 | ||
| 1571 | DECODE_END | 1587 | DECODE_END |
| 1572 | }; | 1588 | }; |
