Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 18034 | Differences between
and this patch

Collapse All | Expand All

(-)gcc/config/alpha/linux.h-org (-47 lines)
Lines 59-108 Link Here
59
/* Do code reading to identify a signal frame, and set the frame
59
/* Do code reading to identify a signal frame, and set the frame
60
   state data appropriately.  See unwind-dw2.c for the structs.  */
60
   state data appropriately.  See unwind-dw2.c for the structs.  */
61
61
62
#ifdef IN_LIBGCC2
63
#include <signal.h>
64
#include <sys/ucontext.h>
65
#endif
66
67
#define MD_FALLBACK_FRAME_STATE_FOR(CONTEXT, FS, SUCCESS)		\
68
  do {									\
69
    unsigned int *pc_ = (CONTEXT)->ra;					\
70
    struct sigcontext *sc_;						\
71
    long new_cfa_, i_;							\
72
									\
73
    if (pc_[0] != 0x47fe0410		/* mov $30,$16 */		\
74
        || pc_[2] != 0x00000083		/* callsys */)			\
75
      break;								\
76
    if (pc_[1] == 0x201f0067)		/* lda $0,NR_sigreturn */	\
77
      sc_ = (CONTEXT)->cfa;						\
78
    else if (pc_[1] == 0x201f015f)	/* lda $0,NR_rt_sigreturn */	\
79
      {									\
80
	struct rt_sigframe {						\
81
	  struct siginfo info;						\
82
	  struct ucontext uc;						\
83
	} *rt_ = (CONTEXT)->cfa;					\
84
	sc_ = &rt_->uc.uc_mcontext;					\
85
      }									\
86
    else								\
87
      break;								\
88
    new_cfa_ = sc_->sc_regs[30];					\
89
    (FS)->cfa_how = CFA_REG_OFFSET;					\
90
    (FS)->cfa_reg = 30;							\
91
    (FS)->cfa_offset = new_cfa_ - (long) (CONTEXT)->cfa;		\
92
    for (i_ = 0; i_ < 30; ++i_)						\
93
      {									\
94
	(FS)->regs.reg[i_].how = REG_SAVED_OFFSET;			\
95
	(FS)->regs.reg[i_].loc.offset					\
96
	  = (long)&sc_->sc_regs[i_] - new_cfa_;				\
97
      }									\
98
    for (i_ = 0; i_ < 31; ++i_)						\
99
      {									\
100
	(FS)->regs.reg[i_+32].how = REG_SAVED_OFFSET;			\
101
	(FS)->regs.reg[i_+32].loc.offset				\
102
	  = (long)&sc_->sc_fpregs[i_] - new_cfa_;			\
103
      }									\
104
    (FS)->regs.reg[31].how = REG_SAVED_OFFSET;				\
105
    (FS)->regs.reg[31].loc.offset = (long)&sc_->sc_pc - new_cfa_;	\
106
    (FS)->retaddr_column = 31;						\
107
    goto SUCCESS;							\
108
  } while (0)

Return to bug 18034