aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>1999-09-08 00:21:45 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>1999-09-08 00:21:45 +0000
commitd07d525a85f68646d68a5a2bc6c885894674ebc3 (patch)
tree54bcc58b2c0e800234553051aa12f275025c8227
parent66815bff316f0adec2af61fba9576754dfae05c0 (diff)
downloadgcc-d07d525a85f68646d68a5a2bc6c885894674ebc3.zip
gcc-d07d525a85f68646d68a5a2bc6c885894674ebc3.tar.gz
gcc-d07d525a85f68646d68a5a2bc6c885894674ebc3.tar.bz2
Add some machine-dependent GC roots.
* sparc.c: Include ggc.h. (sparc_add_gc_roots): New function. (mark_ultrasparc_pipeline_state): Likewise. (override_options): Call sparc_add_gc_roots. * pa.c: Include ggc.h. (pa_add_gc_roots): New function. (mark_deferred_plabels): Likewise. (override_options): Call pa_add_gc_roots. * mips.c: Include ggc.h. (mips_add_gc_roots): New function. (override_options): Use it. From-SVN: r29176
-rw-r--r--gcc/ChangeLog15
-rw-r--r--gcc/config/mips/mips.c20
-rw-r--r--gcc/config/pa/pa.c32
-rw-r--r--gcc/config/sparc/sparc.c41
4 files changed, 107 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5409be5..f1425e9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,18 @@
+Tue Sep 7 17:15:21 1999 Mark Mitchell <mark@codesourcery.com>
+
+ Add some machine-dependent GC roots.
+ * sparc.c: Include ggc.h.
+ (sparc_add_gc_roots): New function.
+ (mark_ultrasparc_pipeline_state): Likewise.
+ (override_options): Call sparc_add_gc_roots.
+ * pa.c: Include ggc.h.
+ (pa_add_gc_roots): New function.
+ (mark_deferred_plabels): Likewise.
+ (override_options): Call pa_add_gc_roots.
+ * mips.c: Include ggc.h.
+ (mips_add_gc_roots): New function.
+ (override_options): Use it.
+
Tue Sep 7 11:39:41 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* cpperror.c (cpp_file_line_for_message): Constify a char*.
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index e65e4be..a192be0 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -48,6 +48,7 @@ Boston, MA 02111-1307, USA. */
#include "flags.h"
#include "reload.h"
#include "output.h"
+#include "ggc.h"
#if defined(USG) || !defined(HAVE_STAB_H)
#include "gstab.h" /* If doing DBX on sysV, use our own stab.h. */
@@ -107,6 +108,7 @@ static rtx mips_find_symbol PROTO ((rtx));
static void abort_with_insn PROTO ((rtx, const char *))
ATTRIBUTE_NORETURN;
static int symbolic_expression_p PROTO ((rtx));
+static void mips_add_gc_roots PROTO ((void));
/* Global variables for machine-dependent things. */
@@ -4509,6 +4511,9 @@ override_options ()
if (align_functions == 0)
align_functions = 8;
}
+
+ /* Register global variables with the garbage collector. */
+ mips_add_gc_roots ();
}
/* On the mips16, we want to allocate $24 (T_REG) before other
@@ -8922,3 +8927,18 @@ mips_output_conditional_branch (insn,
/* NOTREACHED */
return 0;
}
+
+/* Called to register all of our global variables with the garbage
+ collector. */
+
+static void
+mips_add_gc_roots ()
+{
+ ggc_add_rtx_root (&mips_load_reg, 1);
+ ggc_add_rtx_root (&mips_load_reg2, 1);
+ ggc_add_rtx_root (&mips_load_reg3, 1);
+ ggc_add_rtx_root (&mips_load_reg4, 1);
+ ggc_add_rtx_root (branch_cmp, sizeof (branch_cmp) / sizeof (rtx));
+ ggc_add_rtx_root (&embedded_pic_fnaddr_rtx, 1);
+ ggc_add_rtx_root (&mips16_gp_pseudo_rtx, 1);
+}
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index 4bb427e..40054cf 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -38,6 +38,7 @@ Boston, MA 02111-1307, USA. */
#include "expr.h"
#include "obstack.h"
#include "toplev.h"
+#include "ggc.h"
static void restore_unscaled_index_insn_codes PROTO((rtx));
static void record_unscaled_index_insn_codes PROTO((rtx));
@@ -45,6 +46,8 @@ static void pa_combine_instructions PROTO((rtx));
static int pa_can_combine_p PROTO((rtx, rtx, rtx, int, rtx, rtx, rtx));
static int forward_branch_p PROTO((rtx));
static int shadd_constant_p PROTO((int));
+static void pa_add_gc_roots PROTO((void));
+static void mark_deferred_plabels PROTO((void *));
/* Save the operands last given to a compare for use when we
generate a scc or bcc insn. */
@@ -176,6 +179,9 @@ override_options ()
warning ("-g option disabled.");
write_symbols = NO_DEBUG;
}
+
+ /* Register global variables with the garbage collector. */
+ pa_add_gc_roots ();
}
@@ -6516,3 +6522,29 @@ insn_sets_and_refs_are_delayed (insn)
&& GET_CODE (PATTERN (insn)) != CLOBBER
&& get_attr_type (insn) == TYPE_MILLI));
}
+
+/* Mark ARG (which is really a struct deferred_plabel **) for GC. */
+
+static void
+mark_deferred_plabels (arg)
+ void *arg;
+{
+ struct deferred_plabel *dp = *(struct deferred_plabel **) arg;
+ int i;
+
+ for (i = 0; i < n_deferred_plabels; ++i)
+ ggc_mark_rtx (dp[i].internal_label);
+}
+
+/* Called to register all of our global variables with the garbage
+ collector. */
+
+static void
+pa_add_gc_roots ()
+{
+ ggc_add_rtx_root (&hppa_compare_op0, 1);
+ ggc_add_rtx_root (&hppa_compare_op1, 1);
+ ggc_add_rtx_root (&hp_profile_label_rtx, 1);
+ ggc_add_root (&deferred_plabels, sizeof (&deferred_plabels), 1,
+ &mark_deferred_plabels);
+}
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index 622e04b..190a788 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -38,6 +38,7 @@ Boston, MA 02111-1307, USA. */
#include "expr.h"
#include "recog.h"
#include "toplev.h"
+#include "ggc.h"
/* 1 if the caller has placed an "unimp" insn immediately after the call.
This is used in v8 code when calling a function that returns a structure.
@@ -119,7 +120,8 @@ static int ultrasparc_adjust_cost PROTO((rtx, rtx, rtx, int));
static void sparc_output_addr_vec PROTO((rtx));
static void sparc_output_addr_diff_vec PROTO((rtx));
static void sparc_output_deferred_case_vectors PROTO((void));
-
+static void sparc_add_gc_roots PROTO ((void));
+static void mark_ultrasparc_pipeline_state PROTO ((void *));
#ifdef DWARF2_DEBUGGING_INFO
extern char *dwarf2out_cfi_label ();
@@ -331,6 +333,9 @@ sparc_override_options ()
{
error ("profiling does not support code models other than medlow");
}
+
+ /* Register global variables with the garbage collector. */
+ sparc_add_gc_roots ();
}
/* Miscellaneous utilities. */
@@ -7908,3 +7913,37 @@ sparc_function_block_profiler_exit(file)
else
abort ();
}
+
+/* Mark ARG, which is really a struct ultrasparc_pipline_state *, for
+ GC. */
+
+static void
+mark_ultrasparc_pipeline_state (arg)
+ void *arg;
+{
+ struct ultrasparc_pipeline_state *ups;
+ size_t i;
+
+ ups = (struct ultrasparc_pipeline_state *) arg;
+ for (i = 0; i < sizeof (ups->group) / sizeof (rtx); ++i)
+ ggc_mark_rtx (ups->group[i]);
+}
+
+/* Called to register all of our global variables with the garbage
+ collector. */
+
+static void
+sparc_add_gc_roots ()
+{
+ ggc_add_rtx_root (&sparc_compare_op0, 1);
+ ggc_add_rtx_root (&sparc_compare_op1, 1);
+ ggc_add_rtx_root (&leaf_label, 1);
+ ggc_add_rtx_root (&global_offset_table, 1);
+ ggc_add_rtx_root (&get_pc_symbol, 1);
+ ggc_add_rtx_root (&sparc_addr_diff_list, 1);
+ ggc_add_rtx_root (&sparc_addr_list, 1);
+ ggc_add_root (ultra_pipe_hist,
+ sizeof (ultra_pipe_hist) / sizeof (ultra_pipe_hist[0]),
+ sizeof (ultra_pipe_hist[0]),
+ &mark_ultrasparc_pipeline_state);
+}