75 lines · plain
1// REQUIRES: arm2// RUN: llvm-mc %s -o %t.o -filetype=obj -triple=armv7a-linux-gnueabi3// RUN: ld.lld %t.o -o %t.so -shared4// RUN: llvm-readobj -S --dyn-relocations %t.so | FileCheck --check-prefix=SEC %s5// RUN: llvm-objdump -d --triple=armv7a-linux-gnueabi %t.so | FileCheck %s6// RUN: ld.lld %t.o -o %t7// RUN: llvm-objdump -d --triple=armv7a-linux-gnueabi %t | FileCheck --check-prefix=CHECK-EXE %s8 9/// Test the handling of the local-dynamic TLS model. Dynamic loader finds10/// module index R_ARM_TLS_DTPMOD32. The offset in the next GOT slot is 011/// The R_ARM_TLS_LDO is the offset of the variable within the TLS block.12 .global __tls_get_addr13 .text14 .p2align 215 .global _start16 .syntax unified17 .arm18 .type _start, %function19_start:20.L0:21 nop22 23 .word x(tlsldm) + (. - .L0 - 8)24 .word x(tlsldo)25 .word y(tlsldo)26 27 .section .tbss,"awT",%nobits28 .p2align 229 .type y, %object30y:31 .space 432 .section .tdata,"awT",%progbits33 .p2align 234 .type x, %object35x:36 .word 1037 38// SEC: Name: .tdata39// SEC-NEXT: Type: SHT_PROGBITS40// SEC-NEXT: Flags [41// SEC-NEXT: SHF_ALLOC42// SEC-NEXT: SHF_TLS43// SEC-NEXT: SHF_WRITE44// SEC-NEXT: ]45// SEC-NEXT: Address: 0x201D046// SEC: Size: 447// SEC: Name: .tbss48// SEC-NEXT: Type: SHT_NOBITS (0x8)49// SEC-NEXT: Flags [50// SEC-NEXT: SHF_ALLOC51// SEC-NEXT: SHF_TLS52// SEC-NEXT: SHF_WRITE53// SEC-NEXT: ]54// SEC-NEXT: Address: 0x201D455// SEC: Size: 456 57// SEC: Dynamic Relocations {58// SEC-NEXT: 0x20224 R_ARM_TLS_DTPMOD32 -59 60// CHECK: Disassembly of section .text:61// CHECK-EMPTY:62// CHECK-NEXT: <_start>:63// CHECK-NEXT: 101c0: e320f000 nop64 65/// (0x20224 - 0x101c4) + (0x101c4 - 0x101c0 - 8) = 0x1005c66// CHECK: 101c4: 5c 00 01 0067// CHECK-NEXT: 101c8: 00 00 00 0068// CHECK-NEXT: 101cc: 04 00 00 0069 70// CHECK-EXE: <_start>:71// CHECK-EXE-NEXT: 20114: e320f000 nop72// CHECK-EXE: 20118: 0c 00 01 0073// CHECK-EXE-NEXT: 2011c: 00 00 00 0074// CHECK-EXE-NEXT: 20120: 04 00 00 0075