/* * Profiling infrastructure declarations. * * This file is based on gcc-internal definitions. 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 * * Uses gcc-internal data definitions. */ #ifndef __XEN_GCOV_H__ #define __XEN_GCOV_H__ __XEN_GCOV_H__ #include /* * Profiling data types used for gcc 3.4 and above - these are defined by * gcc and need to be kept as close to the original definition as possible to * remain compatible. */ typedef uint64_t gcov_type; /** * 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]; }; /** * Sysctl operations for coverage */ #ifdef TEST_COVERAGE int sysctl_coverage_op(xen_sysctl_coverage_op_t *op); #endif #endif /* __XEN_GCOV_H__ */