plugin.c (try_init_one_plugin): Updated to new plugin_init API.
authorTaras Glek <tglek@mozilla.com>
Thu, 21 May 2009 17:34:43 +0000 (17:34 +0000)
committerTaras Glek <tglek@gcc.gnu.org>
Thu, 21 May 2009 17:34:43 +0000 (17:34 +0000)
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

gcc/ChangeLog
gcc/doc/plugins.texi
gcc/gcc-plugin.h
gcc/plugin.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/plugin/attribute_plugin.c
gcc/testsuite/g++.dg/plugin/dumb_plugin.c
gcc/testsuite/g++.dg/plugin/selfassign.c
gcc/testsuite/gcc.dg/plugin/selfassign.c

index 8b7c623fce8d1071142e3359ce878078fc42a865..646ea22b32b74ceccabbcf6a508ddd4e2306155c 100644 (file)
@@ -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.
index 1710395b50d2d92f39587d313e35c47fb1d533c4..cf5d2af1221b52e6b7fc8d478c8acb57bcf1c382 100644 (file)
@@ -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);
 
   ...
 @}
index ba20b42475c1226db1729631cd71366dc8f62474..e788eb731bb8f63af73edb18d61bd520d34e0c7b 100644 (file)
@@ -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.
 
index 9362e6a23e572ae06fd431b7b474139f141eae55..6cee526cf76d86a3465530fb829b57b63c8e4c8d 100644 (file)
@@ -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;
index e1db42b1614220a302e82a5ed40d06798bfd4c53..f477d318b8c701eb8bb88d4164cf596bbb70d441 100644 (file)
@@ -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.
index d071762102b4ea8842098087d421e98e94615841..2624ea2da0c26a991830f9297a95d749bb1e83da 100644 (file)
@@ -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);
 
index 839dc2b1c8a28d4aed4298ce16afccf0c6aae01e..81e68eb5e51a4311636e6809427466a67e307e57 100644 (file)
@@ -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;
index 6fbce83c01d5139fcb6191fe27e15ba124e5deda..9e7e84c2db06285abb36ed774ac985743ef02e1e 100644 (file)
@@ -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;
 
index 6fbce83c01d5139fcb6191fe27e15ba124e5deda..9e7e84c2db06285abb36ed774ac985743ef02e1e 100644 (file)
@@ -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;