aboutsummaryrefslogtreecommitdiff
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
glibc-7e58ab243de4a89c49eec1521970c2a05c9e4adc.tar.gz
glibc-7e58ab243de4a89c49eec1521970c2a05c9e4adc.tar.bz2
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)