cregit-Linux how code gets into the kernel

Release 4.11 tools/perf/util/annotate.h

Directory: tools/perf/util
#ifndef __PERF_ANNOTATE_H

#define __PERF_ANNOTATE_H

#include <stdbool.h>
#include <stdint.h>
#include <linux/types.h>
#include "symbol.h"
#include "hist.h"
#include "sort.h"
#include <linux/list.h>
#include <linux/rbtree.h>
#include <pthread.h>

struct ins_ops;


struct ins {
	
const char     *name;
	
struct ins_ops *ops;
};


struct ins_operands {
	
char	*raw;
	struct {
		
char	*raw;
		
char	*name;
		
u64	addr;
		
s64	offset;
		
bool	offset_avail;
	} 
target;
	union {
		struct {
			
char	*raw;
			
char	*name;
			
u64	addr;
		} 
source;
		struct {
			
struct ins	    ins;
			
struct ins_operands *ops;
		} 
locked;
	};
};

struct arch;


struct ins_ops {
	
void (*free)(struct ins_operands *ops);
	
int (*parse)(struct arch *arch, struct ins_operands *ops, struct map *map);
	
int (*scnprintf)(struct ins *ins, char *bf, size_t size,
			 struct ins_operands *ops);
};

bool ins__is_jump(const struct ins *ins);
bool ins__is_call(const struct ins *ins);
bool ins__is_ret(const struct ins *ins);
int ins__scnprintf(struct ins *ins, char *bf, size_t size, struct ins_operands *ops);

struct annotation;


struct disasm_line {
	
struct list_head    node;
	
s64		    offset;
	
char		    *line;
	
struct ins	    ins;
	
int		    line_nr;
	
float		    ipc;
	
u64		    cycles;
	
struct ins_operands ops;
};


static inline bool disasm_line__has_offset(const struct disasm_line *dl) { return dl->ops.target.offset_avail; }

Contributors

PersonTokensPropCommitsCommitProp
Arnaldo Carvalho de Melo2195.45%150.00%
Ravi Bangoria14.55%150.00%
Total22100.00%2100.00%

void disasm_line__free(struct disasm_line *dl); struct disasm_line *disasm__get_next_ip_line(struct list_head *head, struct disasm_line *pos); int disasm_line__scnprintf(struct disasm_line *dl, char *bf, size_t size, bool raw); size_t disasm__fprintf(struct list_head *head, FILE *fp); double disasm__calc_percent(struct annotation *notes, int evidx, s64 offset, s64 end, const char **path, u64 *nr_samples); struct sym_hist { u64 sum; u64 addr[0]; }; struct cyc_hist { u64 start; u64 cycles; u64 cycles_aggr; u32 num; u32 num_aggr; u8 have_start; /* 1 byte padding */ u16 reset; }; struct source_line_samples { double percent; double percent_sum; double nr; }; struct source_line { struct rb_node node; char *path; int nr_pcnt; struct source_line_samples samples[1]; }; /** struct annotated_source - symbols with hits have this attached as in sannotation * * @histogram: Array of addr hit histograms per event being monitored * @lines: If 'print_lines' is specified, per source code line percentages * @source: source parsed from a disassembler like objdump -dS * @cyc_hist: Average cycles per basic block * * lines is allocated, percentages calculated and all sorted by percentage * when the annotation is about to be presented, so the percentages are for * one of the entries in the histogram array, i.e. for the event/counter being * presented. It is deallocated right after symbol__{tui,tty,etc}_annotate * returns. */ struct annotated_source { struct list_head source; struct source_line *lines; int nr_histograms; size_t sizeof_sym_hist; struct cyc_hist *cycles_hist; struct sym_hist histograms[0]; }; struct annotation { pthread_mutex_t lock; u64 max_coverage; struct annotated_source *src; };
static inline struct sym_hist *annotation__histogram(struct annotation *notes, int idx) { return (((void *)&notes->src->histograms) + (notes->src->sizeof_sym_hist * idx)); }

Contributors

PersonTokensPropCommitsCommitProp
Arnaldo Carvalho de Melo43100.00%2100.00%
Total43100.00%2100.00%


static inline struct annotation *symbol__annotation(struct symbol *sym) { return (void *)sym - symbol_conf.priv_size; }

Contributors

PersonTokensPropCommitsCommitProp
Arnaldo Carvalho de Melo1664.00%150.00%
Namhyung Kim936.00%150.00%
Total25100.00%2100.00%

int addr_map_symbol__inc_samples(struct addr_map_symbol *ams, int evidx); int addr_map_symbol__account_cycles(struct addr_map_symbol *ams, struct addr_map_symbol *start, unsigned cycles); int hist_entry__inc_addr_samples(struct hist_entry *he, int evidx, u64 addr); int symbol__alloc_hist(struct symbol *sym); void symbol__annotate_zero_histograms(struct symbol *sym); int symbol__disassemble(struct symbol *sym, struct map *map, const char *arch_name, size_t privsize); enum symbol_disassemble_errno { SYMBOL_ANNOTATE_ERRNO__SUCCESS = 0, /* * Choose an arbitrary negative big number not to clash with standard * errno since SUS requires the errno has distinct positive values. * See 'Issue 6' in the link below. * * http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html */ __SYMBOL_ANNOTATE_ERRNO__START = -10000, SYMBOL_ANNOTATE_ERRNO__NO_VMLINUX = __SYMBOL_ANNOTATE_ERRNO__START, __SYMBOL_ANNOTATE_ERRNO__END, }; int symbol__strerror_disassemble(struct symbol *sym, struct map *map, int errnum, char *buf, size_t buflen); int symbol__annotate_printf(struct symbol *sym, struct map *map, struct perf_evsel *evsel, bool full_paths, int min_pcnt, int max_lines, int context); void symbol__annotate_zero_histogram(struct symbol *sym, int evidx); void symbol__annotate_decay_histogram(struct symbol *sym, int evidx); void disasm__purge(struct list_head *head); bool ui__has_annotation(void); int symbol__tty_annotate(struct symbol *sym, struct map *map, struct perf_evsel *evsel, bool print_lines, bool full_paths, int min_pcnt, int max_lines); #ifdef HAVE_SLANG_SUPPORT int symbol__tui_annotate(struct symbol *sym, struct map *map, struct perf_evsel *evsel, struct hist_browser_timer *hbt); #else
static inline int symbol__tui_annotate(struct symbol *sym __maybe_unused, struct map *map __maybe_unused, struct perf_evsel *evsel __maybe_unused, struct hist_browser_timer *hbt __maybe_unused) { return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Namhyung Kim1750.00%250.00%
Arnaldo Carvalho de Melo1338.24%125.00%
Irina Tirdea411.76%125.00%
Total34100.00%4100.00%

#endif extern const char *disassembler_style; #endif /* __PERF_ANNOTATE_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
Arnaldo Carvalho de Melo65675.06%2854.90%
Namhyung Kim11913.62%1019.61%
Andi Kleen657.44%47.84%
Naveen N. Rao101.14%11.96%
Irina Tirdea70.80%23.92%
Martin Liška60.69%11.96%
Ravi Bangoria50.57%11.96%
Peter Zijlstra30.34%11.96%
Ingo Molnar10.11%11.96%
Borislav Petkov10.11%11.96%
Jiri Olsa10.11%11.96%
Total874100.00%51100.00%
Directory: tools/perf/util
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.