Next: Plugins description, Previous: Plugins pass, Up: Plugins [Contents][Index]
Some plugins may want to be informed when GGC (the GCC Garbage
Collector) is running. They can register callbacks for the
PLUGIN_GGC_START and PLUGIN_GGC_END events (for which
the callback is called with a null gcc_data) to be notified of
the start or end of the GCC garbage collection.
Some plugins may need to have GGC mark additional data. This can be
done by registering a callback (called with a null gcc_data)
for the PLUGIN_GGC_MARKING event. Such callbacks can call the
ggc_set_mark routine, preferably through the ggc_mark macro
(and conversely, these routines should usually not be used in plugins
outside of the PLUGIN_GGC_MARKING event).
Some plugins may need to add extra GGC root tables, e.g. to handle their own
GTY-ed data. This can be done with the PLUGIN_REGISTER_GGC_ROOTS
pseudo-event with a null callback and the extra root table (of type struct
ggc_root_tab*) as user_data. Plugins that want to use the
if_marked hash table option can add the extra GGC cache tables generated
by gengtype using the PLUGIN_REGISTER_GGC_CACHES pseudo-event with
a null callback and the extra cache table (of type struct ggc_cache_tab*)
as user_data. Running the gengtype -p source-dir
file-list plugin*.c ... utility generates these extra root tables.
You should understand the details of memory management inside GCC
before using PLUGIN_GGC_MARKING, PLUGIN_REGISTER_GGC_ROOTS
or PLUGIN_REGISTER_GGC_CACHES.