|
@@ -8,6 +8,8 @@
|
|
|
#include "util/util.h"
|
|
|
#include "util/debug.h"
|
|
|
|
|
|
+#include "symbol.h"
|
|
|
+
|
|
|
#ifdef HAVE_LIBBFD_SUPPORT
|
|
|
|
|
|
/*
|
|
@@ -250,7 +252,8 @@ void dso__free_a2l(struct dso *dso __maybe_unused)
|
|
|
*/
|
|
|
#define A2L_FAIL_LIMIT 123
|
|
|
|
|
|
-char *get_srcline(struct dso *dso, unsigned long addr)
|
|
|
+char *get_srcline(struct dso *dso, unsigned long addr, struct symbol *sym,
|
|
|
+ bool show_sym)
|
|
|
{
|
|
|
char *file = NULL;
|
|
|
unsigned line = 0;
|
|
@@ -289,7 +292,11 @@ out:
|
|
|
dso->has_srcline = 0;
|
|
|
dso__free_a2l(dso);
|
|
|
}
|
|
|
- if (asprintf(&srcline, "%s[%lx]", dso->short_name, addr) < 0)
|
|
|
+ if (sym) {
|
|
|
+ if (asprintf(&srcline, "%s+%ld", show_sym ? sym->name : "",
|
|
|
+ addr - sym->start) < 0)
|
|
|
+ return SRCLINE_UNKNOWN;
|
|
|
+ } else if (asprintf(&srcline, "%s[%lx]", dso->short_name, addr) < 0)
|
|
|
return SRCLINE_UNKNOWN;
|
|
|
return srcline;
|
|
|
}
|