[PATCH] D37009: [ELF] - Fix for "Bug 34238 - LTO is optimizing away symbols referenced from linker scripts"
George Rimar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 23 01:38:25 PDT 2017
This revision was automatically updated to reflect the committed changes.
Closed by commit rL311534: [ELF] - Fix for "Bug 34238 - LTO is optimizing away symbols referenced from… (authored by grimar).
Changed prior to commit:
https://reviews.llvm.org/D37009?vs=112194&id=112306#toc
Repository:
rL LLVM
https://reviews.llvm.org/D37009
Files:
lld/trunk/ELF/Driver.cpp
lld/trunk/test/ELF/lto/linker-script-symbols.ll
Index: lld/trunk/ELF/Driver.cpp
===================================================================
--- lld/trunk/ELF/Driver.cpp
+++ lld/trunk/ELF/Driver.cpp
@@ -1012,6 +1012,11 @@
for (InputFile *F : Files)
Symtab->addFile<ELFT>(F);
+ // Some symbols (such as __ehdr_start) are defined lazily only when there
+ // are undefined symbols for them, so we add these to trigger that logic.
+ for (StringRef Sym : Script->Opt.ReferencedSymbols)
+ Symtab->addUndefined<ELFT>(Sym);
+
// If an entry symbol is in a static archive, pull out that file now
// to complete the symbol table. After this, no new names except a
// few linker-synthesized ones will be added to the symbol table.
@@ -1047,11 +1052,6 @@
if (ErrorCount)
return;
- // Some symbols (such as __ehdr_start) are defined lazily only when there
- // are undefined symbols for them, so we add these to trigger that logic.
- for (StringRef Sym : Script->Opt.ReferencedSymbols)
- Symtab->addUndefined<ELFT>(Sym);
-
// Apply symbol renames for -wrap and -defsym
Symtab->applySymbolRenames();
Index: lld/trunk/test/ELF/lto/linker-script-symbols.ll
===================================================================
--- lld/trunk/test/ELF/lto/linker-script-symbols.ll
+++ lld/trunk/test/ELF/lto/linker-script-symbols.ll
@@ -0,0 +1,29 @@
+; REQUIRES: x86
+; RUN: llvm-as %s -o %t.o
+; RUN: echo "foo = bar;" > %t.script
+
+; RUN: ld.lld -m elf_x86_64 %t.o -o %t2 --script %t.script -save-temps
+; RUN: llvm-readobj -symbols %t2.lto.o | FileCheck %s
+
+; CHECK-NOT: zed
+; CHECK: Symbol {
+; CHECK: Name: bar
+; CHECK-NEXT: Value:
+; CHECK-NEXT: Size:
+; CHECK-NEXT: Binding: Global
+; CHECK-NEXT: Type: Function
+; CHECK-NEXT: Other:
+; CHECK-NEXT: Section:
+; CHECK-NEXT: }
+; CHECK-NOT: zed
+
+target triple = "x86_64-unknown-linux-gnu"
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+
+define void @bar() {
+ ret void
+}
+
+define void @zed() {
+ ret void
+}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D37009.112306.patch
Type: text/x-patch
Size: 2004 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170823/0bf2b014/attachment.bin>
More information about the llvm-commits
mailing list