-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
tools headers: Adopt verbatim copy of btf_ids.h from kernel sources
It will be needed by bpf selftest for resolve_btfids tool. Also adding __PASTE macro as btf_ids.h dependency, which is defined in: include/linux/compiler_types.h but because tools/include do not have this header, I'm putting the macro into linux/compiler.h header. Signed-off-by: Jiri Olsa <jolsa@kernel.org> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Tested-by: Andrii Nakryiko <andriin@fb.com> Acked-by: Andrii Nakryiko <andriin@fb.com> Link: https://lore.kernel.org/bpf/20200711215329.41165-9-jolsa@kernel.org
- Loading branch information
Jiri Olsa
authored and
Alexei Starovoitov
committed
Jul 13, 2020
1 parent
232ce4b
commit e5a0516
Showing
2 changed files
with
91 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 */ | ||
|
||
#ifndef _LINUX_BTF_IDS_H | ||
#define _LINUX_BTF_IDS_H | ||
|
||
#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\"; \n" \ | ||
".local " #symbol " ; \n" \ | ||
".type " #symbol ", @object; \n" \ | ||
".size " #symbol ", 4; \n" \ | ||
#symbol ": \n" \ | ||
".zero 4 \n" \ | ||
".popsection; \n"); | ||
|
||
#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 | ||
* | ||
*/ | ||
#define __BTF_ID_LIST(name) \ | ||
asm( \ | ||
".pushsection " BTF_IDS_SECTION ",\"a\"; \n" \ | ||
".local " #name "; \n" \ | ||
#name ":; \n" \ | ||
".popsection; \n"); \ | ||
|
||
#define BTF_ID_LIST(name) \ | ||
__BTF_ID_LIST(name) \ | ||
extern u32 name[]; | ||
|
||
/* | ||
* 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\"; \n" \ | ||
".zero 4 \n" \ | ||
".popsection; \n"); | ||
|
||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters