aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/MC/MCObjectFileInfo.cpp
diff options
context:
space:
mode:
authorAdhemerval Zanella <azanella@linux.vnet.ibm.com>2013-01-04 19:08:13 +0000
committerAdhemerval Zanella <azanella@linux.vnet.ibm.com>2013-01-04 19:08:13 +0000
commit9b0b7813955e618cf57335d5d107300d3cd3be64 (patch)
tree338c3427f07fed97a44af9b1f2696f0116cad3a4 /llvm/lib/MC/MCObjectFileInfo.cpp
parent3d1464caee9edeb1d2060f99de4e971f610d924e (diff)
downloadllvm-9b0b7813955e618cf57335d5d107300d3cd3be64.zip
llvm-9b0b7813955e618cf57335d5d107300d3cd3be64.tar.gz
llvm-9b0b7813955e618cf57335d5d107300d3cd3be64.tar.bz2
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. llvm-svn: 171506
Diffstat (limited to 'llvm/lib/MC/MCObjectFileInfo.cpp')
-rw-r--r--llvm/lib/MC/MCObjectFileInfo.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/llvm/lib/MC/MCObjectFileInfo.cpp b/llvm/lib/MC/MCObjectFileInfo.cpp
index d73b9b1..a46f7be 100644
--- a/llvm/lib/MC/MCObjectFileInfo.cpp
+++ b/llvm/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