12754fe60SDimitry Andric //===-- Valgrind.cpp - Implement Valgrind communication ---------*- C++ -*-===// 22754fe60SDimitry Andric // 32754fe60SDimitry Andric // The LLVM Compiler Infrastructure 42754fe60SDimitry Andric // 52754fe60SDimitry Andric // This file is distributed under the University of Illinois Open Source 62754fe60SDimitry Andric // License. See LICENSE.TXT for details. 72754fe60SDimitry Andric // 82754fe60SDimitry Andric //===----------------------------------------------------------------------===// 92754fe60SDimitry Andric // 102754fe60SDimitry Andric // Defines Valgrind communication methods, if HAVE_VALGRIND_VALGRIND_H is 112754fe60SDimitry Andric // defined. If we have valgrind.h but valgrind isn't running, its macros are 122754fe60SDimitry Andric // no-ops. 132754fe60SDimitry Andric // 142754fe60SDimitry Andric //===----------------------------------------------------------------------===// 152754fe60SDimitry Andric 162754fe60SDimitry Andric #include "llvm/Support/Valgrind.h" 172754fe60SDimitry Andric #include "llvm/Config/config.h" 18*7d523365SDimitry Andric #include <cstddef> 192754fe60SDimitry Andric 202754fe60SDimitry Andric #if HAVE_VALGRIND_VALGRIND_H 212754fe60SDimitry Andric #include <valgrind/valgrind.h> 222754fe60SDimitry Andric InitNotUnderValgrind()232754fe60SDimitry Andricstatic bool InitNotUnderValgrind() { 242754fe60SDimitry Andric return !RUNNING_ON_VALGRIND; 252754fe60SDimitry Andric } 262754fe60SDimitry Andric 272754fe60SDimitry Andric // This bool is negated from what we'd expect because code may run before it 282754fe60SDimitry Andric // gets initialized. If that happens, it will appear to be 0 (false), and we 292754fe60SDimitry Andric // want that to cause the rest of the code in this file to run the 302754fe60SDimitry Andric // Valgrind-provided macros. 312754fe60SDimitry Andric static const bool NotUnderValgrind = InitNotUnderValgrind(); 322754fe60SDimitry Andric RunningOnValgrind()332754fe60SDimitry Andricbool llvm::sys::RunningOnValgrind() { 342754fe60SDimitry Andric if (NotUnderValgrind) 352754fe60SDimitry Andric return false; 362754fe60SDimitry Andric return RUNNING_ON_VALGRIND; 372754fe60SDimitry Andric } 382754fe60SDimitry Andric ValgrindDiscardTranslations(const void * Addr,size_t Len)392754fe60SDimitry Andricvoid llvm::sys::ValgrindDiscardTranslations(const void *Addr, size_t Len) { 402754fe60SDimitry Andric if (NotUnderValgrind) 412754fe60SDimitry Andric return; 422754fe60SDimitry Andric 432754fe60SDimitry Andric VALGRIND_DISCARD_TRANSLATIONS(Addr, Len); 442754fe60SDimitry Andric } 452754fe60SDimitry Andric 462754fe60SDimitry Andric #else // !HAVE_VALGRIND_VALGRIND_H 472754fe60SDimitry Andric RunningOnValgrind()482754fe60SDimitry Andricbool llvm::sys::RunningOnValgrind() { 492754fe60SDimitry Andric return false; 502754fe60SDimitry Andric } 512754fe60SDimitry Andric ValgrindDiscardTranslations(const void * Addr,size_t Len)522754fe60SDimitry Andricvoid llvm::sys::ValgrindDiscardTranslations(const void *Addr, size_t Len) { 532754fe60SDimitry Andric } 542754fe60SDimitry Andric 552754fe60SDimitry Andric #endif // !HAVE_VALGRIND_VALGRIND_H 56