ABIMacOSX_i386.cpp (254729) | ABIMacOSX_i386.cpp (258054) |
---|---|
1//===-- ABIMacOSX_i386.cpp --------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// --- 221 unchanged lines hidden (view full) --- 230} 231 232//------------------------------------------------------------------ 233// Static Functions 234//------------------------------------------------------------------ 235ABISP 236ABIMacOSX_i386::CreateInstance (const ArchSpec &arch) 237{ | 1//===-- ABIMacOSX_i386.cpp --------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// --- 221 unchanged lines hidden (view full) --- 230} 231 232//------------------------------------------------------------------ 233// Static Functions 234//------------------------------------------------------------------ 235ABISP 236ABIMacOSX_i386::CreateInstance (const ArchSpec &arch) 237{ |
238 static ABISP g_abi_sp; | 238 static ABISP g_abi_mac_sp; 239 static ABISP g_abi_other_sp; |
239 if (arch.GetTriple().getArch() == llvm::Triple::x86) 240 { | 240 if (arch.GetTriple().getArch() == llvm::Triple::x86) 241 { |
241 if (!g_abi_sp) 242 g_abi_sp.reset (new ABIMacOSX_i386); 243 return g_abi_sp; | 242 if (arch.GetTriple().isOSDarwin()) 243 { 244 if (!g_abi_mac_sp) 245 g_abi_mac_sp.reset (new ABIMacOSX_i386(true)); 246 return g_abi_mac_sp; 247 } 248 else 249 { 250 if (!g_abi_other_sp) 251 g_abi_other_sp.reset (new ABIMacOSX_i386(false)); 252 return g_abi_other_sp; 253 } |
244 } 245 return ABISP(); 246} 247 248bool 249ABIMacOSX_i386::PrepareTrivialCall (Thread &thread, 250 addr_t sp, 251 addr_t func_addr, --- 566 unchanged lines hidden (view full) --- 818 value, 819 ConstString("")); 820 return return_valobj_sp; 821} 822 823bool 824ABIMacOSX_i386::CreateFunctionEntryUnwindPlan (UnwindPlan &unwind_plan) 825{ | 254 } 255 return ABISP(); 256} 257 258bool 259ABIMacOSX_i386::PrepareTrivialCall (Thread &thread, 260 addr_t sp, 261 addr_t func_addr, --- 566 unchanged lines hidden (view full) --- 828 value, 829 ConstString("")); 830 return return_valobj_sp; 831} 832 833bool 834ABIMacOSX_i386::CreateFunctionEntryUnwindPlan (UnwindPlan &unwind_plan) 835{ |
826 uint32_t reg_kind = unwind_plan.GetRegisterKind(); 827 uint32_t sp_reg_num = LLDB_INVALID_REGNUM; 828 uint32_t pc_reg_num = LLDB_INVALID_REGNUM; 829 830 switch (reg_kind) 831 { 832 case eRegisterKindDWARF: 833 sp_reg_num = dwarf_esp; 834 pc_reg_num = dwarf_eip; 835 break; | 836 unwind_plan.Clear(); 837 unwind_plan.SetRegisterKind (eRegisterKindDWARF); |
836 | 838 |
837 case eRegisterKindGCC: 838 sp_reg_num = gcc_esp; 839 pc_reg_num = gcc_eip; 840 break; 841 842 case eRegisterKindGDB: 843 sp_reg_num = gdb_esp; 844 pc_reg_num = gdb_eip; 845 break; 846 847 case eRegisterKindGeneric: 848 sp_reg_num = LLDB_REGNUM_GENERIC_SP; 849 pc_reg_num = LLDB_REGNUM_GENERIC_PC; 850 break; 851 } | 839 uint32_t sp_reg_num = dwarf_esp; 840 uint32_t pc_reg_num = dwarf_eip; |
852 | 841 |
853 if (sp_reg_num == LLDB_INVALID_REGNUM || 854 pc_reg_num == LLDB_INVALID_REGNUM) 855 return false; 856 | |
857 UnwindPlan::RowSP row(new UnwindPlan::Row); 858 row->SetCFARegister (sp_reg_num); 859 row->SetCFAOffset (4); 860 row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, -4, false); 861 unwind_plan.AppendRow (row); 862 unwind_plan.SetSourceName ("i386 at-func-entry default"); 863 unwind_plan.SetSourcedFromCompiler (eLazyBoolNo); 864 return true; 865} 866 867bool 868ABIMacOSX_i386::CreateDefaultUnwindPlan (UnwindPlan &unwind_plan) 869{ | 842 UnwindPlan::RowSP row(new UnwindPlan::Row); 843 row->SetCFARegister (sp_reg_num); 844 row->SetCFAOffset (4); 845 row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, -4, false); 846 unwind_plan.AppendRow (row); 847 unwind_plan.SetSourceName ("i386 at-func-entry default"); 848 unwind_plan.SetSourcedFromCompiler (eLazyBoolNo); 849 return true; 850} 851 852bool 853ABIMacOSX_i386::CreateDefaultUnwindPlan (UnwindPlan &unwind_plan) 854{ |
855 unwind_plan.Clear (); 856 unwind_plan.SetRegisterKind (eRegisterKindDWARF); 857 |
|
870 uint32_t fp_reg_num = dwarf_ebp; 871 uint32_t sp_reg_num = dwarf_esp; 872 uint32_t pc_reg_num = dwarf_eip; 873 874 UnwindPlan::RowSP row(new UnwindPlan::Row); 875 const int32_t ptr_size = 4; 876 | 858 uint32_t fp_reg_num = dwarf_ebp; 859 uint32_t sp_reg_num = dwarf_esp; 860 uint32_t pc_reg_num = dwarf_eip; 861 862 UnwindPlan::RowSP row(new UnwindPlan::Row); 863 const int32_t ptr_size = 4; 864 |
877 unwind_plan.Clear (); 878 unwind_plan.SetRegisterKind (eRegisterKindDWARF); | |
879 row->SetCFARegister (fp_reg_num); 880 row->SetCFAOffset (2 * ptr_size); 881 row->SetOffset (0); 882 883 row->SetRegisterLocationToAtCFAPlusOffset(fp_reg_num, ptr_size * -2, true); 884 row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, ptr_size * -1, true); | 865 row->SetCFARegister (fp_reg_num); 866 row->SetCFAOffset (2 * ptr_size); 867 row->SetOffset (0); 868 869 row->SetRegisterLocationToAtCFAPlusOffset(fp_reg_num, ptr_size * -2, true); 870 row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, ptr_size * -1, true); |
885 row->SetRegisterLocationToAtCFAPlusOffset(sp_reg_num, ptr_size * 0, true); | 871 row->SetRegisterLocationToIsCFAPlusOffset(sp_reg_num, 0, true); |
886 887 unwind_plan.AppendRow (row); 888 unwind_plan.SetSourceName ("i386 default unwind plan"); 889 unwind_plan.SetSourcedFromCompiler (eLazyBoolNo); 890 unwind_plan.SetUnwindPlanValidAtAllInstructions (eLazyBoolNo); 891 return true; 892} 893 --- 84 unchanged lines hidden --- | 872 873 unwind_plan.AppendRow (row); 874 unwind_plan.SetSourceName ("i386 default unwind plan"); 875 unwind_plan.SetSourcedFromCompiler (eLazyBoolNo); 876 unwind_plan.SetUnwindPlanValidAtAllInstructions (eLazyBoolNo); 877 return true; 878} 879 --- 84 unchanged lines hidden --- |