aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2023-01-03 16:47:31 +0100
committerFlorian Weimer <fweimer@redhat.com>2023-01-03 16:47:31 +0100
commit455acc43518744b89d6a795bbba5045bd228060b (patch)
tree00679ff51b9eab7e53021605ef2fbb170de729bd /gcc/config
parentd010efbfb89721bc9ca9e657e980ff0d8e6187af (diff)
downloadgcc-455acc43518744b89d6a795bbba5045bd228060b.zip
gcc-455acc43518744b89d6a795bbba5045bd228060b.tar.gz
gcc-455acc43518744b89d6a795bbba5045bd228060b.tar.bz2
Revert "Compute a table of DWARF register sizes at compile"
This reverts commit 3b6cac2b44b384cd2091eaeaebeb3478c253a25d.
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/msp430/msp430.cc11
-rw-r--r--gcc/config/rs6000/rs6000.cc14
2 files changed, 21 insertions, 4 deletions
diff --git a/gcc/config/msp430/msp430.cc b/gcc/config/msp430/msp430.cc
index dbea8d7..6c15780 100644
--- a/gcc/config/msp430/msp430.cc
+++ b/gcc/config/msp430/msp430.cc
@@ -3202,9 +3202,11 @@ msp430_expand_eh_return (rtx eh_handler)
#undef TARGET_INIT_DWARF_REG_SIZES_EXTRA
#define TARGET_INIT_DWARF_REG_SIZES_EXTRA msp430_init_dwarf_reg_sizes_extra
void
-msp430_init_dwarf_reg_sizes_extra (poly_uint16 *sizes)
+msp430_init_dwarf_reg_sizes_extra (tree address)
{
int i;
+ rtx addr = expand_normal (address);
+ rtx mem = gen_rtx_MEM (BLKmode, addr);
/* This needs to match msp430_unwind_word_mode (above). */
if (!msp430x)
@@ -3216,7 +3218,12 @@ msp430_init_dwarf_reg_sizes_extra (poly_uint16 *sizes)
unsigned int rnum = DWARF2_FRAME_REG_OUT (dnum, 1);
if (rnum < DWARF_FRAME_REGISTERS)
- sizes[rnum] = 4;
+ {
+ HOST_WIDE_INT offset = rnum * GET_MODE_SIZE (QImode);
+
+ emit_move_insn (adjust_address (mem, QImode, offset),
+ gen_int_mode (4, QImode));
+ }
}
}
diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
index 875684a..6ac3adc 100644
--- a/gcc/config/rs6000/rs6000.cc
+++ b/gcc/config/rs6000/rs6000.cc
@@ -23860,17 +23860,27 @@ rs6000_initial_elimination_offset (int from, int to)
/* Fill in sizes of registers used by unwinder. */
static void
-rs6000_init_dwarf_reg_sizes_extra (poly_uint16 *sizes)
+rs6000_init_dwarf_reg_sizes_extra (tree address)
{
if (TARGET_MACHO && ! TARGET_ALTIVEC)
{
int i;
+ machine_mode mode = TYPE_MODE (char_type_node);
+ rtx addr = expand_expr (address, NULL_RTX, VOIDmode, EXPAND_NORMAL);
+ rtx mem = gen_rtx_MEM (BLKmode, addr);
+ rtx value = gen_int_mode (16, mode);
/* On Darwin, libgcc may be built to run on both G3 and G4/5.
The unwinder still needs to know the size of Altivec registers. */
for (i = FIRST_ALTIVEC_REGNO; i < LAST_ALTIVEC_REGNO+1; i++)
- sizes[i] = 16;
+ {
+ int column = DWARF_REG_TO_UNWIND_COLUMN
+ (DWARF2_FRAME_REG_OUT (DWARF_FRAME_REGNUM (i), true));
+ HOST_WIDE_INT offset = column * GET_MODE_SIZE (mode);
+
+ emit_move_insn (adjust_address (mem, mode, offset), value);
+ }
}
}