11d82e19fSLang Hames //===- debug.h - Debugging output utilities ---------------------*- C++ -*-===// 21d82e19fSLang Hames // 31d82e19fSLang Hames // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 41d82e19fSLang Hames // See https://llvm.org/LICENSE.txt for license information. 51d82e19fSLang Hames // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 61d82e19fSLang Hames // 71d82e19fSLang Hames //===----------------------------------------------------------------------===// 81d82e19fSLang Hames // 91d82e19fSLang Hames // This file is a part of the ORC runtime support library. 101d82e19fSLang Hames // 111d82e19fSLang Hames //===----------------------------------------------------------------------===// 121d82e19fSLang Hames 131d82e19fSLang Hames #ifndef ORC_RT_DEBUG_H 141d82e19fSLang Hames #define ORC_RT_DEBUG_H 151d82e19fSLang Hames 161d82e19fSLang Hames #include <atomic> 171d82e19fSLang Hames 181d82e19fSLang Hames #ifndef NDEBUG 191d82e19fSLang Hames 20*3e04ad42SLang Hames namespace orc_rt { 211d82e19fSLang Hames 221d82e19fSLang Hames extern std::atomic<const char *> DebugTypes; 231d82e19fSLang Hames extern char DebugTypesAll; 241d82e19fSLang Hames extern char DebugTypesNone; 251d82e19fSLang Hames 261d82e19fSLang Hames const char *initializeDebug(); 271d82e19fSLang Hames bool debugTypeEnabled(const char *Type, const char *Types); 281d82e19fSLang Hames void printdbg(const char *format, ...); 291d82e19fSLang Hames 30*3e04ad42SLang Hames } // namespace orc_rt 311d82e19fSLang Hames 321d82e19fSLang Hames #define ORC_RT_DEBUG_WITH_TYPE(TYPE, X) \ 331d82e19fSLang Hames do { \ 34*3e04ad42SLang Hames const char *Types = ::orc_rt::DebugTypes.load(std::memory_order_relaxed); \ 351d82e19fSLang Hames if (!Types) \ 361d82e19fSLang Hames Types = initializeDebug(); \ 371d82e19fSLang Hames if (Types == &DebugTypesNone) \ 381d82e19fSLang Hames break; \ 39*3e04ad42SLang Hames if (Types == &DebugTypesAll || ::orc_rt::debugTypeEnabled(TYPE, Types)) { \ 401d82e19fSLang Hames X; \ 411d82e19fSLang Hames } \ 421d82e19fSLang Hames } while (false) 431d82e19fSLang Hames 441d82e19fSLang Hames #else 451d82e19fSLang Hames 461d82e19fSLang Hames #define ORC_RT_DEBUG_WITH_TYPE(TYPE, X) \ 471d82e19fSLang Hames do { \ 481d82e19fSLang Hames } while (false) 491d82e19fSLang Hames 501d82e19fSLang Hames #endif // !NDEBUG 511d82e19fSLang Hames 521d82e19fSLang Hames #define ORC_RT_DEBUG(X) ORC_RT_DEBUG_WITH_TYPE(DEBUG_TYPE, X) 531d82e19fSLang Hames 5466530ba0SLang Hames #endif // ORC_RT_DEBUG_H 55