Changeset 189575 in webkit for trunk/Source/JavaScriptCore/ftl/FTLUnwindInfo.cpp
- Timestamp:
- Sep 10, 2015, 10:47:16 AM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ftl/FTLUnwindInfo.cpp
r177315 r189575 95 95 #include "FTLUnwindInfo.h" 96 96 97 #include "CodeBlock.h" 98 #include "RegisterAtOffsetList.h" 99 97 100 #if ENABLE(FTL_JIT) 98 101 … … 103 106 104 107 namespace JSC { namespace FTL { 105 106 UnwindInfo::UnwindInfo() { }107 UnwindInfo::~UnwindInfo() { }108 109 108 110 109 namespace { … … 655 654 } // anonymous namespace 656 655 657 bool UnwindInfo::parse(void* section, size_t size, GeneratedFunction generatedFunction) 658 { 659 m_registers.clear(); 656 std::unique_ptr<RegisterAtOffsetList> parseUnwindInfo(void* section, size_t size, GeneratedFunction generatedFunction) 657 { 660 658 RELEASE_ASSERT(!!section); 661 if (!section) 662 return false;659 660 std::unique_ptr<RegisterAtOffsetList> registerOffsets = std::make_unique<RegisterAtOffsetList>(); 663 661 664 662 #if OS(DARWIN) … … 690 688 691 689 case UNWIND_X86_64_REG_RBX: 692 m_registers.append(RegisterAtOffset(X86Registers::ebx, offset));690 registerOffsets->append(RegisterAtOffset(X86Registers::ebx, offset)); 693 691 break; 694 692 695 693 case UNWIND_X86_64_REG_R12: 696 m_registers.append(RegisterAtOffset(X86Registers::r12, offset));694 registerOffsets->append(RegisterAtOffset(X86Registers::r12, offset)); 697 695 break; 698 696 699 697 case UNWIND_X86_64_REG_R13: 700 m_registers.append(RegisterAtOffset(X86Registers::r13, offset));698 registerOffsets->append(RegisterAtOffset(X86Registers::r13, offset)); 701 699 break; 702 700 703 701 case UNWIND_X86_64_REG_R14: 704 m_registers.append(RegisterAtOffset(X86Registers::r14, offset));702 registerOffsets->append(RegisterAtOffset(X86Registers::r14, offset)); 705 703 break; 706 704 707 705 case UNWIND_X86_64_REG_R15: 708 m_registers.append(RegisterAtOffset(X86Registers::r15, offset));706 registerOffsets->append(RegisterAtOffset(X86Registers::r15, offset)); 709 707 break; 710 708 711 709 case UNWIND_X86_64_REG_RBP: 712 m_registers.append(RegisterAtOffset(X86Registers::ebp, offset));710 registerOffsets->append(RegisterAtOffset(X86Registers::ebp, offset)); 713 711 break; 714 712 … … 722 720 RELEASE_ASSERT((encoding & UNWIND_ARM64_MODE_MASK) == UNWIND_ARM64_MODE_FRAME); 723 721 724 m_registers.append(RegisterAtOffset(ARM64Registers::fp, 0));722 registerOffsets->append(RegisterAtOffset(ARM64Registers::fp, 0)); 725 723 726 724 int32_t offset = 0; 727 725 if (encoding & UNWIND_ARM64_FRAME_X19_X20_PAIR) { 728 m_registers.append(RegisterAtOffset(ARM64Registers::x19, offset -= 8));729 m_registers.append(RegisterAtOffset(ARM64Registers::x20, offset -= 8));726 registerOffsets->append(RegisterAtOffset(ARM64Registers::x19, offset -= 8)); 727 registerOffsets->append(RegisterAtOffset(ARM64Registers::x20, offset -= 8)); 730 728 } 731 729 if (encoding & UNWIND_ARM64_FRAME_X21_X22_PAIR) { 732 m_registers.append(RegisterAtOffset(ARM64Registers::x21, offset -= 8));733 m_registers.append(RegisterAtOffset(ARM64Registers::x22, offset -= 8));730 registerOffsets->append(RegisterAtOffset(ARM64Registers::x21, offset -= 8)); 731 registerOffsets->append(RegisterAtOffset(ARM64Registers::x22, offset -= 8)); 734 732 } 735 733 if (encoding & UNWIND_ARM64_FRAME_X23_X24_PAIR) { 736 m_registers.append(RegisterAtOffset(ARM64Registers::x23, offset -= 8));737 m_registers.append(RegisterAtOffset(ARM64Registers::x24, offset -= 8));734 registerOffsets->append(RegisterAtOffset(ARM64Registers::x23, offset -= 8)); 735 registerOffsets->append(RegisterAtOffset(ARM64Registers::x24, offset -= 8)); 738 736 } 739 737 if (encoding & UNWIND_ARM64_FRAME_X25_X26_PAIR) { 740 m_registers.append(RegisterAtOffset(ARM64Registers::x25, offset -= 8));741 m_registers.append(RegisterAtOffset(ARM64Registers::x26, offset -= 8));738 registerOffsets->append(RegisterAtOffset(ARM64Registers::x25, offset -= 8)); 739 registerOffsets->append(RegisterAtOffset(ARM64Registers::x26, offset -= 8)); 742 740 } 743 741 if (encoding & UNWIND_ARM64_FRAME_X27_X28_PAIR) { 744 m_registers.append(RegisterAtOffset(ARM64Registers::x27, offset -= 8));745 m_registers.append(RegisterAtOffset(ARM64Registers::x28, offset -= 8));742 registerOffsets->append(RegisterAtOffset(ARM64Registers::x27, offset -= 8)); 743 registerOffsets->append(RegisterAtOffset(ARM64Registers::x28, offset -= 8)); 746 744 } 747 745 if (encoding & UNWIND_ARM64_FRAME_D8_D9_PAIR) { 748 m_registers.append(RegisterAtOffset(ARM64Registers::q8, offset -= 8));749 m_registers.append(RegisterAtOffset(ARM64Registers::q9, offset -= 8));746 registerOffsets->append(RegisterAtOffset(ARM64Registers::q8, offset -= 8)); 747 registerOffsets->append(RegisterAtOffset(ARM64Registers::q9, offset -= 8)); 750 748 } 751 749 if (encoding & UNWIND_ARM64_FRAME_D10_D11_PAIR) { 752 m_registers.append(RegisterAtOffset(ARM64Registers::q10, offset -= 8));753 m_registers.append(RegisterAtOffset(ARM64Registers::q11, offset -= 8));750 registerOffsets->append(RegisterAtOffset(ARM64Registers::q10, offset -= 8)); 751 registerOffsets->append(RegisterAtOffset(ARM64Registers::q11, offset -= 8)); 754 752 } 755 753 if (encoding & UNWIND_ARM64_FRAME_D12_D13_PAIR) { 756 m_registers.append(RegisterAtOffset(ARM64Registers::q12, offset -= 8));757 m_registers.append(RegisterAtOffset(ARM64Registers::q13, offset -= 8));754 registerOffsets->append(RegisterAtOffset(ARM64Registers::q12, offset -= 8)); 755 registerOffsets->append(RegisterAtOffset(ARM64Registers::q13, offset -= 8)); 758 756 } 759 757 if (encoding & UNWIND_ARM64_FRAME_D14_D15_PAIR) { 760 m_registers.append(RegisterAtOffset(ARM64Registers::q14, offset -= 8));761 m_registers.append(RegisterAtOffset(ARM64Registers::q15, offset -= 8));758 registerOffsets->append(RegisterAtOffset(ARM64Registers::q14, offset -= 8)); 759 registerOffsets->append(RegisterAtOffset(ARM64Registers::q15, offset -= 8)); 762 760 } 763 761 #else … … 783 781 switch (i) { 784 782 case UNW_X86_64_rbx: 785 m_registers.append(RegisterAtOffset(X86Registers::ebx, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));783 registerOffsets->append(RegisterAtOffset(X86Registers::ebx, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 786 784 break; 787 785 case UNW_X86_64_r12: 788 m_registers.append(RegisterAtOffset(X86Registers::r12, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));786 registerOffsets->append(RegisterAtOffset(X86Registers::r12, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 789 787 break; 790 788 case UNW_X86_64_r13: 791 m_registers.append(RegisterAtOffset(X86Registers::r13, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));789 registerOffsets->append(RegisterAtOffset(X86Registers::r13, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 792 790 break; 793 791 case UNW_X86_64_r14: 794 m_registers.append(RegisterAtOffset(X86Registers::r14, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));792 registerOffsets->append(RegisterAtOffset(X86Registers::r14, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 795 793 break; 796 794 case UNW_X86_64_r15: 797 m_registers.append(RegisterAtOffset(X86Registers::r15, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));795 registerOffsets->append(RegisterAtOffset(X86Registers::r15, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 798 796 break; 799 797 case UNW_X86_64_rbp: 800 m_registers.append(RegisterAtOffset(X86Registers::ebp, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));798 registerOffsets->append(RegisterAtOffset(X86Registers::ebp, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 801 799 break; 802 800 case DW_X86_64_RET_addr: … … 817 815 switch (i) { 818 816 case UNW_ARM64_x0: 819 m_registers.append(RegisterAtOffset(ARM64Registers::x0, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));817 registerOffsets->append(RegisterAtOffset(ARM64Registers::x0, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 820 818 break; 821 819 case UNW_ARM64_x1: 822 m_registers.append(RegisterAtOffset(ARM64Registers::x1, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));820 registerOffsets->append(RegisterAtOffset(ARM64Registers::x1, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 823 821 break; 824 822 case UNW_ARM64_x2: 825 m_registers.append(RegisterAtOffset(ARM64Registers::x2, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));823 registerOffsets->append(RegisterAtOffset(ARM64Registers::x2, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 826 824 break; 827 825 case UNW_ARM64_x3: 828 m_registers.append(RegisterAtOffset(ARM64Registers::x3, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));826 registerOffsets->append(RegisterAtOffset(ARM64Registers::x3, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 829 827 break; 830 828 case UNW_ARM64_x4: 831 m_registers.append(RegisterAtOffset(ARM64Registers::x4, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));829 registerOffsets->append(RegisterAtOffset(ARM64Registers::x4, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 832 830 break; 833 831 case UNW_ARM64_x5: 834 m_registers.append(RegisterAtOffset(ARM64Registers::x5, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));832 registerOffsets->append(RegisterAtOffset(ARM64Registers::x5, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 835 833 break; 836 834 case UNW_ARM64_x6: 837 m_registers.append(RegisterAtOffset(ARM64Registers::x6, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));835 registerOffsets->append(RegisterAtOffset(ARM64Registers::x6, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 838 836 break; 839 837 case UNW_ARM64_x7: 840 m_registers.append(RegisterAtOffset(ARM64Registers::x7, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));838 registerOffsets->append(RegisterAtOffset(ARM64Registers::x7, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 841 839 break; 842 840 case UNW_ARM64_x8: 843 m_registers.append(RegisterAtOffset(ARM64Registers::x8, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));841 registerOffsets->append(RegisterAtOffset(ARM64Registers::x8, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 844 842 break; 845 843 case UNW_ARM64_x9: 846 m_registers.append(RegisterAtOffset(ARM64Registers::x9, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));844 registerOffsets->append(RegisterAtOffset(ARM64Registers::x9, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 847 845 break; 848 846 case UNW_ARM64_x10: 849 m_registers.append(RegisterAtOffset(ARM64Registers::x10, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));847 registerOffsets->append(RegisterAtOffset(ARM64Registers::x10, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 850 848 break; 851 849 case UNW_ARM64_x11: 852 m_registers.append(RegisterAtOffset(ARM64Registers::x11, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));850 registerOffsets->append(RegisterAtOffset(ARM64Registers::x11, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 853 851 break; 854 852 case UNW_ARM64_x12: 855 m_registers.append(RegisterAtOffset(ARM64Registers::x12, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));853 registerOffsets->append(RegisterAtOffset(ARM64Registers::x12, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 856 854 break; 857 855 case UNW_ARM64_x13: 858 m_registers.append(RegisterAtOffset(ARM64Registers::x13, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));856 registerOffsets->append(RegisterAtOffset(ARM64Registers::x13, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 859 857 break; 860 858 case UNW_ARM64_x14: 861 m_registers.append(RegisterAtOffset(ARM64Registers::x14, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));859 registerOffsets->append(RegisterAtOffset(ARM64Registers::x14, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 862 860 break; 863 861 case UNW_ARM64_x15: 864 m_registers.append(RegisterAtOffset(ARM64Registers::x15, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));862 registerOffsets->append(RegisterAtOffset(ARM64Registers::x15, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 865 863 break; 866 864 case UNW_ARM64_x16: 867 m_registers.append(RegisterAtOffset(ARM64Registers::x16, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));865 registerOffsets->append(RegisterAtOffset(ARM64Registers::x16, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 868 866 break; 869 867 case UNW_ARM64_x17: 870 m_registers.append(RegisterAtOffset(ARM64Registers::x17, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));868 registerOffsets->append(RegisterAtOffset(ARM64Registers::x17, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 871 869 break; 872 870 case UNW_ARM64_x18: 873 m_registers.append(RegisterAtOffset(ARM64Registers::x18, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));871 registerOffsets->append(RegisterAtOffset(ARM64Registers::x18, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 874 872 break; 875 873 case UNW_ARM64_x19: 876 m_registers.append(RegisterAtOffset(ARM64Registers::x19, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));874 registerOffsets->append(RegisterAtOffset(ARM64Registers::x19, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 877 875 break; 878 876 case UNW_ARM64_x20: 879 m_registers.append(RegisterAtOffset(ARM64Registers::x20, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));877 registerOffsets->append(RegisterAtOffset(ARM64Registers::x20, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 880 878 break; 881 879 case UNW_ARM64_x21: 882 m_registers.append(RegisterAtOffset(ARM64Registers::x21, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));880 registerOffsets->append(RegisterAtOffset(ARM64Registers::x21, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 883 881 break; 884 882 case UNW_ARM64_x22: 885 m_registers.append(RegisterAtOffset(ARM64Registers::x22, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));883 registerOffsets->append(RegisterAtOffset(ARM64Registers::x22, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 886 884 break; 887 885 case UNW_ARM64_x23: 888 m_registers.append(RegisterAtOffset(ARM64Registers::x23, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));886 registerOffsets->append(RegisterAtOffset(ARM64Registers::x23, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 889 887 break; 890 888 case UNW_ARM64_x24: 891 m_registers.append(RegisterAtOffset(ARM64Registers::x24, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));889 registerOffsets->append(RegisterAtOffset(ARM64Registers::x24, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 892 890 break; 893 891 case UNW_ARM64_x25: 894 m_registers.append(RegisterAtOffset(ARM64Registers::x25, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));892 registerOffsets->append(RegisterAtOffset(ARM64Registers::x25, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 895 893 break; 896 894 case UNW_ARM64_x26: 897 m_registers.append(RegisterAtOffset(ARM64Registers::x26, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));895 registerOffsets->append(RegisterAtOffset(ARM64Registers::x26, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 898 896 break; 899 897 case UNW_ARM64_x27: 900 m_registers.append(RegisterAtOffset(ARM64Registers::x27, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));898 registerOffsets->append(RegisterAtOffset(ARM64Registers::x27, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 901 899 break; 902 900 case UNW_ARM64_x28: 903 m_registers.append(RegisterAtOffset(ARM64Registers::x28, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));901 registerOffsets->append(RegisterAtOffset(ARM64Registers::x28, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 904 902 break; 905 903 case UNW_ARM64_fp: 906 m_registers.append(RegisterAtOffset(ARM64Registers::fp, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));904 registerOffsets->append(RegisterAtOffset(ARM64Registers::fp, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 907 905 break; 908 906 case UNW_ARM64_x30: 909 m_registers.append(RegisterAtOffset(ARM64Registers::x30, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));907 registerOffsets->append(RegisterAtOffset(ARM64Registers::x30, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 910 908 break; 911 909 case UNW_ARM64_sp: 912 m_registers.append(RegisterAtOffset(ARM64Registers::sp, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));910 registerOffsets->append(RegisterAtOffset(ARM64Registers::sp, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 913 911 break; 914 912 case UNW_ARM64_v0: 915 m_registers.append(RegisterAtOffset(ARM64Registers::q0, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));913 registerOffsets->append(RegisterAtOffset(ARM64Registers::q0, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 916 914 break; 917 915 case UNW_ARM64_v1: 918 m_registers.append(RegisterAtOffset(ARM64Registers::q1, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));916 registerOffsets->append(RegisterAtOffset(ARM64Registers::q1, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 919 917 break; 920 918 case UNW_ARM64_v2: 921 m_registers.append(RegisterAtOffset(ARM64Registers::q2, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));919 registerOffsets->append(RegisterAtOffset(ARM64Registers::q2, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 922 920 break; 923 921 case UNW_ARM64_v3: 924 m_registers.append(RegisterAtOffset(ARM64Registers::q3, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));922 registerOffsets->append(RegisterAtOffset(ARM64Registers::q3, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 925 923 break; 926 924 case UNW_ARM64_v4: 927 m_registers.append(RegisterAtOffset(ARM64Registers::q4, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));925 registerOffsets->append(RegisterAtOffset(ARM64Registers::q4, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 928 926 break; 929 927 case UNW_ARM64_v5: 930 m_registers.append(RegisterAtOffset(ARM64Registers::q5, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));928 registerOffsets->append(RegisterAtOffset(ARM64Registers::q5, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 931 929 break; 932 930 case UNW_ARM64_v6: 933 m_registers.append(RegisterAtOffset(ARM64Registers::q6, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));931 registerOffsets->append(RegisterAtOffset(ARM64Registers::q6, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 934 932 break; 935 933 case UNW_ARM64_v7: 936 m_registers.append(RegisterAtOffset(ARM64Registers::q7, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));934 registerOffsets->append(RegisterAtOffset(ARM64Registers::q7, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 937 935 break; 938 936 case UNW_ARM64_v8: 939 m_registers.append(RegisterAtOffset(ARM64Registers::q8, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));937 registerOffsets->append(RegisterAtOffset(ARM64Registers::q8, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 940 938 break; 941 939 case UNW_ARM64_v9: 942 m_registers.append(RegisterAtOffset(ARM64Registers::q9, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));940 registerOffsets->append(RegisterAtOffset(ARM64Registers::q9, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 943 941 break; 944 942 case UNW_ARM64_v10: 945 m_registers.append(RegisterAtOffset(ARM64Registers::q10, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));943 registerOffsets->append(RegisterAtOffset(ARM64Registers::q10, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 946 944 break; 947 945 case UNW_ARM64_v11: 948 m_registers.append(RegisterAtOffset(ARM64Registers::q11, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));946 registerOffsets->append(RegisterAtOffset(ARM64Registers::q11, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 949 947 break; 950 948 case UNW_ARM64_v12: 951 m_registers.append(RegisterAtOffset(ARM64Registers::q12, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));949 registerOffsets->append(RegisterAtOffset(ARM64Registers::q12, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 952 950 break; 953 951 case UNW_ARM64_v13: 954 m_registers.append(RegisterAtOffset(ARM64Registers::q13, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));952 registerOffsets->append(RegisterAtOffset(ARM64Registers::q13, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 955 953 break; 956 954 case UNW_ARM64_v14: 957 m_registers.append(RegisterAtOffset(ARM64Registers::q14, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));955 registerOffsets->append(RegisterAtOffset(ARM64Registers::q14, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 958 956 break; 959 957 case UNW_ARM64_v15: 960 m_registers.append(RegisterAtOffset(ARM64Registers::q15, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));958 registerOffsets->append(RegisterAtOffset(ARM64Registers::q15, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 961 959 break; 962 960 case UNW_ARM64_v16: 963 m_registers.append(RegisterAtOffset(ARM64Registers::q16, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));961 registerOffsets->append(RegisterAtOffset(ARM64Registers::q16, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 964 962 break; 965 963 case UNW_ARM64_v17: 966 m_registers.append(RegisterAtOffset(ARM64Registers::q17, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));964 registerOffsets->append(RegisterAtOffset(ARM64Registers::q17, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 967 965 break; 968 966 case UNW_ARM64_v18: 969 m_registers.append(RegisterAtOffset(ARM64Registers::q18, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));967 registerOffsets->append(RegisterAtOffset(ARM64Registers::q18, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 970 968 break; 971 969 case UNW_ARM64_v19: 972 m_registers.append(RegisterAtOffset(ARM64Registers::q19, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));970 registerOffsets->append(RegisterAtOffset(ARM64Registers::q19, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 973 971 break; 974 972 case UNW_ARM64_v20: 975 m_registers.append(RegisterAtOffset(ARM64Registers::q20, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));973 registerOffsets->append(RegisterAtOffset(ARM64Registers::q20, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 976 974 break; 977 975 case UNW_ARM64_v21: 978 m_registers.append(RegisterAtOffset(ARM64Registers::q21, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));976 append(RegisterAtOffset(ARM64Registers::q21, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 979 977 break; 980 978 case UNW_ARM64_v22: 981 m_registers.append(RegisterAtOffset(ARM64Registers::q22, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));979 registerOffsets->append(RegisterAtOffset(ARM64Registers::q22, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 982 980 break; 983 981 case UNW_ARM64_v23: 984 m_registers.append(RegisterAtOffset(ARM64Registers::q23, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));982 registerOffsets->append(RegisterAtOffset(ARM64Registers::q23, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 985 983 break; 986 984 case UNW_ARM64_v24: 987 m_registers.append(RegisterAtOffset(ARM64Registers::q24, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));985 registerOffsets->append(RegisterAtOffset(ARM64Registers::q24, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 988 986 break; 989 987 case UNW_ARM64_v25: 990 m_registers.append(RegisterAtOffset(ARM64Registers::q25, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));988 registerOffsets->append(RegisterAtOffset(ARM64Registers::q25, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 991 989 break; 992 990 case UNW_ARM64_v26: 993 m_registers.append(RegisterAtOffset(ARM64Registers::q26, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));991 registerOffsets->append(RegisterAtOffset(ARM64Registers::q26, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 994 992 break; 995 993 case UNW_ARM64_v27: 996 m_registers.append(RegisterAtOffset(ARM64Registers::q27, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));994 registerOffsets->append(RegisterAtOffset(ARM64Registers::q27, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 997 995 break; 998 996 case UNW_ARM64_v28: 999 m_registers.append(RegisterAtOffset(ARM64Registers::q28, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));997 registerOffsets->append(RegisterAtOffset(ARM64Registers::q28, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 1000 998 break; 1001 999 case UNW_ARM64_v29: 1002 m_registers.append(RegisterAtOffset(ARM64Registers::q29, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));1000 registerOffsets->append(RegisterAtOffset(ARM64Registers::q29, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 1003 1001 break; 1004 1002 case UNW_ARM64_v30: 1005 m_registers.append(RegisterAtOffset(ARM64Registers::q30, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));1003 registerOffsets->append(RegisterAtOffset(ARM64Registers::q30, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 1006 1004 break; 1007 1005 case UNW_ARM64_v31: 1008 m_registers.append(RegisterAtOffset(ARM64Registers::q31, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset));1006 registerOffsets->append(RegisterAtOffset(ARM64Registers::q31, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 1009 1007 break; 1010 1008 default: … … 1018 1016 1019 1017 #endif 1020 std::sort(m_registers.begin(), m_registers.end()); 1021 return true; 1022 } 1023 1024 void UnwindInfo::dump(PrintStream& out) const 1025 { 1026 out.print(listDump(m_registers)); 1027 } 1028 1029 RegisterAtOffset* UnwindInfo::find(Reg reg) const 1030 { 1031 return tryBinarySearch<RegisterAtOffset, Reg>(m_registers, m_registers.size(), reg, RegisterAtOffset::getReg); 1032 } 1033 1034 unsigned UnwindInfo::indexOf(Reg reg) const 1035 { 1036 if (RegisterAtOffset* pointer = find(reg)) 1037 return pointer - m_registers.begin(); 1038 return UINT_MAX; 1018 registerOffsets->sort(); 1019 return WTF::move(registerOffsets); 1039 1020 } 1040 1021
Note:
See TracChangeset
for help on using the changeset viewer.