summaryrefslogtreecommitdiffstats
path: root/gcc/dwarf2out.c
diff options
context:
space:
mode:
authoramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>2003-07-15 22:49:07 +0000
committeramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>2003-07-15 22:49:07 +0000
commit5fec5f344ce3899592431af2e2c1e588bf579105 (patch)
tree0b4cd663dafe5a829643f9e752beb54ae5870d2f /gcc/dwarf2out.c
parent80102098ac63f0284379625c832edc8b70a7fcb9 (diff)
downloadppe42-gcc-5fec5f344ce3899592431af2e2c1e588bf579105.tar.gz
ppe42-gcc-5fec5f344ce3899592431af2e2c1e588bf579105.zip
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@69424 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r--gcc/dwarf2out.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 5ad605db8dd..94269b16c1a 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 */
OpenPOWER on IntegriCloud