diff options
author | Jon Medhurst <tixy@yxit.co.uk> | 2011-07-03 10:07:19 -0400 |
---|---|---|
committer | Tixy <tixy@medhuaa1.miniserver.com> | 2011-07-13 13:32:47 -0400 |
commit | 31656c1a9a9872e2621b2b952294bdea4c23f5bd (patch) | |
tree | 2aab95b7d49107b4afcdfac14be50c4b5f406422 | |
parent | d691023b62bdf33ed84023330f4d2c77d2325b01 (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.c | 108 |
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 | ||
664 | static 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 | |||
664 | const union decode_item kprobe_decode_thumb32_table[] = { | 766 | const 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 | */ |