diff options
author | Martin Willi <martin@revosec.ch> | 2013-04-17 17:45:25 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2013-05-06 15:15:24 +0200 |
commit | 29324299feeb9cd1d662a9db9b9c2061ff4c42ba (patch) | |
tree | d95d7b192047f7365aa264711bb43a689d5d465e /src | |
parent | 83714577a9c99c9971ce2d3968ab773b37f4ea5b (diff) | |
download | strongswan-29324299feeb9cd1d662a9db9b9c2061ff4c42ba.tar.bz2 strongswan-29324299feeb9cd1d662a9db9b9c2061ff4c42ba.tar.xz |
backtrace: use atos instead of addr2line on OS X to resolve source lines
Diffstat (limited to 'src')
-rw-r--r-- | src/libstrongswan/utils/backtrace.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/libstrongswan/utils/backtrace.c b/src/libstrongswan/utils/backtrace.c index dd2be7a0a..820dba44b 100644 --- a/src/libstrongswan/utils/backtrace.c +++ b/src/libstrongswan/utils/backtrace.c @@ -299,7 +299,7 @@ static bfd_entry_t *get_bfd_entry(char *filename) /** * Print the source file with line number to file, libbfd variant */ -static void print_sourceline(FILE *file, char *filename, void *ptr) +static void print_sourceline(FILE *file, char *filename, void *ptr, void *base) { bfd_entry_t *entry; bfd_find_data_t data = { @@ -334,13 +334,20 @@ void backtrace_deinit() {} /** * Print the source file with line number to file, slow addr2line variant */ -static void print_sourceline(FILE *file, char *filename, void *ptr) +static void print_sourceline(FILE *file, char *filename, void *ptr, void* base) { char buf[1024]; FILE *output; int c, i = 0; +#ifdef __APPLE__ + snprintf(buf, sizeof(buf), "atos -o %s -l %p %p 2>&1 | tail -n1", + filename, base, ptr); +#else /* !__APPLE__ */ snprintf(buf, sizeof(buf), "addr2line -e %s %p", filename, ptr); +#endif /* __APPLE__ */ + + output = popen(buf, "r"); if (output) { @@ -410,7 +417,8 @@ METHOD(backtrace_t, log_, void, } if (detailed && info.dli_fname[0]) { - print_sourceline(file, (char*)info.dli_fname, ptr); + print_sourceline(file, (char*)info.dli_fname, + ptr, info.dli_fbase); } } else |