From: Ulrich Weigand Date: Mon, 6 May 2013 17:28:30 +0000 (+0000) Subject: [SystemZ] Update non-pic DWARF encodings X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=e5c8c24ed5ff9500145633a550b016a2308c1740;p=oota-llvm.git [SystemZ] Update non-pic DWARF encodings As pointed out by Rafael Espindola, we should match the DWARF encodings produced by GCC in both pic and non-pic modes. This was not the case for the non-pic case. This patch changes all DWARF encodings to DW_EH_PE_absptr for the non-pic case, just like GCC does. The test case is updated to check for both variants. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181222 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/MC/MCObjectFileInfo.cpp b/lib/MC/MCObjectFileInfo.cpp index 3ac5333eaa5..96b62f19d93 100644 --- a/lib/MC/MCObjectFileInfo.cpp +++ b/lib/MC/MCObjectFileInfo.cpp @@ -298,12 +298,19 @@ void MCObjectFileInfo::InitELFMCObjectFileInfo(Triple T) { } else if (T.getArch() == Triple::systemz) { // All currently-defined code models guarantee that 4-byte PC-relative // values will be in range. - PersonalityEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel | - dwarf::DW_EH_PE_sdata4; - LSDAEncoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4; - FDEEncoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4; - TTypeEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel | - dwarf::DW_EH_PE_sdata4; + if (RelocM == Reloc::PIC_) { + PersonalityEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel | + dwarf::DW_EH_PE_sdata4; + LSDAEncoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4; + FDEEncoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4; + TTypeEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel | + dwarf::DW_EH_PE_sdata4; + } else { + PersonalityEncoding = dwarf::DW_EH_PE_absptr; + LSDAEncoding = dwarf::DW_EH_PE_absptr; + FDEEncoding = dwarf::DW_EH_PE_absptr; + TTypeEncoding = dwarf::DW_EH_PE_absptr; + } } // Solaris requires different flags for .eh_frame to seemingly every other diff --git a/test/DebugInfo/SystemZ/eh_frame_personality.ll b/test/DebugInfo/SystemZ/eh_frame_personality.ll index e5dbb15bc0d..92ba34da456 100644 --- a/test/DebugInfo/SystemZ/eh_frame_personality.ll +++ b/test/DebugInfo/SystemZ/eh_frame_personality.ll @@ -1,6 +1,6 @@ ; RUN: llc < %s -verify-machineinstrs -mtriple=s390x-linux-gnu | FileCheck -check-prefix=CHECK-FUNC %s ; RUN: llc < %s -verify-machineinstrs -mtriple=s390x-linux-gnu | FileCheck -check-prefix=CHECK-ET %s -; RUN: llc < %s -verify-machineinstrs -mtriple=s390x-linux-gnu | FileCheck -check-prefix=CHECK-REF %s +; RUN: llc < %s -verify-machineinstrs -mtriple=s390x-linux-gnu -relocation-model=pic | FileCheck -check-prefix=CHECK-REF %s declare i32 @__gxx_personality_v0(...) @@ -18,8 +18,8 @@ clean: ; CHECK-FUNC: foo: ; CHECK-FUNC: .cfi_startproc -; CHECK-FUNC: .cfi_personality 155, DW.ref.__gxx_personality_v0 -; CHECK-FUNC: .cfi_lsda 27, .Lexception0 +; CHECK-FUNC: .cfi_personality 0, __gxx_personality_v0 +; CHECK-FUNC: .cfi_lsda 0, .Lexception0 ; CHECK-FUNC: stmg %r14, %r15, 112(%r15) ; CHECK-FUNC: .cfi_offset %r14, -48 ; CHECK-FUNC: .cfi_offset %r15, -40 @@ -33,6 +33,8 @@ clean: ; CHECK-ET-NEXT: GCC_except_table0: ; CHECK-ET-NEXT: .Lexception0: ; +; CHECK-REF: .cfi_personality 155, DW.ref.__gxx_personality_v0 +; CHECK-REF: .cfi_lsda 27, .Lexception0 ; CHECK-REF: .hidden DW.ref.__gxx_personality_v0 ; CHECK-REF: .weak DW.ref.__gxx_personality_v0 ; CHECK-REF: .section .data.DW.ref.__gxx_personality_v0,"aGw",@progbits,DW.ref.__gxx_personality_v0,comdat