aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZi Shen Lim <zlim.lnx@gmail.com>2016-01-14 02:33:21 -0500
committerDavid S. Miller <davem@davemloft.net>2016-01-17 19:15:26 -0500
commitc94ae4f7c5ec6b6fddde1c08809d5e32a963d7f3 (patch)
treee0041c10278e7105b9979a3aac92eda349559db4
parentdd7445ad6be3809565272b0e724f2f00c2de1989 (diff)
arm64: insn: remove BUG_ON from codegen
During code generation, we used to BUG_ON unknown/unsupported encoding or invalid parameters. Instead, now we report these as errors and simply return the instruction AARCH64_BREAK_FAULT. Users of these codegen helpers should check for and handle this failure condition as appropriate. Otherwise, unhandled codegen failure will result in trapping at run-time due to AARCH64_BREAK_FAULT, which is arguably better than a BUG_ON. Signed-off-by: Zi Shen Lim <zlim.lnx@gmail.com> Acked-by: Will Deacon <will.deacon@arm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--arch/arm64/kernel/insn.c165
1 files changed, 112 insertions, 53 deletions
diff --git a/arch/arm64/kernel/insn.c b/arch/arm64/kernel/insn.c
index c08b9ad6f429..7371455160e5 100644
--- a/arch/arm64/kernel/insn.c
+++ b/arch/arm64/kernel/insn.c
@@ -2,7 +2,7 @@
2 * Copyright (C) 2013 Huawei Ltd. 2 * Copyright (C) 2013 Huawei Ltd.
3 * Author: Jiang Liu <liuj97@gmail.com> 3 * Author: Jiang Liu <liuj97@gmail.com>
4 * 4 *
5 * Copyright (C) 2014 Zi Shen Lim <zlim.lnx@gmail.com> 5 * Copyright (C) 2014-2016 Zi Shen Lim <zlim.lnx@gmail.com>
6 * 6 *
7 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as 8 * it under the terms of the GNU General Public License version 2 as
@@ -363,6 +363,9 @@ u32 __kprobes aarch64_insn_encode_immediate(enum aarch64_insn_imm_type type,
363 u32 immlo, immhi, mask; 363 u32 immlo, immhi, mask;
364 int shift; 364 int shift;
365 365
366 if (insn == AARCH64_BREAK_FAULT)
367 return AARCH64_BREAK_FAULT;
368
366 switch (type) { 369 switch (type) {
367 case AARCH64_INSN_IMM_ADR: 370 case AARCH64_INSN_IMM_ADR:
368 shift = 0; 371 shift = 0;
@@ -377,7 +380,7 @@ u32 __kprobes aarch64_insn_encode_immediate(enum aarch64_insn_imm_type type,
377 if (aarch64_get_imm_shift_mask(type, &mask, &shift) < 0) { 380 if (aarch64_get_imm_shift_mask(type, &mask, &shift) < 0) {
378 pr_err("aarch64_insn_encode_immediate: unknown immediate encoding %d\n", 381 pr_err("aarch64_insn_encode_immediate: unknown immediate encoding %d\n",
379 type); 382 type);
380 return 0; 383 return AARCH64_BREAK_FAULT;
381 } 384 }
382 } 385 }
383 386
@@ -394,9 +397,12 @@ static u32 aarch64_insn_encode_register(enum aarch64_insn_register_type type,
394{ 397{
395 int shift; 398 int shift;
396 399
400 if (insn == AARCH64_BREAK_FAULT)
401 return AARCH64_BREAK_FAULT;
402
397 if (reg < AARCH64_INSN_REG_0 || reg > AARCH64_INSN_REG_SP) { 403 if (reg < AARCH64_INSN_REG_0 || reg > AARCH64_INSN_REG_SP) {
398 pr_err("%s: unknown register encoding %d\n", __func__, reg); 404 pr_err("%s: unknown register encoding %d\n", __func__, reg);
399 return 0; 405 return AARCH64_BREAK_FAULT;
400 } 406 }
401 407
402 switch (type) { 408 switch (type) {
@@ -417,7 +423,7 @@ static u32 aarch64_insn_encode_register(enum aarch64_insn_register_type type,
417 default: 423 default:
418 pr_err("%s: unknown register type encoding %d\n", __func__, 424 pr_err("%s: unknown register type encoding %d\n", __func__,
419 type); 425 type);
420 return 0; 426 return AARCH64_BREAK_FAULT;
421 } 427 }
422 428
423 insn &= ~(GENMASK(4, 0) << shift); 429 insn &= ~(GENMASK(4, 0) << shift);
@@ -446,7 +452,7 @@ static u32 aarch64_insn_encode_ldst_size(enum aarch64_insn_size_type type,
446 break; 452 break;
447 default: 453 default:
448 pr_err("%s: unknown size encoding %d\n", __func__, type); 454 pr_err("%s: unknown size encoding %d\n", __func__, type);
449 return 0; 455 return AARCH64_BREAK_FAULT;
450 } 456 }
451 457
452 insn &= ~GENMASK(31, 30); 458 insn &= ~GENMASK(31, 30);
@@ -460,14 +466,17 @@ static inline long branch_imm_common(unsigned long pc, unsigned long addr,
460{ 466{
461 long offset; 467 long offset;
462 468
463 /* 469 if ((pc & 0x3) || (addr & 0x3)) {
464 * PC: A 64-bit Program Counter holding the address of the current 470 pr_err("%s: A64 instructions must be word aligned\n", __func__);
465 * instruction. A64 instructions must be word-aligned. 471 return range;
466 */ 472 }
467 BUG_ON((pc & 0x3) || (addr & 0x3));
468 473
469 offset = ((long)addr - (long)pc); 474 offset = ((long)addr - (long)pc);
470 BUG_ON(offset < -range || offset >= range); 475
476 if (offset < -range || offset >= range) {
477 pr_err("%s: offset out of range\n", __func__);
478 return range;
479 }
471 480
472 return offset; 481 return offset;
473} 482}
@@ -484,6 +493,8 @@ u32 __kprobes aarch64_insn_gen_branch_imm(unsigned long pc, unsigned long addr,
484 * texts are within +/-128M. 493 * texts are within +/-128M.
485 */ 494 */
486 offset = branch_imm_common(pc, addr, SZ_128M); 495 offset = branch_imm_common(pc, addr, SZ_128M);
496 if (offset >= SZ_128M)
497 return AARCH64_BREAK_FAULT;
487 498
488 switch (type) { 499 switch (type) {
489 case AARCH64_INSN_BRANCH_LINK: 500 case AARCH64_INSN_BRANCH_LINK:
@@ -493,7 +504,7 @@ u32 __kprobes aarch64_insn_gen_branch_imm(unsigned long pc, unsigned long addr,
493 insn = aarch64_insn_get_b_value(); 504 insn = aarch64_insn_get_b_value();
494 break; 505 break;
495 default: 506 default:
496 BUG_ON(1); 507 pr_err("%s: unknown branch encoding %d\n", __func__, type);
497 return AARCH64_BREAK_FAULT; 508 return AARCH64_BREAK_FAULT;
498 } 509 }
499 510
@@ -510,6 +521,8 @@ u32 aarch64_insn_gen_comp_branch_imm(unsigned long pc, unsigned long addr,
510 long offset; 521 long offset;
511 522
512 offset = branch_imm_common(pc, addr, SZ_1M); 523 offset = branch_imm_common(pc, addr, SZ_1M);
524 if (offset >= SZ_1M)
525 return AARCH64_BREAK_FAULT;
513 526
514 switch (type) { 527 switch (type) {
515 case AARCH64_INSN_BRANCH_COMP_ZERO: 528 case AARCH64_INSN_BRANCH_COMP_ZERO:
@@ -519,7 +532,7 @@ u32 aarch64_insn_gen_comp_branch_imm(unsigned long pc, unsigned long addr,
519 insn = aarch64_insn_get_cbnz_value(); 532 insn = aarch64_insn_get_cbnz_value();
520 break; 533 break;
521 default: 534 default:
522 BUG_ON(1); 535 pr_err("%s: unknown branch encoding %d\n", __func__, type);
523 return AARCH64_BREAK_FAULT; 536 return AARCH64_BREAK_FAULT;
524 } 537 }
525 538
@@ -530,7 +543,7 @@ u32 aarch64_insn_gen_comp_branch_imm(unsigned long pc, unsigned long addr,
530 insn |= AARCH64_INSN_SF_BIT; 543 insn |= AARCH64_INSN_SF_BIT;
531 break; 544 break;
532 default: 545 default:
533 BUG_ON(1); 546 pr_err("%s: unknown variant encoding %d\n", __func__, variant);
534 return AARCH64_BREAK_FAULT; 547 return AARCH64_BREAK_FAULT;
535 } 548 }
536 549
@@ -550,7 +563,10 @@ u32 aarch64_insn_gen_cond_branch_imm(unsigned long pc, unsigned long addr,
550 563
551 insn = aarch64_insn_get_bcond_value(); 564 insn = aarch64_insn_get_bcond_value();
552 565
553 BUG_ON(cond < AARCH64_INSN_COND_EQ || cond > AARCH64_INSN_COND_AL); 566 if (cond < AARCH64_INSN_COND_EQ || cond > AARCH64_INSN_COND_AL) {
567 pr_err("%s: unknown condition encoding %d\n", __func__, cond);
568 return AARCH64_BREAK_FAULT;
569 }
554 insn |= cond; 570 insn |= cond;
555 571
556 return aarch64_insn_encode_immediate(AARCH64_INSN_IMM_19, insn, 572 return aarch64_insn_encode_immediate(AARCH64_INSN_IMM_19, insn,
@@ -583,7 +599,7 @@ u32 aarch64_insn_gen_branch_reg(enum aarch64_insn_register reg,
583 insn = aarch64_insn_get_ret_value(); 599 insn = aarch64_insn_get_ret_value();
584 break; 600 break;
585 default: 601 default:
586 BUG_ON(1); 602 pr_err("%s: unknown branch encoding %d\n", __func__, type);
587 return AARCH64_BREAK_FAULT; 603 return AARCH64_BREAK_FAULT;
588 } 604 }
589 605
@@ -606,7 +622,7 @@ u32 aarch64_insn_gen_load_store_reg(enum aarch64_insn_register reg,
606 insn = aarch64_insn_get_str_reg_value(); 622 insn = aarch64_insn_get_str_reg_value();
607 break; 623 break;
608 default: 624 default:
609 BUG_ON(1); 625 pr_err("%s: unknown load/store encoding %d\n", __func__, type);
610 return AARCH64_BREAK_FAULT; 626 return AARCH64_BREAK_FAULT;
611 } 627 }
612 628
@@ -645,26 +661,30 @@ u32 aarch64_insn_gen_load_store_pair(enum aarch64_insn_register reg1,
645 insn = aarch64_insn_get_stp_post_value(); 661 insn = aarch64_insn_get_stp_post_value();
646 break; 662 break;
647 default: 663 default:
648 BUG_ON(1); 664 pr_err("%s: unknown load/store encoding %d\n", __func__, type);
649 return AARCH64_BREAK_FAULT; 665 return AARCH64_BREAK_FAULT;
650 } 666 }
651 667
652 switch (variant) { 668 switch (variant) {
653 case AARCH64_INSN_VARIANT_32BIT: 669 case AARCH64_INSN_VARIANT_32BIT:
654 /* offset must be multiples of 4 in the range [-256, 252] */ 670 if ((offset & 0x3) || (offset < -256) || (offset > 252)) {
655 BUG_ON(offset & 0x3); 671 pr_err("%s: offset must be multiples of 4 in the range of [-256, 252] %d\n",
656 BUG_ON(offset < -256 || offset > 252); 672 __func__, offset);
673 return AARCH64_BREAK_FAULT;
674 }
657 shift = 2; 675 shift = 2;
658 break; 676 break;
659 case AARCH64_INSN_VARIANT_64BIT: 677 case AARCH64_INSN_VARIANT_64BIT:
660 /* offset must be multiples of 8 in the range [-512, 504] */ 678 if ((offset & 0x7) || (offset < -512) || (offset > 504)) {
661 BUG_ON(offset & 0x7); 679 pr_err("%s: offset must be multiples of 8 in the range of [-512, 504] %d\n",
662 BUG_ON(offset < -512 || offset > 504); 680 __func__, offset);
681 return AARCH64_BREAK_FAULT;
682 }
663 shift = 3; 683 shift = 3;
664 insn |= AARCH64_INSN_SF_BIT; 684 insn |= AARCH64_INSN_SF_BIT;
665 break; 685 break;
666 default: 686 default:
667 BUG_ON(1); 687 pr_err("%s: unknown variant encoding %d\n", __func__, variant);
668 return AARCH64_BREAK_FAULT; 688 return AARCH64_BREAK_FAULT;
669 } 689 }
670 690
@@ -702,7 +722,7 @@ u32 aarch64_insn_gen_add_sub_imm(enum aarch64_insn_register dst,
702 insn = aarch64_insn_get_subs_imm_value(); 722 insn = aarch64_insn_get_subs_imm_value();
703 break; 723 break;
704 default: 724 default:
705 BUG_ON(1); 725 pr_err("%s: unknown add/sub encoding %d\n", __func__, type);
706 return AARCH64_BREAK_FAULT; 726 return AARCH64_BREAK_FAULT;
707 } 727 }
708 728
@@ -713,11 +733,14 @@ u32 aarch64_insn_gen_add_sub_imm(enum aarch64_insn_register dst,
713 insn |= AARCH64_INSN_SF_BIT; 733 insn |= AARCH64_INSN_SF_BIT;
714 break; 734 break;
715 default: 735 default:
716 BUG_ON(1); 736 pr_err("%s: unknown variant encoding %d\n", __func__, variant);
717 return AARCH64_BREAK_FAULT; 737 return AARCH64_BREAK_FAULT;
718 } 738 }
719 739
720 BUG_ON(imm & ~(SZ_4K - 1)); 740 if (imm & ~(SZ_4K - 1)) {
741 pr_err("%s: invalid immediate encoding %d\n", __func__, imm);
742 return AARCH64_BREAK_FAULT;
743 }
721 744
722 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RD, insn, dst); 745 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RD, insn, dst);
723 746
@@ -746,7 +769,7 @@ u32 aarch64_insn_gen_bitfield(enum aarch64_insn_register dst,
746 insn = aarch64_insn_get_sbfm_value(); 769 insn = aarch64_insn_get_sbfm_value();
747 break; 770 break;
748 default: 771 default:
749 BUG_ON(1); 772 pr_err("%s: unknown bitfield encoding %d\n", __func__, type);
750 return AARCH64_BREAK_FAULT; 773 return AARCH64_BREAK_FAULT;
751 } 774 }
752 775
@@ -759,12 +782,18 @@ u32 aarch64_insn_gen_bitfield(enum aarch64_insn_register dst,
759 mask = GENMASK(5, 0); 782 mask = GENMASK(5, 0);
760 break; 783 break;
761 default: 784 default:
762 BUG_ON(1); 785 pr_err("%s: unknown variant encoding %d\n", __func__, variant);
763 return AARCH64_BREAK_FAULT; 786 return AARCH64_BREAK_FAULT;
764 } 787 }
765 788
766 BUG_ON(immr & ~mask); 789 if (immr & ~mask) {
767 BUG_ON(imms & ~mask); 790 pr_err("%s: invalid immr encoding %d\n", __func__, immr);
791 return AARCH64_BREAK_FAULT;
792 }
793 if (imms & ~mask) {
794 pr_err("%s: invalid imms encoding %d\n", __func__, imms);
795 return AARCH64_BREAK_FAULT;
796 }
768 797
769 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RD, insn, dst); 798 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RD, insn, dst);
770 799
@@ -793,23 +822,33 @@ u32 aarch64_insn_gen_movewide(enum aarch64_insn_register dst,
793 insn = aarch64_insn_get_movn_value(); 822 insn = aarch64_insn_get_movn_value();
794 break; 823 break;
795 default: 824 default:
796 BUG_ON(1); 825 pr_err("%s: unknown movewide encoding %d\n", __func__, type);
797 return AARCH64_BREAK_FAULT; 826 return AARCH64_BREAK_FAULT;
798 } 827 }
799 828
800 BUG_ON(imm & ~(SZ_64K - 1)); 829 if (imm & ~(SZ_64K - 1)) {
830 pr_err("%s: invalid immediate encoding %d\n", __func__, imm);
831 return AARCH64_BREAK_FAULT;
832 }
801 833
802 switch (variant) { 834 switch (variant) {
803 case AARCH64_INSN_VARIANT_32BIT: 835 case AARCH64_INSN_VARIANT_32BIT:
804 BUG_ON(shift != 0 && shift != 16); 836 if (shift != 0 && shift != 16) {
837 pr_err("%s: invalid shift encoding %d\n", __func__,
838 shift);
839 return AARCH64_BREAK_FAULT;
840 }
805 break; 841 break;
806 case AARCH64_INSN_VARIANT_64BIT: 842 case AARCH64_INSN_VARIANT_64BIT:
807 insn |= AARCH64_INSN_SF_BIT; 843 insn |= AARCH64_INSN_SF_BIT;
808 BUG_ON(shift != 0 && shift != 16 && shift != 32 && 844 if (shift != 0 && shift != 16 && shift != 32 && shift != 48) {
809 shift != 48); 845 pr_err("%s: invalid shift encoding %d\n", __func__,
846 shift);
847 return AARCH64_BREAK_FAULT;
848 }
810 break; 849 break;
811 default: 850 default:
812 BUG_ON(1); 851 pr_err("%s: unknown variant encoding %d\n", __func__, variant);
813 return AARCH64_BREAK_FAULT; 852 return AARCH64_BREAK_FAULT;
814 } 853 }
815 854
@@ -843,20 +882,28 @@ u32 aarch64_insn_gen_add_sub_shifted_reg(enum aarch64_insn_register dst,
843 insn = aarch64_insn_get_subs_value(); 882 insn = aarch64_insn_get_subs_value();
844 break; 883 break;
845 default: 884 default:
846 BUG_ON(1); 885 pr_err("%s: unknown add/sub encoding %d\n", __func__, type);
847 return AARCH64_BREAK_FAULT; 886 return AARCH64_BREAK_FAULT;
848 } 887 }
849 888
850 switch (variant) { 889 switch (variant) {
851 case AARCH64_INSN_VARIANT_32BIT: 890 case AARCH64_INSN_VARIANT_32BIT:
852 BUG_ON(shift & ~(SZ_32 - 1)); 891 if (shift & ~(SZ_32 - 1)) {
892 pr_err("%s: invalid shift encoding %d\n", __func__,
893 shift);
894 return AARCH64_BREAK_FAULT;
895 }
853 break; 896 break;
854 case AARCH64_INSN_VARIANT_64BIT: 897 case AARCH64_INSN_VARIANT_64BIT:
855 insn |= AARCH64_INSN_SF_BIT; 898 insn |= AARCH64_INSN_SF_BIT;
856 BUG_ON(shift & ~(SZ_64 - 1)); 899 if (shift & ~(SZ_64 - 1)) {
900 pr_err("%s: invalid shift encoding %d\n", __func__,
901 shift);
902 return AARCH64_BREAK_FAULT;
903 }
857 break; 904 break;
858 default: 905 default:
859 BUG_ON(1); 906 pr_err("%s: unknown variant encoding %d\n", __func__, variant);
860 return AARCH64_BREAK_FAULT; 907 return AARCH64_BREAK_FAULT;
861 } 908 }
862 909
@@ -885,11 +932,15 @@ u32 aarch64_insn_gen_data1(enum aarch64_insn_register dst,
885 insn = aarch64_insn_get_rev32_value(); 932 insn = aarch64_insn_get_rev32_value();
886 break; 933 break;
887 case AARCH64_INSN_DATA1_REVERSE_64: 934 case AARCH64_INSN_DATA1_REVERSE_64:
888 BUG_ON(variant != AARCH64_INSN_VARIANT_64BIT); 935 if (variant != AARCH64_INSN_VARIANT_64BIT) {
936 pr_err("%s: invalid variant for reverse64 %d\n",
937 __func__, variant);
938 return AARCH64_BREAK_FAULT;
939 }
889 insn = aarch64_insn_get_rev64_value(); 940 insn = aarch64_insn_get_rev64_value();
890 break; 941 break;
891 default: 942 default:
892 BUG_ON(1); 943 pr_err("%s: unknown data1 encoding %d\n", __func__, type);
893 return AARCH64_BREAK_FAULT; 944 return AARCH64_BREAK_FAULT;
894 } 945 }
895 946
@@ -900,7 +951,7 @@ u32 aarch64_insn_gen_data1(enum aarch64_insn_register dst,
900 insn |= AARCH64_INSN_SF_BIT; 951 insn |= AARCH64_INSN_SF_BIT;
901 break; 952 break;
902 default: 953 default:
903 BUG_ON(1); 954 pr_err("%s: unknown variant encoding %d\n", __func__, variant);
904 return AARCH64_BREAK_FAULT; 955 return AARCH64_BREAK_FAULT;
905 } 956 }
906 957
@@ -937,7 +988,7 @@ u32 aarch64_insn_gen_data2(enum aarch64_insn_register dst,
937 insn = aarch64_insn_get_rorv_value(); 988 insn = aarch64_insn_get_rorv_value();
938 break; 989 break;
939 default: 990 default:
940 BUG_ON(1); 991 pr_err("%s: unknown data2 encoding %d\n", __func__, type);
941 return AARCH64_BREAK_FAULT; 992 return AARCH64_BREAK_FAULT;
942 } 993 }
943 994
@@ -948,7 +999,7 @@ u32 aarch64_insn_gen_data2(enum aarch64_insn_register dst,
948 insn |= AARCH64_INSN_SF_BIT; 999 insn |= AARCH64_INSN_SF_BIT;
949 break; 1000 break;
950 default: 1001 default:
951 BUG_ON(1); 1002 pr_err("%s: unknown variant encoding %d\n", __func__, variant);
952 return AARCH64_BREAK_FAULT; 1003 return AARCH64_BREAK_FAULT;
953 } 1004 }
954 1005
@@ -976,7 +1027,7 @@ u32 aarch64_insn_gen_data3(enum aarch64_insn_register dst,
976 insn = aarch64_insn_get_msub_value(); 1027 insn = aarch64_insn_get_msub_value();
977 break; 1028 break;
978 default: 1029 default:
979 BUG_ON(1); 1030 pr_err("%s: unknown data3 encoding %d\n", __func__, type);
980 return AARCH64_BREAK_FAULT; 1031 return AARCH64_BREAK_FAULT;
981 } 1032 }
982 1033
@@ -987,7 +1038,7 @@ u32 aarch64_insn_gen_data3(enum aarch64_insn_register dst,
987 insn |= AARCH64_INSN_SF_BIT; 1038 insn |= AARCH64_INSN_SF_BIT;
988 break; 1039 break;
989 default: 1040 default:
990 BUG_ON(1); 1041 pr_err("%s: unknown variant encoding %d\n", __func__, variant);
991 return AARCH64_BREAK_FAULT; 1042 return AARCH64_BREAK_FAULT;
992 } 1043 }
993 1044
@@ -1037,20 +1088,28 @@ u32 aarch64_insn_gen_logical_shifted_reg(enum aarch64_insn_register dst,
1037 insn = aarch64_insn_get_bics_value(); 1088 insn = aarch64_insn_get_bics_value();
1038 break; 1089 break;
1039 default: 1090 default:
1040 BUG_ON(1); 1091 pr_err("%s: unknown logical encoding %d\n", __func__, type);
1041 return AARCH64_BREAK_FAULT; 1092 return AARCH64_BREAK_FAULT;
1042 } 1093 }
1043 1094
1044 switch (variant) { 1095 switch (variant) {
1045 case AARCH64_INSN_VARIANT_32BIT: 1096 case AARCH64_INSN_VARIANT_32BIT:
1046 BUG_ON(shift & ~(SZ_32 - 1)); 1097 if (shift & ~(SZ_32 - 1)) {
1098 pr_err("%s: invalid shift encoding %d\n", __func__,
1099 shift);
1100 return AARCH64_BREAK_FAULT;
1101 }
1047 break; 1102 break;
1048 case AARCH64_INSN_VARIANT_64BIT: 1103 case AARCH64_INSN_VARIANT_64BIT:
1049 insn |= AARCH64_INSN_SF_BIT; 1104 insn |= AARCH64_INSN_SF_BIT;
1050 BUG_ON(shift & ~(SZ_64 - 1)); 1105 if (shift & ~(SZ_64 - 1)) {
1106 pr_err("%s: invalid shift encoding %d\n", __func__,
1107 shift);
1108 return AARCH64_BREAK_FAULT;
1109 }
1051 break; 1110 break;
1052 default: 1111 default:
1053 BUG_ON(1); 1112 pr_err("%s: unknown variant encoding %d\n", __func__, variant);
1054 return AARCH64_BREAK_FAULT; 1113 return AARCH64_BREAK_FAULT;
1055 } 1114 }
1056 1115