* [PATCH] addr2line: -C should not try to handle optional (ignored) argument
@ 2023-01-23 9:11 Mark Wielaard
2023-01-30 21:04 ` Mark Wielaard
0 siblings, 1 reply; 3+ messages in thread
From: Mark Wielaard @ 2023-01-23 9:11 UTC (permalink / raw)
To: elfutils-devel; +Cc: Mark Wielaard
The --demangle option takes an option (ignored) argument. Since -C
is the short option of --demangle it also takes that optional
argument. But that means that something like -Cfi is like -C got
fi as argument, while the user expects -Cfi to be like -C -f -i.
Separate the --demangle and -C options. --demangle still takes
an optional (ignored) argument, but -C doesn't take any arguments
so -Cfi acts the same as -fiC.
Also fix --target, -b, so that it is properly ignored (and not
accidentially enables demangling).
Signed-off-by: Mark Wielaard <mark@klomp.org>
---
src/ChangeLog | 5 ++
src/addr2line.c | 8 ++-
tests/ChangeLog | 6 +++
tests/Makefile.am | 2 +
tests/run-addr2line-C-test.sh | 91 +++++++++++++++++++++++++++++++++++
5 files changed, 110 insertions(+), 2 deletions(-)
create mode 100755 tests/run-addr2line-C-test.sh
diff --git a/src/ChangeLog b/src/ChangeLog
index 0490088e..915494f2 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2023-01-22 Mark Wielaard <mark@klomp.org>
+
+ * addr2line.c (options): Separate --demangle and -C.
+ (parse_opt): Ignore 'b'.
+
2023-01-10 Mark Wielaard <mark@klomp.org>
* readelf.c (get_debug_elf_data): New function.
diff --git a/src/addr2line.c b/src/addr2line.c
index 7768b266..d902d791 100644
--- a/src/addr2line.c
+++ b/src/addr2line.c
@@ -1,6 +1,6 @@
/* Locate source files and line information for given addresses
Copyright (C) 2005-2010, 2012, 2013, 2015 Red Hat, Inc.
- Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org>
+ Copyright (C) 2022, 2023 Mark J. Wielaard <mark@klomp.org>
This file is part of elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2005.
@@ -71,8 +71,9 @@ static const struct argp_option options[] =
{ "inlines", 'i', NULL, 0,
N_("Show all source locations that caused inline expansion of subroutines at the address."),
0 },
- { "demangle", 'C', "ARG", OPTION_ARG_OPTIONAL,
+ { "demangle", OPT_DEMANGLER, "ARG", OPTION_ARG_OPTIONAL,
N_("Show demangled symbols (ARG is always ignored)"), 0 },
+ { NULL, 'C', NULL, 0, N_("Show demangled symbols"), 0 },
{ "pretty-print", OPT_PRETTY, NULL, 0,
N_("Print all information on one line, and indent inlines"), 0 },
{ "relative", OPT_RELATIVE, NULL, 0,
@@ -225,7 +226,10 @@ parse_opt (int key, char *arg, struct argp_state *state)
print_addresses = true;
break;
+ /* Ignore --target=bfdname. */
case 'b':
+ break;
+
case 'C':
case OPT_DEMANGLER:
demangle = true;
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 66807856..14b901b9 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,9 @@
+2023-01-19 Mark Wielaard <mark@klomp.org>
+
+ * run-addr2line-C-test.sh: New test.
+ * Makefile.am (TESTS): Add run-addr2line-C-test.sh.
+ (EXTRA_DIST): Likewise.
+
2023-01-19 Mark Wielaard <mark@klomp.org>
* run-debuginfod-query-retry.sh: Use libdebuginfod.so.1 instead
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 71b19601..fa7c30ef 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -151,6 +151,7 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \
run-readelf-variant.sh run-readelf-fat-lto.sh \
run-dwfl-report-elf-align.sh run-addr2line-test.sh \
run-dwfl-report-offline-memory.sh \
+ run-addr2line-C-test.sh \
run-addr2line-i-test.sh run-addr2line-i-lex-test.sh \
run-addr2line-i-demangle-test.sh run-addr2line-alt-debugpath.sh \
run-varlocs.sh run-exprlocs.sh run-varlocs-vars.sh run-funcretval.sh \
@@ -425,6 +426,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
testfile-dwfl-report-elf-align-shlib.so.bz2 \
testfilenolines.bz2 test-core-lib.so.bz2 test-core.core.bz2 \
test-core.exec.bz2 run-addr2line-test.sh \
+ run-addr2line-C-test.sh \
run-addr2line-i-test.sh testfile-inlines.bz2 \
run-addr2line-i-lex-test.sh testfile-lex-inlines.bz2 \
run-addr2line-i-demangle-test.sh run-addr2line-alt-debugpath.sh \
diff --git a/tests/run-addr2line-C-test.sh b/tests/run-addr2line-C-test.sh
new file mode 100755
index 00000000..8c63d78d
--- /dev/null
+++ b/tests/run-addr2line-C-test.sh
@@ -0,0 +1,91 @@
+#! /bin/sh
+# Copyright (C) 2013 Red Hat, Inc.
+# Copyright (C) 2023 Mark J. Wielaard <mark@klomp.org>
+# This file is part of elfutils.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# elfutils is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. $srcdir/test-subr.sh
+
+# See run-addr2line-i-test.sh
+testfiles testfile-inlines
+
+# Three variants -Cfi, -fCi -fiC all the same (with demangle)
+testrun_compare ${abs_top_builddir}/src/addr2line --pretty-print -a -Cfi -e testfile-inlines 0x00000000000005a0 0x00000000000005a1 0x00000000000005b0 0x00000000000005b1 0x00000000000005c0 0x00000000000005d0 0x00000000000005e0 0x00000000000005e1 0x00000000000005f0 0x00000000000005f1 0x00000000000005f2 <<\EOF
+0x00000000000005a0: foobar at /tmp/x.cpp:5
+0x00000000000005a1: foobar at /tmp/x.cpp:6
+0x00000000000005b0: fubar at /tmp/x.cpp:10
+0x00000000000005b1: fubar at /tmp/x.cpp:11
+0x00000000000005c0: foobar at /tmp/x.cpp:5
+ (inlined by) bar at /tmp/x.cpp:15
+0x00000000000005d0: fubar at /tmp/x.cpp:10
+ (inlined by) baz at /tmp/x.cpp:20
+0x00000000000005e0: foobar at /tmp/x.cpp:5
+ (inlined by) bar at /tmp/x.cpp:15
+ (inlined by) foo() at /tmp/x.cpp:25
+0x00000000000005e1: fubar at /tmp/x.cpp:10
+ (inlined by) baz at /tmp/x.cpp:20
+ (inlined by) foo() at /tmp/x.cpp:26
+0x00000000000005f0: fu() at /tmp/x.cpp:31
+0x00000000000005f1: fubar at /tmp/x.cpp:10
+ (inlined by) fu() at /tmp/x.cpp:32
+0x00000000000005f2: foobar at /tmp/x.cpp:5
+ (inlined by) fu() at /tmp/x.cpp:33
+EOF
+
+testrun_compare ${abs_top_builddir}/src/addr2line --pretty-print -a -fCi -e testfile-inlines 0x00000000000005a0 0x00000000000005a1 0x00000000000005b0 0x00000000000005b1 0x00000000000005c0 0x00000000000005d0 0x00000000000005e0 0x00000000000005e1 0x00000000000005f0 0x00000000000005f1 0x00000000000005f2 <<\EOF
+0x00000000000005a0: foobar at /tmp/x.cpp:5
+0x00000000000005a1: foobar at /tmp/x.cpp:6
+0x00000000000005b0: fubar at /tmp/x.cpp:10
+0x00000000000005b1: fubar at /tmp/x.cpp:11
+0x00000000000005c0: foobar at /tmp/x.cpp:5
+ (inlined by) bar at /tmp/x.cpp:15
+0x00000000000005d0: fubar at /tmp/x.cpp:10
+ (inlined by) baz at /tmp/x.cpp:20
+0x00000000000005e0: foobar at /tmp/x.cpp:5
+ (inlined by) bar at /tmp/x.cpp:15
+ (inlined by) foo() at /tmp/x.cpp:25
+0x00000000000005e1: fubar at /tmp/x.cpp:10
+ (inlined by) baz at /tmp/x.cpp:20
+ (inlined by) foo() at /tmp/x.cpp:26
+0x00000000000005f0: fu() at /tmp/x.cpp:31
+0x00000000000005f1: fubar at /tmp/x.cpp:10
+ (inlined by) fu() at /tmp/x.cpp:32
+0x00000000000005f2: foobar at /tmp/x.cpp:5
+ (inlined by) fu() at /tmp/x.cpp:33
+EOF
+
+testrun_compare ${abs_top_builddir}/src/addr2line --pretty-print -a -fiC -e testfile-inlines 0x00000000000005a0 0x00000000000005a1 0x00000000000005b0 0x00000000000005b1 0x00000000000005c0 0x00000000000005d0 0x00000000000005e0 0x00000000000005e1 0x00000000000005f0 0x00000000000005f1 0x00000000000005f2 <<\EOF
+0x00000000000005a0: foobar at /tmp/x.cpp:5
+0x00000000000005a1: foobar at /tmp/x.cpp:6
+0x00000000000005b0: fubar at /tmp/x.cpp:10
+0x00000000000005b1: fubar at /tmp/x.cpp:11
+0x00000000000005c0: foobar at /tmp/x.cpp:5
+ (inlined by) bar at /tmp/x.cpp:15
+0x00000000000005d0: fubar at /tmp/x.cpp:10
+ (inlined by) baz at /tmp/x.cpp:20
+0x00000000000005e0: foobar at /tmp/x.cpp:5
+ (inlined by) bar at /tmp/x.cpp:15
+ (inlined by) foo() at /tmp/x.cpp:25
+0x00000000000005e1: fubar at /tmp/x.cpp:10
+ (inlined by) baz at /tmp/x.cpp:20
+ (inlined by) foo() at /tmp/x.cpp:26
+0x00000000000005f0: fu() at /tmp/x.cpp:31
+0x00000000000005f1: fubar at /tmp/x.cpp:10
+ (inlined by) fu() at /tmp/x.cpp:32
+0x00000000000005f2: foobar at /tmp/x.cpp:5
+ (inlined by) fu() at /tmp/x.cpp:33
+EOF
+
+exit 0
--
2.31.1
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] addr2line: -C should not try to handle optional (ignored) argument
2023-01-23 9:11 [PATCH] addr2line: -C should not try to handle optional (ignored) argument Mark Wielaard
@ 2023-01-30 21:04 ` Mark Wielaard
2023-02-03 9:02 ` Martin Liška
0 siblings, 1 reply; 3+ messages in thread
From: Mark Wielaard @ 2023-01-30 21:04 UTC (permalink / raw)
To: elfutils-devel
Hi,
On Mon, Jan 23, 2023 at 10:11:28AM +0100, Mark Wielaard wrote:
> The --demangle option takes an option (ignored) argument. Since -C
> is the short option of --demangle it also takes that optional
> argument. But that means that something like -Cfi is like -C got
> fi as argument, while the user expects -Cfi to be like -C -f -i.
>
> Separate the --demangle and -C options. --demangle still takes
> an optional (ignored) argument, but -C doesn't take any arguments
> so -Cfi acts the same as -fiC.
>
> Also fix --target, -b, so that it is properly ignored (and not
> accidentially enables demangling).
Pushed.
Cheers,
Mark
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] addr2line: -C should not try to handle optional (ignored) argument
2023-01-30 21:04 ` Mark Wielaard
@ 2023-02-03 9:02 ` Martin Liška
0 siblings, 0 replies; 3+ messages in thread
From: Martin Liška @ 2023-02-03 9:02 UTC (permalink / raw)
To: Mark Wielaard, elfutils-devel
On 1/30/23 22:04, Mark Wielaard wrote:
> Hi,
>
> On Mon, Jan 23, 2023 at 10:11:28AM +0100, Mark Wielaard wrote:
>> The --demangle option takes an option (ignored) argument. Since -C
>> is the short option of --demangle it also takes that optional
>> argument. But that means that something like -Cfi is like -C got
>> fi as argument, while the user expects -Cfi to be like -C -f -i.
>>
>> Separate the --demangle and -C options. --demangle still takes
>> an optional (ignored) argument, but -C doesn't take any arguments
>> so -Cfi acts the same as -fiC.
>>
>> Also fix --target, -b, so that it is properly ignored (and not
>> accidentially enables demangling).
>
> Pushed.
>
> Cheers,
>
> Mark
Hi.
It caused https://sourceware.org/bugzilla/show_bug.cgi?id=30072 for me.
Can you please take a look?
Thanks,
Martin
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2023-02-03 9:02 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-23 9:11 [PATCH] addr2line: -C should not try to handle optional (ignored) argument Mark Wielaard
2023-01-30 21:04 ` Mark Wielaard
2023-02-03 9:02 ` Martin Liška
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).