diff options
author | Monk Chiang <sh.chiang04@gmail.com> | 2019-04-15 08:19:23 +0000 |
---|---|---|
committer | Chung-Ju Wu <jasonwucj@gcc.gnu.org> | 2019-04-15 08:19:23 +0000 |
commit | 887e182f05d64c0cb2a888711d8d6ca1174fe93a (patch) | |
tree | 822f43a30bb819d37baf27ac12a035b3370f1e36 /libgcc | |
parent | 3da4a68a3edd25be6e7cfa34b6479dae01b6ba08 (diff) | |
download | gcc-887e182f05d64c0cb2a888711d8d6ca1174fe93a.zip gcc-887e182f05d64c0cb2a888711d8d6ca1174fe93a.tar.gz gcc-887e182f05d64c0cb2a888711d8d6ca1174fe93a.tar.bz2 |
[NDS32] Refine force unwind. Linux kernel only uses RT_SIGRETURN.
libgcc/
* config/nds32/linux-unwind.h (SIGRETURN): Remove.
(RT_SIGRETURN): Update.
(nds32_fallback_frame_state): Update.
From-SVN: r270363
Diffstat (limited to 'libgcc')
-rw-r--r-- | libgcc/ChangeLog | 6 | ||||
-rw-r--r-- | libgcc/config/nds32/linux-unwind.h | 9 |
2 files changed, 9 insertions, 6 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 950eeab..de8d56a 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,9 @@ +2019-04-15 Monk Chiang <sh.chiang04@gmail.com> + + * config/nds32/linux-unwind.h (SIGRETURN): Remove. + (RT_SIGRETURN): Update. + (nds32_fallback_frame_state): Update. + 2019-02-21 Martin Sebor <msebor@redhat.com> * libgcc2.h (__clear_cache): Correct signature. diff --git a/libgcc/config/nds32/linux-unwind.h b/libgcc/config/nds32/linux-unwind.h index 0c4df4dd..adb6f9f 100644 --- a/libgcc/config/nds32/linux-unwind.h +++ b/libgcc/config/nds32/linux-unwind.h @@ -42,8 +42,7 @@ struct _rt_sigframe { struct ucontext_t uc; }; -#define SIGRETURN 0xeb0e0a64 -#define RT_SIGRETURN 0xab150a64 +#define RT_SIGRETURN 0x8b00f044 #define MD_FALLBACK_FRAME_STATE_FOR nds32_fallback_frame_state @@ -74,16 +73,14 @@ nds32_fallback_frame_state (struct _Unwind_Context *context, /* Check if we are going through a signal handler. See arch/nds32/kernel/signal.c implementation. - SWI_SYS_SIGRETURN -> (0xeb0e0a64) - SWI_SYS_RT_SIGRETURN -> (0xab150a64) FIXME: Currently we only handle little endian (EL) case. */ - if (pc[0] == SIGRETURN || pc[0] == RT_SIGRETURN) + if (pc[0] == RT_SIGRETURN) { /* Using '_sigfame' memory address to locate kernal's sigcontext. The sigcontext structures in arch/nds32/include/asm/sigcontext.h. */ struct _rt_sigframe *rt_; rt_ = context->cfa; - sc_ = &rt_->sig.uc.uc_mcontext; + sc_ = &rt_->uc.uc_mcontext; } else return _URC_END_OF_STACK; |