diff options
author | Florian Weimer <fweimer@redhat.com> | 2023-01-03 16:47:31 +0100 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2023-01-03 16:47:31 +0100 |
commit | 455acc43518744b89d6a795bbba5045bd228060b (patch) | |
tree | 00679ff51b9eab7e53021605ef2fbb170de729bd /gcc/config | |
parent | d010efbfb89721bc9ca9e657e980ff0d8e6187af (diff) | |
download | gcc-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.cc | 11 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.cc | 14 |
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); + } } } |