[PATCH] D37208: [ELF] - Linkerscript: add test for checking interaction with archive files.

George Rimar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 28 03:59:29 PDT 2017


grimar created this revision.
Herald added subscribers: mehdi_amini, emaste.

Imagine we have archive file with symbols `foo` and `bar`.
And script that do `foo = 1`.
In that case correct behavior is not to fetch symbols from archive but
create absolute symbol. 
If we have script `zed = foo` then symbol `foo` will be fetched from archive.
Currently we have `Opt.ReferencedSymbols` list of symbols referenced
by script and create them undefined early. That allows archives fetching logic 
to work. That is what LLD already do and it seems everything is fine here.

But during writing https://reviews.llvm.org/D37059 I had to add left side of assignments to
Opt.ReferencedSymbols list because wanted to stop optimizing out
these symbols when LTO is involved (LTO also uses this list). 
And today I realized that testcase from this patch would have fail if we
would have it before.

So I suggest to add this testcase to be able to catch such situations
during writing other patches.


https://reviews.llvm.org/D37208

Files:
  test/ELF/linkerscript/Inputs/assignment-archive.s
  test/ELF/linkerscript/assignment-archive.s


Index: test/ELF/linkerscript/assignment-archive.s
===================================================================
--- test/ELF/linkerscript/assignment-archive.s
+++ test/ELF/linkerscript/assignment-archive.s
@@ -0,0 +1,18 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %S/Inputs/assignment-archive.s -o %ta.o
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+# RUN: rm -f %tar.a
+# RUN: llvm-ar rcs %tar.a %ta.o
+
+# RUN: echo "SECTIONS { foo = 1; }" > %t1.script
+# RUN: ld.lld -o %t1.exe --script %t1.script %tar.a %t.o
+# RUN: llvm-readobj -symbols %t1.exe | FileCheck %s
+# CHECK-NOT: bar
+# CHECK:     foo
+# CHECK-NOT: bar
+
+# RUN: echo "SECTIONS { zed = foo; }" > %t2.script
+# RUN: ld.lld -o %t2.exe --script %t2.script %tar.a %t.o
+# RUN: llvm-readobj -symbols %t2.exe | FileCheck %s --check-prefix=SYMS
+# SYMS: bar
+# SYMS: foo
Index: test/ELF/linkerscript/Inputs/assignment-archive.s
===================================================================
--- test/ELF/linkerscript/Inputs/assignment-archive.s
+++ test/ELF/linkerscript/Inputs/assignment-archive.s
@@ -0,0 +1,8 @@
+.text
+.globl foo
+foo:
+ nop
+
+.globl bar
+bar:
+ nop


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D37208.112876.patch
Type: text/x-patch
Size: 1193 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170828/f90a04a6/attachment.bin>


More information about the llvm-commits mailing list