diff options
author | Adhemerval Zanella <azanella@linux.vnet.ibm.com> | 2013-01-04 19:08:13 +0000 |
---|---|---|
committer | Adhemerval Zanella <azanella@linux.vnet.ibm.com> | 2013-01-04 19:08:13 +0000 |
commit | 7b449889e7886b263718b5103538970f287bc37e (patch) | |
tree | adce081f990c3c199145baac8c42561f51cc5bba /lib/MC/MCObjectFileInfo.cpp | |
parent | 13410a11e7247ed9d7841e219fdcdc93427c039e (diff) |
PowerPC: Fix eh_frame relocation for PIC
This patch fixes the PPC eh_frame definitions for the personality and
frame unwinding for PIC objects. It makes PIC build correctly creates
relative relocations in the '.rela.eh_frame' segments and thus avoiding
a text relocation that generates a DT_TEXTREL segments in link phase.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171506 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCObjectFileInfo.cpp')
-rw-r--r-- | lib/MC/MCObjectFileInfo.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/lib/MC/MCObjectFileInfo.cpp b/lib/MC/MCObjectFileInfo.cpp index d73b9b1005..a46f7be5da 100644 --- a/lib/MC/MCObjectFileInfo.cpp +++ b/lib/MC/MCObjectFileInfo.cpp @@ -256,6 +256,17 @@ void MCObjectFileInfo::InitELFMCObjectFileInfo(Triple T) { TTypeEncoding = (CMModel == CodeModel::Small) ? dwarf::DW_EH_PE_udata4 : dwarf::DW_EH_PE_absptr; } + } else if (T.getArch() == Triple::ppc64) { + PersonalityEncoding = dwarf::DW_EH_PE_udata8; + PersonalityEncoding |= (RelocM == Reloc::PIC_) + ? dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel + : dwarf::DW_EH_PE_absptr; + unsigned PICFlag = (RelocM == Reloc::PIC_) ? dwarf::DW_EH_PE_pcrel + : dwarf::DW_EH_PE_absptr; + FDECFIEncoding = PICFlag | dwarf::DW_EH_PE_sdata4; + LSDAEncoding = PICFlag | dwarf::DW_EH_PE_udata8; + FDEEncoding = PICFlag | dwarf::DW_EH_PE_sdata4; + TTypeEncoding = PICFlag | dwarf::DW_EH_PE_sdata4; } // Solaris requires different flags for .eh_frame to seemingly every other |