Index: fusl/src/ldso/i386/tlsdesc.s |
diff --git a/fusl/src/ldso/i386/tlsdesc.s b/fusl/src/ldso/i386/tlsdesc.s |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4a553bce11ee1457d284a00cf7ecdf3a40dc6bba |
--- /dev/null |
+++ b/fusl/src/ldso/i386/tlsdesc.s |
@@ -0,0 +1,31 @@ |
+.text |
+.global __tlsdesc_static |
+.hidden __tlsdesc_static |
+.type __tlsdesc_static,@function |
+__tlsdesc_static: |
+ mov 4(%eax),%eax |
+ ret |
+ |
+.hidden __tls_get_new |
+ |
+.global __tlsdesc_dynamic |
+.hidden __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_new |
+ pop %ecx |
+ jmp 2b |