diff options
author | amylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-07-15 22:49:07 +0000 |
---|---|---|
committer | amylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-07-15 22:49:07 +0000 |
commit | 5fec5f344ce3899592431af2e2c1e588bf579105 (patch) | |
tree | 0b4cd663dafe5a829643f9e752beb54ae5870d2f /gcc/dwarf2out.c | |
parent | 80102098ac63f0284379625c832edc8b70a7fcb9 (diff) | |
download | ppe42-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.c | 14 |
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 */ |