The address difference between two sections in a PT_LOAD is a constant. Consider a hypothetical case (pagesize can be very small, say, 4). ``` .text sh_addralign=4 .text.hot sh_addralign=16 ``` If we set p_align to 4, the PT_LOAD will be loaded at an address which is a multiple of 4. The address of .text.hot is guaranteed to be a multiple of 4, but not necessarily a multiple of 16. This patch deletes the constraint if (SHeader->sh_offset == PHeader.p_offset) Reviewed By: grimar, jhenderson Differential Revision: https://reviews.llvm.org/D67260 llvm-svn: 371501
57 lines
1.3 KiB
YAML
57 lines
1.3 KiB
YAML
## Test the p_align field of a program header can be set explicitly or inferred
|
|
## from the maximum alignment of contained sections.
|
|
|
|
## Explicit Align has priority over section alignments.
|
|
|
|
# RUN: yaml2obj --docnum=1 %s -o %t
|
|
# RUN: llvm-readobj -l %t | FileCheck %s
|
|
# CHECK: ProgramHeader {
|
|
# CHECK-NOT: ProgramHeader {
|
|
# CHECK: Alignment: 16
|
|
# CHECK-NEXT: }
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_EXEC
|
|
Machine: EM_NONE
|
|
Sections:
|
|
- Name: .tdata
|
|
Type: SHT_PROGBITS
|
|
AddressAlign: 4
|
|
- Name: .tbss
|
|
Type: SHT_NOBITS
|
|
AddressAlign: 64
|
|
ProgramHeaders:
|
|
- Type: PT_TLS
|
|
Align: 16
|
|
Sections:
|
|
- Section: .tdata
|
|
- Section: .tbss
|
|
|
|
## If Align is not specified, p_align is inferred from the maximum alignment
|
|
## of contained sections.
|
|
|
|
# RUN: yaml2obj --docnum=2 %s -o %t
|
|
# RUN: llvm-readobj -l %t | FileCheck %s
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_EXEC
|
|
Machine: EM_NONE
|
|
Sections:
|
|
- Name: .text
|
|
Type: SHT_PROGBITS
|
|
AddressAlign: 4
|
|
- Name: .text.hot
|
|
Type: SHT_PROGBITS
|
|
AddressAlign: 16
|
|
ProgramHeaders:
|
|
- Type: PT_LOAD
|
|
Sections:
|
|
- Section: .text
|
|
- Section: .text.hot
|