* gendef: Throughout, remove lock from xchgl since it is implied.
(__ZN7_cygtls3popEv): Avoid potential (but probably nonexistent) race when clearing element after pop.
This commit is contained in:
parent
ad6319f01a
commit
3a7c5515b2
@ -1,3 +1,9 @@
|
|||||||
|
2010-07-18 Christopher Faylor <me+cygwin@cgf.cx>
|
||||||
|
|
||||||
|
* gendef: Throughout, remove lock from xchgl since it is implied.
|
||||||
|
(__ZN7_cygtls3popEv): Avoid potential (but probably nonexistent) race
|
||||||
|
when clearing element after pop.
|
||||||
|
|
||||||
2010-07-15 Corinna Vinschen <corinna@vinschen.de>
|
2010-07-15 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* wincap.cc (wincap_7): Set needs_count_in_si_lpres2 to false.
|
* wincap.cc (wincap_7): Set needs_count_in_si_lpres2 to false.
|
||||||
|
@ -122,11 +122,11 @@ __sigfe:
|
|||||||
pushl %edx
|
pushl %edx
|
||||||
movl %fs:4,%ebx # location of bottom of stack
|
movl %fs:4,%ebx # location of bottom of stack
|
||||||
1: movl \$1,%eax # potential lock value
|
1: movl \$1,%eax # potential lock value
|
||||||
lock xchgl %eax,$tls::stacklock(%ebx) # see if we can grab it
|
xchgl %eax,$tls::stacklock(%ebx) # see if we can grab it
|
||||||
movl %eax,$tls::spinning(%ebx) # flag if we are waiting for lock
|
movl %eax,$tls::spinning(%ebx) # flag if we are waiting for lock
|
||||||
testl %eax,%eax # it will be zero
|
testl %eax,%eax # it will be zero
|
||||||
jz 2f # if so
|
jz 2f # if so
|
||||||
call _yield # should be a short-time thing, so
|
call _yield # should be a short-time thing, so
|
||||||
jmp 1b # sleep and loop
|
jmp 1b # sleep and loop
|
||||||
2: movl \$4,%eax # have the lock, now increment the
|
2: movl \$4,%eax # have the lock, now increment the
|
||||||
xadd %eax,$tls::stackptr(%ebx) # stack pointer and get pointer
|
xadd %eax,$tls::stackptr(%ebx) # stack pointer and get pointer
|
||||||
@ -146,11 +146,11 @@ __sigbe: # return here after cygwin syscall
|
|||||||
pushl %eax # don't clobber
|
pushl %eax # don't clobber
|
||||||
1: movl %fs:4,%ebx # address of bottom of tls
|
1: movl %fs:4,%ebx # address of bottom of tls
|
||||||
movl \$1,%eax # potential lock value
|
movl \$1,%eax # potential lock value
|
||||||
lock xchgl %eax,$tls::stacklock(%ebx) # see if we can grab it
|
xchgl %eax,$tls::stacklock(%ebx) # see if we can grab it
|
||||||
movl %eax,$tls::spinning(%ebx) # flag if we are waiting for lock
|
movl %eax,$tls::spinning(%ebx) # flag if we are waiting for lock
|
||||||
testl %eax,%eax # it will be zero
|
testl %eax,%eax # it will be zero
|
||||||
jz 2f # if so
|
jz 2f # if so
|
||||||
call _yield # sleep
|
call _yield # sleep
|
||||||
jmp 1b # and loop
|
jmp 1b # and loop
|
||||||
2: movl \$-4,%eax # now decrement aux stack
|
2: movl \$-4,%eax # now decrement aux stack
|
||||||
xadd %eax,$tls::stackptr(%ebx) # and get pointer
|
xadd %eax,$tls::stackptr(%ebx) # and get pointer
|
||||||
@ -171,7 +171,7 @@ _sigreturn:
|
|||||||
call _set_process_mask\@4
|
call _set_process_mask\@4
|
||||||
|
|
||||||
1: movl \$1,%eax # potential lock value
|
1: movl \$1,%eax # potential lock value
|
||||||
lock xchgl %eax,$tls::stacklock(%ebx) # see if we can grab it
|
xchgl %eax,$tls::stacklock(%ebx) # see if we can grab it
|
||||||
movl %eax,$tls::spinning(%ebx) # flag if we are waiting for lock
|
movl %eax,$tls::spinning(%ebx) # flag if we are waiting for lock
|
||||||
testl %eax,%eax # it will be zero
|
testl %eax,%eax # it will be zero
|
||||||
jz 2f # if so
|
jz 2f # if so
|
||||||
@ -237,13 +237,9 @@ _sigdelayed:
|
|||||||
.global __ZN7_cygtls3popEv
|
.global __ZN7_cygtls3popEv
|
||||||
__ZN7_cygtls3popEv:
|
__ZN7_cygtls3popEv:
|
||||||
1: pushl %ebx
|
1: pushl %ebx
|
||||||
pushl %edx # FIXME: needed?
|
movl %eax,%ebx # this
|
||||||
movl %eax,%ebx
|
movl \$-4,%eax
|
||||||
movl \$-4,%edx
|
xadd %eax,$tls::pstackptr(%ebx)
|
||||||
xadd %edx,$tls::pstackptr(%ebx)
|
|
||||||
xorl %eax,%eax
|
|
||||||
xchgl %eax,-4(%edx)
|
|
||||||
popl %edx # FIXME: needed?
|
|
||||||
popl %ebx
|
popl %ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -252,7 +248,7 @@ __ZN7_cygtls4lockEv:
|
|||||||
pushl %ebx
|
pushl %ebx
|
||||||
movl %eax,%ebx
|
movl %eax,%ebx
|
||||||
1: movl \$1,%eax
|
1: movl \$1,%eax
|
||||||
lock xchgl %eax,$tls::pstacklock(%ebx)
|
xchgl %eax,$tls::pstacklock(%ebx)
|
||||||
testl %eax,%eax
|
testl %eax,%eax
|
||||||
jz 2f
|
jz 2f
|
||||||
call _yield
|
call _yield
|
||||||
@ -275,7 +271,7 @@ stabilize_sig_stack:
|
|||||||
movl %fs:4,%ebx
|
movl %fs:4,%ebx
|
||||||
incl $tls::incyg(%ebx)
|
incl $tls::incyg(%ebx)
|
||||||
1: movl \$1,%eax
|
1: movl \$1,%eax
|
||||||
lock xchgl %eax,$tls::stacklock(%ebx)
|
xchgl %eax,$tls::stacklock(%ebx)
|
||||||
movl %eax,$tls::spinning(%ebx) # flag if we are waiting for lock
|
movl %eax,$tls::spinning(%ebx) # flag if we are waiting for lock
|
||||||
testl %eax,%eax
|
testl %eax,%eax
|
||||||
jz 2f
|
jz 2f
|
||||||
|
Loading…
Reference in New Issue
Block a user