public inbox for elfutils@sourceware.org
 help / color / mirror / Atom feed
* [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).