Properly terminate FDE in makecontext for ix86 (bug 18635)
authorAndreas Schwab <schwab@suse.de>
Tue, 4 Aug 2015 10:35:50 +0000 (12:35 +0200)
committerAndreas Schwab <schwab@suse.de>
Tue, 4 Aug 2015 15:46:56 +0000 (17:46 +0200)
ChangeLog
NEWS
sysdeps/i386/i686/Makefile
sysdeps/unix/sysv/linux/i386/makecontext.S

index 846aad09bc33124f1c5596841e1d80baf78f5b93..3cf69712ade769ff094acf18b0e0694c33c7d8c2 100644 (file)
--- 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 1179f92b52d2f6576c28d94461192a4d7e033e5d..4c31de7b2d8d1b07ba0ad4fcabea9b1b0196e309 100644 (file)
--- 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.
index 83517c48db44726280a0076af2abaa5c8bbbf9f6..5ce9fc670ab8cd4d2ad787566ab262e0d5d2632c 100644 (file)
@@ -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
index 8364fb98ee8ac88e333fd420b14f6f5e919d9bf3..bcf8de68ef2e3e9787939cd28e2046a2c824e8c7 100644 (file)
@@ -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