Changeset 177315 in webkit for trunk/Source/JavaScriptCore/ftl
- Timestamp:
- Dec 15, 2014, 2:58:17 PM (10 years ago)
- Location:
- trunk/Source/JavaScriptCore/ftl
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ftl/FTLCompile.cpp
r177222 r177315 99 99 #elif OS(LINUX) 100 100 if (!strcmp(sectionName, SECTION_NAME("eh_frame"))) { 101 #else 102 #error "Unrecognized OS" 101 103 #endif 102 104 state.unwindDataSection = section->base(); … … 626 628 627 629 if (isARM64()) 630 #if OS(DARWIN) 628 631 llvm->SetTarget(state.module, "arm64-apple-ios"); 629 632 #elif OS(LINUX) 633 llvm->SetTarget(state.module, "aarch64-linux-gnu"); 634 #else 635 #error "Unrecognized OS" 636 #endif 637 630 638 if (llvm->CreateMCJITCompilerForModule(&engine, state.module, &options, sizeof(options), &error)) { 631 639 dataLog("FATAL: Could not create LLVM execution engine: ", error, "\n"); -
trunk/Source/JavaScriptCore/ftl/FTLUnwindInfo.cpp
r173509 r177315 174 174 enum { 175 175 DW_X86_64_RET_addr = 16 176 }; 177 178 enum { 179 UNW_ARM64_x0 = 0, 180 UNW_ARM64_x1 = 1, 181 UNW_ARM64_x2 = 2, 182 UNW_ARM64_x3 = 3, 183 UNW_ARM64_x4 = 4, 184 UNW_ARM64_x5 = 5, 185 UNW_ARM64_x6 = 6, 186 UNW_ARM64_x7 = 7, 187 UNW_ARM64_x8 = 8, 188 UNW_ARM64_x9 = 9, 189 UNW_ARM64_x10 = 10, 190 UNW_ARM64_x11 = 11, 191 UNW_ARM64_x12 = 12, 192 UNW_ARM64_x13 = 13, 193 UNW_ARM64_x14 = 14, 194 UNW_ARM64_x15 = 15, 195 UNW_ARM64_x16 = 16, 196 UNW_ARM64_x17 = 17, 197 UNW_ARM64_x18 = 18, 198 UNW_ARM64_x19 = 19, 199 UNW_ARM64_x20 = 20, 200 UNW_ARM64_x21 = 21, 201 UNW_ARM64_x22 = 22, 202 UNW_ARM64_x23 = 23, 203 UNW_ARM64_x24 = 24, 204 UNW_ARM64_x25 = 25, 205 UNW_ARM64_x26 = 26, 206 UNW_ARM64_x27 = 27, 207 UNW_ARM64_x28 = 28, 208 UNW_ARM64_fp = 29, 209 UNW_ARM64_x30 = 30, 210 UNW_ARM64_sp = 31, 211 UNW_ARM64_v0 = 64, 212 UNW_ARM64_v1 = 65, 213 UNW_ARM64_v2 = 66, 214 UNW_ARM64_v3 = 67, 215 UNW_ARM64_v4 = 68, 216 UNW_ARM64_v5 = 69, 217 UNW_ARM64_v6 = 70, 218 UNW_ARM64_v7 = 71, 219 UNW_ARM64_v8 = 72, 220 UNW_ARM64_v9 = 73, 221 UNW_ARM64_v10 = 74, 222 UNW_ARM64_v11 = 75, 223 UNW_ARM64_v12 = 76, 224 UNW_ARM64_v13 = 77, 225 UNW_ARM64_v14 = 78, 226 UNW_ARM64_v15 = 79, 227 UNW_ARM64_v16 = 80, 228 UNW_ARM64_v17 = 81, 229 UNW_ARM64_v18 = 82, 230 UNW_ARM64_v19 = 83, 231 UNW_ARM64_v20 = 84, 232 UNW_ARM64_v21 = 85, 233 UNW_ARM64_v22 = 86, 234 UNW_ARM64_v23 = 87, 235 UNW_ARM64_v24 = 88, 236 UNW_ARM64_v25 = 89, 237 UNW_ARM64_v26 = 90, 238 UNW_ARM64_v27 = 91, 239 UNW_ARM64_v28 = 92, 240 UNW_ARM64_v29 = 93, 241 UNW_ARM64_v30 = 94, 242 UNW_ARM64_v31 = 95 176 243 }; 177 244 … … 326 393 // Information about a frame layout and registers saved determined 327 394 // by "running" the dwarf FDE "instructions" 395 #if CPU(ARM64) 396 enum { MaxRegisterNumber = 120 }; 397 #elif CPU(X86_64) 328 398 enum { MaxRegisterNumber = 17 }; 399 #else 400 #error "Unrecognized architecture" 401 #endif 329 402 330 403 struct RegisterLocation { … … 735 808 } 736 809 #elif CPU(ARM64) 737 // FIXME: Implement stackunwinding based on eh_frame on ARM64 810 RELEASE_ASSERT(prolog.cfaRegister == UNW_ARM64_fp); 811 RELEASE_ASSERT(prolog.cfaRegisterOffset == 16); 812 RELEASE_ASSERT(prolog.savedRegisters[UNW_ARM64_fp].saved); 813 RELEASE_ASSERT(prolog.savedRegisters[UNW_ARM64_fp].offset == -prolog.cfaRegisterOffset); 814 815 for (int i = 0; i < MaxRegisterNumber; ++i) { 816 if (prolog.savedRegisters[i].saved) { 817 switch (i) { 818 case UNW_ARM64_x0: 819 m_registers.append(RegisterAtOffset(ARM64Registers::x0, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 820 break; 821 case UNW_ARM64_x1: 822 m_registers.append(RegisterAtOffset(ARM64Registers::x1, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 823 break; 824 case UNW_ARM64_x2: 825 m_registers.append(RegisterAtOffset(ARM64Registers::x2, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 826 break; 827 case UNW_ARM64_x3: 828 m_registers.append(RegisterAtOffset(ARM64Registers::x3, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 829 break; 830 case UNW_ARM64_x4: 831 m_registers.append(RegisterAtOffset(ARM64Registers::x4, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 832 break; 833 case UNW_ARM64_x5: 834 m_registers.append(RegisterAtOffset(ARM64Registers::x5, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 835 break; 836 case UNW_ARM64_x6: 837 m_registers.append(RegisterAtOffset(ARM64Registers::x6, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 838 break; 839 case UNW_ARM64_x7: 840 m_registers.append(RegisterAtOffset(ARM64Registers::x7, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 841 break; 842 case UNW_ARM64_x8: 843 m_registers.append(RegisterAtOffset(ARM64Registers::x8, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 844 break; 845 case UNW_ARM64_x9: 846 m_registers.append(RegisterAtOffset(ARM64Registers::x9, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 847 break; 848 case UNW_ARM64_x10: 849 m_registers.append(RegisterAtOffset(ARM64Registers::x10, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 850 break; 851 case UNW_ARM64_x11: 852 m_registers.append(RegisterAtOffset(ARM64Registers::x11, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 853 break; 854 case UNW_ARM64_x12: 855 m_registers.append(RegisterAtOffset(ARM64Registers::x12, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 856 break; 857 case UNW_ARM64_x13: 858 m_registers.append(RegisterAtOffset(ARM64Registers::x13, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 859 break; 860 case UNW_ARM64_x14: 861 m_registers.append(RegisterAtOffset(ARM64Registers::x14, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 862 break; 863 case UNW_ARM64_x15: 864 m_registers.append(RegisterAtOffset(ARM64Registers::x15, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 865 break; 866 case UNW_ARM64_x16: 867 m_registers.append(RegisterAtOffset(ARM64Registers::x16, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 868 break; 869 case UNW_ARM64_x17: 870 m_registers.append(RegisterAtOffset(ARM64Registers::x17, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 871 break; 872 case UNW_ARM64_x18: 873 m_registers.append(RegisterAtOffset(ARM64Registers::x18, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 874 break; 875 case UNW_ARM64_x19: 876 m_registers.append(RegisterAtOffset(ARM64Registers::x19, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 877 break; 878 case UNW_ARM64_x20: 879 m_registers.append(RegisterAtOffset(ARM64Registers::x20, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 880 break; 881 case UNW_ARM64_x21: 882 m_registers.append(RegisterAtOffset(ARM64Registers::x21, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 883 break; 884 case UNW_ARM64_x22: 885 m_registers.append(RegisterAtOffset(ARM64Registers::x22, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 886 break; 887 case UNW_ARM64_x23: 888 m_registers.append(RegisterAtOffset(ARM64Registers::x23, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 889 break; 890 case UNW_ARM64_x24: 891 m_registers.append(RegisterAtOffset(ARM64Registers::x24, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 892 break; 893 case UNW_ARM64_x25: 894 m_registers.append(RegisterAtOffset(ARM64Registers::x25, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 895 break; 896 case UNW_ARM64_x26: 897 m_registers.append(RegisterAtOffset(ARM64Registers::x26, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 898 break; 899 case UNW_ARM64_x27: 900 m_registers.append(RegisterAtOffset(ARM64Registers::x27, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 901 break; 902 case UNW_ARM64_x28: 903 m_registers.append(RegisterAtOffset(ARM64Registers::x28, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 904 break; 905 case UNW_ARM64_fp: 906 m_registers.append(RegisterAtOffset(ARM64Registers::fp, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 907 break; 908 case UNW_ARM64_x30: 909 m_registers.append(RegisterAtOffset(ARM64Registers::x30, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 910 break; 911 case UNW_ARM64_sp: 912 m_registers.append(RegisterAtOffset(ARM64Registers::sp, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 913 break; 914 case UNW_ARM64_v0: 915 m_registers.append(RegisterAtOffset(ARM64Registers::q0, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 916 break; 917 case UNW_ARM64_v1: 918 m_registers.append(RegisterAtOffset(ARM64Registers::q1, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 919 break; 920 case UNW_ARM64_v2: 921 m_registers.append(RegisterAtOffset(ARM64Registers::q2, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 922 break; 923 case UNW_ARM64_v3: 924 m_registers.append(RegisterAtOffset(ARM64Registers::q3, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 925 break; 926 case UNW_ARM64_v4: 927 m_registers.append(RegisterAtOffset(ARM64Registers::q4, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 928 break; 929 case UNW_ARM64_v5: 930 m_registers.append(RegisterAtOffset(ARM64Registers::q5, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 931 break; 932 case UNW_ARM64_v6: 933 m_registers.append(RegisterAtOffset(ARM64Registers::q6, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 934 break; 935 case UNW_ARM64_v7: 936 m_registers.append(RegisterAtOffset(ARM64Registers::q7, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 937 break; 938 case UNW_ARM64_v8: 939 m_registers.append(RegisterAtOffset(ARM64Registers::q8, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 940 break; 941 case UNW_ARM64_v9: 942 m_registers.append(RegisterAtOffset(ARM64Registers::q9, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 943 break; 944 case UNW_ARM64_v10: 945 m_registers.append(RegisterAtOffset(ARM64Registers::q10, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 946 break; 947 case UNW_ARM64_v11: 948 m_registers.append(RegisterAtOffset(ARM64Registers::q11, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 949 break; 950 case UNW_ARM64_v12: 951 m_registers.append(RegisterAtOffset(ARM64Registers::q12, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 952 break; 953 case UNW_ARM64_v13: 954 m_registers.append(RegisterAtOffset(ARM64Registers::q13, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 955 break; 956 case UNW_ARM64_v14: 957 m_registers.append(RegisterAtOffset(ARM64Registers::q14, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 958 break; 959 case UNW_ARM64_v15: 960 m_registers.append(RegisterAtOffset(ARM64Registers::q15, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 961 break; 962 case UNW_ARM64_v16: 963 m_registers.append(RegisterAtOffset(ARM64Registers::q16, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 964 break; 965 case UNW_ARM64_v17: 966 m_registers.append(RegisterAtOffset(ARM64Registers::q17, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 967 break; 968 case UNW_ARM64_v18: 969 m_registers.append(RegisterAtOffset(ARM64Registers::q18, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 970 break; 971 case UNW_ARM64_v19: 972 m_registers.append(RegisterAtOffset(ARM64Registers::q19, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 973 break; 974 case UNW_ARM64_v20: 975 m_registers.append(RegisterAtOffset(ARM64Registers::q20, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 976 break; 977 case UNW_ARM64_v21: 978 m_registers.append(RegisterAtOffset(ARM64Registers::q21, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 979 break; 980 case UNW_ARM64_v22: 981 m_registers.append(RegisterAtOffset(ARM64Registers::q22, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 982 break; 983 case UNW_ARM64_v23: 984 m_registers.append(RegisterAtOffset(ARM64Registers::q23, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 985 break; 986 case UNW_ARM64_v24: 987 m_registers.append(RegisterAtOffset(ARM64Registers::q24, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 988 break; 989 case UNW_ARM64_v25: 990 m_registers.append(RegisterAtOffset(ARM64Registers::q25, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 991 break; 992 case UNW_ARM64_v26: 993 m_registers.append(RegisterAtOffset(ARM64Registers::q26, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 994 break; 995 case UNW_ARM64_v27: 996 m_registers.append(RegisterAtOffset(ARM64Registers::q27, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 997 break; 998 case UNW_ARM64_v28: 999 m_registers.append(RegisterAtOffset(ARM64Registers::q28, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 1000 break; 1001 case UNW_ARM64_v29: 1002 m_registers.append(RegisterAtOffset(ARM64Registers::q29, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 1003 break; 1004 case UNW_ARM64_v30: 1005 m_registers.append(RegisterAtOffset(ARM64Registers::q30, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 1006 break; 1007 case UNW_ARM64_v31: 1008 m_registers.append(RegisterAtOffset(ARM64Registers::q31, prolog.savedRegisters[i].offset + prolog.cfaRegisterOffset)); 1009 break; 1010 default: 1011 RELEASE_ASSERT_NOT_REACHED(); // non-standard register being saved in prolog 1012 } 1013 } 1014 } 738 1015 #else 739 1016 #error "Unrecognized architecture"
Note:
See TracChangeset
for help on using the changeset viewer.