190 lines · plain
1// REQUIRES: x862// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t3// RUN: ld.lld %t -o %tout4// RUN: llvm-readobj -S -l --symbols %tout | FileCheck %s5// RUN: llvm-objdump --no-print-imm-hex -d %tout | FileCheck %s --check-prefix=DIS6 7/// Reject local-exec TLS relocations for -shared, regardless of the preemptibility.8// RUN: not ld.lld -shared %t -o /dev/null 2>&1 | FileCheck %s --check-prefix=ERR9// RUN: not ld.lld -shared -Bsymbolic %t -o /dev/null 2>&1 | FileCheck %s --check-prefix=ERR10 11// ERR: error: relocation R_X86_64_TPOFF32 against a cannot be used with -shared12// ERR-NEXT: defined in {{.*}}13// ERR-NEXT: referenced by {{.*}}:(.text+0x4)14// ERR-EMPTY:15// ERR-NEXT: error: relocation R_X86_64_TPOFF32 against b cannot be used with -shared16// ERR-NEXT: defined in {{.*}}17// ERR-NEXT: referenced by {{.*}}:(.text+0xc)18// ERR-EMPTY:19// ERR-NEXT: error: relocation R_X86_64_TPOFF32 against c cannot be used with -shared20// ERR-NEXT: defined in {{.*}}21// ERR-NEXT: referenced by {{.*}}:(.text+0x14)22// ERR-EMPTY:23// ERR-NEXT: error: relocation R_X86_64_TPOFF32 against d cannot be used with -shared24// ERR-NEXT: defined in {{.*}}25// ERR-NEXT: referenced by {{.*}}:(.text+0x1c)26 27.global _start28_start:29 movl %fs:a@tpoff, %eax30 movl %fs:b@tpoff, %eax31 movl %fs:c@tpoff, %eax32 movl %fs:d@tpoff, %eax33 34 .global a35 .section .tbss,"awT",@nobits36a:37 .long 038 39 .global b40 .section .tdata,"awT",@progbits41b:42 .long 143 44 .global c45 .section .thread_bss,"awT",@nobits46c:47 .long 048 49 .global d50 .section .thread_data,"awT",@progbits51d:52 .long 253 54// CHECK: Name: .tdata55// CHECK-NEXT: Type: SHT_PROGBITS56// CHECK-NEXT: Flags [57// CHECK-NEXT: SHF_ALLOC58// CHECK-NEXT: SHF_TLS59// CHECK-NEXT: SHF_WRITE60// CHECK-NEXT: ]61// CHECK-NEXT: Address: [[TDATA_ADDR:0x.*]]62// CHECK-NEXT: Offset:63// CHECK-NEXT: Size: 464// CHECK-NEXT: Link:65// CHECK-NEXT: Info:66// CHECK-NEXT: AddressAlignment:67// CHECK-NEXT: EntrySize:68// CHECK-NEXT: }69// CHECK-NEXT: Section {70// CHECK-NEXT: Index:71// CHECK-NEXT: Name: .thread_data72// CHECK-NEXT: Type: SHT_PROGBITS73// CHECK-NEXT: Flags [74// CHECK-NEXT: SHF_ALLOC75// CHECK-NEXT: SHF_TLS76// CHECK-NEXT: SHF_WRITE77// CHECK-NEXT: ]78// CHECK-NEXT: Address:79// CHECK-NEXT: Offset:80// CHECK-NEXT: Size: 481// CHECK-NEXT: Link:82// CHECK-NEXT: Info:83// CHECK-NEXT: AddressAlignment:84// CHECK-NEXT: EntrySize:85// CHECK-NEXT: }86// CHECK-NEXT: Section {87// CHECK-NEXT: Index:88// CHECK-NEXT: Name: .tbss89// CHECK-NEXT: Type: SHT_NOBITS90// CHECK-NEXT: Flags [91// CHECK-NEXT: SHF_ALLOC92// CHECK-NEXT: SHF_TLS93// CHECK-NEXT: SHF_WRITE94// CHECK-NEXT: ]95// CHECK-NEXT: Address: [[TBSS_ADDR:0x.*]]96// CHECK-NEXT: Offset:97// CHECK-NEXT: Size: 498// CHECK-NEXT: Link:99// CHECK-NEXT: Info:100// CHECK-NEXT: AddressAlignment:101// CHECK-NEXT: EntrySize:102// CHECK-NEXT: }103// CHECK-NEXT: Section {104// CHECK-NEXT: Index:105// CHECK-NEXT: Name: .thread_bss106// CHECK-NEXT: Type: SHT_NOBITS107// CHECK-NEXT: Flags [108// CHECK-NEXT: SHF_ALLOC109// CHECK-NEXT: SHF_TLS110// CHECK-NEXT: SHF_WRITE111// CHECK-NEXT: ]112 113// 0x2021F4 = TBSS_ADDR + 4114 115// CHECK-NEXT: Address: 0x2021F4116// CHECK-NEXT: Offset:117// CHECK-NEXT: Size: 4118// CHECK-NEXT: Link:119// CHECK-NEXT: Info:120// CHECK-NEXT: AddressAlignment:121// CHECK-NEXT: EntrySize:122// CHECK-NEXT: }123 124// CHECK: ProgramHeaders [125// CHECK: Type: PT_LOAD126// CHECK: Type: PT_LOAD127// CHECK: Type: PT_LOAD128// CHECK: FileSize: 8129// CHECK-NEXT: MemSize: [[#]]130// CHECK-NEXT: Flags [131// CHECK-NEXT: PF_R132// CHECK-NEXT: PF_W133// CHECK-NEXT: ]134// CHECK: Type: PT_TLS135// CHECK-NEXT: Offset:136// CHECK-NEXT: VirtualAddress: [[TDATA_ADDR]]137// CHECK-NEXT: PhysicalAddress: [[TDATA_ADDR]]138// CHECK-NEXT: FileSize: 8139// CHECK-NEXT: MemSize: 16140// CHECK-NEXT: Flags [141// CHECK-NEXT: PF_R142// CHECK-NEXT: ]143// CHECK-NEXT: Alignment:144// CHECK-NEXT: }145 146// CHECK: Symbols [147// CHECK: Name: a148// CHECK-NEXT: Value: 0x8149// CHECK-NEXT: Size:150// CHECK-NEXT: Binding: Global151// CHECK-NEXT: Type: TLS152// CHECK-NEXT: Other: 0153// CHECK-NEXT: Section: .tbss154// CHECK-NEXT: }155// CHECK-NEXT: Symbol {156// CHECK-NEXT: Name: b157// CHECK-NEXT: Value: 0x0158// CHECK-NEXT: Size:159// CHECK-NEXT: Binding: Global160// CHECK-NEXT: Type: TLS161// CHECK-NEXT: Other: 0162// CHECK-NEXT: Section: .tdata163// CHECK-NEXT: }164// CHECK-NEXT: Symbol {165// CHECK-NEXT: Name: c166// CHECK-NEXT: Value: 0xC167// CHECK-NEXT: Size:168// CHECK-NEXT: Binding: Global169// CHECK-NEXT: Type: TLS170// CHECK-NEXT: Other: 0171// CHECK-NEXT: Section: .thread_bss172// CHECK-NEXT: }173// CHECK-NEXT: Symbol {174// CHECK-NEXT: Name: d175// CHECK-NEXT: Value: 0x4176// CHECK-NEXT: Size:177// CHECK-NEXT: Binding: Global178// CHECK-NEXT: Type: TLS179// CHECK-NEXT: Other: 0180// CHECK-NEXT: Section: .thread_data181// CHECK-NEXT: }182 183// DIS: Disassembly of section .text:184// DIS-EMPTY:185// DIS-NEXT: <_start>:186// DIS-NEXT: movl %fs:-8, %eax187// DIS-NEXT: movl %fs:-16, %eax188// DIS-NEXT: movl %fs:-4, %eax189// DIS-NEXT: movl %fs:-12, %eax190