summary refs log tree commit diff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2015-08-19 04:39:47 -0700
committerH.J. Lu <hjl.tools@gmail.com>2015-08-19 04:41:01 -0700
commit7e58ab243de4a89c49eec1521970c2a05c9e4adc (patch)
treec341573953abc971e9f172408132005856ba6b00
parent3552daa7ac08c8dd2fc59393fc57e0b4e7aec94e (diff)
downloadglibc-7e58ab243de4a89c49eec1521970c2a05c9e4adc.tar.gz
glibc-7e58ab243de4a89c49eec1521970c2a05c9e4adc.tar.xz
glibc-7e58ab243de4a89c49eec1521970c2a05c9e4adc.zip
Call __setcontext with HIDDEN_JUMPTARGET
i386 __makecontext should call __setcontext with HIDDEN_JUMPTARGET.

	[BZ #18822]
	* sysdeps/unix/sysv/linux/i386/makecontext.S (__makecontext):
	Don't load %ebx when calling __setcontext.  Call __setcontext
	with HIDDEN_JUMPTARGET.
	* sysdeps/unix/sysv/linux/i386/setcontext.S (__setcontext): Add
	libc_hidden_def.
-rw-r--r--ChangeLog9
-rw-r--r--sysdeps/unix/sysv/linux/i386/makecontext.S7
-rw-r--r--sysdeps/unix/sysv/linux/i386/setcontext.S1
3 files changed, 11 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 5f9e4f7b0b..592575b932 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2015-08-19  H.J. Lu  <hongjiu.lu@intel.com>
 
+	[BZ #18822]
+	* sysdeps/unix/sysv/linux/i386/makecontext.S (__makecontext):
+	Don't load %ebx when calling __setcontext.  Call __setcontext
+	with HIDDEN_JUMPTARGET.
+	* sysdeps/unix/sysv/linux/i386/setcontext.S (__setcontext): Add
+	libc_hidden_def.
+
+2015-08-19  H.J. Lu  <hongjiu.lu@intel.com>
+
 	* sysdeps/i386/i686/Makefile
 	[$(subdir) == string] (sysdep_routines): Moved to ...
 	* sysdeps/i386/Makefile: Here.
diff --git a/sysdeps/unix/sysv/linux/i386/makecontext.S b/sysdeps/unix/sysv/linux/i386/makecontext.S
index bcf8de68ef..fd1abf8c0d 100644
--- a/sysdeps/unix/sysv/linux/i386/makecontext.S
+++ b/sysdeps/unix/sysv/linux/i386/makecontext.S
@@ -102,15 +102,10 @@ L(exitcode):
 	   parameters (see above).  */
 	leal	(%esp,%ebx,4), %esp
 
-#ifdef	PIC
-	call	1f
-1:	popl	%ebx
-	addl	$_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
-#endif
 	cmpl	$0, (%esp)		/* Check the next context.  */
 	je	2f			/* If it is zero exit.  */
 
-	call	JUMPTARGET(__setcontext)
+	call	HIDDEN_JUMPTARGET(__setcontext)
 	/* If this returns (which can happen if the syscall fails) we'll
 	   exit the program with the return error value (-1).  */
 
diff --git a/sysdeps/unix/sysv/linux/i386/setcontext.S b/sysdeps/unix/sysv/linux/i386/setcontext.S
index 13609b0fb9..75b4447647 100644
--- a/sysdeps/unix/sysv/linux/i386/setcontext.S
+++ b/sysdeps/unix/sysv/linux/i386/setcontext.S
@@ -91,5 +91,6 @@ ENTRY(__setcontext)
 
 	ret
 PSEUDO_END(__setcontext)
+libc_hidden_def (__setcontext)
 
 weak_alias (__setcontext, setcontext)