[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] xen/coverage: Drop support for older GCOV



With the GCC toolchain baseline now at 5.1, gcc_3_4.o (covering 3.4 through
4.6) will never get chosen.  Drop it.

No functional change.

Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
CC: Anthony PERARD <anthony.perard@xxxxxxxxxx>
CC: Michal Orzel <michal.orzel@xxxxxxx>
CC: Jan Beulich <jbeulich@xxxxxxxx>
CC: Julien Grall <julien@xxxxxxx>
CC: Roger Pau Monné <roger.pau@xxxxxxxxxx>
CC: Stefano Stabellini <sstabellini@xxxxxxxxxx>
---
 xen/common/coverage/Makefile  |   2 +-
 xen/common/coverage/gcc_3_4.c | 367 ----------------------------------
 2 files changed, 1 insertion(+), 368 deletions(-)
 delete mode 100644 xen/common/coverage/gcc_3_4.c

diff --git a/xen/common/coverage/Makefile b/xen/common/coverage/Makefile
index d729afc9c7a0..26bc1b7c04cd 100644
--- a/xen/common/coverage/Makefile
+++ b/xen/common/coverage/Makefile
@@ -1,7 +1,7 @@
 obj-y += coverage.o
 ifneq ($(CONFIG_CC_IS_CLANG),y)
 obj-y += gcov_base.o gcov.o
-obj-y += $(call cc-ifversion,-lt,0407, gcc_3_4.o, gcc_4_7.o)
+obj-y += gcc_4_7.o
 else
 obj-y += llvm.o
 endif
diff --git a/xen/common/coverage/gcc_3_4.c b/xen/common/coverage/gcc_3_4.c
deleted file mode 100644
index 3631f4bc2535..000000000000
--- a/xen/common/coverage/gcc_3_4.c
+++ /dev/null
@@ -1,367 +0,0 @@
-/*
- *  This code provides functions to handle gcc's profiling data format
- *  introduced with gcc 3.4. Future versions of gcc may change the gcov
- *  format (as happened before), so all format-specific information needs
- *  to be kept modular and easily exchangeable.
- *
- *  This file is based on gcc-internal definitions. Functions and data
- *  structures are defined to be compatible with gcc counterparts.
- *  For a better understanding, refer to gcc source: gcc/gcov-io.h.
- *
- *    Copyright IBM Corp. 2009
- *    Author(s): Peter Oberparleiter <oberpar@xxxxxxxxxxxxxxxxxx>
- *
- *    Uses gcc-internal data definitions.
- *
- *  Imported from Linux and modified for Xen by
- *    Wei Liu <wei.liu2@xxxxxxxxxx>
- */
-
-
-#include <xen/lib.h>
-
-#include "gcov.h"
-
-#if !(GCC_VERSION >= 30400 && GCC_VERSION < 40700)
-#error "Wrong version of GCC used to compile gcov"
-#endif
-
-#define GCOV_COUNTERS 5
-
-static struct gcov_info *gcov_info_head;
-
-/**
- * struct gcov_fn_info - profiling meta data per function
- * @ident: object file-unique function identifier
- * @checksum: function checksum
- * @n_ctrs: number of values per counter type belonging to this function
- *
- * This data is generated by gcc during compilation and doesn't change
- * at run-time.
- */
-struct gcov_fn_info
-{
-    unsigned int ident;
-    unsigned int checksum;
-    unsigned int n_ctrs[0];
-};
-
-/**
- * struct gcov_ctr_info - profiling data per counter type
- * @num: number of counter values for this type
- * @values: array of counter values for this type
- * @merge: merge function for counter values of this type (unused)
- *
- * This data is generated by gcc during compilation and doesn't change
- * at run-time with the exception of the values array.
- */
-struct gcov_ctr_info
-{
-    unsigned int num;
-    gcov_type *values;
-    void (*merge)(gcov_type *, unsigned int);
-};
-
-/**
- * struct gcov_info - profiling data per object file
- * @version: gcov version magic indicating the gcc version used for compilation
- * @next: list head for a singly-linked list
- * @stamp: time stamp
- * @filename: name of the associated gcov data file
- * @n_functions: number of instrumented functions
- * @functions: function data
- * @ctr_mask: mask specifying which counter types are active
- * @counts: counter data per counter type
- *
- * This data is generated by gcc during compilation and doesn't change
- * at run-time with the exception of the next pointer.
- */
-struct gcov_info
-{
-    unsigned int              version;
-    struct gcov_info          *next;
-    unsigned int              stamp;
-    const char                *filename;
-    unsigned int              n_functions;
-    const struct gcov_fn_info *functions;
-    unsigned int              ctr_mask;
-    struct gcov_ctr_info      counts[0];
-};
-
-/**
- * struct type_info - iterator helper array
- * @ctr_type: counter type
- * @offset: index of the first value of the current function for this type
- *
- * This array is needed to convert the in-memory data format into the in-file
- * data format:
- *
- * In-memory:
- *   for each counter type
- *     for each function
- *       values
- *
- * In-file:
- *   for each function
- *     for each counter type
- *       values
- *
- * See gcc source gcc/gcov-io.h for more information on data organization.
- */
-struct type_info {
-    int ctr_type;
-    unsigned int offset;
-};
-
-/**
- * struct gcov_iterator - specifies current file position in logical records
- * @info: associated profiling data
- * @record: record type
- * @function: function number
- * @type: counter type
- * @count: index into values array
- * @num_types: number of counter types
- * @type_info: helper array to get values-array offset for current function
- */
-struct gcov_iterator {
-    const struct gcov_info *info;
-
-    int record;
-    unsigned int function;
-    unsigned int type;
-    unsigned int count;
-
-    int num_types;
-    struct type_info type_info[GCOV_COUNTERS];
-};
-
-/* Mapping of logical record number to actual file content. */
-#define RECORD_FILE_MAGIC       0
-#define RECORD_GCOV_VERSION     1
-#define RECORD_TIME_STAMP       2
-#define RECORD_FUNCTION_TAG     3
-#define RECORD_FUNCTON_TAG_LEN  4
-#define RECORD_FUNCTION_IDENT   5
-#define RECORD_FUNCTION_CHECK   6
-#define RECORD_COUNT_TAG        7
-#define RECORD_COUNT_LEN        8
-#define RECORD_COUNT            9
-
-static int counter_active(const struct gcov_info *info, unsigned int type)
-{
-    return (1 << type) & info->ctr_mask;
-}
-
-static unsigned int num_counter_active(const struct gcov_info *info)
-{
-    unsigned int i;
-    unsigned int result = 0;
-
-    for ( i = 0; i < GCOV_COUNTERS; i++ )
-        if ( counter_active(info, i) )
-            result++;
-
-    return result;
-}
-
-void gcov_info_link(struct gcov_info *info)
-{
-    info->next = gcov_info_head;
-    gcov_info_head = info;
-}
-
-struct gcov_info *gcov_info_next(const struct gcov_info *info)
-{
-    if ( !info )
-        return gcov_info_head;
-
-    return info->next;
-}
-
-const char *gcov_info_filename(const struct gcov_info *info)
-{
-    return info->filename;
-}
-
-void gcov_info_reset(struct gcov_info *info)
-{
-    unsigned int active = num_counter_active(info);
-    unsigned int i;
-
-    for ( i = 0; i < active; i++ )
-        memset(info->counts[i].values, 0,
-               info->counts[i].num * sizeof(gcov_type));
-}
-
-static size_t get_fn_size(const struct gcov_info *info)
-{
-    size_t size;
-
-    size = sizeof(struct gcov_fn_info) + num_counter_active(info) *
-        sizeof(unsigned int);
-    if ( __alignof__(struct gcov_fn_info) > sizeof(unsigned int) )
-        size = ROUNDUP(size, __alignof__(struct gcov_fn_info));
-    return size;
-}
-
-static struct gcov_fn_info *get_fn_info(const struct gcov_info *info,
-                                        unsigned int fn)
-{
-    return (struct gcov_fn_info *)
-        ((char *) info->functions + fn * get_fn_size(info));
-}
-
-static struct gcov_fn_info *get_func(struct gcov_iterator *iter)
-{
-    return get_fn_info(iter->info, iter->function);
-}
-
-static struct type_info *get_type(struct gcov_iterator *iter)
-{
-    return &iter->type_info[iter->type];
-}
-
-/**
- * gcov_iter_next - advance file iterator to next logical record
- * @iter: file iterator
- *
- * Return zero if new position is valid, non-zero if iterator has reached end.
- */
-static int gcov_iter_next(struct gcov_iterator *iter)
-{
-    switch ( iter->record )
-    {
-    case RECORD_FILE_MAGIC:
-    case RECORD_GCOV_VERSION:
-    case RECORD_FUNCTION_TAG:
-    case RECORD_FUNCTON_TAG_LEN:
-    case RECORD_FUNCTION_IDENT:
-    case RECORD_COUNT_TAG:
-        /* Advance to next record */
-        iter->record++;
-        break;
-    case RECORD_COUNT:
-        /* Advance to next count */
-        iter->count++;
-        /* fall through */
-    case RECORD_COUNT_LEN:
-        if ( iter->count < get_func(iter)->n_ctrs[iter->type] )
-        {
-            iter->record = 9;
-            break;
-        }
-        /* Advance to next counter type */
-        get_type(iter)->offset += iter->count;
-        iter->count = 0;
-        iter->type++;
-        /* fall through */
-    case RECORD_FUNCTION_CHECK:
-        if ( iter->type < iter->num_types )
-        {
-            iter->record = 7;
-            break;
-        }
-        /* Advance to next function */
-        iter->type = 0;
-        iter->function++;
-        /* fall through */
-    case RECORD_TIME_STAMP:
-        if ( iter->function < iter->info->n_functions )
-            iter->record = 3;
-        else
-            iter->record = -1;
-        break;
-    }
-    /* Check for EOF. */
-    if ( iter->record == -1 )
-        return -EINVAL;
-    else
-        return 0;
-}
-
-/**
- * gcov_iter_write - write data to buffer
- * @iter: file iterator
- * @buf: buffer to write to, if it is NULL, nothing is written
- * @pos: position inside buffer to start writing
- *
- * Return number of bytes written into buffer.
- */
-static size_t gcov_iter_write(struct gcov_iterator *iter, char *buf,
-                              size_t pos)
-{
-    size_t ret = 0;
-
-    switch ( iter->record )
-    {
-    case RECORD_FILE_MAGIC:
-        ret = gcov_store_uint32(buf, pos, GCOV_DATA_MAGIC);
-        break;
-    case RECORD_GCOV_VERSION:
-        ret = gcov_store_uint32(buf, pos, iter->info->version);
-        break;
-    case RECORD_TIME_STAMP:
-        ret = gcov_store_uint32(buf, pos, iter->info->stamp);
-        break;
-    case RECORD_FUNCTION_TAG:
-        ret = gcov_store_uint32(buf, pos, GCOV_TAG_FUNCTION);
-        break;
-    case RECORD_FUNCTON_TAG_LEN:
-        ret = gcov_store_uint32(buf, pos, 2);
-        break;
-    case RECORD_FUNCTION_IDENT:
-        ret = gcov_store_uint32(buf, pos, get_func(iter)->ident);
-        break;
-    case RECORD_FUNCTION_CHECK:
-        ret = gcov_store_uint32(buf, pos, get_func(iter)->checksum);
-        break;
-    case RECORD_COUNT_TAG:
-        ret = gcov_store_uint32(buf, pos,
-                                
GCOV_TAG_FOR_COUNTER(get_type(iter)->ctr_type));
-        break;
-    case RECORD_COUNT_LEN:
-        ret = gcov_store_uint32(buf, pos,
-                                get_func(iter)->n_ctrs[iter->type] * 2);
-        break;
-    case RECORD_COUNT:
-        ret = gcov_store_uint64(buf, pos, iter->info->counts[iter->type].
-                                values[iter->count + get_type(iter)->offset]);
-        break;
-    }
-
-    return ret;
-}
-
-/* If buffer is NULL, no data is written. */
-size_t gcov_info_to_gcda(char *buffer, const struct gcov_info *info)
-{
-    struct gcov_iterator iter = { .info = info };
-    unsigned int i;
-    size_t pos = 0;
-
-    for ( i = 0; i < GCOV_COUNTERS; i++ )
-    {
-        if ( counter_active(info, i) )
-        {
-            iter.type_info[iter.num_types].ctr_type = i;
-            iter.type_info[iter.num_types].offset = 0;
-            iter.num_types++;
-        }
-    }
-
-    do {
-        pos += gcov_iter_write(&iter, buffer, pos);
-    } while ( gcov_iter_next(&iter) == 0 );
-
-    return pos;
-}
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */
-- 
2.39.5




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.