use std::ffi::CStr;
use super::arch::imp::valgrind_do_client_request_expr;
use super::arch::valgrind_do_client_request_stmt;
use super::{bindings, fatal_error, helgrind};
#[inline(always)]
pub fn get_valgrind_threadid() -> usize {
do_client_request!(
"drd::get_valgrind_threadid",
0,
bindings::GR_DRDClientRequest::GR_DRD_GET_VALGRIND_THREAD_ID,
0,
0,
0,
0,
0
)
}
#[inline(always)]
pub fn get_drd_threadid() -> usize {
do_client_request!(
"drd::get_drd_threadid",
0,
bindings::GR_DRDClientRequest::GR_DRD_GET_DRD_THREAD_ID,
0,
0,
0,
0,
0
)
}
#[inline(always)]
pub fn ignore_var<T>(var: &T) {
do_client_request!(
"drd::ignore_var",
bindings::GR_DRDClientRequest::GR_DRD_START_SUPPRESSION,
var as *const T as usize,
core::mem::size_of::<T>(),
0,
0,
0
);
}
#[inline(always)]
pub fn stop_ignoring_var<T>(var: &T) {
do_client_request!(
"drd::stop_ignoring_var",
bindings::GR_DRDClientRequest::GR_DRD_FINISH_SUPPRESSION,
var as *const T as usize,
core::mem::size_of::<T>(),
0,
0,
0
);
}
#[inline(always)]
pub fn trace_var<T>(var: &T) {
do_client_request!(
"drd::trace_var",
bindings::GR_DRDClientRequest::GR_DRD_START_TRACE_ADDR,
var as *const T as usize,
core::mem::size_of::<T>(),
0,
0,
0
);
}
#[inline(always)]
pub fn stop_tracing_var<T>(var: &T) {
do_client_request!(
"drd::stop_tracing_var",
bindings::GR_DRDClientRequest::GR_DRD_STOP_TRACE_ADDR,
var as *const T as usize,
core::mem::size_of::<T>(),
0,
0,
0
);
}
#[inline(always)]
pub fn annotate_happens_before(obj: *const ()) {
helgrind::annotate_happens_before(obj);
}
#[inline(always)]
pub fn annotate_happens_after(obj: *const ()) {
helgrind::annotate_happens_after(obj);
}
#[inline(always)]
pub fn annotate_rwlock_create(lock: *const ()) {
helgrind::annotate_rwlock_create(lock);
}
#[inline(always)]
pub fn annotate_rwlock_destroy(lock: *const ()) {
helgrind::annotate_rwlock_destroy(lock);
}
#[inline(always)]
pub fn annotate_rwlock_acquired(lock: *const (), is_writer_lock: bool) {
helgrind::annotate_rwlock_acquired(lock, is_writer_lock);
}
#[inline(always)]
pub fn annotate_rwlock_released(lock: *const (), is_writer_lock: bool) {
helgrind::annotate_rwlock_released(lock, is_writer_lock);
}
#[inline(always)]
pub fn annotate_benign_race<T>(addr: &T) {
do_client_request!(
"drd::annotate_benign_race",
bindings::GR_DRDClientRequest::GR_DRD_START_SUPPRESSION,
addr as *const T as usize,
core::mem::size_of::<T>(),
0,
0,
0
);
}
#[inline(always)]
pub fn annotate_benign_race_sized<T>(addr: &T, size: usize) {
do_client_request!(
"drd::annotate_benign_race_sized",
bindings::GR_DRDClientRequest::GR_DRD_START_SUPPRESSION,
addr as *const T as usize,
size,
0,
0,
0
);
}
#[inline(always)]
pub fn annotate_ignore_reads_begin() {
do_client_request!(
"drd::annotate_ignore_reads_begin",
bindings::GR_DRDClientRequest::GR_DRD_RECORD_LOADS,
0,
0,
0,
0,
0
);
}
#[inline(always)]
pub fn annotate_ignore_reads_end() {
do_client_request!(
"drd::annotate_ignore_reads_end",
bindings::GR_DRDClientRequest::GR_DRD_RECORD_LOADS,
1,
0,
0,
0,
0
);
}
#[inline(always)]
pub fn annotate_ignore_writes_begin() {
do_client_request!(
"drd::annotate_ignore_writes_begin",
bindings::GR_DRDClientRequest::GR_DRD_RECORD_STORES,
0,
0,
0,
0,
0
);
}
#[inline(always)]
pub fn annotate_ignore_writes_end() {
do_client_request!(
"drd::annotate_ignore_writes_end",
bindings::GR_DRDClientRequest::GR_DRD_RECORD_STORES,
1,
0,
0,
0,
0
);
}
#[inline(always)]
pub fn annotate_ignore_reads_and_writes_begin() {
annotate_ignore_reads_begin();
annotate_ignore_writes_begin();
}
#[inline(always)]
pub fn annotate_ignore_reads_and_writes_end() {
annotate_ignore_reads_end();
annotate_ignore_writes_end();
}
#[inline(always)]
pub fn annotate_new_memory(addr: *const (), size: usize) {
do_client_request!(
"drd::annotate_new_memory",
bindings::GR_DRDClientRequest::GR_DRD_CLEAN_MEMORY,
addr as usize,
size,
0,
0,
0
);
}
#[inline(always)]
pub fn annotate_trace_memory(addr: *const ()) {
do_client_request!(
"drd::annotate_trace_memory",
bindings::GR_DRDClientRequest::GR_DRD_START_TRACE_ADDR,
addr as usize,
core::mem::size_of::<cty::c_char>(),
0,
0,
0
);
}
#[inline(always)]
pub fn annotate_thread_name<T>(name: T)
where
T: AsRef<CStr>,
{
do_client_request!(
"drd::annotate_thread_name",
bindings::GR_DRDClientRequest::GR_DRD_SET_THREAD_NAME,
name.as_ref().as_ptr() as usize,
0,
0,
0,
0
);
}