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/addr2line.c | |
| parent | d315bb2d1cdae7f068b3de3969fc469eb6dc7b80 (diff) | |
propagate from branch 'com.redhat.elfutils.roland.pending' (head 1ac619debea0e3ecfd2704e8bdc803c6c893b62a)
to branch 'com.redhat.elfutils' (head 830d38d0a2ce24911160a871963f093209e69d9e)
Diffstat (limited to 'src/addr2line.c')
| -rw-r--r-- | src/addr2line.c | 24 |
1 files changed, 22 insertions, 2 deletions
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"); |
