xref: /llvm-project/llvm/test/tools/llvm-objcopy/ELF/non-load-at-load-start.test (revision ef28379022121ce32cf93d7c3a7571a73ab5f801)
1*ef283790SFangrui Song## When the offset of a non-PT_LOAD segment (e.g. PT_INTERP) equals the offset
2*ef283790SFangrui Song## of a PT_LOAD segment, set the parent of the segment with a smaller alignment
3*ef283790SFangrui Song## to the segment with a larger alignment, ensuring that the offset is correctly
4*ef283790SFangrui Song## aligned.
5*ef283790SFangrui Song
6*ef283790SFangrui Song# RUN: yaml2obj %s -o %t
7*ef283790SFangrui Song# RUN: llvm-objcopy %t %t2
8*ef283790SFangrui Song# RUN: llvm-readelf -Sl %t2 | FileCheck %s
9*ef283790SFangrui Song
10*ef283790SFangrui Song# CHECK:       [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
11*ef283790SFangrui Song# CHECK-NEXT:  [ 0]                   NULL            0000000000000000 000000 000000 00      0   0  0
12*ef283790SFangrui Song# CHECK-NEXT:  [ 1] .text             PROGBITS        0000000000201000 001000 000001 00      0   0  4
13*ef283790SFangrui Song# CHECK-NEXT:  [ 2] .interp           PROGBITS        0000000000202000 002000 00001c 00      0   0  1
14*ef283790SFangrui Song# CHECK-NEXT:  [ 3] .rodata           PROGBITS        0000000000202020 002020 000001 00      0   0  1
15*ef283790SFangrui Song# CHECK-NEXT:  [ 4] .tdata            PROGBITS        0000000000203000 003000 000001 00      0   0 4096
16*ef283790SFangrui Song# CHECK-NEXT:  [ 5] .relro_padding    NOBITS          0000000000203001 003001 000fff 00      0   0  1
17*ef283790SFangrui Song# CHECK-NEXT:  [ 6] .strtab           STRTAB          0000000000000000 003001 000001 00      0   0  1
18*ef283790SFangrui Song# CHECK-NEXT:  [ 7] .shstrtab         STRTAB          0000000000000000 003002 00003f 00      0   0  1
19*ef283790SFangrui Song
20*ef283790SFangrui Song# CHECK:     Program Headers:
21*ef283790SFangrui Song# CHECK-NEXT:  Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align
22*ef283790SFangrui Song# CHECK-NEXT:  PHDR           0x000040 0x0000000000200040 0x0000000000200040 0x0001c0 0x0001c0     0x8
23*ef283790SFangrui Song# CHECK-NEXT:  INTERP         0x002000 0x0000000000202000 0x0000000000202000 0x00001c 0x00001c     0x1
24*ef283790SFangrui Song# CHECK-NEXT:      [Requesting program interpreter: ]
25*ef283790SFangrui Song# CHECK-NEXT:  LOAD           0x000000 0x0000000000200000 0x0000000000200000 0x000200 0x000200     0x1000
26*ef283790SFangrui Song# CHECK-NEXT:  LOAD           0x001000 0x0000000000201000 0x0000000000201000 0x000001 0x000001     0x1000
27*ef283790SFangrui Song# CHECK-NEXT:  LOAD           0x002000 0x0000000000202000 0x0000000000202000 0x000021 0x000021     0x1000
28*ef283790SFangrui Song# CHECK-NEXT:  TLS            0x003000 0x0000000000203000 0x0000000000203000 0x000001 0x001000     0x1000
29*ef283790SFangrui Song# CHECK-NEXT:  GNU_RELRO      0x003000 0x0000000000203000 0x0000000000203000 0x000001 0x001000     0x1000
30*ef283790SFangrui Song# CHECK-NEXT:  LOAD           0x003000 0x0000000000203000 0x0000000000203000 0x000001 0x001000     0x1000
31*ef283790SFangrui Song
32*ef283790SFangrui Song--- !ELF
33*ef283790SFangrui SongFileHeader:
34*ef283790SFangrui Song  Class:           ELFCLASS64
35*ef283790SFangrui Song  Data:            ELFDATA2LSB
36*ef283790SFangrui Song  Type:            ET_EXEC
37*ef283790SFangrui Song  Machine:         EM_X86_64
38*ef283790SFangrui SongProgramHeaders:
39*ef283790SFangrui Song  - Type:            PT_PHDR
40*ef283790SFangrui Song    VAddr:           0x200040
41*ef283790SFangrui Song    Align:           0x8
42*ef283790SFangrui Song    Offset:          0x40
43*ef283790SFangrui Song    FileSize:        0x1c0
44*ef283790SFangrui Song    MemSize:         0x1c0
45*ef283790SFangrui Song  - Type:            PT_INTERP
46*ef283790SFangrui Song    FirstSec:        .interp
47*ef283790SFangrui Song    LastSec:         .interp
48*ef283790SFangrui Song    ## The address equals the address of its containing PT_LOAD.
49*ef283790SFangrui Song    VAddr:           0x202000
50*ef283790SFangrui Song    Offset:          0x2000
51*ef283790SFangrui Song  - Type:            PT_LOAD
52*ef283790SFangrui Song    VAddr:           0x200000
53*ef283790SFangrui Song    Align:           0x1000
54*ef283790SFangrui Song    Offset:          0x0
55*ef283790SFangrui Song    FileSize:        0x200
56*ef283790SFangrui Song    MemSize:         0x200
57*ef283790SFangrui Song  - Type:            PT_LOAD
58*ef283790SFangrui Song    FirstSec:        .text
59*ef283790SFangrui Song    LastSec:         .text
60*ef283790SFangrui Song    VAddr:           0x201000
61*ef283790SFangrui Song    Align:           0x1000
62*ef283790SFangrui Song    Offset:          0x1000
63*ef283790SFangrui Song  - Type:            PT_LOAD
64*ef283790SFangrui Song    FirstSec:        .interp
65*ef283790SFangrui Song    LastSec:         .rodata
66*ef283790SFangrui Song    VAddr:           0x202000
67*ef283790SFangrui Song    Align:           0x1000
68*ef283790SFangrui Song    Offset:          0x2000
69*ef283790SFangrui Song  ## Intentionally place PT_TLS/PT_GNU_RELRO before PT_LOAD to test that we
70*ef283790SFangrui Song  ## correctly set parent segments.
71*ef283790SFangrui Song  - Type:            PT_TLS
72*ef283790SFangrui Song    FirstSec:        .tdata
73*ef283790SFangrui Song    LastSec:         .relro_padding
74*ef283790SFangrui Song    VAddr:           0x203000
75*ef283790SFangrui Song    Align:           0x1000
76*ef283790SFangrui Song    Offset:          0x3000
77*ef283790SFangrui Song  - Type:            PT_GNU_RELRO
78*ef283790SFangrui Song    FirstSec:        .tdata
79*ef283790SFangrui Song    LastSec:         .relro_padding
80*ef283790SFangrui Song    VAddr:           0x203000
81*ef283790SFangrui Song    Align:           0x1000
82*ef283790SFangrui Song    Offset:          0x3000
83*ef283790SFangrui Song  - Type:            PT_LOAD
84*ef283790SFangrui Song    FirstSec:        .tdata
85*ef283790SFangrui Song    LastSec:         .relro_padding
86*ef283790SFangrui Song    VAddr:           0x203000
87*ef283790SFangrui Song    Align:           0x1000
88*ef283790SFangrui Song    Offset:          0x3000
89*ef283790SFangrui SongSections:
90*ef283790SFangrui Song  - Name:            .text
91*ef283790SFangrui Song    Type:            SHT_PROGBITS
92*ef283790SFangrui Song    Address:         0x201000
93*ef283790SFangrui Song    AddressAlign:    0x4
94*ef283790SFangrui Song    Offset:          0x1000
95*ef283790SFangrui Song    Content:         C3
96*ef283790SFangrui Song  - Name:            .interp
97*ef283790SFangrui Song    Type:            SHT_PROGBITS
98*ef283790SFangrui Song    Address:         0x202000
99*ef283790SFangrui Song    AddressAlign:    0x1
100*ef283790SFangrui Song    Offset:          0x2000
101*ef283790SFangrui Song    Size:            0x1C
102*ef283790SFangrui Song  - Name:            .rodata
103*ef283790SFangrui Song    Type:            SHT_PROGBITS
104*ef283790SFangrui Song    Address:         0x202020
105*ef283790SFangrui Song    AddressAlign:    0x1
106*ef283790SFangrui Song    Offset:          0x2020
107*ef283790SFangrui Song    Size:            1
108*ef283790SFangrui Song  - Name:            .tdata
109*ef283790SFangrui Song    Type:            SHT_PROGBITS
110*ef283790SFangrui Song    Address:         0x203000
111*ef283790SFangrui Song    AddressAlign:    0x1000
112*ef283790SFangrui Song    Offset:          0x3000
113*ef283790SFangrui Song    Size:            1
114*ef283790SFangrui Song  - Name:            .relro_padding
115*ef283790SFangrui Song    Type:            SHT_NOBITS
116*ef283790SFangrui Song    Address:         0x203001
117*ef283790SFangrui Song    AddressAlign:    0x1
118*ef283790SFangrui Song    Size:            0xFFF
119