diff options
Diffstat (limited to 'src/ldso')
| -rw-r--r-- | src/ldso/i386/tlsdesc.s | 27 | 
1 files changed, 27 insertions, 0 deletions
| diff --git a/src/ldso/i386/tlsdesc.s b/src/ldso/i386/tlsdesc.s new file mode 100644 index 00000000..3ac61297 --- /dev/null +++ b/src/ldso/i386/tlsdesc.s @@ -0,0 +1,27 @@ +.text +.global __tlsdesc_static +.type __tlsdesc_static,@function +__tlsdesc_static: +	mov 4(%eax),%eax +	ret + +.global __tlsdesc_dynamic +.type __tlsdesc_dynamic,@function +__tlsdesc_dynamic: +	mov 4(%eax),%eax +	push %edx +	mov %gs:4,%edx +	push %ecx +	mov (%eax),%ecx +	cmp %ecx,(%edx) +	jc 1f +	mov 4(%eax),%eax +	add (%edx,%ecx,4),%eax +2:	pop %ecx +	sub %gs:0,%eax +	pop %edx +	ret +1:	push %eax +	call __tls_get_addr +	pop %ecx +	jmp 2b | 
