diff options
author | Andreas Schwab <schwab@suse.de> | 2015-08-04 12:35:50 +0200 |
---|---|---|
committer | Andreas Schwab <schwab@suse.de> | 2015-08-04 17:46:56 +0200 |
commit | bbab82c25da9b504c0804119840de7aeab0eeeba (patch) | |
tree | e5c124527f1aec3b7b03ffc5cbe5ad04dba4e075 | |
parent | 8cf0ac959d318cf113feb1a9ca5d325010bb2124 (diff) | |
download | glibc-bbab82c25da9b504c0804119840de7aeab0eeeba.zip glibc-bbab82c25da9b504c0804119840de7aeab0eeeba.tar.gz glibc-bbab82c25da9b504c0804119840de7aeab0eeeba.tar.bz2 |
Properly terminate FDE in makecontext for ix86 (bug 18635)
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | sysdeps/i386/i686/Makefile | 6 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/makecontext.S | 5 |
4 files changed, 13 insertions, 9 deletions
@@ -1,3 +1,10 @@ +2015-08-04 Andreas Schwab <schwab@suse.de> + + [BZ #18635] + * sysdeps/unix/sysv/linux/i386/makecontext.S: Terminate FDE before + ret. + * sysdeps/i386/i686/Makefile (test-xfail-tst-makecontext): Remove. + 2015-08-01 Carlos O'Donell <carlos@redhat.com> * po/pl.po: Updated translation. @@ -27,8 +27,8 @@ Version 2.22 18512, 18513, 18519, 18520, 18522, 18527, 18528, 18529, 18530, 18532, 18533, 18534, 18536, 18539, 18540, 18542, 18544, 18545, 18546, 18547, 18549, 18553, 18557, 18558, 18569, 18583, 18585, 18586, 18592, 18593, - 18594, 18602, 18612, 18613, 18619, 18633, 18641, 18643, 18648, 18657, - 18676, 18694, 18696. + 18594, 18602, 18612, 18613, 18619, 18633, 18635, 18641, 18643, 18648, + 18657, 18676, 18694, 18696. * Cache information can be queried via sysconf() function on s390 e.g. with _SC_LEVEL1_ICACHE_SIZE as argument. diff --git a/sysdeps/i386/i686/Makefile b/sysdeps/i386/i686/Makefile index 83517c4..5ce9fc6 100644 --- a/sysdeps/i386/i686/Makefile +++ b/sysdeps/i386/i686/Makefile @@ -18,9 +18,3 @@ ASFLAGS-.op += -Wa,-mtune=i686 ASFLAGS-.og += -Wa,-mtune=i686 ASFLAGS-.oS += -Wa,-mtune=i686 endif - -ifeq ($(subdir),stdlib) -# _Unwind_Backtrace from libgcc produces a segmentation fault if it was -# called within a context created by makecontext. See Bug 18635. -test-xfail-tst-makecontext = yes -endif diff --git a/sysdeps/unix/sysv/linux/i386/makecontext.S b/sysdeps/unix/sysv/linux/i386/makecontext.S index 8364fb9..bcf8de6 100644 --- a/sysdeps/unix/sysv/linux/i386/makecontext.S +++ b/sysdeps/unix/sysv/linux/i386/makecontext.S @@ -83,6 +83,10 @@ ENTRY(__makecontext) #else movl $L(exitcode), (%edx) #endif + /* We need to terminate the FDE here instead of after ret because + the unwinder looks at ra-1 for unwind information. */ + cfi_endproc + /* 'makecontext' returns no value. */ ret @@ -92,7 +96,6 @@ ENTRY(__makecontext) the context 'makecontext' manipulated at the time of the 'makecontext' call. If the pointer is NULL the process must terminate. */ - cfi_endproc L(exitcode): /* This removes the parameters passed to the function given to 'makecontext' from the stack. EBX contains the number of |