1218885Sdim//===-- Valgrind.cpp - Implement Valgrind communication ---------*- C++ -*-===// 2218885Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6218885Sdim// 7218885Sdim//===----------------------------------------------------------------------===// 8218885Sdim// 9218885Sdim// Defines Valgrind communication methods, if HAVE_VALGRIND_VALGRIND_H is 10218885Sdim// defined. If we have valgrind.h but valgrind isn't running, its macros are 11218885Sdim// no-ops. 12218885Sdim// 13218885Sdim//===----------------------------------------------------------------------===// 14218885Sdim 15218885Sdim#include "llvm/Support/Valgrind.h" 16218885Sdim#include "llvm/Config/config.h" 17296417Sdim#include <cstddef> 18218885Sdim 19218885Sdim#if HAVE_VALGRIND_VALGRIND_H 20218885Sdim#include <valgrind/valgrind.h> 21218885Sdim 22218885Sdimstatic bool InitNotUnderValgrind() { 23218885Sdim return !RUNNING_ON_VALGRIND; 24218885Sdim} 25218885Sdim 26218885Sdim// This bool is negated from what we'd expect because code may run before it 27218885Sdim// gets initialized. If that happens, it will appear to be 0 (false), and we 28218885Sdim// want that to cause the rest of the code in this file to run the 29218885Sdim// Valgrind-provided macros. 30218885Sdimstatic const bool NotUnderValgrind = InitNotUnderValgrind(); 31218885Sdim 32218885Sdimbool llvm::sys::RunningOnValgrind() { 33218885Sdim if (NotUnderValgrind) 34218885Sdim return false; 35218885Sdim return RUNNING_ON_VALGRIND; 36218885Sdim} 37218885Sdim 38218885Sdimvoid llvm::sys::ValgrindDiscardTranslations(const void *Addr, size_t Len) { 39218885Sdim if (NotUnderValgrind) 40218885Sdim return; 41218885Sdim 42218885Sdim VALGRIND_DISCARD_TRANSLATIONS(Addr, Len); 43218885Sdim} 44218885Sdim 45218885Sdim#else // !HAVE_VALGRIND_VALGRIND_H 46218885Sdim 47218885Sdimbool llvm::sys::RunningOnValgrind() { 48218885Sdim return false; 49218885Sdim} 50218885Sdim 51218885Sdimvoid llvm::sys::ValgrindDiscardTranslations(const void *Addr, size_t Len) { 52218885Sdim} 53218885Sdim 54218885Sdim#endif // !HAVE_VALGRIND_VALGRIND_H 55