diff options
Diffstat (limited to 'compiler-rt/lib/asan/asan_stack.cc')
-rw-r--r-- | compiler-rt/lib/asan/asan_stack.cc | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/compiler-rt/lib/asan/asan_stack.cc b/compiler-rt/lib/asan/asan_stack.cc index 1c60565e85a..38677d9ba9d 100644 --- a/compiler-rt/lib/asan/asan_stack.cc +++ b/compiler-rt/lib/asan/asan_stack.cc @@ -46,14 +46,20 @@ void AsanStackTrace::PrintStack(uptr *addr, uptr size) { AddressInfo addr_frames[64]; uptr addr_frames_num = 0; if (FLAG_symbolize) { - addr_frames_num = SymbolizeCode(pc, addr_frames, + bool last_frame = (i == size - 1) || !addr[i + 1]; + addr_frames_num = SymbolizeCode(pc - !last_frame, addr_frames, ASAN_ARRAY_SIZE(addr_frames)); } if (addr_frames_num > 0) { for (uptr j = 0; j < addr_frames_num; j++) { AddressInfo &info = addr_frames[j]; AsanPrintf(" #%zu 0x%zx", frame_num, pc); - if (info.module) { + if (info.function) { + AsanPrintf(" %s", info.function); + } + if (info.file) { + AsanPrintf(" %s:%d:%d", info.file, info.line, info.column); + } else if (info.module) { AsanPrintf(" (%s+0x%zx)", info.module, info.module_offset); } AsanPrintf("\n"); |