Linux Audio

Check our new training course

Loading...
Note: File does not exist in v5.4.
  1/* SPDX-License-Identifier: GPL-2.0 */
  2#ifndef _PERF_ANNOTATE_DATA_H
  3#define _PERF_ANNOTATE_DATA_H
  4
  5#include <errno.h>
  6#include <linux/compiler.h>
  7#include <linux/rbtree.h>
  8#include <linux/types.h>
  9
 10struct evsel;
 11struct map_symbol;
 12
 13/**
 14 * struct annotated_member - Type of member field
 15 * @node: List entry in the parent list
 16 * @children: List head for child nodes
 17 * @type_name: Name of the member type
 18 * @var_name: Name of the member variable
 19 * @offset: Offset from the outer data type
 20 * @size: Size of the member field
 21 *
 22 * This represents a member type in a data type.
 23 */
 24struct annotated_member {
 25	struct list_head node;
 26	struct list_head children;
 27	char *type_name;
 28	char *var_name;
 29	int offset;
 30	int size;
 31};
 32
 33/**
 34 * struct type_hist_entry - Histogram entry per offset
 35 * @nr_samples: Number of samples
 36 * @period: Count of event
 37 */
 38struct type_hist_entry {
 39	int nr_samples;
 40	u64 period;
 41};
 42
 43/**
 44 * struct type_hist - Type histogram for each event
 45 * @nr_samples: Total number of samples in this data type
 46 * @period: Total count of the event in this data type
 47 * @offset: Array of histogram entry
 48 */
 49struct type_hist {
 50	u64			nr_samples;
 51	u64			period;
 52	struct type_hist_entry	addr[];
 53};
 54
 55/**
 56 * struct annotated_data_type - Data type to profile
 57 * @node: RB-tree node for dso->type_tree
 58 * @self: Actual type information
 59 * @nr_histogram: Number of histogram entries
 60 * @histograms: An array of pointers to histograms
 61 *
 62 * This represents a data type accessed by samples in the profile data.
 63 */
 64struct annotated_data_type {
 65	struct rb_node node;
 66	struct annotated_member self;
 67	int nr_histograms;
 68	struct type_hist **histograms;
 69};
 70
 71extern struct annotated_data_type unknown_type;
 72
 73/**
 74 * struct annotated_data_stat - Debug statistics
 75 * @total: Total number of entry
 76 * @no_sym: No symbol or map found
 77 * @no_insn: Failed to get disasm line
 78 * @no_insn_ops: The instruction has no operands
 79 * @no_mem_ops: The instruction has no memory operands
 80 * @no_reg: Failed to extract a register from the operand
 81 * @no_dbginfo: The binary has no debug information
 82 * @no_cuinfo: Failed to find a compile_unit
 83 * @no_var: Failed to find a matching variable
 84 * @no_typeinfo: Failed to get a type info for the variable
 85 * @invalid_size: Failed to get a size info of the type
 86 * @bad_offset: The access offset is out of the type
 87 */
 88struct annotated_data_stat {
 89	int total;
 90	int no_sym;
 91	int no_insn;
 92	int no_insn_ops;
 93	int no_mem_ops;
 94	int no_reg;
 95	int no_dbginfo;
 96	int no_cuinfo;
 97	int no_var;
 98	int no_typeinfo;
 99	int invalid_size;
100	int bad_offset;
101};
102extern struct annotated_data_stat ann_data_stat;
103
104#ifdef HAVE_DWARF_SUPPORT
105
106/* Returns data type at the location (ip, reg, offset) */
107struct annotated_data_type *find_data_type(struct map_symbol *ms, u64 ip,
108					   int reg, int offset);
109
110/* Update type access histogram at the given offset */
111int annotated_data_type__update_samples(struct annotated_data_type *adt,
112					struct evsel *evsel, int offset,
113					int nr_samples, u64 period);
114
115/* Release all data type information in the tree */
116void annotated_data_type__tree_delete(struct rb_root *root);
117
118#else /* HAVE_DWARF_SUPPORT */
119
120static inline struct annotated_data_type *
121find_data_type(struct map_symbol *ms __maybe_unused, u64 ip __maybe_unused,
122	       int reg __maybe_unused, int offset __maybe_unused)
123{
124	return NULL;
125}
126
127static inline int
128annotated_data_type__update_samples(struct annotated_data_type *adt __maybe_unused,
129				    struct evsel *evsel __maybe_unused,
130				    int offset __maybe_unused,
131				    int nr_samples __maybe_unused,
132				    u64 period __maybe_unused)
133{
134	return -1;
135}
136
137static inline void annotated_data_type__tree_delete(struct rb_root *root __maybe_unused)
138{
139}
140
141#endif /* HAVE_DWARF_SUPPORT */
142
143#endif /* _PERF_ANNOTATE_DATA_H */