diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2016-03-02 18:21:46 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2016-03-02 18:21:46 +0000 |
| commit | cdf3a2a5be7fb4c650ae30a44200248980e214ed (patch) | |
| tree | b2e025220d10a539cea516e6d917e13b0a2f377f | |
| parent | 62c1a1e7c7fc13b6763f999d100d91cff69afd93 (diff) | |
| download | bcm5719-llvm-cdf3a2a5be7fb4c650ae30a44200248980e214ed.tar.gz bcm5719-llvm-cdf3a2a5be7fb4c650ae30a44200248980e214ed.zip | |
1Fix handling of undef in partial LTO.
llvm-svn: 262497
| -rw-r--r-- | lld/ELF/SymbolTable.cpp | 2 | ||||
| -rw-r--r-- | lld/test/ELF/lto/Inputs/undef-mixed.s | 3 | ||||
| -rw-r--r-- | lld/test/ELF/lto/undef-mixed.ll | 22 |
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 +} |

