Commit 910c02a0 by David Malcolm Committed by David Malcolm

Make gcc::context be GC-managed

	* Makefile.in (GTFILES): Add context.h.
	* context.c (gcc::context::operator new): New.
	(gcc::context::gt_ggc_mx): New.
	(gcc::context::gt_pch_nx): New.
	(gcc::context::gt_pch_nx): New.
	* context.h (gcc::context): Add GTY((user)) marking.
	(gcc::context::operator new): New.
	(gcc::context::gt_ggc_mx): New.
	(gcc::context::gt_pch_nx): New.
	(gcc::context::gt_pch_nx): New.
	(g): Add GTY marking.
	(gt_ggc_mx (gcc::context *)): New.
	(gt_pch_nx (gcc::context *)): New.
	(gt_pch_nx (gcc::context *ctxt, gt_pointer_operator op,
	void *cookie)): New.
	* gengtype.c (open_base_files) <ifiles>: Add context.h.

From-SVN: r201864
parent c2887825
2013-08-20 David Malcolm <dmalcolm@redhat.com>
* Makefile.in (GTFILES): Add context.h.
* context.c (gcc::context::operator new): New.
(gcc::context::gt_ggc_mx): New.
(gcc::context::gt_pch_nx): New.
(gcc::context::gt_pch_nx): New.
* context.h (gcc::context): Add GTY((user)) marking.
(gcc::context::operator new): New.
(gcc::context::gt_ggc_mx): New.
(gcc::context::gt_pch_nx): New.
(gcc::context::gt_pch_nx): New.
(g): Add GTY marking.
(gt_ggc_mx (gcc::context *)): New.
(gt_pch_nx (gcc::context *)): New.
(gt_pch_nx (gcc::context *ctxt, gt_pointer_operator op,
void *cookie)): New.
* gengtype.c (open_base_files) <ifiles>: Add context.h.
2013-08-20 Alan Modra <amodra@gmail.com>
PR target/57865
......
......@@ -3831,6 +3831,7 @@ GTFILES = $(CPP_ID_DATA_H) $(srcdir)/input.h $(srcdir)/coretypes.h \
$(srcdir)/vtable-verify.c \
$(srcdir)/asan.c \
$(srcdir)/tsan.c $(srcdir)/ipa-devirt.c \
$(srcdir)/context.h \
@all_gtfiles@
# Compute the list of GT header files from the corresponding C sources,
......
......@@ -27,7 +27,33 @@ along with GCC; see the file COPYING3. If not see
/* The singleton holder of global state: */
gcc::context *g;
void *
gcc::context::operator new (std::size_t size)
{
return ggc_internal_cleared_alloc_stat (size MEM_STAT_INFO);
}
gcc::context::context()
{
passes_ = new gcc::pass_manager (this);
}
/* Functions relating to the garbage collector. */
void
gcc::context::gt_ggc_mx ()
{
/* Currently a no-op. */
}
void
gcc::context::gt_pch_nx ()
{
/* Currently a no-op. */
}
void
gcc::context::gt_pch_nx (gt_pointer_operator op ATTRIBUTE_UNUSED,
void *cookie ATTRIBUTE_UNUSED)
{
/* Currently a no-op. */
}
......@@ -27,11 +27,30 @@ class pass_manager;
/* GCC's internal state can be divided into zero or more
"parallel universe" of state; an instance of this class is one such
context of state. */
class context
class GTY((user)) context
{
public:
/* Ensure that instances are allocated within the GC-heap. */
void *operator new (std::size_t size);
context();
/* Garbage-collector integration.
Each context assumes it has full control of the GC-heap that it
is associated with. It acts as a root for that GC-heap, owning
references to within it.
Note that context instances are allocated within their own GC
heap.
The methods are called the *first time* that the context is reached
during a ggc/pch traversal, rather than every time. */
void gt_ggc_mx ();
void gt_pch_nx ();
void gt_pch_nx (gt_pointer_operator op, void *cookie);
/* Pass-management. */
pass_manager *get_passes () { gcc_assert (passes_); return passes_; }
......@@ -46,6 +65,42 @@ private:
/* The global singleton context aka "g".
(the name is chosen to be easy to type in a debugger). */
extern gcc::context *g;
extern GTY(()) gcc::context *g;
/* Global hooks for ggc/pch.
The gcc::context class is marked with GTY((user)), which leads to
gengtype creating autogenerated functions for handling context within
gtype-desc.c:
void gt_ggc_mx_context (void *x_p);
void gt_pch_nx_context (void *x_p)
void gt_pch_p_7context (void *this_obj,
void *x_p,
gt_pointer_operator op,
void *cookie);
Those functions call the following global functions the first time
that the context is reached during a traversal, and the following
global functions in turn simply call the corresponding methods of the
context (so that they can access private fields of the context). */
inline void
gt_ggc_mx (gcc::context *ctxt)
{
ctxt->gt_ggc_mx ();
}
inline void
gt_pch_nx (gcc::context *ctxt)
{
ctxt->gt_pch_nx ();
}
inline void
gt_pch_nx (gcc::context *ctxt, gt_pointer_operator op, void *cookie)
{
ctxt->gt_pch_nx (op, cookie);
}
#endif /* ! GCC_CONTEXT_H */
......@@ -1739,7 +1739,7 @@ open_base_files (void)
"tree-flow.h", "reload.h", "cpp-id-data.h", "tree-chrec.h",
"except.h", "output.h", "gimple.h", "cfgloop.h",
"target.h", "ipa-prop.h", "lto-streamer.h", "target-globals.h",
"ipa-inline.h", "dwarf2out.h", NULL
"ipa-inline.h", "dwarf2out.h", "context.h", NULL
};
const char *const *ifp;
outf_p gtype_desc_c;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment