From: rsandifo Date: Fri, 19 May 2006 12:52:26 +0000 (+0000) Subject: * config/mips/linux-unwind.h: Include X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=0848ddff0722b0fc8e7ad831965f43c8fe76d725 * config/mips/linux-unwind.h: Include (mips_fallback_frame_state): Use syscall numbers to determine the appropriate li instruction for the current ABI. Only use __NR_sigreturn for o32. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@113906 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1e3bbf6dde6..c4a65123d45 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2006-05-19 Richard Sandiford + + * config/mips/linux-unwind.h: Include + (mips_fallback_frame_state): Use syscall numbers to determine + the appropriate li instruction for the current ABI. Only use + __NR_sigreturn for o32. + 2006-05-19 Nicolas Setton * langhooks.h (struct lang_hooks): Add dwarf_name language hook. diff --git a/gcc/config/mips/linux-unwind.h b/gcc/config/mips/linux-unwind.h index 4152138ae04..4f96e95e940 100644 --- a/gcc/config/mips/linux-unwind.h +++ b/gcc/config/mips/linux-unwind.h @@ -31,6 +31,7 @@ Boston, MA 02110-1301, USA. */ state data appropriately. See unwind-dw2.c for the structs. */ #include +#include /* The third parameter to the signal handler points to something with * this structure defined in asm/ucontext.h, but the name clashes with @@ -59,20 +60,23 @@ mips_fallback_frame_state (struct _Unwind_Context *context, /* or */ /* 24021017 li v0, 0x1017 (sigreturn) */ /* 0000000c syscall */ - if (*(pc + 1) != 0x0000000c) + if (pc[1] != 0x0000000c) return _URC_END_OF_STACK; - if (*(pc + 0) == 0x24021017) +#if _MIPS_SIM == _ABIO32 + if (pc[0] == (0x24020000 | __NR_sigreturn)) { struct sigframe { - u_int32_t trampoline[2]; + u_int32_t trampoline[2]; struct sigcontext sigctx; } *rt_ = context->ra; sc = &rt_->sigctx; } - else if (*(pc + 0) == 0x24021061) + else +#endif + if (pc[0] == (0x24020000 | __NR_rt_sigreturn)) { struct rt_sigframe { - u_int32_t trampoline[2]; + u_int32_t trampoline[2]; struct siginfo info; _sig_ucontext_t uc; } *rt_ = context->ra;