diff options
author | Jordan Rupprecht <rupprecht@google.com> | 2018-09-05 13:10:03 +0000 |
---|---|---|
committer | Jordan Rupprecht <rupprecht@google.com> | 2018-09-05 13:10:03 +0000 |
commit | 591d889006e80d3d87bcac200c4c454a878c9f24 (patch) | |
tree | 85b9d8b912f832fa7c3529d3ee9a2224d47554d8 /llvm/test/tools/llvm-objcopy/strip-multiple-files.test | |
parent | 53e91c1b086267f9c77e9dcb3f7f54b0b17ae1b0 (diff) | |
download | bcm5719-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.test | 75 |
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. |