The recent change to use elfutils made these conditions almost identical.
Signed-off-by: Peter Hutterer <[email protected]>
---
os/backtrace.c | 29 +++++++++++------------------
1 file changed, 11 insertions(+), 18 deletions(-)
diff --git a/os/backtrace.c b/os/backtrace.c
index acf110a..c3a31bc 100644
--- a/os/backtrace.c
+++ b/os/backtrace.c
@@ -134,32 +134,25 @@ xorg_backtrace(void)
size = backtrace(array, BT_SIZE);
for (i = 0; i < size; i++) {
int rc = dladdr(array[i], &info);
+ const char *name;
+ unsigned int addr;
if (rc == 0) {
ErrorFSigSafe("%u: ?? [%p]\n", i, array[i]);
continue;
}
mod = (info.dli_fname && *info.dli_fname) ? info.dli_fname : "(vdso)";
- if (info.dli_saddr)
- ErrorFSigSafe(
- "%u: %s (%s+0x%x) [%p]\n",
- i,
- mod,
- info.dli_sname,
- (unsigned int)((char *) array[i] -
- (char *) info.dli_saddr),
- array[i]);
+
+ if (info.dli_saddr) {
+ name = info.dli_sname;
+ addr = (unsigned int)((char *) array[i] - (char *) info.dli_saddr);
+ }
else {
- const char *name = symbol_name(array[i], info.dli_fbase);
- ErrorFSigSafe(
- "%u: %s (%s+0x%x) [%p]\n",
- i,
- mod,
- name,
- (unsigned int)((char *) array[i] -
- (char *) info.dli_fbase),
- array[i]);
+ name = symbol_name(array[i], info.dli_fbase);
+ addr = (unsigned int)((char *) array[i] - (char *) info.dli_fbase);
}
+
+ ErrorFSigSafe("%u: %s (%s+0x%x) [%p]\n", i, mod, name, addr, array[i]);
}
ErrorFSigSafe("\n");
}
--
1.8.3.1
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel