forked from OSchip/llvm-project
104 lines
3.6 KiB
Plaintext
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
|