OSDN Git Service

PR middle-end/51516
[pf3gnuchains/gcc-fork.git] / gcc / gcov-dump.c
index e011562..e49cb3c 100644 (file)
@@ -1,10 +1,11 @@
 /* Dump a gcov file, for debugging use.
 /* Dump a gcov file, for debugging use.
-   Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
+   2012 Free Software Foundation, Inc.
    Contributed by Nathan Sidwell <nathan@codesourcery.com>
 
 Gcov is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
    Contributed by Nathan Sidwell <nathan@codesourcery.com>
 
 Gcov is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
+the Free Software Foundation; either version 3, or (at your option)
 any later version.
 
 Gcov is distributed in the hope that it will be useful,
 any later version.
 
 Gcov is distributed in the hope that it will be useful,
@@ -13,15 +14,16 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
-along with Gcov; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
+along with Gcov; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
 #include "tm.h"
 #include "version.h"
 
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
 #include "tm.h"
 #include "version.h"
+#include "intl.h"
+#include "diagnostic.h"
 #include <getopt.h>
 #define IN_GCOV (-1)
 #include "gcov-io.h"
 #include <getopt.h>
 #define IN_GCOV (-1)
 #include "gcov-io.h"
@@ -76,6 +78,21 @@ int
 main (int argc ATTRIBUTE_UNUSED, char **argv)
 {
   int opt;
 main (int argc ATTRIBUTE_UNUSED, char **argv)
 {
   int opt;
+  const char *p;
+
+  p = argv[0] + strlen (argv[0]);
+  while (p != argv[0] && !IS_DIR_SEPARATOR (p[-1]))
+    --p;
+  progname = p;
+
+  xmalloc_set_program_name (progname);
+
+  /* Unlock the stdio streams.  */
+  unlock_std_streams ();
+
+  gcc_init_libintl ();
+
+  diagnostic_initialize (global_dc, 0);
 
   while ((opt = getopt_long (argc, argv, "hlpv", options, NULL)) != -1)
     {
 
   while ((opt = getopt_long (argc, argv, "hlpv", options, NULL)) != -1)
     {
@@ -117,8 +134,8 @@ print_usage (void)
 static void
 print_version (void)
 {
 static void
 print_version (void)
 {
-  printf ("gcov-dump (GCC) %s\n", version_string);
-  printf ("Copyright (C) 2003 Free Software Foundation, Inc.\n");
+  printf ("gcov-dump %s%s\n", pkgversion_string, version_string);
+  printf ("Copyright (C) 2012 Free Software Foundation, Inc.\n");
   printf ("This is free software; see the source for copying conditions.\n"
          "There is NO warranty; not even for MERCHANTABILITY or \n"
          "FITNESS FOR A PARTICULAR PURPOSE.\n\n");
   printf ("This is free software; see the source for copying conditions.\n"
          "There is NO warranty; not even for MERCHANTABILITY or \n"
          "FITNESS FOR A PARTICULAR PURPOSE.\n\n");
@@ -154,7 +171,7 @@ dump_file (const char *filename)
     const char *type = NULL;
     int endianness = 0;
     char m[4], v[4];
     const char *type = NULL;
     int endianness = 0;
     char m[4], v[4];
-    
+
     if ((endianness = gcov_magic (magic, GCOV_DATA_MAGIC)))
       type = "data";
     else if ((endianness = gcov_magic (magic, GCOV_NOTE_MAGIC)))
     if ((endianness = gcov_magic (magic, GCOV_DATA_MAGIC)))
       type = "data";
     else if ((endianness = gcov_magic (magic, GCOV_NOTE_MAGIC)))
@@ -168,13 +185,13 @@ dump_file (const char *filename)
     version = gcov_read_unsigned ();
     GCOV_UNSIGNED2STRING (v, version);
     GCOV_UNSIGNED2STRING (m, magic);
     version = gcov_read_unsigned ();
     GCOV_UNSIGNED2STRING (v, version);
     GCOV_UNSIGNED2STRING (m, magic);
-    
+
     printf ("%s:%s:magic `%.4s':version `%.4s'%s\n", filename, type,
            m, v, endianness < 0 ? " (swapped endianness)" : "");
     if (version != GCOV_VERSION)
       {
        char e[4];
     printf ("%s:%s:magic `%.4s':version `%.4s'%s\n", filename, type,
            m, v, endianness < 0 ? " (swapped endianness)" : "");
     if (version != GCOV_VERSION)
       {
        char e[4];
-       
+
        GCOV_UNSIGNED2STRING (e, GCOV_VERSION);
        printf ("%s:warning:current version is `%.4s'\n", filename, e);
       }
        GCOV_UNSIGNED2STRING (e, GCOV_VERSION);
        printf ("%s:warning:current version is `%.4s'\n", filename, e);
       }
@@ -186,7 +203,7 @@ dump_file (const char *filename)
 
     printf ("%s:stamp %lu\n", filename, (unsigned long)stamp);
   }
 
     printf ("%s:stamp %lu\n", filename, (unsigned long)stamp);
   }
-  
+
   while (1)
     {
       gcov_position_t base, position = gcov_position ();
   while (1)
     {
       gcov_position_t base, position = gcov_position ();
@@ -254,29 +271,33 @@ dump_file (const char *filename)
          break;
        }
     }
          break;
        }
     }
-  if (!gcov_is_eof ())
-    printf ("%s:early end of file\n", filename);
   gcov_close ();
 }
 
 static void
 tag_function (const char *filename ATTRIBUTE_UNUSED,
   gcov_close ();
 }
 
 static void
 tag_function (const char *filename ATTRIBUTE_UNUSED,
-             unsigned tag ATTRIBUTE_UNUSED, unsigned length ATTRIBUTE_UNUSED)
+             unsigned tag ATTRIBUTE_UNUSED, unsigned length)
 {
   unsigned long pos = gcov_position ();
 
 {
   unsigned long pos = gcov_position ();
 
-  printf (" ident=%u", gcov_read_unsigned ());
-  printf (", checksum=0x%08x", gcov_read_unsigned ());
-
-  if (gcov_position () - pos < length)
+  if (!length)
+    printf (" placeholder");
+  else
     {
     {
-      const char *name;
+      printf (" ident=%u", gcov_read_unsigned ());
+      printf (", lineno_checksum=0x%08x", gcov_read_unsigned ());
+      printf (", cfg_checksum=0x%08x", gcov_read_unsigned ());
 
 
-      name = gcov_read_string ();
-      printf (", `%s'", name ? name : "NULL");
-      name = gcov_read_string ();
-      printf (" %s", name ? name : "NULL");
-      printf (":%u", gcov_read_unsigned ());
+      if (gcov_position () - pos < length)
+       {
+         const char *name;
+         
+         name = gcov_read_string ();
+         printf (", `%s'", name ? name : "NULL");
+         name = gcov_read_string ();
+         printf (" %s", name ? name : "NULL");
+         printf (":%u", gcov_read_unsigned ());
+       }
     }
 }
 
     }
 }
 
@@ -330,6 +351,18 @@ tag_arcs (const char *filename ATTRIBUTE_UNUSED,
          dst = gcov_read_unsigned ();
          flags = gcov_read_unsigned ();
          printf (" %u:%04x", dst, flags);
          dst = gcov_read_unsigned ();
          flags = gcov_read_unsigned ();
          printf (" %u:%04x", dst, flags);
+         if (flags)
+           {
+             char c = '(';
+             
+             if (flags & GCOV_ARC_ON_TREE)
+               printf ("%ctree", c), c = ',';
+             if (flags & GCOV_ARC_FAKE)
+               printf ("%cfake", c), c = ',';
+             if (flags & GCOV_ARC_FALLTHROUGH)
+               printf ("%cfall", c), c = ',';
+             printf (")");
+           }
        }
     }
 }
        }
     }
 }
@@ -419,7 +452,7 @@ tag_summary (const char *filename ATTRIBUTE_UNUSED,
   gcov_read_summary (&summary);
   printf (" checksum=0x%08x", summary.checksum);
 
   gcov_read_summary (&summary);
   printf (" checksum=0x%08x", summary.checksum);
 
-  for (ix = 0; ix != GCOV_COUNTERS; ix++)
+  for (ix = 0; ix != GCOV_COUNTERS_SUMMABLE; ix++)
     {
       printf ("\n");
       print_prefix (filename, 0, 0);
     {
       printf ("\n");
       print_prefix (filename, 0, 0);