# Check for correct offsets when handling relocations for general dynamic TLS # access in executable binaries. # # The test case was generated from following code snippet: # # == test_tls.c == # # __thread int var; # void foo (int x) { # var = x + 1; # } # # == test_main.c == # #include # # extern __thread int var; # extern void foo (int); # # int main () { # foo (10); # return var; # } # # The objects are compiled with -fpic. #RUN: yaml2obj -format=elf %p/Inputs/general-dyn-tls-0.yaml -o=%t-t1.o #RUN: yaml2obj -format=elf %s -o %t-t0.o #RUN: lld -flavor old-gnu -target arm64 --noinhibit-exec -o %t.exe %t-t0.o %t-t1.o #RUN: llvm-readobj -relocations %t.exe | FileCheck %s -check-prefix=CHECKRELOCATION #RUN: llvm-objdump -s -t %t.exe | FileCheck %s #CHECKRELOCATION: Relocations [ #CHECKRELOCATION: .rela.dyn { #CHECKRELOCATION: 0x401090 R_AARCH64_TLSDESC var 0x0 #CHECKRELOCATION: } #CHECK: Contents of section .text: #CHECK: 400250 a8c31fb8 40018052 0b000094 000000b0 ....@..R........ # \_ adrp x0, 401000 <_DYNAMIC> (R_AARCH64_TLSDESC_ADR_PAGE21) #CHECK-NEXT: 400260 014840f9 00400291 20003fd6 49d03bd5 .H@..@.. .?.I.;. # \_ | | ldr x1, [x0,#144] (R_AARCH64_TLSDESC_LD64_LO12_NC) # \_ | add x0, x0, #0x90 (R_AARCH64_TLSDESC_ADD_LO12_NC) # \_ blr x1 (R_AARCH64_TLSDESC_CALL) --- FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB OSABI: ELFOSABI_GNU Type: ET_REL Machine: EM_AARCH64 Sections: - Name: .text Type: SHT_PROGBITS Flags: [ SHF_ALLOC, SHF_EXECINSTR ] AddressAlign: 0x0000000000000004 Content: FD7BBFA9FD030091FF4300D1E8031F2AA8C31FB8400180520000009400000090010040F90000009120003FD649D03BD5286960B8E003082ABF030091FD7BC1A8C0035FD6 - Name: .rela.text Type: SHT_RELA Link: .symtab AddressAlign: 0x0000000000000008 Info: .text Relocations: - Offset: 0x0000000000000018 Symbol: foo Type: R_AARCH64_CALL26 - Offset: 0x000000000000001C Symbol: var Type: R_AARCH64_TLSDESC_ADR_PAGE21 - Offset: 0x0000000000000020 Symbol: var Type: R_AARCH64_TLSDESC_LD64_LO12_NC - Offset: 0x0000000000000024 Symbol: var Type: R_AARCH64_TLSDESC_ADD_LO12_NC - Offset: 0x0000000000000028 Symbol: var Type: R_AARCH64_TLSDESC_CALL - Name: .data Type: SHT_PROGBITS Flags: [ SHF_WRITE, SHF_ALLOC ] AddressAlign: 0x0000000000000004 Content: '' - Name: .bss Type: SHT_NOBITS Flags: [ SHF_WRITE, SHF_ALLOC ] AddressAlign: 0x0000000000000004 - Name: .note.GNU-stack Type: SHT_PROGBITS AddressAlign: 0x0000000000000001 Content: '' Symbols: Local: - Name: '$x.0' Section: .text Global: - Name: foo - Name: main Type: STT_FUNC Section: .text Size: 0x0000000000000044 - Name: var Type: STT_TLS