[ELF] Make SyntheticSection parameter order match InputSection
[llvm-project.git] / lld / test / ELF / edata-etext.s
blob8c2ccbda2e58f73cecdefa52f8972c8ae8e6bda7
1 # REQUIRES: x86
2 # RUN: rm -rf %t && split-file %s %t
3 # RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %t/a.s -o %t/a.o
4 # RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %t/b.s -o %t/b.o
5 # RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %t/c.s -o %t/c.o
6 # RUN: ld.lld %t/a.o -o %t/a
7 # RUN: llvm-objdump -t --section-headers %t/a | FileCheck %s
9 ## This checks that:
10 ## 1) Address of _etext is the first location after the last read-only loadable segment.
11 ## 2) Address of _edata points to the end of the last non SHT_NOBITS section.
12 ## That is how gold/bfd do. At the same time specs says: "If the address of _edata is
13 ## greater than the address of _etext, the address of _end is same as the address
14 ## of _edata." (https://docs.oracle.com/cd/E53394_01/html/E54766/u-etext-3c.html).
15 ## 3) Address of _end is different from _edata because of 2.
16 ## 4) Addresses of _edata == edata, _end == end and _etext == etext.
17 # CHECK: Sections:
18 # CHECK-NEXT: Idx Name Size VMA Type
19 # CHECK-NEXT: 0 00000000 0000000000000000
20 # CHECK-NEXT: 1 .text 00000001 0000000000201158 TEXT
21 # CHECK-NEXT: 2 .data 00000002 0000000000202159 DATA
22 # CHECK-NEXT: 3 .bss 00000006 000000000020215c BSS
23 # CHECK: SYMBOL TABLE:
24 # CHECK-NEXT: 000000000020215b g .data 0000000000000000 _edata
25 # CHECK-NEXT: 0000000000202162 g .bss 0000000000000000 _end
26 # CHECK-NEXT: 0000000000201159 g .text 0000000000000000 _etext
27 # CHECK-NEXT: 0000000000201158 g .text 0000000000000000 _start
28 # CHECK-NEXT: 000000000020215b g .data 0000000000000000 edata
29 # CHECK-NEXT: 0000000000202162 g .bss 0000000000000000 end
30 # CHECK-NEXT: 0000000000201159 g .text 0000000000000000 etext
32 # RUN: ld.lld -r %t/a.o -o %t/a.ro
33 # RUN: llvm-objdump -t %t/a.ro | FileCheck %s --check-prefix=RELOCATABLE
34 # RELOCATABLE: 0000000000000000 *UND* 0000000000000000 _edata
35 # RELOCATABLE-NEXT: 0000000000000000 *UND* 0000000000000000 _end
36 # RELOCATABLE-NEXT: 0000000000000000 *UND* 0000000000000000 _etext
38 ## If a relocatable object file defines non-reserved identifiers (by C and C++)
39 ## edata/end/etext, don't redefine them. Note: GNU ld redefines the reserved
40 ## _edata while we don't for simplicity.
41 # RUN: ld.lld %t/b.o -o %t/b
42 # RUN: llvm-objdump -t %t/b | FileCheck %s --check-prefix=CHECK2
43 # RUN: ld.lld %t/c.o -o %t/c
44 # RUN: llvm-objdump -t %t/c | FileCheck %s --check-prefix=CHECK2
45 ## PROVIDE does not redefine defined symbols, even if COMMON.
46 # RUN: ld.lld %t/c.o %t/lds -o %t/c
47 # RUN: llvm-objdump -t %t/c | FileCheck %s --check-prefix=CHECK2
49 # CHECK2: [[#%x,]] g O .bss 0000000000000001 _edata
50 # CHECK2-NEXT: [[#%x,]] g O .bss 0000000000000001 edata
51 # CHECK2-NEXT: [[#%x,]] g O .bss 0000000000000001 end
52 # CHECK2-NEXT: [[#%x,]] g O .bss 0000000000000001 etext
54 #--- a.s
55 .global _edata,_end,_etext,_start,edata,end,etext
56 .text
57 _start:
58 nop
59 .data
60 .word 1
61 .bss
62 .align 4
63 .space 6
65 #--- b.s
66 .bss
67 .macro def x
68 .globl \x
69 .type \x, @object
70 \x: .byte 0
71 .size \x, 1
72 .endm
73 def _edata
74 def edata
75 def end
76 def etext
78 #--- c.s
79 .comm _edata,1,1
80 .comm edata,1,1
81 .comm end,1,1
82 .comm etext,1,1
84 #--- lds
85 SECTIONS {
86 .text : { *(.text) }
88 PROVIDE(etext = .);
89 PROVIDE(edata = .);
90 PROVIDE(end = .);