summaryrefslogtreecommitdiffstats
path: root/llvm/test/tools/llvm-objcopy/strip-multiple-files.test
diff options
context:
space:
mode:
authorJordan Rupprecht <rupprecht@google.com>2018-09-05 13:10:03 +0000
committerJordan Rupprecht <rupprecht@google.com>2018-09-05 13:10:03 +0000
commit591d889006e80d3d87bcac200c4c454a878c9f24 (patch)
tree85b9d8b912f832fa7c3529d3ee9a2224d47554d8 /llvm/test/tools/llvm-objcopy/strip-multiple-files.test
parent53e91c1b086267f9c77e9dcb3f7f54b0b17ae1b0 (diff)
downloadbcm5719-llvm-591d889006e80d3d87bcac200c4c454a878c9f24.tar.gz
bcm5719-llvm-591d889006e80d3d87bcac200c4c454a878c9f24.zip
[llvm-strip] Support stripping multiple input files
Summary: Allow strip to be called on multiple input files, which is interpreted as stripping N files in place. Using multiple input files is incompatible with -o. To allow this, create a `DriverConfig` struct which just wraps a list of `CopyConfigs`. objcopy will only ever have a single `CopyConfig`, but strip will have N (where N >= 1) CopyConfigs. Reviewers: alexshap, jakehehrlich Reviewed By: alexshap, jakehehrlich Subscribers: MaskRay, jakehehrlich, llvm-commits Differential Revision: https://reviews.llvm.org/D51660 llvm-svn: 341464
Diffstat (limited to 'llvm/test/tools/llvm-objcopy/strip-multiple-files.test')
-rw-r--r--llvm/test/tools/llvm-objcopy/strip-multiple-files.test75
1 files changed, 75 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-objcopy/strip-multiple-files.test b/llvm/test/tools/llvm-objcopy/strip-multiple-files.test
new file mode 100644
index 00000000000..d1496eb5220
--- /dev/null
+++ b/llvm/test/tools/llvm-objcopy/strip-multiple-files.test
@@ -0,0 +1,75 @@
+# RUN: yaml2obj %s > %t.o
+
+# Run llvm-strip normally. This will create a stripped object file for later
+# tests so we only have to run FileCheck on it once.
+# RUN: cp %t.o %t.1.o
+# RUN: llvm-strip --keep-symbol=foo %t.1.o -o %t.stripped.o
+# RUN: llvm-readobj -symbols %t.stripped.o | FileCheck %s
+
+# llvm-strip on two files:
+# RUN: cp %t.o %t.1.o
+# RUN: cp %t.o %t.2.o
+# RUN: llvm-strip --keep-symbol=foo %t.1.o %t.2.o
+# RUN: cmp %t.1.o %t.stripped.o
+# RUN: cmp %t.2.o %t.stripped.o
+
+# llvm-strip on three files:
+# RUN: cp %t.o %t.1.o
+# RUN: cp %t.o %t.2.o
+# RUN: cp %t.o %t.3.o
+# RUN: llvm-strip --keep-symbol=foo %t.1.o %t.2.o %t.3.o
+# RUN: cmp %t.1.o %t.stripped.o
+# RUN: cmp %t.2.o %t.stripped.o
+# RUN: cmp %t.3.o %t.stripped.o
+
+# -o cannot be used with multiple input files
+# RUN: cp %t.o %t.1.o
+# RUN: cp %t.o %t.2.o
+# RUN: not llvm-strip --keep-symbol=foo -o %t.stripped.o %t.1.o %t.2.o 2>&1 \
+# RUN: | FileCheck %s --check-prefix=BAD-O-FLAG
+
+!ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+Symbols:
+ Local:
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1234
+ Size: 8
+ - Name: bar
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x5678
+ Size: 8
+
+# CHECK: Symbols [
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name:
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local
+# CHECK-NEXT: Type: None
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: foo
+# CHECK-NEXT: Value: 0x1234
+# CHECK-NEXT: Size: 8
+# CHECK-NEXT: Binding: Local
+# CHECK-NEXT: Type: Function
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .text
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+# BAD-O-FLAG: Multiple input files cannot be used in combination with -o.
OpenPOWER on IntegriCloud