1 #ifndef _PERF_TRACE_BEAUTY_H 2 #define _PERF_TRACE_BEAUTY_H 3 4 #include <linux/kernel.h> 5 #include <linux/types.h> 6 7 struct strarray { 8 int offset; 9 int nr_entries; 10 const char **entries; 11 }; 12 13 #define DEFINE_STRARRAY(array) struct strarray strarray__##array = { \ 14 .nr_entries = ARRAY_SIZE(array), \ 15 .entries = array, \ 16 } 17 18 #define DEFINE_STRARRAY_OFFSET(array, off) struct strarray strarray__##array = { \ 19 .offset = off, \ 20 .nr_entries = ARRAY_SIZE(array), \ 21 .entries = array, \ 22 } 23 24 size_t strarray__scnprintf(struct strarray *sa, char *bf, size_t size, const char *intfmt, int val); 25 26 struct trace; 27 struct thread; 28 29 /** 30 * @val: value of syscall argument being formatted 31 * @args: All the args, use syscall_args__val(arg, nth) to access one 32 * @thread: tid state (maps, pid, tid, etc) 33 * @trace: 'perf trace' internals: all threads, etc 34 * @parm: private area, may be an strarray, for instance 35 * @idx: syscall arg idx (is this the first?) 36 * @mask: a syscall arg may mask another arg, see syscall_arg__scnprintf_futex_op 37 */ 38 39 struct syscall_arg { 40 unsigned long val; 41 unsigned char *args; 42 struct thread *thread; 43 struct trace *trace; 44 void *parm; 45 u8 idx; 46 u8 mask; 47 }; 48 49 unsigned long syscall_arg__val(struct syscall_arg *arg, u8 idx); 50 51 size_t syscall_arg__scnprintf_strarrays(char *bf, size_t size, struct syscall_arg *arg); 52 #define SCA_STRARRAYS syscall_arg__scnprintf_strarrays 53 54 size_t syscall_arg__scnprintf_fd(char *bf, size_t size, struct syscall_arg *arg); 55 #define SCA_FD syscall_arg__scnprintf_fd 56 57 size_t syscall_arg__scnprintf_hex(char *bf, size_t size, struct syscall_arg *arg); 58 #define SCA_HEX syscall_arg__scnprintf_hex 59 60 size_t syscall_arg__scnprintf_int(char *bf, size_t size, struct syscall_arg *arg); 61 #define SCA_INT syscall_arg__scnprintf_int 62 63 size_t syscall_arg__scnprintf_long(char *bf, size_t size, struct syscall_arg *arg); 64 #define SCA_LONG syscall_arg__scnprintf_long 65 66 size_t syscall_arg__scnprintf_pid(char *bf, size_t size, struct syscall_arg *arg); 67 #define SCA_PID syscall_arg__scnprintf_pid 68 69 size_t syscall_arg__scnprintf_clone_flags(char *bf, size_t size, struct syscall_arg *arg); 70 #define SCA_CLONE_FLAGS syscall_arg__scnprintf_clone_flags 71 72 size_t syscall_arg__scnprintf_fcntl_cmd(char *bf, size_t size, struct syscall_arg *arg); 73 #define SCA_FCNTL_CMD syscall_arg__scnprintf_fcntl_cmd 74 75 size_t syscall_arg__scnprintf_fcntl_arg(char *bf, size_t size, struct syscall_arg *arg); 76 #define SCA_FCNTL_ARG syscall_arg__scnprintf_fcntl_arg 77 78 size_t syscall_arg__scnprintf_ioctl_cmd(char *bf, size_t size, struct syscall_arg *arg); 79 #define SCA_IOCTL_CMD syscall_arg__scnprintf_ioctl_cmd 80 81 size_t syscall_arg__scnprintf_pkey_alloc_access_rights(char *bf, size_t size, struct syscall_arg *arg); 82 #define SCA_PKEY_ALLOC_ACCESS_RIGHTS syscall_arg__scnprintf_pkey_alloc_access_rights 83 84 size_t syscall_arg__scnprintf_open_flags(char *bf, size_t size, struct syscall_arg *arg); 85 #define SCA_OPEN_FLAGS syscall_arg__scnprintf_open_flags 86 87 size_t syscall_arg__scnprintf_statx_flags(char *bf, size_t size, struct syscall_arg *arg); 88 #define SCA_STATX_FLAGS syscall_arg__scnprintf_statx_flags 89 90 size_t syscall_arg__scnprintf_statx_mask(char *bf, size_t size, struct syscall_arg *arg); 91 #define SCA_STATX_MASK syscall_arg__scnprintf_statx_mask 92 93 size_t open__scnprintf_flags(unsigned long flags, char *bf, size_t size); 94 95 void syscall_arg__set_ret_scnprintf(struct syscall_arg *arg, 96 size_t (*ret_scnprintf)(char *bf, size_t size, struct syscall_arg *arg)); 97 98 #endif /* _PERF_TRACE_BEAUTY_H */ 99