diff options
author | J"orn Rennecke <joern.rennecke@superh.com> | 2003-07-15 22:49:07 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 2003-07-15 23:49:07 +0100 |
commit | 71628aa09889112d4acdfcea51b85d43808e1d74 (patch) | |
tree | 0b4cd663dafe5a829643f9e752beb54ae5870d2f /gcc/dwarf2out.c | |
parent | 5a170a05da225e0d29dff9cc282bc3c188fdb367 (diff) | |
download | gcc-71628aa09889112d4acdfcea51b85d43808e1d74.zip gcc-71628aa09889112d4acdfcea51b85d43808e1d74.tar.gz gcc-71628aa09889112d4acdfcea51b85d43808e1d74.tar.bz2 |
dwarf2out.c (expand_builtin_init_dwarf_reg_sizes): If DWARF_FRAME_RETURN_COLUMN doesn't have a register mode, use Pmode.
2003-07-15 J"orn Rennecke <joern.rennecke@superh.com>
* dwarf2out.c (expand_builtin_init_dwarf_reg_sizes):
If DWARF_FRAME_RETURN_COLUMN doesn't have a register mode, use Pmode.
2003-07-15 J"orn Rennecke <joern.rennecke@superh.com>
Richard Henderson <rth@redhat.com>
* unwind-dw2.c (_Unwind_GetGR): Use dwarf_reg_size_table
to decide if to access a _Unwind_Ptr or a _Unwind_Word.
(_Unwind_SetGR): Likewise.
(_Unwind_GetPtr, _Unwind_SetSpColumn): New functions.
(Unwind_SpTmp): New typedef.
(uw_update_context_1): Use _Unwind_SetSpColumn and _Unwind_GetPtr.
(uw_update_context): Use _Unwind_GetPtr.
(init_dwarf_reg_size_table): Move above uw_init_context_1.
(uw_init_context_1): Initialize dwarf_reg_size_table if necessary.
Use _Unwind_SetSpColumn.
(uw_install_context_1): Don't initialize dwarf_reg_size_table.
Use _Unwind_GetPtr.
Co-Authored-By: Richard Henderson <rth@redhat.com>
From-SVN: r69424
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r-- | gcc/dwarf2out.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 5ad605d..94269b1 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -443,6 +443,7 @@ expand_builtin_init_dwarf_reg_sizes (tree address) enum machine_mode mode = TYPE_MODE (char_type_node); rtx addr = expand_expr (address, NULL_RTX, VOIDmode, 0); rtx mem = gen_rtx_MEM (BLKmode, addr); + bool wrote_return_column = false; for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) if (DWARF_FRAME_REGNUM (i) < DWARF_FRAME_REGISTERS) @@ -453,12 +454,25 @@ expand_builtin_init_dwarf_reg_sizes (tree address) if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode)) save_mode = choose_hard_reg_mode (i, 1, true); + if (DWARF_FRAME_REGNUM (i) == DWARF_FRAME_RETURN_COLUMN) + { + if (save_mode == VOIDmode) + continue; + wrote_return_column = true; + } size = GET_MODE_SIZE (save_mode); if (offset < 0) continue; emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size)); } + if (! wrote_return_column) + { + enum machine_mode save_mode = Pmode; + HOST_WIDE_INT offset = DWARF_FRAME_RETURN_COLUMN * GET_MODE_SIZE (mode); + HOST_WIDE_INT size = GET_MODE_SIZE (save_mode); + emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size)); + } } /* Convert a DWARF call frame info. operation to its string name */ |