| // REQUIRES: x86 |
| // RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t |
| // RUN: ld.lld %t -o %tout |
| // RUN: llvm-readobj -s %tout | FileCheck %s |
| // RUN: echo "SECTIONS { \ |
| // RUN: . = 0x201000; \ |
| // RUN: .text : { *(.text) } \ |
| // RUN: . = 0x202000; \ |
| // RUN: .tdata : { *(.tdata) } \ |
| // RUN: .tbss : { *(.tbss) } \ |
| // RUN: .data.rel.ro : { *(.data.rel.ro) } \ |
| // RUN: }" > %t.script |
| // RUN: ld.lld -T %t.script %t -o %tout2 |
| // RUN: echo SCRIPT |
| // RUN: llvm-readobj -s %tout2 | FileCheck %s |
| .global _start |
| _start: |
| retq |
| |
| .section .tdata,"awT",@progbits |
| .align 4 |
| .long 42 |
| |
| .section .tbss,"awT",@nobits |
| .align 16 |
| .zero 16 |
| |
| .section .data.rel.ro,"aw",@progbits |
| .long 1 |
| |
| |
| // Test that .tbss doesn't show up in the offset or in the address. If this |
| // gets out of sync what we get a runtime is different from what the section |
| // table says. |
| |
| // CHECK: Name: .tdata |
| // CHECK-NEXT: Type: SHT_PROGBITS |
| // CHECK-NEXT: Flags [ |
| // CHECK-NEXT: SHF_ALLOC |
| // CHECK-NEXT: SHF_TLS |
| // CHECK-NEXT: SHF_WRITE |
| // CHECK-NEXT: ] |
| // CHECK-NEXT: Address: 0x202000 |
| // CHECK-NEXT: Offset: 0x2000 |
| // CHECK-NEXT: Size: 4 |
| |
| // CHECK: Name: .tbss |
| // CHECK-NEXT: Type: SHT_NOBITS |
| // CHECK-NEXT: Flags [ |
| // CHECK-NEXT: SHF_ALLOC |
| // CHECK-NEXT: SHF_TLS |
| // CHECK-NEXT: SHF_WRITE |
| // CHECK-NEXT: ] |
| // CHECK-NEXT: Address: 0x202010 |
| // CHECK-NEXT: Offset: 0x2004 |
| // CHECK-NEXT: Size: 16 |
| |
| // CHECK: Name: .data.rel.ro |
| // CHECK-NEXT: Type: SHT_PROGBITS |
| // CHECK-NEXT: Flags [ |
| // CHECK-NEXT: SHF_ALLOC |
| // CHECK-NEXT: SHF_WRITE |
| // CHECK-NEXT: ] |
| // CHECK-NEXT: Address: 0x202004 |
| // CHECK-NEXT: Offset: 0x2004 |
| // CHECK-NEXT: Size: 4 |