diff options
author | Jake Ehrlich <jakehehrlich@google.com> | 2017-11-30 20:14:53 +0000 |
---|---|---|
committer | Jake Ehrlich <jakehehrlich@google.com> | 2017-11-30 20:14:53 +0000 |
commit | ef3b80c57ba7c1c910a1d31548cf51f630913a04 (patch) | |
tree | f32acad3ac4138b7e3e367d4d4fe492b2094026d /llvm/test | |
parent | aef1dfc690adc6478efcd059bdbb65d0195082b8 (diff) | |
download | bcm5719-llvm-ef3b80c57ba7c1c910a1d31548cf51f630913a04.tar.gz bcm5719-llvm-ef3b80c57ba7c1c910a1d31548cf51f630913a04.zip |
[llvm-objcopy] Add support for --only-keep/-j and --keep
This change adds support for the --only-keep option and the -j alias as well.
A common use case for these being used together is to dump a specific section's
data. Additionally the --keep option is added (GNU objcopy doesn't have this)
to avoid removing a bunch of things. This allows people to err on the side of
stripping aggressively and then to keep the specific bits that they need for
their application.
Differential Revision: https://reviews.llvm.org/D39021
llvm-svn: 319467
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/tools/llvm-objcopy/basic-keep.test | 19 | ||||
-rw-r--r-- | llvm/test/tools/llvm-objcopy/basic-only-keep.test | 23 | ||||
-rw-r--r-- | llvm/test/tools/llvm-objcopy/dump-section.test | 28 | ||||
-rw-r--r-- | llvm/test/tools/llvm-objcopy/explicit-keep-remove.test | 21 | ||||
-rw-r--r-- | llvm/test/tools/llvm-objcopy/explicit-only-keep-remove.test | 21 | ||||
-rw-r--r-- | llvm/test/tools/llvm-objcopy/keep-many.test | 27 | ||||
-rw-r--r-- | llvm/test/tools/llvm-objcopy/keep-only-keep.test | 27 | ||||
-rw-r--r-- | llvm/test/tools/llvm-objcopy/only-keep-many.test | 28 | ||||
-rw-r--r-- | llvm/test/tools/llvm-objcopy/only-keep-remove-strtab.test | 21 | ||||
-rw-r--r-- | llvm/test/tools/llvm-objcopy/only-keep-strip-non-alloc.test | 19 | ||||
-rw-r--r-- | llvm/test/tools/llvm-objcopy/strip-sections-keep.test | 13 | ||||
-rw-r--r-- | llvm/test/tools/llvm-objcopy/strip-sections-only-keep.test | 20 |
12 files changed, 267 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-objcopy/basic-keep.test b/llvm/test/tools/llvm-objcopy/basic-keep.test new file mode 100644 index 00000000000..2ea4ea35577 --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/basic-keep.test @@ -0,0 +1,19 @@ +# RUN: yaml2obj %s > %t +# RUN: llvm-objcopy -strip-non-alloc -keep=.test %t %t2 +# RUN: llvm-readobj -file-headers -sections %t2 | FileCheck %s + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .test + Type: SHT_PROGBITS + Flags: [ ] + +# CHECK: SectionHeaderCount: 3 + +# CHECK: Name: .test +# CHECK: Name: .shstrtab diff --git a/llvm/test/tools/llvm-objcopy/basic-only-keep.test b/llvm/test/tools/llvm-objcopy/basic-only-keep.test new file mode 100644 index 00000000000..4d97012a6cc --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/basic-only-keep.test @@ -0,0 +1,23 @@ +# RUN: yaml2obj %s > %t +# RUN: llvm-objcopy -only-keep=.test %t %t2 +# RUN: llvm-objcopy -j=.test %t %t3 +# RUN: llvm-readobj -file-headers -sections %t2 | FileCheck %s +# RUN: diff %t2 %t3 + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .test + Type: SHT_PROGBITS + Flags: [ ] + +# CHECK: SectionHeaderCount: 5 + +# CHECK: Name: .test +# CHECK: Name: .symtab +# CHECK: Name: .strtab +# CHECK: Name: .shstrtab diff --git a/llvm/test/tools/llvm-objcopy/dump-section.test b/llvm/test/tools/llvm-objcopy/dump-section.test new file mode 100644 index 00000000000..123f4736ca0 --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/dump-section.test @@ -0,0 +1,28 @@ +# RUN: yaml2obj %s > %t +# RUN: llvm-objcopy -O binary -j .text %t %t2 +# RUN: llvm-objcopy -O binary -only-keep .text %t %t3 +# RUN: od -t x1 %t2 | FileCheck %s +# RUN: wc -c %t2 | FileCheck %s --check-prefix=SIZE +# RUN: diff %t2 %t3 + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + AddressAlign: 0x0000000000001000 + Content: "DEADBEEF" +ProgramHeaders: +- Type: PT_LOAD + Flags: [ PF_X, PF_R ] + Sections: + - Section: .text + +#CHECK: 0000000 de ad be ef + +#SIZE: 4 diff --git a/llvm/test/tools/llvm-objcopy/explicit-keep-remove.test b/llvm/test/tools/llvm-objcopy/explicit-keep-remove.test new file mode 100644 index 00000000000..5ebd2a5081c --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/explicit-keep-remove.test @@ -0,0 +1,21 @@ +# RUN: yaml2obj %s > %t +# RUN: llvm-objcopy -R=.test -keep=.test %t %t2 +# RUN: llvm-readobj -file-headers -sections %t2 | FileCheck %s + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .test + Type: SHT_PROGBITS + Flags: [ ] + +# CHECK: SectionHeaderCount: 5 + +# CHECK: Name: .test +# CHECK: Name: .symtab +# CHECK: Name: .strtab +# CHECK: Name: .shstrtab diff --git a/llvm/test/tools/llvm-objcopy/explicit-only-keep-remove.test b/llvm/test/tools/llvm-objcopy/explicit-only-keep-remove.test new file mode 100644 index 00000000000..10d49e10c09 --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/explicit-only-keep-remove.test @@ -0,0 +1,21 @@ +# RUN: yaml2obj %s > %t +# RUN: llvm-objcopy -R=.test -only-keep=.test %t %t2 +# RUN: llvm-readobj -file-headers -sections %t2 | FileCheck %s + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .test + Type: SHT_PROGBITS + Flags: [ ] + +# CHECK: SectionHeaderCount: 5 + +# CHECK: Name: .test +# CHECK: Name: .symtab +# CHECK: Name: .strtab +# CHECK: Name: .shstrtab diff --git a/llvm/test/tools/llvm-objcopy/keep-many.test b/llvm/test/tools/llvm-objcopy/keep-many.test new file mode 100644 index 00000000000..66273778993 --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/keep-many.test @@ -0,0 +1,27 @@ +# RUN: yaml2obj %s > %t +# RUN: llvm-objcopy -strip-non-alloc -keep=.test -keep=.test3 %t %t2 +# RUN: llvm-readobj -file-headers -sections %t2 | FileCheck %s + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .test + Type: SHT_PROGBITS + Flags: [ ] + - Name: .test2 + Type: SHT_PROGBITS + Flags: [ ] + - Name: .test3 + Type: SHT_PROGBITS + Flags: [ ] + + +# CHECK: SectionHeaderCount: 4 + +# CHECK: Name: .test +# CHECK: Name: .test3 +# CHECK: Name: .shstrtab diff --git a/llvm/test/tools/llvm-objcopy/keep-only-keep.test b/llvm/test/tools/llvm-objcopy/keep-only-keep.test new file mode 100644 index 00000000000..b1f08fe5879 --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/keep-only-keep.test @@ -0,0 +1,27 @@ +# RUN: yaml2obj %s > %t +# RUN: llvm-objcopy -keep=.test2 -only-keep=.test %t %t2 +# RUN: llvm-objcopy -j=.test -keep=.test2 %t %t3 +# RUN: llvm-readobj -file-headers -sections %t2 | FileCheck %s +# RUN: diff %t2 %t3 + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .test + Type: SHT_PROGBITS + - Name: .test2 + Type: SHT_PROGBITS + - Name: .test3 + Type: SHT_PROGBITS + +# CHECK: SectionHeaderCount: 6 + +# CHECK: Name: .test +# CHECK: Name: .test2 +# CHECK: Name: .symtab +# CHECK: Name: .strtab +# CHECK: Name: .shstrtab diff --git a/llvm/test/tools/llvm-objcopy/only-keep-many.test b/llvm/test/tools/llvm-objcopy/only-keep-many.test new file mode 100644 index 00000000000..2f956238dc9 --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/only-keep-many.test @@ -0,0 +1,28 @@ +# RUN: yaml2obj %s > %t +# RUN: llvm-objcopy -j .test1 -j .test2 %t %t2 +# RUN: llvm-readobj -file-headers -sections %t2 | FileCheck %s + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .test1 + Type: SHT_PROGBITS + Flags: [ ] + - Name: .test2 + Type: SHT_PROGBITS + Flags: [ ] + - Name: .test3 + Type: SHT_PROGBITS + Flags: [ ] + +# CHECK: SectionHeaderCount: 6 + +# CHECK: Name: .test1 +# CHECK: Name: .test2 +# CHECK: Name: .symtab +# CHECK: Name: .strtab +# CHECK: Name: .shstrtab diff --git a/llvm/test/tools/llvm-objcopy/only-keep-remove-strtab.test b/llvm/test/tools/llvm-objcopy/only-keep-remove-strtab.test new file mode 100644 index 00000000000..c8946d3294d --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/only-keep-remove-strtab.test @@ -0,0 +1,21 @@ +# RUN: yaml2obj %s > %t +# RUN: llvm-objcopy -R .symtab -R .strtab -only-keep=.test %t %t2 +# RUN: llvm-objcopy -j=.test -R .strtab -R .symtab %t %t3 +# RUN: llvm-readobj -file-headers -sections %t2 | FileCheck %s +# RUN: diff %t2 %t3 + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .test + Type: SHT_PROGBITS + Flags: [ ] + +# CHECK: SectionHeaderCount: 3 + +# CHECK: Name: .test +# CHECK: Name: .shstrtab diff --git a/llvm/test/tools/llvm-objcopy/only-keep-strip-non-alloc.test b/llvm/test/tools/llvm-objcopy/only-keep-strip-non-alloc.test new file mode 100644 index 00000000000..bad00228492 --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/only-keep-strip-non-alloc.test @@ -0,0 +1,19 @@ +# RUN: yaml2obj %s > %t +# RUN: llvm-objcopy -strip-non-alloc -only-keep=.test %t %t2 +# RUN: llvm-readobj -file-headers -sections %t2 | FileCheck %s + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .test + Type: SHT_PROGBITS + Flags: [ ] + +# CHECK: SectionHeaderCount: 3 + +# CHECK: Name: .test +# CHECK: Name: .shstrtab diff --git a/llvm/test/tools/llvm-objcopy/strip-sections-keep.test b/llvm/test/tools/llvm-objcopy/strip-sections-keep.test new file mode 100644 index 00000000000..dcf69685382 --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/strip-sections-keep.test @@ -0,0 +1,13 @@ +# RUN: yaml2obj %s > %t +# RUN: llvm-objcopy -strip-sections -keep=.shstrtab %t %t2 +# RUN: od -Ax -t c %t2 | FileCheck %s + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + +# CHECK: \0 . s h s t r t a b \0 diff --git a/llvm/test/tools/llvm-objcopy/strip-sections-only-keep.test b/llvm/test/tools/llvm-objcopy/strip-sections-only-keep.test new file mode 100644 index 00000000000..2c9400cf34c --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/strip-sections-only-keep.test @@ -0,0 +1,20 @@ +# RUN: yaml2obj %s > %t +# RUN: llvm-objcopy -strip-sections -only-keep=.test %t %t2 +# RUN: od -Ax -t x1 %t2 | FileCheck %s +# RUN: od -Ax -t c %t2 | FileCheck %s -check-prefix=TEXT + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .test + Type: SHT_PROGBITS + Flags: [ ] + Content: "DEADBEEF" + +# CHECK: de ad be ef + +# TEXT-NOT: t e s t |