Context |
Check |
Description |
netdev/tree_selection |
success
|
Clearly marked for bpf-next, async
|
netdev/apply |
fail
|
Patch does not apply to bpf-next-0
|
bpf/vmtest-bpf-next-PR |
success
|
PR summary
|
bpf/vmtest-bpf-next-VM_Test-0 |
success
|
Logs for Lint
|
bpf/vmtest-bpf-next-VM_Test-1 |
success
|
Logs for ShellCheck
|
bpf/vmtest-bpf-next-VM_Test-2 |
success
|
Logs for Unittests
|
bpf/vmtest-bpf-next-VM_Test-3 |
success
|
Logs for Validate matrix.py
|
bpf/vmtest-bpf-next-VM_Test-4 |
success
|
Logs for aarch64-gcc / build / build for aarch64 with gcc
|
bpf/vmtest-bpf-next-VM_Test-5 |
success
|
Logs for aarch64-gcc / build-release
|
bpf/vmtest-bpf-next-VM_Test-6 |
success
|
Logs for aarch64-gcc / test (test_maps, false, 360) / test_maps on aarch64 with gcc
|
bpf/vmtest-bpf-next-VM_Test-7 |
success
|
Logs for aarch64-gcc / test (test_progs, false, 360) / test_progs on aarch64 with gcc
|
bpf/vmtest-bpf-next-VM_Test-8 |
success
|
Logs for aarch64-gcc / test (test_progs_no_alu32, false, 360) / test_progs_no_alu32 on aarch64 with gcc
|
bpf/vmtest-bpf-next-VM_Test-9 |
success
|
Logs for aarch64-gcc / test (test_verifier, false, 360) / test_verifier on aarch64 with gcc
|
bpf/vmtest-bpf-next-VM_Test-10 |
success
|
Logs for aarch64-gcc / veristat
|
bpf/vmtest-bpf-next-VM_Test-12 |
success
|
Logs for s390x-gcc / build-release
|
bpf/vmtest-bpf-next-VM_Test-13 |
success
|
Logs for s390x-gcc / test (test_maps, false, 360) / test_maps on s390x with gcc
|
bpf/vmtest-bpf-next-VM_Test-11 |
success
|
Logs for s390x-gcc / build / build for s390x with gcc
|
bpf/vmtest-bpf-next-VM_Test-14 |
success
|
Logs for s390x-gcc / test (test_progs, false, 360) / test_progs on s390x with gcc
|
bpf/vmtest-bpf-next-VM_Test-15 |
success
|
Logs for s390x-gcc / test (test_progs_no_alu32, false, 360) / test_progs_no_alu32 on s390x with gcc
|
bpf/vmtest-bpf-next-VM_Test-16 |
success
|
Logs for s390x-gcc / test (test_verifier, false, 360) / test_verifier on s390x with gcc
|
bpf/vmtest-bpf-next-VM_Test-17 |
success
|
Logs for s390x-gcc / veristat
|
bpf/vmtest-bpf-next-VM_Test-18 |
success
|
Logs for set-matrix
|
bpf/vmtest-bpf-next-VM_Test-19 |
success
|
Logs for x86_64-gcc / build / build for x86_64 with gcc
|
bpf/vmtest-bpf-next-VM_Test-20 |
success
|
Logs for x86_64-gcc / build-release
|
bpf/vmtest-bpf-next-VM_Test-21 |
success
|
Logs for x86_64-gcc / test (test_maps, false, 360) / test_maps on x86_64 with gcc
|
bpf/vmtest-bpf-next-VM_Test-22 |
success
|
Logs for x86_64-gcc / test (test_progs, false, 360) / test_progs on x86_64 with gcc
|
bpf/vmtest-bpf-next-VM_Test-23 |
success
|
Logs for x86_64-gcc / test (test_progs_no_alu32, false, 360) / test_progs_no_alu32 on x86_64 with gcc
|
bpf/vmtest-bpf-next-VM_Test-24 |
success
|
Logs for x86_64-gcc / test (test_progs_no_alu32_parallel, true, 30) / test_progs_no_alu32_parallel on x86_64 with gcc
|
bpf/vmtest-bpf-next-VM_Test-25 |
success
|
Logs for x86_64-gcc / test (test_progs_parallel, true, 30) / test_progs_parallel on x86_64 with gcc
|
bpf/vmtest-bpf-next-VM_Test-26 |
success
|
Logs for x86_64-gcc / test (test_verifier, false, 360) / test_verifier on x86_64 with gcc
|
bpf/vmtest-bpf-next-VM_Test-27 |
success
|
Logs for x86_64-gcc / veristat / veristat on x86_64 with gcc
|
bpf/vmtest-bpf-next-VM_Test-28 |
success
|
Logs for x86_64-llvm-17 / build / build for x86_64 with llvm-17
|
bpf/vmtest-bpf-next-VM_Test-29 |
success
|
Logs for x86_64-llvm-17 / build-release / build for x86_64 with llvm-17 and -O2 optimization
|
bpf/vmtest-bpf-next-VM_Test-30 |
success
|
Logs for x86_64-llvm-17 / test (test_maps, false, 360) / test_maps on x86_64 with llvm-17
|
bpf/vmtest-bpf-next-VM_Test-31 |
success
|
Logs for x86_64-llvm-17 / test (test_progs, false, 360) / test_progs on x86_64 with llvm-17
|
bpf/vmtest-bpf-next-VM_Test-32 |
success
|
Logs for x86_64-llvm-17 / test (test_progs_no_alu32, false, 360) / test_progs_no_alu32 on x86_64 with llvm-17
|
bpf/vmtest-bpf-next-VM_Test-33 |
success
|
Logs for x86_64-llvm-17 / test (test_verifier, false, 360) / test_verifier on x86_64 with llvm-17
|
bpf/vmtest-bpf-next-VM_Test-34 |
success
|
Logs for x86_64-llvm-17 / veristat
|
bpf/vmtest-bpf-next-VM_Test-35 |
success
|
Logs for x86_64-llvm-18 / build / build for x86_64 with llvm-18
|
bpf/vmtest-bpf-next-VM_Test-36 |
success
|
Logs for x86_64-llvm-18 / build-release / build for x86_64 with llvm-18 and -O2 optimization
|
bpf/vmtest-bpf-next-VM_Test-37 |
success
|
Logs for x86_64-llvm-18 / test (test_maps, false, 360) / test_maps on x86_64 with llvm-18
|
bpf/vmtest-bpf-next-VM_Test-38 |
success
|
Logs for x86_64-llvm-18 / test (test_progs, false, 360) / test_progs on x86_64 with llvm-18
|
bpf/vmtest-bpf-next-VM_Test-39 |
success
|
Logs for x86_64-llvm-18 / test (test_progs_cpuv4, false, 360) / test_progs_cpuv4 on x86_64 with llvm-18
|
bpf/vmtest-bpf-next-VM_Test-40 |
success
|
Logs for x86_64-llvm-18 / test (test_progs_no_alu32, false, 360) / test_progs_no_alu32 on x86_64 with llvm-18
|
bpf/vmtest-bpf-next-VM_Test-41 |
success
|
Logs for x86_64-llvm-18 / test (test_verifier, false, 360) / test_verifier on x86_64 with llvm-18
|
bpf/vmtest-bpf-next-VM_Test-42 |
success
|
Logs for x86_64-llvm-18 / veristat
|
@@ -75,7 +75,8 @@ struct btf_encoder {
verbose,
force,
gen_floats,
- is_rel;
+ is_rel,
+ gen_base_ref;
uint32_t array_index_id;
struct {
struct var_info *vars;
@@ -1255,9 +1256,9 @@ static int btf_encoder__write_raw_file(struct btf_encoder *encoder)
return err;
}
-static int btf_encoder__write_elf(struct btf_encoder *encoder)
+static int btf_encoder__write_elf(struct btf_encoder *encoder, const struct btf *btf,
+ const char *btf_secname)
{
- struct btf *btf = encoder->btf;
const char *filename = encoder->filename;
GElf_Shdr shdr_mem, *shdr;
Elf_Data *btf_data = NULL;
@@ -1297,7 +1298,7 @@ static int btf_encoder__write_elf(struct btf_encoder *encoder)
if (shdr == NULL)
continue;
char *secname = elf_strptr(elf, strndx, shdr->sh_name);
- if (strcmp(secname, ".BTF") == 0) {
+ if (strcmp(secname, btf_secname) == 0) {
btf_data = elf_getdata(scn, btf_data);
break;
}
@@ -1341,11 +1342,11 @@ static int btf_encoder__write_elf(struct btf_encoder *encoder)
goto unlink;
}
- snprintf(cmd, sizeof(cmd), "%s --add-section .BTF=%s %s",
- llvm_objcopy, tmp_fn, filename);
+ snprintf(cmd, sizeof(cmd), "%s --add-section %s=%s %s",
+ llvm_objcopy, btf_secname, tmp_fn, filename);
if (system(cmd)) {
- fprintf(stderr, "%s: failed to add .BTF section to '%s': %d!\n",
- __func__, filename, errno);
+ fprintf(stderr, "%s: failed to add %s section to '%s': %d!\n",
+ __func__, btf_secname, filename, errno);
goto unlink;
}
@@ -1380,12 +1381,27 @@ int btf_encoder__encode(struct btf_encoder *encoder)
fprintf(stderr, "%s: btf__dedup failed!\n", __func__);
return -1;
}
-
- if (encoder->raw_output)
+ if (encoder->raw_output) {
err = btf_encoder__write_raw_file(encoder);
- else
- err = btf_encoder__write_elf(encoder);
-
+ } else {
+ struct btf *btf = encoder->btf;
+
+ if (encoder->gen_base_ref) {
+ btf = btf__new_split_base_ref(encoder->btf);
+ if (!btf) {
+ fprintf(stderr, "could not generate base reference split BTF: %s\n",
+ strerror(errno));
+ return -1;
+ }
+ }
+ err = btf_encoder__write_elf(encoder, btf, BTF_ELF_SEC);
+ if (!err && encoder->gen_base_ref)
+ err = btf_encoder__write_elf(encoder, btf__base_btf(btf), BTF_BASE_REF_ELF_SEC);
+ if (btf != encoder->btf) {
+ btf__free((struct btf *)btf__base_btf(btf));
+ btf__free(btf);
+ }
+ }
return err;
}
@@ -1659,6 +1675,7 @@ struct btf_encoder *btf_encoder__new(struct cu *cu, const char *detached_filenam
encoder->force = conf_load->btf_encode_force;
encoder->gen_floats = conf_load->btf_gen_floats;
encoder->skip_encoding_vars = conf_load->skip_encoding_btf_vars;
+ encoder->gen_base_ref = conf_load->btf_gen_base_ref;
encoder->verbose = verbose;
encoder->has_index_type = false;
encoder->need_index_type = false;
@@ -87,6 +87,7 @@ struct conf_load {
bool skip_encoding_btf_vars;
bool btf_gen_floats;
bool btf_encode_force;
+ bool btf_gen_base_ref;
uint8_t hashtable_bits;
uint8_t max_hashtable_bits;
uint16_t kabi_prefix_len;
@@ -1264,23 +1264,25 @@ ARGP_PROGRAM_VERSION_HOOK_DEF = dwarves_print_version;
* BTF encoding apply; we encode type/decl tags, do not encode
* floats, etc. This ensures backwards compatibility.
*/
-#define BTF_FEATURE(name, alias, default_value) \
- { #name, #alias, &conf_load.alias, default_value }
+#define BTF_FEATURE(name, alias, default_value, enable_for_all) \
+ { #name, #alias, &conf_load.alias, default_value, enable_for_all }
struct btf_feature {
const char *name;
const char *option_alias;
bool *conf_value;
bool default_value;
+ bool enable_for_all;
} btf_features[] = {
- BTF_FEATURE(encode_force, btf_encode_force, false),
- BTF_FEATURE(var, skip_encoding_btf_vars, true),
- BTF_FEATURE(float, btf_gen_floats, false),
- BTF_FEATURE(decl_tag, skip_encoding_btf_decl_tag, true),
- BTF_FEATURE(type_tag, skip_encoding_btf_type_tag, true),
- BTF_FEATURE(enum64, skip_encoding_btf_enum64, true),
- BTF_FEATURE(optimized_func, btf_gen_optimized, false),
- BTF_FEATURE(consistent_func, skip_encoding_btf_inconsistent_proto, false),
+ BTF_FEATURE(encode_force, btf_encode_force, false, true),
+ BTF_FEATURE(var, skip_encoding_btf_vars, true, true),
+ BTF_FEATURE(float, btf_gen_floats, false, true),
+ BTF_FEATURE(decl_tag, skip_encoding_btf_decl_tag, true, true),
+ BTF_FEATURE(type_tag, skip_encoding_btf_type_tag, true, true),
+ BTF_FEATURE(enum64, skip_encoding_btf_enum64, true, true),
+ BTF_FEATURE(optimized_func, btf_gen_optimized, false, true),
+ BTF_FEATURE(consistent_func, skip_encoding_btf_inconsistent_proto, false, true),
+ BTF_FEATURE(base_ref, btf_gen_base_ref, false, false),
};
#define BTF_MAX_FEATURE_STR 1024
@@ -1348,8 +1350,10 @@ static void parse_btf_features(const char *features, bool strict)
if (strcmp(features, "all") == 0) {
int i;
- for (i = 0; i < ARRAY_SIZE(btf_features); i++)
- enable_btf_feature(&btf_features[i]);
+ for (i = 0; i < ARRAY_SIZE(btf_features); i++) {
+ if (btf_features[i].enable_for_all)
+ enable_btf_feature(&btf_features[i]);
+ }
return;
}
Adding "base_ref" to --btf_features when generating split BTF will generate split and base reference BTF - the latter allows us to map references from split BTF to base BTF, even if that base BTF has changed. It does this by providing just enough information about the base types in the .BTF.base_ref section. Signed-off-by: Alan Maguire <alan.maguire@oracle.com> --- btf_encoder.c | 43 ++++++++++++++++++++++++++++++------------- dwarves.h | 1 + pahole.c | 28 ++++++++++++++++------------ 3 files changed, 47 insertions(+), 25 deletions(-)