diff options
Diffstat (limited to 'lib/Target/PowerPC/PPCISelLowering.cpp')
| -rw-r--r-- | lib/Target/PowerPC/PPCISelLowering.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/lib/Target/PowerPC/PPCISelLowering.cpp b/lib/Target/PowerPC/PPCISelLowering.cpp index ad9bbe1..1f51d04 100644 --- a/lib/Target/PowerPC/PPCISelLowering.cpp +++ b/lib/Target/PowerPC/PPCISelLowering.cpp @@ -464,6 +464,40 @@ unsigned PPCTargetLowering::getFunctionAlignment(const Function *F) const { return 2; } +/// getPreferredLSDADataFormat - Return the preferred exception handling data +/// format for the LSDA. +unsigned PPCTargetLowering::getPreferredLSDADataFormat() const { + if (getTargetMachine().getSubtarget<PPCSubtarget>().isDarwin()) + return dwarf::DW_EH_PE_pcrel; + + if (PPCSubTarget.isPPC64() || + getTargetMachine().getRelocationModel() == Reloc::PIC_) { + unsigned DataTy = + (PPCSubTarget.isPPC64() ? + dwarf::DW_EH_PE_udata8 : dwarf::DW_EH_PE_udata4); + return dwarf::DW_EH_PE_pcrel | DataTy; + } + + return dwarf::DW_EH_PE_absptr; +} + +/// getPreferredFDEDataFormat - Return the preferred exception handling data +/// format for the FDE. +unsigned PPCTargetLowering::getPreferredFDEDataFormat() const { + if (getTargetMachine().getSubtarget<PPCSubtarget>().isDarwin()) + return dwarf::DW_EH_PE_pcrel; + + if (PPCSubTarget.isPPC64() || + getTargetMachine().getRelocationModel() == Reloc::PIC_) { + unsigned DataTy = + (PPCSubTarget.isPPC64() ? + dwarf::DW_EH_PE_udata8 : dwarf::DW_EH_PE_udata4); + return dwarf::DW_EH_PE_pcrel | DataTy; + } + + return dwarf::DW_EH_PE_absptr; +} + //===----------------------------------------------------------------------===// // Node matching predicates, for use by the tblgen matching code. //===----------------------------------------------------------------------===// |
