From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Alan Maguire <alan.maguire@oracle.com>
Cc: Jiri Olsa <jolsa@kernel.org>,
Clark Williams <williams@redhat.com>,
dwarves@vger.kernel.org, bpf@vger.kernel.org,
Andrii Nakryiko <andrii@kernel.org>,
Yonghong Song <yonghong.song@linux.dev>,
Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: [PATCH 27/31] dwarves: Remove 6 dead functions found via coverage analysis
Date: Wed, 29 Jul 2026 16:07:27 -0300 [thread overview]
Message-ID: <20260729190733.72876-28-acme@kernel.org> (raw)
In-Reply-To: <20260729190733.72876-1-acme@kernel.org>
From: Arnaldo Carvalho de Melo <acme@redhat.com>
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 <acme@redhat.com>
---
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
next prev parent reply other threads:[~2026-07-29 19:08 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-29 19:07 [PATCHES 00/31] pahole: Bug fixes and small improvements Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 01/31] cmake: Update minimum required version from 3.5 to 3.10 Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 02/31] Fix -Wsign-compare warnings across the codebase Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 03/31] btf_encoder: Fix interior pointer free and missing NULL check Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 04/31] dwarves: Fix missing list head initialization in type__clone_members Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 05/31] pahole: Fix instance memory leak on early returns in prototype__stdio_fprintf_value Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 06/31] ctf_loader, libctf: Fix error path resource leaks Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 07/31] dwarves: Don't search for holes before member byte sizes are cached Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 08/31] dwarf_loader: Allocate type_dcu via dwarf_cu__new to fix dangling stack pointer Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 09/31] dwarf_loader: Fix annotation failure leaks in variable and typedef creation Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 10/31] btf_encoder: Use btf_encoder__tag_type() for all type ID computations Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 11/31] pahole: Fix --errno typo that decrements instead of negating Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 12/31] dwarves: Fix heap buffer overflow in languages__parse realloc Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 13/31] btf_encoder: Fix early cleanup crashes in btf_encoder__new/delete Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 14/31] btf_encoder, libctf: Add elf_strptr NULL checks and fix kfunc bounds Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 15/31] dwarf_loader: Fix --fixup_silly_bitfields condition check Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 16/31] dwarf_loader: Skip libdw__lock when elfutils is built thread-safe Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 17/31] dwarf_loader: Fix data race in tag__init() decl_file string cache Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 18/31] pahole: Fix parse_btf_features("all") being a silent no-op Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 19/31] dwarves: Fix variable shadowing in __cus__find_struct_by_name() Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 20/31] dutil: Add exec_objcopy() shell-injection-safe helper Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 21/31] btf_encoder: Fall back to objcopy when llvm-objcopy is not available Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 22/31] dwarf_loader, btf_loader: Replace stale FIXME/XXX comments with explanations Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 23/31] pahole: Skip inline expansions during BTF encoding Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 24/31] pahole: Use fseek for seekable files in --prettify and --seek_bytes Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 25/31] pahole: Guard pipe_seek() against negative offsets Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 26/31] gobuffer: Remove 5 dead functions found via coverage analysis Arnaldo Carvalho de Melo
2026-07-29 19:07 ` Arnaldo Carvalho de Melo [this message]
2026-07-29 19:07 ` [PATCH 28/31] pfunct, dwarves_fprintf: Mark file-local functions as static Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 29/31] btf_encoder: Fix multi-dimensional array encoding Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 30/31] btf_loader: Fix multi-dimensional array loading Arnaldo Carvalho de Melo
2026-07-29 19:07 ` [PATCH 31/31] btfdiff: Remove --flat_arrays now that pahole encodes multi dim arrays in BTF Arnaldo Carvalho de Melo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260729190733.72876-28-acme@kernel.org \
--to=acme@kernel.org \
--cc=acme@redhat.com \
--cc=alan.maguire@oracle.com \
--cc=andrii@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=dwarves@vger.kernel.org \
--cc=jolsa@kernel.org \
--cc=williams@redhat.com \
--cc=yonghong.song@linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.