diff options
author | Rich Felker <dalias@aerifal.cx> | 2014-06-19 02:50:45 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2014-06-19 02:50:45 -0400 |
commit | 4e0b4a5de735ecb241fadb1e15381c947e16e71f (patch) | |
tree | dbb3a6aa3356296b8e66b59ed3fe05e93ef5361c | |
parent | 880c479f0e3a798d826c1c91b38d33e2b3e36580 (diff) | |
download | musl-4e0b4a5de735ecb241fadb1e15381c947e16e71f.tar.gz musl-4e0b4a5de735ecb241fadb1e15381c947e16e71f.tar.xz musl-4e0b4a5de735ecb241fadb1e15381c947e16e71f.zip |
add tlsdesc support for i386
-rw-r--r-- | arch/i386/reloc.h | 2 | ||||
-rw-r--r-- | src/ldso/i386/tlsdesc.s | 27 |
2 files changed, 29 insertions, 0 deletions
diff --git a/arch/i386/reloc.h b/arch/i386/reloc.h index 12224b79..eaf5aae0 100644 --- a/arch/i386/reloc.h +++ b/arch/i386/reloc.h @@ -26,6 +26,8 @@ static int remap_rel(int type) return REL_TPOFF; case R_386_TLS_TPOFF32: return REL_TPOFF_NEG; + case R_386_TLS_DESC: + return REL_TLSDESC; } return 0; } 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 |