[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