12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- //===-- tsan_fd.h -----------------------------------------------*- C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- //
- // This file is a part of ThreadSanitizer (TSan), a race detector.
- //
- // This file handles synchronization via IO.
- // People use IO for synchronization along the lines of:
- //
- // int X;
- // int client_socket; // initialized elsewhere
- // int server_socket; // initialized elsewhere
- //
- // Thread 1:
- // X = 42;
- // send(client_socket, ...);
- //
- // Thread 2:
- // if (recv(server_socket, ...) > 0)
- // assert(X == 42);
- //
- // This file determines the scope of the file descriptor (pipe, socket,
- // all local files, etc) and executes acquire and release operations on
- // the scope as necessary. Some scopes are very fine grained (e.g. pipe
- // operations synchronize only with operations on the same pipe), while
- // others are corse-grained (e.g. all operations on local files synchronize
- // with each other).
- //===----------------------------------------------------------------------===//
- #ifndef TSAN_FD_H
- #define TSAN_FD_H
- #include "tsan_rtl.h"
- namespace __tsan {
- void FdInit();
- void FdAcquire(ThreadState *thr, uptr pc, int fd);
- void FdRelease(ThreadState *thr, uptr pc, int fd);
- void FdAccess(ThreadState *thr, uptr pc, int fd);
- void FdClose(ThreadState *thr, uptr pc, int fd, bool write = true);
- void FdFileCreate(ThreadState *thr, uptr pc, int fd);
- void FdDup(ThreadState *thr, uptr pc, int oldfd, int newfd, bool write);
- void FdPipeCreate(ThreadState *thr, uptr pc, int rfd, int wfd);
- void FdEventCreate(ThreadState *thr, uptr pc, int fd);
- void FdSignalCreate(ThreadState *thr, uptr pc, int fd);
- void FdInotifyCreate(ThreadState *thr, uptr pc, int fd);
- void FdPollCreate(ThreadState *thr, uptr pc, int fd);
- void FdSocketCreate(ThreadState *thr, uptr pc, int fd);
- void FdSocketAccept(ThreadState *thr, uptr pc, int fd, int newfd);
- void FdSocketConnecting(ThreadState *thr, uptr pc, int fd);
- void FdSocketConnect(ThreadState *thr, uptr pc, int fd);
- bool FdLocation(uptr addr, int *fd, Tid *tid, StackID *stack);
- void FdOnFork(ThreadState *thr, uptr pc);
- uptr File2addr(const char *path);
- uptr Dir2addr(const char *path);
- } // namespace __tsan
- #endif // TSAN_INTERFACE_H
|