Commit 1bb4b6a3 by Uros Bizjak

linux-unwind.h: Update copyright years.

	* config/alpha/linux-unwind.h: Update copyright years.
	(MD_FROB_UPDATE_CONTEXT): New define.
	(alpha_frob_update_context): New function.

From-SVN: r182522
parent cf45cd09
2011-12-20 Uros Bizjak <ubizjak@gmail.com>
* config/alpha/linux-unwind.h: Update copyright years.
(MD_FROB_UPDATE_CONTEXT): New define.
(alpha_frob_update_context): New function.
2011-12-17 Richard Sandiford <rdsandiford@googlemail.com> 2011-12-17 Richard Sandiford <rdsandiford@googlemail.com>
* config.host (mips*-sde-elf*, mipsisa64sr71k-*-elf*): Add to * config.host (mips*-sde-elf*, mipsisa64sr71k-*-elf*): Add to
...@@ -6,7 +12,7 @@ ...@@ -6,7 +12,7 @@
2011-12-15 Iain Sandoe <iains@gcc.gnu.org> 2011-12-15 Iain Sandoe <iains@gcc.gnu.org>
* config/rs6000/darwin-world.S (toplevel): Make it clear that this * config/rs6000/darwin-world.S (toplevel): Make it clear that this
function is not used for PPC64. function is not used for PPC64.
(save_world): Amend comments. Update the VRsave mask to reflect the (save_world): Amend comments. Update the VRsave mask to reflect the
saved regs. saved regs.
(rest_world): Update comments, do not clobber r10, do not use r8. (rest_world): Update comments, do not clobber r10, do not use r8.
...@@ -65,7 +71,7 @@ ...@@ -65,7 +71,7 @@
(__deregister_frame_info, __cxa_finalize, _Jv_RegisterClasses, (__deregister_frame_info, __cxa_finalize, _Jv_RegisterClasses,
pthread_default_stacksize_np): Likewise. pthread_default_stacksize_np): Likewise.
* config/pa/t-stublib (LIBGCCSTUB_OBJS): Add new objects and rules. * config/pa/t-stublib (LIBGCCSTUB_OBJS): Add new objects and rules.
2011-11-29 DJ Delorie <dj@redhat.com> 2011-11-29 DJ Delorie <dj@redhat.com>
* config.host (rl78-*-elf): New case. * config.host (rl78-*-elf): New case.
...@@ -199,7 +205,7 @@ ...@@ -199,7 +205,7 @@
* config/arm/lib1funcs.asm (udivsi3): Add support for divide * config/arm/lib1funcs.asm (udivsi3): Add support for divide
functions. functions.
(aeabi_uidivmod): Likewise. (aeabi_uidivmod): Likewise.
(umodsi3): Likewise. (umodsi3): Likewise.
(divsi3): Likewise. (divsi3): Likewise.
(aeabi_idivmod): Likewise. (aeabi_idivmod): Likewise.
......
/* DWARF2 EH unwinding support for Alpha Linux. /* DWARF2 EH unwinding support for Alpha Linux.
Copyright (C) 2004, 2005, 2009 Free Software Foundation, Inc. Copyright (C) 2004, 2005, 2009, 2011 Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -36,16 +36,17 @@ alpha_fallback_frame_state (struct _Unwind_Context *context, ...@@ -36,16 +36,17 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
{ {
unsigned int *pc = context->ra; unsigned int *pc = context->ra;
struct sigcontext *sc; struct sigcontext *sc;
long new_cfa, i; long new_cfa;
int i;
if (pc[0] != 0x47fe0410 /* mov $30,$16 */ if (pc[0] != 0x47fe0410 /* mov $30,$16 */
|| pc[2] != 0x00000083 /* callsys */) || pc[2] != 0x00000083) /* callsys */
return _URC_END_OF_STACK; return _URC_END_OF_STACK;
if (context->cfa == 0) if (context->cfa == 0)
return _URC_END_OF_STACK; return _URC_END_OF_STACK;
if (pc[1] == 0x201f0067) /* lda $0,NR_sigreturn */ if (pc[1] == 0x201f0067) /* lda $0,NR_sigreturn */
sc = context->cfa; sc = context->cfa;
else if (pc[1] == 0x201f015f) /* lda $0,NR_rt_sigreturn */ else if (pc[1] == 0x201f015f) /* lda $0,NR_rt_sigreturn */
{ {
struct rt_sigframe { struct rt_sigframe {
struct siginfo info; struct siginfo info;
...@@ -55,6 +56,7 @@ alpha_fallback_frame_state (struct _Unwind_Context *context, ...@@ -55,6 +56,7 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
} }
else else
return _URC_END_OF_STACK; return _URC_END_OF_STACK;
new_cfa = sc->sc_regs[30]; new_cfa = sc->sc_regs[30];
fs->regs.cfa_how = CFA_REG_OFFSET; fs->regs.cfa_how = CFA_REG_OFFSET;
fs->regs.cfa_reg = 30; fs->regs.cfa_reg = 30;
...@@ -63,13 +65,13 @@ alpha_fallback_frame_state (struct _Unwind_Context *context, ...@@ -63,13 +65,13 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
{ {
fs->regs.reg[i].how = REG_SAVED_OFFSET; fs->regs.reg[i].how = REG_SAVED_OFFSET;
fs->regs.reg[i].loc.offset fs->regs.reg[i].loc.offset
= (long)&sc->sc_regs[i] - new_cfa; = (long) &sc->sc_regs[i] - new_cfa;
} }
for (i = 0; i < 31; ++i) for (i = 0; i < 31; ++i)
{ {
fs->regs.reg[i+32].how = REG_SAVED_OFFSET; fs->regs.reg[i+32].how = REG_SAVED_OFFSET;
fs->regs.reg[i+32].loc.offset fs->regs.reg[i+32].loc.offset
= (long)&sc->sc_fpregs[i] - new_cfa; = (long) &sc->sc_fpregs[i] - new_cfa;
} }
fs->regs.reg[64].how = REG_SAVED_OFFSET; fs->regs.reg[64].how = REG_SAVED_OFFSET;
fs->regs.reg[64].loc.offset = (long)&sc->sc_pc - new_cfa; fs->regs.reg[64].loc.offset = (long)&sc->sc_pc - new_cfa;
...@@ -78,3 +80,20 @@ alpha_fallback_frame_state (struct _Unwind_Context *context, ...@@ -78,3 +80,20 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
return _URC_NO_REASON; return _URC_NO_REASON;
} }
#define MD_FROB_UPDATE_CONTEXT alpha_frob_update_context
/* Fix up for signal handlers that don't have S flag set. */
static void
alpha_frob_update_context (struct _Unwind_Context *context,
_Unwind_FrameState *fs ATTRIBUTE_UNUSED)
{
unsigned int *pc = context->ra;
if (pc[0] == 0x47fe0410 /* mov $30,$16 */
&& pc[2] == 0x00000083 /* callsys */
&& (pc[1] == 0x201f0067 /* lda $0,NR_sigreturn */
|| pc[1] == 0x201f015f)) /* lda $0,NR_rt_sigreturn */
_Unwind_SetSignalFrame (context, 1);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment