mips: terminate the FDE before the return trampoline in makecontext
authorAurelien Jarno <aurelien@aurel32.net>
Tue, 8 Mar 2016 23:25:00 +0000 (00:25 +0100)
committerAurelien Jarno <aurelien@aurel32.net>
Wed, 9 Mar 2016 17:48:18 +0000 (18:48 +0100)
In makecontext the FDE needs to be terminated before the return
trampoline otherwise backtrace called within a context created by
makecontext yields infinite backtrace.

This bug has been present for a long time, stdlib/tst-makecontext did
not fail until recent commit e535ce25. Tested on mips-linux-gnu and
mips64el-linux-gnuabi64 and mips-linux-gnu, no regression.

This fixes stdlib/tst-makecontext on MIPS.

Changelog:
[BZ #19792]
* sysdeps/unix/sysv/linux/mips/makecontext.S (__makecontext):
Terminate FDE before return label.

ChangeLog
sysdeps/unix/sysv/linux/mips/makecontext.S

index a6be762..727516e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2016-03-09  Aurelien Jarno  <aurelien@aurel32.net>
+
+       [BZ #19792]
+       * sysdeps/unix/sysv/linux/mips/makecontext.S (__makecontext):
+       Terminate FDE before return label.
+
 2016-03-09  Joseph Myers  <joseph@codesourcery.com>
 
        [BZ #19790]
index 66600c7..3196554 100644 (file)
@@ -153,6 +153,11 @@ NESTED (__makecontext, FRAMESZ, ra)
 #endif
        jr      ra
 
+       /* We need to terminate the FDE to stop unwinding if backtrace was
+          called within a context created by makecontext.  */
+       cfi_endproc
+       nop
+
 99:
 #ifdef __PIC__
        move    gp, s1
@@ -186,6 +191,8 @@ NESTED (__makecontext, FRAMESZ, ra)
 1:
        lb      zero, (zero)
        b       1b
+
+       cfi_startproc
 PSEUDO_END (__makecontext)
 
 weak_alias (__makecontext, makecontext)