diff options
author | Uros Bizjak <uros@gcc.gnu.org> | 2011-12-20 09:46:38 +0100 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2011-12-20 09:46:38 +0100 |
commit | 1bb4b6a35a7cd3a5e76dca3fe5c0fe4d07725080 (patch) | |
tree | 4c01069c8d4a36d3346965fd7fda6c9f37d7983d /libgcc | |
parent | cf45cd09affe4caf3a045638e26df58ebfcebe42 (diff) | |
download | gcc-1bb4b6a35a7cd3a5e76dca3fe5c0fe4d07725080.zip gcc-1bb4b6a35a7cd3a5e76dca3fe5c0fe4d07725080.tar.gz gcc-1bb4b6a35a7cd3a5e76dca3fe5c0fe4d07725080.tar.bz2 |
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
Diffstat (limited to 'libgcc')
-rw-r--r-- | libgcc/ChangeLog | 12 | ||||
-rw-r--r-- | libgcc/config/alpha/linux-unwind.h | 31 |
2 files changed, 34 insertions, 9 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 8ad0c99..6461ad6 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,9 @@ +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> * config.host (mips*-sde-elf*, mipsisa64sr71k-*-elf*): Add to @@ -6,7 +12,7 @@ 2011-12-15 Iain Sandoe <iains@gcc.gnu.org> * 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 saved regs. (rest_world): Update comments, do not clobber r10, do not use r8. @@ -65,7 +71,7 @@ (__deregister_frame_info, __cxa_finalize, _Jv_RegisterClasses, pthread_default_stacksize_np): Likewise. * config/pa/t-stublib (LIBGCCSTUB_OBJS): Add new objects and rules. - + 2011-11-29 DJ Delorie <dj@redhat.com> * config.host (rl78-*-elf): New case. @@ -199,7 +205,7 @@ * config/arm/lib1funcs.asm (udivsi3): Add support for divide functions. - (aeabi_uidivmod): Likewise. + (aeabi_uidivmod): Likewise. (umodsi3): Likewise. (divsi3): Likewise. (aeabi_idivmod): Likewise. diff --git a/libgcc/config/alpha/linux-unwind.h b/libgcc/config/alpha/linux-unwind.h index 629d557..4c811dc 100644 --- a/libgcc/config/alpha/linux-unwind.h +++ b/libgcc/config/alpha/linux-unwind.h @@ -1,5 +1,5 @@ /* 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. @@ -36,16 +36,17 @@ alpha_fallback_frame_state (struct _Unwind_Context *context, { unsigned int *pc = context->ra; struct sigcontext *sc; - long new_cfa, i; + long new_cfa; + int i; if (pc[0] != 0x47fe0410 /* mov $30,$16 */ - || pc[2] != 0x00000083 /* callsys */) + || pc[2] != 0x00000083) /* callsys */ return _URC_END_OF_STACK; if (context->cfa == 0) return _URC_END_OF_STACK; if (pc[1] == 0x201f0067) /* lda $0,NR_sigreturn */ 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 siginfo info; @@ -55,6 +56,7 @@ alpha_fallback_frame_state (struct _Unwind_Context *context, } else return _URC_END_OF_STACK; + new_cfa = sc->sc_regs[30]; fs->regs.cfa_how = CFA_REG_OFFSET; fs->regs.cfa_reg = 30; @@ -63,13 +65,13 @@ alpha_fallback_frame_state (struct _Unwind_Context *context, { fs->regs.reg[i].how = REG_SAVED_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) { fs->regs.reg[i+32].how = REG_SAVED_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].loc.offset = (long)&sc->sc_pc - new_cfa; @@ -78,3 +80,20 @@ alpha_fallback_frame_state (struct _Unwind_Context *context, 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); +} |