forked from namhyung/uftrace
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathargspec.h
90 lines (76 loc) · 2.29 KB
/
argspec.h
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
78
79
80
81
82
83
84
85
86
87
88
89
90
#ifndef UFTRACE_ARGSPEC_H
#define UFTRACE_ARGSPEC_H
#include "utils/list.h"
#include "utils/rbtree.h"
#include <stdbool.h>
#include <stdio.h>
enum uftrace_arg_format {
ARG_FMT_AUTO,
ARG_FMT_SINT,
ARG_FMT_UINT,
ARG_FMT_HEX,
ARG_FMT_OCT,
ARG_FMT_STR,
ARG_FMT_CHAR,
ARG_FMT_FLOAT,
ARG_FMT_STD_STRING,
ARG_FMT_PTR,
ARG_FMT_ENUM,
ARG_FMT_STRUCT,
};
#define ARG_TYPE_INDEX 0
#define ARG_TYPE_FLOAT 1
#define ARG_TYPE_REG 2
#define ARG_TYPE_STACK 3
/* should match with uftrace_arg_format above */
#define ARG_SPEC_CHARS "diuxoscfSpet"
/**
* uftrace_arg_spec contains arguments and return value info.
*
* If idx is zero, it means the recorded data is return value.
*
* If idx is not zero, it means the recorded data is arguments
* and idx shows the sequence order of arguments.
*/
#define RETVAL_IDX 0
struct uftrace_arg_spec {
struct list_head list;
int idx;
enum uftrace_arg_format fmt;
int size;
bool exact;
unsigned char type;
short struct_reg_cnt;
union {
short reg_idx;
short stack_ofs;
};
char *type_name;
short struct_regs[4];
};
struct uftrace_filter_setting;
struct uftrace_arg_spec *parse_argspec(char *str, struct uftrace_filter_setting *setting);
void setup_auto_args(struct uftrace_filter_setting *setting);
void setup_auto_args_str(char *args, char *rets, char *enums,
struct uftrace_filter_setting *setting);
void finish_auto_args(void);
void free_arg_spec(struct uftrace_arg_spec *arg);
struct uftrace_dbg_info;
struct uftrace_filter;
struct uftrace_trigger;
struct uftrace_filter *find_auto_argspec(struct uftrace_filter *filter, struct uftrace_trigger *tr,
struct uftrace_dbg_info *dinfo,
struct uftrace_filter_setting *setting);
struct uftrace_filter *find_auto_retspec(struct uftrace_filter *filter, struct uftrace_trigger *tr,
struct uftrace_dbg_info *dinfo,
struct uftrace_filter_setting *setting);
char *get_auto_argspec_str(void);
char *get_auto_retspec_str(void);
char *get_auto_enum_str(void);
int extract_trigger_args(char **pargs, char **prets, char *trigger);
int parse_enum_string(char *enum_str, struct rb_root *root);
char *get_enum_string(struct rb_root *root, char *name, long val);
void save_enum_def(struct rb_root *root, FILE *fp);
void release_enum_def(struct rb_root *root);
extern struct rb_root dwarf_enum;
#endif /* UFTRACE_ARGSPEC_H */