OSDN Git Service

Implement interleave via permutation.
[pf3gnuchains/gcc-fork.git] / gcc / gcov-io.h
index 3ea5d41..4f5013e 100644 (file)
@@ -1,6 +1,6 @@
 /* File format for coverage information
    Copyright (C) 1996, 1997, 1998, 2000, 2002,
 /* File format for coverage information
    Copyright (C) 1996, 1997, 1998, 2000, 2002,
-   2003, 2004, 2005 Free Software Foundation, Inc.
+   2003, 2004, 2005, 2008, 2009 Free Software Foundation, Inc.
    Contributed by Bob Manson <manson@cygnus.com>.
    Completely remangled by Nathan Sidwell <nathan@codesourcery.com>.
 
    Contributed by Bob Manson <manson@cygnus.com>.
    Completely remangled by Nathan Sidwell <nathan@codesourcery.com>.
 
@@ -8,7 +8,7 @@ This file is part of GCC.
 
 GCC 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
 
 GCC 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) any later
+Software Foundation; either version 3, or (at your option) any later
 version.
 
 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
 version.
 
 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
@@ -16,17 +16,15 @@ WARRANTY; without even the implied warranty of MERCHANTABILITY or
 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 for more details.
 
 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
-along with GCC; see the file COPYING.  If not, write to the Free
-Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301, USA.  */
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
 
 
-/* As a special exception, if you link this library with other files,
-   some of which are compiled with GCC, to produce an executable,
-   this library does not by itself cause the resulting executable
-   to be covered by the GNU General Public License.
-   This exception does not however invalidate any other reasons why
-   the executable file might be covered by the GNU General Public License.  */
 
 /* Coverage information is held in two files.  A notes file, which is
    generated by the compiler, and a data file, which is generated by
 
 /* Coverage information is held in two files.  A notes file, which is
    generated by the compiler, and a data file, which is generated by
@@ -63,7 +61,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
    file. It need not be an absolute time stamp, merely a ticker that
    increments fast enough and cycles slow enough to distinguish
    different compile/run/compile cycles.
    file. It need not be an absolute time stamp, merely a ticker that
    increments fast enough and cycles slow enough to distinguish
    different compile/run/compile cycles.
-   
+
    Although the ident and version are formally 32 bit numbers, they
    are derived from 4 character ASCII strings.  The version number
    consists of the single character major version number, a two
    Although the ident and version are formally 32 bit numbers, they
    are derived from 4 character ASCII strings.  The version number
    consists of the single character major version number, a two
@@ -105,7 +103,8 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
        note: unit function-graph*
        unit: header int32:checksum string:source
        function-graph: announce_function basic_blocks {arcs | lines}*
        note: unit function-graph*
        unit: header int32:checksum string:source
        function-graph: announce_function basic_blocks {arcs | lines}*
-       announce_function: header int32:ident int32:checksum
+       announce_function: header int32:ident
+               int32:lineno_checksum int32:cfg_checksum
                string:name string:source int32:lineno
        basic_block: header int32:flags*
        arcs: header int32:block_no arc*
                string:name string:source int32:lineno
        basic_block: header int32:flags*
        arcs: header int32:block_no arc*
@@ -134,7 +133,8 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
         data: {unit function-data* summary:object summary:program*}*
        unit: header int32:checksum
         function-data: announce_function arc_counts
         data: {unit function-data* summary:object summary:program*}*
        unit: header int32:checksum
         function-data: announce_function arc_counts
-       announce_function: header int32:ident int32:checksum
+       announce_function: header int32:ident
+               int32:lineno_checksum int32:cfg_checksum
        arc_counts: header int64:count*
        summary: int32:checksum {count-summary}GCOV_COUNTERS
        count-summary:  int32:num int32:runs int64:sum
        arc_counts: header int64:count*
        summary: int32:checksum {count-summary}GCOV_COUNTERS
        count-summary:  int32:num int32:runs int64:sum
@@ -296,7 +296,7 @@ typedef HOST_WIDEST_INT gcov_type;
    file marker -- it is not required to be present.  */
 
 #define GCOV_TAG_FUNCTION       ((gcov_unsigned_t)0x01000000)
    file marker -- it is not required to be present.  */
 
 #define GCOV_TAG_FUNCTION       ((gcov_unsigned_t)0x01000000)
-#define GCOV_TAG_FUNCTION_LENGTH (2)
+#define GCOV_TAG_FUNCTION_LENGTH (3)
 #define GCOV_TAG_BLOCKS                 ((gcov_unsigned_t)0x01410000)
 #define GCOV_TAG_BLOCKS_LENGTH(NUM) (NUM)
 #define GCOV_TAG_BLOCKS_NUM(LENGTH) (LENGTH)
 #define GCOV_TAG_BLOCKS                 ((gcov_unsigned_t)0x01410000)
 #define GCOV_TAG_BLOCKS_LENGTH(NUM) (NUM)
 #define GCOV_TAG_BLOCKS_NUM(LENGTH) (LENGTH)
@@ -329,10 +329,10 @@ typedef HOST_WIDEST_INT gcov_type;
                                      consecutive values of expression.  */
 
 #define GCOV_COUNTER_V_INDIR   5  /* The most common indirect address */
                                      consecutive values of expression.  */
 
 #define GCOV_COUNTER_V_INDIR   5  /* The most common indirect address */
-#define GCOV_COUNTER_AVERAGE   6  /* The most common difference between
-                                     consecutive values of expression.  */
-#define GCOV_COUNTER_IOR       7  /* The most common difference between
-                                     consecutive values of expression.  */
+#define GCOV_COUNTER_AVERAGE   6  /* Compute average value passed to the
+                                     counter.  */
+#define GCOV_COUNTER_IOR       7  /* IOR of the all values passed to
+                                     counter.  */
 #define GCOV_LAST_VALUE_COUNTER 7  /* The last of counters used for value
                                      profiling.  */
 #define GCOV_COUNTERS          8
 #define GCOV_LAST_VALUE_COUNTER 7  /* The last of counters used for value
                                      profiling.  */
 #define GCOV_COUNTERS          8
@@ -340,11 +340,11 @@ typedef HOST_WIDEST_INT gcov_type;
 /* Number of counters used for value profiling.  */
 #define GCOV_N_VALUE_COUNTERS \
   (GCOV_LAST_VALUE_COUNTER - GCOV_FIRST_VALUE_COUNTER + 1)
 /* Number of counters used for value profiling.  */
 #define GCOV_N_VALUE_COUNTERS \
   (GCOV_LAST_VALUE_COUNTER - GCOV_FIRST_VALUE_COUNTER + 1)
-  
+
   /* A list of human readable names of the counters */
 #define GCOV_COUNTER_NAMES     {"arcs", "interval", "pow2", "single", \
                                 "delta","indirect_call", "average", "ior"}
   /* A list of human readable names of the counters */
 #define GCOV_COUNTER_NAMES     {"arcs", "interval", "pow2", "single", \
                                 "delta","indirect_call", "average", "ior"}
-  
+
   /* Names of merge functions for counters.  */
 #define GCOV_MERGE_FUNCTIONS   {"__gcov_merge_add",    \
                                 "__gcov_merge_add",    \
   /* Names of merge functions for counters.  */
 #define GCOV_MERGE_FUNCTIONS   {"__gcov_merge_add",    \
                                 "__gcov_merge_add",    \
@@ -354,7 +354,7 @@ typedef HOST_WIDEST_INT gcov_type;
                                 "__gcov_merge_single", \
                                 "__gcov_merge_add",    \
                                 "__gcov_merge_ior"}
                                 "__gcov_merge_single", \
                                 "__gcov_merge_add",    \
                                 "__gcov_merge_ior"}
-  
+
 /* Convert a counter index to a tag.  */
 #define GCOV_TAG_FOR_COUNTER(COUNT)                            \
        (GCOV_TAG_COUNTER_BASE + ((gcov_unsigned_t)(COUNT) << 17))
 /* Convert a counter index to a tag.  */
 #define GCOV_TAG_FOR_COUNTER(COUNT)                            \
        (GCOV_TAG_COUNTER_BASE + ((gcov_unsigned_t)(COUNT) << 17))
@@ -414,10 +414,12 @@ struct gcov_summary
    idiom. The number of counters is determined from the counter_mask
    in gcov_info.  We hold an array of function info, so have to
    explicitly calculate the correct array stride.  */
    idiom. The number of counters is determined from the counter_mask
    in gcov_info.  We hold an array of function info, so have to
    explicitly calculate the correct array stride.  */
+
 struct gcov_fn_info
 {
   gcov_unsigned_t ident;       /* unique ident of function */
 struct gcov_fn_info
 {
   gcov_unsigned_t ident;       /* unique ident of function */
-  gcov_unsigned_t checksum;    /* function checksum */
+  gcov_unsigned_t lineno_checksum;     /* function lineo_checksum */
+  gcov_unsigned_t cfg_checksum;        /* function cfg checksum */
   unsigned n_ctrs[0];          /* instrumented counters */
 };
 
   unsigned n_ctrs[0];          /* instrumented counters */
 };
 
@@ -440,7 +442,7 @@ struct gcov_info
 
   gcov_unsigned_t stamp;       /* uniquifying time stamp */
   const char *filename;                /* output file name */
 
   gcov_unsigned_t stamp;       /* uniquifying time stamp */
   const char *filename;                /* output file name */
-  
+
   unsigned n_functions;                /* number of functions */
   const struct gcov_fn_info *functions; /* table of functions */
 
   unsigned n_functions;                /* number of functions */
   const struct gcov_fn_info *functions; /* table of functions */
 
@@ -467,17 +469,23 @@ extern void __gcov_merge_single (gcov_type *, unsigned) ATTRIBUTE_HIDDEN;
    consecutive values.  */
 extern void __gcov_merge_delta (gcov_type *, unsigned) ATTRIBUTE_HIDDEN;
 
    consecutive values.  */
 extern void __gcov_merge_delta (gcov_type *, unsigned) ATTRIBUTE_HIDDEN;
 
+/* The merge function that just ors the counters together.  */
+extern void __gcov_merge_ior (gcov_type *, unsigned) ATTRIBUTE_HIDDEN;
+
 /* The profiler functions.  */
 /* The profiler functions.  */
-extern void __gcov_interval_profiler (gcov_type *, gcov_type, int, unsigned); 
+extern void __gcov_interval_profiler (gcov_type *, gcov_type, int, unsigned);
 extern void __gcov_pow2_profiler (gcov_type *, gcov_type);
 extern void __gcov_one_value_profiler (gcov_type *, gcov_type);
 extern void __gcov_pow2_profiler (gcov_type *, gcov_type);
 extern void __gcov_one_value_profiler (gcov_type *, gcov_type);
+extern void __gcov_indirect_call_profiler (gcov_type *, gcov_type, void *, void *);
+extern void __gcov_average_profiler (gcov_type *, gcov_type);
+extern void __gcov_ior_profiler (gcov_type *, gcov_type);
 
 #ifndef inhibit_libc
 /* The wrappers around some library functions..  */
 
 #ifndef inhibit_libc
 /* The wrappers around some library functions..  */
-extern pid_t __gcov_fork (void);
-extern int __gcov_execl (const char *, const char *, ...) ATTRIBUTE_HIDDEN;
-extern int __gcov_execlp (const char *, const char *, ...) ATTRIBUTE_HIDDEN;
-extern int __gcov_execle (const char *,  const char *, ...) ATTRIBUTE_HIDDEN;
+extern pid_t __gcov_fork (void) ATTRIBUTE_HIDDEN;
+extern int __gcov_execl (const char *, char *, ...) ATTRIBUTE_HIDDEN;
+extern int __gcov_execlp (const char *, char *, ...) ATTRIBUTE_HIDDEN;
+extern int __gcov_execle (const char *, char *, ...) ATTRIBUTE_HIDDEN;
 extern int __gcov_execv (const char *, char *const []) ATTRIBUTE_HIDDEN;
 extern int __gcov_execvp (const char *, char *const []) ATTRIBUTE_HIDDEN;
 extern int __gcov_execve (const char *, char  *const [], char *const [])
 extern int __gcov_execv (const char *, char *const []) ATTRIBUTE_HIDDEN;
 extern int __gcov_execvp (const char *, char *const []) ATTRIBUTE_HIDDEN;
 extern int __gcov_execve (const char *, char  *const [], char *const [])