[llvm-commits] [llvm] r126933 - in /llvm/trunk: lib/MC/ELFObjectWriter.cpp test/MC/ELF/weak-relocation.s
Eli Friedman
eli.friedman at gmail.com
Wed Mar 2 23:24:36 PST 2011
Author: efriedma
Date: Thu Mar 3 01:24:36 2011
New Revision: 126933
URL: http://llvm.org/viewvc/llvm-project?rev=126933&view=rev
Log:
PR9352: Always emit a relocation for weak symbols. Not emitting relocations
for calls to weak symbols with a definition has the appearance of working
with LLVM-generated code because weak symbol definitions are put in their
own sections.
Added:
llvm/trunk/test/MC/ELF/weak-relocation.s
Modified:
llvm/trunk/lib/MC/ELFObjectWriter.cpp
Modified: llvm/trunk/lib/MC/ELFObjectWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/ELFObjectWriter.cpp?rev=126933&r1=126932&r2=126933&view=diff
==============================================================================
--- llvm/trunk/lib/MC/ELFObjectWriter.cpp (original)
+++ llvm/trunk/lib/MC/ELFObjectWriter.cpp Thu Mar 3 01:24:36 2011
@@ -317,6 +317,13 @@
MCDataFragment *F,
const MCSectionData *SD);
+ virtual bool
+ IsSymbolRefDifferenceFullyResolvedImpl(const MCAssembler &Asm,
+ const MCSymbolData &DataA,
+ const MCFragment &FB,
+ bool InSet,
+ bool IsPCRel) const;
+
virtual void WriteObject(MCAssembler &Asm, const MCAsmLayout &Layout);
virtual void WriteSection(MCAssembler &Asm,
const SectionIndexMapTy &SectionIndexMap,
@@ -1438,6 +1445,18 @@
}
}
+bool
+ELFObjectWriter::IsSymbolRefDifferenceFullyResolvedImpl(const MCAssembler &Asm,
+ const MCSymbolData &DataA,
+ const MCFragment &FB,
+ bool InSet,
+ bool IsPCRel) const {
+ if (DataA.getFlags() & ELF_STB_Weak)
+ return false;
+ return MCObjectWriter::IsSymbolRefDifferenceFullyResolvedImpl(
+ Asm, DataA, FB,InSet, IsPCRel);
+}
+
MCObjectWriter *llvm::createELFObjectWriter(MCELFObjectTargetWriter *MOTW,
raw_ostream &OS,
bool IsLittleEndian) {
Added: llvm/trunk/test/MC/ELF/weak-relocation.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/weak-relocation.s?rev=126933&view=auto
==============================================================================
--- llvm/trunk/test/MC/ELF/weak-relocation.s (added)
+++ llvm/trunk/test/MC/ELF/weak-relocation.s Thu Mar 3 01:24:36 2011
@@ -0,0 +1,15 @@
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | elf-dump | FileCheck %s
+
+// Test that weak symbols always produce relocations
+
+ .weak foo
+foo:
+bar:
+ call foo
+
+//CHECK: # Relocation 0x00000000
+//CHECK-NEXT: (('r_offset', 0x00000001)
+//CHECK-NEXT: ('r_sym', 0x00000005)
+//CHECK-NEXT: ('r_type', 0x00000002)
+//CHECK-NEXT: ('r_addend', 0xfffffffc)
+//CHECK-NEXT: ),
More information about the llvm-commits
mailing list