aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2011-07-23 13:27:32 -0700
committerRichard Henderson <rth@gcc.gnu.org>2011-07-23 13:27:32 -0700
commit6ffc63e112d416582184b8e65db22feb320ae24a (patch)
tree45d307c66bacd0b702a1a606d3d555dd7553d5f3 /gcc
parent999646c1ee2b7e11c5beb86109fe660ca4d4235f (diff)
downloadgcc-6ffc63e112d416582184b8e65db22feb320ae24a.zip
gcc-6ffc63e112d416582184b8e65db22feb320ae24a.tar.gz
gcc-6ffc63e112d416582184b8e65db22feb320ae24a.tar.bz2
dwarf2cfi: Allocate reg_saved_in_data in the heap.
* dwarf2cfi.c (regs_saved_in_regs): Allocate from heap, not gc. Update all users to match. (execute_dwarf2_frame): Free reg_saved_in_data. From-SVN: r176703
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/dwarf2cfi.c19
2 files changed, 16 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 45ad5af..5b0c583 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2011-07-23 Richard Henderson <rth@redhat.com>
+ * dwarf2cfi.c (regs_saved_in_regs): Allocate from heap, not gc.
+ Update all users to match.
+ (execute_dwarf2_frame): Free reg_saved_in_data.
+
+2011-07-23 Richard Henderson <rth@redhat.com>
+
* dwarf2cfi.c (queued_reg_save): Reorder for packing. Don't GTY.
(queued_reg_saves): Don't GTY. Change to a VEC.
(queue_reg_save): Update to match.
diff --git a/gcc/dwarf2cfi.c b/gcc/dwarf2cfi.c
index a800cb4..1d6413f 100644
--- a/gcc/dwarf2cfi.c
+++ b/gcc/dwarf2cfi.c
@@ -1109,13 +1109,13 @@ typedef struct GTY(()) reg_saved_in_data {
} reg_saved_in_data;
DEF_VEC_O (reg_saved_in_data);
-DEF_VEC_ALLOC_O (reg_saved_in_data, gc);
+DEF_VEC_ALLOC_O (reg_saved_in_data, heap);
/* A set of registers saved in other registers. This is implemented as
a flat array because it normally contains zero or 1 entry, depending
on the target. IA-64 is the big spender here, using a maximum of
5 entries. */
-static GTY(()) VEC(reg_saved_in_data, gc) *regs_saved_in_regs;
+static VEC(reg_saved_in_data, heap) *regs_saved_in_regs;
static GTY(()) reg_saved_in_data *cie_return_save;
@@ -1161,7 +1161,7 @@ record_reg_saved_in_reg (rtx dest, rtx src)
if (dest == NULL)
return;
- elt = VEC_safe_push(reg_saved_in_data, gc, regs_saved_in_regs, NULL);
+ elt = VEC_safe_push(reg_saved_in_data, heap, regs_saved_in_regs, NULL);
elt->orig_reg = src;
elt->saved_in_reg = dest;
}
@@ -2699,6 +2699,9 @@ initial_return_save (rtx rtl)
static unsigned int
execute_dwarf2_frame (void)
{
+ gcc_checking_assert (queued_reg_saves == NULL);
+ gcc_checking_assert (regs_saved_in_regs == NULL);
+
/* The first time we're called, compute the incoming frame state. */
if (cie_cfi_vec == NULL)
{
@@ -2737,7 +2740,7 @@ execute_dwarf2_frame (void)
cie_return_save = ggc_alloc_reg_saved_in_data ();
*cie_return_save = *VEC_index (reg_saved_in_data,
regs_saved_in_regs, 0);
- regs_saved_in_regs = NULL;
+ VEC_pop (reg_saved_in_data, regs_saved_in_regs);
break;
default:
gcc_unreachable ();
@@ -2748,12 +2751,10 @@ execute_dwarf2_frame (void)
}
/* Set up state for generating call frame debug info. */
- gcc_checking_assert (queued_reg_saves == NULL);
- gcc_checking_assert (regs_saved_in_regs == NULL);
-
cur_row = copy_cfi_row (cie_cfi_row);
if (cie_return_save)
- VEC_safe_push (reg_saved_in_data, gc, regs_saved_in_regs, cie_return_save);
+ VEC_safe_push (reg_saved_in_data, heap,
+ regs_saved_in_regs, cie_return_save);
cfa_store = cur_row->cfa;
args_size = 0;
@@ -2770,7 +2771,7 @@ execute_dwarf2_frame (void)
/* Reset all function-specific information, particularly for GC. */
XDELETEVEC (barrier_args_size);
barrier_args_size = NULL;
- regs_saved_in_regs = NULL;
+ VEC_free (reg_saved_in_data, heap, regs_saved_in_regs);
VEC_free (queued_reg_save, heap, queued_reg_saves);
free_cfi_row (cur_row);