blob: 96f48139ddd315f90f1cd5ebf258d745fc22bc0b [file] [log] [blame]
Rafael Espindola26b10da2013-07-23 10:47:01 +00001RUN: rm -f %t.a
Rafael Espindola168b1be2015-07-13 20:38:09 +00002RUN: llvm-ar rcsU %t.a %p/Inputs/trivial-object-test.elf-x86-64 %p/Inputs/trivial-object-test2.elf-x86-64
Kevin Enderbye3108d32014-07-08 23:47:31 +00003RUN: llvm-nm -M %t.a | FileCheck %s
Rafael Espindola26b10da2013-07-23 10:47:01 +00004
James Y Knight742beb62018-10-10 21:07:02 +00005RUN: rm -f %t.a
6RUN: env SYM64_THRESHOLD=1 llvm-ar rcsU %t.a %p/Inputs/trivial-object-test.elf-x86-64 %p/Inputs/trivial-object-test2.elf-x86-64
7RUN: llvm-nm -M %t.a | FileCheck %s
8RUXX: grep SYM64 %t.a
9
Rafael Espindola26b10da2013-07-23 10:47:01 +000010CHECK: Archive map
11CHECK-NEXT: main in trivial-object-test.elf-x86-64
12CHECK-NEXT: foo in trivial-object-test2.elf-x86-64
13CHECK-NEXT: main in trivial-object-test2.elf-x86-64
14CHECK-NOT: bar
15
Rafael Espindola9db135a2015-07-22 19:34:26 +000016
17RUN: rm -f %t.a
Rafael Espindola3b12bb72015-07-22 22:09:44 +000018RUN: llvm-ar --format=gnu rcT %t.a %p/Inputs/trivial-object-test.elf-x86-64 %p/Inputs/trivial-object-test2.elf-x86-64
Rafael Espindola9db135a2015-07-22 19:34:26 +000019RUN: llvm-nm -M %t.a | FileCheck --check-prefix=THIN %s
20
21THIN: Archive map
22THIN-NEXT: main in {{.*}}/Inputs/trivial-object-test.elf-x86-64
23THIN-NEXT: foo in {{.*}}/Inputs/trivial-object-test2.elf-x86-64
24THIN-NEXT: main in {{.*}}/Inputs/trivial-object-test2.elf-x86-64
25
26
Rafael Espindola26b10da2013-07-23 10:47:01 +000027CHECK: trivial-object-test.elf-x86-64:
Kevin Enderbyae417592014-05-09 23:57:49 +000028CHECK-NEXT: U SomeOtherFunction
29CHECK-NEXT: 0000000000000000 T main
30CHECK-NEXT: U puts
Kevin Enderbyefc44782014-06-20 21:29:27 +000031
32CHECK: trivial-object-test2.elf-x86-64:
Kevin Enderbyae417592014-05-09 23:57:49 +000033CHECK-NEXT: 0000000000000000 t bar
34CHECK-NEXT: 0000000000000006 T foo
35CHECK-NEXT: 0000000000000016 T main
Rafael Espindolacf48cf22013-07-29 12:40:31 +000036
37RUN: rm -f %t.a
Rafael Espindola168b1be2015-07-13 20:38:09 +000038RUN: llvm-ar rcSU %t.a %p/Inputs/trivial-object-test.elf-x86-64 %p/Inputs/trivial-object-test2.elf-x86-64
Kevin Enderbye3108d32014-07-08 23:47:31 +000039RUN: llvm-nm -M %t.a | FileCheck %s --check-prefix=NOMAP
Rafael Espindolacf48cf22013-07-29 12:40:31 +000040
41NOMAP-NOT: Archive map
42
43RUN: llvm-ar s %t.a
Kevin Enderbye3108d32014-07-08 23:47:31 +000044RUN: llvm-nm -M %t.a | FileCheck %s
Rafael Espindolacf48cf22013-07-29 12:40:31 +000045
46check that the archive does have a corrupt symbol table.
47RUN: rm -f %t.a
48RUN: cp %p/Inputs/archive-test.a-corrupt-symbol-table %t.a
Kevin Enderbye3108d32014-07-08 23:47:31 +000049RUN: llvm-nm -M %t.a | FileCheck %s --check-prefix=CORRUPT
Rafael Espindolacf48cf22013-07-29 12:40:31 +000050
51CORRUPT: Archive map
52CORRUPT-NEXT: mbin in trivial-object-test.elf-x86-64
53CORRUPT-NEXT: foo in trivial-object-test2.elf-x86-64
54CORRUPT-NEXT: main in trivial-object-test2.elf-x86-64
55
56CORRUPT: trivial-object-test.elf-x86-64:
Kevin Enderbyae417592014-05-09 23:57:49 +000057CORRUPT-NEXT: U SomeOtherFunction
58CORRUPT-NEXT: 0000000000000000 T main
59CORRUPT-NEXT: U puts
Kevin Enderbyefc44782014-06-20 21:29:27 +000060
61CORRUPT: trivial-object-test2.elf-x86-64:
Kevin Enderbyae417592014-05-09 23:57:49 +000062CORRUPT-NEXT: 0000000000000000 t bar
63CORRUPT-NEXT: 0000000000000006 T foo
64CORRUPT-NEXT: 0000000000000016 T main
Rafael Espindolacf48cf22013-07-29 12:40:31 +000065
66check that the we *don't* update the symbol table.
67RUN: llvm-ar s %t.a
Kevin Enderbye3108d32014-07-08 23:47:31 +000068RUN: llvm-nm -M %t.a | FileCheck %s --check-prefix=CORRUPT
Rafael Espindolaaeb0f0c2013-08-28 16:22:16 +000069
70repeate the test with llvm-ranlib
71
72RUN: rm -f %t.a
Rafael Espindola168b1be2015-07-13 20:38:09 +000073RUN: llvm-ar rcSU %t.a %p/Inputs/trivial-object-test.elf-x86-64 %p/Inputs/trivial-object-test2.elf-x86-64
Kevin Enderbye3108d32014-07-08 23:47:31 +000074RUN: llvm-nm -M %t.a | FileCheck %s --check-prefix=NOMAP
Rafael Espindolaaeb0f0c2013-08-28 16:22:16 +000075
76RUN: llvm-ranlib %t.a
Kevin Enderbye3108d32014-07-08 23:47:31 +000077RUN: llvm-nm -M %t.a | FileCheck %s
Kevin Enderbyd2ae1152014-07-08 22:10:02 +000078
Kevin Enderbye3108d32014-07-08 23:47:31 +000079RUN: llvm-nm -M %p/Inputs/macho-archive-x86_64.a | FileCheck %s --check-prefix=BSD-MachO
Nick Kledzik9abbcb72014-11-12 01:37:45 +000080RUN: llvm-nm -M %p/Inputs/macho-archive-unsorted-x86_64.a | FileCheck %s --check-prefix=BSD-MachO
Kevin Enderbyd2ae1152014-07-08 22:10:02 +000081
82BSD-MachO: Archive map
83BSD-MachO: _bar in bar.o
84BSD-MachO: _foo in foo.o
Rafael Espindolaa55816b2015-07-09 15:56:23 +000085
86RUN: rm -f %t.a
Rafael Espindola168b1be2015-07-13 20:38:09 +000087RUN: llvm-ar --format=bsd rcsU %t.a %p/Inputs/trivial-object-test.macho-x86-64 %p/Inputs/trivial-object-test2.macho-x86-64
Rafael Espindolaa55816b2015-07-09 15:56:23 +000088RUN: llvm-nm -M %t.a | FileCheck --check-prefix=MACHO %s
89
James Y Knight742beb62018-10-10 21:07:02 +000090RUN: rm -f %t.a
91RUN: env SYM64_THRESHOLD=1 llvm-ar --format=darwin rcsU %t.a %p/Inputs/trivial-object-test.macho-x86-64 %p/Inputs/trivial-object-test2.macho-x86-64
92RUN: llvm-nm -M %t.a | FileCheck --check-prefix=MACHO %s
93RUN: grep '__\.SYMDEF_64' %t.a
94
Rafael Espindolaa55816b2015-07-09 15:56:23 +000095MACHO: Archive map
96MACHO-NEXT: _main in trivial-object-test.macho-x86-64
97MACHO-NEXT: _foo in trivial-object-test2.macho-x86-64
98MACHO-NEXT: _main in trivial-object-test2.macho-x86-64
Tim Northover3d79a792015-10-26 13:40:03 +000099MACHO-NOT: {{^}}bar
Rafael Espindolaa55816b2015-07-09 15:56:23 +0000100
101MACHO: trivial-object-test.macho-x86-64
102MACHO-NEXT: 0000000000000028 s L_.str
103MACHO-NEXT: U _SomeOtherFunction
104MACHO-NEXT: 0000000000000000 T _main
105MACHO-NEXT: U _puts
106
107MACHO: trivial-object-test2.macho-x86-64
108MACHO-NEXT: 0000000000000000 t _bar
109MACHO-NEXT: 0000000000000001 T _foo
110MACHO-NEXT: 0000000000000002 T _main
Rafael Espindola72550902015-07-09 19:48:06 +0000111
Kevin Enderby68806ff2016-06-17 22:16:06 +0000112RUN: llvm-nm -M %p/Inputs/macho-toc64-archive-x86_64.a | FileCheck --check-prefix=MACHO-TOC64 %s
113
114MACHO-TOC64: Archive map
115MACHO-TOC64-NEXT: _test in test.o
116MACHO-TOC64-NEXT: _test in xtest.o
117
Rui Ueyama40e22512015-08-28 07:40:30 +0000118RUN: rm -f %t.a
119RUN: llvm-ar --format=gnu rcsU %t.a %p/Inputs/coff-short-import-code %p/Inputs/coff-short-import-data
120RUN: llvm-nm -M %t.a | FileCheck --check-prefix=COFF-SHORT-IMPORT %s
121
122COFF-SHORT-IMPORT: Archive map
Rui Ueyama40e22512015-08-28 07:40:30 +0000123COFF-SHORT-IMPORT-NEXT: __imp__foo in coff-short-import-code
Rui Ueyama5c1fa7f2015-09-01 06:01:53 +0000124COFF-SHORT-IMPORT-NEXT: _foo in coff-short-import-code
125COFF-SHORT-IMPORT-NEXT: __imp__bar in coff-short-import-data
126COFF-SHORT-IMPORT-NOT: _bar in coff-short-import-data
Rui Ueyama40e22512015-08-28 07:40:30 +0000127
Rafael Espindolad3fa5052017-09-22 18:36:00 +0000128Test that we pad the symbol table so that it ends in a multiple of 8 bytes:
Rafael Espindola72550902015-07-09 19:48:06 +00001298 + 60 + 36 == 104
130RUN: rm -f %t.a
Rafael Espindola168b1be2015-07-13 20:38:09 +0000131RUN: llvm-ar --format=bsd rcsU %t.a %p/Inputs/trivial-object-test.macho-x86-64
Rafael Espindola72550902015-07-09 19:48:06 +0000132RUN: FileCheck --check-prefix=MACHO-SYMTAB-ALIGN %s < %t.a
133MACHO-SYMTAB-ALIGN: !<arch>
134MACHO-SYMTAB-ALIGN-NEXT: #1/12 {{..........}} 0 0 0 36 `
Rafael Espindolab4d4e8c2017-09-22 18:16:13 +0000135
Rafael Espindolad3fa5052017-09-22 18:36:00 +0000136Test that we pad the symbol table so that it ends in a multiple of 8 bytes:
1378 + 60 + 52 == 120
138RUN: rm -f %t.a
139RUN: llvm-ar --format=bsd rcsD %t.a %p/Inputs/trivial-object-test.macho-x86-64 %p/Inputs/trivial-object-test.macho-x86-64
140RUN: FileCheck --check-prefix=MACHO-SYMTAB-ALIGN2 %s < %t.a
141MACHO-SYMTAB-ALIGN2: !<arch>
142MACHO-SYMTAB-ALIGN2-NEXT: #1/12 0 0 0 0 52 `
143
Rafael Espindolab4d4e8c2017-09-22 18:16:13 +0000144With a gnu symbol table we only align to two
1458 + 60 + 14 = 82
146RUN: rm -f %t.a
147RUN: llvm-ar --format=gnu rcsD %t.a %p/Inputs/trivial-object-test.macho-x86-64
148RUN: FileCheck --check-prefix=GNU-SYMTAB-ALIGN %s < %t.a
149GNU-SYMTAB-ALIGN: !<arch>
150GNU-SYMTAB-ALIGN-NEXT: / 0 0 0 0 14 `
James Y Knight742beb62018-10-10 21:07:02 +0000151
152
153** Test the behavior of an empty archive:
154
155No symbol table emitted for GNU archives
156RUN: rm -f %t.a
157RUN: llvm-ar rcs --format=gnu %t.a
158RUN: not grep -q '/ ' %t.a
159
160No symbol table for BSD archives
161RUN: rm -f %t.a
162RUN: llvm-ar rcs --format=bsd %t.a
163RUN: not grep -q '__\.SYMDEF' %t.a
164
165And we do emit a symbol table for DARWIN archives
166RUN: rm -f %t.a
167RUN: llvm-ar rcs --format=darwin %t.a
168RUN: grep -q '__\.SYMDEF' %t.a