1 /* SPDX-License-Identifier: GPL-2.0 */ 2 3 /* Stage 6 definitions for creating trace events */ 4 5 #undef __entry 6 #define __entry entry 7 8 #undef __field 9 #define __field(type, item) 10 11 #undef __field_struct 12 #define __field_struct(type, item) 13 14 #undef __array 15 #define __array(type, item, len) 16 17 #undef __dynamic_array 18 #define __dynamic_array(type, item, len) \ 19 __entry->__data_loc_##item = __data_offsets.item; 20 21 #undef __string 22 #define __string(item, src) __dynamic_array(char, item, -1) 23 24 #undef __string_len 25 #define __string_len(item, src, len) __dynamic_array(char, item, -1) 26 27 #undef __vstring 28 #define __vstring(item, fmt, ap) __dynamic_array(char, item, -1) 29 30 #undef __assign_str 31 #define __assign_str(dst, src) \ 32 strcpy(__get_str(dst), (src) ? (const char *)(src) : "(null)"); 33 34 #undef __assign_str_len 35 #define __assign_str_len(dst, src, len) \ 36 do { \ 37 memcpy(__get_str(dst), (src), (len)); \ 38 __get_str(dst)[len] = '\0'; \ 39 } while(0) 40 41 #undef __assign_vstr 42 #define __assign_vstr(dst, fmt, va) \ 43 do { \ 44 va_list __cp_va; \ 45 va_copy(__cp_va, *(va)); \ 46 vsnprintf(__get_str(dst), TRACE_EVENT_STR_MAX, fmt, __cp_va); \ 47 va_end(__cp_va); \ 48 } while (0) 49 50 #undef __bitmask 51 #define __bitmask(item, nr_bits) __dynamic_array(unsigned long, item, -1) 52 53 #undef __get_bitmask 54 #define __get_bitmask(field) (char *)__get_dynamic_array(field) 55 56 #undef __assign_bitmask 57 #define __assign_bitmask(dst, src, nr_bits) \ 58 memcpy(__get_bitmask(dst), (src), __bitmask_size_in_bytes(nr_bits)) 59 60 #undef __sockaddr 61 #define __sockaddr(field, len) __dynamic_array(u8, field, len) 62 63 #undef __get_sockaddr 64 #define __get_sockaddr(field) ((struct sockaddr *)__get_dynamic_array(field)) 65 66 #undef __assign_sockaddr 67 #define __assign_sockaddr(dest, src, len) \ 68 memcpy(__get_dynamic_array(dest), src, len) 69 70 #undef __rel_dynamic_array 71 #define __rel_dynamic_array(type, item, len) \ 72 __entry->__rel_loc_##item = __data_offsets.item; 73 74 #undef __rel_string 75 #define __rel_string(item, src) __rel_dynamic_array(char, item, -1) 76 77 #undef __rel_string_len 78 #define __rel_string_len(item, src, len) __rel_dynamic_array(char, item, -1) 79 80 #undef __assign_rel_str 81 #define __assign_rel_str(dst, src) \ 82 strcpy(__get_rel_str(dst), (src) ? (const char *)(src) : "(null)"); 83 84 #undef __assign_rel_str_len 85 #define __assign_rel_str_len(dst, src, len) \ 86 do { \ 87 memcpy(__get_rel_str(dst), (src), (len)); \ 88 __get_rel_str(dst)[len] = '\0'; \ 89 } while (0) 90 91 #undef __rel_bitmask 92 #define __rel_bitmask(item, nr_bits) __rel_dynamic_array(unsigned long, item, -1) 93 94 #undef __get_rel_bitmask 95 #define __get_rel_bitmask(field) (char *)__get_rel_dynamic_array(field) 96 97 #undef __assign_rel_bitmask 98 #define __assign_rel_bitmask(dst, src, nr_bits) \ 99 memcpy(__get_rel_bitmask(dst), (src), __bitmask_size_in_bytes(nr_bits)) 100 101 #undef __rel_sockaddr 102 #define __rel_sockaddr(field, len) __rel_dynamic_array(u8, field, len) 103 104 #undef __get_rel_sockaddr 105 #define __get_rel_sockaddr(field) ((struct sockaddr *)__get_rel_dynamic_array(field)) 106 107 #undef __assign_rel_sockaddr 108 #define __assign_rel_sockaddr(dest, src, len) \ 109 memcpy(__get_rel_dynamic_array(dest), src, len) 110 111 #undef TP_fast_assign 112 #define TP_fast_assign(args...) args 113 114 #undef __perf_count 115 #define __perf_count(c) (c) 116 117 #undef __perf_task 118 #define __perf_task(t) (t) 119