This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[mudflap] timing of mudflap_finish vs. unaccessed global decls


Hi -

As noticed by Doug Graham in <http://gcc.gnu.org/ml/gcc/2004-10/msg00168.html>,
a bug sneaked into mudflap instrumentation of global variables.  The bug
came about from the callgraph code, which leaves processing of unreferenced
global decls until too late.  The following patch corrects this by in turn
deferring the "mudflap_finish_file" call nearer the posterior of toplev.c's
compile_file() function.  This bootstraps on x86 and x86_64, but can someone
confirm that this is about a good place for the call as any?

- FChE


2004-10-12  Frank Ch. Eigler  <fche@redhat.com>

	* toplev.c (compile_file): Call mudflap_finish_file from here ...
	* c-decl.c (c_write_global_declarations): ... instead of here ...
	* cp/decl.c (cp_finish_file): ... and here.
	* tree-mudflap.c (mudflap_enqueue_decl): Reword a warning message.


Index: c-decl.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-decl.c,v
retrieving revision 1.599
diff -u -w -s -p -r1.599 c-decl.c
--- c-decl.c	10 Oct 2004 19:20:28 -0000	1.599
+++ c-decl.c	12 Oct 2004 19:54:25 -0000
@@ -7300,11 +7300,6 @@ c_write_global_declarations (void)
   /* We're done parsing; proceed to optimize and emit assembly.
      FIXME: shouldn't be the front end's responsibility to call this.  */
   cgraph_optimize ();
-
-  /* Presently this has to happen after cgraph_optimize.
-     FIXME: shouldn't be the front end's responsibility to call this.  */
-  if (flag_mudflap)
-    mudflap_finish_file ();
 }
 
 #include "gt-c-decl.h"
Index: toplev.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/toplev.c,v
retrieving revision 1.927
diff -u -w -s -p -r1.927 toplev.c
--- toplev.c	28 Sep 2004 20:34:17 -0000	1.927
+++ toplev.c	12 Oct 2004 19:54:26 -0000
@@ -80,6 +80,7 @@ Software Foundation, 59 Temple Place - S
 #include "coverage.h"
 #include "value-prof.h"
 #include "alloc-pool.h"
+#include "tree-mudflap.h"
 
 #if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO)
 #include "dwarf2out.h"
@@ -1004,6 +1005,10 @@ compile_file (void)
      functions in this compilation unit were deferred.  */
   coverage_finish ();
 
+  /* Likewise for mudflap static object registrations.  */
+  if (flag_mudflap)
+    mudflap_finish_file ();
+
   /* Write out any pending weak symbol declarations.  */
 
   weak_finish ();
Index: tree-mudflap.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-mudflap.c,v
retrieving revision 2.28
diff -u -w -s -p -r2.28 tree-mudflap.c
--- tree-mudflap.c	2 Oct 2004 23:12:47 -0000	2.28
+++ tree-mudflap.c	12 Oct 2004 19:54:27 -0000
@@ -1215,7 +1215,7 @@ mudflap_enqueue_decl (tree obj)
       for (i = 0; i < VARRAY_ACTIVE_SIZE (deferred_static_decls); i++)
         if (VARRAY_TREE (deferred_static_decls, i) == obj)
           {
-            warning ("mudflap cannot track lifetime of %qs",
+            warning ("mudflap cannot track unknown size extern %qs",
                      IDENTIFIER_POINTER (DECL_NAME (obj)));
             return;
           }
Index: cp/decl2.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cp/decl2.c,v
retrieving revision 1.752
diff -u -w -s -p -r1.752 decl2.c
--- cp/decl2.c	11 Oct 2004 16:59:23 -0000	1.752
+++ cp/decl2.c	12 Oct 2004 19:54:27 -0000
@@ -3066,11 +3066,6 @@ cp_finish_file (void)
   cgraph_finalize_compilation_unit ();
   cgraph_optimize ();
 
-  /* Emit mudflap static registration function.  This must be done
-     after all the user functions have been expanded.  */
-  if (flag_mudflap)
-    mudflap_finish_file ();
-
   /* Now, issue warnings about static, but not defined, functions,
      etc., and emit debugging information.  */
   walk_namespaces (wrapup_globals_for_namespace, /*data=*/&reconsider);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]