diff --git a/Src/Base/AMReX_BLBackTrace.cpp b/Src/Base/AMReX_BLBackTrace.cpp index 4d617fc421e..4a4d527dbb1 100644 --- a/Src/Base/AMReX_BLBackTrace.cpp +++ b/Src/Base/AMReX_BLBackTrace.cpp @@ -257,7 +257,7 @@ BLBackTrace::print_backtrace_info (FILE* f) try_addr2line = true; } if (try_addr2line && amrex::system::call_addr2line && have_addr2line && - !amrex::system::exename.empty() && stack_ptr_not_null) + !amrex::system::exename.empty()) { addr2line_result.clear(); const std::string line = strings[i]; @@ -282,7 +282,7 @@ BLBackTrace::print_backtrace_info (FILE* f) addr2line_result.clear(); } } - if (addr2line_result.empty()) { + if (addr2line_result.empty() && stack_ptr_not_null) { char print_buff[32]; std::snprintf(print_buff,sizeof(print_buff),"%p",bt_buffer[i]); std::string full_cmd = cmd; @@ -309,28 +309,30 @@ BLBackTrace::print_backtrace_info (FILE* f) for (int i = 0; i < nentries; ++i) { Dl_info info; - const bool stack_ptr_not_null = (bt_buffer[i] != nullptr); - if (dladdr(bt_buffer[i], &info)) + if (bt_buffer[i] != nullptr) { - std::string line; - if (amrex::system::call_addr2line && have_atos && stack_ptr_not_null) { - char print_buff[32]; - std::snprintf(print_buff,sizeof(print_buff),"%p",bt_buffer[i]); - const std::string full_cmd = cmd + " " + print_buff; - line = run_command(full_cmd); - } - if (line.empty()) { - int status; - char * demangled_name = abi::__cxa_demangle(info.dli_sname, nullptr, 0, &status); - if (status == 0) { - line += demangled_name; - } else { - line += info.dli_fname; + if (dladdr(bt_buffer[i], &info)) + { + std::string line; + if (amrex::system::call_addr2line && have_atos) { + char print_buff[32]; + std::snprintf(print_buff,sizeof(print_buff),"%p",bt_buffer[i]); + const std::string full_cmd = cmd + " " + print_buff; + line = run_command(full_cmd); + } + if (line.empty()) { + int status; + char * demangled_name = abi::__cxa_demangle(info.dli_sname, nullptr, 0, &status); + if (status == 0) { + line += demangled_name; + } else { + line += info.dli_fname; + } + line += '\n'; + std::free(demangled_name); } - line += '\n'; - std::free(demangled_name); + std::fprintf(f, "%2d: %s\n", i, line.c_str()); } - std::fprintf(f, "%2d: %s\n", i, line.c_str()); } } diff --git a/Tools/GNUMake/comps/llvm.mak b/Tools/GNUMake/comps/llvm.mak index a1822a3f7da..23f659f597b 100644 --- a/Tools/GNUMake/comps/llvm.mak +++ b/Tools/GNUMake/comps/llvm.mak @@ -134,5 +134,7 @@ endif endif ifeq ($(FSANITIZER),TRUE) - override XTRALIBS += -lubsan + ifneq ($(shell uname),Darwin) + override XTRALIBS += -lubsan + endif endif