summaryrefslogtreecommitdiffstats
path: root/llvm/test/tools/llvm-objcopy
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/tools/llvm-objcopy')
-rw-r--r--llvm/test/tools/llvm-objcopy/ELF/remove-section-in-segment.test47
-rw-r--r--llvm/test/tools/llvm-objcopy/ELF/strip-all-gnu.test19
-rw-r--r--llvm/test/tools/llvm-objcopy/ELF/strip-all.test12
-rw-r--r--llvm/test/tools/llvm-objcopy/ELF/strip-non-alloc.test12
-rw-r--r--llvm/test/tools/llvm-objcopy/ELF/strip-sections.test11
5 files changed, 95 insertions, 6 deletions
diff --git a/llvm/test/tools/llvm-objcopy/ELF/remove-section-in-segment.test b/llvm/test/tools/llvm-objcopy/ELF/remove-section-in-segment.test
new file mode 100644
index 00000000000..d464e0d414c
--- /dev/null
+++ b/llvm/test/tools/llvm-objcopy/ELF/remove-section-in-segment.test
@@ -0,0 +1,47 @@
+# Show that --remove-section removes sections in segments.
+
+# RUN: yaml2obj %s -o %t
+
+# Validate the offsets for the later parts of the test.
+# RUN: llvm-objcopy %t %t.copy
+# Skip to the start of the sections, which should be immediately after the
+# program header table (i.e. sizeof(Elf64_Ehdr) + sizeof(Elf64_Phdr) == 120).
+# RUN: od %t.copy -t x1 -N 16 -j 120 | FileCheck %s --check-prefix=COPY
+
+# COPY: 11 22 33 44 55 66 77 88
+
+# RUN: llvm-objcopy --remove-section non_alloc %t %t.nonalloc
+# RUN: llvm-readelf --sections %t.nonalloc | FileCheck %s --check-prefix=NONALLOC-SHDRS
+# RUN: od %t.nonalloc -t x1 -N 16 -j 120 | FileCheck %s --check-prefix=NONALLOC-BYTES
+
+# NONALLOC-SHDRS-NOT: non_alloc
+# NONALLOC-BYTES: 11 22 33 44 00 00 00 00
+
+# RUN: llvm-objcopy --remove-section shf_alloc %t %t.alloc
+# RUN: llvm-readelf --sections %t.alloc | FileCheck %s --check-prefix=ALLOC-SHDRS
+# RUN: od %t.alloc -t x1 -N 16 -j 120 | FileCheck %s --check-prefix=ALLOC-BYTES
+
+# ALLOC-SHDRS-NOT: shf_alloc
+# ALLOC-BYTES: 00 00 00 00 55 66 77 88
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+Sections:
+ - Name: shf_alloc
+ Type: SHT_PROGBITS
+ Flags: [SHF_ALLOC]
+ Content: '11223344'
+ - Name: non_alloc
+ Type: SHT_PROGBITS
+ Flags: []
+ Content: '55667788'
+ProgramHeaders:
+ # Use an arbitrary segment type to show that the segment type is unimportant.
+ - Type: 0x61234567
+ Sections:
+ - Section: shf_alloc
+ - Section: non_alloc
diff --git a/llvm/test/tools/llvm-objcopy/ELF/strip-all-gnu.test b/llvm/test/tools/llvm-objcopy/ELF/strip-all-gnu.test
index 8253526d23c..95e7356d024 100644
--- a/llvm/test/tools/llvm-objcopy/ELF/strip-all-gnu.test
+++ b/llvm/test/tools/llvm-objcopy/ELF/strip-all-gnu.test
@@ -1,10 +1,15 @@
# RUN: yaml2obj %s > %t
-# RUN: cp %t %t1
# RUN: llvm-objcopy --strip-all-gnu %t %t2
# RUN: llvm-strip --strip-all-gnu %t -o %t3
# RUN: llvm-readobj --file-headers --sections %t2 | FileCheck %s
# RUN: cmp %t2 %t3
+# Show that the debug section in a segment was removed, to match GNU.
+# First validate that the offset in use is correct.
+# RUN: llvm-objcopy %t %t4
+# RUN: od %t4 -t x1 -N 4 -j 120 | FileCheck %s --check-prefix=COPY-BYTES
+# RUN: od %t2 -t x1 -N 4 -j 120 | FileCheck %s --check-prefix=STRIP-BYTES
+
!ELF
FileHeader:
Class: ELFCLASS64
@@ -12,6 +17,10 @@ FileHeader:
Type: ET_REL
Machine: EM_X86_64
Sections:
+ - Name: .debug_in_segment
+ Type: SHT_PROGBITS
+ Flags: [ ]
+ Content: "deadbeef"
- Name: .dynstr
Type: SHT_STRTAB
Flags: [ SHF_ALLOC ]
@@ -45,6 +54,11 @@ Sections:
- Name: .rela.text
Type: SHT_RELA
Info: .text
+ProgramHeaders:
+ # Use an arbitrary segment type to show that the segment type is unimportant.
+ - Type: 0x61234567
+ Sections:
+ - Section: .debug_in_segment
# CHECK: SectionHeaderCount: 8
@@ -55,3 +69,6 @@ Sections:
# CHECK: Name: .comment
# CHECK: Name: .random_section_name
# CHECK: Name: .shstrtab
+
+# COPY-BYTES: de ad be ef
+# STRIP-BYTES: 00 00 00 00
diff --git a/llvm/test/tools/llvm-objcopy/ELF/strip-all.test b/llvm/test/tools/llvm-objcopy/ELF/strip-all.test
index 87388e09747..32a801d7a6c 100644
--- a/llvm/test/tools/llvm-objcopy/ELF/strip-all.test
+++ b/llvm/test/tools/llvm-objcopy/ELF/strip-all.test
@@ -57,6 +57,10 @@ FileHeader:
Type: ET_REL
Machine: EM_X86_64
Sections:
+ - Name: non_alloc_in_segment
+ Type: SHT_PROGBITS
+ Flags: [ ]
+ Size: 4
- Name: .bss
Type: SHT_NOBITS
Flags: [ SHF_ALLOC ]
@@ -68,9 +72,15 @@ Sections:
Flags: [ ]
- Name: .gnu.warning.foo
Type: SHT_PROGBITS
+ProgramHeaders:
+ # Use an arbitrary segment type to show that the segment type is unimportant.
+ - Type: 0x61234567
+ Sections:
+ - Section: non_alloc_in_segment
-# CHECK: SectionHeaderCount: 5
+# CHECK: SectionHeaderCount: 6
+# CHECK: Name: non_alloc_in_segment
# CHECK: Name: .bss
# CHECK: Name: .text
# CHECK: Name: .gnu.warning.foo
diff --git a/llvm/test/tools/llvm-objcopy/ELF/strip-non-alloc.test b/llvm/test/tools/llvm-objcopy/ELF/strip-non-alloc.test
index 8db732147d3..1f082bf4734 100644
--- a/llvm/test/tools/llvm-objcopy/ELF/strip-non-alloc.test
+++ b/llvm/test/tools/llvm-objcopy/ELF/strip-non-alloc.test
@@ -9,6 +9,10 @@ FileHeader:
Type: ET_REL
Machine: EM_X86_64
Sections:
+ - Name: non_alloc_in_segment
+ Type: SHT_PROGBITS
+ Flags: [ ]
+ Size: 4
- Name: .bss
Type: SHT_NOBITS
Flags: [ SHF_ALLOC ]
@@ -18,9 +22,15 @@ Sections:
- Name: .blarg
Type: SHT_PROGBITS
Flags: [ ]
+ProgramHeaders:
+ # Use an arbitrary segment type to show that the segment type is unimportant.
+ - Type: 0x61234567
+ Sections:
+ - Section: non_alloc_in_segment
-# CHECK: SectionHeaderCount: 4
+# CHECK: SectionHeaderCount: 5
+# CHECK: Name: non_alloc_in_segment
# CHECK: Name: .bss
# CHECK: Name: .text
# CHECK: Name: .shstrtab
diff --git a/llvm/test/tools/llvm-objcopy/ELF/strip-sections.test b/llvm/test/tools/llvm-objcopy/ELF/strip-sections.test
index 2dee6e2808d..244cdb31ba9 100644
--- a/llvm/test/tools/llvm-objcopy/ELF/strip-sections.test
+++ b/llvm/test/tools/llvm-objcopy/ELF/strip-sections.test
@@ -15,13 +15,18 @@ Sections:
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
AddressAlign: 0x0000000000001000
Content: "DEADBEEF"
+ - Name: .non_alloc_in_segment
+ Type: SHT_PROGBITS
+ Flags: [ ]
+ Content: "CAFEBABE"
ProgramHeaders:
- Type: PT_LOAD
Flags: [ PF_X, PF_R ]
Sections:
- Section: .text
+ - Section: .non_alloc_in_segment
-#DATA: 0010000 de ad be ef
+#DATA: 0010000 de ad be ef ca fe ba be
#CHECK: ElfHeader {
#CHECK-NEXT: Ident {
@@ -55,8 +60,8 @@ ProgramHeaders:
#CHECK-NEXT: Offset: 0x1000
#CHECK-NEXT: VirtualAddress: 0x0
#CHECK-NEXT: PhysicalAddress: 0x0
-#CHECK-NEXT: FileSize: 4
-#CHECK-NEXT: MemSize: 4
+#CHECK-NEXT: FileSize: 8
+#CHECK-NEXT: MemSize: 8
#CHECK-NEXT: Flags [ (0x5)
#CHECK-NEXT: PF_R (0x4)
#CHECK-NEXT: PF_X (0x1)
OpenPOWER on IntegriCloud