mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-05 00:49:53 +08:00
unwind-dw2.h: Move cfa-related variables into struct frame_state_reg_info to ensure that the...
* gcc/unwind-dw2.h: Move cfa-related variables into struct frame_state_reg_info to ensure that the CFA is properly handled when executing DW_CFA_{remember,restore}_state. * gcc/unwind-dw2.c, gcc/config/alpha/linux-unwind.h, gcc/config/alpha/vms-unwind.h, gcc/config/s390/tpf-unwind.h gcc/config/s390/linux-unwind.h, gcc/config/sparc/linux-unwind.h gcc/config/i386/linux-unwind.h, gcc/config/sh/linux-unwind.h gcc/config/rs6000/linux-unwind.h, gcc/config/rs6000/darwin-fallback.c, gcc/config/pa/linux-unwind.h, gcc/config/pa/hpux-unwind.h, gcc/config/mips/linux-unwind.h: Modify to use new cfa_* fields. From-SVN: r118068
This commit is contained in:
parent
4bab2b2301
commit
6673f90bc6
@ -1,3 +1,17 @@
|
||||
2006-10-26 Nathan Froyd <froydnj@codesourcery.com>
|
||||
|
||||
* gcc/unwind-dw2.h: Move cfa-related variables into
|
||||
struct frame_state_reg_info to ensure that the CFA is properly
|
||||
handled when executing DW_CFA_{remember,restore}_state.
|
||||
* gcc/unwind-dw2.c, gcc/config/alpha/linux-unwind.h,
|
||||
gcc/config/alpha/vms-unwind.h, gcc/config/s390/tpf-unwind.h
|
||||
gcc/config/s390/linux-unwind.h, gcc/config/sparc/linux-unwind.h
|
||||
gcc/config/i386/linux-unwind.h, gcc/config/sh/linux-unwind.h
|
||||
gcc/config/rs6000/linux-unwind.h,
|
||||
gcc/config/rs6000/darwin-fallback.c, gcc/config/pa/linux-unwind.h,
|
||||
gcc/config/pa/hpux-unwind.h, gcc/config/mips/linux-unwind.h:
|
||||
Modify to use new cfa_* fields.
|
||||
|
||||
2006-10-26 Andreas Krebbel <krebbel1@de.ibm.com>
|
||||
|
||||
* config/s390/s390.c (s390_init_frame_layout): Check positive
|
||||
|
@ -60,9 +60,9 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
|
||||
else
|
||||
return _URC_END_OF_STACK;
|
||||
new_cfa = sc->sc_regs[30];
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
fs->cfa_reg = 30;
|
||||
fs->cfa_offset = new_cfa - (long) context->cfa;
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_reg = 30;
|
||||
fs->regs.cfa_offset = new_cfa - (long) context->cfa;
|
||||
for (i = 0; i < 30; ++i)
|
||||
{
|
||||
fs->regs.reg[i].how = REG_SAVED_OFFSET;
|
||||
|
@ -35,10 +35,10 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
|
||||
{
|
||||
int i, j;
|
||||
|
||||
fs->cfa_offset = pv->pdsc$l_size;
|
||||
fs->cfa_reg = pv->pdsc$w_flags & PDSC$M_BASE_REG_IS_FP ? 29 : 30;
|
||||
fs->regs.cfa_offset = pv->pdsc$l_size;
|
||||
fs->regs.cfa_reg = pv->pdsc$w_flags & PDSC$M_BASE_REG_IS_FP ? 29 : 30;
|
||||
fs->retaddr_column = 26;
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.reg[27].loc.offset = -pv->pdsc$l_size;
|
||||
fs->regs.reg[27].how = REG_SAVED_OFFSET;
|
||||
fs->regs.reg[26].loc.offset
|
||||
@ -57,10 +57,10 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
|
||||
}
|
||||
else if (pv && ((pv->pdsc$w_flags & 0xf) == PDSC$K_KIND_FP_REGISTER))
|
||||
{
|
||||
fs->cfa_offset = pv->pdsc$l_size;
|
||||
fs->cfa_reg = pv->pdsc$w_flags & PDSC$M_BASE_REG_IS_FP ? 29 : 30;
|
||||
fs->regs.cfa_offset = pv->pdsc$l_size;
|
||||
fs->regs.cfa_reg = pv->pdsc$w_flags & PDSC$M_BASE_REG_IS_FP ? 29 : 30;
|
||||
fs->retaddr_column = 26;
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.reg[26].loc.reg = pv->pdsc$b_save_ra;
|
||||
fs->regs.reg[26].how = REG_SAVED_REG;
|
||||
fs->regs.reg[29].loc.reg = pv->pdsc$b_save_fp;
|
||||
|
@ -61,10 +61,10 @@ x86_64_fallback_frame_state (struct _Unwind_Context *context,
|
||||
return _URC_END_OF_STACK;
|
||||
|
||||
new_cfa = sc->rsp;
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
/* Register 7 is rsp */
|
||||
fs->cfa_reg = 7;
|
||||
fs->cfa_offset = new_cfa - (long) context->cfa;
|
||||
fs->regs.cfa_reg = 7;
|
||||
fs->regs.cfa_offset = new_cfa - (long) context->cfa;
|
||||
|
||||
/* The SVR4 register numbering macros aren't usable in libgcc. */
|
||||
fs->regs.reg[0].how = REG_SAVED_OFFSET;
|
||||
@ -151,9 +151,9 @@ x86_fallback_frame_state (struct _Unwind_Context *context,
|
||||
return _URC_END_OF_STACK;
|
||||
|
||||
new_cfa = sc->REG_NAME(esp);
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
fs->cfa_reg = 4;
|
||||
fs->cfa_offset = new_cfa - (long) context->cfa;
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_reg = 4;
|
||||
fs->regs.cfa_offset = new_cfa - (long) context->cfa;
|
||||
|
||||
/* The SVR4 register numbering macros aren't usable in libgcc. */
|
||||
fs->regs.reg[0].how = REG_SAVED_OFFSET;
|
||||
|
@ -86,9 +86,9 @@ mips_fallback_frame_state (struct _Unwind_Context *context,
|
||||
return _URC_END_OF_STACK;
|
||||
|
||||
new_cfa = (_Unwind_Ptr)sc;
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
fs->cfa_reg = STACK_POINTER_REGNUM;
|
||||
fs->cfa_offset = new_cfa - (_Unwind_Ptr) context->cfa;
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_reg = STACK_POINTER_REGNUM;
|
||||
fs->regs.cfa_offset = new_cfa - (_Unwind_Ptr) context->cfa;
|
||||
|
||||
#if _MIPS_SIM == _ABIO32 && defined __MIPSEB__
|
||||
/* On o32 Linux, the register save slots in the sigcontext are
|
||||
|
@ -147,9 +147,9 @@ pa_fallback_frame_state (struct _Unwind_Context *context,
|
||||
&& *(pc + 0) == 0x4bc23fd1 /* ldw -18(sp),rp */
|
||||
&& *(pc + 1) == 0xe840d002)) /* bve,n (rp) */
|
||||
{
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
fs->cfa_reg = 30;
|
||||
fs->cfa_offset = 0;
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_reg = 30;
|
||||
fs->regs.cfa_offset = 0;
|
||||
|
||||
fs->retaddr_column = 0;
|
||||
fs->regs.reg[0].how = REG_SAVED_OFFSET;
|
||||
@ -167,9 +167,9 @@ pa_fallback_frame_state (struct _Unwind_Context *context,
|
||||
&& (*(pc + 1) == 0xe840c002 /* bv,n r0(rp) */
|
||||
|| *(pc + 1) == 0xe840d002)) /* bve,n (rp) */
|
||||
{
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
fs->cfa_reg = 30;
|
||||
fs->cfa_offset = 0;
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_reg = 30;
|
||||
fs->regs.cfa_offset = 0;
|
||||
|
||||
fs->retaddr_column = 0;
|
||||
fs->regs.reg[0].how = REG_SAVED_OFFSET;
|
||||
@ -239,9 +239,9 @@ pa_fallback_frame_state (struct _Unwind_Context *context,
|
||||
|
||||
long new_cfa = GetSSReg (mc, ss_sp);
|
||||
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
fs->cfa_reg = 30;
|
||||
fs->cfa_offset = new_cfa - (long) context->cfa;
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_reg = 30;
|
||||
fs->regs.cfa_offset = new_cfa - (long) context->cfa;
|
||||
|
||||
UPDATE_FS_FOR_GR (fs, 1, 1);
|
||||
UPDATE_FS_FOR_GR (fs, 2, 2);
|
||||
|
@ -111,9 +111,9 @@ pa32_fallback_frame_state (struct _Unwind_Context *context,
|
||||
sc = &frame->uc.uc_mcontext;
|
||||
|
||||
new_cfa = sc->sc_gr[30];
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
fs->cfa_reg = 30;
|
||||
fs->cfa_offset = new_cfa - (long) context->cfa;
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_reg = 30;
|
||||
fs->regs.cfa_offset = new_cfa - (long) context->cfa;
|
||||
for (i = 1; i <= 31; i++)
|
||||
{
|
||||
fs->regs.reg[i].how = REG_SAVED_OFFSET;
|
||||
|
@ -421,9 +421,9 @@ handle_syscall (_Unwind_FrameState *fs, const reg_unit gprs[32],
|
||||
return_addr = m->srr0;
|
||||
}
|
||||
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
fs->cfa_reg = STACK_POINTER_REGNUM;
|
||||
fs->cfa_offset = new_cfa - old_cfa;;
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_reg = STACK_POINTER_REGNUM;
|
||||
fs->regs.cfa_offset = new_cfa - old_cfa;;
|
||||
|
||||
/* The choice of column for the return address is somewhat tricky.
|
||||
Fortunately, the actual choice is private to this file, and
|
||||
|
@ -232,9 +232,9 @@ ppc_fallback_frame_state (struct _Unwind_Context *context,
|
||||
return _URC_END_OF_STACK;
|
||||
|
||||
new_cfa = regs->gpr[STACK_POINTER_REGNUM];
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
fs->cfa_reg = STACK_POINTER_REGNUM;
|
||||
fs->cfa_offset = new_cfa - (long) context->cfa;
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_reg = STACK_POINTER_REGNUM;
|
||||
fs->regs.cfa_offset = new_cfa - (long) context->cfa;
|
||||
|
||||
for (i = 0; i < 32; i++)
|
||||
if (i != STACK_POINTER_REGNUM)
|
||||
|
@ -101,9 +101,9 @@ s390_fallback_frame_state (struct _Unwind_Context *context,
|
||||
}
|
||||
|
||||
new_cfa = regs->gprs[15] + 16*sizeof(long) + 32;
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
fs->cfa_reg = 15;
|
||||
fs->cfa_offset =
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_reg = 15;
|
||||
fs->regs.cfa_offset =
|
||||
new_cfa - (long) context->cfa + 16*sizeof(long) + 32;
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
|
@ -76,9 +76,9 @@ s390_fallback_frame_state (struct _Unwind_Context *context,
|
||||
return _URC_END_OF_STACK;
|
||||
|
||||
/* No stack frame. */
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
fs->cfa_reg = 15;
|
||||
fs->cfa_offset = STACK_POINTER_OFFSET;
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_reg = 15;
|
||||
fs->regs.cfa_offset = STACK_POINTER_OFFSET;
|
||||
|
||||
/* All registers remain unchanged ... */
|
||||
for (i = 0; i < 32; i++)
|
||||
@ -100,9 +100,9 @@ s390_fallback_frame_state (struct _Unwind_Context *context,
|
||||
(((unsigned long int) context->cfa) - STACK_POINTER_OFFSET));
|
||||
new_cfa = regs + STACK_POINTER_OFFSET;
|
||||
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
fs->cfa_reg = 15;
|
||||
fs->cfa_offset = new_cfa -
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_reg = 15;
|
||||
fs->regs.cfa_offset = new_cfa -
|
||||
(unsigned long int) context->cfa + STACK_POINTER_OFFSET;
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
|
@ -94,9 +94,9 @@ shmedia_fallback_frame_state (struct _Unwind_Context *context,
|
||||
return _URC_END_OF_STACK;
|
||||
|
||||
new_cfa = sc->sc_regs[15];
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
fs->cfa_reg = 15;
|
||||
fs->cfa_offset = new_cfa - (long) context->cfa;
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_reg = 15;
|
||||
fs->regs.cfa_offset = new_cfa - (long) context->cfa;
|
||||
|
||||
for (i = 0; i < 63; i++)
|
||||
{
|
||||
@ -191,9 +191,9 @@ sh_fallback_frame_state (struct _Unwind_Context *context,
|
||||
return _URC_END_OF_STACK;
|
||||
|
||||
new_cfa = sc->sc_regs[15];
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
fs->cfa_reg = 15;
|
||||
fs->cfa_offset = new_cfa - (long) context->cfa;
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_reg = 15;
|
||||
fs->regs.cfa_offset = new_cfa - (long) context->cfa;
|
||||
|
||||
for (i = 0; i < 15; i++)
|
||||
{
|
||||
|
@ -53,9 +53,9 @@ sparc64_fallback_frame_state (struct _Unwind_Context *context,
|
||||
new_cfa = *(long *)((context->cfa) + (regs_off + (14 * 8)));
|
||||
new_cfa += 2047; /* Stack bias */
|
||||
fpu_save = *(long *)((this_cfa) + (fpu_save_off));
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
fs->cfa_reg = 14;
|
||||
fs->cfa_offset = new_cfa - (long) context->cfa;
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_reg = 14;
|
||||
fs->regs.cfa_offset = new_cfa - (long) context->cfa;
|
||||
for (i = 1; i < 16; ++i)
|
||||
{
|
||||
fs->regs.reg[i].how = REG_SAVED_OFFSET;
|
||||
@ -122,9 +122,9 @@ sparc_fallback_frame_state (struct _Unwind_Context *context,
|
||||
this_cfa = (int) context->cfa;
|
||||
new_cfa = *(int *)((context->cfa) + (regs_off+(4*4)+(14 * 4)));
|
||||
fpu_save = *(int *)((this_cfa) + (fpu_save_off));
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
fs->cfa_reg = 14;
|
||||
fs->cfa_offset = new_cfa - (int) context->cfa;
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_reg = 14;
|
||||
fs->regs.cfa_offset = new_cfa - (int) context->cfa;
|
||||
for (i = 1; i < 16; ++i)
|
||||
{
|
||||
if (i == 14)
|
||||
|
@ -932,26 +932,26 @@ execute_cfa_program (const unsigned char *insn_ptr,
|
||||
break;
|
||||
|
||||
case DW_CFA_def_cfa:
|
||||
insn_ptr = read_uleb128 (insn_ptr, &fs->cfa_reg);
|
||||
insn_ptr = read_uleb128 (insn_ptr, &fs->regs.cfa_reg);
|
||||
insn_ptr = read_uleb128 (insn_ptr, &utmp);
|
||||
fs->cfa_offset = utmp;
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_offset = utmp;
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
break;
|
||||
|
||||
case DW_CFA_def_cfa_register:
|
||||
insn_ptr = read_uleb128 (insn_ptr, &fs->cfa_reg);
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
insn_ptr = read_uleb128 (insn_ptr, &fs->regs.cfa_reg);
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
break;
|
||||
|
||||
case DW_CFA_def_cfa_offset:
|
||||
insn_ptr = read_uleb128 (insn_ptr, &utmp);
|
||||
fs->cfa_offset = utmp;
|
||||
fs->regs.cfa_offset = utmp;
|
||||
/* cfa_how deliberately not set. */
|
||||
break;
|
||||
|
||||
case DW_CFA_def_cfa_expression:
|
||||
fs->cfa_exp = insn_ptr;
|
||||
fs->cfa_how = CFA_EXP;
|
||||
fs->regs.cfa_exp = insn_ptr;
|
||||
fs->regs.cfa_how = CFA_EXP;
|
||||
insn_ptr = read_uleb128 (insn_ptr, &utmp);
|
||||
insn_ptr += utmp;
|
||||
break;
|
||||
@ -975,15 +975,15 @@ execute_cfa_program (const unsigned char *insn_ptr,
|
||||
break;
|
||||
|
||||
case DW_CFA_def_cfa_sf:
|
||||
insn_ptr = read_uleb128 (insn_ptr, &fs->cfa_reg);
|
||||
insn_ptr = read_sleb128 (insn_ptr, &fs->cfa_offset);
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
fs->cfa_offset *= fs->data_align;
|
||||
insn_ptr = read_uleb128 (insn_ptr, &fs->regs.cfa_reg);
|
||||
insn_ptr = read_sleb128 (insn_ptr, &fs->regs.cfa_offset);
|
||||
fs->regs.cfa_how = CFA_REG_OFFSET;
|
||||
fs->regs.cfa_offset *= fs->data_align;
|
||||
break;
|
||||
|
||||
case DW_CFA_def_cfa_offset_sf:
|
||||
insn_ptr = read_sleb128 (insn_ptr, &fs->cfa_offset);
|
||||
fs->cfa_offset *= fs->data_align;
|
||||
insn_ptr = read_sleb128 (insn_ptr, &fs->regs.cfa_offset);
|
||||
fs->regs.cfa_offset *= fs->data_align;
|
||||
/* cfa_how deliberately not set. */
|
||||
break;
|
||||
|
||||
@ -1149,7 +1149,7 @@ __frame_state_for (void *pc_target, struct frame_state *state_in)
|
||||
|
||||
/* We have no way to pass a location expression for the CFA to our
|
||||
caller. It wouldn't understand it anyway. */
|
||||
if (fs.cfa_how == CFA_EXP)
|
||||
if (fs.regs.cfa_how == CFA_EXP)
|
||||
return 0;
|
||||
|
||||
for (reg = 0; reg < PRE_GCC3_DWARF_FRAME_REGISTERS + 1; reg++)
|
||||
@ -1169,8 +1169,8 @@ __frame_state_for (void *pc_target, struct frame_state *state_in)
|
||||
}
|
||||
}
|
||||
|
||||
state_in->cfa_offset = fs.cfa_offset;
|
||||
state_in->cfa_reg = fs.cfa_reg;
|
||||
state_in->cfa_offset = fs.regs.cfa_offset;
|
||||
state_in->cfa_reg = fs.regs.cfa_reg;
|
||||
state_in->retaddr_column = fs.retaddr_column;
|
||||
state_in->args_size = context.args_size;
|
||||
state_in->eh_ptr = fs.eh_ptr;
|
||||
@ -1227,16 +1227,16 @@ uw_update_context_1 (struct _Unwind_Context *context, _Unwind_FrameState *fs)
|
||||
#endif
|
||||
|
||||
/* Compute this frame's CFA. */
|
||||
switch (fs->cfa_how)
|
||||
switch (fs->regs.cfa_how)
|
||||
{
|
||||
case CFA_REG_OFFSET:
|
||||
cfa = _Unwind_GetPtr (&orig_context, fs->cfa_reg);
|
||||
cfa += fs->cfa_offset;
|
||||
cfa = _Unwind_GetPtr (&orig_context, fs->regs.cfa_reg);
|
||||
cfa += fs->regs.cfa_offset;
|
||||
break;
|
||||
|
||||
case CFA_EXP:
|
||||
{
|
||||
const unsigned char *exp = fs->cfa_exp;
|
||||
const unsigned char *exp = fs->regs.cfa_exp;
|
||||
_Unwind_Word len;
|
||||
|
||||
exp = read_uleb128 (exp, &len);
|
||||
@ -1384,9 +1384,9 @@ uw_init_context_1 (struct _Unwind_Context *context,
|
||||
|
||||
/* Force the frame state to use the known cfa value. */
|
||||
_Unwind_SetSpColumn (context, outer_cfa, &sp_slot);
|
||||
fs.cfa_how = CFA_REG_OFFSET;
|
||||
fs.cfa_reg = __builtin_dwarf_sp_column ();
|
||||
fs.cfa_offset = 0;
|
||||
fs.regs.cfa_how = CFA_REG_OFFSET;
|
||||
fs.regs.cfa_reg = __builtin_dwarf_sp_column ();
|
||||
fs.regs.cfa_offset = 0;
|
||||
|
||||
uw_update_context_1 (context, &fs);
|
||||
|
||||
|
@ -61,18 +61,18 @@ typedef struct
|
||||
|
||||
/* Used to implement DW_CFA_remember_state. */
|
||||
struct frame_state_reg_info *prev;
|
||||
} regs;
|
||||
|
||||
/* The CFA can be described in terms of a reg+offset or a
|
||||
location expression. */
|
||||
_Unwind_Sword cfa_offset;
|
||||
_Unwind_Word cfa_reg;
|
||||
const unsigned char *cfa_exp;
|
||||
enum {
|
||||
CFA_UNSET,
|
||||
CFA_REG_OFFSET,
|
||||
CFA_EXP
|
||||
} cfa_how;
|
||||
/* The CFA can be described in terms of a reg+offset or a
|
||||
location expression. */
|
||||
_Unwind_Sword cfa_offset;
|
||||
_Unwind_Word cfa_reg;
|
||||
const unsigned char *cfa_exp;
|
||||
enum {
|
||||
CFA_UNSET,
|
||||
CFA_REG_OFFSET,
|
||||
CFA_EXP
|
||||
} cfa_how;
|
||||
} regs;
|
||||
|
||||
/* The PC described by the current frame state. */
|
||||
void *pc;
|
||||
|
Loading…
Reference in New Issue
Block a user