diff options
Diffstat (limited to 'kernel/gcov/gcov.h')
-rw-r--r-- | kernel/gcov/gcov.h | 65 |
1 files changed, 54 insertions, 11 deletions
diff --git a/kernel/gcov/gcov.h b/kernel/gcov/gcov.h index 92c8e22a29ed..060073ebf7a6 100644 --- a/kernel/gcov/gcov.h +++ b/kernel/gcov/gcov.h @@ -21,6 +21,7 @@ * gcc and need to be kept as close to the original definition as possible to * remain compatible. */ +#define GCOV_COUNTERS 5 #define GCOV_DATA_MAGIC ((unsigned int) 0x67636461) #define GCOV_TAG_FUNCTION ((unsigned int) 0x01000000) #define GCOV_TAG_COUNTER_BASE ((unsigned int) 0x01a10000) @@ -33,18 +34,60 @@ typedef long gcov_type; typedef long long gcov_type; #endif -/* Opaque gcov_info. The gcov structures can change as for example in gcc 4.7 so - * we cannot use full definition here and they need to be placed in gcc specific - * implementation of gcov. This also means no direct access to the members in - * generic code and usage of the interface below.*/ -struct gcov_info; +/** + * 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); +}; -/* Interface to access gcov_info data */ -const char *gcov_info_filename(struct gcov_info *info); -unsigned int gcov_info_version(struct gcov_info *info); -struct gcov_info *gcov_info_next(struct gcov_info *info); -void gcov_info_link(struct gcov_info *info); -void gcov_info_unlink(struct gcov_info *prev, struct gcov_info *info); +/** + * 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]; +}; /* Base interface. */ enum gcov_action { |