diff options
author | Taras Glek <tglek@mozilla.com> | 2009-05-21 17:34:43 +0000 |
---|---|---|
committer | Taras Glek <tglek@gcc.gnu.org> | 2009-05-21 17:34:43 +0000 |
commit | 9fefa0aac20b7ca088b4d2fa3bf1abaa8df691f0 (patch) | |
tree | 97cb00e10e01fbc57f7a018ec45a6b6c41fa22bc /gcc | |
parent | 1ea9fe562c2e9c3a7772304e588aba86d8e58152 (diff) | |
download | gcc-9fefa0aac20b7ca088b4d2fa3bf1abaa8df691f0.zip gcc-9fefa0aac20b7ca088b4d2fa3bf1abaa8df691f0.tar.gz gcc-9fefa0aac20b7ca088b4d2fa3bf1abaa8df691f0.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/doc/plugins.texi | 27 | ||||
-rw-r--r-- | gcc/gcc-plugin.h | 29 | ||||
-rw-r--r-- | gcc/plugin.c | 16 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/plugin/attribute_plugin.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/plugin/dumb_plugin.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/plugin/selfassign.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/plugin/selfassign.c | 7 |
9 files changed, 76 insertions, 39 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8b7c623..646ea22 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +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. diff --git a/gcc/doc/plugins.texi b/gcc/doc/plugins.texi index 1710395..cf5d2af 100644 --- a/gcc/doc/plugins.texi +++ b/gcc/doc/plugins.texi @@ -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); ... @} diff --git a/gcc/gcc-plugin.h b/gcc/gcc-plugin.h index ba20b42..e788eb7 100644 --- a/gcc/gcc-plugin.h +++ b/gcc/gcc-plugin.h @@ -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. diff --git a/gcc/plugin.c b/gcc/plugin.c index 9362e6a..6cee526 100644 --- a/gcc/plugin.c +++ b/gcc/plugin.c @@ -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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e1db42b..f477d31 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +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. diff --git a/gcc/testsuite/g++.dg/plugin/attribute_plugin.c b/gcc/testsuite/g++.dg/plugin/attribute_plugin.c index d071762..2624ea2 100644 --- a/gcc/testsuite/g++.dg/plugin/attribute_plugin.c +++ b/gcc/testsuite/g++.dg/plugin/attribute_plugin.c @@ -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); diff --git a/gcc/testsuite/g++.dg/plugin/dumb_plugin.c b/gcc/testsuite/g++.dg/plugin/dumb_plugin.c index 839dc2b..81e68eb 100644 --- a/gcc/testsuite/g++.dg/plugin/dumb_plugin.c +++ b/gcc/testsuite/g++.dg/plugin/dumb_plugin.c @@ -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; diff --git a/gcc/testsuite/g++.dg/plugin/selfassign.c b/gcc/testsuite/g++.dg/plugin/selfassign.c index 6fbce83..9e7e84c 100644 --- a/gcc/testsuite/g++.dg/plugin/selfassign.c +++ b/gcc/testsuite/g++.dg/plugin/selfassign.c @@ -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; diff --git a/gcc/testsuite/gcc.dg/plugin/selfassign.c b/gcc/testsuite/gcc.dg/plugin/selfassign.c index 6fbce83..9e7e84c 100644 --- a/gcc/testsuite/gcc.dg/plugin/selfassign.c +++ b/gcc/testsuite/gcc.dg/plugin/selfassign.c @@ -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; |