summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorUlrich Drepper <[email protected]>2006-07-12 07:46:03 +0000
committerUlrich Drepper <[email protected]>2006-07-12 07:46:03 +0000
commite1812e1d90090450e3d93be56a487e2f11affced (patch)
treebb559d3e55470fd66019ca5a8e4d4650a19f06da /src
parentd315bb2d1cdae7f068b3de3969fc469eb6dc7b80 (diff)
propagate from branch 'com.redhat.elfutils.roland.pending' (head 1ac619debea0e3ecfd2704e8bdc803c6c893b62a)
to branch 'com.redhat.elfutils' (head 830d38d0a2ce24911160a871963f093209e69d9e)
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog7
-rw-r--r--src/addr2line.c24
2 files changed, 29 insertions, 2 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 7ac79785..3432dce6 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -45,6 +45,13 @@
* Makefile.am: Add hacks to create dependency files for non-generic
linker.
+2006-06-28 Roland McGrath <[email protected]>
+
+ * addr2line.c (use_comp_dir): New variable.
+ (options, parse_opt): Grok -A/--absolute to set it.
+ (handle_address): If set, prepend dwfl_line_comp_dir results to
+ relative file names.
+
2006-06-12 Ulrich Drepper <[email protected]>
* ldgeneric.c (ld_generic_generate_sections): Don't create .interp
diff --git a/src/addr2line.c b/src/addr2line.c
index 1729058e..c849ec79 100644
--- a/src/addr2line.c
+++ b/src/addr2line.c
@@ -63,6 +63,8 @@ static const struct argp_option options[] =
{
{ NULL, 0, NULL, 0, N_("Output Selection:"), 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 },
{ "functions", 'f', NULL, 0, N_("Additional show function names"), 0 },
{ NULL, 0, NULL, 0, N_("Miscellaneous:"), 0 },
@@ -99,6 +101,9 @@ static void handle_address (GElf_Addr addr, Dwfl *dwfl);
/* True if only base names of files should be shown. */
static bool only_basenames;
+/* True if absolute file names based on DW_AT_comp_dir should be shown. */
+static bool use_comp_dir;
+
/* True if function names should be shown. */
static bool show_functions;
@@ -207,6 +212,10 @@ parse_opt (int key, char *arg __attribute__ ((unused)),
only_basenames = true;
break;
+ case 'A':
+ use_comp_dir = true;
+ break;
+
case 'f':
show_functions = true;
break;
@@ -307,13 +316,24 @@ handle_address (GElf_Addr addr, Dwfl *dwfl)
if (line != NULL && (src = dwfl_lineinfo (line, &addr, &lineno, &linecol,
NULL, NULL)) != NULL)
{
+ const char *comp_dir = "";
+ const char *comp_dir_sep = "";
+
if (only_basenames)
src = basename (src);
+ else if (use_comp_dir && src[0] != '/')
+ {
+ comp_dir = dwfl_line_comp_dir (line);
+ if (comp_dir != NULL)
+ comp_dir_sep = "/";
+ }
if (linecol != 0)
- printf ("%s:%d:%d\n", src, lineno, linecol);
+ printf ("%s%s%s:%d:%d\n",
+ comp_dir, comp_dir_sep, src, lineno, linecol);
else
- printf ("%s:%d\n", src, lineno);
+ printf ("%s%s%s:%d\n",
+ comp_dir, comp_dir_sep, src, lineno);
}
else
puts ("??:0");