From: "Mikołaj Piróg" <mikolajpirog@gmail.com>
To: binutils@sourceware.org
Subject: [PATCH] objdump: Implement short name search
Date: Wed, 28 Feb 2024 18:46:18 +0100 [thread overview]
Message-ID: <CAOscM-s9V4+7xqy2JLOAh-ABrWnMLKpQ=txZgimP5LFc-xQaFA@mail.gmail.com> (raw)
[-- Attachment #1.1: Type: text/plain, Size: 883 bytes --]
This patch introduces the "--short-name-search" option to objdump. When
this option is used like so: objdump --disassemble=ns::foo
--short-name-search -C file The objdump will then output disassembled
output for functions that match the name "ns::foo". The current behaviour
of objdump in this context is to match the whole function signature, not
only the name (like so: "ns::foo(int, char const*)"). Option
"--short-name-search" works only in conjunction with demangling ("-C"). The
motivation behind this change is to ease a process of a quick disassembly
of a given function in a binary, since providing the whole function
signature isn't comfortable. I am not particularly happy with the name for
this option, but I couldn't come up with anything better. If the
functionality provided by this patch is desired in objdump, I am happy to
listen for suggestions for a better name.
[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 2984 bytes --]
diff --git a/binutils/objdump.c b/binutils/objdump.c
index 7beb221cb2f..a013eee3c12 100644
--- a/binutils/objdump.c
+++ b/binutils/objdump.c
@@ -138,6 +138,7 @@ static bool extended_color_output = false; /* --visualize-jumps=extended-color.
static int process_links = false; /* --process-links. */
static int show_all_symbols; /* --show-all-symbols. */
static bool decompressed_dumps = false; /* -Z, --decompress. */
+static bool short_name_search = false; /* --short-name-search */
static enum color_selection
{
@@ -272,6 +273,8 @@ usage (FILE *stream, int status)
-D, --disassemble-all Display assembler contents of all sections\n"));
fprintf (stream, _("\
--disassemble=<sym> Display assembler contents from <sym>\n"));
+ fprintf (stream, _("\
+ --short-name-search When searching for <sym>, compare functions names, not signatures\n"));
fprintf (stream, _("\
-S, --source Intermix source code with disassembly\n"));
fprintf (stream, _("\
@@ -488,7 +491,8 @@ enum option_values
#endif
OPTION_SFRAME,
OPTION_VISUALIZE_JUMPS,
- OPTION_DISASSEMBLER_COLOR
+ OPTION_DISASSEMBLER_COLOR,
+ OPTION_SYMBOL_SHORT_NAME_SEARCH
};
static struct option long_options[]=
@@ -543,6 +547,7 @@ static struct option long_options[]=
{"section", required_argument, NULL, 'j'},
{"section-headers", no_argument, NULL, 'h'},
{"sframe", optional_argument, NULL, OPTION_SFRAME},
+ {"short-name-search", no_argument, NULL, OPTION_SYMBOL_SHORT_NAME_SEARCH},
{"show-all-symbols", no_argument, &show_all_symbols, 1},
{"show-raw-insn", no_argument, &show_raw_insn, 1},
{"source", no_argument, NULL, 'S'},
@@ -3905,7 +3910,11 @@ disassemble_section (bfd *abfd, asection *section, void *inf)
if (do_demangle && name[0] != '\0')
{
/* Demangle the name. */
- alloc = bfd_demangle (abfd, name, demangle_flags);
+ if (short_name_search)
+ alloc = bfd_demangle (abfd, name, DMGL_NO_OPTS);
+ else
+ alloc = bfd_demangle (abfd, name, demangle_flags);
+
if (alloc != NULL)
name = alloc;
}
@@ -3923,7 +3932,7 @@ disassemble_section (bfd *abfd, asection *section, void *inf)
(*rel_pp)->address - rel_offset < sym_offset)
++rel_pp;
- if (sym->flags & BSF_FUNCTION)
+ if (sym->flags & BSF_FUNCTION && !(short_name_search && do_demangle))
{
if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
&& ((elf_symbol_type *) sym)->internal_elf_sym.st_size > 0)
@@ -6200,6 +6209,9 @@ main (int argc, char **argv)
dump_sframe_section_name = xstrdup (optarg);
seenflag = true;
break;
+ case OPTION_SYMBOL_SHORT_NAME_SEARCH:
+ short_name_search = true;
+ break;
case 'G':
dump_stab_section_info = true;
seenflag = true;
@@ -6287,6 +6299,5 @@ main (int argc, char **argv)
free (dump_ctf_section_name);
free (dump_ctf_parent_name);
free ((void *) source_comment);
-
return exit_status;
}
next reply other threads:[~2024-02-28 17:46 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-28 17:46 Mikołaj Piróg [this message]
2024-02-29 2:03 ` Alan Modra
2024-02-29 21:29 ` Mikołaj Piróg
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='CAOscM-s9V4+7xqy2JLOAh-ABrWnMLKpQ=txZgimP5LFc-xQaFA@mail.gmail.com' \
--to=mikolajpirog@gmail.com \
--cc=binutils@sourceware.org \
/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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).