1*c9945492SAndroid Build Coastguard Worker.syntax unified 2*c9945492SAndroid Build Coastguard Worker 3*c9945492SAndroid Build Coastguard Worker.text 4*c9945492SAndroid Build Coastguard Worker.global __tlsdesc_static 5*c9945492SAndroid Build Coastguard Worker.hidden __tlsdesc_static 6*c9945492SAndroid Build Coastguard Worker.type __tlsdesc_static,%function 7*c9945492SAndroid Build Coastguard Worker__tlsdesc_static: 8*c9945492SAndroid Build Coastguard Worker ldr r0,[r0] 9*c9945492SAndroid Build Coastguard Worker bx lr 10*c9945492SAndroid Build Coastguard Worker 11*c9945492SAndroid Build Coastguard Worker.global __tlsdesc_dynamic 12*c9945492SAndroid Build Coastguard Worker.hidden __tlsdesc_dynamic 13*c9945492SAndroid Build Coastguard Worker.type __tlsdesc_dynamic,%function 14*c9945492SAndroid Build Coastguard Worker__tlsdesc_dynamic: 15*c9945492SAndroid Build Coastguard Worker push {r2,r3,ip,lr} 16*c9945492SAndroid Build Coastguard Worker ldr r1,[r0] 17*c9945492SAndroid Build Coastguard Worker ldr r2,[r1,#4] // r2 = offset 18*c9945492SAndroid Build Coastguard Worker ldr r1,[r1] // r1 = modid 19*c9945492SAndroid Build Coastguard Worker 20*c9945492SAndroid Build Coastguard Worker#if ((__ARM_ARCH_6K__ || __ARM_ARCH_6KZ__ || __ARM_ARCH_6ZK__) && !__thumb__) \ 21*c9945492SAndroid Build Coastguard Worker || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ || __ARM_ARCH >= 7 22*c9945492SAndroid Build Coastguard Worker mrc p15,0,r0,c13,c0,3 23*c9945492SAndroid Build Coastguard Worker#else 24*c9945492SAndroid Build Coastguard Worker ldr r0,1f 25*c9945492SAndroid Build Coastguard Worker add r0,r0,pc 26*c9945492SAndroid Build Coastguard Worker ldr r0,[r0] 27*c9945492SAndroid Build Coastguard Worker2: 28*c9945492SAndroid Build Coastguard Worker#if __ARM_ARCH >= 5 29*c9945492SAndroid Build Coastguard Worker blx r0 // r0 = tp 30*c9945492SAndroid Build Coastguard Worker#else 31*c9945492SAndroid Build Coastguard Worker#if __thumb__ 32*c9945492SAndroid Build Coastguard Worker add lr,pc,#1 33*c9945492SAndroid Build Coastguard Worker#else 34*c9945492SAndroid Build Coastguard Worker mov lr,pc 35*c9945492SAndroid Build Coastguard Worker#endif 36*c9945492SAndroid Build Coastguard Worker bx r0 37*c9945492SAndroid Build Coastguard Worker#endif 38*c9945492SAndroid Build Coastguard Worker#endif 39*c9945492SAndroid Build Coastguard Worker ldr r3,[r0,#-4] // r3 = dtv 40*c9945492SAndroid Build Coastguard Worker ldr ip,[r3,r1,LSL #2] 41*c9945492SAndroid Build Coastguard Worker sub r0,ip,r0 42*c9945492SAndroid Build Coastguard Worker add r0,r0,r2 // r0 = r3[r1]-r0+r2 43*c9945492SAndroid Build Coastguard Worker#if __ARM_ARCH >= 5 44*c9945492SAndroid Build Coastguard Worker pop {r2,r3,ip,pc} 45*c9945492SAndroid Build Coastguard Worker#else 46*c9945492SAndroid Build Coastguard Worker pop {r2,r3,ip,lr} 47*c9945492SAndroid Build Coastguard Worker bx lr 48*c9945492SAndroid Build Coastguard Worker#endif 49*c9945492SAndroid Build Coastguard Worker 50*c9945492SAndroid Build Coastguard Worker#if ((__ARM_ARCH_6K__ || __ARM_ARCH_6KZ__ || __ARM_ARCH_6ZK__) && !__thumb__) \ 51*c9945492SAndroid Build Coastguard Worker || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ || __ARM_ARCH >= 7 52*c9945492SAndroid Build Coastguard Worker#else 53*c9945492SAndroid Build Coastguard Worker .align 2 54*c9945492SAndroid Build Coastguard Worker1: .word __a_gettp_ptr - 2b 55*c9945492SAndroid Build Coastguard Worker#endif 56