1*0fca6ea1SDimitry Andric //===--- rtsan.h - Realtime Sanitizer ---------------------------*- C++ -*-===// 2*0fca6ea1SDimitry Andric // 3*0fca6ea1SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*0fca6ea1SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*0fca6ea1SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*0fca6ea1SDimitry Andric // 7*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 8*0fca6ea1SDimitry Andric // 9*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 10*0fca6ea1SDimitry Andric 11*0fca6ea1SDimitry Andric #pragma once 12*0fca6ea1SDimitry Andric 13*0fca6ea1SDimitry Andric #include "sanitizer_common/sanitizer_internal_defs.h" 14*0fca6ea1SDimitry Andric 15*0fca6ea1SDimitry Andric extern "C" { 16*0fca6ea1SDimitry Andric 17*0fca6ea1SDimitry Andric namespace __rtsan { 18*0fca6ea1SDimitry Andric 19*0fca6ea1SDimitry Andric extern bool rtsan_initialized; 20*0fca6ea1SDimitry Andric extern bool rtsan_init_is_running; 21*0fca6ea1SDimitry Andric 22*0fca6ea1SDimitry Andric } // namespace __rtsan 23*0fca6ea1SDimitry Andric 24*0fca6ea1SDimitry Andric // Initialise rtsan interceptors. 25*0fca6ea1SDimitry Andric // A call to this method is added to the preinit array on Linux systems. 26*0fca6ea1SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE void __rtsan_init(); 27*0fca6ea1SDimitry Andric 28*0fca6ea1SDimitry Andric // Enter real-time context. 29*0fca6ea1SDimitry Andric // When in a real-time context, RTSan interceptors will error if realtime 30*0fca6ea1SDimitry Andric // violations are detected. Calls to this method are injected at the code 31*0fca6ea1SDimitry Andric // generation stage when RTSan is enabled. 32*0fca6ea1SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE void __rtsan_realtime_enter(); 33*0fca6ea1SDimitry Andric 34*0fca6ea1SDimitry Andric // Exit the real-time context. 35*0fca6ea1SDimitry Andric // When not in a real-time context, RTSan interceptors will simply forward 36*0fca6ea1SDimitry Andric // intercepted method calls to the real methods. 37*0fca6ea1SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE void __rtsan_realtime_exit(); 38*0fca6ea1SDimitry Andric 39*0fca6ea1SDimitry Andric // Disable all RTSan error reporting. 40*0fca6ea1SDimitry Andric // Injected into the code if "nosanitize(realtime)" is on a function. 41*0fca6ea1SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE void __rtsan_off(); 42*0fca6ea1SDimitry Andric 43*0fca6ea1SDimitry Andric // Re-enable all RTSan error reporting. 44*0fca6ea1SDimitry Andric // The counterpart to `__rtsan_off`. 45*0fca6ea1SDimitry Andric SANITIZER_INTERFACE_ATTRIBUTE void __rtsan_on(); 46*0fca6ea1SDimitry Andric 47*0fca6ea1SDimitry Andric } // extern "C" 48