Dwarves debugging tools
 help / color / mirror / Atom feed
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


  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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox