• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# REQUIRES: x86
2# RUN: rm -rf %t
3# RUN: split-file %s %t
4
5# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos -o %t/objc.o %t/objc.s
6# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos -o %t/foo.o %t/foo.s
7# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos -o %t/bar.o %t/bar.s
8# RUN: llvm-ar csr  %t/lib.a %t/objc.o %t/foo.o %t/bar.o
9
10# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos -o %t/main.o %t/main.s
11
12# The first line checks that we never demangle symbols in -why_load output.
13# RUN: %lld %t/main.o %t/lib.a -o /dev/null -why_load -demangle | \
14# RUN:     FileCheck %s --check-prefix=WHY
15# RUN: %lld %t/main.o -force_load %t/lib.a -o /dev/null -why_load | \
16# RUN:     FileCheck %s --check-prefix=WHYFORCE
17# RUN: %lld %t/main.o %t/lib.a -o /dev/null -all_load -why_load | \
18# RUN:     FileCheck %s --check-prefix=WHYALL
19# RUN: %lld %t/main.o -force_load %t/lib.a -o /dev/null -all_load -why_load | \
20# RUN:     FileCheck %s --check-prefix=WHYALLFORCE
21
22# RUN: %lld %t/main.o %t/lib.a -o /dev/null -ObjC -why_load | \
23# RUN:     FileCheck %s --check-prefix=WHYOBJC
24# RUN: %lld %t/main.o -force_load %t/lib.a -o /dev/null -ObjC -why_load | \
25# RUN:     FileCheck %s --check-prefix=WHYOBJCFORCE
26# RUN: %lld %t/main.o %t/lib.a -o /dev/null -ObjC -all_load -why_load | \
27# RUN:     FileCheck %s --check-prefix=WHYOBJCALL
28# RUN: %lld %t/main.o -force_load %t/lib.a -o /dev/null -ObjC -all_load -why_load | \
29# RUN:     FileCheck %s --check-prefix=WHYOBJCALLFORCE
30
31# WHY-DAG: _bar forced load of lib.a(bar.o)
32# WHY-DAG: __Z3foo forced load of lib.a(foo.o)
33# WHY-NOT: {{.*}} forced load of lib.a(objc.o)
34
35# WHYFORCE-DAG: -force_load forced load of lib.a(bar.o)
36# WHYFORCE-DAG: -force_load forced load of lib.a(foo.o)
37# WHYFORCE-DAG: -force_load forced load of lib.a(objc.o)
38
39# WHYALL-DAG: -all_load forced load of lib.a(bar.o)
40# WHYALL-DAG: -all_load forced load of lib.a(foo.o)
41# WHYALL-DAG: -all_load forced load of lib.a(objc.o)
42
43# WHYALLFORCE-DAG: -force_load forced load of lib.a(bar.o)
44# WHYALLFORCE-DAG: -force_load forced load of lib.a(foo.o)
45# WHYALLFORCE-DAG: -force_load forced load of lib.a(objc.o)
46
47# WHYOBJC-DAG: _bar forced load of lib.a(bar.o)
48# WHYOBJC-DAG: __Z3foo forced load of lib.a(foo.o)
49# WHYOBJC-DAG: -ObjC forced load of lib.a(objc.o)
50
51# WHYOBJCFORCE-DAG: -force_load forced load of lib.a(bar.o)
52# WHYOBJCFORCE-DAG: -force_load forced load of lib.a(foo.o)
53# WHYOBJCFORCE-DAG: -force_load forced load of lib.a(objc.o)
54
55# WHYOBJCALL-DAG: -all_load forced load of lib.a(bar.o)
56# WHYOBJCALL-DAG: -all_load forced load of lib.a(foo.o)
57# WHYOBJCALL-DAG: -all_load forced load of lib.a(objc.o)
58
59# WHYOBJCALLFORCE-DAG: -force_load forced load of lib.a(bar.o)
60# WHYOBJCALLFORCE-DAG: -force_load forced load of lib.a(foo.o)
61# WHYOBJCALLFORCE-DAG: -force_load forced load of lib.a(objc.o)
62
63#--- objc.s
64.section	__DATA,__objc_catlist
65.quad 0x1234
66
67#--- foo.s
68.globl __Z3foo
69__Z3foo:
70  ret
71
72#--- bar.s
73.globl _bar
74_bar:
75  callq __Z3foo
76  ret
77
78#--- main.s
79.globl _main
80_main:
81  callq _bar
82  callq __Z3foo
83  ret
84