102 lines · plain
1# REQUIRES: x862 3# RUN: rm -rf %t && split-file %s %t4# RUN: llvm-mc -filetype=obj -triple=x86_64 %t/main.s -o %t/main.o5# RUN: llvm-mc -filetype=obj -triple=x86_64 %t/a.s -o %t/a.o6# RUN: llvm-mc -filetype=obj -triple=x86_64 %t/a_b.s -o %t/a_b.o7# RUN: llvm-mc -filetype=obj -triple=x86_64 %t/b.s -o %t/b.o8# RUN: llvm-mc -filetype=obj -triple=x86_64 %t/err.s -o %t/err.o9# RUN: llvm-ar rc %t/a.a %t/a.o10# RUN: llvm-ar rc %t/a_b.a %t/a_b.o11# RUN: llvm-ar rc %t/b.a %t/b.o12# RUN: cd %t13 14## Nothing is extracted from an archive. The file is created with just a header.15# RUN: ld.lld main.o a.o b.a --why-extract=why1.txt16# RUN: FileCheck %s --input-file=why1.txt --check-prefix=CHECK1 --match-full-lines --strict-whitespace17 18# CHECK1:reference extracted symbol19# CHECK1-NOT:{{.}}20 21## Some archive members are extracted.22# RUN: ld.lld main.o a_b.a b.a --why-extract=why2.txt23# RUN: FileCheck %s --input-file=why2.txt --check-prefix=CHECK2 --match-full-lines --strict-whitespace24 25## A relocation error does not suppress the output.26# RUN: rm -f why2.txt && not ld.lld main.o a_b.a b.a err.o --why-extract=why2.txt27# RUN: FileCheck %s --input-file=why2.txt --check-prefix=CHECK2 --match-full-lines --strict-whitespace28 29# CHECK2:reference extracted symbol30# CHECK2-NEXT:main.o a_b.a(a_b.o) a31# CHECK2-NEXT:a_b.a(a_b.o) b.a(b.o) b()32 33## An undefined symbol error does not suppress the output.34# RUN: not ld.lld main.o a_b.a --why-extract=why3.txt35# RUN: FileCheck %s --input-file=why3.txt --check-prefix=CHECK3 --match-full-lines --strict-whitespace36 37## Check that backward references are supported.38## - means stdout.39# RUN: ld.lld b.a a_b.a main.o --why-extract=- | FileCheck %s --check-prefix=CHECK440 41# CHECK3:reference extracted symbol42# CHECK3-NEXT:main.o a_b.a(a_b.o) a43 44# CHECK4:reference extracted symbol45# CHECK4-NEXT:a_b.a(a_b.o) b.a(b.o) b()46# CHECK4-NEXT:main.o a_b.a(a_b.o) a47 48# RUN: ld.lld main.o a_b.a b.a --no-demangle --why-extract=- | FileCheck %s --check-prefix=MANGLED49 50# MANGLED: a_b.a(a_b.o) b.a(b.o) _Z1bv51 52# RUN: ld.lld main.o a.a b.a -u _Z1bv --why-extract=- | FileCheck %s --check-prefix=UNDEFINED53 54## We insert -u symbol before processing other files, so its name is <internal>.55## This is not ideal.56# UNDEFINED: <internal> b.a(b.o) b()57 58# RUN: ld.lld main.o a.a b.a --undefined-glob '_Z1b*' --why-extract=- | FileCheck %s --check-prefix=UNDEFINED_GLOB59 60# UNDEFINED_GLOB: --undefined-glob b.a(b.o) b()61 62# RUN: ld.lld main.o a.a b.a -e _Z1bv --why-extract=- | FileCheck %s --check-prefix=ENTRY63 64# ENTRY: --entry b.a(b.o) b()65 66# RUN: ld.lld main.o b.a -T a.lds --why-extract=- | FileCheck %s --check-prefix=SCRIPT67 68# SCRIPT: <internal> b.a(b.o) b()69 70# RUN: ld.lld main.o --start-lib a_b.o b.o --end-lib --why-extract=- | FileCheck %s --check-prefix=LAZY71 72# LAZY: main.o a_b.o a73# LAZY: a_b.o b.o b()74 75# RUN: not ld.lld -shared main.o --why-extract=/ 2>&1 | FileCheck %s --check-prefix=ERR76 77# ERR: error: cannot open --why-extract= file /: {{.*}}78 79#--- main.s80.globl _start81_start:82 call a83 84#--- a.s85.globl a86a:87 88#--- a_b.s89.globl a90a:91 call _Z1bv92 93#--- b.s94.globl _Z1bv95_Z1bv:96 97#--- a.lds98a = _Z1bv;99 100#--- err.s101.reloc ., R_X86_64_RELATIVE, 0102