about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@suse.de>2015-08-04 12:35:50 +0200
committerAndreas Schwab <schwab@suse.de>2015-08-04 17:46:56 +0200
commitbbab82c25da9b504c0804119840de7aeab0eeeba (patch)
treee5c124527f1aec3b7b03ffc5cbe5ad04dba4e075
parent8cf0ac959d318cf113feb1a9ca5d325010bb2124 (diff)
downloadglibc-bbab82c25da9b504c0804119840de7aeab0eeeba.tar.gz
glibc-bbab82c25da9b504c0804119840de7aeab0eeeba.tar.xz
glibc-bbab82c25da9b504c0804119840de7aeab0eeeba.zip
Properly terminate FDE in makecontext for ix86 (bug 18635)
-rw-r--r--ChangeLog7
-rw-r--r--NEWS4
-rw-r--r--sysdeps/i386/i686/Makefile6
-rw-r--r--sysdeps/unix/sysv/linux/i386/makecontext.S5
4 files changed, 13 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 846aad09bc..3cf69712ad 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/NEWS b/NEWS
index 1179f92b52..4c31de7b2d 100644
--- a/NEWS
+++ b/NEWS
@@ -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 83517c48db..5ce9fc670a 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 8364fb98ee..bcf8de68ef 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