• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# REQUIRES: x86
2# Test -y symbol and -trace-symbol=symbol
3
4# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
5# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux \
6# RUN: %p/Inputs/trace-symbols-foo-weak.s -o %t1
7# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux \
8# RUN: %p/Inputs/trace-symbols-foo-strong.s -o %t2
9# RUN: ld.lld -shared %t1 -o %t1.so
10# RUN: ld.lld -shared %t2 -o %t2.so
11# RUN: rm -f %t1.a
12# RUN: llvm-ar rcs %t1.a %t1
13# RUN: rm -f %t2.a
14# RUN: llvm-ar rcs %t2.a %t2
15
16# RUN: ld.lld -y foo -shared %t1 %t1.so -o /dev/null | \
17# RUN:   FileCheck --check-prefix=PREEMPT %s --implicit-check-not=foo
18# PREEMPT:      trace-symbols.s.tmp1: definition of foo
19# PREEMPT-NEXT: trace-symbols.s.tmp1.so: shared definition of foo
20
21# RUN: ld.lld -y foo -trace-symbol common -trace-symbol=hsymbol \
22# RUN:   %t %t1 %t2 -o %t3 | FileCheck -check-prefix=OBJECTRFOO %s
23# OBJECTRFOO: trace-symbols.s.tmp: reference to foo
24
25# RUN: ld.lld -y foo -trace-symbol=common -trace-symbol=hsymbol \
26# RUN:   %t %t1 %t2 -o %t3 | FileCheck -check-prefix=OBJECTDCOMMON %s
27# OBJECTDCOMMON: trace-symbols.s.tmp1: common definition of common
28
29# RUN: ld.lld -y foo -trace-symbol=common -trace-symbol=hsymbol \
30# RUN:   %t %t1 %t2 -o %t3 | FileCheck -check-prefix=OBJECTD1FOO %s
31# OBJECTD1FOO: trace-symbols.s.tmp: reference to foo
32# OBJECTD1FOO: trace-symbols.s.tmp1: common definition of common
33# OBJECTD1FOO: trace-symbols.s.tmp1: definition of foo
34# OBJECTD1FOO: trace-symbols.s.tmp2: definition of foo
35
36# RUN: ld.lld -y foo %t1 %t2 %t -o %t3 | FileCheck -check-prefix=REFLAST %s
37# REFLAST: trace-symbols.s.tmp1: definition of foo
38# REFLAST: trace-symbols.s.tmp2: definition of foo
39# REFLAST: trace-symbols.s.tmp: reference to foo
40
41# RUN: ld.lld -y foo -trace-symbol=common -trace-symbol=hsymbol \
42# RUN:   %t %t1 %t2 -o %t3 | FileCheck -check-prefix=OBJECTD2FOO %s
43# RUN: ld.lld -y foo -y common --trace-symbol=hsymbol \
44# RUN:   %t %t2 %t1 -o %t3 | FileCheck -check-prefix=OBJECTD2FOO %s
45# RUN: ld.lld -y foo -y common %t %t1.so %t2 -o %t3 | \
46# RUN:   FileCheck -check-prefix=OBJECTD2FOO %s
47# OBJECTD2FOO: trace-symbols.s.tmp2: definition of foo
48
49# RUN: ld.lld -y foo -y common %t %t2 %t1.a -o %t3 | \
50# RUN:   FileCheck -check-prefix=FOO_AND_COMMON %s
51# FOO_AND_COMMON: trace-symbols.s.tmp: reference to foo
52# FOO_AND_COMMON: trace-symbols.s.tmp2: definition of foo
53# FOO_AND_COMMON: trace-symbols.s.tmp1.a: lazy definition of common
54
55# RUN: ld.lld -y foo -y common %t %t1.so %t2 -o %t3 | \
56# RUN:   FileCheck -check-prefix=SHLIBDCOMMON %s
57# SHLIBDCOMMON: trace-symbols.s.tmp1.so: shared definition of common
58
59# RUN: ld.lld -y foo -y common %t %t2.so %t1.so -o %t3 | \
60# RUN:   FileCheck -check-prefix=SHLIBD2FOO %s
61# RUN: ld.lld -y foo %t %t1.a %t2.so -o %t3 | \
62# RUN:   FileCheck -check-prefix=NO-SHLIBD2FOO %s
63# SHLIBD2FOO:        trace-symbols.s.tmp2.so: shared definition of foo
64# NO-SHLIBD2FOO-NOT: trace-symbols.s.tmp2.so: definition of foo
65
66# RUN: ld.lld -y foo -y common %t %t2 %t1.a -o %t3 | \
67# RUN:   FileCheck -check-prefix=ARCHIVEDCOMMON %s
68# ARCHIVEDCOMMON-NOT: trace-symbols.s.tmp1.a(trace-symbols.s.tmp1): definition of \
69# common
70
71# RUN: ld.lld -y foo %t %t1.a %t2.so -o %t3 | \
72# RUN:   FileCheck -check-prefix=ARCHIVED1FOO %s
73# ARCHIVED1FOO: trace-symbols.s.tmp1.a(trace-symbols.s.tmp1): definition of foo
74
75# RUN: ld.lld -y foo %t %t1.a %t2.a -o %t3 | \
76# RUN:   FileCheck -check-prefix=ARCHIVED2FOO %s
77# ARCHIVED2FOO: trace-symbols.s.tmp2.a(trace-symbols.s.tmp2): definition of foo
78
79# RUN: ld.lld -y bar %t %t1.so %t2.so -o %t3 | \
80# RUN:   FileCheck -check-prefix=SHLIBDBAR %s
81# SHLIBDBAR: trace-symbols.s.tmp2.so: shared definition of bar
82
83# RUN: ld.lld -y foo -y bar %t %t1.so %t2.so -o %t3 | \
84# RUN:   FileCheck -check-prefix=SHLIBRBAR %s
85# SHLIBRBAR: trace-symbols.s.tmp1.so: reference to bar
86
87# RUN: ld.lld -y foo -y bar %t -u bar --start-lib %t1 %t2 --end-lib -o %t3 | \
88# RUN:   FileCheck -check-prefix=STARTLIB %s
89# STARTLIB: trace-symbols.s.tmp1: reference to bar
90
91## Check we do not crash when trying to trace special symbol.
92# RUN: ld.lld -trace-symbol=_end %t %t1 %t2 -o /dev/null
93
94.hidden hsymbol
95.globl	_start
96.type	_start, @function
97_start:
98call foo
99