about summary refs log tree commit diff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2016-03-21 06:38:17 -0700
committerH.J. Lu <hjl.tools@gmail.com>2016-03-21 06:51:05 -0700
commit893e371b2f27f7fd6f503cefce8d9f754aaefd58 (patch)
tree0588b74ad5857e25dcfa738562444c8909072c5b
parenta4cea54b12ff33e81be4413abb74905020890330 (diff)
downloadglibc-893e371b2f27f7fd6f503cefce8d9f754aaefd58.tar.gz
glibc-893e371b2f27f7fd6f503cefce8d9f754aaefd58.tar.xz
glibc-893e371b2f27f7fd6f503cefce8d9f754aaefd58.zip
Use JUMPTARGET in x86-64 pthread
When PLT may be used, JUMPTARGET should be used instead calling the
function directly.

	* sysdeps/unix/sysv/linux/x86_64/cancellation.S
	(__pthread_enable_asynccancel): Use JUMPTARGET to call
	__pthread_unwind.
	* sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
	(__condvar_cleanup2): Use JUMPTARGET to call _Unwind_Resume.
	* sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
	(__condvar_cleanup1): Likewise.
-rw-r--r--ChangeLog10
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/cancellation.S6
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S2
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S2
4 files changed, 13 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 17c9dc054c..f662d9aef7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2016-03-21  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* sysdeps/unix/sysv/linux/x86_64/cancellation.S
+	(__pthread_enable_asynccancel): Use JUMPTARGET to call
+	__pthread_unwind.
+	* sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
+	(__condvar_cleanup2): Use JUMPTARGET to call _Unwind_Resume.
+	* sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
+	(__condvar_cleanup1): Likewise.
+
 2016-03-21  Dylan Alex Simon  <dylan-sourceware@dylex.net>
 
 	[BZ #19822]
diff --git a/sysdeps/unix/sysv/linux/x86_64/cancellation.S b/sysdeps/unix/sysv/linux/x86_64/cancellation.S
index 687057dba3..04a0e59ea8 100644
--- a/sysdeps/unix/sysv/linux/x86_64/cancellation.S
+++ b/sysdeps/unix/sysv/linux/x86_64/cancellation.S
@@ -76,11 +76,7 @@ ENTRY(__pthread_enable_asynccancel)
 	lock
 	orl	$TCB_EXITING_BITMASK, %fs:CANCELHANDLING
 	mov	%fs:CLEANUP_JMP_BUF, %RDI_LP
-#ifdef SHARED
-	call	__pthread_unwind@PLT
-#else
-	call	__pthread_unwind
-#endif
+	call	JUMPTARGET(__pthread_unwind)
 	hlt
 END(__pthread_enable_asynccancel)
 
diff --git a/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S b/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
index 9a63314b6e..a2adc09b27 100644
--- a/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
+++ b/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
@@ -586,7 +586,7 @@ __condvar_cleanup2:
 	movq	FRAME_SIZE+16(%rsp), %r13
 	movq	FRAME_SIZE+24(%rsp), %r12
 .LcallUR:
-	call	_Unwind_Resume@PLT
+	call	JUMPTARGET(_Unwind_Resume)
 	hlt
 .LENDCODE:
 	cfi_endproc
diff --git a/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S b/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
index ed93d5d29c..c4d3504a67 100644
--- a/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
+++ b/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
@@ -518,7 +518,7 @@ __condvar_cleanup1:
 
 8:	movq	24(%rsp), %rdi
 .LcallUR:
-	call	_Unwind_Resume@PLT
+	call	JUMPTARGET(_Unwind_Resume)
 	hlt
 .LENDCODE:
 	cfi_endproc