[go: up one dir, main page]

File: dwarf.h

package info (click to toggle)
uftrace 0.13-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 5,212 kB
  • sloc: ansic: 53,313; python: 9,846; makefile: 838; asm: 703; cpp: 602; sh: 560; javascript: 191
file content (77 lines) | stat: -rw-r--r-- 2,352 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#ifndef UFTRACE_DWARF_H
#define UFTRACE_DWARF_H

#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>

#include "utils/filter.h"
#include "utils/rbtree.h"

struct uftrace_sym_info;

#ifdef HAVE_LIBDW
#include <elfutils/libdw.h>
#else
#define Dwarf void
#endif

struct uftrace_dbg_file {
	/* saved in uftrace_dbg_info.files */
	struct rb_node node;
	/* source file name */
	char *name;
};

/* we only keep the start location of symbol */
struct uftrace_dbg_loc {
	/* symbol for this location */
	struct uftrace_symbol *sym;
	/* filename info */
	struct uftrace_dbg_file *file;
	/* line number info */
	int line;
};

struct uftrace_dbg_info {
	/* opaque DWARF info pointer */
	Dwarf *dw;
	/* start address in memory for this module */
	uint64_t offset;
	/* rb tree of arguments */
	struct rb_root args;
	/* rb tree of return values */
	struct rb_root rets;
	/* rb tree of enum tags/values */
	struct rb_root enums;
	/* rb tree of file info */
	struct rb_root files;
	/* array of location - same order as symbol */
	struct uftrace_dbg_loc *locs;
	/* number of debug location info */
	size_t nr_locs;
	/* number of actually used debug location info */
	size_t nr_locs_used;
	/* ELF file type - EXEC, REL, DYN */
	int file_type;
	/* whether it needs to parse argument info */
	bool needs_args;
	/* whether it's loaded already */
	bool loaded;
	/* name of common directory path for source files (can be %NULL) */
	char *base_dir;
};

extern void prepare_debug_info(struct uftrace_sym_info *sinfo, enum uftrace_pattern_type ptype,
			       char *argspec, char *retspec, bool auto_args, bool force);
extern void finish_debug_info(struct uftrace_sym_info *sinfo);
extern bool debug_info_has_argspec(struct uftrace_dbg_info *dinfo);
extern bool debug_info_has_location(struct uftrace_dbg_info *dinfo);
extern char *get_dwarf_argspec(struct uftrace_dbg_info *dinfo, char *name, unsigned long addr);
extern char *get_dwarf_retspec(struct uftrace_dbg_info *dinfo, char *name, unsigned long addr);
struct uftrace_dbg_loc *find_file_line(struct uftrace_sym_info *sinfo, uint64_t addr);
extern void save_debug_info(struct uftrace_sym_info *sinfo, const char *dirname);
extern void load_debug_info(struct uftrace_sym_info *sinfo, bool needs_srcline);
extern void save_debug_file(FILE *fp, char code, char *str, unsigned long val);

#endif /* UFTRACE_DWARF_H */