diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2015-08-19 04:39:47 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2015-08-19 04:41:01 -0700 |
commit | 7e58ab243de4a89c49eec1521970c2a05c9e4adc (patch) | |
tree | c341573953abc971e9f172408132005856ba6b00 | |
parent | 3552daa7ac08c8dd2fc59393fc57e0b4e7aec94e (diff) | |
download | glibc-7e58ab243de4a89c49eec1521970c2a05c9e4adc.zip glibc-7e58ab243de4a89c49eec1521970c2a05c9e4adc.tar.gz glibc-7e58ab243de4a89c49eec1521970c2a05c9e4adc.tar.bz2 |
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-- | ChangeLog | 9 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/makecontext.S | 7 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/setcontext.S | 1 |
3 files changed, 11 insertions, 6 deletions
@@ -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 bcf8de6..fd1abf8 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 13609b0..75b4447 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) |