[lld] r218272 - Re-commit r218259.
Rui Ueyama
ruiu at google.com
Mon Sep 22 13:48:04 PDT 2014
Author: ruiu
Date: Mon Sep 22 15:48:04 2014
New Revision: 218272
URL: http://llvm.org/viewvc/llvm-project?rev=218272&view=rev
Log:
Re-commit r218259.
Added:
lld/trunk/test/elf/Inputs/undef2-so.o.yaml
lld/trunk/test/elf/undef-from-dso-to-main.test
Modified:
lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h
lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp
lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h
Modified: lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h?rev=218272&r1=218271&r2=218272&view=diff
==============================================================================
--- lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h (original)
+++ lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h Mon Sep 22 15:48:04 2014
@@ -262,8 +262,8 @@ public:
void setCreateSeparateROSegment() { _mergeRODataToTextSegment = false; }
- bool hasCoalescedWeakPair(StringRef name) const {
- return _weakCoalescedSymbols.count(name) != 0;
+ bool hasCoalescedSharedLibPair(StringRef name) const {
+ return _sharedLibCoalescedSymbols.count(name) != 0;
}
private:
@@ -300,7 +300,7 @@ protected:
StringRefVector _rpathList;
StringRefVector _rpathLinkList;
std::map<std::string, uint64_t> _absoluteSymbols;
- llvm::StringSet<> _weakCoalescedSymbols;
+ llvm::StringSet<> _sharedLibCoalescedSymbols;
};
} // end namespace lld
Modified: lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp?rev=218272&r1=218271&r2=218272&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp Mon Sep 22 15:48:04 2014
@@ -241,11 +241,6 @@ std::unique_ptr<File> ELFLinkingContext:
return std::move(undefinedSymFile);
}
-static bool isSharedWeakAtom(const UndefinedAtom *ua) {
- return ua->canBeNull() != UndefinedAtom::canBeNullNever &&
- isa<SharedLibraryFile>(ua->file());
-}
-
void ELFLinkingContext::notifySymbolTableCoalesce(const Atom *existingAtom,
const Atom *newAtom,
bool &useNew) {
@@ -259,11 +254,12 @@ void ELFLinkingContext::notifySymbolTabl
ua = dyn_cast<UndefinedAtom>(existingAtom);
}
- if (da && ua && da->scope() == Atom::scopeGlobal && isSharedWeakAtom(ua))
- // If strong defined atom coalesces away weak atom declared
- // in the shared object the strong atom needs to be dynamicaly exported.
+ if (da && ua && da->scope() == Atom::scopeGlobal &&
+ isa<SharedLibraryFile>(ua->file()))
+ // If strong defined atom coalesces away an atom declared
+ // in the shared object the strong atom needs to be dynamically exported.
// Save its name.
- _weakCoalescedSymbols.insert(ua->name());
+ _sharedLibCoalescedSymbols.insert(ua->name());
}
} // end namespace lld
Modified: lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h?rev=218272&r1=218271&r2=218272&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h Mon Sep 22 15:48:04 2014
@@ -183,7 +183,7 @@ void OutputELFWriter<ELFT>::buildDynamic
for (const auto &atom : section->atoms()) {
const DefinedAtom *da = dyn_cast<const DefinedAtom>(atom->_atom);
if (da && (da->dynamicExport() == DefinedAtom::dynamicExportAlways ||
- _context.hasCoalescedWeakPair(da->name())))
+ _context.hasCoalescedSharedLibPair(da->name())))
_dynamicSymbolTable->addSymbol(atom->_atom, section->ordinal(),
atom->_virtualAddr, atom);
}
Added: lld/trunk/test/elf/Inputs/undef2-so.o.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Inputs/undef2-so.o.yaml?rev=218272&view=auto
==============================================================================
--- lld/trunk/test/elf/Inputs/undef2-so.o.yaml (added)
+++ lld/trunk/test/elf/Inputs/undef2-so.o.yaml Mon Sep 22 15:48:04 2014
@@ -0,0 +1,50 @@
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000001
+ Content: 554889E5488B05000000008B005DC3
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000007
+ Symbol: myexportedsymbol
+ Type: R_X86_64_GOTPCREL
+ Addend: -4
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ Global:
+ - Name: func
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x000000000000000F
+ - Name: _GLOBAL_OFFSET_TABLE_
+ - Name: myexportedsymbol
Added: lld/trunk/test/elf/undef-from-dso-to-main.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/undef-from-dso-to-main.test?rev=218272&view=auto
==============================================================================
--- lld/trunk/test/elf/undef-from-dso-to-main.test (added)
+++ lld/trunk/test/elf/undef-from-dso-to-main.test Mon Sep 22 15:48:04 2014
@@ -0,0 +1,52 @@
+# Tests that a reference from a DSO to a regular object
+# forces the final executable to export the symbol.
+
+#RUN: yaml2obj -format=elf %p/Inputs/undef2-so.o.yaml -o=%t.o.so
+#RUN: lld -flavor gnu -target x86_64 -shared %t.o.so -o %T/libundef2.so
+#RUN: yaml2obj -format=elf %s -o=%t.o
+#RUN: lld -flavor gnu -target x86_64 %t.o -L%T -lundef2 -o %t1
+#RUN: llvm-readobj -dyn-symbols %t1 | FileCheck -check-prefix CHECKSYMS %s
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000001
+ Content: C3
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: '002E7379'
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ Global:
+ - Name: myexportedsymbol
+ Type: STT_OBJECT
+ Section: .bss
+ Size: 0x0000000000000004
+ - Name: _start
+ Section: .text
+ Size: 0x0000000000000001
+
+#CHECKSYMS: myexportedsymbol
More information about the llvm-commits
mailing list