| # Test that GOTTPOFF reloc generates an outstanding R_X86_64_TPOFF64 |
| # to be processed at startup time. |
| # Reference: Ulrich Drepper's "ELF Handling for Thread-Local storage" |
| |
| #RUN: yaml2obj -format=elf %s -o %t.o |
| #RUN: lld -flavor old-gnu -target x86_64 %t.o -o %t -e=main --defsym=__tls_get_addr=0 |
| #RUN: llvm-readobj -r %t | FileCheck %s |
| # |
| #CHECK: Section (5) .rela.dyn { |
| #CHECK: 0x401098 R_X86_64_TPOFF64 tls2 0x0 |
| #CHECK: } |
| |
| --- |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| OSABI: ELFOSABI_FREEBSD |
| Type: ET_REL |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .text |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC, SHF_EXECINSTR ] |
| AddressAlign: 0x0000000000000010 |
| Content: E819000000640304250000000064030425000000006403042500000000C3488B0500000000648B00C3488D3D00000000E800000000488D8000000000C3 |
| - Name: .rela.text |
| Type: SHT_RELA |
| Link: .symtab |
| AddressAlign: 0x0000000000000008 |
| Info: .text |
| Relocations: |
| - Offset: 0x0000000000000009 |
| Symbol: tls1 |
| Type: R_X86_64_TPOFF32 |
| - Offset: 0x0000000000000011 |
| Symbol: tls0 |
| Type: R_X86_64_TPOFF32 |
| - Offset: 0x0000000000000019 |
| Symbol: tls2 |
| Type: R_X86_64_TPOFF32 |
| - Offset: 0x0000000000000021 |
| Symbol: tls2 |
| Type: R_X86_64_GOTTPOFF |
| Addend: -4 |
| - Offset: 0x000000000000002C |
| Symbol: tls0 |
| Type: R_X86_64_TLSLD |
| Addend: -4 |
| - Offset: 0x0000000000000031 |
| Symbol: __tls_get_addr |
| Type: R_X86_64_PLT32 |
| Addend: -4 |
| - Offset: 0x0000000000000038 |
| Symbol: tls0 |
| Type: R_X86_64_DTPOFF32 |
| - 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 |
| Size: 8 |
| - Name: .tbss |
| Type: SHT_NOBITS |
| Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ] |
| AddressAlign: 0x0000000000000004 |
| - Name: .tdata |
| Type: SHT_PROGBITS |
| Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ] |
| AddressAlign: 0x0000000000000004 |
| Content: '01000000' |
| Symbols: |
| Local: |
| - Name: .text |
| Type: STT_SECTION |
| Section: .text |
| - Name: .data |
| Type: STT_SECTION |
| Section: .data |
| - Name: .bss |
| Type: STT_SECTION |
| Section: .bss |
| - Name: .tbss |
| Type: STT_SECTION |
| Section: .tbss |
| - Name: .tdata |
| Type: STT_SECTION |
| Section: .tdata |
| Global: |
| - Name: GOTTPOFF |
| Type: STT_FUNC |
| Section: .text |
| Value: 0x000000000000001E |
| - Name: TLSLD |
| Type: STT_FUNC |
| Section: .text |
| Value: 0x0000000000000029 |
| - Name: main |
| Type: STT_FUNC |
| Section: .text |
| - Name: tls0 |
| Type: STT_TLS |
| Section: .tbss |
| Size: 0x0000000000000004 |
| - Name: tls1 |
| Type: STT_TLS |
| Section: .tbss |
| Value: 0x0000000000000004 |
| Size: 0x0000000000000004 |
| - Name: tls2 |
| Type: STT_TLS |
| Section: .tdata |
| Size: 0x0000000000000004 |
| - Name: _GLOBAL_OFFSET_TABLE_ |
| - Name: __tls_get_addr |
| ... |