1351282Sdim//===-- tsan_dispatch_defs.h ------------------------------------*- C++ -*-===// 2351282Sdim// 3351282Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4351282Sdim// See https://llvm.org/LICENSE.txt for license information. 5351282Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6351282Sdim// 7351282Sdim//===----------------------------------------------------------------------===// 8351282Sdim// 9351282Sdim// This file is a part of ThreadSanitizer (TSan), a race detector. 10351282Sdim// 11351282Sdim//===----------------------------------------------------------------------===// 12351282Sdim#ifndef TSAN_DISPATCH_DEFS_H 13351282Sdim#define TSAN_DISPATCH_DEFS_H 14351282Sdim 15351282Sdim#include "sanitizer_common/sanitizer_internal_defs.h" 16351282Sdim 17351282Sdimtypedef struct dispatch_object_s {} *dispatch_object_t; 18351282Sdim 19351282Sdim#define DISPATCH_DECL(name) \ 20351282Sdim typedef struct name##_s : public dispatch_object_s {} *name##_t 21351282Sdim 22351282SdimDISPATCH_DECL(dispatch_queue); 23351282SdimDISPATCH_DECL(dispatch_source); 24351282SdimDISPATCH_DECL(dispatch_group); 25351282SdimDISPATCH_DECL(dispatch_data); 26351282SdimDISPATCH_DECL(dispatch_semaphore); 27351282SdimDISPATCH_DECL(dispatch_io); 28351282Sdim 29351282Sdimtypedef void (*dispatch_function_t)(void *arg); 30351282Sdimtypedef void (^dispatch_block_t)(void); 31351282Sdimtypedef void (^dispatch_io_handler_t)(bool done, dispatch_data_t data, 32351282Sdim int error); 33351282Sdim 34360784Sdimtypedef long dispatch_once_t; 35351282Sdimtypedef __sanitizer::u64 dispatch_time_t; 36360784Sdimtypedef int dispatch_fd_t; 37360784Sdimtypedef unsigned long dispatch_io_type_t; 38360784Sdimtypedef unsigned long dispatch_io_close_flags_t; 39351282Sdim 40351282Sdimextern "C" { 41351282Sdimvoid *dispatch_get_context(dispatch_object_t object); 42351282Sdimvoid dispatch_retain(dispatch_object_t object); 43351282Sdimvoid dispatch_release(dispatch_object_t object); 44351282Sdim 45351282Sdimextern const dispatch_block_t _dispatch_data_destructor_free; 46351282Sdimextern const dispatch_block_t _dispatch_data_destructor_munmap; 47351282Sdim} // extern "C" 48351282Sdim 49351282Sdim#define DISPATCH_DATA_DESTRUCTOR_DEFAULT nullptr 50351282Sdim#define DISPATCH_DATA_DESTRUCTOR_FREE _dispatch_data_destructor_free 51351282Sdim#define DISPATCH_DATA_DESTRUCTOR_MUNMAP _dispatch_data_destructor_munmap 52351282Sdim 53351282Sdim#if __has_attribute(noescape) 54351282Sdim #define DISPATCH_NOESCAPE __attribute__((__noescape__)) 55351282Sdim#else 56351282Sdim #define DISPATCH_NOESCAPE 57351282Sdim#endif 58351282Sdim 59351282Sdim// Data types used in dispatch APIs 60360784Sdimtypedef unsigned long size_t; 61360784Sdimtypedef unsigned long uintptr_t; 62351282Sdimtypedef __sanitizer::s64 off_t; 63351282Sdimtypedef __sanitizer::u16 mode_t; 64360784Sdimtypedef long long_t; 65351282Sdim 66351282Sdim#endif // TSAN_DISPATCH_DEFS_H 67