From 89ccd0f31c30ecddf5ebfea4d799763863b78766 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Thu, 8 Dec 2016 22:36:12 +0000 Subject: [PATCH] Split linkerscript.s into small test files. linkerscript.s is the first test file for linker script, and at the moment it contains all tests for linker scripts. Now that test file doesn't make sense. linkerscript2.s was just badly named. Renamed searchdir.s. llvm-svn: 289148 --- lld/test/ELF/linkerscript/entry.s | 42 +++++++++++ lld/test/ELF/linkerscript/group.s | 56 ++++++++++++++ lld/test/ELF/linkerscript/linkerscript.s | 85 +--------------------- .../linkerscript/{linkerscript2.s => searchdir.s} | 3 +- 4 files changed, 101 insertions(+), 85 deletions(-) create mode 100644 lld/test/ELF/linkerscript/entry.s create mode 100644 lld/test/ELF/linkerscript/group.s rename lld/test/ELF/linkerscript/{linkerscript2.s => searchdir.s} (94%) diff --git a/lld/test/ELF/linkerscript/entry.s b/lld/test/ELF/linkerscript/entry.s new file mode 100644 index 0000000..acadeec --- /dev/null +++ b/lld/test/ELF/linkerscript/entry.s @@ -0,0 +1,42 @@ +# REQUIRES: x86, shell + +# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t + +# RUN: echo "ENTRY(_label)" > %t.script +# RUN: ld.lld -o %t2 %t.script %t +# RUN: llvm-readobj %t2 > /dev/null + +# The entry symbol should not cause an undefined error. +# RUN: echo "ENTRY(_wrong_label)" > %t.script +# RUN: ld.lld -o %t2 %t.script %t +# RUN: ld.lld --entry=abc -o %t2 %t + +# -e has precedence over linker script's ENTRY. +# RUN: echo "ENTRY(_label)" > %t.script +# RUN: ld.lld -e _start -o %t2 %t.script %t +# RUN: llvm-readobj -file-headers -symbols %t2 | \ +# RUN: FileCheck -check-prefix=OVERLOAD %s + +# OVERLOAD: Entry: [[ENTRY:0x[0-9A-F]+]] +# OVERLOAD: Name: _start +# OVERLOAD-NEXT: Value: [[ENTRY]] + +# The entry symbol can be a linker-script-defined symbol. +# RUN: echo "ENTRY(foo); foo = 1;" > %t.script +# RUN: ld.lld -o %t2 %t.script %t +# RUN: llvm-readobj -file-headers -symbols %t2 | \ +# RUN: FileCheck -check-prefix=SCRIPT %s + +# SCRIPT: Entry: 0x1 + +# RUN: echo "ENTRY(no_such_symbol);" > %t.script +# RUN: ld.lld -o %t2 %t.script %t 2>&1 | \ +# RUN: FileCheck -check-prefix=MISSING %s + +# MISSING: warning: cannot find entry symbol no_such_symbol + +.globl _start, _label +_start: + ret +_label: + ret diff --git a/lld/test/ELF/linkerscript/group.s b/lld/test/ELF/linkerscript/group.s new file mode 100644 index 0000000..79bd783 --- /dev/null +++ b/lld/test/ELF/linkerscript/group.s @@ -0,0 +1,56 @@ +# REQUIRES: x86, shell + +# RUN: mkdir -p %t.dir +# RUN: rm -f %t.dir/libxyz.a +# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t +# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux \ +# RUN: %p/Inputs/libsearch-st.s -o %t2.o +# RUN: llvm-ar rcs %t.dir/libxyz.a %t2.o + +# RUN: echo "GROUP(\"%t\")" > %t.script +# RUN: ld.lld -o %t2 %t.script +# RUN: llvm-readobj %t2 > /dev/null + +# RUN: echo "INPUT(\"%t\")" > %t.script +# RUN: ld.lld -o %t2 %t.script +# RUN: llvm-readobj %t2 > /dev/null + +# RUN: echo "GROUP(\"%t\" libxyz.a )" > %t.script +# RUN: not ld.lld -o %t2 %t.script 2>/dev/null +# RUN: ld.lld -o %t2 %t.script -L%t.dir +# RUN: llvm-readobj %t2 > /dev/null + +# RUN: echo "GROUP(\"%t\" =libxyz.a )" > %t.script +# RUN: not ld.lld -o %t2 %t.script 2>/dev/null +# RUN: ld.lld -o %t2 %t.script --sysroot=%t.dir +# RUN: llvm-readobj %t2 > /dev/null + +# RUN: echo "GROUP(\"%t\" -lxyz )" > %t.script +# RUN: not ld.lld -o %t2 %t.script 2>/dev/null +# RUN: ld.lld -o %t2 %t.script -L%t.dir +# RUN: llvm-readobj %t2 > /dev/null + +# RUN: echo "GROUP(\"%t\" libxyz.a )" > %t.script +# RUN: not ld.lld -o %t2 %t.script 2>/dev/null +# RUN: ld.lld -o %t2 %t.script -L%t.dir +# RUN: llvm-readobj %t2 > /dev/null + +# RUN: echo "GROUP(\"%t\" /libxyz.a )" > %t.script +# RUN: echo "GROUP(\"%t\" /libxyz.a )" > %t.dir/xyz.script +# RUN: not ld.lld -o %t2 %t.script 2>/dev/null +# RUN: not ld.lld -o %t2 %t.script --sysroot=%t.dir 2>/dev/null +# RUN: ld.lld -o %t2 %t.dir/xyz.script --sysroot=%t.dir +# RUN: llvm-readobj %t2 > /dev/null + +# RUN: echo "GROUP(\"%t.script2\")" > %t.script1 +# RUN: echo "GROUP(\"%t\")" > %t.script2 +# RUN: ld.lld -o %t2 %t.script1 +# RUN: llvm-readobj %t2 > /dev/null + +# RUN: echo "GROUP(AS_NEEDED(\"%t\"))" > %t.script +# RUN: ld.lld -o %t2 %t.script +# RUN: llvm-readobj %t2 > /dev/null + +.globl _start +_start: + ret diff --git a/lld/test/ELF/linkerscript/linkerscript.s b/lld/test/ELF/linkerscript/linkerscript.s index 2b7ad8e..a6a30bd 100644 --- a/lld/test/ELF/linkerscript/linkerscript.s +++ b/lld/test/ELF/linkerscript/linkerscript.s @@ -5,98 +5,18 @@ # REQUIRES: shell # REQUIRES: x86 -# RUN: mkdir -p %t.dir # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux \ # RUN: %p/Inputs/libsearch-st.s -o %t2.o -# RUN: rm -f %t.dir/libxyz.a -# RUN: llvm-ar rcs %t.dir/libxyz.a %t2.o # RUN: echo "EXTERN( undef undef2 )" > %t.script # RUN: ld.lld %t -o %t2 %t.script # RUN: llvm-readobj %t2 > /dev/null -# RUN: echo "GROUP(\"%t\")" > %t.script -# RUN: ld.lld -o %t2 %t.script -# RUN: llvm-readobj %t2 > /dev/null - -# RUN: echo "INPUT(\"%t\")" > %t.script -# RUN: ld.lld -o %t2 %t.script -# RUN: llvm-readobj %t2 > /dev/null - -# RUN: echo "GROUP(\"%t\" libxyz.a )" > %t.script -# RUN: not ld.lld -o %t2 %t.script 2>/dev/null -# RUN: ld.lld -o %t2 %t.script -L%t.dir -# RUN: llvm-readobj %t2 > /dev/null - -# RUN: echo "GROUP(\"%t\" =libxyz.a )" > %t.script -# RUN: not ld.lld -o %t2 %t.script 2>/dev/null -# RUN: ld.lld -o %t2 %t.script --sysroot=%t.dir -# RUN: llvm-readobj %t2 > /dev/null - -# RUN: echo "GROUP(\"%t\" -lxyz )" > %t.script -# RUN: not ld.lld -o %t2 %t.script 2>/dev/null -# RUN: ld.lld -o %t2 %t.script -L%t.dir -# RUN: llvm-readobj %t2 > /dev/null - -# RUN: echo "GROUP(\"%t\" libxyz.a )" > %t.script -# RUN: not ld.lld -o %t2 %t.script 2>/dev/null -# RUN: ld.lld -o %t2 %t.script -L%t.dir -# RUN: llvm-readobj %t2 > /dev/null - -# RUN: echo "GROUP(\"%t\" /libxyz.a )" > %t.script -# RUN: echo "GROUP(\"%t\" /libxyz.a )" > %t.dir/xyz.script -# RUN: not ld.lld -o %t2 %t.script 2>/dev/null -# RUN: not ld.lld -o %t2 %t.script --sysroot=%t.dir 2>/dev/null -# RUN: ld.lld -o %t2 %t.dir/xyz.script --sysroot=%t.dir -# RUN: llvm-readobj %t2 > /dev/null - -# RUN: echo "GROUP(\"%t.script2\")" > %t.script1 -# RUN: echo "GROUP(\"%t\")" > %t.script2 -# RUN: ld.lld -o %t2 %t.script1 -# RUN: llvm-readobj %t2 > /dev/null - -# RUN: echo "ENTRY(_label)" > %t.script -# RUN: ld.lld -o %t2 %t.script %t -# RUN: llvm-readobj %t2 > /dev/null - -# The entry symbol should not cause an undefined error. -# RUN: echo "ENTRY(_wrong_label)" > %t.script -# RUN: ld.lld -o %t2 %t.script %t -# RUN: ld.lld --entry=abc -o %t2 %t - -# -e has precedence over linker script's ENTRY. -# RUN: echo "ENTRY(_label)" > %t.script -# RUN: ld.lld -e _start -o %t2 %t.script %t -# RUN: llvm-readobj -file-headers -symbols %t2 | \ -# RUN: FileCheck -check-prefix=ENTRY-OVERLOAD %s - -# ENTRY-OVERLOAD: Entry: [[ENTRY:0x[0-9A-F]+]] -# ENTRY-OVERLOAD: Name: _start -# ENTRY-OVERLOAD-NEXT: Value: [[ENTRY]] - -# The entry symbol can be a linker-script-defined symbol. -# RUN: echo "ENTRY(foo); foo = 1;" > %t.script -# RUN: ld.lld -o %t2 %t.script %t -# RUN: llvm-readobj -file-headers -symbols %t2 | \ -# RUN: FileCheck -check-prefix=ENTRY-SCRIPT %s - -# ENTRY-SCRIPT: Entry: 0x1 - -# RUN: echo "ENTRY(no_such_symbol);" > %t.script -# RUN: ld.lld -o %t2 %t.script %t 2>&1 | \ -# RUN: FileCheck -check-prefix=ENTRY-MISSING %s - -# ENTRY-MISSING: warning: cannot find entry symbol no_such_symbol - # RUN: echo "OUTPUT_FORMAT(elf64-x86-64) /*/*/ GROUP(\"%t\" )" > %t.script # RUN: ld.lld -o %t2 %t.script # RUN: llvm-readobj %t2 > /dev/null -# RUN: echo "GROUP(AS_NEEDED(\"%t\"))" > %t.script -# RUN: ld.lld -o %t2 %t.script -# RUN: llvm-readobj %t2 > /dev/null - # RUN: rm -f %t.out # RUN: echo "OUTPUT(\"%t.out\")" > %t.script # RUN: ld.lld %t.script %t @@ -127,7 +47,6 @@ .globl _start, _label _start: - mov $60, %rax - mov $42, %rdi + ret _label: - syscall + ret diff --git a/lld/test/ELF/linkerscript/linkerscript2.s b/lld/test/ELF/linkerscript/searchdir.s similarity index 94% rename from lld/test/ELF/linkerscript/linkerscript2.s rename to lld/test/ELF/linkerscript/searchdir.s index 6ecd9e7..858c3c5 100644 --- a/lld/test/ELF/linkerscript/linkerscript2.s +++ b/lld/test/ELF/linkerscript/searchdir.s @@ -2,9 +2,8 @@ # implemented in Python, and the Cygwin implementations of the Unix utilities. # Avoid running these tests on Windows for now by requiring a real shell. -# REQUIRES: shell +# REQUIRES: x86, shell -# REQUIRES: x86 # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-freebsd %s -o %t # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-freebsd \ # RUN: %p/Inputs/libsearch-dyn.s -o %tdyn.o -- 2.7.4