Home | History | Annotate | Download | only in include
      1 /* Header file for internal GCC plugin mechanism.
      2    Copyright (C) 2009-2013 Free Software Foundation, Inc.
      3 
      4 This file is part of GCC.
      5 
      6 GCC is free software; you can redistribute it and/or modify
      7 it under the terms of the GNU General Public License as published by
      8 the Free Software Foundation; either version 3, or (at your option)
      9 any later version.
     10 
     11 GCC is distributed in the hope that it will be useful,
     12 but WITHOUT ANY WARRANTY; without even the implied warranty of
     13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14 GNU General Public License for more details.
     15 
     16 You should have received a copy of the GNU General Public License
     17 along with GCC; see the file COPYING3.  If not see
     18 <http://www.gnu.org/licenses/>.  */
     19 
     20 #ifndef PLUGIN_H
     21 #define PLUGIN_H
     22 
     23 #include "gcc-plugin.h"
     24 
     25 struct attribute_spec;
     26 struct scoped_attributes;
     27 
     28 extern void add_new_plugin (const char *);
     29 extern void parse_plugin_arg_opt (const char *);
     30 extern int invoke_plugin_callbacks_full (int, void *);
     31 extern void initialize_plugins (void);
     32 extern bool plugins_active_p (void);
     33 extern void dump_active_plugins (FILE *);
     34 extern void debug_active_plugins (void);
     35 extern void warn_if_plugins (void);
     36 extern void plugins_internal_error_function (diagnostic_context *,
     37 					     const char *, va_list *);
     38 extern void print_plugins_versions (FILE *file, const char *indent);
     39 extern void print_plugins_help (FILE *file, const char *indent);
     40 extern void finalize_plugins (void);
     41 
     42 extern bool flag_plugin_added;
     43 
     44 /* Called from inside GCC.  Invoke all plugin callbacks registered with
     45    the specified event.
     46    Return PLUGEVT_SUCCESS if at least one callback was called,
     47    PLUGEVT_NO_CALLBACK if there was no callback.
     48 
     49    EVENT    - the event identifier
     50    GCC_DATA - event-specific data provided by the compiler  */
     51 
     52 static inline int
     53 invoke_plugin_callbacks (int event ATTRIBUTE_UNUSED,
     54 			 void *gcc_data ATTRIBUTE_UNUSED)
     55 {
     56 #ifdef ENABLE_PLUGIN
     57   /* True iff at least one plugin has been added.  */
     58   if (flag_plugin_added)
     59     return invoke_plugin_callbacks_full (event, gcc_data);
     60 #endif
     61 
     62   return PLUGEVT_NO_CALLBACK;
     63 }
     64 
     65 /* In attribs.c.  */
     66 
     67 extern void register_attribute (const struct attribute_spec *attr);
     68 extern struct scoped_attributes* register_scoped_attributes (const struct attribute_spec *,
     69 							     const char *);
     70 
     71 #endif /* PLUGIN_H */
     72