Blame view
include/linux/btf_ids.h
5.05 KB
5a2798ab3 bpf: Add BTF_ID_L... |
1 2 3 4 |
/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _LINUX_BTF_IDS_H #define _LINUX_BTF_IDS_H |
eae2e83e6 bpf: Add BTF_SET_... |
5 6 7 8 |
struct btf_id_set { u32 cnt; u32 ids[]; }; |
079ef5367 bpf: Fix build fo... |
9 |
#ifdef CONFIG_DEBUG_INFO_BTF |
5a2798ab3 bpf: Add BTF_ID_L... |
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#include <linux/compiler.h> /* for __PASTE */ /* * Following macros help to define lists of BTF IDs placed * in .BTF_ids section. They are initially filled with zeros * (during compilation) and resolved later during the * linking phase by resolve_btfids tool. * * Any change in list layout must be reflected in resolve_btfids * tool logic. */ #define BTF_IDS_SECTION ".BTF_ids" #define ____BTF_ID(symbol) \ asm( \ ".pushsection " BTF_IDS_SECTION ",\"a\"; " \ ".local " #symbol " ; " \ |
11bb2f7a4 bpf: Fix cross bu... |
30 31 |
".type " #symbol ", STT_OBJECT; " \ |
5a2798ab3 bpf: Add BTF_ID_L... |
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 |
".size " #symbol ", 4; " \ #symbol ": " \ ".zero 4 " \ ".popsection; "); #define __BTF_ID(symbol) \ ____BTF_ID(symbol) #define __ID(prefix) \ __PASTE(prefix, __COUNTER__) /* * The BTF_ID defines unique symbol for each ID pointing * to 4 zero bytes. */ #define BTF_ID(prefix, name) \ __BTF_ID(__ID(__BTF_ID__##prefix##__##name##__)) /* * The BTF_ID_LIST macro defines pure (unsorted) list * of BTF IDs, with following layout: * * BTF_ID_LIST(list1) * BTF_ID(type1, name1) * BTF_ID(type2, name2) * * list1: * __BTF_ID__type1__name1__1: * .zero 4 * __BTF_ID__type2__name2__2: * .zero 4 * */ |
0f12e584b bpf: Add BTF_ID_L... |
69 |
#define __BTF_ID_LIST(name, scope) \ |
5a2798ab3 bpf: Add BTF_ID_L... |
70 71 72 |
asm( \ ".pushsection " BTF_IDS_SECTION ",\"a\"; " \ |
0f12e584b bpf: Add BTF_ID_L... |
73 74 |
"." #scope " " #name "; " \ |
5a2798ab3 bpf: Add BTF_ID_L... |
75 76 |
#name ":; " \ |
eae2e83e6 bpf: Add BTF_SET_... |
77 78 |
".popsection; "); |
5a2798ab3 bpf: Add BTF_ID_L... |
79 80 |
#define BTF_ID_LIST(name) \ |
0f12e584b bpf: Add BTF_ID_L... |
81 |
__BTF_ID_LIST(name, local) \ |
5a2798ab3 bpf: Add BTF_ID_L... |
82 |
extern u32 name[]; |
0f12e584b bpf: Add BTF_ID_L... |
83 84 |
#define BTF_ID_LIST_GLOBAL(name) \ __BTF_ID_LIST(name, globl) |
27774b707 btf: Add BTF_ID_L... |
85 86 87 88 89 90 |
/* The BTF_ID_LIST_SINGLE macro defines a BTF_ID_LIST with * a single entry. */ #define BTF_ID_LIST_SINGLE(name, prefix, typename) \ BTF_ID_LIST(name) \ BTF_ID(prefix, typename) |
5a2798ab3 bpf: Add BTF_ID_L... |
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
/* * The BTF_ID_UNUSED macro defines 4 zero bytes. * It's used when we want to define 'unused' entry * in BTF_ID_LIST, like: * * BTF_ID_LIST(bpf_skb_output_btf_ids) * BTF_ID(struct, sk_buff) * BTF_ID_UNUSED * BTF_ID(struct, task_struct) */ #define BTF_ID_UNUSED \ asm( \ ".pushsection " BTF_IDS_SECTION ",\"a\"; " \ ".zero 4 " \ ".popsection; "); |
eae2e83e6 bpf: Add BTF_SET_... |
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
/* * The BTF_SET_START/END macros pair defines sorted list of * BTF IDs plus its members count, with following layout: * * BTF_SET_START(list) * BTF_ID(type1, name1) * BTF_ID(type2, name2) * BTF_SET_END(list) * * __BTF_ID__set__list: * .zero 4 * list: * __BTF_ID__type1__name1__3: * .zero 4 * __BTF_ID__type2__name2__4: * .zero 4 * */ #define __BTF_SET_START(name, scope) \ asm( \ ".pushsection " BTF_IDS_SECTION ",\"a\"; " \ "." #scope " __BTF_ID__set__" #name "; " \ "__BTF_ID__set__" #name ":; " \ ".zero 4 " \ ".popsection; "); #define BTF_SET_START(name) \ __BTF_ID_LIST(name, local) \ __BTF_SET_START(name, local) #define BTF_SET_START_GLOBAL(name) \ __BTF_ID_LIST(name, globl) \ __BTF_SET_START(name, globl) #define BTF_SET_END(name) \ asm( \ ".pushsection " BTF_IDS_SECTION ",\"a\"; " \ ".size __BTF_ID__set__" #name ", .-" #name " " \ ".popsection; "); \ extern struct btf_id_set name; |
079ef5367 bpf: Fix build fo... |
158 159 160 161 162 |
#else #define BTF_ID_LIST(name) static u32 name[5]; #define BTF_ID(prefix, name) #define BTF_ID_UNUSED |
0f12e584b bpf: Add BTF_ID_L... |
163 |
#define BTF_ID_LIST_GLOBAL(name) u32 name[1]; |
27774b707 btf: Add BTF_ID_L... |
164 |
#define BTF_ID_LIST_SINGLE(name, prefix, typename) static u32 name[1]; |
eae2e83e6 bpf: Add BTF_SET_... |
165 166 167 |
#define BTF_SET_START(name) static struct btf_id_set name = { 0 }; #define BTF_SET_START_GLOBAL(name) static struct btf_id_set name = { 0 }; #define BTF_SET_END(name) |
079ef5367 bpf: Fix build fo... |
168 169 |
#endif /* CONFIG_DEBUG_INFO_BTF */ |
5a2798ab3 bpf: Add BTF_ID_L... |
170 |
|
fce557bce bpf: Make btf_soc... |
171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 |
#ifdef CONFIG_NET /* Define a list of socket types which can be the argument for * skc_to_*_sock() helpers. All these sockets should have * sock_common as the first argument in its memory layout. */ #define BTF_SOCK_TYPE_xxx \ BTF_SOCK_TYPE(BTF_SOCK_TYPE_INET, inet_sock) \ BTF_SOCK_TYPE(BTF_SOCK_TYPE_INET_CONN, inet_connection_sock) \ BTF_SOCK_TYPE(BTF_SOCK_TYPE_INET_REQ, inet_request_sock) \ BTF_SOCK_TYPE(BTF_SOCK_TYPE_INET_TW, inet_timewait_sock) \ BTF_SOCK_TYPE(BTF_SOCK_TYPE_REQ, request_sock) \ BTF_SOCK_TYPE(BTF_SOCK_TYPE_SOCK, sock) \ BTF_SOCK_TYPE(BTF_SOCK_TYPE_SOCK_COMMON, sock_common) \ BTF_SOCK_TYPE(BTF_SOCK_TYPE_TCP, tcp_sock) \ BTF_SOCK_TYPE(BTF_SOCK_TYPE_TCP_REQ, tcp_request_sock) \ BTF_SOCK_TYPE(BTF_SOCK_TYPE_TCP_TW, tcp_timewait_sock) \ BTF_SOCK_TYPE(BTF_SOCK_TYPE_TCP6, tcp6_sock) \ BTF_SOCK_TYPE(BTF_SOCK_TYPE_UDP, udp_sock) \ BTF_SOCK_TYPE(BTF_SOCK_TYPE_UDP6, udp6_sock) enum { #define BTF_SOCK_TYPE(name, str) name, BTF_SOCK_TYPE_xxx #undef BTF_SOCK_TYPE MAX_BTF_SOCK_TYPE, }; extern u32 btf_sock_ids[]; #endif |
5a2798ab3 bpf: Add BTF_ID_L... |
200 |
#endif |