diff options
| author | Ulrich Drepper <[email protected]> | 2006-07-12 07:46:03 +0000 |
|---|---|---|
| committer | Ulrich Drepper <[email protected]> | 2006-07-12 07:46:03 +0000 |
| commit | e1812e1d90090450e3d93be56a487e2f11affced (patch) | |
| tree | bb559d3e55470fd66019ca5a8e4d4650a19f06da /src | |
| parent | d315bb2d1cdae7f068b3de3969fc469eb6dc7b80 (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/ChangeLog | 7 | ||||
| -rw-r--r-- | src/addr2line.c | 24 |
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"); |
