⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pthread_cond_timedwait.s

📁 glibc 2.9,最新版的C语言库函数
💻 S
📖 第 1 页 / 共 2 页
字号:
	/* The initial unlocking of the mutex failed.  */16:.LSbl3:	LOCK#if cond_lock == 0	subl	$1, (%ebx)#else	subl	$1, cond_lock(%ebx)#endif	jne	18b	movl	%eax, %esi#if cond_lock == 0	movl	%ebx, %eax#else	leal	cond_lock(%ebx), %eax#endif#if (LLL_SHARED-LLL_PRIVATE) > 255	xorl	%ecx, %ecx#endif	cmpl	$-1, dep_mutex(%ebx)	setne	%cl	subl	$1, %ecx	andl	$(LLL_SHARED-LLL_PRIVATE), %ecx#if LLL_PRIVATE != 0	addl	$LLL_PRIVATE, %ecx#endif	call	__lll_unlock_wake	movl	%esi, %eax	jmp	18b#if defined __NR_clock_gettime && !defined __ASSUME_POSIX_TIMERS	/* clock_gettime not available.  */.LSbl4:19:	leal	4(%esp), %ebx	xorl	%ecx, %ecx	movl	$__NR_gettimeofday, %eax	ENTER_KERNEL	movl	%edx, %ebx	/* Compute relative timeout.  */	movl	8(%esp), %eax	movl	$1000, %edx	mul	%edx		/* Milli seconds to nano seconds.  */	movl	(%ebp), %ecx	movl	4(%ebp), %edx	subl	4(%esp), %ecx	subl	%eax, %edx	jns	20f	addl	$1000000000, %edx	subl	$1, %ecx20:	testl	%ecx, %ecx	movl	$-ETIMEDOUT, %esi	js	6b	jmp	21b#endif	.size	__pthread_cond_timedwait, .-__pthread_cond_timedwaitversioned_symbol (libpthread, __pthread_cond_timedwait, pthread_cond_timedwait,		  GLIBC_2_3_2)	.type	__condvar_tw_cleanup2, @function__condvar_tw_cleanup2:	subl	$cond_futex, %ebx.LSbl5:	.size	__condvar_tw_cleanup2, .-__condvar_tw_cleanup2	.type	__condvar_tw_cleanup, @function__condvar_tw_cleanup:	movl	%eax, %esi	/* Get internal lock.  */	movl	$1, %edx	xorl	%eax, %eax	LOCK#if cond_lock == 0	cmpxchgl %edx, (%ebx)#else	cmpxchgl %edx, cond_lock(%ebx)#endif	jz	1f#if cond_lock == 0	movl	%ebx, %edx#else	leal	cond_lock(%ebx), %edx#endif#if (LLL_SHARED-LLL_PRIVATE) > 255	xorl	%ecx, %ecx#endif	cmpl	$-1, dep_mutex(%ebx)	setne	%cl	subl	$1, %ecx	andl	$(LLL_SHARED-LLL_PRIVATE), %ecx#if LLL_PRIVATE != 0	addl	$LLL_PRIVATE, %ecx#endif	call	__lll_lock_wait1:	movl	broadcast_seq(%ebx), %eax	cmpl	20(%esp), %eax	jne	3f	/* We increment the wakeup_seq counter only if it is lower than	   total_seq.  If this is not the case the thread was woken and	   then canceled.  In this case we ignore the signal.  */	movl	total_seq(%ebx), %eax	movl	total_seq+4(%ebx), %edi	cmpl	wakeup_seq+4(%ebx), %edi	jb	6f	ja	7f	cmpl	wakeup_seq(%ebx), %eax	jbe	7f6:	addl	$1, wakeup_seq(%ebx)	adcl	$0, wakeup_seq+4(%ebx)	addl	$1, cond_futex(%ebx)7:	addl	$1, woken_seq(%ebx)	adcl	$0, woken_seq+4(%ebx)3:	subl	$(1 << nwaiters_shift), cond_nwaiters(%ebx)	/* Wake up a thread which wants to destroy the condvar object.  */	xorl	%edi, %edi	movl	total_seq(%ebx), %eax	andl	total_seq+4(%ebx), %eax	cmpl	$0xffffffff, %eax	jne	4f	movl	cond_nwaiters(%ebx), %eax	andl	$~((1 << nwaiters_shift) - 1), %eax	jne	4f	addl	$cond_nwaiters, %ebx	movl	$SYS_futex, %eax#if FUTEX_PRIVATE_FLAG > 255	xorl	%ecx, %ecx#endif	cmpl	$-1, dep_mutex-cond_nwaiters(%ebx)	sete	%cl	subl	$1, %ecx#ifdef __ASSUME_PRIVATE_FUTEX	andl	$FUTEX_PRIVATE_FLAG, %ecx#else	andl	%gs:PRIVATE_FUTEX, %ecx#endif	addl	$FUTEX_WAKE, %ecx	movl	$1, %edx	ENTER_KERNEL	subl	$cond_nwaiters, %ebx	movl	$1, %edi4:	LOCK#if cond_lock == 0	subl	$1, (%ebx)#else	subl	$1, cond_lock(%ebx)#endif	je	2f#if cond_lock == 0	movl	%ebx, %eax#else	leal	cond_lock(%ebx), %eax#endif#if (LLL_SHARED-LLL_PRIVATE) > 255	xorl	%ecx, %ecx#endif	cmpl	$-1, dep_mutex(%ebx)	setne	%cl	subl	$1, %ecx	andl	$(LLL_SHARED-LLL_PRIVATE), %ecx#if LLL_PRIVATE != 0	addl	$LLL_PRIVATE, %ecx#endif	call	__lll_unlock_wake	/* Wake up all waiters to make sure no signal gets lost.  */2:	testl	%edi, %edi	jnz	5f	addl	$cond_futex, %ebx#if FUTEX_PRIVATE_FLAG > 255	xorl	%ecx, %ecx#endif	cmpl	$-1, dep_mutex-cond_futex(%ebx)	sete	%cl	subl	$1, %ecx#ifdef __ASSUME_PRIVATE_FUTEX	andl	$FUTEX_PRIVATE_FLAG, %ecx#else	andl	%gs:PRIVATE_FUTEX, %ecx#endif	addl	$FUTEX_WAKE, %ecx	movl	$SYS_futex, %eax	movl	$0x7fffffff, %edx	ENTER_KERNEL5:	movl	24+FRAME_SIZE(%esp), %eax	call	__pthread_mutex_cond_lock	movl	%esi, (%esp).LcallUR:	call	_Unwind_Resume	hlt.LENDCODE:	.size	__condvar_tw_cleanup, .-__condvar_tw_cleanup	.section .gcc_except_table,"a",@progbits.LexceptSTART:	.byte	0xff				# @LPStart format (omit)	.byte	0xff				# @TType format (omit)	.byte	0x0b				# call-site format						# DW_EH_PE_sdata4	.uleb128 .Lcstend-.Lcstbegin.Lcstbegin:	.long	.LcleanupSTART-.LSTARTCODE	.long	.Ladd_cond_futex-.LcleanupSTART	.long	__condvar_tw_cleanup-.LSTARTCODE	.uleb128  0	.long	.Ladd_cond_futex-.LSTARTCODE	.long	.Lsub_cond_futex-.Ladd_cond_futex	.long	__condvar_tw_cleanup2-.LSTARTCODE	.uleb128  0	.long	.Lsub_cond_futex-.LSTARTCODE	.long	.LcleanupEND-.Lsub_cond_futex	.long	__condvar_tw_cleanup-.LSTARTCODE	.uleb128  0	.long	.LcallUR-.LSTARTCODE	.long	.LENDCODE-.LcallUR	.long	0	.uleb128  0.Lcstend:	.section .eh_frame,"a",@progbits.LSTARTFRAME:	.long	L(ENDCIE)-L(STARTCIE)		# Length of the CIE..LSTARTCIE:	.long	0				# CIE ID.	.byte	1				# Version number.#ifdef SHARED	.string	"zPLR"				# NUL-terminated augmentation						# string.#else	.string	"zPL"				# NUL-terminated augmentation						# string.#endif	.uleb128 1				# Code alignment factor.	.sleb128 -4				# Data alignment factor.	.byte	8				# Return address register						# column.#ifdef SHARED	.uleb128 7				# Augmentation value length.	.byte	0x9b				# Personality: DW_EH_PE_pcrel						# + DW_EH_PE_sdata4						# + DW_EH_PE_indirect	.long	DW.ref.__gcc_personality_v0-.	.byte	0x1b				# LSDA Encoding: DW_EH_PE_pcrel						# + DW_EH_PE_sdata4.	.byte	0x1b				# FDE Encoding: DW_EH_PE_pcrel						# + DW_EH_PE_sdata4.#else	.uleb128 6				# Augmentation value length.	.byte	0x0				# Personality: absolute	.long	__gcc_personality_v0	.byte	0x0				# LSDA Encoding: absolute#endif	.byte 0x0c				# DW_CFA_def_cfa	.uleb128 4	.uleb128 4	.byte	0x88				# DW_CFA_offset, column 0x8	.uleb128 1	.align 4.LENDCIE:	.long	.LENDFDE-.LSTARTFDE		# Length of the FDE..LSTARTFDE:	.long	.LSTARTFDE-.LSTARTFRAME		# CIE pointer.#ifdef SHARED	.long	.LSTARTCODE-.			# PC-relative start address						# of the code#else	.long	.LSTARTCODE			# Start address of the code.#endif	.long	.LENDCODE-.LSTARTCODE		# Length of the code.	.uleb128 4				# Augmentation size#ifdef SHARED	.long	.LexceptSTART-.#else	.long	.LexceptSTART#endif	.byte	0x40+.Lpush_ebp-.LSTARTCODE	# DW_CFA_advance_loc+N	.byte	14				# DW_CFA_def_cfa_offset	.uleb128 8	.byte	0x85				# DW_CFA_offset %ebp	.uleb128 2	.byte	0x40+ .Lpush_edi-.Lpush_ebp	# DW_CFA_advance_loc+N	.byte	14				# DW_CFA_def_cfa_offset	.uleb128 12	.byte	0x87				# DW_CFA_offset %edi	.uleb128 3	.byte	0x40+.Lpush_esi-.Lpush_edi	# DW_CFA_advance_loc+N	.byte	14				# DW_CFA_def_cfa_offset	.uleb128 16	.byte	0x86				# DW_CFA_offset %esi	.uleb128 4	.byte	0x40+.Lpush_ebx-.Lpush_esi	# DW_CFA_advance_loc+N	.byte	14				# DW_CFA_def_cfa_offset	.uleb128 20	.byte	0x83				# DW_CFA_offset %ebx	.uleb128 5	.byte	4				# DW_CFA_advance_loc4	.4byte	.Lsubl-.Lpush_ebx	.byte	14				# DW_CFA_def_cfa_offset	.uleb128 20+FRAME_SIZE	.byte	4				# DW_CFA_advance_loc4	.4byte	.Laddl-.Lsubl	.byte	14				# DW_CFA_def_cfa_offset	.uleb128 20	.byte	0x40+.Lpop_ebx-.Laddl		# DW_CFA_advance_loc+N	.byte	14				# DW_CFA_def_cfa_offset	.uleb128 16	.byte	0xc3				# DW_CFA_restore %ebx	.byte	0x40+.Lpop_esi-.Lpop_ebx	# DW_CFA_advance_loc+N	.byte	14				# DW_CFA_def_cfa_offset	.uleb128 12	.byte	0xc6				# DW_CFA_restore %esi	.byte	0x40+.Lpop_edi-.Lpop_esi	# DW_CFA_advance_loc+N	.byte	14				# DW_CFA_def_cfa_offset	.uleb128 8	.byte	0xc7				# DW_CFA_restore %edi	.byte	0x40+.Lpop_ebp-.Lpop_edi	# DW_CFA_advance_loc+N	.byte	14				# DW_CFA_def_cfa_offset	.uleb128 4	.byte	0xc5				# DW_CFA_restore %ebp	.byte	0x40+.LSbl1-.Lpop_edi		# DW_CFA_advance_loc+N	.byte	14				# DW_CFA_def_cfa_offset	.uleb128 20	.byte	4				# DW_CFA_advance_loc4	.4byte	.LSbl2-.LSbl1	.byte	14				# DW_CFA_def_cfa_offset	.uleb128 20+FRAME_SIZE	.byte	0x85				# DW_CFA_offset %ebp	.uleb128 2	.byte	0x87				# DW_CFA_offset %edi	.uleb128 3	.byte	0x86				# DW_CFA_offset %esi	.uleb128 4	.byte	0x83				# DW_CFA_offset %ebx	.uleb128 5	.byte	4				# DW_CFA_advance_loc4	.4byte	.LSbl3-.LSbl2	.byte	14				# DW_CFA_def_cfa_offset	.uleb128 20	.byte	4				# DW_CFA_advance_loc4#if defined __NR_clock_gettime && !defined __ASSUME_POSIX_TIMERS	.4byte	.LSbl4-.LSbl3#else	.4byte	.LSbl5-.LSbl3#endif	.byte	14				# DW_CFA_def_cfa_offset	.uleb128 20+FRAME_SIZE	.align	4.LENDFDE:#ifdef SHARED	.hidden DW.ref.__gcc_personality_v0	.weak   DW.ref.__gcc_personality_v0	.section .gnu.linkonce.d.DW.ref.__gcc_personality_v0,"aw",@progbits	.align 4	.type   DW.ref.__gcc_personality_v0, @object	.size   DW.ref.__gcc_personality_v0, 4DW.ref.__gcc_personality_v0:	.long   __gcc_personality_v0#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -