1//===-- tsan_fd.h -----------------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file is a part of ThreadSanitizer (TSan), a race detector. 11// 12// This file handles synchronization via IO. 13// People use IO for synchronization along the lines of: 14// 15// int X; 16// int client_socket; // initialized elsewhere 17// int server_socket; // initialized elsewhere 18// 19// Thread 1: 20// X = 42; 21// send(client_socket, ...); 22// 23// Thread 2: 24// if (recv(server_socket, ...) > 0) 25// assert(X == 42); 26// 27// This file determines the scope of the file descriptor (pipe, socket, 28// all local files, etc) and executes acquire and release operations on 29// the scope as necessary. Some scopes are very fine grained (e.g. pipe 30// operations synchronize only with operations on the same pipe), while 31// others are corse-grained (e.g. all operations on local files synchronize 32// with each other). 33//===----------------------------------------------------------------------===// 34#ifndef TSAN_FD_H 35#define TSAN_FD_H 36 37#include "tsan_rtl.h" 38 39namespace __tsan { 40 41void FdInit(); 42void FdAcquire(ThreadState *thr, uptr pc, int fd); 43void FdRelease(ThreadState *thr, uptr pc, int fd); 44void FdAccess(ThreadState *thr, uptr pc, int fd); 45void FdClose(ThreadState *thr, uptr pc, int fd, bool write = true); 46void FdFileCreate(ThreadState *thr, uptr pc, int fd); 47void FdDup(ThreadState *thr, uptr pc, int oldfd, int newfd, bool write); 48void FdPipeCreate(ThreadState *thr, uptr pc, int rfd, int wfd); 49void FdEventCreate(ThreadState *thr, uptr pc, int fd); 50void FdSignalCreate(ThreadState *thr, uptr pc, int fd); 51void FdInotifyCreate(ThreadState *thr, uptr pc, int fd); 52void FdPollCreate(ThreadState *thr, uptr pc, int fd); 53void FdSocketCreate(ThreadState *thr, uptr pc, int fd); 54void FdSocketAccept(ThreadState *thr, uptr pc, int fd, int newfd); 55void FdSocketConnecting(ThreadState *thr, uptr pc, int fd); 56void FdSocketConnect(ThreadState *thr, uptr pc, int fd); 57bool FdLocation(uptr addr, int *fd, int *tid, u32 *stack); 58void FdOnFork(ThreadState *thr, uptr pc); 59 60uptr File2addr(const char *path); 61uptr Dir2addr(const char *path); 62 63} // namespace __tsan 64 65#endif // TSAN_INTERFACE_H 66