use std::ffi::CStr;
use super::{
bindings, fatal_error, helgrind, valgrind_do_client_request_expr,
valgrind_do_client_request_stmt,
};
#[inline(always)]
pub fn get_valgrind_threadid() -> usize {
do_client_request!(
"drd::get_valgrind_threadid",
0,
bindings::VR_DRDClientRequest::VR_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::VR_DRDClientRequest::VR_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::VR_DRDClientRequest::VR_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::VR_DRDClientRequest::VR_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::VR_DRDClientRequest::VR_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::VR_DRDClientRequest::VR_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_sem_init_pre(sem: *const (), value: usize) {
do_client_request!(
"drd::annotate_sem_init_pre",
bindings::VR_DRDClientRequest::VR_DRD_ANNOTATE_SEM_INIT_PRE,
sem as usize,
value,
0,
0,
0
);
}
#[inline(always)]
pub fn annotate_sem_destroy_post(sem: *const ()) {
do_client_request!(
"drd::annotate_sem_destroy_post",
bindings::VR_DRDClientRequest::VR_DRD_ANNOTATE_SEM_DESTROY_POST,
sem as usize,
0,
0,
0,
0
);
}
#[inline(always)]
pub fn annotate_sem_wait_pre(sem: *const ()) {
do_client_request!(
"drd::annotate_sem_wait_pre",
bindings::VR_DRDClientRequest::VR_DRD_ANNOTATE_SEM_WAIT_PRE,
sem as usize,
0,
0,
0,
0
);
}
#[inline(always)]
pub fn annotate_sem_wait_post(sem: *const ()) {
do_client_request!(
"drd::annotate_sem_wait_post",
bindings::VR_DRDClientRequest::VR_DRD_ANNOTATE_SEM_WAIT_POST,
sem as usize,
0,
0,
0,
0
);
}
#[inline(always)]
pub fn annotate_sem_post_pre(sem: *const ()) {
do_client_request!(
"drd::annotate_sem_post_pre",
bindings::VR_DRDClientRequest::VR_DRD_ANNOTATE_SEM_POST_PRE,
sem as usize,
0,
0,
0,
0
);
}
#[inline(always)]
pub fn annotate_benign_race<T>(addr: &T) {
do_client_request!(
"drd::annotate_benign_race",
bindings::VR_DRDClientRequest::VR_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::VR_DRDClientRequest::VR_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::VR_DRDClientRequest::VR_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::VR_DRDClientRequest::VR_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::VR_DRDClientRequest::VR_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::VR_DRDClientRequest::VR_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::VR_DRDClientRequest::VR_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::VR_DRDClientRequest::VR_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::VR_DRDClientRequest::VR_DRD_SET_THREAD_NAME,
name.as_ref().as_ptr() as usize,
0,
0,
0,
0
);
}