2 * Profiling infrastructure declarations.
4 * This file is based on gcc-internal definitions. Data structures are
5 * defined to be compatible with gcc counterparts. For a better
6 * understanding, refer to gcc source: gcc/gcov-io.h.
8 * Copyright IBM Corp. 2009
9 * Author(s): Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
11 * Uses gcc-internal data definitions.
17 #include <linux/types.h>
20 * Profiling data types used for gcc 3.4 and above - these are defined by
21 * gcc and need to be kept as close to the original definition as possible to
24 #define GCOV_COUNTERS 5
25 #define GCOV_DATA_MAGIC ((unsigned int) 0x67636461)
26 #define GCOV_TAG_FUNCTION ((unsigned int) 0x01000000)
27 #define GCOV_TAG_COUNTER_BASE ((unsigned int) 0x01a10000)
28 #define GCOV_TAG_FOR_COUNTER(count) \
29 (GCOV_TAG_COUNTER_BASE + ((unsigned int) (count) << 17))
31 #if BITS_PER_LONG >= 64
32 typedef long gcov_type
;
34 typedef long long gcov_type
;
38 * struct gcov_fn_info - profiling meta data per function
39 * @ident: object file-unique function identifier
40 * @checksum: function checksum
41 * @n_ctrs: number of values per counter type belonging to this function
43 * This data is generated by gcc during compilation and doesn't change
48 unsigned int checksum
;
49 unsigned int n_ctrs
[0];
53 * struct gcov_ctr_info - profiling data per counter type
54 * @num: number of counter values for this type
55 * @values: array of counter values for this type
56 * @merge: merge function for counter values of this type (unused)
58 * This data is generated by gcc during compilation and doesn't change
59 * at run-time with the exception of the values array.
61 struct gcov_ctr_info
{
64 void (*merge
)(gcov_type
*, unsigned int);
68 * struct gcov_info - profiling data per object file
69 * @version: gcov version magic indicating the gcc version used for compilation
70 * @next: list head for a singly-linked list
72 * @filename: name of the associated gcov data file
73 * @n_functions: number of instrumented functions
74 * @functions: function data
75 * @ctr_mask: mask specifying which counter types are active
76 * @counts: counter data per counter type
78 * This data is generated by gcc during compilation and doesn't change
79 * at run-time with the exception of the next pointer.
83 struct gcov_info
*next
;
86 unsigned int n_functions
;
87 const struct gcov_fn_info
*functions
;
88 unsigned int ctr_mask
;
89 struct gcov_ctr_info counts
[0];
98 void gcov_event(enum gcov_action action
, struct gcov_info
*info
);
99 void gcov_enable_events(void);
101 /* Iterator control. */
103 struct gcov_iterator
;
105 struct gcov_iterator
*gcov_iter_new(struct gcov_info
*info
);
106 void gcov_iter_free(struct gcov_iterator
*iter
);
107 void gcov_iter_start(struct gcov_iterator
*iter
);
108 int gcov_iter_next(struct gcov_iterator
*iter
);
109 int gcov_iter_write(struct gcov_iterator
*iter
, struct seq_file
*seq
);
110 struct gcov_info
*gcov_iter_get_info(struct gcov_iterator
*iter
);
112 /* gcov_info control. */
113 void gcov_info_reset(struct gcov_info
*info
);
114 int gcov_info_is_compatible(struct gcov_info
*info1
, struct gcov_info
*info2
);
115 void gcov_info_add(struct gcov_info
*dest
, struct gcov_info
*source
);
116 struct gcov_info
*gcov_info_dup(struct gcov_info
*info
);
117 void gcov_info_free(struct gcov_info
*info
);
126 extern const struct gcov_link gcov_link
[];