aboutsummaryrefslogtreecommitdiff
path: root/gcc/libgcc2.c
diff options
context:
space:
mode:
authorAndrew Macleod <amacleod@cygnus.com>2000-06-26 16:15:07 -0400
committerJason Merrill <jason@gcc.gnu.org>2000-06-26 16:15:07 -0400
commit7d9d8943c9a920f25b1b0319dc201de1a280c412 (patch)
tree71b921aa27ff78a41f60dae65d13fa8833d71768 /gcc/libgcc2.c
parent4540727afe11267220f725c694e04e01de19f9d0 (diff)
downloadgcc-7d9d8943c9a920f25b1b0319dc201de1a280c412.zip
gcc-7d9d8943c9a920f25b1b0319dc201de1a280c412.tar.gz
gcc-7d9d8943c9a920f25b1b0319dc201de1a280c412.tar.bz2
dwarf2.h (enum dwarf_call_frame_info): Add DW_CFA_def_cfa_expression.
* dwarf2.h (enum dwarf_call_frame_info): Add DW_CFA_def_cfa_expression. * dwarf2out.c (union dw_cfi_oprnd_struct): Add a pointer to a dw_loc_descr_struct entry. (struct cfa_loc): New structure to track a CFA location. (lookup_cfa): Take a cfa_loc parameter instead of a reg and an offset. (lookup_cfa_1): Take a cfa_loc parameter instead of a reg and an offset, plus handle DW_CFA_def_cfa_expression. (def_cfa_1): Use to be dwarf2out_def_cfa, only now it uses a cfa_loc record. (dwarf2out_def_cfa): Entry point maintained for compatability. (dwarf_cfi_name): Add DW_CFA_def_cfa_expression. (cfa_reg, cfa_offset): Replace with cfa_loc record 'cfa'. (cfa_store_reg, cfa_store_offset): Replace with cfa_loc 'cfa_store'. (initial_return_save, dwarf2out_stack_adjust): Use cfa.reg, not cfa_reg. (dwarf2out_frame_debug_expr): Use new cfa_loc records. Recognize rtl sequences for the new DW_CFA_def_cfa_expression record. (dwarf2out_frame_debug): Use new variables/fields.A (output_cfi): Handle DW_CFA_def_cfa_expression. (output_cfa_loc): New function to generate a CFI record for DW_CFA_def_cfa_expression. (get_cfa_from_loc_descr): New function to get a cfa_loc record from a dw_loc_descr sequeunce. (build_loc_descr): Build a dw_loc_descr from a cfa_loc record. (dwarf_stack_op_name, new_loc_descr, add_loc_descr, size_of_loc_descr, size_of_locs, output_loc_operands, output_loc_sequence): Move into unwind info section. * frame.h (frame_state): Add base_offset and indirect fields. * frame-dwarf2.c (decode_stack_op): New function to interpret a dw_loc_descr operation. (execute_cfa_insn): Add support for DW_CFA_def_cfa_expression. (struct frame_state): Add base offset and indirect fields. * libgcc2.c (next_stack_level): Support indirect loading for CFA. From-SVN: r34717
Diffstat (limited to 'gcc/libgcc2.c')
-rw-r--r--gcc/libgcc2.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c
index 06c6fdd..b40fb58 100644
--- a/gcc/libgcc2.c
+++ b/gcc/libgcc2.c
@@ -3711,6 +3711,9 @@ next_stack_level (void *pc, frame_state *udata, frame_state *caller_udata)
caller_udata->cfa = get_reg (caller_udata->cfa_reg, udata, 0);
else
caller_udata->cfa = udata->cfa;
+ if (caller_udata->indirect)
+ caller_udata->cfa = *(word_type *)((unsigned char *)caller_udata->cfa
+ + caller_udata->base_offset);
caller_udata->cfa += caller_udata->cfa_offset;
return caller_udata;