From 6673f90bc62ce2d5b8e59a987310b0bd621f797d Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Thu, 26 Oct 2006 19:31:09 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 14 +++++++++ gcc/config/alpha/linux-unwind.h | 6 ++-- gcc/config/alpha/vms-unwind.h | 12 ++++---- gcc/config/i386/linux-unwind.h | 12 ++++---- gcc/config/mips/linux-unwind.h | 6 ++-- gcc/config/pa/hpux-unwind.h | 18 +++++------ gcc/config/pa/linux-unwind.h | 6 ++-- gcc/config/rs6000/darwin-fallback.c | 6 ++-- gcc/config/rs6000/linux-unwind.h | 6 ++-- gcc/config/s390/linux-unwind.h | 6 ++-- gcc/config/s390/tpf-unwind.h | 12 ++++---- gcc/config/sh/linux-unwind.h | 12 ++++---- gcc/config/sparc/linux-unwind.h | 12 ++++---- gcc/unwind-dw2.c | 48 ++++++++++++++--------------- gcc/unwind-dw2.h | 22 ++++++------- 15 files changed, 106 insertions(+), 92 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 554a22c1ef6..e6897b48969 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,17 @@ +2006-10-26 Nathan Froyd + + * 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 * config/s390/s390.c (s390_init_frame_layout): Check positive diff --git a/gcc/config/alpha/linux-unwind.h b/gcc/config/alpha/linux-unwind.h index 1f1c2af7216..23151ad30af 100644 --- a/gcc/config/alpha/linux-unwind.h +++ b/gcc/config/alpha/linux-unwind.h @@ -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; diff --git a/gcc/config/alpha/vms-unwind.h b/gcc/config/alpha/vms-unwind.h index 4fb6a198fe4..1ecad039098 100644 --- a/gcc/config/alpha/vms-unwind.h +++ b/gcc/config/alpha/vms-unwind.h @@ -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; diff --git a/gcc/config/i386/linux-unwind.h b/gcc/config/i386/linux-unwind.h index 07979d319b6..58eb7333065 100644 --- a/gcc/config/i386/linux-unwind.h +++ b/gcc/config/i386/linux-unwind.h @@ -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; diff --git a/gcc/config/mips/linux-unwind.h b/gcc/config/mips/linux-unwind.h index 4f96e95e940..bbb2445b539 100644 --- a/gcc/config/mips/linux-unwind.h +++ b/gcc/config/mips/linux-unwind.h @@ -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 diff --git a/gcc/config/pa/hpux-unwind.h b/gcc/config/pa/hpux-unwind.h index d52149889e3..1082a34070d 100644 --- a/gcc/config/pa/hpux-unwind.h +++ b/gcc/config/pa/hpux-unwind.h @@ -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); diff --git a/gcc/config/pa/linux-unwind.h b/gcc/config/pa/linux-unwind.h index 36b9b382708..467d952efc0 100644 --- a/gcc/config/pa/linux-unwind.h +++ b/gcc/config/pa/linux-unwind.h @@ -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; diff --git a/gcc/config/rs6000/darwin-fallback.c b/gcc/config/rs6000/darwin-fallback.c index 5d3de322475..c3a59c3ff5a 100644 --- a/gcc/config/rs6000/darwin-fallback.c +++ b/gcc/config/rs6000/darwin-fallback.c @@ -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 diff --git a/gcc/config/rs6000/linux-unwind.h b/gcc/config/rs6000/linux-unwind.h index da3bc8e95b4..2758cbcac72 100644 --- a/gcc/config/rs6000/linux-unwind.h +++ b/gcc/config/rs6000/linux-unwind.h @@ -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) diff --git a/gcc/config/s390/linux-unwind.h b/gcc/config/s390/linux-unwind.h index 221a5d4bc0a..5ff880efbd0 100644 --- a/gcc/config/s390/linux-unwind.h +++ b/gcc/config/s390/linux-unwind.h @@ -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++) diff --git a/gcc/config/s390/tpf-unwind.h b/gcc/config/s390/tpf-unwind.h index 87b68923f49..eabd51e8a55 100644 --- a/gcc/config/s390/tpf-unwind.h +++ b/gcc/config/s390/tpf-unwind.h @@ -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++) diff --git a/gcc/config/sh/linux-unwind.h b/gcc/config/sh/linux-unwind.h index de84a772762..5374f8a61f9 100644 --- a/gcc/config/sh/linux-unwind.h +++ b/gcc/config/sh/linux-unwind.h @@ -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++) { diff --git a/gcc/config/sparc/linux-unwind.h b/gcc/config/sparc/linux-unwind.h index 958cb2d66ae..f8a381910c8 100644 --- a/gcc/config/sparc/linux-unwind.h +++ b/gcc/config/sparc/linux-unwind.h @@ -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) diff --git a/gcc/unwind-dw2.c b/gcc/unwind-dw2.c index d205122263d..a3fd9e0f9f3 100644 --- a/gcc/unwind-dw2.c +++ b/gcc/unwind-dw2.c @@ -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); diff --git a/gcc/unwind-dw2.h b/gcc/unwind-dw2.h index 34a378b7e18..db3a1ab222c 100644 --- a/gcc/unwind-dw2.h +++ b/gcc/unwind-dw2.h @@ -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; -- 2.30.2