Commit 9fefa0aa by Taras Glek Committed by Taras Glek

plugin.c (try_init_one_plugin): Updated to new plugin_init API.

gcc/ChangeLog
	* plugin.c (try_init_one_plugin): Updated to new plugin_init API.
	* gcc-plugin.h (plugin_init): Updated signature.
	* gcc-plugin.h (plugin_name_args): Moved to this header.
	* doc/plugins.texi (plugin_init): Updated documention to reflect API change.
	* doc/plugins.texi (plugin_name_args): Added to documention.
gcc/testsuite/ChangeLog
	* gcc.dg/plugin/selfassign.c (plugin_init): Updated to new plugin_init signature.
	* g++.dg/plugin/selfassign.c (plugin_init): Updated to new plugin_init signature.
	* g++.dg/plugin/dumb_plugin.c (plugin_init): Updated to new plugin_init signature.
	* g++.dg/plugin/attribute_plugin.c (plugin_init): Updated to new plugin_init signature.

From-SVN: r147772
parent 1ea9fe56
2009-05-21 Taras Glek <tglek@mozilla.com>
* plugin.c (try_init_one_plugin): Updated to new plugin_init API.
* gcc-plugin.h (plugin_init): Updated signature.
* gcc-plugin.h (plugin_name_args): Moved to this header.
* doc/plugins.texi (plugin_init): Updated documention to reflect API change.
* doc/plugins.texi (plugin_name_args): Added to documention.
2009-05-21 Mark Mitchell <mark@codesourcery.com>
* config/arm/neon.md (*mul<mode>3add<mode>_neon): New pattern.
......
......@@ -41,11 +41,27 @@ This function is called from @code{compile_file} right before invoking
the parser. The arguments to @code{plugin_init} are:
@itemize @bullet
@item @code{plugin_name}: Name of the plugin.
@item @code{argc}: Number of arguments specified with @option{-fplugin-arg-...}.
@item @code{argv}: Array of @code{argc} key-value pairs.
@item @code{plugin_info}: Plugin invocation information.
@item @code{version}: GCC version.
@end itemize
The @code{plugin_info} struct is defined as follows:
@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. */
@}
@end smallexample
If initialization fails, @code{plugin_init} must return a non-zero
value. Otherwise, it should return 0.
......@@ -120,7 +136,8 @@ struct plugin_pass
/* Sample plugin code that registers a new pass. */
int
plugin_init (const char *plugin_name, int argc, struct plugin_argument *argv)
plugin_init (struct plugin_name_args *plugin_info,
struct plugin_gcc_version *version)
@{
struct plugin_pass pass_info;
......@@ -131,7 +148,7 @@ plugin_init (const char *plugin_name, int argc, struct plugin_argument *argv)
...
/* Register the new pass. */
register_callback (plugin_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &pass_info);
register_callback (plugin_info->base_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &pass_info);
...
@}
......
......@@ -79,6 +79,20 @@ struct plugin_gcc_version
const char *configuration_arguments;
};
/* Object that keeps track of the plugin name and its arguments. */
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. */
};
/* The default version check. Compares every field in VERSION. */
extern bool plugin_default_version_check (struct plugin_gcc_version *,
......@@ -88,21 +102,18 @@ extern bool plugin_default_version_check (struct plugin_gcc_version *,
should define this as an externally-visible function with name
"plugin_init."
PLUGIN_NAME - name of the plugin (useful for error reporting)
VERSION - the plugin_gcc_version symbol of the plugin itself.
ARGC - the size of the ARGV array
ARGV - an array of key-value argument pair
PLUGIN_INFO - plugin invocation information.
VERSION - the plugin_gcc_version symbol of GCC.
Returns 0 if initialization finishes successfully. */
typedef int (*plugin_init_func) (const char *plugin_name,
struct plugin_gcc_version *version,
int argc, struct plugin_argument *argv);
typedef int (*plugin_init_func) (struct plugin_name_args *plugin_info,
struct plugin_gcc_version *version);
/* Declaration for "plugin_init" function so that it doesn't need to be
duplicated in every plugin. */
extern int plugin_init (const char *, struct plugin_gcc_version *version,
int, struct plugin_argument *);
extern int plugin_init (struct plugin_name_args *plugin_info,
struct plugin_gcc_version *version);
/* Function type for a plugin callback routine.
......
......@@ -54,19 +54,6 @@ const char *plugin_event_name[] =
"PLUGIN_EVENT_LAST"
};
/* Object that keeps track of the plugin name and its arguments
when parsing the command-line options -fplugin=/path/to/NAME.so and
-fplugin-arg-NAME-<key>[=<value>]. */
struct plugin_name_args
{
char *base_name;
const char *full_name;
int argc;
struct plugin_argument *argv;
const char *version;
const char *help;
};
/* Hash table for the plugin_name_args objects created during command-line
parsing. */
static htab_t plugin_name_args_tab = NULL;
......@@ -596,8 +583,7 @@ try_init_one_plugin (struct plugin_name_args *plugin)
}
/* Call the plugin-provided initialization routine with the arguments. */
if ((*plugin_init) (plugin->base_name, &gcc_version, plugin->argc,
plugin->argv))
if ((*plugin_init) (plugin, &gcc_version))
{
error ("Fail to initialize plugin %s", plugin->full_name);
return false;
......
2009-05-21 Taras Glek <tglek@mozilla.com>
* gcc.dg/plugin/selfassign.c (plugin_init): Updated to new plugin_init signature.
* g++.dg/plugin/selfassign.c (plugin_init): Updated to new plugin_init signature.
* g++.dg/plugin/dumb_plugin.c (plugin_init): Updated to new plugin_init signature.
* g++.dg/plugin/attribute_plugin.c (plugin_init): Updated to new plugin_init signature.
2009-05-21 Mark Mitchell <mark@codesourcery.com>
* gcc.dg/target/arm/neon-vmla-1.c: New.
......
......@@ -54,10 +54,10 @@ handle_pre_generic (void *event_data, void *data)
}
int
plugin_init (const char *plugin_name,
struct plugin_gcc_version *version,
int argc, struct plugin_argument *argv)
plugin_init (struct plugin_name_args *plugin_info,
struct plugin_gcc_version *version)
{
const char *plugin_name = plugin_info->base_name;
register_callback (plugin_name, PLUGIN_CXX_CP_PRE_GENERICIZE,
handle_pre_generic, NULL);
......
......@@ -78,11 +78,13 @@ static struct gimple_opt_pass pass_dumb_plugin_example =
both of which determine where the plugin pass should be inserted. */
int
plugin_init (const char *plugin_name,
struct plugin_gcc_version *version __attribute__((unused)),
int argc, struct plugin_argument *argv)
plugin_init (struct plugin_name_args *plugin_info,
struct plugin_gcc_version *version)
{
struct plugin_pass pass_info;
const char *plugin_name = plugin_info->base_name;
int argc = plugin_info->argc;
struct plugin_argument *argv = plugin_info->argv;
char *ref_pass_name = NULL;
int ref_instance_number = 0;
int i;
......
......@@ -294,10 +294,13 @@ static struct gimple_opt_pass pass_warn_self_assign =
Note that this function needs to be named exactly "plugin_init". */
int
plugin_init (const char *plugin_name, struct plugin_gcc_version *version,
int argc, struct plugin_argument *argv)
plugin_init (struct plugin_name_args *plugin_info,
struct plugin_gcc_version *version)
{
struct plugin_pass pass_info;
const char *plugin_name = plugin_info->base_name;
int argc = plugin_info->argc;
struct plugin_argument *argv = plugin_info->argv;
bool enabled = true;
int i;
......
......@@ -294,10 +294,13 @@ static struct gimple_opt_pass pass_warn_self_assign =
Note that this function needs to be named exactly "plugin_init". */
int
plugin_init (const char *plugin_name, struct plugin_gcc_version *version,
int argc, struct plugin_argument *argv)
plugin_init (struct plugin_name_args *plugin_info,
struct plugin_gcc_version *version)
{
struct plugin_pass pass_info;
const char *plugin_name = plugin_info->base_name;
int argc = plugin_info->argc;
struct plugin_argument *argv = plugin_info->argv;
bool enabled = true;
int i;
......
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