-
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.
Jiri Olsa says: ==================== This patchset adds: - support to generate BTF ID lists that are resolved during kernel linking and usable within kernel code with following macros: BTF_ID_LIST(bpf_skb_output_btf_ids) BTF_ID(struct, sk_buff) and access it in kernel code via: extern u32 bpf_skb_output_btf_ids[]; - resolve_btfids tool that scans elf object for .BTF_ids section and resolves its symbols with BTF ID values - resolving of bpf_ctx_convert struct and several other objects with BTF_ID_LIST v7 changes: - added more acks [Andrii] - added some name-conflicting entries and fixed resolve_btfids to process them properly [Andrii] - changed bpf_get_task_stack_proto to use BTF_IDS_LIST/BTF_ID macros [Andrii] - fixed selftest build for resolve_btfids test ==================== Signed-off-by: Alexei Starovoitov <ast@kernel.org>
- Loading branch information
Showing
19 changed files
with
1,267 additions
and
104 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
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
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
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
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
Oops, something went wrong.