<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2015 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Funding Free Software", the Front-Cover
Texts being (a) (see below), and with the Back-Cover Texts being (b)
(see below).  A copy of the license is included in the section entitled
"GNU Free Documentation License".

(a) The FSF's Front-Cover Text is:

A GNU Manual

(b) The FSF's Back-Cover Text is:

You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development. -->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU Compiler Collection (GCC) Internals: Plugin API</title>

<meta name="description" content="GNU Compiler Collection (GCC) Internals: Plugin API">
<meta name="keywords" content="GNU Compiler Collection (GCC) Internals: Plugin API">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Plugins.html#Plugins" rel="up" title="Plugins">
<link href="Plugins-pass.html#Plugins-pass" rel="next" title="Plugins pass">
<link href="Plugins-loading.html#Plugins-loading" rel="prev" title="Plugins loading">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Plugin-API"></a>
<div class="header">
<p>
Next: <a href="Plugins-pass.html#Plugins-pass" accesskey="n" rel="next">Plugins pass</a>, Previous: <a href="Plugins-loading.html#Plugins-loading" accesskey="p" rel="prev">Plugins loading</a>, Up: <a href="Plugins.html#Plugins" accesskey="u" rel="up">Plugins</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Plugin-API-1"></a>
<h3 class="section">23.2 Plugin API</h3>

<p>Plugins are activated by the compiler at specific events as defined in
<samp>gcc-plugin.h</samp>.  For each event of interest, the plugin should
call <code>register_callback</code> specifying the name of the event and
address of the callback function that will handle that event.
</p>
<p>The header <samp>gcc-plugin.h</samp> must be the first gcc header to be included.
</p>
<a name="Plugin-license-check"></a>
<h4 class="subsection">23.2.1 Plugin license check</h4>

<p>Every plugin should define the global symbol <code>plugin_is_GPL_compatible</code>
to assert that it has been licensed under a GPL-compatible license.
If this symbol does not exist, the compiler will emit a fatal error
and exit with the error message:
</p>
<div class="smallexample">
<pre class="smallexample">fatal error: plugin <var>name</var> is not licensed under a GPL-compatible license
<var>name</var>: undefined symbol: plugin_is_GPL_compatible
compilation terminated
</pre></div>

<p>The declared type of the symbol should be int, to match a forward declaration
in <samp>gcc-plugin.h</samp> that suppresses C++ mangling.  It does not need to be in
any allocated section, though.  The compiler merely asserts that
the symbol exists in the global scope.  Something like this is enough:
</p>
<div class="smallexample">
<pre class="smallexample">int plugin_is_GPL_compatible;
</pre></div>

<a name="Plugin-initialization"></a>
<h4 class="subsection">23.2.2 Plugin initialization</h4>

<p>Every plugin should export a function called <code>plugin_init</code> that
is called right after the plugin is loaded. This function is
responsible for registering all the callbacks required by the plugin
and do any other required initialization.
</p>
<p>This function is called from <code>compile_file</code> right before invoking
the parser.  The arguments to <code>plugin_init</code> are:
</p>
<ul>
<li> <code>plugin_info</code>: Plugin invocation information.
</li><li> <code>version</code>: GCC version.
</li></ul>

<p>The <code>plugin_info</code> struct is defined as follows:
</p>
<div class="smallexample">
<pre class="smallexample">struct plugin_name_args
{
  char *base_name;              /* Short name of the plugin
                                   (filename without .so suffix). */
  const char *full_name;        /* Path to the plugin as specified with
                                   -fplugin=. */
  int argc;                     /* Number of arguments specified with
                                   -fplugin-arg-.... */
  struct plugin_argument *argv; /* Array of ARGC key-value pairs. */
  const char *version;          /* Version string provided by plugin. */
  const char *help;             /* Help string provided by plugin. */
}
</pre></div>

<p>If initialization fails, <code>plugin_init</code> must return a non-zero
value.  Otherwise, it should return 0.
</p>
<p>The version of the GCC compiler loading the plugin is described by the
following structure:
</p>
<div class="smallexample">
<pre class="smallexample">struct plugin_gcc_version
{
  const char *basever;
  const char *datestamp;
  const char *devphase;
  const char *revision;
  const char *configuration_arguments;
};
</pre></div>

<p>The function <code>plugin_default_version_check</code> takes two pointers to
such structure and compare them field by field. It can be used by the
plugin&rsquo;s <code>plugin_init</code> function.
</p>
<p>The version of GCC used to compile the plugin can be found in the symbol
<code>gcc_version</code> defined in the header <samp>plugin-version.h</samp>. The
recommended version check to perform looks like
</p>
<div class="smallexample">
<pre class="smallexample">#include &quot;plugin-version.h&quot;
...

int
plugin_init (struct plugin_name_args *plugin_info,
             struct plugin_gcc_version *version)
{
  if (!plugin_default_version_check (version, &amp;gcc_version))
    return 1;

}
</pre></div>

<p>but you can also check the individual fields if you want a less strict check.
</p>
<a name="Plugin-callbacks"></a>
<h4 class="subsection">23.2.3 Plugin callbacks</h4>

<p>Callback functions have the following prototype:
</p>
<div class="smallexample">
<pre class="smallexample">/* The prototype for a plugin callback function.
     gcc_data  - event-specific data provided by GCC
     user_data - plugin-specific data provided by the plug-in.  */
typedef void (*plugin_callback_func)(void *gcc_data, void *user_data);
</pre></div>

<p>Callbacks can be invoked at the following pre-determined events:
</p>

<div class="smallexample">
<pre class="smallexample">enum plugin_event
{
  PLUGIN_PASS_MANAGER_SETUP,    /* To hook into pass manager.  */
  PLUGIN_FINISH_TYPE,           /* After finishing parsing a type.  */
  PLUGIN_FINISH_DECL,           /* After finishing parsing a declaration. */
  PLUGIN_FINISH_UNIT,           /* Useful for summary processing.  */
  PLUGIN_PRE_GENERICIZE,        /* Allows to see low level AST in C and C++ frontends.  */
  PLUGIN_FINISH,                /* Called before GCC exits.  */
  PLUGIN_INFO,                  /* Information about the plugin. */
  PLUGIN_GGC_START,             /* Called at start of GCC Garbage Collection. */
  PLUGIN_GGC_MARKING,           /* Extend the GGC marking. */
  PLUGIN_GGC_END,               /* Called at end of GGC. */
  PLUGIN_REGISTER_GGC_ROOTS,    /* Register an extra GGC root table. */
  PLUGIN_ATTRIBUTES,            /* Called during attribute registration */
  PLUGIN_START_UNIT,            /* Called before processing a translation unit.  */
  PLUGIN_PRAGMAS,               /* Called during pragma registration. */
  /* Called before first pass from all_passes.  */
  PLUGIN_ALL_PASSES_START,
  /* Called after last pass from all_passes.  */
  PLUGIN_ALL_PASSES_END,
  /* Called before first ipa pass.  */
  PLUGIN_ALL_IPA_PASSES_START,
  /* Called after last ipa pass.  */
  PLUGIN_ALL_IPA_PASSES_END,
  /* Allows to override pass gate decision for current_pass.  */
  PLUGIN_OVERRIDE_GATE,
  /* Called before executing a pass.  */
  PLUGIN_PASS_EXECUTION,
  /* Called before executing subpasses of a GIMPLE_PASS in
     execute_ipa_pass_list.  */
  PLUGIN_EARLY_GIMPLE_PASSES_START,
  /* Called after executing subpasses of a GIMPLE_PASS in
     execute_ipa_pass_list.  */
  PLUGIN_EARLY_GIMPLE_PASSES_END,
  /* Called when a pass is first instantiated.  */
  PLUGIN_NEW_PASS,
/* Called when a file is #include-d or given via the #line directive.
   This could happen many times.  The event data is the included file path,
   as a const char* pointer.  */
  PLUGIN_INCLUDE_FILE,

  PLUGIN_EVENT_FIRST_DYNAMIC    /* Dummy event used for indexing callback
                                   array.  */
};
</pre></div>

<p>In addition, plugins can also look up the enumerator of a named event,
and / or generate new events dynamically, by calling the function
<code>get_named_event_id</code>.
</p>
<p>To register a callback, the plugin calls <code>register_callback</code> with
the arguments:
</p>
<ul>
<li> <code>char *name</code>: Plugin name.
</li><li> <code>int event</code>: The event code.
</li><li> <code>plugin_callback_func callback</code>: The function that handles <code>event</code>.
</li><li> <code>void *user_data</code>: Pointer to plugin-specific data.
</li></ul>

<p>For the <i>PLUGIN_PASS_MANAGER_SETUP</i>, <i>PLUGIN_INFO</i>, and
<i>PLUGIN_REGISTER_GGC_ROOTS</i> pseudo-events the <code>callback</code> should be null,
and the <code>user_data</code> is specific.
</p>
<p>When the <i>PLUGIN_PRAGMAS</i> event is triggered (with a null pointer as
data from GCC), plugins may register their own pragmas.  Notice that
pragmas are not available from <samp>lto1</samp>, so plugins used with
<code>-flto</code> option to GCC during link-time optimization cannot use
pragmas and do not even see functions like <code>c_register_pragma</code> or
<code>pragma_lex</code>.
</p>
<p>The <i>PLUGIN_INCLUDE_FILE</i> event, with a <code>const char*</code> file path as
GCC data, is triggered for processing of <code>#include</code> or
<code>#line</code> directives.
</p>
<p>The <i>PLUGIN_FINISH</i> event is the last time that plugins can call GCC
functions, notably emit diagnostics with <code>warning</code>, <code>error</code>
etc.
</p>

<hr>
<div class="header">
<p>
Next: <a href="Plugins-pass.html#Plugins-pass" accesskey="n" rel="next">Plugins pass</a>, Previous: <a href="Plugins-loading.html#Plugins-loading" accesskey="p" rel="prev">Plugins loading</a>, Up: <a href="Plugins.html#Plugins" accesskey="u" rel="up">Plugins</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>
