1*9880d681SAndroid Build Coastguard Worker //===-- Valgrind.cpp - Implement Valgrind communication ---------*- C++ -*-===// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker // 10*9880d681SAndroid Build Coastguard Worker // Defines Valgrind communication methods, if HAVE_VALGRIND_VALGRIND_H is 11*9880d681SAndroid Build Coastguard Worker // defined. If we have valgrind.h but valgrind isn't running, its macros are 12*9880d681SAndroid Build Coastguard Worker // no-ops. 13*9880d681SAndroid Build Coastguard Worker // 14*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/Valgrind.h" 17*9880d681SAndroid Build Coastguard Worker #include "llvm/Config/config.h" 18*9880d681SAndroid Build Coastguard Worker #include <cstddef> 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker #if HAVE_VALGRIND_VALGRIND_H 21*9880d681SAndroid Build Coastguard Worker #include <valgrind/valgrind.h> 22*9880d681SAndroid Build Coastguard Worker InitNotUnderValgrind()23*9880d681SAndroid Build Coastguard Workerstatic bool InitNotUnderValgrind() { 24*9880d681SAndroid Build Coastguard Worker return !RUNNING_ON_VALGRIND; 25*9880d681SAndroid Build Coastguard Worker } 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Worker // This bool is negated from what we'd expect because code may run before it 28*9880d681SAndroid Build Coastguard Worker // gets initialized. If that happens, it will appear to be 0 (false), and we 29*9880d681SAndroid Build Coastguard Worker // want that to cause the rest of the code in this file to run the 30*9880d681SAndroid Build Coastguard Worker // Valgrind-provided macros. 31*9880d681SAndroid Build Coastguard Worker static const bool NotUnderValgrind = InitNotUnderValgrind(); 32*9880d681SAndroid Build Coastguard Worker RunningOnValgrind()33*9880d681SAndroid Build Coastguard Workerbool llvm::sys::RunningOnValgrind() { 34*9880d681SAndroid Build Coastguard Worker if (NotUnderValgrind) 35*9880d681SAndroid Build Coastguard Worker return false; 36*9880d681SAndroid Build Coastguard Worker return RUNNING_ON_VALGRIND; 37*9880d681SAndroid Build Coastguard Worker } 38*9880d681SAndroid Build Coastguard Worker ValgrindDiscardTranslations(const void * Addr,size_t Len)39*9880d681SAndroid Build Coastguard Workervoid llvm::sys::ValgrindDiscardTranslations(const void *Addr, size_t Len) { 40*9880d681SAndroid Build Coastguard Worker if (NotUnderValgrind) 41*9880d681SAndroid Build Coastguard Worker return; 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker VALGRIND_DISCARD_TRANSLATIONS(Addr, Len); 44*9880d681SAndroid Build Coastguard Worker } 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Worker #else // !HAVE_VALGRIND_VALGRIND_H 47*9880d681SAndroid Build Coastguard Worker RunningOnValgrind()48*9880d681SAndroid Build Coastguard Workerbool llvm::sys::RunningOnValgrind() { 49*9880d681SAndroid Build Coastguard Worker return false; 50*9880d681SAndroid Build Coastguard Worker } 51*9880d681SAndroid Build Coastguard Worker ValgrindDiscardTranslations(const void * Addr,size_t Len)52*9880d681SAndroid Build Coastguard Workervoid llvm::sys::ValgrindDiscardTranslations(const void *Addr, size_t Len) { 53*9880d681SAndroid Build Coastguard Worker } 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Worker #endif // !HAVE_VALGRIND_VALGRIND_H 56