| .syntax unified |
| |
| .text |
| .global __tlsdesc_static |
| .hidden __tlsdesc_static |
| .type __tlsdesc_static,%function |
| __tlsdesc_static: |
| ldr r0,[r0] |
| bx lr |
| |
| .global __tlsdesc_dynamic |
| .hidden __tlsdesc_dynamic |
| .type __tlsdesc_dynamic,%function |
| __tlsdesc_dynamic: |
| push {r2,r3,ip,lr} |
| ldr r1,[r0] |
| ldr r2,[r1,#4] // r2 = offset |
| ldr r1,[r1] // r1 = modid |
| |
| #if ((__ARM_ARCH_6K__ || __ARM_ARCH_6KZ__ || __ARM_ARCH_6ZK__) && !__thumb__) \ |
| || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ || __ARM_ARCH >= 7 |
| mrc p15,0,r0,c13,c0,3 |
| #else |
| ldr r0,1f |
| add r0,r0,pc |
| ldr r0,[r0] |
| 2: |
| #if __ARM_ARCH >= 5 |
| blx r0 // r0 = tp |
| #else |
| #if __thumb__ |
| add lr,pc,#1 |
| #else |
| mov lr,pc |
| #endif |
| bx r0 |
| #endif |
| #endif |
| ldr r3,[r0,#-4] // r3 = dtv |
| ldr ip,[r3,r1,LSL #2] |
| sub r0,ip,r0 |
| add r0,r0,r2 // r0 = r3[r1]-r0+r2 |
| #if __ARM_ARCH >= 5 |
| pop {r2,r3,ip,pc} |
| #else |
| pop {r2,r3,ip,lr} |
| bx lr |
| #endif |
| |
| #if ((__ARM_ARCH_6K__ || __ARM_ARCH_6KZ__ || __ARM_ARCH_6ZK__) && !__thumb__) \ |
| || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ || __ARM_ARCH >= 7 |
| #else |
| .align 2 |
| 1: .word __a_gettp_ptr - 2b |
| #endif |