summaryrefslogtreecommitdiff
path: root/src/thread/i386
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2011-02-12 00:22:29 -0500
committerRich Felker <dalias@aerifal.cx>2011-02-12 00:22:29 -0500
commit0b44a0315b47dd8eced9f3b7f31580cf14bbfc01 (patch)
tree6eaef0d8a720fa3da580de87b647fff796fe80b3 /src/thread/i386
downloadmusl-0b44a0315b47dd8eced9f3b7f31580cf14bbfc01.tar.gz
initial check-in, version 0.5.0v0.5.0
Diffstat (limited to 'src/thread/i386')
-rw-r--r--src/thread/i386/__unmapself.s22
-rw-r--r--src/thread/i386/clone.s35
2 files changed, 57 insertions, 0 deletions
diff --git a/src/thread/i386/__unmapself.s b/src/thread/i386/__unmapself.s
new file mode 100644
index 00000000..5c674966
--- /dev/null
+++ b/src/thread/i386/__unmapself.s
@@ -0,0 +1,22 @@
+.text
+.global __unmapself
+.type __unmapself,%function
+__unmapself:
+ call 1f
+ .long -1
+ .long -1
+1: popl %ecx
+ xorl %ebx,%ebx
+ xorl %edx,%edx
+ movl $8,%esi
+ movl $175,%eax
+ int $128
+ movl $91,%eax
+ movl 4(%esp),%ebx
+ movl 8(%esp),%ecx
+ int $128
+ xorl %ebx,%ebx
+ movl $1,%eax
+ int $128
+
+.size __unmapself,.-__unmapself
diff --git a/src/thread/i386/clone.s b/src/thread/i386/clone.s
new file mode 100644
index 00000000..4f33366c
--- /dev/null
+++ b/src/thread/i386/clone.s
@@ -0,0 +1,35 @@
+.text
+.global __clone
+.type __clone,%function
+__clone:
+ movl 8(%esp),%ecx
+ andl $0xfffffff0, %ecx
+ subl $28,%ecx
+ movl 16(%esp),%eax
+ movl %eax,12(%ecx)
+ movl 4(%esp),%eax
+ movl %eax,8(%ecx)
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl $120,%eax
+ movl 12+12(%esp),%ebx
+ movl 20+12(%esp),%edx
+ movl 24+12(%esp),%esi
+ movl 28+12(%esp),%edi
+ int $128
+ popl %edi
+ popl %esi
+ popl %ebx
+ test %eax,%eax
+ jnz 1f
+ xorl %ebp,%ebp
+ call *%ebx
+ movl %eax, %ebx
+ movl $1, %eax
+ int $128
+1:
+ movl %eax, 4(%esp)
+ ret
+
+.size __clone,.-__clone