asan_stack.cc revision c70fa28caaaec2134f2c2230821fcc0f0d7ac27e
15a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt//===-- asan_stack.cc -----------------------------------------------------===//
25a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt//
35a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt//                     The LLVM Compiler Infrastructure
45a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt//
55a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt// This file is distributed under the University of Illinois Open Source
65a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt// License. See LICENSE.TXT for details.
75a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt//
85a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt//===----------------------------------------------------------------------===//
95a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt//
105a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt// This file is a part of AddressSanitizer, an address sanity checker.
115a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt//
125a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt// Code for ASan stack trace.
135a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt//===----------------------------------------------------------------------===//
145a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#include "asan_internal.h"
155a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#include "asan_flags.h"
165a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#include "asan_stack.h"
175a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt
185a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtnamespace __asan {
195a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt
205a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtstatic bool MaybeCallAsanSymbolize(const void *pc, char *out_buffer,
215a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt                                   int out_size) {
225a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt  return (&__asan_symbolize) ? __asan_symbolize(pc, out_buffer, out_size)
235a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt                             : false;
245a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt}
255a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt
265a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtvoid PrintStack(StackTrace *stack) {
275a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt  stack->PrintStack(stack->trace, stack->size, flags()->symbolize,
285a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt                    flags()->strip_path_prefix, MaybeCallAsanSymbolize);
295a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt}
305a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt
315a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt}  // namespace __asan
325a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt
335a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt// ------------------ Interface -------------- {{{1
345a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt
355a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt// Provide default implementation of __asan_symbolize that does nothing
365a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt// and may be overriden by user if he wants to use his own symbolization.
375a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt// ASan on Windows has its own implementation of this.
385a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#if !defined(_WIN32) && !SANITIZER_SUPPORTS_WEAK_HOOKS
395a1480c7c46c4236d93bfd303dde32062bee04acDmitry ShmidtSANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE NOINLINE
405a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtbool __asan_symbolize(const void *pc, char *out_buffer, int out_size) {
415a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt  return false;
425a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt}
435a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#endif
445a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt