xref: /llvm-project/llvm/test/tools/llvm-objcopy/ELF/segment-test-remove-section.test (revision a7a447be0fa934505f0c423fb97b91a68c1cc715)
16e4dc6f2SAlexander Shaposhnikov# This test is checking to ensure that if a section is removed in the presence
26e4dc6f2SAlexander Shaposhnikov# of a segment that the segment maintains its shape and properties and that any
36e4dc6f2SAlexander Shaposhnikov# section inside that segment maintains the relative positioning it had in the
46e4dc6f2SAlexander Shaposhnikov# segment. Note worthy is that .text3 keeps its offset despite it being
56e4dc6f2SAlexander Shaposhnikov# possible to place it after .text when .text2 is removed.
66e4dc6f2SAlexander Shaposhnikov
76e4dc6f2SAlexander Shaposhnikov# RUN: yaml2obj %s -o %t
86e4dc6f2SAlexander Shaposhnikov# RUN: llvm-objcopy -R .text2 %t %t2
9298ea3f5SJordan Rupprecht# RUN: llvm-readobj --file-headers --program-headers --sections %t2 | FileCheck %s
101f6ddfb6SHubert Tong# RUN: od -t x1 -j 8192 -N 4 %t2 | FileCheck %s --check-prefix=DATA
116e4dc6f2SAlexander Shaposhnikov
126e4dc6f2SAlexander Shaposhnikov!ELF
136e4dc6f2SAlexander ShaposhnikovFileHeader:
146e4dc6f2SAlexander Shaposhnikov  Class:           ELFCLASS64
156e4dc6f2SAlexander Shaposhnikov  Data:            ELFDATA2LSB
166e4dc6f2SAlexander Shaposhnikov  Type:            ET_EXEC
176e4dc6f2SAlexander Shaposhnikov  Machine:         EM_X86_64
186e4dc6f2SAlexander ShaposhnikovSections:
196e4dc6f2SAlexander Shaposhnikov  - Name:            .text
206e4dc6f2SAlexander Shaposhnikov    Type:            SHT_PROGBITS
216e4dc6f2SAlexander Shaposhnikov    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
226e4dc6f2SAlexander Shaposhnikov    Address:         0x1000
236e4dc6f2SAlexander Shaposhnikov    AddressAlign:    0x1000
246e4dc6f2SAlexander Shaposhnikov    Size:            4096
256e4dc6f2SAlexander Shaposhnikov  - Name:            .text2
266e4dc6f2SAlexander Shaposhnikov    Type:            SHT_PROGBITS
276e4dc6f2SAlexander Shaposhnikov    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
286e4dc6f2SAlexander Shaposhnikov    Address:         0x2000
296e4dc6f2SAlexander Shaposhnikov    AddressAlign:    0x1000
306e4dc6f2SAlexander Shaposhnikov    Size:            4096
316e4dc6f2SAlexander Shaposhnikov    Content:         "DEADBEEF"
326e4dc6f2SAlexander Shaposhnikov  - Name:            .text3
336e4dc6f2SAlexander Shaposhnikov    Type:            SHT_PROGBITS
346e4dc6f2SAlexander Shaposhnikov    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
356e4dc6f2SAlexander Shaposhnikov    Address:         0x3000
366e4dc6f2SAlexander Shaposhnikov    AddressAlign:    0x1000
376e4dc6f2SAlexander Shaposhnikov    Size:            4096
386e4dc6f2SAlexander ShaposhnikovProgramHeaders:
396e4dc6f2SAlexander Shaposhnikov  - Type:     PT_LOAD
406e4dc6f2SAlexander Shaposhnikov    Flags:    [ PF_X, PF_R ]
41*a7a447beSGeorgii Rymar    FirstSec: .text
42*a7a447beSGeorgii Rymar    LastSec:  .text3
432779987dSGeorge Rimar## TODO (grimar): without the following line (i.e. without an empty symbol table),
442779987dSGeorge Rimar## llvm-objcopy adds an empty .strtab section. It doesn't look correct.
452779987dSGeorge RimarSymbols: []
466e4dc6f2SAlexander Shaposhnikov
476e4dc6f2SAlexander Shaposhnikov# Make sure that when we remove a section we overwrite it with zeros
481f6ddfb6SHubert Tong# DATA: {{^[^[:blank:]]+}} 00 00 00 00
496e4dc6f2SAlexander Shaposhnikov
50c7e6d14cSEugene Leviant#CHECK: SectionHeaderCount: 4
516e4dc6f2SAlexander Shaposhnikov
526e4dc6f2SAlexander Shaposhnikov# CHECK: Sections [
536e4dc6f2SAlexander Shaposhnikov# CHECK:   Section {
546e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Index: 0
556e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Name:  (0)
566e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Type: SHT_NULL (0x0)
576e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Flags [ (0x0)
586e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     ]
596e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Address: 0x0
606e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Offset:
616e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Size:
626e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Link: 0
636e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Info: 0
646e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     AddressAlignment: 0
656e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     EntrySize: 0
666e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   }
676e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   Section {
686e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Index: 1
696e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Name: .text
706e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Type: SHT_PROGBITS
716e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Flags [
726e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:       SHF_ALLOC
736e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:       SHF_EXECINSTR
746e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     ]
756e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Address: 0x1000
766e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Offset: 0x1000
776e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Size:
786e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Link: 0
796e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Info: 0
806e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     AddressAlignment: 4096
816e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     EntrySize: 0
826e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   }
836e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   Section {
846e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Index: 2
856e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Name: .text3
866e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Type: SHT_PROGBITS (0x1)
876e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Flags [
886e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:       SHF_ALLOC
896e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:       SHF_EXECINSTR
906e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     ]
916e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Address: 0x3000
926e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Offset: 0x3000
936e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Size:
946e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Link: 0
956e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Info: 0
966e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     AddressAlignment: 4096
976e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     EntrySize: 0
986e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   }
996e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   Section {
1006e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Index: 3
1016e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Name: .shstrtab
1026e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Type: SHT_STRTAB (0x3)
1036e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Flags [ (0x0)
1046e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     ]
1056e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Address: 0x0
1066e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Offset:
1076e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Size:
1086e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Link: 0
1096e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     Info: 0
1106e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     AddressAlignment: 1
1116e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:     EntrySize: 0
1126e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT:   }
1136e4dc6f2SAlexander Shaposhnikov# CHECK-NEXT: ]
1146e4dc6f2SAlexander Shaposhnikov
1156e4dc6f2SAlexander Shaposhnikov#CHECK:     ProgramHeaders [
1166e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:  ProgramHeader {
1176e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Type: PT_LOAD (0x1)
1186e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Offset: 0x1000
1196e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    VirtualAddress: 0x0
1206e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    PhysicalAddress: 0x0
1216e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    FileSize: 12288
1226e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    MemSize: 12288
1236e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Flags [ (0x5)
1246e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:      PF_R (0x4)
1256e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:      PF_X (0x1)
1266e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    ]
1276e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:    Alignment: 4096
1286e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:  }
1296e4dc6f2SAlexander Shaposhnikov#CHECK-NEXT:]
130