1 // SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) 2 /* Copyright (c) 2018 Facebook */ 3 4 #include <byteswap.h> 5 #include <endian.h> 6 #include <stdio.h> 7 #include <stdlib.h> 8 #include <string.h> 9 #include <fcntl.h> 10 #include <unistd.h> 11 #include <errno.h> 12 #include <sys/utsname.h> 13 #include <sys/param.h> 14 #include <sys/stat.h> 15 #include <linux/kernel.h> 16 #include <linux/err.h> 17 #include <linux/btf.h> 18 #include <gelf.h> 19 #include "btf.h" 20 #include "bpf.h" 21 #include "libbpf.h" 22 #include "libbpf_internal.h" 23 #include "hashmap.h" 24 #include "strset.h" 25 26 #define BTF_MAX_NR_TYPES 0x7fffffffU 27 #define BTF_MAX_STR_OFFSET 0x7fffffffU 28 29 static struct btf_type btf_void; 30 31 struct btf { 32 /* raw BTF data in native endianness */ 33 void *raw_data; 34 /* raw BTF data in non-native endianness */ 35 void *raw_data_swapped; 36 __u32 raw_size; 37 /* whether target endianness differs from the native one */ 38 bool swapped_endian; 39 40 /* 41 * When BTF is loaded from an ELF or raw memory it is stored 42 * in a contiguous memory block. The hdr, type_data, and, strs_data 43 * point inside that memory region to their respective parts of BTF 44 * representation: 45 * 46 * +--------------------------------+ 47 * | Header | Types | Strings | 48 * +--------------------------------+ 49 * ^ ^ ^ 50 * | | | 51 * hdr | | 52 * types_data-+ | 53 * strs_data------------+ 54 * 55 * If BTF data is later modified, e.g., due to types added or 56 * removed, BTF deduplication performed, etc, this contiguous 57 * representation is broken up into three independently allocated 58 * memory regions to be able to modify them independently. 59 * raw_data is nulled out at that point, but can be later allocated 60 * and cached again if user calls btf__raw_data(), at which point 61 * raw_data will contain a contiguous copy of header, types, and 62 * strings: 63 * 64 * +----------+ +---------+ +-----------+ 65 * | Header | | Types | | Strings | 66 * +----------+ +---------+ +-----------+ 67 * ^ ^ ^ 68 * | | | 69 * hdr | | 70 * types_data----+ | 71 * strset__data(strs_set)-----+ 72 * 73 * +----------+---------+-----------+ 74 * | Header | Types | Strings | 75 * raw_data----->+----------+---------+-----------+ 76 */ 77 struct btf_header *hdr; 78 79 void *types_data; 80 size_t types_data_cap; /* used size stored in hdr->type_len */ 81 82 /* type ID to `struct btf_type *` lookup index 83 * type_offs[0] corresponds to the first non-VOID type: 84 * - for base BTF it's type [1]; 85 * - for split BTF it's the first non-base BTF type. 86 */ 87 __u32 *type_offs; 88 size_t type_offs_cap; 89 /* number of types in this BTF instance: 90 * - doesn't include special [0] void type; 91 * - for split BTF counts number of types added on top of base BTF. 92 */ 93 __u32 nr_types; 94 /* if not NULL, points to the base BTF on top of which the current 95 * split BTF is based 96 */ 97 struct btf *base_btf; 98 /* BTF type ID of the first type in this BTF instance: 99 * - for base BTF it's equal to 1; 100 * - for split BTF it's equal to biggest type ID of base BTF plus 1. 101 */ 102 int start_id; 103 /* logical string offset of this BTF instance: 104 * - for base BTF it's equal to 0; 105 * - for split BTF it's equal to total size of base BTF's string section size. 106 */ 107 int start_str_off; 108 109 /* only one of strs_data or strs_set can be non-NULL, depending on 110 * whether BTF is in a modifiable state (strs_set is used) or not 111 * (strs_data points inside raw_data) 112 */ 113 void *strs_data; 114 /* a set of unique strings */ 115 struct strset *strs_set; 116 /* whether strings are already deduplicated */ 117 bool strs_deduped; 118 119 /* BTF object FD, if loaded into kernel */ 120 int fd; 121 122 /* Pointer size (in bytes) for a target architecture of this BTF */ 123 int ptr_sz; 124 }; 125 126 static inline __u64 ptr_to_u64(const void *ptr) 127 { 128 return (__u64) (unsigned long) ptr; 129 } 130 131 /* Ensure given dynamically allocated memory region pointed to by *data* with 132 * capacity of *cap_cnt* elements each taking *elem_sz* bytes has enough 133 * memory to accommodate *add_cnt* new elements, assuming *cur_cnt* elements 134 * are already used. At most *max_cnt* elements can be ever allocated. 135 * If necessary, memory is reallocated and all existing data is copied over, 136 * new pointer to the memory region is stored at *data, new memory region 137 * capacity (in number of elements) is stored in *cap. 138 * On success, memory pointer to the beginning of unused memory is returned. 139 * On error, NULL is returned. 140 */ 141 void *libbpf_add_mem(void **data, size_t *cap_cnt, size_t elem_sz, 142 size_t cur_cnt, size_t max_cnt, size_t add_cnt) 143 { 144 size_t new_cnt; 145 void *new_data; 146 147 if (cur_cnt + add_cnt <= *cap_cnt) 148 return *data + cur_cnt * elem_sz; 149 150 /* requested more than the set limit */ 151 if (cur_cnt + add_cnt > max_cnt) 152 return NULL; 153 154 new_cnt = *cap_cnt; 155 new_cnt += new_cnt / 4; /* expand by 25% */ 156 if (new_cnt < 16) /* but at least 16 elements */ 157 new_cnt = 16; 158 if (new_cnt > max_cnt) /* but not exceeding a set limit */ 159 new_cnt = max_cnt; 160 if (new_cnt < cur_cnt + add_cnt) /* also ensure we have enough memory */ 161 new_cnt = cur_cnt + add_cnt; 162 163 new_data = libbpf_reallocarray(*data, new_cnt, elem_sz); 164 if (!new_data) 165 return NULL; 166 167 /* zero out newly allocated portion of memory */ 168 memset(new_data + (*cap_cnt) * elem_sz, 0, (new_cnt - *cap_cnt) * elem_sz); 169 170 *data = new_data; 171 *cap_cnt = new_cnt; 172 return new_data + cur_cnt * elem_sz; 173 } 174 175 /* Ensure given dynamically allocated memory region has enough allocated space 176 * to accommodate *need_cnt* elements of size *elem_sz* bytes each 177 */ 178 int libbpf_ensure_mem(void **data, size_t *cap_cnt, size_t elem_sz, size_t need_cnt) 179 { 180 void *p; 181 182 if (need_cnt <= *cap_cnt) 183 return 0; 184 185 p = libbpf_add_mem(data, cap_cnt, elem_sz, *cap_cnt, SIZE_MAX, need_cnt - *cap_cnt); 186 if (!p) 187 return -ENOMEM; 188 189 return 0; 190 } 191 192 static void *btf_add_type_offs_mem(struct btf *btf, size_t add_cnt) 193 { 194 return libbpf_add_mem((void **)&btf->type_offs, &btf->type_offs_cap, sizeof(__u32), 195 btf->nr_types, BTF_MAX_NR_TYPES, add_cnt); 196 } 197 198 static int btf_add_type_idx_entry(struct btf *btf, __u32 type_off) 199 { 200 __u32 *p; 201 202 p = btf_add_type_offs_mem(btf, 1); 203 if (!p) 204 return -ENOMEM; 205 206 *p = type_off; 207 return 0; 208 } 209 210 static void btf_bswap_hdr(struct btf_header *h) 211 { 212 h->magic = bswap_16(h->magic); 213 h->hdr_len = bswap_32(h->hdr_len); 214 h->type_off = bswap_32(h->type_off); 215 h->type_len = bswap_32(h->type_len); 216 h->str_off = bswap_32(h->str_off); 217 h->str_len = bswap_32(h->str_len); 218 } 219 220 static int btf_parse_hdr(struct btf *btf) 221 { 222 struct btf_header *hdr = btf->hdr; 223 __u32 meta_left; 224 225 if (btf->raw_size < sizeof(struct btf_header)) { 226 pr_debug("BTF header not found\n"); 227 return -EINVAL; 228 } 229 230 if (hdr->magic == bswap_16(BTF_MAGIC)) { 231 btf->swapped_endian = true; 232 if (bswap_32(hdr->hdr_len) != sizeof(struct btf_header)) { 233 pr_warn("Can't load BTF with non-native endianness due to unsupported header length %u\n", 234 bswap_32(hdr->hdr_len)); 235 return -ENOTSUP; 236 } 237 btf_bswap_hdr(hdr); 238 } else if (hdr->magic != BTF_MAGIC) { 239 pr_debug("Invalid BTF magic: %x\n", hdr->magic); 240 return -EINVAL; 241 } 242 243 if (btf->raw_size < hdr->hdr_len) { 244 pr_debug("BTF header len %u larger than data size %u\n", 245 hdr->hdr_len, btf->raw_size); 246 return -EINVAL; 247 } 248 249 meta_left = btf->raw_size - hdr->hdr_len; 250 if (meta_left < (long long)hdr->str_off + hdr->str_len) { 251 pr_debug("Invalid BTF total size: %u\n", btf->raw_size); 252 return -EINVAL; 253 } 254 255 if ((long long)hdr->type_off + hdr->type_len > hdr->str_off) { 256 pr_debug("Invalid BTF data sections layout: type data at %u + %u, strings data at %u + %u\n", 257 hdr->type_off, hdr->type_len, hdr->str_off, hdr->str_len); 258 return -EINVAL; 259 } 260 261 if (hdr->type_off % 4) { 262 pr_debug("BTF type section is not aligned to 4 bytes\n"); 263 return -EINVAL; 264 } 265 266 return 0; 267 } 268 269 static int btf_parse_str_sec(struct btf *btf) 270 { 271 const struct btf_header *hdr = btf->hdr; 272 const char *start = btf->strs_data; 273 const char *end = start + btf->hdr->str_len; 274 275 if (btf->base_btf && hdr->str_len == 0) 276 return 0; 277 if (!hdr->str_len || hdr->str_len - 1 > BTF_MAX_STR_OFFSET || end[-1]) { 278 pr_debug("Invalid BTF string section\n"); 279 return -EINVAL; 280 } 281 if (!btf->base_btf && start[0]) { 282 pr_debug("Invalid BTF string section\n"); 283 return -EINVAL; 284 } 285 return 0; 286 } 287 288 static int btf_type_size(const struct btf_type *t) 289 { 290 const int base_size = sizeof(struct btf_type); 291 __u16 vlen = btf_vlen(t); 292 293 switch (btf_kind(t)) { 294 case BTF_KIND_FWD: 295 case BTF_KIND_CONST: 296 case BTF_KIND_VOLATILE: 297 case BTF_KIND_RESTRICT: 298 case BTF_KIND_PTR: 299 case BTF_KIND_TYPEDEF: 300 case BTF_KIND_FUNC: 301 case BTF_KIND_FLOAT: 302 case BTF_KIND_TYPE_TAG: 303 return base_size; 304 case BTF_KIND_INT: 305 return base_size + sizeof(__u32); 306 case BTF_KIND_ENUM: 307 return base_size + vlen * sizeof(struct btf_enum); 308 case BTF_KIND_ENUM64: 309 return base_size + vlen * sizeof(struct btf_enum64); 310 case BTF_KIND_ARRAY: 311 return base_size + sizeof(struct btf_array); 312 case BTF_KIND_STRUCT: 313 case BTF_KIND_UNION: 314 return base_size + vlen * sizeof(struct btf_member); 315 case BTF_KIND_FUNC_PROTO: 316 return base_size + vlen * sizeof(struct btf_param); 317 case BTF_KIND_VAR: 318 return base_size + sizeof(struct btf_var); 319 case BTF_KIND_DATASEC: 320 return base_size + vlen * sizeof(struct btf_var_secinfo); 321 case BTF_KIND_DECL_TAG: 322 return base_size + sizeof(struct btf_decl_tag); 323 default: 324 pr_debug("Unsupported BTF_KIND:%u\n", btf_kind(t)); 325 return -EINVAL; 326 } 327 } 328 329 static void btf_bswap_type_base(struct btf_type *t) 330 { 331 t->name_off = bswap_32(t->name_off); 332 t->info = bswap_32(t->info); 333 t->type = bswap_32(t->type); 334 } 335 336 static int btf_bswap_type_rest(struct btf_type *t) 337 { 338 struct btf_var_secinfo *v; 339 struct btf_enum64 *e64; 340 struct btf_member *m; 341 struct btf_array *a; 342 struct btf_param *p; 343 struct btf_enum *e; 344 __u16 vlen = btf_vlen(t); 345 int i; 346 347 switch (btf_kind(t)) { 348 case BTF_KIND_FWD: 349 case BTF_KIND_CONST: 350 case BTF_KIND_VOLATILE: 351 case BTF_KIND_RESTRICT: 352 case BTF_KIND_PTR: 353 case BTF_KIND_TYPEDEF: 354 case BTF_KIND_FUNC: 355 case BTF_KIND_FLOAT: 356 case BTF_KIND_TYPE_TAG: 357 return 0; 358 case BTF_KIND_INT: 359 *(__u32 *)(t + 1) = bswap_32(*(__u32 *)(t + 1)); 360 return 0; 361 case BTF_KIND_ENUM: 362 for (i = 0, e = btf_enum(t); i < vlen; i++, e++) { 363 e->name_off = bswap_32(e->name_off); 364 e->val = bswap_32(e->val); 365 } 366 return 0; 367 case BTF_KIND_ENUM64: 368 for (i = 0, e64 = btf_enum64(t); i < vlen; i++, e64++) { 369 e64->name_off = bswap_32(e64->name_off); 370 e64->val_lo32 = bswap_32(e64->val_lo32); 371 e64->val_hi32 = bswap_32(e64->val_hi32); 372 } 373 return 0; 374 case BTF_KIND_ARRAY: 375 a = btf_array(t); 376 a->type = bswap_32(a->type); 377 a->index_type = bswap_32(a->index_type); 378 a->nelems = bswap_32(a->nelems); 379 return 0; 380 case BTF_KIND_STRUCT: 381 case BTF_KIND_UNION: 382 for (i = 0, m = btf_members(t); i < vlen; i++, m++) { 383 m->name_off = bswap_32(m->name_off); 384 m->type = bswap_32(m->type); 385 m->offset = bswap_32(m->offset); 386 } 387 return 0; 388 case BTF_KIND_FUNC_PROTO: 389 for (i = 0, p = btf_params(t); i < vlen; i++, p++) { 390 p->name_off = bswap_32(p->name_off); 391 p->type = bswap_32(p->type); 392 } 393 return 0; 394 case BTF_KIND_VAR: 395 btf_var(t)->linkage = bswap_32(btf_var(t)->linkage); 396 return 0; 397 case BTF_KIND_DATASEC: 398 for (i = 0, v = btf_var_secinfos(t); i < vlen; i++, v++) { 399 v->type = bswap_32(v->type); 400 v->offset = bswap_32(v->offset); 401 v->size = bswap_32(v->size); 402 } 403 return 0; 404 case BTF_KIND_DECL_TAG: 405 btf_decl_tag(t)->component_idx = bswap_32(btf_decl_tag(t)->component_idx); 406 return 0; 407 default: 408 pr_debug("Unsupported BTF_KIND:%u\n", btf_kind(t)); 409 return -EINVAL; 410 } 411 } 412 413 static int btf_parse_type_sec(struct btf *btf) 414 { 415 struct btf_header *hdr = btf->hdr; 416 void *next_type = btf->types_data; 417 void *end_type = next_type + hdr->type_len; 418 int err, type_size; 419 420 while (next_type + sizeof(struct btf_type) <= end_type) { 421 if (btf->swapped_endian) 422 btf_bswap_type_base(next_type); 423 424 type_size = btf_type_size(next_type); 425 if (type_size < 0) 426 return type_size; 427 if (next_type + type_size > end_type) { 428 pr_warn("BTF type [%d] is malformed\n", btf->start_id + btf->nr_types); 429 return -EINVAL; 430 } 431 432 if (btf->swapped_endian && btf_bswap_type_rest(next_type)) 433 return -EINVAL; 434 435 err = btf_add_type_idx_entry(btf, next_type - btf->types_data); 436 if (err) 437 return err; 438 439 next_type += type_size; 440 btf->nr_types++; 441 } 442 443 if (next_type != end_type) { 444 pr_warn("BTF types data is malformed\n"); 445 return -EINVAL; 446 } 447 448 return 0; 449 } 450 451 __u32 btf__type_cnt(const struct btf *btf) 452 { 453 return btf->start_id + btf->nr_types; 454 } 455 456 const struct btf *btf__base_btf(const struct btf *btf) 457 { 458 return btf->base_btf; 459 } 460 461 /* internal helper returning non-const pointer to a type */ 462 struct btf_type *btf_type_by_id(const struct btf *btf, __u32 type_id) 463 { 464 if (type_id == 0) 465 return &btf_void; 466 if (type_id < btf->start_id) 467 return btf_type_by_id(btf->base_btf, type_id); 468 return btf->types_data + btf->type_offs[type_id - btf->start_id]; 469 } 470 471 const struct btf_type *btf__type_by_id(const struct btf *btf, __u32 type_id) 472 { 473 if (type_id >= btf->start_id + btf->nr_types) 474 return errno = EINVAL, NULL; 475 return btf_type_by_id((struct btf *)btf, type_id); 476 } 477 478 static int determine_ptr_size(const struct btf *btf) 479 { 480 static const char * const long_aliases[] = { 481 "long", 482 "long int", 483 "int long", 484 "unsigned long", 485 "long unsigned", 486 "unsigned long int", 487 "unsigned int long", 488 "long unsigned int", 489 "long int unsigned", 490 "int unsigned long", 491 "int long unsigned", 492 }; 493 const struct btf_type *t; 494 const char *name; 495 int i, j, n; 496 497 if (btf->base_btf && btf->base_btf->ptr_sz > 0) 498 return btf->base_btf->ptr_sz; 499 500 n = btf__type_cnt(btf); 501 for (i = 1; i < n; i++) { 502 t = btf__type_by_id(btf, i); 503 if (!btf_is_int(t)) 504 continue; 505 506 if (t->size != 4 && t->size != 8) 507 continue; 508 509 name = btf__name_by_offset(btf, t->name_off); 510 if (!name) 511 continue; 512 513 for (j = 0; j < ARRAY_SIZE(long_aliases); j++) { 514 if (strcmp(name, long_aliases[j]) == 0) 515 return t->size; 516 } 517 } 518 519 return -1; 520 } 521 522 static size_t btf_ptr_sz(const struct btf *btf) 523 { 524 if (!btf->ptr_sz) 525 ((struct btf *)btf)->ptr_sz = determine_ptr_size(btf); 526 return btf->ptr_sz < 0 ? sizeof(void *) : btf->ptr_sz; 527 } 528 529 /* Return pointer size this BTF instance assumes. The size is heuristically 530 * determined by looking for 'long' or 'unsigned long' integer type and 531 * recording its size in bytes. If BTF type information doesn't have any such 532 * type, this function returns 0. In the latter case, native architecture's 533 * pointer size is assumed, so will be either 4 or 8, depending on 534 * architecture that libbpf was compiled for. It's possible to override 535 * guessed value by using btf__set_pointer_size() API. 536 */ 537 size_t btf__pointer_size(const struct btf *btf) 538 { 539 if (!btf->ptr_sz) 540 ((struct btf *)btf)->ptr_sz = determine_ptr_size(btf); 541 542 if (btf->ptr_sz < 0) 543 /* not enough BTF type info to guess */ 544 return 0; 545 546 return btf->ptr_sz; 547 } 548 549 /* Override or set pointer size in bytes. Only values of 4 and 8 are 550 * supported. 551 */ 552 int btf__set_pointer_size(struct btf *btf, size_t ptr_sz) 553 { 554 if (ptr_sz != 4 && ptr_sz != 8) 555 return libbpf_err(-EINVAL); 556 btf->ptr_sz = ptr_sz; 557 return 0; 558 } 559 560 static bool is_host_big_endian(void) 561 { 562 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 563 return false; 564 #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ 565 return true; 566 #else 567 # error "Unrecognized __BYTE_ORDER__" 568 #endif 569 } 570 571 enum btf_endianness btf__endianness(const struct btf *btf) 572 { 573 if (is_host_big_endian()) 574 return btf->swapped_endian ? BTF_LITTLE_ENDIAN : BTF_BIG_ENDIAN; 575 else 576 return btf->swapped_endian ? BTF_BIG_ENDIAN : BTF_LITTLE_ENDIAN; 577 } 578 579 int btf__set_endianness(struct btf *btf, enum btf_endianness endian) 580 { 581 if (endian != BTF_LITTLE_ENDIAN && endian != BTF_BIG_ENDIAN) 582 return libbpf_err(-EINVAL); 583 584 btf->swapped_endian = is_host_big_endian() != (endian == BTF_BIG_ENDIAN); 585 if (!btf->swapped_endian) { 586 free(btf->raw_data_swapped); 587 btf->raw_data_swapped = NULL; 588 } 589 return 0; 590 } 591 592 static bool btf_type_is_void(const struct btf_type *t) 593 { 594 return t == &btf_void || btf_is_fwd(t); 595 } 596 597 static bool btf_type_is_void_or_null(const struct btf_type *t) 598 { 599 return !t || btf_type_is_void(t); 600 } 601 602 #define MAX_RESOLVE_DEPTH 32 603 604 __s64 btf__resolve_size(const struct btf *btf, __u32 type_id) 605 { 606 const struct btf_array *array; 607 const struct btf_type *t; 608 __u32 nelems = 1; 609 __s64 size = -1; 610 int i; 611 612 t = btf__type_by_id(btf, type_id); 613 for (i = 0; i < MAX_RESOLVE_DEPTH && !btf_type_is_void_or_null(t); i++) { 614 switch (btf_kind(t)) { 615 case BTF_KIND_INT: 616 case BTF_KIND_STRUCT: 617 case BTF_KIND_UNION: 618 case BTF_KIND_ENUM: 619 case BTF_KIND_ENUM64: 620 case BTF_KIND_DATASEC: 621 case BTF_KIND_FLOAT: 622 size = t->size; 623 goto done; 624 case BTF_KIND_PTR: 625 size = btf_ptr_sz(btf); 626 goto done; 627 case BTF_KIND_TYPEDEF: 628 case BTF_KIND_VOLATILE: 629 case BTF_KIND_CONST: 630 case BTF_KIND_RESTRICT: 631 case BTF_KIND_VAR: 632 case BTF_KIND_DECL_TAG: 633 case BTF_KIND_TYPE_TAG: 634 type_id = t->type; 635 break; 636 case BTF_KIND_ARRAY: 637 array = btf_array(t); 638 if (nelems && array->nelems > UINT32_MAX / nelems) 639 return libbpf_err(-E2BIG); 640 nelems *= array->nelems; 641 type_id = array->type; 642 break; 643 default: 644 return libbpf_err(-EINVAL); 645 } 646 647 t = btf__type_by_id(btf, type_id); 648 } 649 650 done: 651 if (size < 0) 652 return libbpf_err(-EINVAL); 653 if (nelems && size > UINT32_MAX / nelems) 654 return libbpf_err(-E2BIG); 655 656 return nelems * size; 657 } 658 659 int btf__align_of(const struct btf *btf, __u32 id) 660 { 661 const struct btf_type *t = btf__type_by_id(btf, id); 662 __u16 kind = btf_kind(t); 663 664 switch (kind) { 665 case BTF_KIND_INT: 666 case BTF_KIND_ENUM: 667 case BTF_KIND_ENUM64: 668 case BTF_KIND_FLOAT: 669 return min(btf_ptr_sz(btf), (size_t)t->size); 670 case BTF_KIND_PTR: 671 return btf_ptr_sz(btf); 672 case BTF_KIND_TYPEDEF: 673 case BTF_KIND_VOLATILE: 674 case BTF_KIND_CONST: 675 case BTF_KIND_RESTRICT: 676 case BTF_KIND_TYPE_TAG: 677 return btf__align_of(btf, t->type); 678 case BTF_KIND_ARRAY: 679 return btf__align_of(btf, btf_array(t)->type); 680 case BTF_KIND_STRUCT: 681 case BTF_KIND_UNION: { 682 const struct btf_member *m = btf_members(t); 683 __u16 vlen = btf_vlen(t); 684 int i, max_align = 1, align; 685 686 for (i = 0; i < vlen; i++, m++) { 687 align = btf__align_of(btf, m->type); 688 if (align <= 0) 689 return libbpf_err(align); 690 max_align = max(max_align, align); 691 692 /* if field offset isn't aligned according to field 693 * type's alignment, then struct must be packed 694 */ 695 if (btf_member_bitfield_size(t, i) == 0 && 696 (m->offset % (8 * align)) != 0) 697 return 1; 698 } 699 700 /* if struct/union size isn't a multiple of its alignment, 701 * then struct must be packed 702 */ 703 if ((t->size % max_align) != 0) 704 return 1; 705 706 return max_align; 707 } 708 default: 709 pr_warn("unsupported BTF_KIND:%u\n", btf_kind(t)); 710 return errno = EINVAL, 0; 711 } 712 } 713 714 int btf__resolve_type(const struct btf *btf, __u32 type_id) 715 { 716 const struct btf_type *t; 717 int depth = 0; 718 719 t = btf__type_by_id(btf, type_id); 720 while (depth < MAX_RESOLVE_DEPTH && 721 !btf_type_is_void_or_null(t) && 722 (btf_is_mod(t) || btf_is_typedef(t) || btf_is_var(t))) { 723 type_id = t->type; 724 t = btf__type_by_id(btf, type_id); 725 depth++; 726 } 727 728 if (depth == MAX_RESOLVE_DEPTH || btf_type_is_void_or_null(t)) 729 return libbpf_err(-EINVAL); 730 731 return type_id; 732 } 733 734 __s32 btf__find_by_name(const struct btf *btf, const char *type_name) 735 { 736 __u32 i, nr_types = btf__type_cnt(btf); 737 738 if (!strcmp(type_name, "void")) 739 return 0; 740 741 for (i = 1; i < nr_types; i++) { 742 const struct btf_type *t = btf__type_by_id(btf, i); 743 const char *name = btf__name_by_offset(btf, t->name_off); 744 745 if (name && !strcmp(type_name, name)) 746 return i; 747 } 748 749 return libbpf_err(-ENOENT); 750 } 751 752 static __s32 btf_find_by_name_kind(const struct btf *btf, int start_id, 753 const char *type_name, __u32 kind) 754 { 755 __u32 i, nr_types = btf__type_cnt(btf); 756 757 if (kind == BTF_KIND_UNKN || !strcmp(type_name, "void")) 758 return 0; 759 760 for (i = start_id; i < nr_types; i++) { 761 const struct btf_type *t = btf__type_by_id(btf, i); 762 const char *name; 763 764 if (btf_kind(t) != kind) 765 continue; 766 name = btf__name_by_offset(btf, t->name_off); 767 if (name && !strcmp(type_name, name)) 768 return i; 769 } 770 771 return libbpf_err(-ENOENT); 772 } 773 774 __s32 btf__find_by_name_kind_own(const struct btf *btf, const char *type_name, 775 __u32 kind) 776 { 777 return btf_find_by_name_kind(btf, btf->start_id, type_name, kind); 778 } 779 780 __s32 btf__find_by_name_kind(const struct btf *btf, const char *type_name, 781 __u32 kind) 782 { 783 return btf_find_by_name_kind(btf, 1, type_name, kind); 784 } 785 786 static bool btf_is_modifiable(const struct btf *btf) 787 { 788 return (void *)btf->hdr != btf->raw_data; 789 } 790 791 void btf__free(struct btf *btf) 792 { 793 if (IS_ERR_OR_NULL(btf)) 794 return; 795 796 if (btf->fd >= 0) 797 close(btf->fd); 798 799 if (btf_is_modifiable(btf)) { 800 /* if BTF was modified after loading, it will have a split 801 * in-memory representation for header, types, and strings 802 * sections, so we need to free all of them individually. It 803 * might still have a cached contiguous raw data present, 804 * which will be unconditionally freed below. 805 */ 806 free(btf->hdr); 807 free(btf->types_data); 808 strset__free(btf->strs_set); 809 } 810 free(btf->raw_data); 811 free(btf->raw_data_swapped); 812 free(btf->type_offs); 813 free(btf); 814 } 815 816 static struct btf *btf_new_empty(struct btf *base_btf) 817 { 818 struct btf *btf; 819 820 btf = calloc(1, sizeof(*btf)); 821 if (!btf) 822 return ERR_PTR(-ENOMEM); 823 824 btf->nr_types = 0; 825 btf->start_id = 1; 826 btf->start_str_off = 0; 827 btf->fd = -1; 828 btf->ptr_sz = sizeof(void *); 829 btf->swapped_endian = false; 830 831 if (base_btf) { 832 btf->base_btf = base_btf; 833 btf->start_id = btf__type_cnt(base_btf); 834 btf->start_str_off = base_btf->hdr->str_len; 835 } 836 837 /* +1 for empty string at offset 0 */ 838 btf->raw_size = sizeof(struct btf_header) + (base_btf ? 0 : 1); 839 btf->raw_data = calloc(1, btf->raw_size); 840 if (!btf->raw_data) { 841 free(btf); 842 return ERR_PTR(-ENOMEM); 843 } 844 845 btf->hdr = btf->raw_data; 846 btf->hdr->hdr_len = sizeof(struct btf_header); 847 btf->hdr->magic = BTF_MAGIC; 848 btf->hdr->version = BTF_VERSION; 849 850 btf->types_data = btf->raw_data + btf->hdr->hdr_len; 851 btf->strs_data = btf->raw_data + btf->hdr->hdr_len; 852 btf->hdr->str_len = base_btf ? 0 : 1; /* empty string at offset 0 */ 853 854 return btf; 855 } 856 857 struct btf *btf__new_empty(void) 858 { 859 return libbpf_ptr(btf_new_empty(NULL)); 860 } 861 862 struct btf *btf__new_empty_split(struct btf *base_btf) 863 { 864 return libbpf_ptr(btf_new_empty(base_btf)); 865 } 866 867 static struct btf *btf_new(const void *data, __u32 size, struct btf *base_btf) 868 { 869 struct btf *btf; 870 int err; 871 872 btf = calloc(1, sizeof(struct btf)); 873 if (!btf) 874 return ERR_PTR(-ENOMEM); 875 876 btf->nr_types = 0; 877 btf->start_id = 1; 878 btf->start_str_off = 0; 879 btf->fd = -1; 880 881 if (base_btf) { 882 btf->base_btf = base_btf; 883 btf->start_id = btf__type_cnt(base_btf); 884 btf->start_str_off = base_btf->hdr->str_len; 885 } 886 887 btf->raw_data = malloc(size); 888 if (!btf->raw_data) { 889 err = -ENOMEM; 890 goto done; 891 } 892 memcpy(btf->raw_data, data, size); 893 btf->raw_size = size; 894 895 btf->hdr = btf->raw_data; 896 err = btf_parse_hdr(btf); 897 if (err) 898 goto done; 899 900 btf->strs_data = btf->raw_data + btf->hdr->hdr_len + btf->hdr->str_off; 901 btf->types_data = btf->raw_data + btf->hdr->hdr_len + btf->hdr->type_off; 902 903 err = btf_parse_str_sec(btf); 904 err = err ?: btf_parse_type_sec(btf); 905 if (err) 906 goto done; 907 908 done: 909 if (err) { 910 btf__free(btf); 911 return ERR_PTR(err); 912 } 913 914 return btf; 915 } 916 917 struct btf *btf__new(const void *data, __u32 size) 918 { 919 return libbpf_ptr(btf_new(data, size, NULL)); 920 } 921 922 static struct btf *btf_parse_elf(const char *path, struct btf *base_btf, 923 struct btf_ext **btf_ext) 924 { 925 Elf_Data *btf_data = NULL, *btf_ext_data = NULL; 926 int err = 0, fd = -1, idx = 0; 927 struct btf *btf = NULL; 928 Elf_Scn *scn = NULL; 929 Elf *elf = NULL; 930 GElf_Ehdr ehdr; 931 size_t shstrndx; 932 933 if (elf_version(EV_CURRENT) == EV_NONE) { 934 pr_warn("failed to init libelf for %s\n", path); 935 return ERR_PTR(-LIBBPF_ERRNO__LIBELF); 936 } 937 938 fd = open(path, O_RDONLY | O_CLOEXEC); 939 if (fd < 0) { 940 err = -errno; 941 pr_warn("failed to open %s: %s\n", path, strerror(errno)); 942 return ERR_PTR(err); 943 } 944 945 err = -LIBBPF_ERRNO__FORMAT; 946 947 elf = elf_begin(fd, ELF_C_READ, NULL); 948 if (!elf) { 949 pr_warn("failed to open %s as ELF file\n", path); 950 goto done; 951 } 952 if (!gelf_getehdr(elf, &ehdr)) { 953 pr_warn("failed to get EHDR from %s\n", path); 954 goto done; 955 } 956 957 if (elf_getshdrstrndx(elf, &shstrndx)) { 958 pr_warn("failed to get section names section index for %s\n", 959 path); 960 goto done; 961 } 962 963 if (!elf_rawdata(elf_getscn(elf, shstrndx), NULL)) { 964 pr_warn("failed to get e_shstrndx from %s\n", path); 965 goto done; 966 } 967 968 while ((scn = elf_nextscn(elf, scn)) != NULL) { 969 GElf_Shdr sh; 970 char *name; 971 972 idx++; 973 if (gelf_getshdr(scn, &sh) != &sh) { 974 pr_warn("failed to get section(%d) header from %s\n", 975 idx, path); 976 goto done; 977 } 978 name = elf_strptr(elf, shstrndx, sh.sh_name); 979 if (!name) { 980 pr_warn("failed to get section(%d) name from %s\n", 981 idx, path); 982 goto done; 983 } 984 if (strcmp(name, BTF_ELF_SEC) == 0) { 985 btf_data = elf_getdata(scn, 0); 986 if (!btf_data) { 987 pr_warn("failed to get section(%d, %s) data from %s\n", 988 idx, name, path); 989 goto done; 990 } 991 continue; 992 } else if (btf_ext && strcmp(name, BTF_EXT_ELF_SEC) == 0) { 993 btf_ext_data = elf_getdata(scn, 0); 994 if (!btf_ext_data) { 995 pr_warn("failed to get section(%d, %s) data from %s\n", 996 idx, name, path); 997 goto done; 998 } 999 continue; 1000 } 1001 } 1002 1003 err = 0; 1004 1005 if (!btf_data) { 1006 pr_warn("failed to find '%s' ELF section in %s\n", BTF_ELF_SEC, path); 1007 err = -ENODATA; 1008 goto done; 1009 } 1010 btf = btf_new(btf_data->d_buf, btf_data->d_size, base_btf); 1011 err = libbpf_get_error(btf); 1012 if (err) 1013 goto done; 1014 1015 switch (gelf_getclass(elf)) { 1016 case ELFCLASS32: 1017 btf__set_pointer_size(btf, 4); 1018 break; 1019 case ELFCLASS64: 1020 btf__set_pointer_size(btf, 8); 1021 break; 1022 default: 1023 pr_warn("failed to get ELF class (bitness) for %s\n", path); 1024 break; 1025 } 1026 1027 if (btf_ext && btf_ext_data) { 1028 *btf_ext = btf_ext__new(btf_ext_data->d_buf, btf_ext_data->d_size); 1029 err = libbpf_get_error(*btf_ext); 1030 if (err) 1031 goto done; 1032 } else if (btf_ext) { 1033 *btf_ext = NULL; 1034 } 1035 done: 1036 if (elf) 1037 elf_end(elf); 1038 close(fd); 1039 1040 if (!err) 1041 return btf; 1042 1043 if (btf_ext) 1044 btf_ext__free(*btf_ext); 1045 btf__free(btf); 1046 1047 return ERR_PTR(err); 1048 } 1049 1050 struct btf *btf__parse_elf(const char *path, struct btf_ext **btf_ext) 1051 { 1052 return libbpf_ptr(btf_parse_elf(path, NULL, btf_ext)); 1053 } 1054 1055 struct btf *btf__parse_elf_split(const char *path, struct btf *base_btf) 1056 { 1057 return libbpf_ptr(btf_parse_elf(path, base_btf, NULL)); 1058 } 1059 1060 static struct btf *btf_parse_raw(const char *path, struct btf *base_btf) 1061 { 1062 struct btf *btf = NULL; 1063 void *data = NULL; 1064 FILE *f = NULL; 1065 __u16 magic; 1066 int err = 0; 1067 long sz; 1068 1069 f = fopen(path, "rb"); 1070 if (!f) { 1071 err = -errno; 1072 goto err_out; 1073 } 1074 1075 /* check BTF magic */ 1076 if (fread(&magic, 1, sizeof(magic), f) < sizeof(magic)) { 1077 err = -EIO; 1078 goto err_out; 1079 } 1080 if (magic != BTF_MAGIC && magic != bswap_16(BTF_MAGIC)) { 1081 /* definitely not a raw BTF */ 1082 err = -EPROTO; 1083 goto err_out; 1084 } 1085 1086 /* get file size */ 1087 if (fseek(f, 0, SEEK_END)) { 1088 err = -errno; 1089 goto err_out; 1090 } 1091 sz = ftell(f); 1092 if (sz < 0) { 1093 err = -errno; 1094 goto err_out; 1095 } 1096 /* rewind to the start */ 1097 if (fseek(f, 0, SEEK_SET)) { 1098 err = -errno; 1099 goto err_out; 1100 } 1101 1102 /* pre-alloc memory and read all of BTF data */ 1103 data = malloc(sz); 1104 if (!data) { 1105 err = -ENOMEM; 1106 goto err_out; 1107 } 1108 if (fread(data, 1, sz, f) < sz) { 1109 err = -EIO; 1110 goto err_out; 1111 } 1112 1113 /* finally parse BTF data */ 1114 btf = btf_new(data, sz, base_btf); 1115 1116 err_out: 1117 free(data); 1118 if (f) 1119 fclose(f); 1120 return err ? ERR_PTR(err) : btf; 1121 } 1122 1123 struct btf *btf__parse_raw(const char *path) 1124 { 1125 return libbpf_ptr(btf_parse_raw(path, NULL)); 1126 } 1127 1128 struct btf *btf__parse_raw_split(const char *path, struct btf *base_btf) 1129 { 1130 return libbpf_ptr(btf_parse_raw(path, base_btf)); 1131 } 1132 1133 static struct btf *btf_parse(const char *path, struct btf *base_btf, struct btf_ext **btf_ext) 1134 { 1135 struct btf *btf; 1136 int err; 1137 1138 if (btf_ext) 1139 *btf_ext = NULL; 1140 1141 btf = btf_parse_raw(path, base_btf); 1142 err = libbpf_get_error(btf); 1143 if (!err) 1144 return btf; 1145 if (err != -EPROTO) 1146 return ERR_PTR(err); 1147 return btf_parse_elf(path, base_btf, btf_ext); 1148 } 1149 1150 struct btf *btf__parse(const char *path, struct btf_ext **btf_ext) 1151 { 1152 return libbpf_ptr(btf_parse(path, NULL, btf_ext)); 1153 } 1154 1155 struct btf *btf__parse_split(const char *path, struct btf *base_btf) 1156 { 1157 return libbpf_ptr(btf_parse(path, base_btf, NULL)); 1158 } 1159 1160 static void *btf_get_raw_data(const struct btf *btf, __u32 *size, bool swap_endian); 1161 1162 int btf_load_into_kernel(struct btf *btf, char *log_buf, size_t log_sz, __u32 log_level) 1163 { 1164 LIBBPF_OPTS(bpf_btf_load_opts, opts); 1165 __u32 buf_sz = 0, raw_size; 1166 char *buf = NULL, *tmp; 1167 void *raw_data; 1168 int err = 0; 1169 1170 if (btf->fd >= 0) 1171 return libbpf_err(-EEXIST); 1172 if (log_sz && !log_buf) 1173 return libbpf_err(-EINVAL); 1174 1175 /* cache native raw data representation */ 1176 raw_data = btf_get_raw_data(btf, &raw_size, false); 1177 if (!raw_data) { 1178 err = -ENOMEM; 1179 goto done; 1180 } 1181 btf->raw_size = raw_size; 1182 btf->raw_data = raw_data; 1183 1184 retry_load: 1185 /* if log_level is 0, we won't provide log_buf/log_size to the kernel, 1186 * initially. Only if BTF loading fails, we bump log_level to 1 and 1187 * retry, using either auto-allocated or custom log_buf. This way 1188 * non-NULL custom log_buf provides a buffer just in case, but hopes 1189 * for successful load and no need for log_buf. 1190 */ 1191 if (log_level) { 1192 /* if caller didn't provide custom log_buf, we'll keep 1193 * allocating our own progressively bigger buffers for BTF 1194 * verification log 1195 */ 1196 if (!log_buf) { 1197 buf_sz = max((__u32)BPF_LOG_BUF_SIZE, buf_sz * 2); 1198 tmp = realloc(buf, buf_sz); 1199 if (!tmp) { 1200 err = -ENOMEM; 1201 goto done; 1202 } 1203 buf = tmp; 1204 buf[0] = '\0'; 1205 } 1206 1207 opts.log_buf = log_buf ? log_buf : buf; 1208 opts.log_size = log_buf ? log_sz : buf_sz; 1209 opts.log_level = log_level; 1210 } 1211 1212 btf->fd = bpf_btf_load(raw_data, raw_size, &opts); 1213 if (btf->fd < 0) { 1214 /* time to turn on verbose mode and try again */ 1215 if (log_level == 0) { 1216 log_level = 1; 1217 goto retry_load; 1218 } 1219 /* only retry if caller didn't provide custom log_buf, but 1220 * make sure we can never overflow buf_sz 1221 */ 1222 if (!log_buf && errno == ENOSPC && buf_sz <= UINT_MAX / 2) 1223 goto retry_load; 1224 1225 err = -errno; 1226 pr_warn("BTF loading error: %d\n", err); 1227 /* don't print out contents of custom log_buf */ 1228 if (!log_buf && buf[0]) 1229 pr_warn("-- BEGIN BTF LOAD LOG ---\n%s\n-- END BTF LOAD LOG --\n", buf); 1230 } 1231 1232 done: 1233 free(buf); 1234 return libbpf_err(err); 1235 } 1236 1237 int btf__load_into_kernel(struct btf *btf) 1238 { 1239 return btf_load_into_kernel(btf, NULL, 0, 0); 1240 } 1241 1242 int btf__fd(const struct btf *btf) 1243 { 1244 return btf->fd; 1245 } 1246 1247 void btf__set_fd(struct btf *btf, int fd) 1248 { 1249 btf->fd = fd; 1250 } 1251 1252 static const void *btf_strs_data(const struct btf *btf) 1253 { 1254 return btf->strs_data ? btf->strs_data : strset__data(btf->strs_set); 1255 } 1256 1257 static void *btf_get_raw_data(const struct btf *btf, __u32 *size, bool swap_endian) 1258 { 1259 struct btf_header *hdr = btf->hdr; 1260 struct btf_type *t; 1261 void *data, *p; 1262 __u32 data_sz; 1263 int i; 1264 1265 data = swap_endian ? btf->raw_data_swapped : btf->raw_data; 1266 if (data) { 1267 *size = btf->raw_size; 1268 return data; 1269 } 1270 1271 data_sz = hdr->hdr_len + hdr->type_len + hdr->str_len; 1272 data = calloc(1, data_sz); 1273 if (!data) 1274 return NULL; 1275 p = data; 1276 1277 memcpy(p, hdr, hdr->hdr_len); 1278 if (swap_endian) 1279 btf_bswap_hdr(p); 1280 p += hdr->hdr_len; 1281 1282 memcpy(p, btf->types_data, hdr->type_len); 1283 if (swap_endian) { 1284 for (i = 0; i < btf->nr_types; i++) { 1285 t = p + btf->type_offs[i]; 1286 /* btf_bswap_type_rest() relies on native t->info, so 1287 * we swap base type info after we swapped all the 1288 * additional information 1289 */ 1290 if (btf_bswap_type_rest(t)) 1291 goto err_out; 1292 btf_bswap_type_base(t); 1293 } 1294 } 1295 p += hdr->type_len; 1296 1297 memcpy(p, btf_strs_data(btf), hdr->str_len); 1298 p += hdr->str_len; 1299 1300 *size = data_sz; 1301 return data; 1302 err_out: 1303 free(data); 1304 return NULL; 1305 } 1306 1307 const void *btf__raw_data(const struct btf *btf_ro, __u32 *size) 1308 { 1309 struct btf *btf = (struct btf *)btf_ro; 1310 __u32 data_sz; 1311 void *data; 1312 1313 data = btf_get_raw_data(btf, &data_sz, btf->swapped_endian); 1314 if (!data) 1315 return errno = ENOMEM, NULL; 1316 1317 btf->raw_size = data_sz; 1318 if (btf->swapped_endian) 1319 btf->raw_data_swapped = data; 1320 else 1321 btf->raw_data = data; 1322 *size = data_sz; 1323 return data; 1324 } 1325 1326 __attribute__((alias("btf__raw_data"))) 1327 const void *btf__get_raw_data(const struct btf *btf, __u32 *size); 1328 1329 const char *btf__str_by_offset(const struct btf *btf, __u32 offset) 1330 { 1331 if (offset < btf->start_str_off) 1332 return btf__str_by_offset(btf->base_btf, offset); 1333 else if (offset - btf->start_str_off < btf->hdr->str_len) 1334 return btf_strs_data(btf) + (offset - btf->start_str_off); 1335 else 1336 return errno = EINVAL, NULL; 1337 } 1338 1339 const char *btf__name_by_offset(const struct btf *btf, __u32 offset) 1340 { 1341 return btf__str_by_offset(btf, offset); 1342 } 1343 1344 struct btf *btf_get_from_fd(int btf_fd, struct btf *base_btf) 1345 { 1346 struct bpf_btf_info btf_info; 1347 __u32 len = sizeof(btf_info); 1348 __u32 last_size; 1349 struct btf *btf; 1350 void *ptr; 1351 int err; 1352 1353 /* we won't know btf_size until we call bpf_btf_get_info_by_fd(). so 1354 * let's start with a sane default - 4KiB here - and resize it only if 1355 * bpf_btf_get_info_by_fd() needs a bigger buffer. 1356 */ 1357 last_size = 4096; 1358 ptr = malloc(last_size); 1359 if (!ptr) 1360 return ERR_PTR(-ENOMEM); 1361 1362 memset(&btf_info, 0, sizeof(btf_info)); 1363 btf_info.btf = ptr_to_u64(ptr); 1364 btf_info.btf_size = last_size; 1365 err = bpf_btf_get_info_by_fd(btf_fd, &btf_info, &len); 1366 1367 if (!err && btf_info.btf_size > last_size) { 1368 void *temp_ptr; 1369 1370 last_size = btf_info.btf_size; 1371 temp_ptr = realloc(ptr, last_size); 1372 if (!temp_ptr) { 1373 btf = ERR_PTR(-ENOMEM); 1374 goto exit_free; 1375 } 1376 ptr = temp_ptr; 1377 1378 len = sizeof(btf_info); 1379 memset(&btf_info, 0, sizeof(btf_info)); 1380 btf_info.btf = ptr_to_u64(ptr); 1381 btf_info.btf_size = last_size; 1382 1383 err = bpf_btf_get_info_by_fd(btf_fd, &btf_info, &len); 1384 } 1385 1386 if (err || btf_info.btf_size > last_size) { 1387 btf = err ? ERR_PTR(-errno) : ERR_PTR(-E2BIG); 1388 goto exit_free; 1389 } 1390 1391 btf = btf_new(ptr, btf_info.btf_size, base_btf); 1392 1393 exit_free: 1394 free(ptr); 1395 return btf; 1396 } 1397 1398 struct btf *btf__load_from_kernel_by_id_split(__u32 id, struct btf *base_btf) 1399 { 1400 struct btf *btf; 1401 int btf_fd; 1402 1403 btf_fd = bpf_btf_get_fd_by_id(id); 1404 if (btf_fd < 0) 1405 return libbpf_err_ptr(-errno); 1406 1407 btf = btf_get_from_fd(btf_fd, base_btf); 1408 close(btf_fd); 1409 1410 return libbpf_ptr(btf); 1411 } 1412 1413 struct btf *btf__load_from_kernel_by_id(__u32 id) 1414 { 1415 return btf__load_from_kernel_by_id_split(id, NULL); 1416 } 1417 1418 static void btf_invalidate_raw_data(struct btf *btf) 1419 { 1420 if (btf->raw_data) { 1421 free(btf->raw_data); 1422 btf->raw_data = NULL; 1423 } 1424 if (btf->raw_data_swapped) { 1425 free(btf->raw_data_swapped); 1426 btf->raw_data_swapped = NULL; 1427 } 1428 } 1429 1430 /* Ensure BTF is ready to be modified (by splitting into a three memory 1431 * regions for header, types, and strings). Also invalidate cached 1432 * raw_data, if any. 1433 */ 1434 static int btf_ensure_modifiable(struct btf *btf) 1435 { 1436 void *hdr, *types; 1437 struct strset *set = NULL; 1438 int err = -ENOMEM; 1439 1440 if (btf_is_modifiable(btf)) { 1441 /* any BTF modification invalidates raw_data */ 1442 btf_invalidate_raw_data(btf); 1443 return 0; 1444 } 1445 1446 /* split raw data into three memory regions */ 1447 hdr = malloc(btf->hdr->hdr_len); 1448 types = malloc(btf->hdr->type_len); 1449 if (!hdr || !types) 1450 goto err_out; 1451 1452 memcpy(hdr, btf->hdr, btf->hdr->hdr_len); 1453 memcpy(types, btf->types_data, btf->hdr->type_len); 1454 1455 /* build lookup index for all strings */ 1456 set = strset__new(BTF_MAX_STR_OFFSET, btf->strs_data, btf->hdr->str_len); 1457 if (IS_ERR(set)) { 1458 err = PTR_ERR(set); 1459 goto err_out; 1460 } 1461 1462 /* only when everything was successful, update internal state */ 1463 btf->hdr = hdr; 1464 btf->types_data = types; 1465 btf->types_data_cap = btf->hdr->type_len; 1466 btf->strs_data = NULL; 1467 btf->strs_set = set; 1468 /* if BTF was created from scratch, all strings are guaranteed to be 1469 * unique and deduplicated 1470 */ 1471 if (btf->hdr->str_len == 0) 1472 btf->strs_deduped = true; 1473 if (!btf->base_btf && btf->hdr->str_len == 1) 1474 btf->strs_deduped = true; 1475 1476 /* invalidate raw_data representation */ 1477 btf_invalidate_raw_data(btf); 1478 1479 return 0; 1480 1481 err_out: 1482 strset__free(set); 1483 free(hdr); 1484 free(types); 1485 return err; 1486 } 1487 1488 /* Find an offset in BTF string section that corresponds to a given string *s*. 1489 * Returns: 1490 * - >0 offset into string section, if string is found; 1491 * - -ENOENT, if string is not in the string section; 1492 * - <0, on any other error. 1493 */ 1494 int btf__find_str(struct btf *btf, const char *s) 1495 { 1496 int off; 1497 1498 if (btf->base_btf) { 1499 off = btf__find_str(btf->base_btf, s); 1500 if (off != -ENOENT) 1501 return off; 1502 } 1503 1504 /* BTF needs to be in a modifiable state to build string lookup index */ 1505 if (btf_ensure_modifiable(btf)) 1506 return libbpf_err(-ENOMEM); 1507 1508 off = strset__find_str(btf->strs_set, s); 1509 if (off < 0) 1510 return libbpf_err(off); 1511 1512 return btf->start_str_off + off; 1513 } 1514 1515 /* Add a string s to the BTF string section. 1516 * Returns: 1517 * - > 0 offset into string section, on success; 1518 * - < 0, on error. 1519 */ 1520 int btf__add_str(struct btf *btf, const char *s) 1521 { 1522 int off; 1523 1524 if (btf->base_btf) { 1525 off = btf__find_str(btf->base_btf, s); 1526 if (off != -ENOENT) 1527 return off; 1528 } 1529 1530 if (btf_ensure_modifiable(btf)) 1531 return libbpf_err(-ENOMEM); 1532 1533 off = strset__add_str(btf->strs_set, s); 1534 if (off < 0) 1535 return libbpf_err(off); 1536 1537 btf->hdr->str_len = strset__data_size(btf->strs_set); 1538 1539 return btf->start_str_off + off; 1540 } 1541 1542 static void *btf_add_type_mem(struct btf *btf, size_t add_sz) 1543 { 1544 return libbpf_add_mem(&btf->types_data, &btf->types_data_cap, 1, 1545 btf->hdr->type_len, UINT_MAX, add_sz); 1546 } 1547 1548 static void btf_type_inc_vlen(struct btf_type *t) 1549 { 1550 t->info = btf_type_info(btf_kind(t), btf_vlen(t) + 1, btf_kflag(t)); 1551 } 1552 1553 static int btf_commit_type(struct btf *btf, int data_sz) 1554 { 1555 int err; 1556 1557 err = btf_add_type_idx_entry(btf, btf->hdr->type_len); 1558 if (err) 1559 return libbpf_err(err); 1560 1561 btf->hdr->type_len += data_sz; 1562 btf->hdr->str_off += data_sz; 1563 btf->nr_types++; 1564 return btf->start_id + btf->nr_types - 1; 1565 } 1566 1567 struct btf_pipe { 1568 const struct btf *src; 1569 struct btf *dst; 1570 struct hashmap *str_off_map; /* map string offsets from src to dst */ 1571 }; 1572 1573 static int btf_rewrite_str(__u32 *str_off, void *ctx) 1574 { 1575 struct btf_pipe *p = ctx; 1576 long mapped_off; 1577 int off, err; 1578 1579 if (!*str_off) /* nothing to do for empty strings */ 1580 return 0; 1581 1582 if (p->str_off_map && 1583 hashmap__find(p->str_off_map, *str_off, &mapped_off)) { 1584 *str_off = mapped_off; 1585 return 0; 1586 } 1587 1588 off = btf__add_str(p->dst, btf__str_by_offset(p->src, *str_off)); 1589 if (off < 0) 1590 return off; 1591 1592 /* Remember string mapping from src to dst. It avoids 1593 * performing expensive string comparisons. 1594 */ 1595 if (p->str_off_map) { 1596 err = hashmap__append(p->str_off_map, *str_off, off); 1597 if (err) 1598 return err; 1599 } 1600 1601 *str_off = off; 1602 return 0; 1603 } 1604 1605 int btf__add_type(struct btf *btf, const struct btf *src_btf, const struct btf_type *src_type) 1606 { 1607 struct btf_pipe p = { .src = src_btf, .dst = btf }; 1608 struct btf_type *t; 1609 int sz, err; 1610 1611 sz = btf_type_size(src_type); 1612 if (sz < 0) 1613 return libbpf_err(sz); 1614 1615 /* deconstruct BTF, if necessary, and invalidate raw_data */ 1616 if (btf_ensure_modifiable(btf)) 1617 return libbpf_err(-ENOMEM); 1618 1619 t = btf_add_type_mem(btf, sz); 1620 if (!t) 1621 return libbpf_err(-ENOMEM); 1622 1623 memcpy(t, src_type, sz); 1624 1625 err = btf_type_visit_str_offs(t, btf_rewrite_str, &p); 1626 if (err) 1627 return libbpf_err(err); 1628 1629 return btf_commit_type(btf, sz); 1630 } 1631 1632 static int btf_rewrite_type_ids(__u32 *type_id, void *ctx) 1633 { 1634 struct btf *btf = ctx; 1635 1636 if (!*type_id) /* nothing to do for VOID references */ 1637 return 0; 1638 1639 /* we haven't updated btf's type count yet, so 1640 * btf->start_id + btf->nr_types - 1 is the type ID offset we should 1641 * add to all newly added BTF types 1642 */ 1643 *type_id += btf->start_id + btf->nr_types - 1; 1644 return 0; 1645 } 1646 1647 static size_t btf_dedup_identity_hash_fn(long key, void *ctx); 1648 static bool btf_dedup_equal_fn(long k1, long k2, void *ctx); 1649 1650 int btf__add_btf(struct btf *btf, const struct btf *src_btf) 1651 { 1652 struct btf_pipe p = { .src = src_btf, .dst = btf }; 1653 int data_sz, sz, cnt, i, err, old_strs_len; 1654 __u32 *off; 1655 void *t; 1656 1657 /* appending split BTF isn't supported yet */ 1658 if (src_btf->base_btf) 1659 return libbpf_err(-ENOTSUP); 1660 1661 /* deconstruct BTF, if necessary, and invalidate raw_data */ 1662 if (btf_ensure_modifiable(btf)) 1663 return libbpf_err(-ENOMEM); 1664 1665 /* remember original strings section size if we have to roll back 1666 * partial strings section changes 1667 */ 1668 old_strs_len = btf->hdr->str_len; 1669 1670 data_sz = src_btf->hdr->type_len; 1671 cnt = btf__type_cnt(src_btf) - 1; 1672 1673 /* pre-allocate enough memory for new types */ 1674 t = btf_add_type_mem(btf, data_sz); 1675 if (!t) 1676 return libbpf_err(-ENOMEM); 1677 1678 /* pre-allocate enough memory for type offset index for new types */ 1679 off = btf_add_type_offs_mem(btf, cnt); 1680 if (!off) 1681 return libbpf_err(-ENOMEM); 1682 1683 /* Map the string offsets from src_btf to the offsets from btf to improve performance */ 1684 p.str_off_map = hashmap__new(btf_dedup_identity_hash_fn, btf_dedup_equal_fn, NULL); 1685 if (IS_ERR(p.str_off_map)) 1686 return libbpf_err(-ENOMEM); 1687 1688 /* bulk copy types data for all types from src_btf */ 1689 memcpy(t, src_btf->types_data, data_sz); 1690 1691 for (i = 0; i < cnt; i++) { 1692 sz = btf_type_size(t); 1693 if (sz < 0) { 1694 /* unlikely, has to be corrupted src_btf */ 1695 err = sz; 1696 goto err_out; 1697 } 1698 1699 /* fill out type ID to type offset mapping for lookups by type ID */ 1700 *off = t - btf->types_data; 1701 1702 /* add, dedup, and remap strings referenced by this BTF type */ 1703 err = btf_type_visit_str_offs(t, btf_rewrite_str, &p); 1704 if (err) 1705 goto err_out; 1706 1707 /* remap all type IDs referenced from this BTF type */ 1708 err = btf_type_visit_type_ids(t, btf_rewrite_type_ids, btf); 1709 if (err) 1710 goto err_out; 1711 1712 /* go to next type data and type offset index entry */ 1713 t += sz; 1714 off++; 1715 } 1716 1717 /* Up until now any of the copied type data was effectively invisible, 1718 * so if we exited early before this point due to error, BTF would be 1719 * effectively unmodified. There would be extra internal memory 1720 * pre-allocated, but it would not be available for querying. But now 1721 * that we've copied and rewritten all the data successfully, we can 1722 * update type count and various internal offsets and sizes to 1723 * "commit" the changes and made them visible to the outside world. 1724 */ 1725 btf->hdr->type_len += data_sz; 1726 btf->hdr->str_off += data_sz; 1727 btf->nr_types += cnt; 1728 1729 hashmap__free(p.str_off_map); 1730 1731 /* return type ID of the first added BTF type */ 1732 return btf->start_id + btf->nr_types - cnt; 1733 err_out: 1734 /* zero out preallocated memory as if it was just allocated with 1735 * libbpf_add_mem() 1736 */ 1737 memset(btf->types_data + btf->hdr->type_len, 0, data_sz); 1738 memset(btf->strs_data + old_strs_len, 0, btf->hdr->str_len - old_strs_len); 1739 1740 /* and now restore original strings section size; types data size 1741 * wasn't modified, so doesn't need restoring, see big comment above 1742 */ 1743 btf->hdr->str_len = old_strs_len; 1744 1745 hashmap__free(p.str_off_map); 1746 1747 return libbpf_err(err); 1748 } 1749 1750 /* 1751 * Append new BTF_KIND_INT type with: 1752 * - *name* - non-empty, non-NULL type name; 1753 * - *sz* - power-of-2 (1, 2, 4, ..) size of the type, in bytes; 1754 * - encoding is a combination of BTF_INT_SIGNED, BTF_INT_CHAR, BTF_INT_BOOL. 1755 * Returns: 1756 * - >0, type ID of newly added BTF type; 1757 * - <0, on error. 1758 */ 1759 int btf__add_int(struct btf *btf, const char *name, size_t byte_sz, int encoding) 1760 { 1761 struct btf_type *t; 1762 int sz, name_off; 1763 1764 /* non-empty name */ 1765 if (!name || !name[0]) 1766 return libbpf_err(-EINVAL); 1767 /* byte_sz must be power of 2 */ 1768 if (!byte_sz || (byte_sz & (byte_sz - 1)) || byte_sz > 16) 1769 return libbpf_err(-EINVAL); 1770 if (encoding & ~(BTF_INT_SIGNED | BTF_INT_CHAR | BTF_INT_BOOL)) 1771 return libbpf_err(-EINVAL); 1772 1773 /* deconstruct BTF, if necessary, and invalidate raw_data */ 1774 if (btf_ensure_modifiable(btf)) 1775 return libbpf_err(-ENOMEM); 1776 1777 sz = sizeof(struct btf_type) + sizeof(int); 1778 t = btf_add_type_mem(btf, sz); 1779 if (!t) 1780 return libbpf_err(-ENOMEM); 1781 1782 /* if something goes wrong later, we might end up with an extra string, 1783 * but that shouldn't be a problem, because BTF can't be constructed 1784 * completely anyway and will most probably be just discarded 1785 */ 1786 name_off = btf__add_str(btf, name); 1787 if (name_off < 0) 1788 return name_off; 1789 1790 t->name_off = name_off; 1791 t->info = btf_type_info(BTF_KIND_INT, 0, 0); 1792 t->size = byte_sz; 1793 /* set INT info, we don't allow setting legacy bit offset/size */ 1794 *(__u32 *)(t + 1) = (encoding << 24) | (byte_sz * 8); 1795 1796 return btf_commit_type(btf, sz); 1797 } 1798 1799 /* 1800 * Append new BTF_KIND_FLOAT type with: 1801 * - *name* - non-empty, non-NULL type name; 1802 * - *sz* - size of the type, in bytes; 1803 * Returns: 1804 * - >0, type ID of newly added BTF type; 1805 * - <0, on error. 1806 */ 1807 int btf__add_float(struct btf *btf, const char *name, size_t byte_sz) 1808 { 1809 struct btf_type *t; 1810 int sz, name_off; 1811 1812 /* non-empty name */ 1813 if (!name || !name[0]) 1814 return libbpf_err(-EINVAL); 1815 1816 /* byte_sz must be one of the explicitly allowed values */ 1817 if (byte_sz != 2 && byte_sz != 4 && byte_sz != 8 && byte_sz != 12 && 1818 byte_sz != 16) 1819 return libbpf_err(-EINVAL); 1820 1821 if (btf_ensure_modifiable(btf)) 1822 return libbpf_err(-ENOMEM); 1823 1824 sz = sizeof(struct btf_type); 1825 t = btf_add_type_mem(btf, sz); 1826 if (!t) 1827 return libbpf_err(-ENOMEM); 1828 1829 name_off = btf__add_str(btf, name); 1830 if (name_off < 0) 1831 return name_off; 1832 1833 t->name_off = name_off; 1834 t->info = btf_type_info(BTF_KIND_FLOAT, 0, 0); 1835 t->size = byte_sz; 1836 1837 return btf_commit_type(btf, sz); 1838 } 1839 1840 /* it's completely legal to append BTF types with type IDs pointing forward to 1841 * types that haven't been appended yet, so we only make sure that id looks 1842 * sane, we can't guarantee that ID will always be valid 1843 */ 1844 static int validate_type_id(int id) 1845 { 1846 if (id < 0 || id > BTF_MAX_NR_TYPES) 1847 return -EINVAL; 1848 return 0; 1849 } 1850 1851 /* generic append function for PTR, TYPEDEF, CONST/VOLATILE/RESTRICT */ 1852 static int btf_add_ref_kind(struct btf *btf, int kind, const char *name, int ref_type_id) 1853 { 1854 struct btf_type *t; 1855 int sz, name_off = 0; 1856 1857 if (validate_type_id(ref_type_id)) 1858 return libbpf_err(-EINVAL); 1859 1860 if (btf_ensure_modifiable(btf)) 1861 return libbpf_err(-ENOMEM); 1862 1863 sz = sizeof(struct btf_type); 1864 t = btf_add_type_mem(btf, sz); 1865 if (!t) 1866 return libbpf_err(-ENOMEM); 1867 1868 if (name && name[0]) { 1869 name_off = btf__add_str(btf, name); 1870 if (name_off < 0) 1871 return name_off; 1872 } 1873 1874 t->name_off = name_off; 1875 t->info = btf_type_info(kind, 0, 0); 1876 t->type = ref_type_id; 1877 1878 return btf_commit_type(btf, sz); 1879 } 1880 1881 /* 1882 * Append new BTF_KIND_PTR type with: 1883 * - *ref_type_id* - referenced type ID, it might not exist yet; 1884 * Returns: 1885 * - >0, type ID of newly added BTF type; 1886 * - <0, on error. 1887 */ 1888 int btf__add_ptr(struct btf *btf, int ref_type_id) 1889 { 1890 return btf_add_ref_kind(btf, BTF_KIND_PTR, NULL, ref_type_id); 1891 } 1892 1893 /* 1894 * Append new BTF_KIND_ARRAY type with: 1895 * - *index_type_id* - type ID of the type describing array index; 1896 * - *elem_type_id* - type ID of the type describing array element; 1897 * - *nr_elems* - the size of the array; 1898 * Returns: 1899 * - >0, type ID of newly added BTF type; 1900 * - <0, on error. 1901 */ 1902 int btf__add_array(struct btf *btf, int index_type_id, int elem_type_id, __u32 nr_elems) 1903 { 1904 struct btf_type *t; 1905 struct btf_array *a; 1906 int sz; 1907 1908 if (validate_type_id(index_type_id) || validate_type_id(elem_type_id)) 1909 return libbpf_err(-EINVAL); 1910 1911 if (btf_ensure_modifiable(btf)) 1912 return libbpf_err(-ENOMEM); 1913 1914 sz = sizeof(struct btf_type) + sizeof(struct btf_array); 1915 t = btf_add_type_mem(btf, sz); 1916 if (!t) 1917 return libbpf_err(-ENOMEM); 1918 1919 t->name_off = 0; 1920 t->info = btf_type_info(BTF_KIND_ARRAY, 0, 0); 1921 t->size = 0; 1922 1923 a = btf_array(t); 1924 a->type = elem_type_id; 1925 a->index_type = index_type_id; 1926 a->nelems = nr_elems; 1927 1928 return btf_commit_type(btf, sz); 1929 } 1930 1931 /* generic STRUCT/UNION append function */ 1932 static int btf_add_composite(struct btf *btf, int kind, const char *name, __u32 bytes_sz) 1933 { 1934 struct btf_type *t; 1935 int sz, name_off = 0; 1936 1937 if (btf_ensure_modifiable(btf)) 1938 return libbpf_err(-ENOMEM); 1939 1940 sz = sizeof(struct btf_type); 1941 t = btf_add_type_mem(btf, sz); 1942 if (!t) 1943 return libbpf_err(-ENOMEM); 1944 1945 if (name && name[0]) { 1946 name_off = btf__add_str(btf, name); 1947 if (name_off < 0) 1948 return name_off; 1949 } 1950 1951 /* start out with vlen=0 and no kflag; this will be adjusted when 1952 * adding each member 1953 */ 1954 t->name_off = name_off; 1955 t->info = btf_type_info(kind, 0, 0); 1956 t->size = bytes_sz; 1957 1958 return btf_commit_type(btf, sz); 1959 } 1960 1961 /* 1962 * Append new BTF_KIND_STRUCT type with: 1963 * - *name* - name of the struct, can be NULL or empty for anonymous structs; 1964 * - *byte_sz* - size of the struct, in bytes; 1965 * 1966 * Struct initially has no fields in it. Fields can be added by 1967 * btf__add_field() right after btf__add_struct() succeeds. 1968 * 1969 * Returns: 1970 * - >0, type ID of newly added BTF type; 1971 * - <0, on error. 1972 */ 1973 int btf__add_struct(struct btf *btf, const char *name, __u32 byte_sz) 1974 { 1975 return btf_add_composite(btf, BTF_KIND_STRUCT, name, byte_sz); 1976 } 1977 1978 /* 1979 * Append new BTF_KIND_UNION type with: 1980 * - *name* - name of the union, can be NULL or empty for anonymous union; 1981 * - *byte_sz* - size of the union, in bytes; 1982 * 1983 * Union initially has no fields in it. Fields can be added by 1984 * btf__add_field() right after btf__add_union() succeeds. All fields 1985 * should have *bit_offset* of 0. 1986 * 1987 * Returns: 1988 * - >0, type ID of newly added BTF type; 1989 * - <0, on error. 1990 */ 1991 int btf__add_union(struct btf *btf, const char *name, __u32 byte_sz) 1992 { 1993 return btf_add_composite(btf, BTF_KIND_UNION, name, byte_sz); 1994 } 1995 1996 static struct btf_type *btf_last_type(struct btf *btf) 1997 { 1998 return btf_type_by_id(btf, btf__type_cnt(btf) - 1); 1999 } 2000 2001 /* 2002 * Append new field for the current STRUCT/UNION type with: 2003 * - *name* - name of the field, can be NULL or empty for anonymous field; 2004 * - *type_id* - type ID for the type describing field type; 2005 * - *bit_offset* - bit offset of the start of the field within struct/union; 2006 * - *bit_size* - bit size of a bitfield, 0 for non-bitfield fields; 2007 * Returns: 2008 * - 0, on success; 2009 * - <0, on error. 2010 */ 2011 int btf__add_field(struct btf *btf, const char *name, int type_id, 2012 __u32 bit_offset, __u32 bit_size) 2013 { 2014 struct btf_type *t; 2015 struct btf_member *m; 2016 bool is_bitfield; 2017 int sz, name_off = 0; 2018 2019 /* last type should be union/struct */ 2020 if (btf->nr_types == 0) 2021 return libbpf_err(-EINVAL); 2022 t = btf_last_type(btf); 2023 if (!btf_is_composite(t)) 2024 return libbpf_err(-EINVAL); 2025 2026 if (validate_type_id(type_id)) 2027 return libbpf_err(-EINVAL); 2028 /* best-effort bit field offset/size enforcement */ 2029 is_bitfield = bit_size || (bit_offset % 8 != 0); 2030 if (is_bitfield && (bit_size == 0 || bit_size > 255 || bit_offset > 0xffffff)) 2031 return libbpf_err(-EINVAL); 2032 2033 /* only offset 0 is allowed for unions */ 2034 if (btf_is_union(t) && bit_offset) 2035 return libbpf_err(-EINVAL); 2036 2037 /* decompose and invalidate raw data */ 2038 if (btf_ensure_modifiable(btf)) 2039 return libbpf_err(-ENOMEM); 2040 2041 sz = sizeof(struct btf_member); 2042 m = btf_add_type_mem(btf, sz); 2043 if (!m) 2044 return libbpf_err(-ENOMEM); 2045 2046 if (name && name[0]) { 2047 name_off = btf__add_str(btf, name); 2048 if (name_off < 0) 2049 return name_off; 2050 } 2051 2052 m->name_off = name_off; 2053 m->type = type_id; 2054 m->offset = bit_offset | (bit_size << 24); 2055 2056 /* btf_add_type_mem can invalidate t pointer */ 2057 t = btf_last_type(btf); 2058 /* update parent type's vlen and kflag */ 2059 t->info = btf_type_info(btf_kind(t), btf_vlen(t) + 1, is_bitfield || btf_kflag(t)); 2060 2061 btf->hdr->type_len += sz; 2062 btf->hdr->str_off += sz; 2063 return 0; 2064 } 2065 2066 static int btf_add_enum_common(struct btf *btf, const char *name, __u32 byte_sz, 2067 bool is_signed, __u8 kind) 2068 { 2069 struct btf_type *t; 2070 int sz, name_off = 0; 2071 2072 /* byte_sz must be power of 2 */ 2073 if (!byte_sz || (byte_sz & (byte_sz - 1)) || byte_sz > 8) 2074 return libbpf_err(-EINVAL); 2075 2076 if (btf_ensure_modifiable(btf)) 2077 return libbpf_err(-ENOMEM); 2078 2079 sz = sizeof(struct btf_type); 2080 t = btf_add_type_mem(btf, sz); 2081 if (!t) 2082 return libbpf_err(-ENOMEM); 2083 2084 if (name && name[0]) { 2085 name_off = btf__add_str(btf, name); 2086 if (name_off < 0) 2087 return name_off; 2088 } 2089 2090 /* start out with vlen=0; it will be adjusted when adding enum values */ 2091 t->name_off = name_off; 2092 t->info = btf_type_info(kind, 0, is_signed); 2093 t->size = byte_sz; 2094 2095 return btf_commit_type(btf, sz); 2096 } 2097 2098 /* 2099 * Append new BTF_KIND_ENUM type with: 2100 * - *name* - name of the enum, can be NULL or empty for anonymous enums; 2101 * - *byte_sz* - size of the enum, in bytes. 2102 * 2103 * Enum initially has no enum values in it (and corresponds to enum forward 2104 * declaration). Enumerator values can be added by btf__add_enum_value() 2105 * immediately after btf__add_enum() succeeds. 2106 * 2107 * Returns: 2108 * - >0, type ID of newly added BTF type; 2109 * - <0, on error. 2110 */ 2111 int btf__add_enum(struct btf *btf, const char *name, __u32 byte_sz) 2112 { 2113 /* 2114 * set the signedness to be unsigned, it will change to signed 2115 * if any later enumerator is negative. 2116 */ 2117 return btf_add_enum_common(btf, name, byte_sz, false, BTF_KIND_ENUM); 2118 } 2119 2120 /* 2121 * Append new enum value for the current ENUM type with: 2122 * - *name* - name of the enumerator value, can't be NULL or empty; 2123 * - *value* - integer value corresponding to enum value *name*; 2124 * Returns: 2125 * - 0, on success; 2126 * - <0, on error. 2127 */ 2128 int btf__add_enum_value(struct btf *btf, const char *name, __s64 value) 2129 { 2130 struct btf_type *t; 2131 struct btf_enum *v; 2132 int sz, name_off; 2133 2134 /* last type should be BTF_KIND_ENUM */ 2135 if (btf->nr_types == 0) 2136 return libbpf_err(-EINVAL); 2137 t = btf_last_type(btf); 2138 if (!btf_is_enum(t)) 2139 return libbpf_err(-EINVAL); 2140 2141 /* non-empty name */ 2142 if (!name || !name[0]) 2143 return libbpf_err(-EINVAL); 2144 if (value < INT_MIN || value > UINT_MAX) 2145 return libbpf_err(-E2BIG); 2146 2147 /* decompose and invalidate raw data */ 2148 if (btf_ensure_modifiable(btf)) 2149 return libbpf_err(-ENOMEM); 2150 2151 sz = sizeof(struct btf_enum); 2152 v = btf_add_type_mem(btf, sz); 2153 if (!v) 2154 return libbpf_err(-ENOMEM); 2155 2156 name_off = btf__add_str(btf, name); 2157 if (name_off < 0) 2158 return name_off; 2159 2160 v->name_off = name_off; 2161 v->val = value; 2162 2163 /* update parent type's vlen */ 2164 t = btf_last_type(btf); 2165 btf_type_inc_vlen(t); 2166 2167 /* if negative value, set signedness to signed */ 2168 if (value < 0) 2169 t->info = btf_type_info(btf_kind(t), btf_vlen(t), true); 2170 2171 btf->hdr->type_len += sz; 2172 btf->hdr->str_off += sz; 2173 return 0; 2174 } 2175 2176 /* 2177 * Append new BTF_KIND_ENUM64 type with: 2178 * - *name* - name of the enum, can be NULL or empty for anonymous enums; 2179 * - *byte_sz* - size of the enum, in bytes. 2180 * - *is_signed* - whether the enum values are signed or not; 2181 * 2182 * Enum initially has no enum values in it (and corresponds to enum forward 2183 * declaration). Enumerator values can be added by btf__add_enum64_value() 2184 * immediately after btf__add_enum64() succeeds. 2185 * 2186 * Returns: 2187 * - >0, type ID of newly added BTF type; 2188 * - <0, on error. 2189 */ 2190 int btf__add_enum64(struct btf *btf, const char *name, __u32 byte_sz, 2191 bool is_signed) 2192 { 2193 return btf_add_enum_common(btf, name, byte_sz, is_signed, 2194 BTF_KIND_ENUM64); 2195 } 2196 2197 /* 2198 * Append new enum value for the current ENUM64 type with: 2199 * - *name* - name of the enumerator value, can't be NULL or empty; 2200 * - *value* - integer value corresponding to enum value *name*; 2201 * Returns: 2202 * - 0, on success; 2203 * - <0, on error. 2204 */ 2205 int btf__add_enum64_value(struct btf *btf, const char *name, __u64 value) 2206 { 2207 struct btf_enum64 *v; 2208 struct btf_type *t; 2209 int sz, name_off; 2210 2211 /* last type should be BTF_KIND_ENUM64 */ 2212 if (btf->nr_types == 0) 2213 return libbpf_err(-EINVAL); 2214 t = btf_last_type(btf); 2215 if (!btf_is_enum64(t)) 2216 return libbpf_err(-EINVAL); 2217 2218 /* non-empty name */ 2219 if (!name || !name[0]) 2220 return libbpf_err(-EINVAL); 2221 2222 /* decompose and invalidate raw data */ 2223 if (btf_ensure_modifiable(btf)) 2224 return libbpf_err(-ENOMEM); 2225 2226 sz = sizeof(struct btf_enum64); 2227 v = btf_add_type_mem(btf, sz); 2228 if (!v) 2229 return libbpf_err(-ENOMEM); 2230 2231 name_off = btf__add_str(btf, name); 2232 if (name_off < 0) 2233 return name_off; 2234 2235 v->name_off = name_off; 2236 v->val_lo32 = (__u32)value; 2237 v->val_hi32 = value >> 32; 2238 2239 /* update parent type's vlen */ 2240 t = btf_last_type(btf); 2241 btf_type_inc_vlen(t); 2242 2243 btf->hdr->type_len += sz; 2244 btf->hdr->str_off += sz; 2245 return 0; 2246 } 2247 2248 /* 2249 * Append new BTF_KIND_FWD type with: 2250 * - *name*, non-empty/non-NULL name; 2251 * - *fwd_kind*, kind of forward declaration, one of BTF_FWD_STRUCT, 2252 * BTF_FWD_UNION, or BTF_FWD_ENUM; 2253 * Returns: 2254 * - >0, type ID of newly added BTF type; 2255 * - <0, on error. 2256 */ 2257 int btf__add_fwd(struct btf *btf, const char *name, enum btf_fwd_kind fwd_kind) 2258 { 2259 if (!name || !name[0]) 2260 return libbpf_err(-EINVAL); 2261 2262 switch (fwd_kind) { 2263 case BTF_FWD_STRUCT: 2264 case BTF_FWD_UNION: { 2265 struct btf_type *t; 2266 int id; 2267 2268 id = btf_add_ref_kind(btf, BTF_KIND_FWD, name, 0); 2269 if (id <= 0) 2270 return id; 2271 t = btf_type_by_id(btf, id); 2272 t->info = btf_type_info(BTF_KIND_FWD, 0, fwd_kind == BTF_FWD_UNION); 2273 return id; 2274 } 2275 case BTF_FWD_ENUM: 2276 /* enum forward in BTF currently is just an enum with no enum 2277 * values; we also assume a standard 4-byte size for it 2278 */ 2279 return btf__add_enum(btf, name, sizeof(int)); 2280 default: 2281 return libbpf_err(-EINVAL); 2282 } 2283 } 2284 2285 /* 2286 * Append new BTF_KING_TYPEDEF type with: 2287 * - *name*, non-empty/non-NULL name; 2288 * - *ref_type_id* - referenced type ID, it might not exist yet; 2289 * Returns: 2290 * - >0, type ID of newly added BTF type; 2291 * - <0, on error. 2292 */ 2293 int btf__add_typedef(struct btf *btf, const char *name, int ref_type_id) 2294 { 2295 if (!name || !name[0]) 2296 return libbpf_err(-EINVAL); 2297 2298 return btf_add_ref_kind(btf, BTF_KIND_TYPEDEF, name, ref_type_id); 2299 } 2300 2301 /* 2302 * Append new BTF_KIND_VOLATILE type with: 2303 * - *ref_type_id* - referenced type ID, it might not exist yet; 2304 * Returns: 2305 * - >0, type ID of newly added BTF type; 2306 * - <0, on error. 2307 */ 2308 int btf__add_volatile(struct btf *btf, int ref_type_id) 2309 { 2310 return btf_add_ref_kind(btf, BTF_KIND_VOLATILE, NULL, ref_type_id); 2311 } 2312 2313 /* 2314 * Append new BTF_KIND_CONST type with: 2315 * - *ref_type_id* - referenced type ID, it might not exist yet; 2316 * Returns: 2317 * - >0, type ID of newly added BTF type; 2318 * - <0, on error. 2319 */ 2320 int btf__add_const(struct btf *btf, int ref_type_id) 2321 { 2322 return btf_add_ref_kind(btf, BTF_KIND_CONST, NULL, ref_type_id); 2323 } 2324 2325 /* 2326 * Append new BTF_KIND_RESTRICT type with: 2327 * - *ref_type_id* - referenced type ID, it might not exist yet; 2328 * Returns: 2329 * - >0, type ID of newly added BTF type; 2330 * - <0, on error. 2331 */ 2332 int btf__add_restrict(struct btf *btf, int ref_type_id) 2333 { 2334 return btf_add_ref_kind(btf, BTF_KIND_RESTRICT, NULL, ref_type_id); 2335 } 2336 2337 /* 2338 * Append new BTF_KIND_TYPE_TAG type with: 2339 * - *value*, non-empty/non-NULL tag value; 2340 * - *ref_type_id* - referenced type ID, it might not exist yet; 2341 * Returns: 2342 * - >0, type ID of newly added BTF type; 2343 * - <0, on error. 2344 */ 2345 int btf__add_type_tag(struct btf *btf, const char *value, int ref_type_id) 2346 { 2347 if (!value || !value[0]) 2348 return libbpf_err(-EINVAL); 2349 2350 return btf_add_ref_kind(btf, BTF_KIND_TYPE_TAG, value, ref_type_id); 2351 } 2352 2353 /* 2354 * Append new BTF_KIND_FUNC type with: 2355 * - *name*, non-empty/non-NULL name; 2356 * - *proto_type_id* - FUNC_PROTO's type ID, it might not exist yet; 2357 * Returns: 2358 * - >0, type ID of newly added BTF type; 2359 * - <0, on error. 2360 */ 2361 int btf__add_func(struct btf *btf, const char *name, 2362 enum btf_func_linkage linkage, int proto_type_id) 2363 { 2364 int id; 2365 2366 if (!name || !name[0]) 2367 return libbpf_err(-EINVAL); 2368 if (linkage != BTF_FUNC_STATIC && linkage != BTF_FUNC_GLOBAL && 2369 linkage != BTF_FUNC_EXTERN) 2370 return libbpf_err(-EINVAL); 2371 2372 id = btf_add_ref_kind(btf, BTF_KIND_FUNC, name, proto_type_id); 2373 if (id > 0) { 2374 struct btf_type *t = btf_type_by_id(btf, id); 2375 2376 t->info = btf_type_info(BTF_KIND_FUNC, linkage, 0); 2377 } 2378 return libbpf_err(id); 2379 } 2380 2381 /* 2382 * Append new BTF_KIND_FUNC_PROTO with: 2383 * - *ret_type_id* - type ID for return result of a function. 2384 * 2385 * Function prototype initially has no arguments, but they can be added by 2386 * btf__add_func_param() one by one, immediately after 2387 * btf__add_func_proto() succeeded. 2388 * 2389 * Returns: 2390 * - >0, type ID of newly added BTF type; 2391 * - <0, on error. 2392 */ 2393 int btf__add_func_proto(struct btf *btf, int ret_type_id) 2394 { 2395 struct btf_type *t; 2396 int sz; 2397 2398 if (validate_type_id(ret_type_id)) 2399 return libbpf_err(-EINVAL); 2400 2401 if (btf_ensure_modifiable(btf)) 2402 return libbpf_err(-ENOMEM); 2403 2404 sz = sizeof(struct btf_type); 2405 t = btf_add_type_mem(btf, sz); 2406 if (!t) 2407 return libbpf_err(-ENOMEM); 2408 2409 /* start out with vlen=0; this will be adjusted when adding enum 2410 * values, if necessary 2411 */ 2412 t->name_off = 0; 2413 t->info = btf_type_info(BTF_KIND_FUNC_PROTO, 0, 0); 2414 t->type = ret_type_id; 2415 2416 return btf_commit_type(btf, sz); 2417 } 2418 2419 /* 2420 * Append new function parameter for current FUNC_PROTO type with: 2421 * - *name* - parameter name, can be NULL or empty; 2422 * - *type_id* - type ID describing the type of the parameter. 2423 * Returns: 2424 * - 0, on success; 2425 * - <0, on error. 2426 */ 2427 int btf__add_func_param(struct btf *btf, const char *name, int type_id) 2428 { 2429 struct btf_type *t; 2430 struct btf_param *p; 2431 int sz, name_off = 0; 2432 2433 if (validate_type_id(type_id)) 2434 return libbpf_err(-EINVAL); 2435 2436 /* last type should be BTF_KIND_FUNC_PROTO */ 2437 if (btf->nr_types == 0) 2438 return libbpf_err(-EINVAL); 2439 t = btf_last_type(btf); 2440 if (!btf_is_func_proto(t)) 2441 return libbpf_err(-EINVAL); 2442 2443 /* decompose and invalidate raw data */ 2444 if (btf_ensure_modifiable(btf)) 2445 return libbpf_err(-ENOMEM); 2446 2447 sz = sizeof(struct btf_param); 2448 p = btf_add_type_mem(btf, sz); 2449 if (!p) 2450 return libbpf_err(-ENOMEM); 2451 2452 if (name && name[0]) { 2453 name_off = btf__add_str(btf, name); 2454 if (name_off < 0) 2455 return name_off; 2456 } 2457 2458 p->name_off = name_off; 2459 p->type = type_id; 2460 2461 /* update parent type's vlen */ 2462 t = btf_last_type(btf); 2463 btf_type_inc_vlen(t); 2464 2465 btf->hdr->type_len += sz; 2466 btf->hdr->str_off += sz; 2467 return 0; 2468 } 2469 2470 /* 2471 * Append new BTF_KIND_VAR type with: 2472 * - *name* - non-empty/non-NULL name; 2473 * - *linkage* - variable linkage, one of BTF_VAR_STATIC, 2474 * BTF_VAR_GLOBAL_ALLOCATED, or BTF_VAR_GLOBAL_EXTERN; 2475 * - *type_id* - type ID of the type describing the type of the variable. 2476 * Returns: 2477 * - >0, type ID of newly added BTF type; 2478 * - <0, on error. 2479 */ 2480 int btf__add_var(struct btf *btf, const char *name, int linkage, int type_id) 2481 { 2482 struct btf_type *t; 2483 struct btf_var *v; 2484 int sz, name_off; 2485 2486 /* non-empty name */ 2487 if (!name || !name[0]) 2488 return libbpf_err(-EINVAL); 2489 if (linkage != BTF_VAR_STATIC && linkage != BTF_VAR_GLOBAL_ALLOCATED && 2490 linkage != BTF_VAR_GLOBAL_EXTERN) 2491 return libbpf_err(-EINVAL); 2492 if (validate_type_id(type_id)) 2493 return libbpf_err(-EINVAL); 2494 2495 /* deconstruct BTF, if necessary, and invalidate raw_data */ 2496 if (btf_ensure_modifiable(btf)) 2497 return libbpf_err(-ENOMEM); 2498 2499 sz = sizeof(struct btf_type) + sizeof(struct btf_var); 2500 t = btf_add_type_mem(btf, sz); 2501 if (!t) 2502 return libbpf_err(-ENOMEM); 2503 2504 name_off = btf__add_str(btf, name); 2505 if (name_off < 0) 2506 return name_off; 2507 2508 t->name_off = name_off; 2509 t->info = btf_type_info(BTF_KIND_VAR, 0, 0); 2510 t->type = type_id; 2511 2512 v = btf_var(t); 2513 v->linkage = linkage; 2514 2515 return btf_commit_type(btf, sz); 2516 } 2517 2518 /* 2519 * Append new BTF_KIND_DATASEC type with: 2520 * - *name* - non-empty/non-NULL name; 2521 * - *byte_sz* - data section size, in bytes. 2522 * 2523 * Data section is initially empty. Variables info can be added with 2524 * btf__add_datasec_var_info() calls, after btf__add_datasec() succeeds. 2525 * 2526 * Returns: 2527 * - >0, type ID of newly added BTF type; 2528 * - <0, on error. 2529 */ 2530 int btf__add_datasec(struct btf *btf, const char *name, __u32 byte_sz) 2531 { 2532 struct btf_type *t; 2533 int sz, name_off; 2534 2535 /* non-empty name */ 2536 if (!name || !name[0]) 2537 return libbpf_err(-EINVAL); 2538 2539 if (btf_ensure_modifiable(btf)) 2540 return libbpf_err(-ENOMEM); 2541 2542 sz = sizeof(struct btf_type); 2543 t = btf_add_type_mem(btf, sz); 2544 if (!t) 2545 return libbpf_err(-ENOMEM); 2546 2547 name_off = btf__add_str(btf, name); 2548 if (name_off < 0) 2549 return name_off; 2550 2551 /* start with vlen=0, which will be update as var_secinfos are added */ 2552 t->name_off = name_off; 2553 t->info = btf_type_info(BTF_KIND_DATASEC, 0, 0); 2554 t->size = byte_sz; 2555 2556 return btf_commit_type(btf, sz); 2557 } 2558 2559 /* 2560 * Append new data section variable information entry for current DATASEC type: 2561 * - *var_type_id* - type ID, describing type of the variable; 2562 * - *offset* - variable offset within data section, in bytes; 2563 * - *byte_sz* - variable size, in bytes. 2564 * 2565 * Returns: 2566 * - 0, on success; 2567 * - <0, on error. 2568 */ 2569 int btf__add_datasec_var_info(struct btf *btf, int var_type_id, __u32 offset, __u32 byte_sz) 2570 { 2571 struct btf_type *t; 2572 struct btf_var_secinfo *v; 2573 int sz; 2574 2575 /* last type should be BTF_KIND_DATASEC */ 2576 if (btf->nr_types == 0) 2577 return libbpf_err(-EINVAL); 2578 t = btf_last_type(btf); 2579 if (!btf_is_datasec(t)) 2580 return libbpf_err(-EINVAL); 2581 2582 if (validate_type_id(var_type_id)) 2583 return libbpf_err(-EINVAL); 2584 2585 /* decompose and invalidate raw data */ 2586 if (btf_ensure_modifiable(btf)) 2587 return libbpf_err(-ENOMEM); 2588 2589 sz = sizeof(struct btf_var_secinfo); 2590 v = btf_add_type_mem(btf, sz); 2591 if (!v) 2592 return libbpf_err(-ENOMEM); 2593 2594 v->type = var_type_id; 2595 v->offset = offset; 2596 v->size = byte_sz; 2597 2598 /* update parent type's vlen */ 2599 t = btf_last_type(btf); 2600 btf_type_inc_vlen(t); 2601 2602 btf->hdr->type_len += sz; 2603 btf->hdr->str_off += sz; 2604 return 0; 2605 } 2606 2607 /* 2608 * Append new BTF_KIND_DECL_TAG type with: 2609 * - *value* - non-empty/non-NULL string; 2610 * - *ref_type_id* - referenced type ID, it might not exist yet; 2611 * - *component_idx* - -1 for tagging reference type, otherwise struct/union 2612 * member or function argument index; 2613 * Returns: 2614 * - >0, type ID of newly added BTF type; 2615 * - <0, on error. 2616 */ 2617 int btf__add_decl_tag(struct btf *btf, const char *value, int ref_type_id, 2618 int component_idx) 2619 { 2620 struct btf_type *t; 2621 int sz, value_off; 2622 2623 if (!value || !value[0] || component_idx < -1) 2624 return libbpf_err(-EINVAL); 2625 2626 if (validate_type_id(ref_type_id)) 2627 return libbpf_err(-EINVAL); 2628 2629 if (btf_ensure_modifiable(btf)) 2630 return libbpf_err(-ENOMEM); 2631 2632 sz = sizeof(struct btf_type) + sizeof(struct btf_decl_tag); 2633 t = btf_add_type_mem(btf, sz); 2634 if (!t) 2635 return libbpf_err(-ENOMEM); 2636 2637 value_off = btf__add_str(btf, value); 2638 if (value_off < 0) 2639 return value_off; 2640 2641 t->name_off = value_off; 2642 t->info = btf_type_info(BTF_KIND_DECL_TAG, 0, false); 2643 t->type = ref_type_id; 2644 btf_decl_tag(t)->component_idx = component_idx; 2645 2646 return btf_commit_type(btf, sz); 2647 } 2648 2649 struct btf_ext_sec_setup_param { 2650 __u32 off; 2651 __u32 len; 2652 __u32 min_rec_size; 2653 struct btf_ext_info *ext_info; 2654 const char *desc; 2655 }; 2656 2657 static int btf_ext_setup_info(struct btf_ext *btf_ext, 2658 struct btf_ext_sec_setup_param *ext_sec) 2659 { 2660 const struct btf_ext_info_sec *sinfo; 2661 struct btf_ext_info *ext_info; 2662 __u32 info_left, record_size; 2663 size_t sec_cnt = 0; 2664 /* The start of the info sec (including the __u32 record_size). */ 2665 void *info; 2666 2667 if (ext_sec->len == 0) 2668 return 0; 2669 2670 if (ext_sec->off & 0x03) { 2671 pr_debug(".BTF.ext %s section is not aligned to 4 bytes\n", 2672 ext_sec->desc); 2673 return -EINVAL; 2674 } 2675 2676 info = btf_ext->data + btf_ext->hdr->hdr_len + ext_sec->off; 2677 info_left = ext_sec->len; 2678 2679 if (btf_ext->data + btf_ext->data_size < info + ext_sec->len) { 2680 pr_debug("%s section (off:%u len:%u) is beyond the end of the ELF section .BTF.ext\n", 2681 ext_sec->desc, ext_sec->off, ext_sec->len); 2682 return -EINVAL; 2683 } 2684 2685 /* At least a record size */ 2686 if (info_left < sizeof(__u32)) { 2687 pr_debug(".BTF.ext %s record size not found\n", ext_sec->desc); 2688 return -EINVAL; 2689 } 2690 2691 /* The record size needs to meet the minimum standard */ 2692 record_size = *(__u32 *)info; 2693 if (record_size < ext_sec->min_rec_size || 2694 record_size & 0x03) { 2695 pr_debug("%s section in .BTF.ext has invalid record size %u\n", 2696 ext_sec->desc, record_size); 2697 return -EINVAL; 2698 } 2699 2700 sinfo = info + sizeof(__u32); 2701 info_left -= sizeof(__u32); 2702 2703 /* If no records, return failure now so .BTF.ext won't be used. */ 2704 if (!info_left) { 2705 pr_debug("%s section in .BTF.ext has no records", ext_sec->desc); 2706 return -EINVAL; 2707 } 2708 2709 while (info_left) { 2710 unsigned int sec_hdrlen = sizeof(struct btf_ext_info_sec); 2711 __u64 total_record_size; 2712 __u32 num_records; 2713 2714 if (info_left < sec_hdrlen) { 2715 pr_debug("%s section header is not found in .BTF.ext\n", 2716 ext_sec->desc); 2717 return -EINVAL; 2718 } 2719 2720 num_records = sinfo->num_info; 2721 if (num_records == 0) { 2722 pr_debug("%s section has incorrect num_records in .BTF.ext\n", 2723 ext_sec->desc); 2724 return -EINVAL; 2725 } 2726 2727 total_record_size = sec_hdrlen + (__u64)num_records * record_size; 2728 if (info_left < total_record_size) { 2729 pr_debug("%s section has incorrect num_records in .BTF.ext\n", 2730 ext_sec->desc); 2731 return -EINVAL; 2732 } 2733 2734 info_left -= total_record_size; 2735 sinfo = (void *)sinfo + total_record_size; 2736 sec_cnt++; 2737 } 2738 2739 ext_info = ext_sec->ext_info; 2740 ext_info->len = ext_sec->len - sizeof(__u32); 2741 ext_info->rec_size = record_size; 2742 ext_info->info = info + sizeof(__u32); 2743 ext_info->sec_cnt = sec_cnt; 2744 2745 return 0; 2746 } 2747 2748 static int btf_ext_setup_func_info(struct btf_ext *btf_ext) 2749 { 2750 struct btf_ext_sec_setup_param param = { 2751 .off = btf_ext->hdr->func_info_off, 2752 .len = btf_ext->hdr->func_info_len, 2753 .min_rec_size = sizeof(struct bpf_func_info_min), 2754 .ext_info = &btf_ext->func_info, 2755 .desc = "func_info" 2756 }; 2757 2758 return btf_ext_setup_info(btf_ext, ¶m); 2759 } 2760 2761 static int btf_ext_setup_line_info(struct btf_ext *btf_ext) 2762 { 2763 struct btf_ext_sec_setup_param param = { 2764 .off = btf_ext->hdr->line_info_off, 2765 .len = btf_ext->hdr->line_info_len, 2766 .min_rec_size = sizeof(struct bpf_line_info_min), 2767 .ext_info = &btf_ext->line_info, 2768 .desc = "line_info", 2769 }; 2770 2771 return btf_ext_setup_info(btf_ext, ¶m); 2772 } 2773 2774 static int btf_ext_setup_core_relos(struct btf_ext *btf_ext) 2775 { 2776 struct btf_ext_sec_setup_param param = { 2777 .off = btf_ext->hdr->core_relo_off, 2778 .len = btf_ext->hdr->core_relo_len, 2779 .min_rec_size = sizeof(struct bpf_core_relo), 2780 .ext_info = &btf_ext->core_relo_info, 2781 .desc = "core_relo", 2782 }; 2783 2784 return btf_ext_setup_info(btf_ext, ¶m); 2785 } 2786 2787 static int btf_ext_parse_hdr(__u8 *data, __u32 data_size) 2788 { 2789 const struct btf_ext_header *hdr = (struct btf_ext_header *)data; 2790 2791 if (data_size < offsetofend(struct btf_ext_header, hdr_len) || 2792 data_size < hdr->hdr_len) { 2793 pr_debug("BTF.ext header not found"); 2794 return -EINVAL; 2795 } 2796 2797 if (hdr->magic == bswap_16(BTF_MAGIC)) { 2798 pr_warn("BTF.ext in non-native endianness is not supported\n"); 2799 return -ENOTSUP; 2800 } else if (hdr->magic != BTF_MAGIC) { 2801 pr_debug("Invalid BTF.ext magic:%x\n", hdr->magic); 2802 return -EINVAL; 2803 } 2804 2805 if (hdr->version != BTF_VERSION) { 2806 pr_debug("Unsupported BTF.ext version:%u\n", hdr->version); 2807 return -ENOTSUP; 2808 } 2809 2810 if (hdr->flags) { 2811 pr_debug("Unsupported BTF.ext flags:%x\n", hdr->flags); 2812 return -ENOTSUP; 2813 } 2814 2815 if (data_size == hdr->hdr_len) { 2816 pr_debug("BTF.ext has no data\n"); 2817 return -EINVAL; 2818 } 2819 2820 return 0; 2821 } 2822 2823 void btf_ext__free(struct btf_ext *btf_ext) 2824 { 2825 if (IS_ERR_OR_NULL(btf_ext)) 2826 return; 2827 free(btf_ext->func_info.sec_idxs); 2828 free(btf_ext->line_info.sec_idxs); 2829 free(btf_ext->core_relo_info.sec_idxs); 2830 free(btf_ext->data); 2831 free(btf_ext); 2832 } 2833 2834 struct btf_ext *btf_ext__new(const __u8 *data, __u32 size) 2835 { 2836 struct btf_ext *btf_ext; 2837 int err; 2838 2839 btf_ext = calloc(1, sizeof(struct btf_ext)); 2840 if (!btf_ext) 2841 return libbpf_err_ptr(-ENOMEM); 2842 2843 btf_ext->data_size = size; 2844 btf_ext->data = malloc(size); 2845 if (!btf_ext->data) { 2846 err = -ENOMEM; 2847 goto done; 2848 } 2849 memcpy(btf_ext->data, data, size); 2850 2851 err = btf_ext_parse_hdr(btf_ext->data, size); 2852 if (err) 2853 goto done; 2854 2855 if (btf_ext->hdr->hdr_len < offsetofend(struct btf_ext_header, line_info_len)) { 2856 err = -EINVAL; 2857 goto done; 2858 } 2859 2860 err = btf_ext_setup_func_info(btf_ext); 2861 if (err) 2862 goto done; 2863 2864 err = btf_ext_setup_line_info(btf_ext); 2865 if (err) 2866 goto done; 2867 2868 if (btf_ext->hdr->hdr_len < offsetofend(struct btf_ext_header, core_relo_len)) 2869 goto done; /* skip core relos parsing */ 2870 2871 err = btf_ext_setup_core_relos(btf_ext); 2872 if (err) 2873 goto done; 2874 2875 done: 2876 if (err) { 2877 btf_ext__free(btf_ext); 2878 return libbpf_err_ptr(err); 2879 } 2880 2881 return btf_ext; 2882 } 2883 2884 const void *btf_ext__get_raw_data(const struct btf_ext *btf_ext, __u32 *size) 2885 { 2886 *size = btf_ext->data_size; 2887 return btf_ext->data; 2888 } 2889 2890 struct btf_dedup; 2891 2892 static struct btf_dedup *btf_dedup_new(struct btf *btf, const struct btf_dedup_opts *opts); 2893 static void btf_dedup_free(struct btf_dedup *d); 2894 static int btf_dedup_prep(struct btf_dedup *d); 2895 static int btf_dedup_strings(struct btf_dedup *d); 2896 static int btf_dedup_prim_types(struct btf_dedup *d); 2897 static int btf_dedup_struct_types(struct btf_dedup *d); 2898 static int btf_dedup_ref_types(struct btf_dedup *d); 2899 static int btf_dedup_resolve_fwds(struct btf_dedup *d); 2900 static int btf_dedup_compact_types(struct btf_dedup *d); 2901 static int btf_dedup_remap_types(struct btf_dedup *d); 2902 2903 /* 2904 * Deduplicate BTF types and strings. 2905 * 2906 * BTF dedup algorithm takes as an input `struct btf` representing `.BTF` ELF 2907 * section with all BTF type descriptors and string data. It overwrites that 2908 * memory in-place with deduplicated types and strings without any loss of 2909 * information. If optional `struct btf_ext` representing '.BTF.ext' ELF section 2910 * is provided, all the strings referenced from .BTF.ext section are honored 2911 * and updated to point to the right offsets after deduplication. 2912 * 2913 * If function returns with error, type/string data might be garbled and should 2914 * be discarded. 2915 * 2916 * More verbose and detailed description of both problem btf_dedup is solving, 2917 * as well as solution could be found at: 2918 * https://facebookmicrosites.github.io/bpf/blog/2018/11/14/btf-enhancement.html 2919 * 2920 * Problem description and justification 2921 * ===================================== 2922 * 2923 * BTF type information is typically emitted either as a result of conversion 2924 * from DWARF to BTF or directly by compiler. In both cases, each compilation 2925 * unit contains information about a subset of all the types that are used 2926 * in an application. These subsets are frequently overlapping and contain a lot 2927 * of duplicated information when later concatenated together into a single 2928 * binary. This algorithm ensures that each unique type is represented by single 2929 * BTF type descriptor, greatly reducing resulting size of BTF data. 2930 * 2931 * Compilation unit isolation and subsequent duplication of data is not the only 2932 * problem. The same type hierarchy (e.g., struct and all the type that struct 2933 * references) in different compilation units can be represented in BTF to 2934 * various degrees of completeness (or, rather, incompleteness) due to 2935 * struct/union forward declarations. 2936 * 2937 * Let's take a look at an example, that we'll use to better understand the 2938 * problem (and solution). Suppose we have two compilation units, each using 2939 * same `struct S`, but each of them having incomplete type information about 2940 * struct's fields: 2941 * 2942 * // CU #1: 2943 * struct S; 2944 * struct A { 2945 * int a; 2946 * struct A* self; 2947 * struct S* parent; 2948 * }; 2949 * struct B; 2950 * struct S { 2951 * struct A* a_ptr; 2952 * struct B* b_ptr; 2953 * }; 2954 * 2955 * // CU #2: 2956 * struct S; 2957 * struct A; 2958 * struct B { 2959 * int b; 2960 * struct B* self; 2961 * struct S* parent; 2962 * }; 2963 * struct S { 2964 * struct A* a_ptr; 2965 * struct B* b_ptr; 2966 * }; 2967 * 2968 * In case of CU #1, BTF data will know only that `struct B` exist (but no 2969 * more), but will know the complete type information about `struct A`. While 2970 * for CU #2, it will know full type information about `struct B`, but will 2971 * only know about forward declaration of `struct A` (in BTF terms, it will 2972 * have `BTF_KIND_FWD` type descriptor with name `B`). 2973 * 2974 * This compilation unit isolation means that it's possible that there is no 2975 * single CU with complete type information describing structs `S`, `A`, and 2976 * `B`. Also, we might get tons of duplicated and redundant type information. 2977 * 2978 * Additional complication we need to keep in mind comes from the fact that 2979 * types, in general, can form graphs containing cycles, not just DAGs. 2980 * 2981 * While algorithm does deduplication, it also merges and resolves type 2982 * information (unless disabled throught `struct btf_opts`), whenever possible. 2983 * E.g., in the example above with two compilation units having partial type 2984 * information for structs `A` and `B`, the output of algorithm will emit 2985 * a single copy of each BTF type that describes structs `A`, `B`, and `S` 2986 * (as well as type information for `int` and pointers), as if they were defined 2987 * in a single compilation unit as: 2988 * 2989 * struct A { 2990 * int a; 2991 * struct A* self; 2992 * struct S* parent; 2993 * }; 2994 * struct B { 2995 * int b; 2996 * struct B* self; 2997 * struct S* parent; 2998 * }; 2999 * struct S { 3000 * struct A* a_ptr; 3001 * struct B* b_ptr; 3002 * }; 3003 * 3004 * Algorithm summary 3005 * ================= 3006 * 3007 * Algorithm completes its work in 7 separate passes: 3008 * 3009 * 1. Strings deduplication. 3010 * 2. Primitive types deduplication (int, enum, fwd). 3011 * 3. Struct/union types deduplication. 3012 * 4. Resolve unambiguous forward declarations. 3013 * 5. Reference types deduplication (pointers, typedefs, arrays, funcs, func 3014 * protos, and const/volatile/restrict modifiers). 3015 * 6. Types compaction. 3016 * 7. Types remapping. 3017 * 3018 * Algorithm determines canonical type descriptor, which is a single 3019 * representative type for each truly unique type. This canonical type is the 3020 * one that will go into final deduplicated BTF type information. For 3021 * struct/unions, it is also the type that algorithm will merge additional type 3022 * information into (while resolving FWDs), as it discovers it from data in 3023 * other CUs. Each input BTF type eventually gets either mapped to itself, if 3024 * that type is canonical, or to some other type, if that type is equivalent 3025 * and was chosen as canonical representative. This mapping is stored in 3026 * `btf_dedup->map` array. This map is also used to record STRUCT/UNION that 3027 * FWD type got resolved to. 3028 * 3029 * To facilitate fast discovery of canonical types, we also maintain canonical 3030 * index (`btf_dedup->dedup_table`), which maps type descriptor's signature hash 3031 * (i.e., hashed kind, name, size, fields, etc) into a list of canonical types 3032 * that match that signature. With sufficiently good choice of type signature 3033 * hashing function, we can limit number of canonical types for each unique type 3034 * signature to a very small number, allowing to find canonical type for any 3035 * duplicated type very quickly. 3036 * 3037 * Struct/union deduplication is the most critical part and algorithm for 3038 * deduplicating structs/unions is described in greater details in comments for 3039 * `btf_dedup_is_equiv` function. 3040 */ 3041 int btf__dedup(struct btf *btf, const struct btf_dedup_opts *opts) 3042 { 3043 struct btf_dedup *d; 3044 int err; 3045 3046 if (!OPTS_VALID(opts, btf_dedup_opts)) 3047 return libbpf_err(-EINVAL); 3048 3049 d = btf_dedup_new(btf, opts); 3050 if (IS_ERR(d)) { 3051 pr_debug("btf_dedup_new failed: %ld", PTR_ERR(d)); 3052 return libbpf_err(-EINVAL); 3053 } 3054 3055 if (btf_ensure_modifiable(btf)) { 3056 err = -ENOMEM; 3057 goto done; 3058 } 3059 3060 err = btf_dedup_prep(d); 3061 if (err) { 3062 pr_debug("btf_dedup_prep failed:%d\n", err); 3063 goto done; 3064 } 3065 err = btf_dedup_strings(d); 3066 if (err < 0) { 3067 pr_debug("btf_dedup_strings failed:%d\n", err); 3068 goto done; 3069 } 3070 err = btf_dedup_prim_types(d); 3071 if (err < 0) { 3072 pr_debug("btf_dedup_prim_types failed:%d\n", err); 3073 goto done; 3074 } 3075 err = btf_dedup_struct_types(d); 3076 if (err < 0) { 3077 pr_debug("btf_dedup_struct_types failed:%d\n", err); 3078 goto done; 3079 } 3080 err = btf_dedup_resolve_fwds(d); 3081 if (err < 0) { 3082 pr_debug("btf_dedup_resolve_fwds failed:%d\n", err); 3083 goto done; 3084 } 3085 err = btf_dedup_ref_types(d); 3086 if (err < 0) { 3087 pr_debug("btf_dedup_ref_types failed:%d\n", err); 3088 goto done; 3089 } 3090 err = btf_dedup_compact_types(d); 3091 if (err < 0) { 3092 pr_debug("btf_dedup_compact_types failed:%d\n", err); 3093 goto done; 3094 } 3095 err = btf_dedup_remap_types(d); 3096 if (err < 0) { 3097 pr_debug("btf_dedup_remap_types failed:%d\n", err); 3098 goto done; 3099 } 3100 3101 done: 3102 btf_dedup_free(d); 3103 return libbpf_err(err); 3104 } 3105 3106 #define BTF_UNPROCESSED_ID ((__u32)-1) 3107 #define BTF_IN_PROGRESS_ID ((__u32)-2) 3108 3109 struct btf_dedup { 3110 /* .BTF section to be deduped in-place */ 3111 struct btf *btf; 3112 /* 3113 * Optional .BTF.ext section. When provided, any strings referenced 3114 * from it will be taken into account when deduping strings 3115 */ 3116 struct btf_ext *btf_ext; 3117 /* 3118 * This is a map from any type's signature hash to a list of possible 3119 * canonical representative type candidates. Hash collisions are 3120 * ignored, so even types of various kinds can share same list of 3121 * candidates, which is fine because we rely on subsequent 3122 * btf_xxx_equal() checks to authoritatively verify type equality. 3123 */ 3124 struct hashmap *dedup_table; 3125 /* Canonical types map */ 3126 __u32 *map; 3127 /* Hypothetical mapping, used during type graph equivalence checks */ 3128 __u32 *hypot_map; 3129 __u32 *hypot_list; 3130 size_t hypot_cnt; 3131 size_t hypot_cap; 3132 /* Whether hypothetical mapping, if successful, would need to adjust 3133 * already canonicalized types (due to a new forward declaration to 3134 * concrete type resolution). In such case, during split BTF dedup 3135 * candidate type would still be considered as different, because base 3136 * BTF is considered to be immutable. 3137 */ 3138 bool hypot_adjust_canon; 3139 /* Various option modifying behavior of algorithm */ 3140 struct btf_dedup_opts opts; 3141 /* temporary strings deduplication state */ 3142 struct strset *strs_set; 3143 }; 3144 3145 static long hash_combine(long h, long value) 3146 { 3147 return h * 31 + value; 3148 } 3149 3150 #define for_each_dedup_cand(d, node, hash) \ 3151 hashmap__for_each_key_entry(d->dedup_table, node, hash) 3152 3153 static int btf_dedup_table_add(struct btf_dedup *d, long hash, __u32 type_id) 3154 { 3155 return hashmap__append(d->dedup_table, hash, type_id); 3156 } 3157 3158 static int btf_dedup_hypot_map_add(struct btf_dedup *d, 3159 __u32 from_id, __u32 to_id) 3160 { 3161 if (d->hypot_cnt == d->hypot_cap) { 3162 __u32 *new_list; 3163 3164 d->hypot_cap += max((size_t)16, d->hypot_cap / 2); 3165 new_list = libbpf_reallocarray(d->hypot_list, d->hypot_cap, sizeof(__u32)); 3166 if (!new_list) 3167 return -ENOMEM; 3168 d->hypot_list = new_list; 3169 } 3170 d->hypot_list[d->hypot_cnt++] = from_id; 3171 d->hypot_map[from_id] = to_id; 3172 return 0; 3173 } 3174 3175 static void btf_dedup_clear_hypot_map(struct btf_dedup *d) 3176 { 3177 int i; 3178 3179 for (i = 0; i < d->hypot_cnt; i++) 3180 d->hypot_map[d->hypot_list[i]] = BTF_UNPROCESSED_ID; 3181 d->hypot_cnt = 0; 3182 d->hypot_adjust_canon = false; 3183 } 3184 3185 static void btf_dedup_free(struct btf_dedup *d) 3186 { 3187 hashmap__free(d->dedup_table); 3188 d->dedup_table = NULL; 3189 3190 free(d->map); 3191 d->map = NULL; 3192 3193 free(d->hypot_map); 3194 d->hypot_map = NULL; 3195 3196 free(d->hypot_list); 3197 d->hypot_list = NULL; 3198 3199 free(d); 3200 } 3201 3202 static size_t btf_dedup_identity_hash_fn(long key, void *ctx) 3203 { 3204 return key; 3205 } 3206 3207 static size_t btf_dedup_collision_hash_fn(long key, void *ctx) 3208 { 3209 return 0; 3210 } 3211 3212 static bool btf_dedup_equal_fn(long k1, long k2, void *ctx) 3213 { 3214 return k1 == k2; 3215 } 3216 3217 static struct btf_dedup *btf_dedup_new(struct btf *btf, const struct btf_dedup_opts *opts) 3218 { 3219 struct btf_dedup *d = calloc(1, sizeof(struct btf_dedup)); 3220 hashmap_hash_fn hash_fn = btf_dedup_identity_hash_fn; 3221 int i, err = 0, type_cnt; 3222 3223 if (!d) 3224 return ERR_PTR(-ENOMEM); 3225 3226 if (OPTS_GET(opts, force_collisions, false)) 3227 hash_fn = btf_dedup_collision_hash_fn; 3228 3229 d->btf = btf; 3230 d->btf_ext = OPTS_GET(opts, btf_ext, NULL); 3231 3232 d->dedup_table = hashmap__new(hash_fn, btf_dedup_equal_fn, NULL); 3233 if (IS_ERR(d->dedup_table)) { 3234 err = PTR_ERR(d->dedup_table); 3235 d->dedup_table = NULL; 3236 goto done; 3237 } 3238 3239 type_cnt = btf__type_cnt(btf); 3240 d->map = malloc(sizeof(__u32) * type_cnt); 3241 if (!d->map) { 3242 err = -ENOMEM; 3243 goto done; 3244 } 3245 /* special BTF "void" type is made canonical immediately */ 3246 d->map[0] = 0; 3247 for (i = 1; i < type_cnt; i++) { 3248 struct btf_type *t = btf_type_by_id(d->btf, i); 3249 3250 /* VAR and DATASEC are never deduped and are self-canonical */ 3251 if (btf_is_var(t) || btf_is_datasec(t)) 3252 d->map[i] = i; 3253 else 3254 d->map[i] = BTF_UNPROCESSED_ID; 3255 } 3256 3257 d->hypot_map = malloc(sizeof(__u32) * type_cnt); 3258 if (!d->hypot_map) { 3259 err = -ENOMEM; 3260 goto done; 3261 } 3262 for (i = 0; i < type_cnt; i++) 3263 d->hypot_map[i] = BTF_UNPROCESSED_ID; 3264 3265 done: 3266 if (err) { 3267 btf_dedup_free(d); 3268 return ERR_PTR(err); 3269 } 3270 3271 return d; 3272 } 3273 3274 /* 3275 * Iterate over all possible places in .BTF and .BTF.ext that can reference 3276 * string and pass pointer to it to a provided callback `fn`. 3277 */ 3278 static int btf_for_each_str_off(struct btf_dedup *d, str_off_visit_fn fn, void *ctx) 3279 { 3280 int i, r; 3281 3282 for (i = 0; i < d->btf->nr_types; i++) { 3283 struct btf_type *t = btf_type_by_id(d->btf, d->btf->start_id + i); 3284 3285 r = btf_type_visit_str_offs(t, fn, ctx); 3286 if (r) 3287 return r; 3288 } 3289 3290 if (!d->btf_ext) 3291 return 0; 3292 3293 r = btf_ext_visit_str_offs(d->btf_ext, fn, ctx); 3294 if (r) 3295 return r; 3296 3297 return 0; 3298 } 3299 3300 static int strs_dedup_remap_str_off(__u32 *str_off_ptr, void *ctx) 3301 { 3302 struct btf_dedup *d = ctx; 3303 __u32 str_off = *str_off_ptr; 3304 const char *s; 3305 int off, err; 3306 3307 /* don't touch empty string or string in main BTF */ 3308 if (str_off == 0 || str_off < d->btf->start_str_off) 3309 return 0; 3310 3311 s = btf__str_by_offset(d->btf, str_off); 3312 if (d->btf->base_btf) { 3313 err = btf__find_str(d->btf->base_btf, s); 3314 if (err >= 0) { 3315 *str_off_ptr = err; 3316 return 0; 3317 } 3318 if (err != -ENOENT) 3319 return err; 3320 } 3321 3322 off = strset__add_str(d->strs_set, s); 3323 if (off < 0) 3324 return off; 3325 3326 *str_off_ptr = d->btf->start_str_off + off; 3327 return 0; 3328 } 3329 3330 /* 3331 * Dedup string and filter out those that are not referenced from either .BTF 3332 * or .BTF.ext (if provided) sections. 3333 * 3334 * This is done by building index of all strings in BTF's string section, 3335 * then iterating over all entities that can reference strings (e.g., type 3336 * names, struct field names, .BTF.ext line info, etc) and marking corresponding 3337 * strings as used. After that all used strings are deduped and compacted into 3338 * sequential blob of memory and new offsets are calculated. Then all the string 3339 * references are iterated again and rewritten using new offsets. 3340 */ 3341 static int btf_dedup_strings(struct btf_dedup *d) 3342 { 3343 int err; 3344 3345 if (d->btf->strs_deduped) 3346 return 0; 3347 3348 d->strs_set = strset__new(BTF_MAX_STR_OFFSET, NULL, 0); 3349 if (IS_ERR(d->strs_set)) { 3350 err = PTR_ERR(d->strs_set); 3351 goto err_out; 3352 } 3353 3354 if (!d->btf->base_btf) { 3355 /* insert empty string; we won't be looking it up during strings 3356 * dedup, but it's good to have it for generic BTF string lookups 3357 */ 3358 err = strset__add_str(d->strs_set, ""); 3359 if (err < 0) 3360 goto err_out; 3361 } 3362 3363 /* remap string offsets */ 3364 err = btf_for_each_str_off(d, strs_dedup_remap_str_off, d); 3365 if (err) 3366 goto err_out; 3367 3368 /* replace BTF string data and hash with deduped ones */ 3369 strset__free(d->btf->strs_set); 3370 d->btf->hdr->str_len = strset__data_size(d->strs_set); 3371 d->btf->strs_set = d->strs_set; 3372 d->strs_set = NULL; 3373 d->btf->strs_deduped = true; 3374 return 0; 3375 3376 err_out: 3377 strset__free(d->strs_set); 3378 d->strs_set = NULL; 3379 3380 return err; 3381 } 3382 3383 static long btf_hash_common(struct btf_type *t) 3384 { 3385 long h; 3386 3387 h = hash_combine(0, t->name_off); 3388 h = hash_combine(h, t->info); 3389 h = hash_combine(h, t->size); 3390 return h; 3391 } 3392 3393 static bool btf_equal_common(struct btf_type *t1, struct btf_type *t2) 3394 { 3395 return t1->name_off == t2->name_off && 3396 t1->info == t2->info && 3397 t1->size == t2->size; 3398 } 3399 3400 /* Calculate type signature hash of INT or TAG. */ 3401 static long btf_hash_int_decl_tag(struct btf_type *t) 3402 { 3403 __u32 info = *(__u32 *)(t + 1); 3404 long h; 3405 3406 h = btf_hash_common(t); 3407 h = hash_combine(h, info); 3408 return h; 3409 } 3410 3411 /* Check structural equality of two INTs or TAGs. */ 3412 static bool btf_equal_int_tag(struct btf_type *t1, struct btf_type *t2) 3413 { 3414 __u32 info1, info2; 3415 3416 if (!btf_equal_common(t1, t2)) 3417 return false; 3418 info1 = *(__u32 *)(t1 + 1); 3419 info2 = *(__u32 *)(t2 + 1); 3420 return info1 == info2; 3421 } 3422 3423 /* Calculate type signature hash of ENUM/ENUM64. */ 3424 static long btf_hash_enum(struct btf_type *t) 3425 { 3426 long h; 3427 3428 /* don't hash vlen, enum members and size to support enum fwd resolving */ 3429 h = hash_combine(0, t->name_off); 3430 return h; 3431 } 3432 3433 static bool btf_equal_enum_members(struct btf_type *t1, struct btf_type *t2) 3434 { 3435 const struct btf_enum *m1, *m2; 3436 __u16 vlen; 3437 int i; 3438 3439 vlen = btf_vlen(t1); 3440 m1 = btf_enum(t1); 3441 m2 = btf_enum(t2); 3442 for (i = 0; i < vlen; i++) { 3443 if (m1->name_off != m2->name_off || m1->val != m2->val) 3444 return false; 3445 m1++; 3446 m2++; 3447 } 3448 return true; 3449 } 3450 3451 static bool btf_equal_enum64_members(struct btf_type *t1, struct btf_type *t2) 3452 { 3453 const struct btf_enum64 *m1, *m2; 3454 __u16 vlen; 3455 int i; 3456 3457 vlen = btf_vlen(t1); 3458 m1 = btf_enum64(t1); 3459 m2 = btf_enum64(t2); 3460 for (i = 0; i < vlen; i++) { 3461 if (m1->name_off != m2->name_off || m1->val_lo32 != m2->val_lo32 || 3462 m1->val_hi32 != m2->val_hi32) 3463 return false; 3464 m1++; 3465 m2++; 3466 } 3467 return true; 3468 } 3469 3470 /* Check structural equality of two ENUMs or ENUM64s. */ 3471 static bool btf_equal_enum(struct btf_type *t1, struct btf_type *t2) 3472 { 3473 if (!btf_equal_common(t1, t2)) 3474 return false; 3475 3476 /* t1 & t2 kinds are identical because of btf_equal_common */ 3477 if (btf_kind(t1) == BTF_KIND_ENUM) 3478 return btf_equal_enum_members(t1, t2); 3479 else 3480 return btf_equal_enum64_members(t1, t2); 3481 } 3482 3483 static inline bool btf_is_enum_fwd(struct btf_type *t) 3484 { 3485 return btf_is_any_enum(t) && btf_vlen(t) == 0; 3486 } 3487 3488 static bool btf_compat_enum(struct btf_type *t1, struct btf_type *t2) 3489 { 3490 if (!btf_is_enum_fwd(t1) && !btf_is_enum_fwd(t2)) 3491 return btf_equal_enum(t1, t2); 3492 /* At this point either t1 or t2 or both are forward declarations, thus: 3493 * - skip comparing vlen because it is zero for forward declarations; 3494 * - skip comparing size to allow enum forward declarations 3495 * to be compatible with enum64 full declarations; 3496 * - skip comparing kind for the same reason. 3497 */ 3498 return t1->name_off == t2->name_off && 3499 btf_is_any_enum(t1) && btf_is_any_enum(t2); 3500 } 3501 3502 /* 3503 * Calculate type signature hash of STRUCT/UNION, ignoring referenced type IDs, 3504 * as referenced type IDs equivalence is established separately during type 3505 * graph equivalence check algorithm. 3506 */ 3507 static long btf_hash_struct(struct btf_type *t) 3508 { 3509 const struct btf_member *member = btf_members(t); 3510 __u32 vlen = btf_vlen(t); 3511 long h = btf_hash_common(t); 3512 int i; 3513 3514 for (i = 0; i < vlen; i++) { 3515 h = hash_combine(h, member->name_off); 3516 h = hash_combine(h, member->offset); 3517 /* no hashing of referenced type ID, it can be unresolved yet */ 3518 member++; 3519 } 3520 return h; 3521 } 3522 3523 /* 3524 * Check structural compatibility of two STRUCTs/UNIONs, ignoring referenced 3525 * type IDs. This check is performed during type graph equivalence check and 3526 * referenced types equivalence is checked separately. 3527 */ 3528 static bool btf_shallow_equal_struct(struct btf_type *t1, struct btf_type *t2) 3529 { 3530 const struct btf_member *m1, *m2; 3531 __u16 vlen; 3532 int i; 3533 3534 if (!btf_equal_common(t1, t2)) 3535 return false; 3536 3537 vlen = btf_vlen(t1); 3538 m1 = btf_members(t1); 3539 m2 = btf_members(t2); 3540 for (i = 0; i < vlen; i++) { 3541 if (m1->name_off != m2->name_off || m1->offset != m2->offset) 3542 return false; 3543 m1++; 3544 m2++; 3545 } 3546 return true; 3547 } 3548 3549 /* 3550 * Calculate type signature hash of ARRAY, including referenced type IDs, 3551 * under assumption that they were already resolved to canonical type IDs and 3552 * are not going to change. 3553 */ 3554 static long btf_hash_array(struct btf_type *t) 3555 { 3556 const struct btf_array *info = btf_array(t); 3557 long h = btf_hash_common(t); 3558 3559 h = hash_combine(h, info->type); 3560 h = hash_combine(h, info->index_type); 3561 h = hash_combine(h, info->nelems); 3562 return h; 3563 } 3564 3565 /* 3566 * Check exact equality of two ARRAYs, taking into account referenced 3567 * type IDs, under assumption that they were already resolved to canonical 3568 * type IDs and are not going to change. 3569 * This function is called during reference types deduplication to compare 3570 * ARRAY to potential canonical representative. 3571 */ 3572 static bool btf_equal_array(struct btf_type *t1, struct btf_type *t2) 3573 { 3574 const struct btf_array *info1, *info2; 3575 3576 if (!btf_equal_common(t1, t2)) 3577 return false; 3578 3579 info1 = btf_array(t1); 3580 info2 = btf_array(t2); 3581 return info1->type == info2->type && 3582 info1->index_type == info2->index_type && 3583 info1->nelems == info2->nelems; 3584 } 3585 3586 /* 3587 * Check structural compatibility of two ARRAYs, ignoring referenced type 3588 * IDs. This check is performed during type graph equivalence check and 3589 * referenced types equivalence is checked separately. 3590 */ 3591 static bool btf_compat_array(struct btf_type *t1, struct btf_type *t2) 3592 { 3593 if (!btf_equal_common(t1, t2)) 3594 return false; 3595 3596 return btf_array(t1)->nelems == btf_array(t2)->nelems; 3597 } 3598 3599 /* 3600 * Calculate type signature hash of FUNC_PROTO, including referenced type IDs, 3601 * under assumption that they were already resolved to canonical type IDs and 3602 * are not going to change. 3603 */ 3604 static long btf_hash_fnproto(struct btf_type *t) 3605 { 3606 const struct btf_param *member = btf_params(t); 3607 __u16 vlen = btf_vlen(t); 3608 long h = btf_hash_common(t); 3609 int i; 3610 3611 for (i = 0; i < vlen; i++) { 3612 h = hash_combine(h, member->name_off); 3613 h = hash_combine(h, member->type); 3614 member++; 3615 } 3616 return h; 3617 } 3618 3619 /* 3620 * Check exact equality of two FUNC_PROTOs, taking into account referenced 3621 * type IDs, under assumption that they were already resolved to canonical 3622 * type IDs and are not going to change. 3623 * This function is called during reference types deduplication to compare 3624 * FUNC_PROTO to potential canonical representative. 3625 */ 3626 static bool btf_equal_fnproto(struct btf_type *t1, struct btf_type *t2) 3627 { 3628 const struct btf_param *m1, *m2; 3629 __u16 vlen; 3630 int i; 3631 3632 if (!btf_equal_common(t1, t2)) 3633 return false; 3634 3635 vlen = btf_vlen(t1); 3636 m1 = btf_params(t1); 3637 m2 = btf_params(t2); 3638 for (i = 0; i < vlen; i++) { 3639 if (m1->name_off != m2->name_off || m1->type != m2->type) 3640 return false; 3641 m1++; 3642 m2++; 3643 } 3644 return true; 3645 } 3646 3647 /* 3648 * Check structural compatibility of two FUNC_PROTOs, ignoring referenced type 3649 * IDs. This check is performed during type graph equivalence check and 3650 * referenced types equivalence is checked separately. 3651 */ 3652 static bool btf_compat_fnproto(struct btf_type *t1, struct btf_type *t2) 3653 { 3654 const struct btf_param *m1, *m2; 3655 __u16 vlen; 3656 int i; 3657 3658 /* skip return type ID */ 3659 if (t1->name_off != t2->name_off || t1->info != t2->info) 3660 return false; 3661 3662 vlen = btf_vlen(t1); 3663 m1 = btf_params(t1); 3664 m2 = btf_params(t2); 3665 for (i = 0; i < vlen; i++) { 3666 if (m1->name_off != m2->name_off) 3667 return false; 3668 m1++; 3669 m2++; 3670 } 3671 return true; 3672 } 3673 3674 /* Prepare split BTF for deduplication by calculating hashes of base BTF's 3675 * types and initializing the rest of the state (canonical type mapping) for 3676 * the fixed base BTF part. 3677 */ 3678 static int btf_dedup_prep(struct btf_dedup *d) 3679 { 3680 struct btf_type *t; 3681 int type_id; 3682 long h; 3683 3684 if (!d->btf->base_btf) 3685 return 0; 3686 3687 for (type_id = 1; type_id < d->btf->start_id; type_id++) { 3688 t = btf_type_by_id(d->btf, type_id); 3689 3690 /* all base BTF types are self-canonical by definition */ 3691 d->map[type_id] = type_id; 3692 3693 switch (btf_kind(t)) { 3694 case BTF_KIND_VAR: 3695 case BTF_KIND_DATASEC: 3696 /* VAR and DATASEC are never hash/deduplicated */ 3697 continue; 3698 case BTF_KIND_CONST: 3699 case BTF_KIND_VOLATILE: 3700 case BTF_KIND_RESTRICT: 3701 case BTF_KIND_PTR: 3702 case BTF_KIND_FWD: 3703 case BTF_KIND_TYPEDEF: 3704 case BTF_KIND_FUNC: 3705 case BTF_KIND_FLOAT: 3706 case BTF_KIND_TYPE_TAG: 3707 h = btf_hash_common(t); 3708 break; 3709 case BTF_KIND_INT: 3710 case BTF_KIND_DECL_TAG: 3711 h = btf_hash_int_decl_tag(t); 3712 break; 3713 case BTF_KIND_ENUM: 3714 case BTF_KIND_ENUM64: 3715 h = btf_hash_enum(t); 3716 break; 3717 case BTF_KIND_STRUCT: 3718 case BTF_KIND_UNION: 3719 h = btf_hash_struct(t); 3720 break; 3721 case BTF_KIND_ARRAY: 3722 h = btf_hash_array(t); 3723 break; 3724 case BTF_KIND_FUNC_PROTO: 3725 h = btf_hash_fnproto(t); 3726 break; 3727 default: 3728 pr_debug("unknown kind %d for type [%d]\n", btf_kind(t), type_id); 3729 return -EINVAL; 3730 } 3731 if (btf_dedup_table_add(d, h, type_id)) 3732 return -ENOMEM; 3733 } 3734 3735 return 0; 3736 } 3737 3738 /* 3739 * Deduplicate primitive types, that can't reference other types, by calculating 3740 * their type signature hash and comparing them with any possible canonical 3741 * candidate. If no canonical candidate matches, type itself is marked as 3742 * canonical and is added into `btf_dedup->dedup_table` as another candidate. 3743 */ 3744 static int btf_dedup_prim_type(struct btf_dedup *d, __u32 type_id) 3745 { 3746 struct btf_type *t = btf_type_by_id(d->btf, type_id); 3747 struct hashmap_entry *hash_entry; 3748 struct btf_type *cand; 3749 /* if we don't find equivalent type, then we are canonical */ 3750 __u32 new_id = type_id; 3751 __u32 cand_id; 3752 long h; 3753 3754 switch (btf_kind(t)) { 3755 case BTF_KIND_CONST: 3756 case BTF_KIND_VOLATILE: 3757 case BTF_KIND_RESTRICT: 3758 case BTF_KIND_PTR: 3759 case BTF_KIND_TYPEDEF: 3760 case BTF_KIND_ARRAY: 3761 case BTF_KIND_STRUCT: 3762 case BTF_KIND_UNION: 3763 case BTF_KIND_FUNC: 3764 case BTF_KIND_FUNC_PROTO: 3765 case BTF_KIND_VAR: 3766 case BTF_KIND_DATASEC: 3767 case BTF_KIND_DECL_TAG: 3768 case BTF_KIND_TYPE_TAG: 3769 return 0; 3770 3771 case BTF_KIND_INT: 3772 h = btf_hash_int_decl_tag(t); 3773 for_each_dedup_cand(d, hash_entry, h) { 3774 cand_id = hash_entry->value; 3775 cand = btf_type_by_id(d->btf, cand_id); 3776 if (btf_equal_int_tag(t, cand)) { 3777 new_id = cand_id; 3778 break; 3779 } 3780 } 3781 break; 3782 3783 case BTF_KIND_ENUM: 3784 case BTF_KIND_ENUM64: 3785 h = btf_hash_enum(t); 3786 for_each_dedup_cand(d, hash_entry, h) { 3787 cand_id = hash_entry->value; 3788 cand = btf_type_by_id(d->btf, cand_id); 3789 if (btf_equal_enum(t, cand)) { 3790 new_id = cand_id; 3791 break; 3792 } 3793 if (btf_compat_enum(t, cand)) { 3794 if (btf_is_enum_fwd(t)) { 3795 /* resolve fwd to full enum */ 3796 new_id = cand_id; 3797 break; 3798 } 3799 /* resolve canonical enum fwd to full enum */ 3800 d->map[cand_id] = type_id; 3801 } 3802 } 3803 break; 3804 3805 case BTF_KIND_FWD: 3806 case BTF_KIND_FLOAT: 3807 h = btf_hash_common(t); 3808 for_each_dedup_cand(d, hash_entry, h) { 3809 cand_id = hash_entry->value; 3810 cand = btf_type_by_id(d->btf, cand_id); 3811 if (btf_equal_common(t, cand)) { 3812 new_id = cand_id; 3813 break; 3814 } 3815 } 3816 break; 3817 3818 default: 3819 return -EINVAL; 3820 } 3821 3822 d->map[type_id] = new_id; 3823 if (type_id == new_id && btf_dedup_table_add(d, h, type_id)) 3824 return -ENOMEM; 3825 3826 return 0; 3827 } 3828 3829 static int btf_dedup_prim_types(struct btf_dedup *d) 3830 { 3831 int i, err; 3832 3833 for (i = 0; i < d->btf->nr_types; i++) { 3834 err = btf_dedup_prim_type(d, d->btf->start_id + i); 3835 if (err) 3836 return err; 3837 } 3838 return 0; 3839 } 3840 3841 /* 3842 * Check whether type is already mapped into canonical one (could be to itself). 3843 */ 3844 static inline bool is_type_mapped(struct btf_dedup *d, uint32_t type_id) 3845 { 3846 return d->map[type_id] <= BTF_MAX_NR_TYPES; 3847 } 3848 3849 /* 3850 * Resolve type ID into its canonical type ID, if any; otherwise return original 3851 * type ID. If type is FWD and is resolved into STRUCT/UNION already, follow 3852 * STRUCT/UNION link and resolve it into canonical type ID as well. 3853 */ 3854 static inline __u32 resolve_type_id(struct btf_dedup *d, __u32 type_id) 3855 { 3856 while (is_type_mapped(d, type_id) && d->map[type_id] != type_id) 3857 type_id = d->map[type_id]; 3858 return type_id; 3859 } 3860 3861 /* 3862 * Resolve FWD to underlying STRUCT/UNION, if any; otherwise return original 3863 * type ID. 3864 */ 3865 static uint32_t resolve_fwd_id(struct btf_dedup *d, uint32_t type_id) 3866 { 3867 __u32 orig_type_id = type_id; 3868 3869 if (!btf_is_fwd(btf__type_by_id(d->btf, type_id))) 3870 return type_id; 3871 3872 while (is_type_mapped(d, type_id) && d->map[type_id] != type_id) 3873 type_id = d->map[type_id]; 3874 3875 if (!btf_is_fwd(btf__type_by_id(d->btf, type_id))) 3876 return type_id; 3877 3878 return orig_type_id; 3879 } 3880 3881 3882 static inline __u16 btf_fwd_kind(struct btf_type *t) 3883 { 3884 return btf_kflag(t) ? BTF_KIND_UNION : BTF_KIND_STRUCT; 3885 } 3886 3887 /* Check if given two types are identical ARRAY definitions */ 3888 static bool btf_dedup_identical_arrays(struct btf_dedup *d, __u32 id1, __u32 id2) 3889 { 3890 struct btf_type *t1, *t2; 3891 3892 t1 = btf_type_by_id(d->btf, id1); 3893 t2 = btf_type_by_id(d->btf, id2); 3894 if (!btf_is_array(t1) || !btf_is_array(t2)) 3895 return false; 3896 3897 return btf_equal_array(t1, t2); 3898 } 3899 3900 /* Check if given two types are identical STRUCT/UNION definitions */ 3901 static bool btf_dedup_identical_structs(struct btf_dedup *d, __u32 id1, __u32 id2) 3902 { 3903 const struct btf_member *m1, *m2; 3904 struct btf_type *t1, *t2; 3905 int n, i; 3906 3907 t1 = btf_type_by_id(d->btf, id1); 3908 t2 = btf_type_by_id(d->btf, id2); 3909 3910 if (!btf_is_composite(t1) || btf_kind(t1) != btf_kind(t2)) 3911 return false; 3912 3913 if (!btf_shallow_equal_struct(t1, t2)) 3914 return false; 3915 3916 m1 = btf_members(t1); 3917 m2 = btf_members(t2); 3918 for (i = 0, n = btf_vlen(t1); i < n; i++, m1++, m2++) { 3919 if (m1->type != m2->type && 3920 !btf_dedup_identical_arrays(d, m1->type, m2->type) && 3921 !btf_dedup_identical_structs(d, m1->type, m2->type)) 3922 return false; 3923 } 3924 return true; 3925 } 3926 3927 /* 3928 * Check equivalence of BTF type graph formed by candidate struct/union (we'll 3929 * call it "candidate graph" in this description for brevity) to a type graph 3930 * formed by (potential) canonical struct/union ("canonical graph" for brevity 3931 * here, though keep in mind that not all types in canonical graph are 3932 * necessarily canonical representatives themselves, some of them might be 3933 * duplicates or its uniqueness might not have been established yet). 3934 * Returns: 3935 * - >0, if type graphs are equivalent; 3936 * - 0, if not equivalent; 3937 * - <0, on error. 3938 * 3939 * Algorithm performs side-by-side DFS traversal of both type graphs and checks 3940 * equivalence of BTF types at each step. If at any point BTF types in candidate 3941 * and canonical graphs are not compatible structurally, whole graphs are 3942 * incompatible. If types are structurally equivalent (i.e., all information 3943 * except referenced type IDs is exactly the same), a mapping from `canon_id` to 3944 * a `cand_id` is recored in hypothetical mapping (`btf_dedup->hypot_map`). 3945 * If a type references other types, then those referenced types are checked 3946 * for equivalence recursively. 3947 * 3948 * During DFS traversal, if we find that for current `canon_id` type we 3949 * already have some mapping in hypothetical map, we check for two possible 3950 * situations: 3951 * - `canon_id` is mapped to exactly the same type as `cand_id`. This will 3952 * happen when type graphs have cycles. In this case we assume those two 3953 * types are equivalent. 3954 * - `canon_id` is mapped to different type. This is contradiction in our 3955 * hypothetical mapping, because same graph in canonical graph corresponds 3956 * to two different types in candidate graph, which for equivalent type 3957 * graphs shouldn't happen. This condition terminates equivalence check 3958 * with negative result. 3959 * 3960 * If type graphs traversal exhausts types to check and find no contradiction, 3961 * then type graphs are equivalent. 3962 * 3963 * When checking types for equivalence, there is one special case: FWD types. 3964 * If FWD type resolution is allowed and one of the types (either from canonical 3965 * or candidate graph) is FWD and other is STRUCT/UNION (depending on FWD's kind 3966 * flag) and their names match, hypothetical mapping is updated to point from 3967 * FWD to STRUCT/UNION. If graphs will be determined as equivalent successfully, 3968 * this mapping will be used to record FWD -> STRUCT/UNION mapping permanently. 3969 * 3970 * Technically, this could lead to incorrect FWD to STRUCT/UNION resolution, 3971 * if there are two exactly named (or anonymous) structs/unions that are 3972 * compatible structurally, one of which has FWD field, while other is concrete 3973 * STRUCT/UNION, but according to C sources they are different structs/unions 3974 * that are referencing different types with the same name. This is extremely 3975 * unlikely to happen, but btf_dedup API allows to disable FWD resolution if 3976 * this logic is causing problems. 3977 * 3978 * Doing FWD resolution means that both candidate and/or canonical graphs can 3979 * consists of portions of the graph that come from multiple compilation units. 3980 * This is due to the fact that types within single compilation unit are always 3981 * deduplicated and FWDs are already resolved, if referenced struct/union 3982 * definiton is available. So, if we had unresolved FWD and found corresponding 3983 * STRUCT/UNION, they will be from different compilation units. This 3984 * consequently means that when we "link" FWD to corresponding STRUCT/UNION, 3985 * type graph will likely have at least two different BTF types that describe 3986 * same type (e.g., most probably there will be two different BTF types for the 3987 * same 'int' primitive type) and could even have "overlapping" parts of type 3988 * graph that describe same subset of types. 3989 * 3990 * This in turn means that our assumption that each type in canonical graph 3991 * must correspond to exactly one type in candidate graph might not hold 3992 * anymore and will make it harder to detect contradictions using hypothetical 3993 * map. To handle this problem, we allow to follow FWD -> STRUCT/UNION 3994 * resolution only in canonical graph. FWDs in candidate graphs are never 3995 * resolved. To see why it's OK, let's check all possible situations w.r.t. FWDs 3996 * that can occur: 3997 * - Both types in canonical and candidate graphs are FWDs. If they are 3998 * structurally equivalent, then they can either be both resolved to the 3999 * same STRUCT/UNION or not resolved at all. In both cases they are 4000 * equivalent and there is no need to resolve FWD on candidate side. 4001 * - Both types in canonical and candidate graphs are concrete STRUCT/UNION, 4002 * so nothing to resolve as well, algorithm will check equivalence anyway. 4003 * - Type in canonical graph is FWD, while type in candidate is concrete 4004 * STRUCT/UNION. In this case candidate graph comes from single compilation 4005 * unit, so there is exactly one BTF type for each unique C type. After 4006 * resolving FWD into STRUCT/UNION, there might be more than one BTF type 4007 * in canonical graph mapping to single BTF type in candidate graph, but 4008 * because hypothetical mapping maps from canonical to candidate types, it's 4009 * alright, and we still maintain the property of having single `canon_id` 4010 * mapping to single `cand_id` (there could be two different `canon_id` 4011 * mapped to the same `cand_id`, but it's not contradictory). 4012 * - Type in canonical graph is concrete STRUCT/UNION, while type in candidate 4013 * graph is FWD. In this case we are just going to check compatibility of 4014 * STRUCT/UNION and corresponding FWD, and if they are compatible, we'll 4015 * assume that whatever STRUCT/UNION FWD resolves to must be equivalent to 4016 * a concrete STRUCT/UNION from canonical graph. If the rest of type graphs 4017 * turn out equivalent, we'll re-resolve FWD to concrete STRUCT/UNION from 4018 * canonical graph. 4019 */ 4020 static int btf_dedup_is_equiv(struct btf_dedup *d, __u32 cand_id, 4021 __u32 canon_id) 4022 { 4023 struct btf_type *cand_type; 4024 struct btf_type *canon_type; 4025 __u32 hypot_type_id; 4026 __u16 cand_kind; 4027 __u16 canon_kind; 4028 int i, eq; 4029 4030 /* if both resolve to the same canonical, they must be equivalent */ 4031 if (resolve_type_id(d, cand_id) == resolve_type_id(d, canon_id)) 4032 return 1; 4033 4034 canon_id = resolve_fwd_id(d, canon_id); 4035 4036 hypot_type_id = d->hypot_map[canon_id]; 4037 if (hypot_type_id <= BTF_MAX_NR_TYPES) { 4038 if (hypot_type_id == cand_id) 4039 return 1; 4040 /* In some cases compiler will generate different DWARF types 4041 * for *identical* array type definitions and use them for 4042 * different fields within the *same* struct. This breaks type 4043 * equivalence check, which makes an assumption that candidate 4044 * types sub-graph has a consistent and deduped-by-compiler 4045 * types within a single CU. So work around that by explicitly 4046 * allowing identical array types here. 4047 */ 4048 if (btf_dedup_identical_arrays(d, hypot_type_id, cand_id)) 4049 return 1; 4050 /* It turns out that similar situation can happen with 4051 * struct/union sometimes, sigh... Handle the case where 4052 * structs/unions are exactly the same, down to the referenced 4053 * type IDs. Anything more complicated (e.g., if referenced 4054 * types are different, but equivalent) is *way more* 4055 * complicated and requires a many-to-many equivalence mapping. 4056 */ 4057 if (btf_dedup_identical_structs(d, hypot_type_id, cand_id)) 4058 return 1; 4059 return 0; 4060 } 4061 4062 if (btf_dedup_hypot_map_add(d, canon_id, cand_id)) 4063 return -ENOMEM; 4064 4065 cand_type = btf_type_by_id(d->btf, cand_id); 4066 canon_type = btf_type_by_id(d->btf, canon_id); 4067 cand_kind = btf_kind(cand_type); 4068 canon_kind = btf_kind(canon_type); 4069 4070 if (cand_type->name_off != canon_type->name_off) 4071 return 0; 4072 4073 /* FWD <--> STRUCT/UNION equivalence check, if enabled */ 4074 if ((cand_kind == BTF_KIND_FWD || canon_kind == BTF_KIND_FWD) 4075 && cand_kind != canon_kind) { 4076 __u16 real_kind; 4077 __u16 fwd_kind; 4078 4079 if (cand_kind == BTF_KIND_FWD) { 4080 real_kind = canon_kind; 4081 fwd_kind = btf_fwd_kind(cand_type); 4082 } else { 4083 real_kind = cand_kind; 4084 fwd_kind = btf_fwd_kind(canon_type); 4085 /* we'd need to resolve base FWD to STRUCT/UNION */ 4086 if (fwd_kind == real_kind && canon_id < d->btf->start_id) 4087 d->hypot_adjust_canon = true; 4088 } 4089 return fwd_kind == real_kind; 4090 } 4091 4092 if (cand_kind != canon_kind) 4093 return 0; 4094 4095 switch (cand_kind) { 4096 case BTF_KIND_INT: 4097 return btf_equal_int_tag(cand_type, canon_type); 4098 4099 case BTF_KIND_ENUM: 4100 case BTF_KIND_ENUM64: 4101 return btf_compat_enum(cand_type, canon_type); 4102 4103 case BTF_KIND_FWD: 4104 case BTF_KIND_FLOAT: 4105 return btf_equal_common(cand_type, canon_type); 4106 4107 case BTF_KIND_CONST: 4108 case BTF_KIND_VOLATILE: 4109 case BTF_KIND_RESTRICT: 4110 case BTF_KIND_PTR: 4111 case BTF_KIND_TYPEDEF: 4112 case BTF_KIND_FUNC: 4113 case BTF_KIND_TYPE_TAG: 4114 if (cand_type->info != canon_type->info) 4115 return 0; 4116 return btf_dedup_is_equiv(d, cand_type->type, canon_type->type); 4117 4118 case BTF_KIND_ARRAY: { 4119 const struct btf_array *cand_arr, *canon_arr; 4120 4121 if (!btf_compat_array(cand_type, canon_type)) 4122 return 0; 4123 cand_arr = btf_array(cand_type); 4124 canon_arr = btf_array(canon_type); 4125 eq = btf_dedup_is_equiv(d, cand_arr->index_type, canon_arr->index_type); 4126 if (eq <= 0) 4127 return eq; 4128 return btf_dedup_is_equiv(d, cand_arr->type, canon_arr->type); 4129 } 4130 4131 case BTF_KIND_STRUCT: 4132 case BTF_KIND_UNION: { 4133 const struct btf_member *cand_m, *canon_m; 4134 __u16 vlen; 4135 4136 if (!btf_shallow_equal_struct(cand_type, canon_type)) 4137 return 0; 4138 vlen = btf_vlen(cand_type); 4139 cand_m = btf_members(cand_type); 4140 canon_m = btf_members(canon_type); 4141 for (i = 0; i < vlen; i++) { 4142 eq = btf_dedup_is_equiv(d, cand_m->type, canon_m->type); 4143 if (eq <= 0) 4144 return eq; 4145 cand_m++; 4146 canon_m++; 4147 } 4148 4149 return 1; 4150 } 4151 4152 case BTF_KIND_FUNC_PROTO: { 4153 const struct btf_param *cand_p, *canon_p; 4154 __u16 vlen; 4155 4156 if (!btf_compat_fnproto(cand_type, canon_type)) 4157 return 0; 4158 eq = btf_dedup_is_equiv(d, cand_type->type, canon_type->type); 4159 if (eq <= 0) 4160 return eq; 4161 vlen = btf_vlen(cand_type); 4162 cand_p = btf_params(cand_type); 4163 canon_p = btf_params(canon_type); 4164 for (i = 0; i < vlen; i++) { 4165 eq = btf_dedup_is_equiv(d, cand_p->type, canon_p->type); 4166 if (eq <= 0) 4167 return eq; 4168 cand_p++; 4169 canon_p++; 4170 } 4171 return 1; 4172 } 4173 4174 default: 4175 return -EINVAL; 4176 } 4177 return 0; 4178 } 4179 4180 /* 4181 * Use hypothetical mapping, produced by successful type graph equivalence 4182 * check, to augment existing struct/union canonical mapping, where possible. 4183 * 4184 * If BTF_KIND_FWD resolution is allowed, this mapping is also used to record 4185 * FWD -> STRUCT/UNION correspondence as well. FWD resolution is bidirectional: 4186 * it doesn't matter if FWD type was part of canonical graph or candidate one, 4187 * we are recording the mapping anyway. As opposed to carefulness required 4188 * for struct/union correspondence mapping (described below), for FWD resolution 4189 * it's not important, as by the time that FWD type (reference type) will be 4190 * deduplicated all structs/unions will be deduped already anyway. 4191 * 4192 * Recording STRUCT/UNION mapping is purely a performance optimization and is 4193 * not required for correctness. It needs to be done carefully to ensure that 4194 * struct/union from candidate's type graph is not mapped into corresponding 4195 * struct/union from canonical type graph that itself hasn't been resolved into 4196 * canonical representative. The only guarantee we have is that canonical 4197 * struct/union was determined as canonical and that won't change. But any 4198 * types referenced through that struct/union fields could have been not yet 4199 * resolved, so in case like that it's too early to establish any kind of 4200 * correspondence between structs/unions. 4201 * 4202 * No canonical correspondence is derived for primitive types (they are already 4203 * deduplicated completely already anyway) or reference types (they rely on 4204 * stability of struct/union canonical relationship for equivalence checks). 4205 */ 4206 static void btf_dedup_merge_hypot_map(struct btf_dedup *d) 4207 { 4208 __u32 canon_type_id, targ_type_id; 4209 __u16 t_kind, c_kind; 4210 __u32 t_id, c_id; 4211 int i; 4212 4213 for (i = 0; i < d->hypot_cnt; i++) { 4214 canon_type_id = d->hypot_list[i]; 4215 targ_type_id = d->hypot_map[canon_type_id]; 4216 t_id = resolve_type_id(d, targ_type_id); 4217 c_id = resolve_type_id(d, canon_type_id); 4218 t_kind = btf_kind(btf__type_by_id(d->btf, t_id)); 4219 c_kind = btf_kind(btf__type_by_id(d->btf, c_id)); 4220 /* 4221 * Resolve FWD into STRUCT/UNION. 4222 * It's ok to resolve FWD into STRUCT/UNION that's not yet 4223 * mapped to canonical representative (as opposed to 4224 * STRUCT/UNION <--> STRUCT/UNION mapping logic below), because 4225 * eventually that struct is going to be mapped and all resolved 4226 * FWDs will automatically resolve to correct canonical 4227 * representative. This will happen before ref type deduping, 4228 * which critically depends on stability of these mapping. This 4229 * stability is not a requirement for STRUCT/UNION equivalence 4230 * checks, though. 4231 */ 4232 4233 /* if it's the split BTF case, we still need to point base FWD 4234 * to STRUCT/UNION in a split BTF, because FWDs from split BTF 4235 * will be resolved against base FWD. If we don't point base 4236 * canonical FWD to the resolved STRUCT/UNION, then all the 4237 * FWDs in split BTF won't be correctly resolved to a proper 4238 * STRUCT/UNION. 4239 */ 4240 if (t_kind != BTF_KIND_FWD && c_kind == BTF_KIND_FWD) 4241 d->map[c_id] = t_id; 4242 4243 /* if graph equivalence determined that we'd need to adjust 4244 * base canonical types, then we need to only point base FWDs 4245 * to STRUCTs/UNIONs and do no more modifications. For all 4246 * other purposes the type graphs were not equivalent. 4247 */ 4248 if (d->hypot_adjust_canon) 4249 continue; 4250 4251 if (t_kind == BTF_KIND_FWD && c_kind != BTF_KIND_FWD) 4252 d->map[t_id] = c_id; 4253 4254 if ((t_kind == BTF_KIND_STRUCT || t_kind == BTF_KIND_UNION) && 4255 c_kind != BTF_KIND_FWD && 4256 is_type_mapped(d, c_id) && 4257 !is_type_mapped(d, t_id)) { 4258 /* 4259 * as a perf optimization, we can map struct/union 4260 * that's part of type graph we just verified for 4261 * equivalence. We can do that for struct/union that has 4262 * canonical representative only, though. 4263 */ 4264 d->map[t_id] = c_id; 4265 } 4266 } 4267 } 4268 4269 /* 4270 * Deduplicate struct/union types. 4271 * 4272 * For each struct/union type its type signature hash is calculated, taking 4273 * into account type's name, size, number, order and names of fields, but 4274 * ignoring type ID's referenced from fields, because they might not be deduped 4275 * completely until after reference types deduplication phase. This type hash 4276 * is used to iterate over all potential canonical types, sharing same hash. 4277 * For each canonical candidate we check whether type graphs that they form 4278 * (through referenced types in fields and so on) are equivalent using algorithm 4279 * implemented in `btf_dedup_is_equiv`. If such equivalence is found and 4280 * BTF_KIND_FWD resolution is allowed, then hypothetical mapping 4281 * (btf_dedup->hypot_map) produced by aforementioned type graph equivalence 4282 * algorithm is used to record FWD -> STRUCT/UNION mapping. It's also used to 4283 * potentially map other structs/unions to their canonical representatives, 4284 * if such relationship hasn't yet been established. This speeds up algorithm 4285 * by eliminating some of the duplicate work. 4286 * 4287 * If no matching canonical representative was found, struct/union is marked 4288 * as canonical for itself and is added into btf_dedup->dedup_table hash map 4289 * for further look ups. 4290 */ 4291 static int btf_dedup_struct_type(struct btf_dedup *d, __u32 type_id) 4292 { 4293 struct btf_type *cand_type, *t; 4294 struct hashmap_entry *hash_entry; 4295 /* if we don't find equivalent type, then we are canonical */ 4296 __u32 new_id = type_id; 4297 __u16 kind; 4298 long h; 4299 4300 /* already deduped or is in process of deduping (loop detected) */ 4301 if (d->map[type_id] <= BTF_MAX_NR_TYPES) 4302 return 0; 4303 4304 t = btf_type_by_id(d->btf, type_id); 4305 kind = btf_kind(t); 4306 4307 if (kind != BTF_KIND_STRUCT && kind != BTF_KIND_UNION) 4308 return 0; 4309 4310 h = btf_hash_struct(t); 4311 for_each_dedup_cand(d, hash_entry, h) { 4312 __u32 cand_id = hash_entry->value; 4313 int eq; 4314 4315 /* 4316 * Even though btf_dedup_is_equiv() checks for 4317 * btf_shallow_equal_struct() internally when checking two 4318 * structs (unions) for equivalence, we need to guard here 4319 * from picking matching FWD type as a dedup candidate. 4320 * This can happen due to hash collision. In such case just 4321 * relying on btf_dedup_is_equiv() would lead to potentially 4322 * creating a loop (FWD -> STRUCT and STRUCT -> FWD), because 4323 * FWD and compatible STRUCT/UNION are considered equivalent. 4324 */ 4325 cand_type = btf_type_by_id(d->btf, cand_id); 4326 if (!btf_shallow_equal_struct(t, cand_type)) 4327 continue; 4328 4329 btf_dedup_clear_hypot_map(d); 4330 eq = btf_dedup_is_equiv(d, type_id, cand_id); 4331 if (eq < 0) 4332 return eq; 4333 if (!eq) 4334 continue; 4335 btf_dedup_merge_hypot_map(d); 4336 if (d->hypot_adjust_canon) /* not really equivalent */ 4337 continue; 4338 new_id = cand_id; 4339 break; 4340 } 4341 4342 d->map[type_id] = new_id; 4343 if (type_id == new_id && btf_dedup_table_add(d, h, type_id)) 4344 return -ENOMEM; 4345 4346 return 0; 4347 } 4348 4349 static int btf_dedup_struct_types(struct btf_dedup *d) 4350 { 4351 int i, err; 4352 4353 for (i = 0; i < d->btf->nr_types; i++) { 4354 err = btf_dedup_struct_type(d, d->btf->start_id + i); 4355 if (err) 4356 return err; 4357 } 4358 return 0; 4359 } 4360 4361 /* 4362 * Deduplicate reference type. 4363 * 4364 * Once all primitive and struct/union types got deduplicated, we can easily 4365 * deduplicate all other (reference) BTF types. This is done in two steps: 4366 * 4367 * 1. Resolve all referenced type IDs into their canonical type IDs. This 4368 * resolution can be done either immediately for primitive or struct/union types 4369 * (because they were deduped in previous two phases) or recursively for 4370 * reference types. Recursion will always terminate at either primitive or 4371 * struct/union type, at which point we can "unwind" chain of reference types 4372 * one by one. There is no danger of encountering cycles because in C type 4373 * system the only way to form type cycle is through struct/union, so any chain 4374 * of reference types, even those taking part in a type cycle, will inevitably 4375 * reach struct/union at some point. 4376 * 4377 * 2. Once all referenced type IDs are resolved into canonical ones, BTF type 4378 * becomes "stable", in the sense that no further deduplication will cause 4379 * any changes to it. With that, it's now possible to calculate type's signature 4380 * hash (this time taking into account referenced type IDs) and loop over all 4381 * potential canonical representatives. If no match was found, current type 4382 * will become canonical representative of itself and will be added into 4383 * btf_dedup->dedup_table as another possible canonical representative. 4384 */ 4385 static int btf_dedup_ref_type(struct btf_dedup *d, __u32 type_id) 4386 { 4387 struct hashmap_entry *hash_entry; 4388 __u32 new_id = type_id, cand_id; 4389 struct btf_type *t, *cand; 4390 /* if we don't find equivalent type, then we are representative type */ 4391 int ref_type_id; 4392 long h; 4393 4394 if (d->map[type_id] == BTF_IN_PROGRESS_ID) 4395 return -ELOOP; 4396 if (d->map[type_id] <= BTF_MAX_NR_TYPES) 4397 return resolve_type_id(d, type_id); 4398 4399 t = btf_type_by_id(d->btf, type_id); 4400 d->map[type_id] = BTF_IN_PROGRESS_ID; 4401 4402 switch (btf_kind(t)) { 4403 case BTF_KIND_CONST: 4404 case BTF_KIND_VOLATILE: 4405 case BTF_KIND_RESTRICT: 4406 case BTF_KIND_PTR: 4407 case BTF_KIND_TYPEDEF: 4408 case BTF_KIND_FUNC: 4409 case BTF_KIND_TYPE_TAG: 4410 ref_type_id = btf_dedup_ref_type(d, t->type); 4411 if (ref_type_id < 0) 4412 return ref_type_id; 4413 t->type = ref_type_id; 4414 4415 h = btf_hash_common(t); 4416 for_each_dedup_cand(d, hash_entry, h) { 4417 cand_id = hash_entry->value; 4418 cand = btf_type_by_id(d->btf, cand_id); 4419 if (btf_equal_common(t, cand)) { 4420 new_id = cand_id; 4421 break; 4422 } 4423 } 4424 break; 4425 4426 case BTF_KIND_DECL_TAG: 4427 ref_type_id = btf_dedup_ref_type(d, t->type); 4428 if (ref_type_id < 0) 4429 return ref_type_id; 4430 t->type = ref_type_id; 4431 4432 h = btf_hash_int_decl_tag(t); 4433 for_each_dedup_cand(d, hash_entry, h) { 4434 cand_id = hash_entry->value; 4435 cand = btf_type_by_id(d->btf, cand_id); 4436 if (btf_equal_int_tag(t, cand)) { 4437 new_id = cand_id; 4438 break; 4439 } 4440 } 4441 break; 4442 4443 case BTF_KIND_ARRAY: { 4444 struct btf_array *info = btf_array(t); 4445 4446 ref_type_id = btf_dedup_ref_type(d, info->type); 4447 if (ref_type_id < 0) 4448 return ref_type_id; 4449 info->type = ref_type_id; 4450 4451 ref_type_id = btf_dedup_ref_type(d, info->index_type); 4452 if (ref_type_id < 0) 4453 return ref_type_id; 4454 info->index_type = ref_type_id; 4455 4456 h = btf_hash_array(t); 4457 for_each_dedup_cand(d, hash_entry, h) { 4458 cand_id = hash_entry->value; 4459 cand = btf_type_by_id(d->btf, cand_id); 4460 if (btf_equal_array(t, cand)) { 4461 new_id = cand_id; 4462 break; 4463 } 4464 } 4465 break; 4466 } 4467 4468 case BTF_KIND_FUNC_PROTO: { 4469 struct btf_param *param; 4470 __u16 vlen; 4471 int i; 4472 4473 ref_type_id = btf_dedup_ref_type(d, t->type); 4474 if (ref_type_id < 0) 4475 return ref_type_id; 4476 t->type = ref_type_id; 4477 4478 vlen = btf_vlen(t); 4479 param = btf_params(t); 4480 for (i = 0; i < vlen; i++) { 4481 ref_type_id = btf_dedup_ref_type(d, param->type); 4482 if (ref_type_id < 0) 4483 return ref_type_id; 4484 param->type = ref_type_id; 4485 param++; 4486 } 4487 4488 h = btf_hash_fnproto(t); 4489 for_each_dedup_cand(d, hash_entry, h) { 4490 cand_id = hash_entry->value; 4491 cand = btf_type_by_id(d->btf, cand_id); 4492 if (btf_equal_fnproto(t, cand)) { 4493 new_id = cand_id; 4494 break; 4495 } 4496 } 4497 break; 4498 } 4499 4500 default: 4501 return -EINVAL; 4502 } 4503 4504 d->map[type_id] = new_id; 4505 if (type_id == new_id && btf_dedup_table_add(d, h, type_id)) 4506 return -ENOMEM; 4507 4508 return new_id; 4509 } 4510 4511 static int btf_dedup_ref_types(struct btf_dedup *d) 4512 { 4513 int i, err; 4514 4515 for (i = 0; i < d->btf->nr_types; i++) { 4516 err = btf_dedup_ref_type(d, d->btf->start_id + i); 4517 if (err < 0) 4518 return err; 4519 } 4520 /* we won't need d->dedup_table anymore */ 4521 hashmap__free(d->dedup_table); 4522 d->dedup_table = NULL; 4523 return 0; 4524 } 4525 4526 /* 4527 * Collect a map from type names to type ids for all canonical structs 4528 * and unions. If the same name is shared by several canonical types 4529 * use a special value 0 to indicate this fact. 4530 */ 4531 static int btf_dedup_fill_unique_names_map(struct btf_dedup *d, struct hashmap *names_map) 4532 { 4533 __u32 nr_types = btf__type_cnt(d->btf); 4534 struct btf_type *t; 4535 __u32 type_id; 4536 __u16 kind; 4537 int err; 4538 4539 /* 4540 * Iterate over base and split module ids in order to get all 4541 * available structs in the map. 4542 */ 4543 for (type_id = 1; type_id < nr_types; ++type_id) { 4544 t = btf_type_by_id(d->btf, type_id); 4545 kind = btf_kind(t); 4546 4547 if (kind != BTF_KIND_STRUCT && kind != BTF_KIND_UNION) 4548 continue; 4549 4550 /* Skip non-canonical types */ 4551 if (type_id != d->map[type_id]) 4552 continue; 4553 4554 err = hashmap__add(names_map, t->name_off, type_id); 4555 if (err == -EEXIST) 4556 err = hashmap__set(names_map, t->name_off, 0, NULL, NULL); 4557 4558 if (err) 4559 return err; 4560 } 4561 4562 return 0; 4563 } 4564 4565 static int btf_dedup_resolve_fwd(struct btf_dedup *d, struct hashmap *names_map, __u32 type_id) 4566 { 4567 struct btf_type *t = btf_type_by_id(d->btf, type_id); 4568 enum btf_fwd_kind fwd_kind = btf_kflag(t); 4569 __u16 cand_kind, kind = btf_kind(t); 4570 struct btf_type *cand_t; 4571 uintptr_t cand_id; 4572 4573 if (kind != BTF_KIND_FWD) 4574 return 0; 4575 4576 /* Skip if this FWD already has a mapping */ 4577 if (type_id != d->map[type_id]) 4578 return 0; 4579 4580 if (!hashmap__find(names_map, t->name_off, &cand_id)) 4581 return 0; 4582 4583 /* Zero is a special value indicating that name is not unique */ 4584 if (!cand_id) 4585 return 0; 4586 4587 cand_t = btf_type_by_id(d->btf, cand_id); 4588 cand_kind = btf_kind(cand_t); 4589 if ((cand_kind == BTF_KIND_STRUCT && fwd_kind != BTF_FWD_STRUCT) || 4590 (cand_kind == BTF_KIND_UNION && fwd_kind != BTF_FWD_UNION)) 4591 return 0; 4592 4593 d->map[type_id] = cand_id; 4594 4595 return 0; 4596 } 4597 4598 /* 4599 * Resolve unambiguous forward declarations. 4600 * 4601 * The lion's share of all FWD declarations is resolved during 4602 * `btf_dedup_struct_types` phase when different type graphs are 4603 * compared against each other. However, if in some compilation unit a 4604 * FWD declaration is not a part of a type graph compared against 4605 * another type graph that declaration's canonical type would not be 4606 * changed. Example: 4607 * 4608 * CU #1: 4609 * 4610 * struct foo; 4611 * struct foo *some_global; 4612 * 4613 * CU #2: 4614 * 4615 * struct foo { int u; }; 4616 * struct foo *another_global; 4617 * 4618 * After `btf_dedup_struct_types` the BTF looks as follows: 4619 * 4620 * [1] STRUCT 'foo' size=4 vlen=1 ... 4621 * [2] INT 'int' size=4 ... 4622 * [3] PTR '(anon)' type_id=1 4623 * [4] FWD 'foo' fwd_kind=struct 4624 * [5] PTR '(anon)' type_id=4 4625 * 4626 * This pass assumes that such FWD declarations should be mapped to 4627 * structs or unions with identical name in case if the name is not 4628 * ambiguous. 4629 */ 4630 static int btf_dedup_resolve_fwds(struct btf_dedup *d) 4631 { 4632 int i, err; 4633 struct hashmap *names_map; 4634 4635 names_map = hashmap__new(btf_dedup_identity_hash_fn, btf_dedup_equal_fn, NULL); 4636 if (IS_ERR(names_map)) 4637 return PTR_ERR(names_map); 4638 4639 err = btf_dedup_fill_unique_names_map(d, names_map); 4640 if (err < 0) 4641 goto exit; 4642 4643 for (i = 0; i < d->btf->nr_types; i++) { 4644 err = btf_dedup_resolve_fwd(d, names_map, d->btf->start_id + i); 4645 if (err < 0) 4646 break; 4647 } 4648 4649 exit: 4650 hashmap__free(names_map); 4651 return err; 4652 } 4653 4654 /* 4655 * Compact types. 4656 * 4657 * After we established for each type its corresponding canonical representative 4658 * type, we now can eliminate types that are not canonical and leave only 4659 * canonical ones layed out sequentially in memory by copying them over 4660 * duplicates. During compaction btf_dedup->hypot_map array is reused to store 4661 * a map from original type ID to a new compacted type ID, which will be used 4662 * during next phase to "fix up" type IDs, referenced from struct/union and 4663 * reference types. 4664 */ 4665 static int btf_dedup_compact_types(struct btf_dedup *d) 4666 { 4667 __u32 *new_offs; 4668 __u32 next_type_id = d->btf->start_id; 4669 const struct btf_type *t; 4670 void *p; 4671 int i, id, len; 4672 4673 /* we are going to reuse hypot_map to store compaction remapping */ 4674 d->hypot_map[0] = 0; 4675 /* base BTF types are not renumbered */ 4676 for (id = 1; id < d->btf->start_id; id++) 4677 d->hypot_map[id] = id; 4678 for (i = 0, id = d->btf->start_id; i < d->btf->nr_types; i++, id++) 4679 d->hypot_map[id] = BTF_UNPROCESSED_ID; 4680 4681 p = d->btf->types_data; 4682 4683 for (i = 0, id = d->btf->start_id; i < d->btf->nr_types; i++, id++) { 4684 if (d->map[id] != id) 4685 continue; 4686 4687 t = btf__type_by_id(d->btf, id); 4688 len = btf_type_size(t); 4689 if (len < 0) 4690 return len; 4691 4692 memmove(p, t, len); 4693 d->hypot_map[id] = next_type_id; 4694 d->btf->type_offs[next_type_id - d->btf->start_id] = p - d->btf->types_data; 4695 p += len; 4696 next_type_id++; 4697 } 4698 4699 /* shrink struct btf's internal types index and update btf_header */ 4700 d->btf->nr_types = next_type_id - d->btf->start_id; 4701 d->btf->type_offs_cap = d->btf->nr_types; 4702 d->btf->hdr->type_len = p - d->btf->types_data; 4703 new_offs = libbpf_reallocarray(d->btf->type_offs, d->btf->type_offs_cap, 4704 sizeof(*new_offs)); 4705 if (d->btf->type_offs_cap && !new_offs) 4706 return -ENOMEM; 4707 d->btf->type_offs = new_offs; 4708 d->btf->hdr->str_off = d->btf->hdr->type_len; 4709 d->btf->raw_size = d->btf->hdr->hdr_len + d->btf->hdr->type_len + d->btf->hdr->str_len; 4710 return 0; 4711 } 4712 4713 /* 4714 * Figure out final (deduplicated and compacted) type ID for provided original 4715 * `type_id` by first resolving it into corresponding canonical type ID and 4716 * then mapping it to a deduplicated type ID, stored in btf_dedup->hypot_map, 4717 * which is populated during compaction phase. 4718 */ 4719 static int btf_dedup_remap_type_id(__u32 *type_id, void *ctx) 4720 { 4721 struct btf_dedup *d = ctx; 4722 __u32 resolved_type_id, new_type_id; 4723 4724 resolved_type_id = resolve_type_id(d, *type_id); 4725 new_type_id = d->hypot_map[resolved_type_id]; 4726 if (new_type_id > BTF_MAX_NR_TYPES) 4727 return -EINVAL; 4728 4729 *type_id = new_type_id; 4730 return 0; 4731 } 4732 4733 /* 4734 * Remap referenced type IDs into deduped type IDs. 4735 * 4736 * After BTF types are deduplicated and compacted, their final type IDs may 4737 * differ from original ones. The map from original to a corresponding 4738 * deduped type ID is stored in btf_dedup->hypot_map and is populated during 4739 * compaction phase. During remapping phase we are rewriting all type IDs 4740 * referenced from any BTF type (e.g., struct fields, func proto args, etc) to 4741 * their final deduped type IDs. 4742 */ 4743 static int btf_dedup_remap_types(struct btf_dedup *d) 4744 { 4745 int i, r; 4746 4747 for (i = 0; i < d->btf->nr_types; i++) { 4748 struct btf_type *t = btf_type_by_id(d->btf, d->btf->start_id + i); 4749 4750 r = btf_type_visit_type_ids(t, btf_dedup_remap_type_id, d); 4751 if (r) 4752 return r; 4753 } 4754 4755 if (!d->btf_ext) 4756 return 0; 4757 4758 r = btf_ext_visit_type_ids(d->btf_ext, btf_dedup_remap_type_id, d); 4759 if (r) 4760 return r; 4761 4762 return 0; 4763 } 4764 4765 /* 4766 * Probe few well-known locations for vmlinux kernel image and try to load BTF 4767 * data out of it to use for target BTF. 4768 */ 4769 struct btf *btf__load_vmlinux_btf(void) 4770 { 4771 const char *locations[] = { 4772 /* try canonical vmlinux BTF through sysfs first */ 4773 "/sys/kernel/btf/vmlinux", 4774 /* fall back to trying to find vmlinux on disk otherwise */ 4775 "/boot/vmlinux-%1$s", 4776 "/lib/modules/%1$s/vmlinux-%1$s", 4777 "/lib/modules/%1$s/build/vmlinux", 4778 "/usr/lib/modules/%1$s/kernel/vmlinux", 4779 "/usr/lib/debug/boot/vmlinux-%1$s", 4780 "/usr/lib/debug/boot/vmlinux-%1$s.debug", 4781 "/usr/lib/debug/lib/modules/%1$s/vmlinux", 4782 }; 4783 char path[PATH_MAX + 1]; 4784 struct utsname buf; 4785 struct btf *btf; 4786 int i, err; 4787 4788 uname(&buf); 4789 4790 for (i = 0; i < ARRAY_SIZE(locations); i++) { 4791 snprintf(path, PATH_MAX, locations[i], buf.release); 4792 4793 if (faccessat(AT_FDCWD, path, R_OK, AT_EACCESS)) 4794 continue; 4795 4796 btf = btf__parse(path, NULL); 4797 err = libbpf_get_error(btf); 4798 pr_debug("loading kernel BTF '%s': %d\n", path, err); 4799 if (err) 4800 continue; 4801 4802 return btf; 4803 } 4804 4805 pr_warn("failed to find valid kernel BTF\n"); 4806 return libbpf_err_ptr(-ESRCH); 4807 } 4808 4809 struct btf *libbpf_find_kernel_btf(void) __attribute__((alias("btf__load_vmlinux_btf"))); 4810 4811 struct btf *btf__load_module_btf(const char *module_name, struct btf *vmlinux_btf) 4812 { 4813 char path[80]; 4814 4815 snprintf(path, sizeof(path), "/sys/kernel/btf/%s", module_name); 4816 return btf__parse_split(path, vmlinux_btf); 4817 } 4818 4819 int btf_type_visit_type_ids(struct btf_type *t, type_id_visit_fn visit, void *ctx) 4820 { 4821 int i, n, err; 4822 4823 switch (btf_kind(t)) { 4824 case BTF_KIND_INT: 4825 case BTF_KIND_FLOAT: 4826 case BTF_KIND_ENUM: 4827 case BTF_KIND_ENUM64: 4828 return 0; 4829 4830 case BTF_KIND_FWD: 4831 case BTF_KIND_CONST: 4832 case BTF_KIND_VOLATILE: 4833 case BTF_KIND_RESTRICT: 4834 case BTF_KIND_PTR: 4835 case BTF_KIND_TYPEDEF: 4836 case BTF_KIND_FUNC: 4837 case BTF_KIND_VAR: 4838 case BTF_KIND_DECL_TAG: 4839 case BTF_KIND_TYPE_TAG: 4840 return visit(&t->type, ctx); 4841 4842 case BTF_KIND_ARRAY: { 4843 struct btf_array *a = btf_array(t); 4844 4845 err = visit(&a->type, ctx); 4846 err = err ?: visit(&a->index_type, ctx); 4847 return err; 4848 } 4849 4850 case BTF_KIND_STRUCT: 4851 case BTF_KIND_UNION: { 4852 struct btf_member *m = btf_members(t); 4853 4854 for (i = 0, n = btf_vlen(t); i < n; i++, m++) { 4855 err = visit(&m->type, ctx); 4856 if (err) 4857 return err; 4858 } 4859 return 0; 4860 } 4861 4862 case BTF_KIND_FUNC_PROTO: { 4863 struct btf_param *m = btf_params(t); 4864 4865 err = visit(&t->type, ctx); 4866 if (err) 4867 return err; 4868 for (i = 0, n = btf_vlen(t); i < n; i++, m++) { 4869 err = visit(&m->type, ctx); 4870 if (err) 4871 return err; 4872 } 4873 return 0; 4874 } 4875 4876 case BTF_KIND_DATASEC: { 4877 struct btf_var_secinfo *m = btf_var_secinfos(t); 4878 4879 for (i = 0, n = btf_vlen(t); i < n; i++, m++) { 4880 err = visit(&m->type, ctx); 4881 if (err) 4882 return err; 4883 } 4884 return 0; 4885 } 4886 4887 default: 4888 return -EINVAL; 4889 } 4890 } 4891 4892 int btf_type_visit_str_offs(struct btf_type *t, str_off_visit_fn visit, void *ctx) 4893 { 4894 int i, n, err; 4895 4896 err = visit(&t->name_off, ctx); 4897 if (err) 4898 return err; 4899 4900 switch (btf_kind(t)) { 4901 case BTF_KIND_STRUCT: 4902 case BTF_KIND_UNION: { 4903 struct btf_member *m = btf_members(t); 4904 4905 for (i = 0, n = btf_vlen(t); i < n; i++, m++) { 4906 err = visit(&m->name_off, ctx); 4907 if (err) 4908 return err; 4909 } 4910 break; 4911 } 4912 case BTF_KIND_ENUM: { 4913 struct btf_enum *m = btf_enum(t); 4914 4915 for (i = 0, n = btf_vlen(t); i < n; i++, m++) { 4916 err = visit(&m->name_off, ctx); 4917 if (err) 4918 return err; 4919 } 4920 break; 4921 } 4922 case BTF_KIND_ENUM64: { 4923 struct btf_enum64 *m = btf_enum64(t); 4924 4925 for (i = 0, n = btf_vlen(t); i < n; i++, m++) { 4926 err = visit(&m->name_off, ctx); 4927 if (err) 4928 return err; 4929 } 4930 break; 4931 } 4932 case BTF_KIND_FUNC_PROTO: { 4933 struct btf_param *m = btf_params(t); 4934 4935 for (i = 0, n = btf_vlen(t); i < n; i++, m++) { 4936 err = visit(&m->name_off, ctx); 4937 if (err) 4938 return err; 4939 } 4940 break; 4941 } 4942 default: 4943 break; 4944 } 4945 4946 return 0; 4947 } 4948 4949 int btf_ext_visit_type_ids(struct btf_ext *btf_ext, type_id_visit_fn visit, void *ctx) 4950 { 4951 const struct btf_ext_info *seg; 4952 struct btf_ext_info_sec *sec; 4953 int i, err; 4954 4955 seg = &btf_ext->func_info; 4956 for_each_btf_ext_sec(seg, sec) { 4957 struct bpf_func_info_min *rec; 4958 4959 for_each_btf_ext_rec(seg, sec, i, rec) { 4960 err = visit(&rec->type_id, ctx); 4961 if (err < 0) 4962 return err; 4963 } 4964 } 4965 4966 seg = &btf_ext->core_relo_info; 4967 for_each_btf_ext_sec(seg, sec) { 4968 struct bpf_core_relo *rec; 4969 4970 for_each_btf_ext_rec(seg, sec, i, rec) { 4971 err = visit(&rec->type_id, ctx); 4972 if (err < 0) 4973 return err; 4974 } 4975 } 4976 4977 return 0; 4978 } 4979 4980 int btf_ext_visit_str_offs(struct btf_ext *btf_ext, str_off_visit_fn visit, void *ctx) 4981 { 4982 const struct btf_ext_info *seg; 4983 struct btf_ext_info_sec *sec; 4984 int i, err; 4985 4986 seg = &btf_ext->func_info; 4987 for_each_btf_ext_sec(seg, sec) { 4988 err = visit(&sec->sec_name_off, ctx); 4989 if (err) 4990 return err; 4991 } 4992 4993 seg = &btf_ext->line_info; 4994 for_each_btf_ext_sec(seg, sec) { 4995 struct bpf_line_info_min *rec; 4996 4997 err = visit(&sec->sec_name_off, ctx); 4998 if (err) 4999 return err; 5000 5001 for_each_btf_ext_rec(seg, sec, i, rec) { 5002 err = visit(&rec->file_name_off, ctx); 5003 if (err) 5004 return err; 5005 err = visit(&rec->line_off, ctx); 5006 if (err) 5007 return err; 5008 } 5009 } 5010 5011 seg = &btf_ext->core_relo_info; 5012 for_each_btf_ext_sec(seg, sec) { 5013 struct bpf_core_relo *rec; 5014 5015 err = visit(&sec->sec_name_off, ctx); 5016 if (err) 5017 return err; 5018 5019 for_each_btf_ext_rec(seg, sec, i, rec) { 5020 err = visit(&rec->access_str_off, ctx); 5021 if (err) 5022 return err; 5023 } 5024 } 5025 5026 return 0; 5027 } 5028