llvm-project/lld/test/old-elf/AArch64/general-dyn-tls-0.test

104 lines
3.6 KiB
Plaintext

# 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 <stdio.h>
#
# 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