diff options
Diffstat (limited to 'lib/Target/X86/X86ISelLowering.cpp')
| -rw-r--r-- | lib/Target/X86/X86ISelLowering.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index 15af42e..3600987 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -1055,6 +1055,49 @@ unsigned X86TargetLowering::getFunctionAlignment(const Function *F) const { return F->hasFnAttr(Attribute::OptimizeForSize) ? 0 : 4; } +/// getPreferredLSDADataFormat - Return the preferred exception handling data +/// format for the LSDA. +unsigned X86TargetLowering::getPreferredLSDADataFormat() const { + if (Subtarget->isTargetDarwin()) + return dwarf::DW_EH_PE_pcrel; + + CodeModel::Model M = getTargetMachine().getCodeModel(); + + if (getTargetMachine().getRelocationModel() == Reloc::PIC_) { + if (!Subtarget->is64Bit() || M == CodeModel::Small) + return dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4; + + return dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata8; + } + + if (M == CodeModel::Small) + return dwarf::DW_EH_PE_sdata4; + + return dwarf::DW_EH_PE_absptr; +} + +/// getPreferredFDEDataFormat - Return the preferred exception handling data +/// format for the FDE. +unsigned X86TargetLowering::getPreferredFDEDataFormat() const { + if (Subtarget->isTargetDarwin()) + return dwarf::DW_EH_PE_pcrel; + + CodeModel::Model M = getTargetMachine().getCodeModel(); + + if (getTargetMachine().getRelocationModel() == Reloc::PIC_) { + if (!Subtarget->is64Bit() || + M == CodeModel::Small || M == CodeModel::Medium) + return dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4; + + return dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata8; + } + + if (M == CodeModel::Small || M == CodeModel::Medium) + return dwarf::DW_EH_PE_sdata4; + + return dwarf::DW_EH_PE_absptr; +} + //===----------------------------------------------------------------------===// // Return Value Calling Convention Implementation //===----------------------------------------------------------------------===// |
