[PATCH 27/31] dwarves: Remove 6 dead functions found via coverage analysis
Arnaldo Carvalho de Melo <[email protected]> Wed, 29 Jul 2026 16:07:27 -0300
| Newsgroups | org.kernel.vger.dwarves,org.kernel.vger.bpf |
|---|---|
| Message-ID | <[email protected]> |
From: Arnaldo Carvalho de Melo <[email protected]> Coverage analysis showed that 6 non-static functions in dwarves.c have zero callers anywhere in the codebase: base_type__language_defined: introduced in 51643cb290f9 ("core: Introduce base_type__language_defined()", 2023) for use in dwarves_emit.c, but that code path was superseded before reaching the main branch — never called on this lineage. cus__find_type_by_name: introduced in 7c12b234ee30 ("dwarves: Introduce cus__find_type_by_name()", 2020), last callers removed in 22f93766cf02 ("pahole: Support multiple types for pretty printing", 2020). cu__find_struct_or_union_by_name: introduced in da632a36862c ("dwarves: Introduce {cu,cus}__find_struct_or_union_by_name() methods", 2018), last caller removed in 3c1a9a3329d9 ("pahole: Make --contains look for more than just unions, structs", 2020). The struct-only variant cu__find_struct_by_name is used instead. cus__find_struct_or_union_by_name: multi-CU wrapper introduced alongside cu__find_struct_or_union_by_name in da632a36862c (2018), never had any callers. cus__find_cu_by_name: locking wrapper introduced in 874e750fb8bd ("core: Move cus__find_pair() from codiff to the core", 2021). The static __cus__find_cu_by_name it wraps is still used by cus__find_pair, but the public wrapper was never called. class__find_bit_hole: introduced in 82892cd9dd97 ("[CLASSES]: First stab at implementing class__find_bit_hole", 2006), last caller removed in 57fce1596b9c ("[PAHOLE]: Use class__reorganize in class__packable", 2007). Removes the functions from dwarves.c and their declarations from dwarves.h. Before: 174 functions, 2027 lines, 63.6% line coverage. After: 168 functions, 1975 lines, 65.3% line coverage. Assisted-by: Claude:claude-sonnet-4-5 Signed-off-by: Arnaldo Carvalho de Melo <[email protected]> --- dwarves.c | 87 +------------------------------------------------------ dwarves.h | 13 --------- 2 files changed, 1 insertion(+), 99 deletions(-) diff --git a/dwarves.c b/dwarves.c index 94bab301d598695d..1748889bc051fcb4 100644 --- a/dwarves.c +++ b/dwarves.c @@ -311,29 +311,6 @@ static struct ase_type_name_to_size { { .name = NULL }, }; -bool base_type__language_defined(struct base_type *bt) -{ - int i = 0; - char bf[64]; - const char *name; - - if (bt->name_has_encoding) - name = bt->name; - else - name = base_type__name(bt, bf, sizeof(bf)); - - while (base_type_name_to_size_table[i].name != NULL) { - if (bt->name_has_encoding) { - if (strcmp(base_type_name_to_size_table[i].name, bt->name) == 0) - return true; - } else if (strcmp(base_type_name_to_size_table[i].name, name) == 0) - return true; - ++i; - } - - return false; -} - size_t base_type__name_to_size(struct base_type *bt, struct cu *cu) { int i = 0; @@ -974,27 +951,7 @@ found: return pos; } -struct tag *cus__find_type_by_name(struct cus *cus, struct cu **cu, const char *name, - const int include_decls, type_id_t *id) -{ - struct cu *pos; - struct tag *tag = NULL; - - cus__lock(cus); - - list_for_each_entry(pos, &cus->cus, node) { - tag = cu__find_type_by_name(pos, name, include_decls, id); - if (tag != NULL) { - if (cu != NULL) - *cu = pos; - break; - } - } - - cus__unlock(cus); - - return tag; -} +/* cus__find_type_by_name removed: dead code, no callers */ static struct tag *__cu__find_struct_by_name(const struct cu *cu, const char *name, const int include_decls, bool unions, type_id_t *idp) @@ -1034,12 +991,6 @@ struct tag *cu__find_struct_by_name(const struct cu *cu, const char *name, return __cu__find_struct_by_name(cu, name, include_decls, false, idp); } -struct tag *cu__find_struct_or_union_by_name(const struct cu *cu, const char *name, - const int include_decls, type_id_t *idp) -{ - return __cu__find_struct_by_name(cu, name, include_decls, true, idp); -} - static struct tag *__cus__find_struct_by_name(struct cus *cus, struct cu **cu, const char *name, const int include_decls, bool unions, type_id_t *id) { @@ -1069,12 +1020,6 @@ struct tag *cus__find_struct_by_name(struct cus *cus, struct cu **cu, const char return __cus__find_struct_by_name(cus, cu, name, include_decls, false, idp); } -struct tag *cus__find_struct_or_union_by_name(struct cus *cus, struct cu **cu, const char *name, - const int include_decls, type_id_t *idp) -{ - return __cus__find_struct_by_name(cus, cu, name, include_decls, true, idp); -} - struct function *cu__find_function_at_addr(const struct cu *cu, uint64_t addr) { @@ -1135,19 +1080,6 @@ out: return pos; } -struct cu *cus__find_cu_by_name(struct cus *cus, const char *name) -{ - struct cu *pos; - - cus__lock(cus); - - pos = __cus__find_cu_by_name(cus, name); - - cus__unlock(cus); - - return pos; -} - struct cu *cus__find_pair(struct cus *cus, const char *name) { struct cu *cu; @@ -1568,23 +1500,6 @@ bool class__has_flexible_array(struct class *class, const struct cu *cu) return class->has_flexible_array; } -const struct class_member *class__find_bit_hole(const struct class *class, - const struct class_member *trailer, - const uint16_t bit_hole_size) -{ - struct class_member *pos; - const uint16_t byte_hole_size = bit_hole_size / 8; - - type__for_each_data_member(&class->type, pos) - if (pos == trailer) - break; - else if (pos->hole >= byte_hole_size || - pos->bit_hole >= bit_hole_size) - return pos; - - return NULL; -} - void class__find_holes(struct class *class) { const struct type *ctype = &class->type; diff --git a/dwarves.h b/dwarves.h index 8f1640e4247d5115..99e9d183c853ea8b 100644 --- a/dwarves.h +++ b/dwarves.h @@ -196,17 +196,12 @@ void cus__remove(struct cus *cus, struct cu *cu); void cus__print_error_msg(const char *progname, const struct cus *cus, const char *filename, const int err); struct cu *cus__find_pair(struct cus *cus, const char *name); -struct cu *cus__find_cu_by_name(struct cus *cus, const char *name); struct tag *cus__find_struct_by_name(struct cus *cus, struct cu **cu, const char *name, const int include_decls, type_id_t *id); -struct tag *cus__find_struct_or_union_by_name(struct cus *cus, struct cu **cu, - const char *name, const int include_decls, type_id_t *id); void *cu__tag_alloc(struct cu *cu, size_t size); void cu__tag_free(struct cu *cu, struct tag *tag); struct tag *cu__find_type_by_name(const struct cu *cu, const char *name, const int include_decls, type_id_t *idp); -struct tag *cus__find_type_by_name(struct cus *cus, struct cu **cu, const char *name, - const int include_decls, type_id_t *id); struct function *cus__find_function_at_addr(struct cus *cus, uint64_t addr, struct cu **cu); void cus__for_each_cu(struct cus *cus, int (*iterator)(struct cu *cu, void *cookie), void *cookie, @@ -510,8 +505,6 @@ struct tag *cu__tag(const struct cu *cu, const uint32_t id); struct tag *cu__type(const struct cu *cu, const type_id_t id); struct tag *cu__find_struct_by_name(const struct cu *cu, const char *name, const int include_decls, type_id_t *id); -struct tag *cu__find_struct_or_union_by_name(const struct cu *cu, const char *name, - const int include_decls, type_id_t *id); bool cu__same_build_id(const struct cu *cu, const struct cu *other); void cu__account_inline_expansions(struct cu *cu); int cu__for_all_tags(struct cu *cu, @@ -1530,10 +1523,6 @@ static inline int class__is_declaration(const struct class *cls) return cls->type.declaration; } -const struct class_member *class__find_bit_hole(const struct class *cls, - const struct class_member *trailer, - const uint16_t bit_hole_size); - #define class__for_each_member_from(cls, from, pos) \ pos = list_prepare_entry(from, class__tags(cls), tag.node); \ list_for_each_entry_from(pos, class__tags(cls), tag.node) \ @@ -1605,8 +1594,6 @@ const char *base_type__name(const struct base_type *btype, char *bf, size_t len) size_t base_type__name_to_size(struct base_type *btype, struct cu *cu); -bool base_type__language_defined(struct base_type *bt); - struct array_type { struct tag tag; uint32_t *nr_entries; -- 2.55.0