diff options
author | Alexey Samsonov <vonosmas@gmail.com> | 2014-12-02 19:48:40 +0000 |
---|---|---|
committer | Alexey Samsonov <vonosmas@gmail.com> | 2014-12-02 19:48:40 +0000 |
commit | 0c7f6f6156b0169240c40d3a77839cd09929aac4 (patch) | |
tree | 79201d3484d35f850dcf02367ed946aac97ebbc1 /lib/sanitizer_common/sanitizer_common_libcdep.cc | |
parent | a80ff0c4dde117d65c7424b9c104ebe60877e932 (diff) |
Simplify Symbolizer::SymbolizePC() interface.
Return a linked list of AddressInfo objects, instead of using an array of
these objects as an output parameter. This simplifies the code in callers
of this function (especially TSan).
Fix a few memory leaks from internal allocator, when the returned
AddressInfo objects were not properly cleared.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@223145 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/sanitizer_common/sanitizer_common_libcdep.cc')
-rw-r--r-- | lib/sanitizer_common/sanitizer_common_libcdep.cc | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/sanitizer_common/sanitizer_common_libcdep.cc b/lib/sanitizer_common/sanitizer_common_libcdep.cc index 4374f56a8..328ea648e 100644 --- a/lib/sanitizer_common/sanitizer_common_libcdep.cc +++ b/lib/sanitizer_common/sanitizer_common_libcdep.cc @@ -52,16 +52,20 @@ void SetSandboxingCallback(void (*f)()) { void ReportErrorSummary(const char *error_type, StackTrace *stack) { if (!common_flags()->print_summary) return; - AddressInfo ai; #if !SANITIZER_GO if (stack->size > 0 && Symbolizer::GetOrInit()->CanReturnFileLineInfo()) { // Currently, we include the first stack frame into the report summary. // Maybe sometimes we need to choose another frame (e.g. skip memcpy/etc). uptr pc = StackTrace::GetPreviousInstructionPc(stack->trace[0]); - Symbolizer::GetOrInit()->SymbolizePC(pc, &ai, 1); + SymbolizedStack *frame = Symbolizer::GetOrInit()->SymbolizePC(pc); + const AddressInfo &ai = frame->info; + ReportErrorSummary(error_type, ai.file, ai.line, ai.function); + frame->ClearAll(); } -#endif +#else + AddressInfo ai; ReportErrorSummary(error_type, ai.file, ai.line, ai.function); +#endif } } // namespace __sanitizer |