xref: /llvm-project/lld/test/MachO/map-file.ll (revision 5b21395cc2422d735c632afefcb95f08d8ed4b88)
1b9457330SJez Ng; REQUIRES: x86
2b9457330SJez Ng; RUN: rm -rf %t; split-file %s %t
3b9457330SJez Ng
4b9457330SJez Ng;; Verify that we map symbols to their original bitcode input files, not the
5b9457330SJez Ng;; intermediate object files. Also verify that we don't emit these intermediate
6b9457330SJez Ng;; object files if no symbol needs to reference them. (Intermediate object files
7b9457330SJez Ng;; may still be referenced if they contain compiler-synthesized symbols, such
8b9457330SJez Ng;; as outlined functions. TODO: Test this case.)
9b9457330SJez Ng
10b9457330SJez Ng; RUN: opt -module-summary %t/foo.ll -o %t/foo.thinlto.o
11b9457330SJez Ng; RUN: opt -module-summary %t/bar.ll -o %t/bar.thinlto.o
12b9457330SJez Ng
13b9457330SJez Ng; RUN: %lld -dylib %t/foo.thinlto.o %t/bar.thinlto.o -o %t/foobar.thinlto -map \
14b9457330SJez Ng; RUN:   %t/foobar.thinlto.map
15b9457330SJez Ng; RUN: FileCheck %s --check-prefix=FOOBAR < %t/foobar.thinlto.map
16b9457330SJez Ng
17b9457330SJez Ng; RUN: %lld -dylib %t/bar.thinlto.o %t/foo.thinlto.o -o %t/barfoo.thinlto -map \
18b9457330SJez Ng; RUN:   %t/barfoo.thinlto.map
19b9457330SJez Ng; RUN: FileCheck %s --check-prefix=BARFOO < %t/barfoo.thinlto.map
20b9457330SJez Ng
21b9457330SJez Ng; RUN: llvm-as %t/foo.ll -o %t/foo.o
22b9457330SJez Ng; RUN: llvm-as %t/bar.ll -o %t/bar.o
23b9457330SJez Ng; RUN: %lld -dylib %t/foo.o %t/bar.o -o %t/foobar -map %t/foobar.map
24b9457330SJez Ng; RUN: FileCheck %s --check-prefix=LTO < %t/foobar.map
25b9457330SJez Ng
26b9457330SJez Ng; FOOBAR:      # Path: {{.*}}{{/|\\}}map-file.ll.tmp/foobar.thinlto
27b9457330SJez Ng; FOOBAR-NEXT: # Arch: x86_64
28b9457330SJez Ng; FOOBAR-NEXT: # Object files:
29b9457330SJez Ng; FOOBAR-NEXT: [  0] linker synthesized
30*5b21395cSJez Ng; FOOBAR-NEXT: [  1] {{.*}}{{/|\\}}usr/lib{{/|\\}}libSystem.tbd{{$}}
31*5b21395cSJez Ng; FOOBAR-NEXT: [  2] {{.*}}{{/|\\}}map-file.ll.tmp/foo.thinlto.o{{$}}
32*5b21395cSJez Ng; FOOBAR-NEXT: [  3] {{.*}}{{/|\\}}map-file.ll.tmp/bar.thinlto.o{{$}}
33b9457330SJez Ng; FOOBAR-NEXT: # Sections:
34b9457330SJez Ng; FOOBAR:      # Symbols:
35b9457330SJez Ng; FOOBAR-NEXT: # Address        Size             File  Name
36aa288fd9SJez Ng; FOOBAR-NEXT: 0x{{[0-9A-F]+}}  0x{{[0-9A-F]+}}  [  2] _foo
37aa288fd9SJez Ng; FOOBAR-NEXT: 0x{{[0-9A-F]+}}  0x{{[0-9A-F]+}}  [  3] _bar
38aa288fd9SJez Ng; FOOBAR-NEXT: 0x{{[0-9A-F]+}}  0x{{[0-9A-F]+}}  [  3] _maybe_weak
39b9457330SJez Ng
40b9457330SJez Ng; BARFOO:      # Path: {{.*}}{{/|\\}}map-file.ll.tmp/barfoo.thinlto
41b9457330SJez Ng; BARFOO-NEXT: # Arch: x86_64
42b9457330SJez Ng; BARFOO-NEXT: # Object files:
43b9457330SJez Ng; BARFOO-NEXT: [  0] linker synthesized
44aa288fd9SJez Ng; BARFOO-NEXT: [  1] {{.*}}{{/|\\}}usr/lib{{/|\\}}libSystem.tbd
45aa288fd9SJez Ng; BARFOO-NEXT: [  2] {{.*}}{{/|\\}}map-file.ll.tmp/bar.thinlto.o
46aa288fd9SJez Ng; BARFOO-NEXT: [  3] {{.*}}{{/|\\}}map-file.ll.tmp/foo.thinlto.o
47b9457330SJez Ng; BARFOO-NEXT: # Sections:
48b9457330SJez Ng; BARFOO:      # Symbols:
49b9457330SJez Ng; BARFOO-NEXT: # Address        Size             File  Name
50aa288fd9SJez Ng; BARFOO-NEXT: 0x{{[0-9A-F]+}}  0x{{[0-9A-F]+}}  [  2] _bar
51aa288fd9SJez Ng; BARFOO-NEXT: 0x{{[0-9A-F]+}}  0x{{[0-9A-F]+}}  [  2] _maybe_weak
52aa288fd9SJez Ng; BARFOO-NEXT: 0x{{[0-9A-F]+}}  0x{{[0-9A-F]+}}  [  3] _foo
53b9457330SJez Ng
54b9457330SJez Ng; LTO:      # Path: {{.*}}{{/|\\}}map-file.ll.tmp/foobar
55b9457330SJez Ng; LTO-NEXT: # Arch: x86_64
56b9457330SJez Ng; LTO-NEXT: # Object files:
57b9457330SJez Ng; LTO-NEXT: [  0] linker synthesized
58aa288fd9SJez Ng; LTO-NEXT: [  1] {{.*}}{{/|\\}}usr/lib{{/|\\}}libSystem.tbd
59aa288fd9SJez Ng; LTO-NEXT: [  2] {{.*}}{{/|\\}}map-file.ll.tmp/foo.o
60aa288fd9SJez Ng; LTO-NEXT: [  3] {{.*}}{{/|\\}}map-file.ll.tmp/bar.o
61b9457330SJez Ng; LTO-NEXT: # Sections:
62b9457330SJez Ng; LTO:      # Symbols:
63b9457330SJez Ng; LTO-NEXT: # Address        Size             File   Name
64aa288fd9SJez Ng; LTO-NEXT: 0x{{[0-9A-F]+}}  0x{{[0-9A-F]+}}  [  2]  _foo
65aa288fd9SJez Ng; LTO-NEXT: 0x{{[0-9A-F]+}}  0x{{[0-9A-F]+}}  [  3]  _bar
66aa288fd9SJez Ng; LTO-NEXT: 0x{{[0-9A-F]+}}  0x{{[0-9A-F]+}}  [  3]  _maybe_weak
67b9457330SJez Ng
68b9457330SJez Ng;--- foo.ll
69b9457330SJez Ngtarget triple = "x86_64-apple-darwin"
70b9457330SJez Ngtarget datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
71b9457330SJez Ng
72b9457330SJez Ngdefine void @foo() {
73b9457330SJez Ng  ret void
74b9457330SJez Ng}
75b9457330SJez Ng
76b9457330SJez Ng;; This is weak in foo.ll but non-weak in bar.ll, so the definition in bar.ll
77b9457330SJez Ng;; will always prevail. Check that the map file maps `maybe_weak` to bar.ll
78b9457330SJez Ng;; regardless of the object file input order.
79b9457330SJez Ngdefine weak_odr void @maybe_weak() {
80b9457330SJez Ng  ret void
81b9457330SJez Ng}
82b9457330SJez Ng
83b9457330SJez Ng;--- bar.ll
84b9457330SJez Ngtarget triple = "x86_64-apple-darwin"
85b9457330SJez Ngtarget datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
86b9457330SJez Ng
87b9457330SJez Ngdefine void @bar() {
88b9457330SJez Ng  ret void
89b9457330SJez Ng}
90b9457330SJez Ng
91b9457330SJez Ngdefine void @maybe_weak() {
92b9457330SJez Ng  ret void
93b9457330SJez Ng}
94