This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: patch PLUGIN_HEADER_FILE event for tracing of header inclusions.
- From: Basile Starynkevitch <basile at starynkevitch dot net>
- To: "Joseph S. Myers" <joseph at codesourcery dot com>, dnovillo at google dot com
- Cc: Basile Starynkevitch <basile at starynkevitch dot net>, gcc-patches at gcc dot gnu dot org
- Date: Tue, 19 Nov 2013 10:48:11 +0100
- Subject: Re: patch PLUGIN_HEADER_FILE event for tracing of header inclusions.
- Authentication-results: sourceware.org; auth=none
- References: <1384801563 dot 26782 dot 20 dot camel at glinka dot lesours> <Pine dot LNX dot 4 dot 64 dot 1311182249080 dot 8831 at digraph dot polyomino dot org dot uk>
On Mon, Nov 18, 2013 at 10:50:10PM +0000, Joseph S. Myers wrote:
> On Mon, 18 Nov 2013, Basile Starynkevitch wrote:
>
> > @@ -43,6 +44,7 @@
> > TARGET_OPTF. */
> > #include "tm_p.h" /* For C_COMMON_OVERRIDE_OPTIONS. */
> >
> > +
> > #ifndef DOLLARS_IN_IDENTIFIERS
> > # define DOLLARS_IN_IDENTIFIERS true
> > #endif
>
> This is a spurious diff hunk that should not be in this patch.
>
> OK minus the spurious change in the absence of objections from the plugin
> maintainers within 48 hours (or in the presence of approval from either of
> them).
Thanks for your attention. I am attaching a slightly improved patch
against trunk svn rev. 305009 (the improvements are removing the spurious
diff hunk, and better comments.)
##### gcc/c-family/ChangeLog entry :
2013-11-19 Basile Starynkevitch <basile@starynkevitch.net>
* c-opts.c: Include plugin.h.
(cb_file_change): Invoke plugin event PLUGIN_INCLUDE_FILE.
##### gcc/ChangeLog entry :
2013-11-19 Basile Starynkevitch <basile@starynkevitch.net>
* plugin.def (PLUGIN_INCLUDE_FILE): New event, invoked in
cb_file_change.
###
Ok for trunk?
Regards.
--
Basile STARYNKEVITCH http://starynkevitch.net/Basile/
email: basile<at>starynkevitch<dot>net mobile: +33 6 8501 2359
8, rue de la Faiencerie, 92340 Bourg La Reine, France
*** opinions {are only mines, sont seulement les miennes} ***
Index: gcc/c-family/c-opts.c
===================================================================
--- gcc/c-family/c-opts.c (revision 205009)
+++ gcc/c-family/c-opts.c (working copy)
@@ -34,6 +34,7 @@ along with GCC; see the file COPYING3. If not see
#include "debug.h" /* For debug_hooks. */
#include "opts.h"
#include "options.h"
+#include "plugin.h" /* For PLUGIN_INCLUDE_FILE event. */
#include "mkdeps.h"
#include "c-target.h"
#include "tm.h" /* For BYTES_BIG_ENDIAN,
@@ -1397,6 +1398,17 @@ cb_file_change (cpp_reader * ARG_UNUSED (pfile),
else
fe_file_change (new_map);
+ if (new_map
+ && (new_map->reason == LC_ENTER || new_map->reason == LC_RENAME))
+ {
+ /* Signal to plugins that a file is included. This could happen
+ several times with the same file path, e.g. because of
+ several '#include' or '#line' directives... */
+ invoke_plugin_callbacks
+ (PLUGIN_INCLUDE_FILE,
+ const_cast<char*> (ORDINARY_MAP_FILE_NAME (new_map)));
+ }
+
if (new_map == 0 || (new_map->reason == LC_LEAVE && MAIN_FILE_P (new_map)))
{
pch_cpp_save_state ();
Index: gcc/plugin.def
===================================================================
--- gcc/plugin.def (revision 205009)
+++ gcc/plugin.def (working copy)
@@ -92,6 +92,12 @@ DEFEVENT (PLUGIN_EARLY_GIMPLE_PASSES_END)
/* Called when a pass is first instantiated. */
DEFEVENT (PLUGIN_NEW_PASS)
+/* Called when a file is #include-d or given thru #line directive.
+ Could happen many times. The event data is the included file path,
+ as a const char* pointer. */
+DEFEVENT (PLUGIN_INCLUDE_FILE)
+
+
/* After the hard-coded events above, plugins can dynamically allocate events
at run time.
PLUGIN_EVENT_FIRST_DYNAMIC only appears as last enum element. */