Skip to content

Commit

Permalink
* sysdeps/unix/sysv/linux/i386/lowlevellock.h
Browse files Browse the repository at this point in the history
	(LLL_STUB_UNWIND_INFO_START, LLL_STUB_UNWIND_INFO_END,
	LLL_STUB_UNWIND_INFO_3, LLL_STUB_UNWIND_INFO_4): Define.
	(lll_mutex_lock, lll_robust_mutex_lock, lll_mutex_cond_lock,
	lll_robust_mutex_cond_lock, lll_mutex_timedlock,
	lll_robust_mutex_timedlock, lll_mutex_unlock,
	lll_robust_mutex_unlock, lll_lock, lll_unlock): Use them.
	Add _L_*_ symbols around the subsection.
	* sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Add unwind info.
	* sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S: Likewise.
  • Loading branch information
Jakub Jelinek committed Mar 6, 2006
1 parent 008a1ad commit 69fd14b
Show file tree
Hide file tree
Showing 4 changed files with 280 additions and 82 deletions.
14 changes: 14 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
2006-03-04 Jakub Jelinek <jakub@redhat.com>
Roland McGrath <roland@redhat.com>

* sysdeps/unix/sysv/linux/i386/lowlevellock.h
(LLL_STUB_UNWIND_INFO_START, LLL_STUB_UNWIND_INFO_END,
LLL_STUB_UNWIND_INFO_3, LLL_STUB_UNWIND_INFO_4): Define.
(lll_mutex_lock, lll_robust_mutex_lock, lll_mutex_cond_lock,
lll_robust_mutex_cond_lock, lll_mutex_timedlock,
lll_robust_mutex_timedlock, lll_mutex_unlock,
lll_robust_mutex_unlock, lll_lock, lll_unlock): Use them.
Add _L_*_ symbols around the subsection.
* sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Add unwind info.
* sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S: Likewise.

2006-03-03 Jakub Jelinek <jakub@redhat.com>
Roland McGrath <roland@redhat.com>

Expand Down
61 changes: 57 additions & 4 deletions nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
/* Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
Expand Down Expand Up @@ -41,9 +41,16 @@
.hidden __lll_mutex_lock_wait
.align 16
__lll_mutex_lock_wait:
cfi_startproc
pushl %edx
cfi_adjust_cfa_offset(4)
pushl %ebx
cfi_adjust_cfa_offset(4)
pushl %esi
cfi_adjust_cfa_offset(4)
cfi_offset(%edx, -8)
cfi_offset(%ebx, -12)
cfi_offset(%esi, -16)

movl $2, %edx
movl %ecx, %ebx
Expand All @@ -63,9 +70,16 @@ __lll_mutex_lock_wait:
jnz,pn 1b

popl %esi
cfi_adjust_cfa_offset(-4)
cfi_restore(%esi)
popl %ebx
cfi_adjust_cfa_offset(-4)
cfi_restore(%ebx)
popl %edx
cfi_adjust_cfa_offset(-4)
cfi_restore(%edx)
ret
cfi_endproc
.size __lll_mutex_lock_wait,.-__lll_mutex_lock_wait


Expand All @@ -75,17 +89,27 @@ __lll_mutex_lock_wait:
.hidden __lll_mutex_timedlock_wait
.align 16
__lll_mutex_timedlock_wait:
cfi_startproc
/* Check for a valid timeout value. */
cmpl $1000000000, 4(%edx)
jae 3f

pushl %edi
cfi_adjust_cfa_offset(4)
pushl %esi
cfi_adjust_cfa_offset(4)
pushl %ebx
cfi_adjust_cfa_offset(4)
pushl %ebp
cfi_adjust_cfa_offset(4)
cfi_offset(%edi, -8)
cfi_offset(%esi, -12)
cfi_offset(%ebx, -16)
cfi_offset(%ebp, -20)

/* Stack frame for the timespec and timeval structs. */
subl $8, %esp
cfi_adjust_cfa_offset(8)

movl %ecx, %ebp
movl %edx, %edi
Expand Down Expand Up @@ -140,12 +164,29 @@ __lll_mutex_timedlock_wait:
jnz 7f

6: addl $8, %esp
cfi_adjust_cfa_offset(-8)
popl %ebp
cfi_adjust_cfa_offset(-4)
cfi_restore(%ebp)
popl %ebx
cfi_adjust_cfa_offset(-4)
cfi_restore(%ebx)
popl %esi
cfi_adjust_cfa_offset(-4)
cfi_restore(%esi)
popl %edi
cfi_adjust_cfa_offset(-4)
cfi_restore(%edi)
ret

3: movl $EINVAL, %eax
ret

cfi_adjust_cfa_offset(24)
cfi_offset(%edi, -8)
cfi_offset(%esi, -12)
cfi_offset(%ebx, -16)
cfi_offset(%ebp, -20)
/* Check whether the time expired. */
7: cmpl $-ETIMEDOUT, %ecx
je 5f
Expand All @@ -157,11 +198,9 @@ __lll_mutex_timedlock_wait:
jz 6b
jmp 1b

3: movl $EINVAL, %eax
ret

5: movl $ETIMEDOUT, %eax
jmp 6b
cfi_endproc
.size __lll_mutex_timedlock_wait,.-__lll_mutex_timedlock_wait
#endif

Expand Down Expand Up @@ -200,9 +239,16 @@ lll_unlock_wake_cb:
.hidden __lll_mutex_unlock_wake
.align 16
__lll_mutex_unlock_wake:
cfi_startproc
pushl %ebx
cfi_adjust_cfa_offset(4)
pushl %ecx
cfi_adjust_cfa_offset(4)
pushl %edx
cfi_adjust_cfa_offset(4)
cfi_offset(%ebx, -8)
cfi_offset(%ecx, -12)
cfi_offset(%edx, -16)

movl %eax, %ebx
movl $0, (%eax)
Expand All @@ -212,9 +258,16 @@ __lll_mutex_unlock_wake:
ENTER_KERNEL

popl %edx
cfi_adjust_cfa_offset(-4)
cfi_restore(%edx)
popl %ecx
cfi_adjust_cfa_offset(-4)
cfi_restore(%ecx)
popl %ebx
cfi_adjust_cfa_offset(-4)
cfi_restore(%ebx)
ret
cfi_endproc
.size __lll_mutex_unlock_wake,.-__lll_mutex_unlock_wake


Expand Down
45 changes: 42 additions & 3 deletions nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,16 @@
.hidden __lll_robust_mutex_lock_wait
.align 16
__lll_robust_mutex_lock_wait:
cfi_startproc
pushl %edx
cfi_adjust_cfa_offset(4)
pushl %ebx
cfi_adjust_cfa_offset(4)
pushl %esi
cfi_adjust_cfa_offset(4)
cfi_offset(%edx, -8)
cfi_offset(%ebx, -12)
cfi_offset(%esi, -16)

movl %ecx, %ebx
xorl %esi, %esi /* No timeout. */
Expand Down Expand Up @@ -81,9 +88,16 @@ __lll_robust_mutex_lock_wait:
/* NB: %eax == 0 */

3: popl %esi
cfi_adjust_cfa_offset(-4)
cfi_restore(%esi)
popl %ebx
cfi_adjust_cfa_offset(-4)
cfi_restore(%ebx)
popl %edx
cfi_adjust_cfa_offset(-4)
cfi_restore(%edx)
ret
cfi_endproc
.size __lll_robust_mutex_lock_wait,.-__lll_robust_mutex_lock_wait


Expand All @@ -92,17 +106,27 @@ __lll_robust_mutex_lock_wait:
.hidden __lll_robust_mutex_timedlock_wait
.align 16
__lll_robust_mutex_timedlock_wait:
cfi_startproc
/* Check for a valid timeout value. */
cmpl $1000000000, 4(%edx)
jae 3f

pushl %edi
cfi_adjust_cfa_offset(4)
pushl %esi
cfi_adjust_cfa_offset(4)
pushl %ebx
cfi_adjust_cfa_offset(4)
pushl %ebp
cfi_adjust_cfa_offset(4)
cfi_offset(%edi, -8)
cfi_offset(%esi, -12)
cfi_offset(%ebx, -16)
cfi_offset(%ebp, -20)

/* Stack frame for the timespec and timeval structs. */
subl $12, %esp
cfi_adjust_cfa_offset(12)

movl %ecx, %ebp
movl %edx, %edi
Expand Down Expand Up @@ -170,19 +194,34 @@ __lll_robust_mutex_timedlock_wait:
jnz 7f

6: addl $12, %esp
cfi_adjust_cfa_offset(-12)
popl %ebp
cfi_adjust_cfa_offset(-4)
cfi_restore(%ebp)
popl %ebx
cfi_adjust_cfa_offset(-4)
cfi_restore(%ebx)
popl %esi
cfi_adjust_cfa_offset(-4)
cfi_restore(%esi)
popl %edi
cfi_adjust_cfa_offset(-4)
cfi_restore(%edi)
ret

3: movl $EINVAL, %eax
ret

cfi_adjust_cfa_offset(28)
cfi_offset(%edi, -8)
cfi_offset(%esi, -12)
cfi_offset(%ebx, -16)
cfi_offset(%ebp, -20)
/* Check whether the time expired. */
7: cmpl $-ETIMEDOUT, %ecx
jne 1b

8: movl $ETIMEDOUT, %eax
jmp 6b

3: movl $EINVAL, %eax
ret
cfi_endproc
.size __lll_robust_mutex_timedlock_wait,.-__lll_robust_mutex_timedlock_wait
Loading

0 comments on commit 69fd14b

Please sign in to comment.