[lld] r265208 - [LTO] Fix symbols which were internalized incorrectly.
Davide Italiano via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 1 19:10:40 PDT 2016
Author: davide
Date: Fri Apr 1 21:10:40 2016
New Revision: 265208
URL: http://llvm.org/viewvc/llvm-project?rev=265208&view=rev
Log:
[LTO] Fix symbols which were internalized incorrectly.
If a symbol is defined in an archive, when we replace its body
the isUsedInRegularObj wasn't set correctly. Internalize makes
its decision based on that bit so we ended up internalizing
symbols that we shouldn't (because they're referenced).
This should fix. Thanks to Peter and Rafael for discussion
and help diagnosing the issue!
Found during LTO of unittests.
Added:
lld/trunk/test/ELF/lto/Inputs/archive-2.ll
lld/trunk/test/ELF/lto/archive-2.ll
Modified:
lld/trunk/ELF/SymbolTable.cpp
Modified: lld/trunk/ELF/SymbolTable.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SymbolTable.cpp?rev=265208&r1=265207&r2=265208&view=diff
==============================================================================
--- lld/trunk/ELF/SymbolTable.cpp (original)
+++ lld/trunk/ELF/SymbolTable.cpp Fri Apr 1 21:10:40 2016
@@ -223,6 +223,7 @@ template <class ELFT> void SymbolTable<E
}
// Found a definition for something also in an archive.
// Ignore the archive definition.
+ New->setUsedInRegularObj();
Sym->Body = New;
return;
}
Added: lld/trunk/test/ELF/lto/Inputs/archive-2.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/lto/Inputs/archive-2.ll?rev=265208&view=auto
==============================================================================
--- lld/trunk/test/ELF/lto/Inputs/archive-2.ll (added)
+++ lld/trunk/test/ELF/lto/Inputs/archive-2.ll Fri Apr 1 21:10:40 2016
@@ -0,0 +1,6 @@
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @_start() {
+ ret void
+}
Added: lld/trunk/test/ELF/lto/archive-2.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/lto/archive-2.ll?rev=265208&view=auto
==============================================================================
--- lld/trunk/test/ELF/lto/archive-2.ll (added)
+++ lld/trunk/test/ELF/lto/archive-2.ll Fri Apr 1 21:10:40 2016
@@ -0,0 +1,28 @@
+; REQUIRES: x86
+; RUN: llvm-as %S/Inputs/archive-2.ll -o %t1.o
+; RUN: rm -f %t.a
+; RUN: llvm-ar rcs %t.a %t1.o
+; RUN: llvm-as %s -o %t2.o
+; RUN: ld.lld -m elf_x86_64 %t2.o %t.a -o %t3
+; RUN: llvm-readobj -t %t3 | FileCheck %s
+; RUN: ld.lld -m elf_x86_64 %t2.o --whole-archive %t.a -o %t3 -shared
+; RUN: llvm-readobj -t %t3 | FileCheck %s
+
+; CHECK: Name: _start (
+; CHECK-NEXT: Value:
+; CHECK-NEXT: Size:
+; CHECK-NEXT: Binding: Global
+; CHECK-NEXT: Type: Function
+; CHECK-NEXT: Other: 0
+; CHECK-NEXT: Section: .text
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @g() {
+ call void @_start()
+ ret void
+}
+
+declare void @_start()
+
More information about the llvm-commits
mailing list