Deleted Added
full compact
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 ---