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