diff options
author | Chung-Lin Tang <cltang@codesourcery.com> | 2016-04-25 00:08:17 -0700 |
---|---|---|
committer | Chung-Lin Tang <cltang@codesourcery.com> | 2016-04-25 00:08:17 -0700 |
commit | a5507dfa60a8b92ba52dadabea88e2b5d91da655 (patch) | |
tree | 5f9746c61ccbc2a2b62d4d4767fcb5524d65b924 | |
parent | d454fd21f4366fc529f83fdcd8a1113c5b49853e (diff) | |
download | glibc-a5507dfa60a8b92ba52dadabea88e2b5d91da655.tar.gz glibc-a5507dfa60a8b92ba52dadabea88e2b5d91da655.tar.xz glibc-a5507dfa60a8b92ba52dadabea88e2b5d91da655.zip |
Fix stdlib/tst-makecontext regression for Nios II
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/nios2/setcontext.S | 12 |
2 files changed, 17 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog index 6563baf8e7..b8b87eab72 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2016-04-25 Chung-Lin Tang <cltang@codesourcery.com> + + * sysdeps/unix/sysv/linux/nios2/setcontext.S (__startcontext): + Add nop before __startcontext, add explaining comments. + 2016-04-25 Samuel thibault <samuel.thibault@ens-lyon.org> RFC2292 macros were obsoleted by RFC3542, and should not be exposed diff --git a/sysdeps/unix/sysv/linux/nios2/setcontext.S b/sysdeps/unix/sysv/linux/nios2/setcontext.S index f10e8ffc0f..177aa4b3cc 100644 --- a/sysdeps/unix/sysv/linux/nios2/setcontext.S +++ b/sysdeps/unix/sysv/linux/nios2/setcontext.S @@ -85,6 +85,18 @@ ENTRY(__setcontext) PSEUDO_END (__setcontext) weak_alias (__setcontext, setcontext) + /* We add an NOP here to separate between __setcontext/__startcontext. + The wanted behavior that happens is: when unwinding from a function + called inside a makecontext() context, FDE lookup will use + '&__startcontext - 1', then returns NULL for no FDE found, + and immediately ends the unwind, in a normal fashion. + + If this NOP word does not exist, FDE lookup just repeatedly finds + __setcontext's FDE in an infinite loop, due to the convention of + using 'address - 1' for FDE lookup. Modifiying/deleting the below + __startcontext's FDE has no help on this. */ + nop + ENTRY(__startcontext) mov r4, r16 bne r4, zero, __setcontext |