File: phdrs.s

package info (click to toggle)
llvm-toolchain-20 1%3A20.1.8-1~exp1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 2,111,388 kB
  • sloc: cpp: 7,438,767; ansic: 1,393,871; asm: 1,012,926; python: 241,728; f90: 86,635; objc: 75,411; lisp: 42,144; pascal: 17,286; sh: 10,027; ml: 5,082; perl: 4,730; awk: 3,523; makefile: 3,349; javascript: 2,251; xml: 892; fortran: 672
file content (124 lines) | stat: -rw-r--r-- 4,431 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# REQUIRES: x86
# RUN: rm -rf %t && split-file %s %t && cd %t
# RUN: llvm-mc -filetype=obj -triple=x86_64 a.s -o a.o

#--- 1.lds
PHDRS {all PT_LOAD FILEHDR PHDRS ;}
SECTIONS {
  . = 0x10000200;
  .text : {*(.text*)} :all
  .foo : {*(.foo.*)} :"all"
  .data : {*(.data.*)} : "all"}

# RUN: ld.lld -o 1 -T 1.lds a.o
# RUN: llvm-readelf -Sl 1 | FileCheck %s
# CHECK:      [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
# CHECK:      [ 1] .text             PROGBITS        0000000010000200 000200 000001 00  AX  0   0  4
# CHECK-NEXT: [ 2] .foo              PROGBITS        0000000010000201 000201 000008 00  WA  0   0  1

# CHECK:      Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align
# CHECK-NEXT: LOAD           0x000000 0x0000000010000000 0x0000000010000000 0x000209 0x000209 RWE 0x1000

#--- 2.lds
## Check that program headers are not written, unless we explicitly tell
## lld to do this.
PHDRS {all PT_LOAD;}
SECTIONS {
    . = 0x10000200;
    /DISCARD/ : {*(.text*)}
    .foo : {*(.foo.*)} :all
}

# RUN: ld.lld -o 2 -T 2.lds a.o
# RUN: llvm-readelf -l 2 | FileCheck --check-prefix=NOPHDR %s
# NOPHDR:      Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align
# NOPHDR-NEXT: LOAD           0x000200 0x0000000010000200 0x0000000010000200 0x000008 0x000008 RW  0x1000

#--- 3.lds
PHDRS {all PT_LOAD FILEHDR PHDRS ;}
SECTIONS {
    . = 0x10000200;
    .text : {*(.text*)} :all
    .foo : {*(.foo.*)}
    .data : {*(.data.*)} }

# RUN: ld.lld -o 3 -T 3.lds a.o
# RUN: llvm-readelf -l 3 | FileCheck --check-prefix=DEFHDR %s
# DEFHDR:      Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align
# DEFHDR-NEXT: LOAD           0x000000 0x0000000010000000 0x0000000010000000 0x000209 0x000209 RWE 0x1000

#--- at.lds
## Check the AT(expr)
PHDRS {all PT_LOAD FILEHDR PHDRS AT(0x500 + 0x500) ;}
SECTIONS {
    . = 0x10000200;
    .text : {*(.text*)} :all
    .foo : {*(.foo.*)} :all
    .data : {*(.data.*)} :all}

# RUN: ld.lld -o at -T at.lds a.o
# RUN: llvm-readelf -l at | FileCheck --check-prefix=AT %s
# AT:      Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align
# AT-NEXT: LOAD           0x000000 0x0000000010000000 0x0000000000000a00 0x000209 0x000209 RWE 0x1000

#--- int.lds
## Check the numetic values for PHDRS.
PHDRS {text PT_LOAD FILEHDR PHDRS; foo 0x11223344; }
SECTIONS { . = SIZEOF_HEADERS; .foo : { *(.foo* .text*) } : text : foo}

# RUN: ld.lld -o int -T int.lds a.o
# RUN: llvm-readelf -l int | FileCheck --check-prefix=INT-PHDRS %s
# INT-PHDRS:      Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align
# INT-PHDRS-NEXT: LOAD           0x000000 0x0000000000000000 0x0000000000000000 0x0000b9 0x0000b9 RWE 0x1000
# INT-PHDRS-NEXT: <unknown>: 0x11223344 0x0000b0 0x00000000000000b0 0x00000000000000b0 0x000009 0x000009 RWE 0x4

#--- unspecified.lds
## Check that error is reported when trying to use phdr which is not listed
## inside PHDRS {} block
## TODO: If script doesn't contain PHDRS {} block then default phdr is always
## created and error is not reported.
PHDRS { all PT_LOAD; }
SECTIONS { .baz : {*(.foo.*)} :bar }

# RUN: not ld.lld -T unspecified.lds a.o 2>&1 | FileCheck --check-prefix=UNSPECIFIED %s
# UNSPECIFIED: unspecified.lds:6: program header 'bar' is not listed in PHDRS

#--- foohdr.lds
PHDRS { text PT_LOAD FOOHDR; }

# RUN: not ld.lld -T foohdr.lds a.o 2>&1 | FileCheck --check-prefix=FOOHDR %s
# FOOHDR: error: foohdr.lds:1: unexpected header attribute: FOOHDR

#--- pt_foo.lds
PHDRS { text PT_FOO FOOHDR; }

# RUN: not ld.lld -T pt_foo.lds a.o 2>&1 | FileCheck --check-prefix=PTFOO %s --strict-whitespace
#      PTFOO:{{.*}}error: pt_foo.lds:1: invalid program header type: PT_FOO
# PTFOO-NEXT:>>> PHDRS { text PT_FOO FOOHDR; }
# PTFOO-NEXT:>>>              ^

#--- unclosed.lds
PHDRS { text PT_LOAD ;

# RUN: not ld.lld -T unclosed.lds a.o 2>&1 | FileCheck --check-prefix=UNCLOSED %s
#     UNCLOSED:error: unclosed.lds:1: unexpected EOF
# UNCLOSED-NOT:{{.}}

#--- unclosed2.lds
PHDRS { text PT_LOAD

# RUN: not ld.lld -T unclosed2.lds a.o 2>&1 | FileCheck --check-prefix=UNCLOSED2 %s
# UNCLOSED2: error: unclosed2.lds:1: unexpected header attribute:

#--- a.s
.global _start
_start:
 nop

.section .foo.1,"a"
foo1:
 .long 0

.section .foo.2,"aw"
foo2:
 .long 0