tools/perf/util/symbol.h

Source file repositories/reference/linux-study-clean/tools/perf/util/symbol.h

File Facts

System
Linux kernel
Corpus path
tools/perf/util/symbol.h
Extension
.h
Size
8832 bytes
Lines
283
Domain
Support Tooling And Documentation
Bucket
tools
Inferred role
Support Tooling And Documentation: implementation source
Status
source implementation candidate

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

struct symbol {
	struct rb_node	rb_node;
	/** Range of symbol [start, end). */
	u64		start;
	u64		end;
	/** Length of the string name. */
	u16		namelen;
	/** ELF symbol type as defined for st_info. E.g STT_OBJECT or STT_FUNC. */
	u8		type:4;
	/** ELF binding type as defined for st_info. E.g. STB_WEAK or STB_GLOBAL. */
	u8		binding:4;
	/** Set true for kernel symbols of idle routines. */
	u8		idle:1;
	/** Resolvable but tools ignore it (e.g. idle routines). */
	u8		ignore:1;
	/** Symbol for an inlined function. */
	u8		inlined:1;
	/** Has symbol__annotate2 been performed. */
	u8		annotate2:1;
	/** Symbol is an alias of an STT_GNU_IFUNC */
	u8		ifunc_alias:1;
	/** Architecture specific. Unused except on PPC where it holds st_other. */
	u8		arch_sym;
	/** The name of length namelen associated with the symbol. */
	char		name[];
};

void symbol__delete(struct symbol *sym);
void symbols__delete(struct rb_root_cached *symbols);

/* symbols__for_each_entry - iterate over symbols (rb_root)
 *
 * @symbols: the rb_root of symbols
 * @pos: the 'struct symbol *' to use as a loop cursor
 * @nd: the 'struct rb_node *' to use as a temporary storage
 */
#define symbols__for_each_entry(symbols, pos, nd)			\
	for (nd = rb_first_cached(symbols);					\
	     nd && (pos = rb_entry(nd, struct symbol, rb_node));	\
	     nd = rb_next(nd))

static inline size_t symbol__size(const struct symbol *sym)
{
	return sym->end - sym->start;
}

struct strlist;
struct intlist;

static inline int __symbol__join_symfs(char *bf, size_t size, const char *path)
{
	if (symbol_conf.symfs_layout_flat)
		return path__join(bf, size, symbol_conf.symfs, perf_basename(path));

	return path__join(bf, size, symbol_conf.symfs, path);
}

#define symbol__join_symfs(bf, path) __symbol__join_symfs(bf, sizeof(bf), path)

extern int vmlinux_path__nr_entries;
extern char **vmlinux_path;

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

struct ref_reloc_sym {
	const char	*name;
	u64		addr;
	u64		unrelocated_addr;
};

int dso__load(struct dso *dso, struct map *map);
int dso__load_vmlinux(struct dso *dso, struct map *map,
		      const char *vmlinux, bool vmlinux_allocated);
int dso__load_vmlinux_path(struct dso *dso, struct map *map);
int __dso__load_kallsyms(struct dso *dso, const char *filename, struct map *map,
			 bool no_kcore);
int dso__load_kallsyms(struct dso *dso, const char *filename, struct map *map);

void dso__insert_symbol(struct dso *dso,
			struct symbol *sym);
void dso__delete_symbol(struct dso *dso,
			struct symbol *sym);

struct symbol *dso__find_symbol(struct dso *dso, u64 addr);
struct symbol *dso__find_symbol_nocache(struct dso *dso, u64 addr);

struct symbol *dso__next_symbol_by_name(struct dso *dso, size_t *idx);

Annotation

Implementation Notes