aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTaras Glek <tglek@mozilla.com>2009-05-21 17:34:43 +0000
committerTaras Glek <tglek@gcc.gnu.org>2009-05-21 17:34:43 +0000
commit9fefa0aac20b7ca088b4d2fa3bf1abaa8df691f0 (patch)
tree97cb00e10e01fbc57f7a018ec45a6b6c41fa22bc /gcc
parent1ea9fe562c2e9c3a7772304e588aba86d8e58152 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/doc/plugins.texi27
-rw-r--r--gcc/gcc-plugin.h29
-rw-r--r--gcc/plugin.c16
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/g++.dg/plugin/attribute_plugin.c6
-rw-r--r--gcc/testsuite/g++.dg/plugin/dumb_plugin.c8
-rw-r--r--gcc/testsuite/g++.dg/plugin/selfassign.c7
-rw-r--r--gcc/testsuite/gcc.dg/plugin/selfassign.c7
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;