1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- /* SPDX-License-Identifier: GPL-2.0 */
- /*
- * 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 <oberpar@linux.vnet.ibm.com>
- *
- * Uses gcc-internal data definitions.
- */
- #ifndef GCOV_H
- #define GCOV_H GCOV_H
- #include <linux/module.h>
- #include <linux/types.h>
- /*
- * 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.
- */
- #define GCOV_DATA_MAGIC ((unsigned int) 0x67636461)
- #define GCOV_TAG_FUNCTION ((unsigned int) 0x01000000)
- #define GCOV_TAG_COUNTER_BASE ((unsigned int) 0x01a10000)
- #define GCOV_TAG_FOR_COUNTER(count) \
- (GCOV_TAG_COUNTER_BASE + ((unsigned int) (count) << 17))
- #if BITS_PER_LONG >= 64
- typedef long gcov_type;
- #else
- 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;
- /* 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);
- bool gcov_info_within_module(struct gcov_info *info, struct module *mod);
- /* Base interface. */
- enum gcov_action {
- GCOV_ADD,
- GCOV_REMOVE,
- };
- void gcov_event(enum gcov_action action, struct gcov_info *info);
- void gcov_enable_events(void);
- /* Iterator control. */
- struct seq_file;
- struct gcov_iterator;
- struct gcov_iterator *gcov_iter_new(struct gcov_info *info);
- void gcov_iter_free(struct gcov_iterator *iter);
- void gcov_iter_start(struct gcov_iterator *iter);
- int gcov_iter_next(struct gcov_iterator *iter);
- int gcov_iter_write(struct gcov_iterator *iter, struct seq_file *seq);
- struct gcov_info *gcov_iter_get_info(struct gcov_iterator *iter);
- /* gcov_info control. */
- void gcov_info_reset(struct gcov_info *info);
- int gcov_info_is_compatible(struct gcov_info *info1, struct gcov_info *info2);
- void gcov_info_add(struct gcov_info *dest, struct gcov_info *source);
- struct gcov_info *gcov_info_dup(struct gcov_info *info);
- void gcov_info_free(struct gcov_info *info);
- struct gcov_link {
- enum {
- OBJ_TREE,
- SRC_TREE,
- } dir;
- const char *ext;
- };
- extern const struct gcov_link gcov_link[];
- extern int gcov_events_enabled;
- extern struct mutex gcov_lock;
- #endif /* GCOV_H */
|