summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/gendef
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/gendef')
-rwxr-xr-xwinsup/cygwin/gendef78
1 files changed, 59 insertions, 19 deletions
diff --git a/winsup/cygwin/gendef b/winsup/cygwin/gendef
index d317eeacd..2457314b2 100755
--- a/winsup/cygwin/gendef
+++ b/winsup/cygwin/gendef
@@ -88,40 +88,79 @@ EOF
if (!$main::first++) {
$res = <<EOF . longjmp () . $res;
.text
- .global __sigbe
- .global _sigreturn
- .global _sigdelayed
.stabs "_sigfe:F(0,1)",36,0,0,__sigbe
__sigfe:
pushl %edx
- movl %fs:4,%eax
- movl \$4,%edx
- xadd %edx,$tls::stackptr(%eax)
- leal __sigbe,%eax
- xchg %eax,8(%esp)
- movl %eax,(%edx)
+ movl %fs:4,%edx
+1: movl \$1,%eax
+ lock cmpxchg %eax,$tls::stacklock(%edx)
+ jne 2f
+ xorl %eax,%eax
+ call _low_priority_sleep
+ jmp 1b
+2: movl \$4,%eax
+ xadd %eax,$tls::stackptr(%edx)
+ decl $tls::stacklock(%edx)
+ leal __sigbe,%edx
+ xchg %edx,8(%esp)
+ movl %edx,(%eax)
popl %edx
ret
+ .global __sigbe
.stabs "_sigbe:F(0,1)",36,0,0,__sigbe
__sigbe:
- pushl %eax
pushl %edx
- movl \$-4,%edx
-1: movl %fs:4,%eax
- xadd %edx,$tls::stackptr(%eax)
+ pushl %eax
+ movl %fs:4,%edx
+1: movl \$1,%eax
+ lock cmpxchg %eax,$tls::stacklock(%edx)
+ jne 2f
xorl %eax,%eax
- lock xchg %eax,-4(%edx)
- testl %eax,%eax
- jnz 2f
call _low_priority_sleep
- xorl %edx,%edx
jmp 1b
-2: xchg %eax,4(%esp)
- popl %edx
+2: movl \$-4,%eax
+ xadd %eax,$tls::stackptr(%edx)
+ xchg %edx,-4(%eax)
+ xchg %edx,4(%esp)
+ popl %eax
+ ret
+
+ .global __ZN11_threadinfo3popEv
+__ZN11_threadinfo3popEv:
+1: pushl %ebx
+ movl %eax,%edx
+ movl \$-4,%ebx
+ xadd %ebx,$tls::pstackptr(%edx)
+ xorl %eax,%eax
+ xchg %eax,-4(%ebx)
+ decl $tls::pstacklock(%edx)
+ popl %ebx
+ ret
+
+ .global __ZN11_threadinfo4lockEi
+__ZN11_threadinfo4lockEi:
+ pushl %ebx
+ movl %eax,%ebx
+1: movl \$1,%eax
+ lock cmpxchg %eax,$tls::pstacklock(%ebx)
+ jne 2f
+ cmpl %edx,%edx
+ jz 2f
+ xorl %eax,%eax
+ call _low_priority_sleep
+ jmp 1b
+2: xorl \$1,%eax
+ popl %ebx
ret
+ .global __ZN11_threadinfo6unlockEv
+__ZN11_threadinfo6unlockEv:
+ decl $tls::pstacklock(%eax)
+ ret
+
+ .global _sigreturn
.stabs "sigreturn:F(0,1)",36,0,0,_sigreturn
_sigreturn:
addl \$4,%esp # Remove argument
@@ -147,6 +186,7 @@ _sigreturn:
popl %ebp
jmp __sigbe
+ .global _sigdelayed
.stabs "sigdelayed:F(0,1)",36,0,0,_sigdelayed
_sigdelayed:
pushl %ebp