137 lines
5.5 KiB
YAML
137 lines
5.5 KiB
YAML
## In this test we check that we allocate file space for SHT_NOBITS sections when
|
|
## there are non-nobits sections in the same segment after them. When an object has
|
|
## multiple segments, we check each and allocate the space if at least one matches the
|
|
## condition mentioned.
|
|
|
|
## Case A. In this case there are no non-nobits sections after SHT_NOBITS sections in segments.
|
|
## Because of this the file space for SHT_NOBITS sections is not allocated.
|
|
# RUN: yaml2obj %s -D SEC1=.data.before -D SEC2=.nobits.1 -o %t1
|
|
# RUN: llvm-readelf --sections --segments %t1 | FileCheck %s --check-prefix=NO-ALLOC
|
|
|
|
# NO-ALLOC: [Nr] Name Type Address Off Size
|
|
# NO-ALLOC: [ 1] .data.before PROGBITS 0000000000000000 0000b0 000001
|
|
# NO-ALLOC-NEXT: [ 2] .nobits.1 NOBITS 0000000000000001 0000b1 000002
|
|
# NO-ALLOC-NEXT: [ 3] .data.after PROGBITS 0000000000000003 0000b1 000003
|
|
# NO-ALLOC-NEXT: [ 4] .nobits.2 NOBITS 0000000000000006 0000b4 000004
|
|
## .fill of size 0x5 is placed here.
|
|
# NO-ALLOC-NEXT: [ 5] .data.last PROGBITS 000000000000000f 0000b9 000006
|
|
|
|
# NO-ALLOC: Type Offset VirtAddr PhysAddr FileSiz MemSiz
|
|
# NO-ALLOC-NEXT: LOAD 0x0000b0 0x0000000000000000 0x0000000000000000 0x000001 0x000003
|
|
# NO-ALLOC-NEXT: LOAD 0x0000b0 0x0000000000000000 0x0000000000000000 0x000001 0x000003
|
|
|
|
## Case B. We have a segment that has a non-nobits section after the SHT_NOBITS section ".nobits.1".
|
|
## The file space is allocated for it, but not for ".nobits.2",
|
|
## which does not belong to any segment.
|
|
# RUN: yaml2obj %s -D SEC1=.nobits.1 -D SEC2=.data.after -o %t2
|
|
# RUN: llvm-readelf --sections --segments %t2 | FileCheck %s --check-prefix=ALLOC-FIRST
|
|
|
|
# ALLOC-FIRST: [Nr] Name Type Address Off Size
|
|
# ALLOC-FIRST: [ 1] .data.before PROGBITS 0000000000000000 0000b0 000001
|
|
# ALLOC-FIRST-NEXT: [ 2] .nobits.1 NOBITS 0000000000000001 0000b1 000002
|
|
# ALLOC-FIRST-NEXT: [ 3] .data.after PROGBITS 0000000000000003 0000b3 000003
|
|
# ALLOC-FIRST-NEXT: [ 4] .nobits.2 NOBITS 0000000000000006 0000b6 000004
|
|
## .fill of size 0x5 is placed here.
|
|
# ALLOC-FIRST-NEXT: [ 5] .data.last PROGBITS 000000000000000f 0000bb 000006
|
|
|
|
# ALLOC-FIRST: Type Offset VirtAddr PhysAddr FileSiz MemSiz
|
|
# ALLOC-FIRST-NEXT: LOAD 0x0000b0 0x0000000000000000 0x0000000000000000 0x000001 0x000003
|
|
# ALLOC-FIRST-NEXT: LOAD 0x0000b1 0x0000000000000000 0x0000000000000000 0x000005 0x000005
|
|
|
|
## Case C. We have a Fill after the ".nobits.2" section. In this case the file space is
|
|
## allocated for it, because fills are handled just like any other non-nobits sections.
|
|
# RUN: yaml2obj %s -D SEC1=.nobits.2 -D SEC2=.fill -o %t3
|
|
# RUN: llvm-readelf --sections --segments %t3 | FileCheck %s --check-prefix=FILL-AT-END
|
|
|
|
# FILL-AT-END: [Nr] Name Type Address Off Size
|
|
# FILL-AT-END: [ 4] .nobits.2 NOBITS 0000000000000006 0000b4 000004
|
|
## .fill of size 0x5 is placed here.
|
|
# FILL-AT-END: [ 5] .data.last PROGBITS 000000000000000f 0000bd 000006
|
|
|
|
# FILL-AT-END: Type Offset VirtAddr PhysAddr FileSiz MemSiz
|
|
# FILL-AT-END-NEXT: LOAD 0x0000b0 0x0000000000000000 0x0000000000000000 0x000001 0x000003
|
|
# FILL-AT-END-NEXT: LOAD 0x0000b4 0x0000000000000000 0x0000000000000000 0x000009 0x000009
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_EXEC
|
|
Sections:
|
|
- Name: .data.before
|
|
Type: SHT_PROGBITS
|
|
Flags: [ SHF_ALLOC ]
|
|
Size: 0x1
|
|
- Name: .nobits.1
|
|
Type: SHT_NOBITS
|
|
Flags: [ SHF_ALLOC ]
|
|
Size: 0x2
|
|
- Name: .data.after
|
|
Type: SHT_PROGBITS
|
|
Flags: [ SHF_ALLOC ]
|
|
Size: 0x3
|
|
- Name: .nobits.2
|
|
Type: SHT_NOBITS
|
|
Flags: [ SHF_ALLOC ]
|
|
Size: 0x4
|
|
- Type: Fill
|
|
Name: .fill
|
|
Pattern: "00"
|
|
Size: 5
|
|
- Name: .data.last
|
|
Type: SHT_PROGBITS
|
|
Flags: [ SHF_ALLOC ]
|
|
Size: 0x6
|
|
ProgramHeaders:
|
|
## We have 2 segments, the first is predefined and the second can be customized.
|
|
## We want to have more than one segment to show we check all of them when
|
|
## trying to find a non-nobits section after a nobits one.
|
|
- Type: PT_LOAD
|
|
Flags: [ PF_R ]
|
|
FirstSec: .data.before
|
|
LastSec: .nobits.1
|
|
- Type: PT_LOAD
|
|
Flags: [ PF_R ]
|
|
FirstSec: [[SEC1]]
|
|
LastSec: [[SEC2]]
|
|
|
|
## Case D. We have a segment with SHT_NOBITS sections on its borders and one
|
|
## non-nobits in the middle. Check we allocate the file space only for
|
|
## the first nobits section.
|
|
|
|
# RUN: yaml2obj --docnum=2 %s -o %t4
|
|
# RUN: llvm-readelf --sections --segments %t4 | FileCheck %s --check-prefix=MIDDLE
|
|
|
|
# MIDDLE: [Nr] Name Type Address Off Size
|
|
# MIDDLE: [ 1] .nobits.1 NOBITS 0000000000000000 000078 000001
|
|
# MIDDLE-NEXT: [ 2] .data PROGBITS 0000000000000001 000079 000010
|
|
# MIDDLE-NEXT: [ 3] .nobits.2 NOBITS 0000000000000011 000089 000100
|
|
# MIDDLE-NEXT: [ 4] .strtab STRTAB 0000000000000000 000089 000001
|
|
|
|
# MIDDLE: Type Offset VirtAddr PhysAddr FileSiz MemSiz
|
|
# MIDDLE-NEXT: LOAD 0x000078 0x0000000000000000 0x0000000000000000 0x000011 0x000111
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_EXEC
|
|
Sections:
|
|
- Name: .nobits.1
|
|
Type: SHT_NOBITS
|
|
Flags: [ SHF_ALLOC ]
|
|
Size: 0x1
|
|
- Name: .data
|
|
Type: SHT_PROGBITS
|
|
Flags: [ SHF_ALLOC ]
|
|
Size: 0x10
|
|
- Name: .nobits.2
|
|
Type: SHT_NOBITS
|
|
Flags: [ SHF_ALLOC ]
|
|
Size: 0x100
|
|
ProgramHeaders:
|
|
- Type: PT_LOAD
|
|
Flags: [ PF_R ]
|
|
FirstSec: .nobits.1
|
|
LastSec: .nobits.2
|