add tlsdesc support for x86_64

This commit is contained in:
Rich Felker 2014-06-19 15:26:04 -04:00
parent 5ba238e1e4
commit 39201d07e4
2 changed files with 42 additions and 0 deletions

View File

@ -25,6 +25,8 @@ static int remap_rel(int type)
return REL_DTPOFF;
case R_X86_64_TPOFF64:
return REL_TPOFF;
case R_X86_64_TLSDESC:
return REL_TLSDESC;
}
return 0;
}

40
src/ldso/x86_64/tlsdesc.s Normal file
View File

@ -0,0 +1,40 @@
.text
.global __tlsdesc_static
.type __tlsdesc_static,@function
__tlsdesc_static:
mov 8(%rax),%rax
ret
.global __tlsdesc_dynamic
.type __tlsdesc_dynamic,@function
__tlsdesc_dynamic:
mov 8(%rax),%rax
push %rdx
mov %fs:8,%rdx
push %rcx
mov (%rax),%rcx
cmp %rcx,(%rdx)
jc 1f
mov 8(%rax),%rax
add (%rdx,%rcx,8),%rax
2: pop %rcx
sub %fs:0,%rax
pop %rdx
ret
1: push %rdi
push %rdi
push %rsi
push %r8
push %r9
push %r10
push %r11
mov %rax,%rdi
call __tls_get_addr
pop %r11
pop %r10
pop %r9
pop %r8
pop %rsi
pop %rdi
pop %rdi
jmp 2b