brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.6 KiB · 1432271 Raw
199 lines · plain
1# REQUIRES: x862## Test the placement of .lrodata, .lbss, .ldata, and their -fdata-sections variants.3## See also section-layout.s.4 5# RUN: rm -rf %t && split-file %s %t && cd %t6 7# RUN: llvm-mc -filetype=obj -triple=x86_64 --defsym=BSS=1 a.s -o a.o8# RUN: ld.lld --section-start=.note=0x200300 a.o -o a9# RUN: llvm-readelf -S -l -sX a | FileCheck %s10 11# RUN: llvm-mc -filetype=obj -triple=x86_64 a.s -o a1.o12# RUN: ld.lld --section-start=.note=0x200300 a1.o -o a113# RUN: llvm-readelf -S -sX a1 | FileCheck %s --check-prefix=CHECK114 15# RUN: ld.lld -T b.lds -z norelro a.o -z lrodata-after-bss -z nolrodata-after-bss -o b --fatal-warnings16# RUN: llvm-readelf -S -l b | FileCheck %s --check-prefix=CHECK217 18# RUN: ld.lld --section-start=.note=0x200300 a.o -z lrodata-after-bss -o a319# RUN: llvm-readelf -S -l -sX a3 | FileCheck %s --check-prefix=CHECK320 21# RUN: llvm-mc -filetype=obj -triple=x86_64 c.s -o c.o22# RUN: ld.lld c.o -o c23# RUN: llvm-readelf -S -l c | FileCheck %s --check-prefix=CHECK424 25# CHECK:       Name              Type            Address          Off    Size   ES Flg Lk Inf Al26# CHECK-NEXT:                    NULL            0000000000000000 000000 000000 00      0   0  027# CHECK-NEXT:  .note             NOTE            0000000000200300 000300 000001 00   A  0   0  128# CHECK-NEXT:  .lrodata          PROGBITS        0000000000200301 000301 000002 00  Al  0   0  129# CHECK-NEXT:  .rodata           PROGBITS        0000000000200303 000303 000001 00   A  0   0  130# CHECK-NEXT:  .text             PROGBITS        0000000000201304 000304 000001 00  AX  0   0  431# CHECK-NEXT:  .tdata            PROGBITS        0000000000202305 000305 000001 00 WAT  0   0  132# CHECK-NEXT:  .tbss             NOBITS          0000000000202306 000306 000002 00 WAT  0   0  133# CHECK-NEXT:  .relro_padding    NOBITS          0000000000202306 000306 000cfa 00  WA  0   0  134# CHECK-NEXT:  .data             PROGBITS        0000000000203306 000306 000001 00  WA  0   0  135# CHECK-NEXT:  .bss              NOBITS          0000000000203307 000307 001800 00  WA  0   0  136## We spend size(.bss) % MAXPAGESIZE bytes for .bss.37# CHECK-NEXT:  .ldata            PROGBITS        0000000000205b07 000b07 000002 00 WAl  0   0  138# CHECK-NEXT:  .ldata2           PROGBITS        0000000000205b09 000b09 000001 00 WAl  0   0  139# CHECK-NEXT:  .lbss             NOBITS          0000000000205b0a 000b0a 001201 00 WAl  0   0  140# CHECK-NEXT:  .comment          PROGBITS        0000000000000000 000b0a {{.*}} 01  MS  0   0  141 42# CHECK:       Program Headers:43# CHECK-NEXT:    Type  Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align44# CHECK-NEXT:    PHDR  0x000040 0x0000000000200040 0x0000000000200040 {{.*}}   {{.*}}   R   0x845# CHECK-NEXT:    LOAD  0x000000 0x0000000000200000 0x0000000000200000 0x000304 0x000304 R   0x100046# CHECK-NEXT:    LOAD  0x000304 0x0000000000201304 0x0000000000201304 0x000001 0x000001 R E 0x100047# CHECK-NEXT:    LOAD  0x000305 0x0000000000202305 0x0000000000202305 0x000001 0x000cfb RW  0x100048# CHECK-NEXT:    LOAD  0x000306 0x0000000000203306 0x0000000000203306 0x000001 0x001801 RW  0x100049# CHECK-NEXT:    LOAD  0x000b07 0x0000000000205b07 0x0000000000205b07 0x000003 0x001204 RW  0x100050 51# CHECK:       0000000000201304     0 NOTYPE  GLOBAL DEFAULT [[#]] (.text)   _start52# CHECK-NEXT:  0000000000201305     0 NOTYPE  GLOBAL DEFAULT [[#]] (.text)   _etext53# CHECK-NEXT:  0000000000203307     0 NOTYPE  GLOBAL DEFAULT [[#]] (.data)   _edata54# CHECK-NEXT:  0000000000206d0b     0 NOTYPE  GLOBAL DEFAULT [[#]] (.lbss)   _end55 56# CHECK1:      .data      PROGBITS        0000000000203306 000306 000001 00  WA  0   0  157# CHECK1-NEXT: .ldata     PROGBITS        0000000000203307 000307 000002 00 WAl  0   0  158# CHECK1-NEXT: .ldata2    PROGBITS        0000000000203309 000309 000001 00 WAl  0   0  159# CHECK1-NEXT: .comment   PROGBITS        0000000000000000 00030a {{.*}} 01  MS  0   0  160 61# CHECK1:       0000000000201304     0 NOTYPE  GLOBAL DEFAULT [[#]] (.text)   _start62# CHECK1-NEXT:  0000000000201305     0 NOTYPE  GLOBAL DEFAULT [[#]] (.text)   _etext63# CHECK1-NEXT:  0000000000203307     0 NOTYPE  GLOBAL DEFAULT [[#]] (.data)   _edata64# CHECK1-NEXT:  000000000020330a     0 NOTYPE  GLOBAL DEFAULT [[#]] (.ldata2) _end65 66# CHECK2:      .note      NOTE            0000000000200300 000300 000001 00   A  0   0  167# CHECK2-NEXT: .lrodata   PROGBITS        0000000000200301 000301 000001 00  Al  0   0  168## With a SECTIONS command, we suppress the default rule placing .lrodata.* into .lrodata.69# CHECK2-NEXT: .lrodata.1 PROGBITS        0000000000200302 000302 000001 00  Al  0   0  170# CHECK2-NEXT: .rodata    PROGBITS        0000000000200303 000303 000001 00   A  0   0  171# CHECK2-NEXT: .text      PROGBITS        0000000000200304 000304 000001 00  AX  0   0  472# CHECK2-NEXT: .tdata     PROGBITS        0000000000200305 000305 000001 00 WAT  0   0  173# CHECK2-NEXT: .tbss      NOBITS          0000000000200306 000306 000001 00 WAT  0   0  174# CHECK2-NEXT: .tbss.1    NOBITS          0000000000200307 000306 000001 00 WAT  0   0  175# CHECK2-NEXT: .data      PROGBITS        0000000000200306 000306 000001 00  WA  0   0  176# CHECK2-NEXT: .bss       NOBITS          0000000000200307 000307 001800 00  WA  0   0  177# CHECK2-NEXT: .ldata     PROGBITS        0000000000201b07 001b07 000002 00 WAl  0   0  178# CHECK2-NEXT: .ldata2    PROGBITS        0000000000201b09 001b09 000001 00 WAl  0   0  179# CHECK2-NEXT: .lbss      NOBITS          0000000000201b0a 001b0a 001201 00 WAl  0   0  180# CHECK2-NEXT: .comment   PROGBITS        0000000000000000 001b0a {{.*}} 01  MS  0   0  181 82# CHECK2:      Program Headers:83# CHECK2-NEXT:   Type  Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align84# CHECK2-NEXT:   PHDR  0x000040 0x0000000000200040 0x0000000000200040 {{.*}}   {{.*}}   R   0x885# CHECK2-NEXT:   LOAD  0x000000 0x0000000000200000 0x0000000000200000 0x000304 0x000304 R   0x100086# CHECK2-NEXT:   LOAD  0x000304 0x0000000000200304 0x0000000000200304 0x000001 0x000001 R E 0x100087# CHECK2-NEXT:   LOAD  0x000305 0x0000000000200305 0x0000000000200305 0x001805 0x002a06 RW  0x100088# CHECK2-NEXT:   TLS   0x000305 0x0000000000200305 0x0000000000200305 0x000001 0x000003 R   0x189 90# CHECK3:       Name              Type            Address          Off    Size   ES Flg Lk Inf Al91# CHECK3-NEXT:                    NULL            0000000000000000 000000 000000 00      0   0  092# CHECK3-NEXT:  .note             NOTE            0000000000200300 000300 000001 00   A  0   0  193# CHECK3-NEXT:  .rodata           PROGBITS        0000000000200301 000301 000001 00   A  0   0  194# CHECK3-NEXT:  .text             PROGBITS        0000000000201304 000304 000001 00  AX  0   0  495# CHECK3-NEXT:  .tdata            PROGBITS        0000000000202305 000305 000001 00 WAT  0   0  196# CHECK3-NEXT:  .tbss             NOBITS          0000000000202306 000306 000002 00 WAT  0   0  197# CHECK3-NEXT:  .relro_padding    NOBITS          0000000000202306 000306 000cfa 00  WA  0   0  198# CHECK3-NEXT:  .data             PROGBITS        0000000000203306 000306 000001 00  WA  0   0  199# CHECK3-NEXT:  .bss              NOBITS          0000000000203307 000307 001800 00  WA  0   0  1100## We spend (size(.bss) + size(.lbss)) % MAXPAGESIZE bytes.101# CHECK3-NEXT:  .lbss             NOBITS          0000000000204b07 000307 001201 00 WAl  0   0  1102# CHECK3-NEXT:  .lrodata          PROGBITS        0000000000206d08 000d08 000002 00  Al  0   0  1103# CHECK3-NEXT:  .ldata            PROGBITS        0000000000207d0a 000d0a 000002 00 WAl  0   0  1104# CHECK3-NEXT:  .ldata2           PROGBITS        0000000000207d0c 000d0c 000001 00 WAl  0   0  1105# CHECK3-NEXT:  .comment          PROGBITS        0000000000000000 000d0d {{.*}} 01  MS  0   0  1106 107# CHECK3:       Program Headers:108# CHECK3-NEXT:    Type  Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align109# CHECK3-NEXT:    PHDR  0x000040 0x0000000000200040 0x0000000000200040 {{.*}}   {{.*}}   R   0x8110# CHECK3-NEXT:    LOAD  0x000000 0x0000000000200000 0x0000000000200000 0x000302 0x000302 R   0x1000111# CHECK3-NEXT:    LOAD  0x000304 0x0000000000201304 0x0000000000201304 0x000001 0x000001 R E 0x1000112# CHECK3-NEXT:    LOAD  0x000305 0x0000000000202305 0x0000000000202305 0x000001 0x000cfb RW  0x1000113# CHECK3-NEXT:    LOAD  0x000306 0x0000000000203306 0x0000000000203306 0x000001 0x002a02 RW  0x1000114# CHECK3-NEXT:    LOAD  0x000d08 0x0000000000206d08 0x0000000000206d08 0x000002 0x000002 R   0x1000115# CHECK3-NEXT:    LOAD  0x000d0a 0x0000000000207d0a 0x0000000000207d0a 0x000003 0x000003 RW  0x1000116# CHECK3-NEXT:    TLS   0x000305 0x0000000000202305 0x0000000000202305 0x000001 0x000003 R   0x1117 118# CHECK3:       0000000000201304     0 NOTYPE  GLOBAL DEFAULT [[#]] (.text)   _start119# CHECK3-NEXT:  0000000000201305     0 NOTYPE  GLOBAL DEFAULT [[#]] (.text)   _etext120# CHECK3-NEXT:  0000000000203307     0 NOTYPE  GLOBAL DEFAULT [[#]] (.data)   _edata121# CHECK3-NEXT:  0000000000207d0d     0 NOTYPE  GLOBAL DEFAULT [[#]] (.ldata2) _end122 123# CHECK4:      .note      NOTE124# CHECK4-NEXT: .ltext     PROGBITS125# CHECK4-NEXT: .lrodata   PROGBITS126# CHECK4-NEXT: .rodata    PROGBITS127# CHECK4-NEXT: .text      PROGBITS128# CHECK4-NEXT: .data      PROGBITS129# CHECK4-NEXT: .bss       NOBITS130# CHECK4-NEXT: .ldata     PROGBITS131# CHECK4-NEXT: .lbss      NOBITS132# CHECK4-NEXT: .ltext_w   PROGBITS133# CHECK4-NEXT: .comment   PROGBITS134 135#--- a.s136.globl _start, _etext, _edata, _end137_start:138  ret139 140.section .note,"a",@note; .space 1141.section .rodata,"a",@progbits; .space 1142.section .data,"aw",@progbits; .space 1143.ifdef BSS144## .bss is large than one MAXPAGESIZE to test file offsets.145.section .bss,"aw",@nobits; .space 0x1800146.endif147.section .tdata,"awT",@progbits; .space 1148.section .tbss,"awT",@nobits; .space 1149.section .tbss.1,"awT",@nobits; .space 1150 151.section .lrodata,"al"; .space 1152.section .lrodata.1,"al"; .space 1153.section .ldata,"awl"; .space 1154## Input .ldata.rel.ro sections are placed in the output .ldata section.155.section .ldata.rel.ro,"awl"; .space 1156.ifdef BSS157.section .lbss,"awl",@nobits; .space 0x1200158## Input .lbss.rel.ro sections are placed in the output .lbss section.159.section .lbss.rel.ro,"awl",@nobits; .space 1160.endif161.section .ldata2,"awl"; .space 1162 163#--- b.lds164SECTIONS {165  . = 0x200300;166  .rodata : {}167  .text : {}168  .data : {}169  .bss : {}170  .ldata : { *(.ldata .ldata.*) }171  .ldata2 : {}172  .lbss : { *(.lbss .lbss.*) }173}174 175#--- c.s176## Test .ltext layout177.section .ltext,"axl",@progbits178.globl f179f:180  ret181 182.section .ltext_w,"awxl",@progbits183.globl g184g:185  ret186 187.section .text,"ax",@progbits188.globl h189h:190  ret191 192.section .note,"a",@note; .space 1193.section .rodata,"a",@progbits; .space 1194.section .data,"aw",@progbits; .space 1195.section .bss,"aw",@nobits; .space 1196.section .lrodata,"al"; .space 1197.section .ldata,"awl"; .space 1198.section .lbss,"awl",@nobits; .space 1199