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