summaryrefslogtreecommitdiff
path: root/llvm/test/Object
diff options
context:
space:
mode:
authorJames Y Knight <jyknight@google.com>2018-10-10 21:07:02 +0000
committerJames Y Knight <jyknight@google.com>2018-10-10 21:07:02 +0000
commit0b0d62e46c4d6be729135575810834ebcc843fba (patch)
tree5a8f637c8a9adf73d4adef62f958800a0e492b2e /llvm/test/Object
parent95eff58ef53f6b0a9c2a06783bad883bb3cd41fb (diff)
llvm-ar: Darwin archive format fixes.
* Support writing the DARWIN64 symbol table format. * In darwin archives, emit a symbol table whenever requested, even when there are no members, as the apple linker will abort if given an archive without a symbol table. Added tests for same, and also simplified and moved the GNU 64-bit symbol table test into archive-symtab.test.
Diffstat (limited to 'llvm/test/Object')
-rw-r--r--llvm/test/Object/archive-GNU64-write.test40
-rw-r--r--llvm/test/Object/archive-format.test2
-rw-r--r--llvm/test/Object/archive-symtab.test28
3 files changed, 29 insertions, 41 deletions
diff --git a/llvm/test/Object/archive-GNU64-write.test b/llvm/test/Object/archive-GNU64-write.test
deleted file mode 100644
index 0bfb7c80d05..00000000000
--- a/llvm/test/Object/archive-GNU64-write.test
+++ /dev/null
@@ -1,40 +0,0 @@
-# REQUIRES: llvm-64-bits
-# REQUIRES: system-linux
-# REQUIRES: shell
-
-# RUN: yaml2obj %s > %t
-# RUN: dd if=%t of=%t bs=1 count=0 seek=1M
-# RUN: rm -f %t.lib
-# RUN: cp %t %t2
-# RUN: SYM64_THRESHOLD=19 llvm-ar cr %t.lib %t %t2 %p/Inputs/trivial-object-test.elf-x86-64
-# RUN: llvm-nm --print-armap %t.lib | FileCheck %s
-# RUN: grep SYM64 %t.lib
-
-# Delete temp files. They are too large.
-# RUN: rm -f %t %t2 %t.lib
-
-!ELF
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_EXEC
- Machine: EM_X86_64
-Sections:
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: "00"
- Size: 32
-
-# CHECK: Archive map
-# CHECK-NEXT: main in trivial-object-test.elf-x86-64
-
-# CHECK: archive-GNU64-write.test.tmp:
-
-# CHECK: archive-GNU64-write.test.tmp2:
-
-# CHECK: trivial-object-test.elf-x86-64:
-# CHECK-NEXT: U SomeOtherFunction
-# CHECK-NEXT: 0000000000000000 T main
-# CHECK-NEXT: U puts
diff --git a/llvm/test/Object/archive-format.test b/llvm/test/Object/archive-format.test
index 219fc7f894a..b1ae411161b 100644
--- a/llvm/test/Object/archive-format.test
+++ b/llvm/test/Object/archive-format.test
@@ -38,7 +38,7 @@ BSD-SAME: #1/16 0 0 0 644 20 `
BSD-NEXT: 0123456789abcdefzed.
RUN: rm -f %t.a
-RUN: llvm-ar --format=darwin rc %t.a 0123456789abcde 0123456789abcdef
+RUN: llvm-ar --format=darwin rcS %t.a 0123456789abcde 0123456789abcdef
RUN: cat %t.a | FileCheck -strict-whitespace --check-prefix=DARWIN %s
DARWIN: !<arch>
diff --git a/llvm/test/Object/archive-symtab.test b/llvm/test/Object/archive-symtab.test
index 297970725bd..96f48139ddd 100644
--- a/llvm/test/Object/archive-symtab.test
+++ b/llvm/test/Object/archive-symtab.test
@@ -2,6 +2,11 @@ RUN: rm -f %t.a
RUN: llvm-ar rcsU %t.a %p/Inputs/trivial-object-test.elf-x86-64 %p/Inputs/trivial-object-test2.elf-x86-64
RUN: llvm-nm -M %t.a | FileCheck %s
+RUN: rm -f %t.a
+RUN: 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
+RUN: llvm-nm -M %t.a | FileCheck %s
+RUXX: grep SYM64 %t.a
+
CHECK: Archive map
CHECK-NEXT: main in trivial-object-test.elf-x86-64
CHECK-NEXT: foo in trivial-object-test2.elf-x86-64
@@ -82,6 +87,11 @@ RUN: rm -f %t.a
RUN: llvm-ar --format=bsd rcsU %t.a %p/Inputs/trivial-object-test.macho-x86-64 %p/Inputs/trivial-object-test2.macho-x86-64
RUN: llvm-nm -M %t.a | FileCheck --check-prefix=MACHO %s
+RUN: rm -f %t.a
+RUN: 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
+RUN: llvm-nm -M %t.a | FileCheck --check-prefix=MACHO %s
+RUN: grep '__\.SYMDEF_64' %t.a
+
MACHO: Archive map
MACHO-NEXT: _main in trivial-object-test.macho-x86-64
MACHO-NEXT: _foo in trivial-object-test2.macho-x86-64
@@ -138,3 +148,21 @@ RUN: llvm-ar --format=gnu rcsD %t.a %p/Inputs/trivial-object-test.macho-x86-64
RUN: FileCheck --check-prefix=GNU-SYMTAB-ALIGN %s < %t.a
GNU-SYMTAB-ALIGN: !<arch>
GNU-SYMTAB-ALIGN-NEXT: / 0 0 0 0 14 `
+
+
+** Test the behavior of an empty archive:
+
+No symbol table emitted for GNU archives
+RUN: rm -f %t.a
+RUN: llvm-ar rcs --format=gnu %t.a
+RUN: not grep -q '/ ' %t.a
+
+No symbol table for BSD archives
+RUN: rm -f %t.a
+RUN: llvm-ar rcs --format=bsd %t.a
+RUN: not grep -q '__\.SYMDEF' %t.a
+
+And we do emit a symbol table for DARWIN archives
+RUN: rm -f %t.a
+RUN: llvm-ar rcs --format=darwin %t.a
+RUN: grep -q '__\.SYMDEF' %t.a