This patch contains our local modifications for gcov-io.h and libgcov.c.
The file gcov-iov.h is taken from a gcc build (produced at compile
time). The file gcov-io.c is unchanged.

--- gcc-4.7.2/gcc/gcov-io.h	2011-12-04 10:27:19.000000000 -0800
+++ coreboot/src/lib/gcov-io.h	2013-01-12 16:45:57.000000000 -0800
@@ -163,6 +163,24 @@
 #ifndef GCC_GCOV_IO_H
 #define GCC_GCOV_IO_H
 
+#ifdef __COREBOOT__
+#define GCOV_LINKAGE /* nothing */
+/* We need the definitions for
+    BITS_PER_UNIT and
+    LONG_LONG_TYPE_SIZE
+   They are defined in gcc/defaults.h and gcc/config/<arch_depend_files>
+   (like, gcc/config/i386/i386.h). And it can be overridden by setting
+   in build scripts. Here I hardcoded the value for x86. */
+#define BITS_PER_UNIT 8
+#define LONG_LONG_TYPE_SIZE 64
+
+/* There are many gcc_assertions. Set the vaule to 1 if we want a warning
+   message if the assertion fails.  */
+#ifndef ENABLE_ASSERT_CHECKING
+#define ENABLE_ASSERT_CHECKING 1
+#endif
+#endif /* __COREBOOT__ */
+
 #if IN_LIBGCOV
 /* About the target */
 
@@ -232,7 +250,9 @@
    is not also used in a DSO.  */
 #if IN_LIBGCOV
 
+#ifndef __COREBOOT__
 #include "tconfig.h"
+#endif /* __COREBOOT__ */
 
 #define gcov_var __gcov_var
 #define gcov_open __gcov_open
@@ -455,8 +475,10 @@
 /* Register a new object file module.  */
 extern void __gcov_init (struct gcov_info *) ATTRIBUTE_HIDDEN;
 
+#ifndef __COREBOOT__
 /* Called before fork, to avoid double counting.  */
 extern void __gcov_flush (void) ATTRIBUTE_HIDDEN;
+#endif
 
 /* The merge function that just sums the counters.  */
 extern void __gcov_merge_add (gcov_type *, unsigned) ATTRIBUTE_HIDDEN;
--- gcc-4.7.2/libgcc/libgcov.c	2012-01-11 10:50:21.000000000 -0800
+++ coreboot/src/lib/libgcov.c	2013-01-16 09:45:11.000000000 -0800
@@ -25,12 +25,41 @@
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define __COREBOOT__
+#ifdef __COREBOOT__
+#include <stdlib.h>
+#include <string.h>
+#include <console/console.h>
+#include <assert.h>
+typedef s32 pid_t;
+#define gcc_assert(x) ASSERT(x)
+#define fprintf(file, x...) printk(BIOS_ERR, x)
+#define alloca(size)   __builtin_alloca (size)
+#include "gcov-glue.c"
+
+/* Define MACROs to be used by coreboot compilation.  */
+# define L_gcov
+# define L_gcov_interval_profiler
+# define L_gcov_pow2_profiler
+# define L_gcov_one_value_profiler
+# define L_gcov_indirect_call_profiler
+# define L_gcov_average_profiler
+# define L_gcov_ior_profiler
+
+# define HAVE_CC_TLS 0
+# define __GCOV_KERNEL__
+
+# define IN_LIBGCOV 1
+# define IN_GCOV 0
+#else /* __COREBOOT__ */
 #include "tconfig.h"
 #include "tsystem.h"
 #include "coretypes.h"
 #include "tm.h"
 #include "libgcc_tm.h"
+#endif /* __COREBOOT__ */
 
+#ifndef __COREBOOT__
 #if defined(inhibit_libc)
 #define IN_LIBGCOV (-1)
 #else
@@ -41,6 +70,7 @@
 #define GCOV_LINKAGE /* nothing */
 #endif
 #endif
+#endif /* __COREBOOT__ */
 #include "gcov-io.h"
 
 #if defined(inhibit_libc)
@@ -68,12 +98,17 @@
 
 #else
 
+#ifndef __COREBOOT__
 #include <string.h>
 #if GCOV_LOCKED
 #include <fcntl.h>
 #include <errno.h>
 #include <sys/stat.h>
 #endif
+#else
+void __gcov_merge_add(gcov_type *counters  __attribute__ ((unused)),
+			unsigned n_counters __attribute__ ((unused))) {}
+#endif /* __COREBOOT__ */
 
 #ifdef L_gcov
 #include "gcov-io.c"
@@ -99,6 +134,10 @@
 static int
 create_file_directory (char *filename)
 {
+#ifdef __COREBOOT__
+  (void) filename;
+  return 0;
+#else
 #if !defined(TARGET_POSIX_IO) && !defined(_WIN32)
   (void) filename;
   return -1;
@@ -137,6 +176,7 @@
       };
   return 0;
 #endif
+#endif
 }
 
 static struct gcov_fn_buffer *
@@ -279,7 +319,7 @@
   struct gcov_ctr_summary *cs_ptr;
   const struct gcov_ctr_info *ci_ptr;
   unsigned t_ix;
-  int f_ix;
+  int f_ix = 0;
   gcov_unsigned_t c_num;
   const char *gcov_prefix;
   int gcov_prefix_strip = 0;
@@ -329,6 +369,7 @@
 	}
     }
 
+#ifndef __COREBOOT__
   {
     /* Check if the level of dirs to strip off specified. */
     char *tmp = getenv("GCOV_PREFIX_STRIP");
@@ -352,6 +393,7 @@
 	prefix_length--;
     }
   else
+#endif
     prefix_length = 0;
 
   /* If no prefix was specified and a prefix stip, then we assume
@@ -696,8 +738,10 @@
       if (filename_length > gcov_max_filename)
         gcov_max_filename = filename_length;
 
+#ifndef __COREBOOT__
       if (!gcov_list)
 	atexit (gcov_exit);
+#endif
 
       info->next = gcov_list;
       gcov_list = info;
@@ -767,14 +811,15 @@
 
 #ifdef L_gcov_merge_single
 /* The profile merging function for choosing the most common value.
-   It is given an array COUNTERS of N_COUNTERS old counters and it
-   reads the same number of counters from the gcov file.  The counters
-   are split into 3-tuples where the members of the tuple have
-   meanings:
-
-   -- the stored candidate on the most common value of the measured entity
-   -- counter
-   -- total number of evaluations of the value  */
+ * It is given an array COUNTERS of N_COUNTERS old counters and it
+ * reads the same number of counters from the gcov file.  The counters
+ * are split into 3-tuples where the members of the tuple have
+ * meanings:
+ *
+ * -- the stored candidate on the most common value of the measured entity
+ * -- counter
+ * -- total number of evaluations of the value
+ */
 void
 __gcov_merge_single (gcov_type *counters, unsigned n_counters)
 {
@@ -805,15 +850,16 @@
 
 #ifdef L_gcov_merge_delta
 /* The profile merging function for choosing the most common
-   difference between two consecutive evaluations of the value.  It is
-   given an array COUNTERS of N_COUNTERS old counters and it reads the
-   same number of counters from the gcov file.  The counters are split
-   into 4-tuples where the members of the tuple have meanings:
-
-   -- the last value of the measured entity
-   -- the stored candidate on the most common difference
-   -- counter
-   -- total number of evaluations of the value  */
+ * difference between two consecutive evaluations of the value.  It is
+ * given an array COUNTERS of N_COUNTERS old counters and it reads the
+ * same number of counters from the gcov file.  The counters are split
+ * into 4-tuples where the members of the tuple have meanings:
+ *
+ * -- the last value of the measured entity
+ * -- the stored candidate on the most common difference
+ * -- counter
+ * -- total number of evaluations of the value
+ */
 void
 __gcov_merge_delta (gcov_type *counters, unsigned n_counters)
 {
