From 0942e39061c5d095e3d4cdeb6658ef00c9bf8c1c Mon Sep 17 00:00:00 2001 From: Tim Northover Date: Tue, 22 Jul 2014 15:47:09 +0000 Subject: [PATCH] X86: drop relocations on __eh_frame sections globally. Without this, we produce non-extern relocations when targeting older OS X versions that ld64 can't cope with in the particular context of __eh_frame sections (who'd want generic relocation-processing anyway?). This means that an updated linker (ld64 from Xcode 3.2.6 or later) may be needed when targeting such platforms with a modern version of LLVM, but this is probably the case anyway and a reasonable requirement. PR20212, rdar://problem/17544795 llvm-svn: 213665 --- llvm/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp | 9 ++++----- llvm/test/MC/MachO/eh-frame-reloc.s | 20 +++----------------- 2 files changed, 7 insertions(+), 22 deletions(-) diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp index 83b2777..b1411bc 100644 --- a/llvm/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp +++ b/llvm/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp @@ -72,11 +72,10 @@ X86MCAsmInfoDarwin::X86MCAsmInfoDarwin(const Triple &T) { if (T.isMacOSX() && T.isMacOSXVersionLT(10, 6)) HasWeakDefCanBeHiddenDirective = false; - // FIXME: this should not depend on the target OS version, but on the ld64 - // version in use. From at least >= ld64-97.17 (Xcode 3.2.6) the abs-ified - // FDE relocs may be used. We also use them for the ios simulator. - DwarfFDESymbolsUseAbsDiff = (T.isMacOSX() && !T.isMacOSXVersionLT(10, 6)) - || T.isiOS(); + // Assume ld64 is new enough that the abs-ified FDE relocs may be used + // (actually, must, since otherwise the non-extern relocations we produce + // overwhelm ld64's tiny little mind and it fails). + DwarfFDESymbolsUseAbsDiff = true; UseIntegratedAssembler = true; } diff --git a/llvm/test/MC/MachO/eh-frame-reloc.s b/llvm/test/MC/MachO/eh-frame-reloc.s index e14825b..c39ce84 100644 --- a/llvm/test/MC/MachO/eh-frame-reloc.s +++ b/llvm/test/MC/MachO/eh-frame-reloc.s @@ -1,10 +1,10 @@ // RUN: llvm-mc < %s -triple=x86_64-apple-macosx10.7 -filetype=obj | llvm-readobj -r | FileCheck %s // RUN: llvm-mc < %s -triple=x86_64-apple-macosx10.6 -filetype=obj | llvm-readobj -r | FileCheck %s // RUN: llvm-mc < %s -triple=x86_64-apple-ios7.0.0 -filetype=obj | llvm-readobj -r | FileCheck %s -// RUN: llvm-mc < %s -triple=x86_64-apple-macosx10.5 -filetype=obj | llvm-readobj -r | FileCheck --check-prefix=OLD64 %s +// RUN: llvm-mc < %s -triple=x86_64-apple-macosx10.5 -filetype=obj | llvm-readobj -r | FileCheck %s // RUN: llvm-mc < %s -triple=i686-apple-macosx10.6 -filetype=obj | llvm-readobj -r | FileCheck %s -// RUN: llvm-mc < %s -triple=i686-apple-macosx10.5 -filetype=obj | llvm-readobj -r | FileCheck --check-prefix=OLD32 %s -// RUN: llvm-mc < %s -triple=i686-apple-macosx10.4 -filetype=obj | llvm-readobj -r | FileCheck --check-prefix=OLD32 %s +// RUN: llvm-mc < %s -triple=i686-apple-macosx10.5 -filetype=obj | llvm-readobj -r | FileCheck %s +// RUN: llvm-mc < %s -triple=i686-apple-macosx10.4 -filetype=obj | llvm-readobj -r | FileCheck %s .globl _bar .align 4, 0x90 @@ -14,17 +14,3 @@ _bar: // CHECK: Relocations [ // CHECK-NEXT: ] - -// OLD32: Relocations [ -// OLD32-NEXT: Section __eh_frame { -// OLD32-NEXT: 0x20 0 2 n/a GENERIC_RELOC_LOCAL_SECTDIFF 1 0x0 -// OLD32-NEXT: 0x0 0 2 n/a GENERIC_RELOC_PAIR 1 0x20 -// OLD32-NEXT: } -// OLD32-NEXT: ] - -// OLD64: Relocations [ -// OLD64-NEXT: Section __eh_frame { -// OLD64-NEXT: 0x20 0 3 0 X86_64_RELOC_SUBTRACTOR 0 -// OLD64-NEXT: 0x20 0 3 1 X86_64_RELOC_UNSIGNED 0 _bar -// OLD64-NEXT: } -// OLD64-NEXT: ] -- 2.7.4