summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2016-03-02 18:21:46 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2016-03-02 18:21:46 +0000
commitcdf3a2a5be7fb4c650ae30a44200248980e214ed (patch)
treeb2e025220d10a539cea516e6d917e13b0a2f377f
parent62c1a1e7c7fc13b6763f999d100d91cff69afd93 (diff)
downloadbcm5719-llvm-cdf3a2a5be7fb4c650ae30a44200248980e214ed.tar.gz
bcm5719-llvm-cdf3a2a5be7fb4c650ae30a44200248980e214ed.zip
1Fix handling of undef in partial LTO.
llvm-svn: 262497
-rw-r--r--lld/ELF/SymbolTable.cpp2
-rw-r--r--lld/test/ELF/lto/Inputs/undef-mixed.s3
-rw-r--r--lld/test/ELF/lto/undef-mixed.ll22
3 files changed, 27 insertions, 0 deletions
diff --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp
index 68a28c184fe..98fb79e621c 100644
--- a/lld/ELF/SymbolTable.cpp
+++ b/lld/ELF/SymbolTable.cpp
@@ -156,6 +156,8 @@ template <class ELFT> void SymbolTable<ELFT>::addCombinedLtoObject() {
Obj->parse(DummyGroups);
for (SymbolBody *Body : Obj->getSymbols()) {
Symbol *Sym = insert(Body);
+ if (!Sym->Body->isUndefined() && Body->isUndefined())
+ continue;
Sym->Body = Body;
}
}
diff --git a/lld/test/ELF/lto/Inputs/undef-mixed.s b/lld/test/ELF/lto/Inputs/undef-mixed.s
new file mode 100644
index 00000000000..2e4b7e114bb
--- /dev/null
+++ b/lld/test/ELF/lto/Inputs/undef-mixed.s
@@ -0,0 +1,3 @@
+ .globl bar
+bar:
+ retq
diff --git a/lld/test/ELF/lto/undef-mixed.ll b/lld/test/ELF/lto/undef-mixed.ll
new file mode 100644
index 00000000000..0fff5781020
--- /dev/null
+++ b/lld/test/ELF/lto/undef-mixed.ll
@@ -0,0 +1,22 @@
+; REQUIRES: x86
+; RUN: llvm-mc %p/Inputs/undef-mixed.s -o %t.o -filetype=obj -triple=x86_64-pc-linux
+; RUN: llvm-as %s -o %t2.o
+; RUN: ld.lld %t2.o %t.o -o %t.so -shared
+; RUN: llvm-readobj -t %t.so | FileCheck %s
+
+; CHECK: Name: bar
+; CHECK-NEXT: Value:
+; CHECK-NEXT: Size: 0
+; CHECK-NEXT: Binding: Global
+; CHECK-NEXT: Type: None
+; 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"
+
+declare void @bar()
+define void @foo() {
+ call void @bar()
+ ret void
+}
OpenPOWER on IntegriCloud