mips: terminate the FDE before the return trampoline in makecontext

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.
This commit is contained in:
Aurelien Jarno 2016-03-09 00:25:00 +01:00
parent 613c92b3b5
commit f8e9c4d30c
2 changed files with 13 additions and 0 deletions

View File

@ -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]

View 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)