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/i386/linux.h-orig (-56 lines)
Lines 221-280 Link Here
221
   state data appropriately.  See unwind-dw2.c for the structs.  */
221
   state data appropriately.  See unwind-dw2.c for the structs.  */
222
222
223
#ifdef IN_LIBGCC2
223
#ifdef IN_LIBGCC2
224
#include <signal.h>
225
#include <sys/ucontext.h>
226
#endif
224
#endif
227
228
#define MD_FALLBACK_FRAME_STATE_FOR(CONTEXT, FS, SUCCESS)		\
229
  do {									\
230
    unsigned char *pc_ = (CONTEXT)->ra;					\
231
    struct sigcontext *sc_;						\
232
    long new_cfa_;							\
233
									\
234
    /* popl %eax ; movl $__NR_sigreturn,%eax ; int $0x80  */		\
235
    if (*(unsigned short *)(pc_+0) == 0xb858				\
236
	&& *(unsigned int *)(pc_+2) == 119				\
237
	&& *(unsigned short *)(pc_+6) == 0x80cd)			\
238
      sc_ = (CONTEXT)->cfa + 4;						\
239
    /* movl $__NR_rt_sigreturn,%eax ; int $0x80  */			\
240
    else if (*(unsigned char *)(pc_+0) == 0xb8				\
241
	     && *(unsigned int *)(pc_+1) == 173				\
242
	     && *(unsigned short *)(pc_+5) == 0x80cd)			\
243
      {									\
244
	struct rt_sigframe {						\
245
	  int sig;							\
246
	  struct siginfo *pinfo;					\
247
	  void *puc;							\
248
	  struct siginfo info;						\
249
	  struct ucontext uc;						\
250
	} *rt_ = (CONTEXT)->cfa;					\
251
	sc_ = (struct sigcontext *) &rt_->uc.uc_mcontext;		\
252
      }									\
253
    else								\
254
      break;								\
255
									\
256
    new_cfa_ = sc_->esp;						\
257
    (FS)->cfa_how = CFA_REG_OFFSET;					\
258
    (FS)->cfa_reg = 4;							\
259
    (FS)->cfa_offset = new_cfa_ - (long) (CONTEXT)->cfa;		\
260
									\
261
    /* The SVR4 register numbering macros aren't usable in libgcc.  */	\
262
    (FS)->regs.reg[0].how = REG_SAVED_OFFSET;				\
263
    (FS)->regs.reg[0].loc.offset = (long)&sc_->eax - new_cfa_;		\
264
    (FS)->regs.reg[3].how = REG_SAVED_OFFSET;				\
265
    (FS)->regs.reg[3].loc.offset = (long)&sc_->ebx - new_cfa_;		\
266
    (FS)->regs.reg[1].how = REG_SAVED_OFFSET;				\
267
    (FS)->regs.reg[1].loc.offset = (long)&sc_->ecx - new_cfa_;		\
268
    (FS)->regs.reg[2].how = REG_SAVED_OFFSET;				\
269
    (FS)->regs.reg[2].loc.offset = (long)&sc_->edx - new_cfa_;		\
270
    (FS)->regs.reg[6].how = REG_SAVED_OFFSET;				\
271
    (FS)->regs.reg[6].loc.offset = (long)&sc_->esi - new_cfa_;		\
272
    (FS)->regs.reg[7].how = REG_SAVED_OFFSET;				\
273
    (FS)->regs.reg[7].loc.offset = (long)&sc_->edi - new_cfa_;		\
274
    (FS)->regs.reg[5].how = REG_SAVED_OFFSET;				\
275
    (FS)->regs.reg[5].loc.offset = (long)&sc_->ebp - new_cfa_;		\
276
    (FS)->regs.reg[8].how = REG_SAVED_OFFSET;				\
277
    (FS)->regs.reg[8].loc.offset = (long)&sc_->eip - new_cfa_;		\
278
    (FS)->retaddr_column = 8;						\
279
    goto SUCCESS;							\
280
  } while (0)

Return to bug 18034