addr2line: Make --absolute the default, add --relative option.

Message ID 20220311144910.20892-1-mark@klomp.org
State Committed
Headers
Series addr2line: Make --absolute the default, add --relative option. |

Commit Message

Mark Wielaard March 11, 2022, 2:49 p.m. UTC
  Make --absolute (including the compilation directory in file names)
the default and add a new option --relative to get the previous
default behavior.

https://www.sourceware.org/bugzilla/show_bug.cgi?id=28951

Signed-off-by: Mark Wielaard <mark@klomp.org>
---
 ChangeLog       |  4 ++++
 NEWS            |  3 +++
 src/ChangeLog   |  7 +++++++
 src/addr2line.c | 14 +++++++++++---
 4 files changed, 25 insertions(+), 3 deletions(-)

https://code.wildebeest.org/git/user/mjw/elfutils/commit/?h=addr2line-relative
  

Comments

Mark Wielaard March 14, 2022, 12:06 p.m. UTC | #1
On Fri, 2022-03-11 at 15:49 +0100, Mark Wielaard wrote:
> Make --absolute (including the compilation directory in file names)
> the default and add a new option --relative to get the previous
> default behavior.
> 
> https://www.sourceware.org/bugzilla/show_bug.cgi?id=28951

Pushed,

Mark
  

Patch

diff --git a/ChangeLog b/ChangeLog
index f00db17b..4035dffb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@ 
+2021-03-11  Mark Wielaard  <mark@klomp.org>
+
+	* NEWS: Document new --relative option for addr2line.
+
 2021-12-04  Mark Wielaard  <mark@klomp.org>
 
 	* configure.ac: Add --enable-sanitize-address.
diff --git a/NEWS b/NEWS
index 6be58866..ea74c019 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,9 @@  Version 0.187 after 0.186
 
 debuginfod: Support -C option for connection thread pooling.
 
+addr2line: The -A, --absolute option, which shows file names including
+           the full compilation directory is now the default.  To get the
+           old behavior use the new option --relative.
 
 Version 0.186
 
diff --git a/src/ChangeLog b/src/ChangeLog
index 263e9faa..0e705b7d 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,10 @@ 
+2022-03-11  Mark Wielaard  <mark@klomp.org>
+
+	* addr2line.c (OPT_RELATIVE): New constant.
+	(options): Add --relative.
+	(use_comp_dir): Initialize to true.
+	(parse_opt): Handle OPT_RELATIVE.
+
 2021-12-04  Mark Wielaard  <mark@klomp.org>
 
 	* readelf.c (print_ehdr): Pass sizeof (buf) - 1 to strncpy.
diff --git a/src/addr2line.c b/src/addr2line.c
index 34945046..7c8d3a72 100644
--- a/src/addr2line.c
+++ b/src/addr2line.c
@@ -1,5 +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>
    This file is part of elfutils.
    Written by Ulrich Drepper <drepper@redhat.com>, 2005.
 
@@ -49,7 +50,8 @@  ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
 
 /* Values for the parameters which have no short form.  */
 #define OPT_DEMANGLER 0x100
-#define OPT_PRETTY 0x101  /* 'p' is already used to select the process.  */
+#define OPT_PRETTY    0x101  /* 'p' is already used to select the process.  */
+#define OPT_RELATIVE  0x102  /* 'r' is something else in binutils addr2line.  */
 
 /* Definitions of arguments for argp functions.  */
 static const struct argp_option options[] =
@@ -62,7 +64,7 @@  static const struct argp_option options[] =
   { "addresses", 'a', NULL, 0, N_("Print address before each entry"), 0 },
   { "basenames", 's', NULL, 0, N_("Show only base names of source files"), 0 },
   { "absolute", 'A', NULL, 0,
-    N_("Show absolute file names using compilation directory"), 0 },
+    N_("Show absolute file names using compilation directory (default)"), 0 },
   { "functions", 'f', NULL, 0, N_("Also show function names"), 0 },
   { "symbols", 'S', NULL, 0, N_("Also show symbol or section names"), 0 },
   { "symbols-sections", 'x', NULL, 0, N_("Also show symbol and the section names"), 0 },
@@ -74,6 +76,8 @@  static const struct argp_option options[] =
     N_("Show demangled symbols (ARG is always ignored)"), 0 },
   { "pretty-print", OPT_PRETTY, NULL, 0,
     N_("Print all information on one line, and indent inlines"), 0 },
+  { "relative", OPT_RELATIVE, NULL, 0,
+    N_("Show relative file names without compilation directory"), 0 },
 
   { NULL, 0, NULL, 0, N_("Miscellaneous:"), 0 },
   /* Unsupported options.  */
@@ -111,7 +115,7 @@  static bool print_addresses;
 static bool only_basenames;
 
 /* True if absolute file names based on DW_AT_comp_dir should be shown.  */
-static bool use_comp_dir;
+static bool use_comp_dir = true;
 
 /* True if line flags should be shown.  */
 static bool show_flags;
@@ -236,6 +240,10 @@  parse_opt (int key, char *arg, struct argp_state *state)
       use_comp_dir = true;
       break;
 
+    case OPT_RELATIVE:
+      use_comp_dir = false;
+      break;
+
     case 'f':
       show_functions = true;
       break;