66 lines · c
1//===-- tsan_fd.h -----------------------------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file is a part of ThreadSanitizer (TSan), a race detector.10//11// This file handles synchronization via IO.12// People use IO for synchronization along the lines of:13//14// int X;15// int client_socket; // initialized elsewhere16// int server_socket; // initialized elsewhere17//18// Thread 1:19// X = 42;20// send(client_socket, ...);21//22// Thread 2:23// if (recv(server_socket, ...) > 0)24// assert(X == 42);25//26// This file determines the scope of the file descriptor (pipe, socket,27// all local files, etc) and executes acquire and release operations on28// the scope as necessary. Some scopes are very fine grained (e.g. pipe29// operations synchronize only with operations on the same pipe), while30// others are corse-grained (e.g. all operations on local files synchronize31// with each other).32//===----------------------------------------------------------------------===//33#ifndef TSAN_FD_H34#define TSAN_FD_H35 36#include "tsan_rtl.h"37 38namespace __tsan {39 40void FdInit();41void FdAcquire(ThreadState *thr, uptr pc, int fd);42void FdRelease(ThreadState *thr, uptr pc, int fd);43void FdAccess(ThreadState *thr, uptr pc, int fd);44void FdClose(ThreadState *thr, uptr pc, int fd, bool write = true);45void FdFileCreate(ThreadState *thr, uptr pc, int fd);46void FdDup(ThreadState *thr, uptr pc, int oldfd, int newfd, bool write);47void FdPipeCreate(ThreadState *thr, uptr pc, int rfd, int wfd);48void FdEventCreate(ThreadState *thr, uptr pc, int fd);49void FdSignalCreate(ThreadState *thr, uptr pc, int fd);50void FdInotifyCreate(ThreadState *thr, uptr pc, int fd);51void FdPollCreate(ThreadState *thr, uptr pc, int fd);52void FdPollAdd(ThreadState *thr, uptr pc, int epfd, 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, Tid *tid, StackID *stack, bool *closed);58void FdOnFork(ThreadState *thr, uptr pc);59 60uptr File2addr(const char *path);61uptr Dir2addr(const char *path);62 63} // namespace __tsan64 65#endif // TSAN_INTERFACE_H66