aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Medhurst <tixy@yxit.co.uk>2011-07-03 10:07:19 -0400
committerTixy <tixy@medhuaa1.miniserver.com>2011-07-13 13:32:47 -0400
commit31656c1a9a9872e2621b2b952294bdea4c23f5bd (patch)
tree2aab95b7d49107b4afcdfac14be50c4b5f406422
parentd691023b62bdf33ed84023330f4d2c77d2325b01 (diff)
ARM: kprobes: Decode 32-bit Thumb data-processing (register) instructions
Signed-off-by: Jon Medhurst <tixy@yxit.co.uk> Acked-by: Nicolas Pitre <nicolas.pitre@linaro.org>
-rw-r--r--arch/arm/kernel/kprobes-thumb.c108
1 files changed, 108 insertions, 0 deletions
diff --git a/arch/arm/kernel/kprobes-thumb.c b/arch/arm/kernel/kprobes-thumb.c
index 9be8bea2990c..7c32e5b03cee 100644
--- a/arch/arm/kernel/kprobes-thumb.c
+++ b/arch/arm/kernel/kprobes-thumb.c
@@ -661,6 +661,108 @@ static const union decode_item t32_table_1111_100x[] = {
661 DECODE_END 661 DECODE_END
662}; 662};
663 663
664static const union decode_item t32_table_1111_1010___1111[] = {
665 /* Data-processing (register) */
666
667 /* ??? 1111 1010 011x xxxx 1111 xxxx 1xxx xxxx */
668 DECODE_REJECT (0xffe0f080, 0xfa60f080),
669
670 /* SXTH 1111 1010 0000 1111 1111 xxxx 1xxx xxxx */
671 /* UXTH 1111 1010 0001 1111 1111 xxxx 1xxx xxxx */
672 /* SXTB16 1111 1010 0010 1111 1111 xxxx 1xxx xxxx */
673 /* UXTB16 1111 1010 0011 1111 1111 xxxx 1xxx xxxx */
674 /* SXTB 1111 1010 0100 1111 1111 xxxx 1xxx xxxx */
675 /* UXTB 1111 1010 0101 1111 1111 xxxx 1xxx xxxx */
676 DECODE_EMULATEX (0xff8ff080, 0xfa0ff080, t32_emulate_rd8rn16rm0_rwflags,
677 REGS(0, 0, NOSPPC, 0, NOSPPC)),
678
679
680 /* ??? 1111 1010 1xxx xxxx 1111 xxxx 0x11 xxxx */
681 DECODE_REJECT (0xff80f0b0, 0xfa80f030),
682 /* ??? 1111 1010 1x11 xxxx 1111 xxxx 0xxx xxxx */
683 DECODE_REJECT (0xffb0f080, 0xfab0f000),
684
685 /* SADD16 1111 1010 1001 xxxx 1111 xxxx 0000 xxxx */
686 /* SASX 1111 1010 1010 xxxx 1111 xxxx 0000 xxxx */
687 /* SSAX 1111 1010 1110 xxxx 1111 xxxx 0000 xxxx */
688 /* SSUB16 1111 1010 1101 xxxx 1111 xxxx 0000 xxxx */
689 /* SADD8 1111 1010 1000 xxxx 1111 xxxx 0000 xxxx */
690 /* SSUB8 1111 1010 1100 xxxx 1111 xxxx 0000 xxxx */
691
692 /* QADD16 1111 1010 1001 xxxx 1111 xxxx 0001 xxxx */
693 /* QASX 1111 1010 1010 xxxx 1111 xxxx 0001 xxxx */
694 /* QSAX 1111 1010 1110 xxxx 1111 xxxx 0001 xxxx */
695 /* QSUB16 1111 1010 1101 xxxx 1111 xxxx 0001 xxxx */
696 /* QADD8 1111 1010 1000 xxxx 1111 xxxx 0001 xxxx */
697 /* QSUB8 1111 1010 1100 xxxx 1111 xxxx 0001 xxxx */
698
699 /* SHADD16 1111 1010 1001 xxxx 1111 xxxx 0010 xxxx */
700 /* SHASX 1111 1010 1010 xxxx 1111 xxxx 0010 xxxx */
701 /* SHSAX 1111 1010 1110 xxxx 1111 xxxx 0010 xxxx */
702 /* SHSUB16 1111 1010 1101 xxxx 1111 xxxx 0010 xxxx */
703 /* SHADD8 1111 1010 1000 xxxx 1111 xxxx 0010 xxxx */
704 /* SHSUB8 1111 1010 1100 xxxx 1111 xxxx 0010 xxxx */
705
706 /* UADD16 1111 1010 1001 xxxx 1111 xxxx 0100 xxxx */
707 /* UASX 1111 1010 1010 xxxx 1111 xxxx 0100 xxxx */
708 /* USAX 1111 1010 1110 xxxx 1111 xxxx 0100 xxxx */
709 /* USUB16 1111 1010 1101 xxxx 1111 xxxx 0100 xxxx */
710 /* UADD8 1111 1010 1000 xxxx 1111 xxxx 0100 xxxx */
711 /* USUB8 1111 1010 1100 xxxx 1111 xxxx 0100 xxxx */
712
713 /* UQADD16 1111 1010 1001 xxxx 1111 xxxx 0101 xxxx */
714 /* UQASX 1111 1010 1010 xxxx 1111 xxxx 0101 xxxx */
715 /* UQSAX 1111 1010 1110 xxxx 1111 xxxx 0101 xxxx */
716 /* UQSUB16 1111 1010 1101 xxxx 1111 xxxx 0101 xxxx */
717 /* UQADD8 1111 1010 1000 xxxx 1111 xxxx 0101 xxxx */
718 /* UQSUB8 1111 1010 1100 xxxx 1111 xxxx 0101 xxxx */
719
720 /* UHADD16 1111 1010 1001 xxxx 1111 xxxx 0110 xxxx */
721 /* UHASX 1111 1010 1010 xxxx 1111 xxxx 0110 xxxx */
722 /* UHSAX 1111 1010 1110 xxxx 1111 xxxx 0110 xxxx */
723 /* UHSUB16 1111 1010 1101 xxxx 1111 xxxx 0110 xxxx */
724 /* UHADD8 1111 1010 1000 xxxx 1111 xxxx 0110 xxxx */
725 /* UHSUB8 1111 1010 1100 xxxx 1111 xxxx 0110 xxxx */
726 DECODE_OR (0xff80f080, 0xfa80f000),
727
728 /* SXTAH 1111 1010 0000 xxxx 1111 xxxx 1xxx xxxx */
729 /* UXTAH 1111 1010 0001 xxxx 1111 xxxx 1xxx xxxx */
730 /* SXTAB16 1111 1010 0010 xxxx 1111 xxxx 1xxx xxxx */
731 /* UXTAB16 1111 1010 0011 xxxx 1111 xxxx 1xxx xxxx */
732 /* SXTAB 1111 1010 0100 xxxx 1111 xxxx 1xxx xxxx */
733 /* UXTAB 1111 1010 0101 xxxx 1111 xxxx 1xxx xxxx */
734 DECODE_OR (0xff80f080, 0xfa00f080),
735
736 /* QADD 1111 1010 1000 xxxx 1111 xxxx 1000 xxxx */
737 /* QDADD 1111 1010 1000 xxxx 1111 xxxx 1001 xxxx */
738 /* QSUB 1111 1010 1000 xxxx 1111 xxxx 1010 xxxx */
739 /* QDSUB 1111 1010 1000 xxxx 1111 xxxx 1011 xxxx */
740 DECODE_OR (0xfff0f0c0, 0xfa80f080),
741
742 /* SEL 1111 1010 1010 xxxx 1111 xxxx 1000 xxxx */
743 DECODE_OR (0xfff0f0f0, 0xfaa0f080),
744
745 /* LSL 1111 1010 000x xxxx 1111 xxxx 0000 xxxx */
746 /* LSR 1111 1010 001x xxxx 1111 xxxx 0000 xxxx */
747 /* ASR 1111 1010 010x xxxx 1111 xxxx 0000 xxxx */
748 /* ROR 1111 1010 011x xxxx 1111 xxxx 0000 xxxx */
749 DECODE_EMULATEX (0xff80f0f0, 0xfa00f000, t32_emulate_rd8rn16rm0_rwflags,
750 REGS(NOSPPC, 0, NOSPPC, 0, NOSPPC)),
751
752 /* CLZ 1111 1010 1010 xxxx 1111 xxxx 1000 xxxx */
753 DECODE_OR (0xfff0f0f0, 0xfab0f080),
754
755 /* REV 1111 1010 1001 xxxx 1111 xxxx 1000 xxxx */
756 /* REV16 1111 1010 1001 xxxx 1111 xxxx 1001 xxxx */
757 /* RBIT 1111 1010 1001 xxxx 1111 xxxx 1010 xxxx */
758 /* REVSH 1111 1010 1001 xxxx 1111 xxxx 1011 xxxx */
759 DECODE_EMULATEX (0xfff0f0c0, 0xfa90f080, t32_emulate_rd8rn16_noflags,
760 REGS(NOSPPC, 0, NOSPPC, 0, SAMEAS16)),
761
762 /* Other unallocated instructions... */
763 DECODE_END
764};
765
664const union decode_item kprobe_decode_thumb32_table[] = { 766const union decode_item kprobe_decode_thumb32_table[] = {
665 767
666 /* 768 /*
@@ -726,6 +828,12 @@ const union decode_item kprobe_decode_thumb32_table[] = {
726 DECODE_TABLE (0xfe000000, 0xf8000000, t32_table_1111_100x), 828 DECODE_TABLE (0xfe000000, 0xf8000000, t32_table_1111_100x),
727 829
728 /* 830 /*
831 * Data-processing (register)
832 * 1111 1010 xxxx xxxx 1111 xxxx xxxx xxxx
833 */
834 DECODE_TABLE (0xff00f000, 0xfa00f000, t32_table_1111_1010___1111),
835
836 /*
729 * Coprocessor instructions 837 * Coprocessor instructions
730 * 1111 11xx xxxx xxxx xxxx xxxx xxxx xxxx 838 * 1111 11xx xxxx xxxx xxxx xxxx xxxx xxxx
731 */ 839 */