Home | History | Annotate | Download | only in rtl
      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 
     39 namespace __tsan {
     40 
     41 void FdInit();
     42 void FdAcquire(ThreadState *thr, uptr pc, int fd);
     43 void FdRelease(ThreadState *thr, uptr pc, int fd);
     44 void FdAccess(ThreadState *thr, uptr pc, int fd);
     45 void FdClose(ThreadState *thr, uptr pc, int fd, bool write = true);
     46 void FdFileCreate(ThreadState *thr, uptr pc, int fd);
     47 void FdDup(ThreadState *thr, uptr pc, int oldfd, int newfd, bool write);
     48 void FdPipeCreate(ThreadState *thr, uptr pc, int rfd, int wfd);
     49 void FdEventCreate(ThreadState *thr, uptr pc, int fd);
     50 void FdSignalCreate(ThreadState *thr, uptr pc, int fd);
     51 void FdInotifyCreate(ThreadState *thr, uptr pc, int fd);
     52 void FdPollCreate(ThreadState *thr, uptr pc, int fd);
     53 void FdSocketCreate(ThreadState *thr, uptr pc, int fd);
     54 void FdSocketAccept(ThreadState *thr, uptr pc, int fd, int newfd);
     55 void FdSocketConnecting(ThreadState *thr, uptr pc, int fd);
     56 void FdSocketConnect(ThreadState *thr, uptr pc, int fd);
     57 bool FdLocation(uptr addr, int *fd, int *tid, u32 *stack);
     58 void FdOnFork(ThreadState *thr, uptr pc);
     59 
     60 uptr File2addr(const char *path);
     61 uptr Dir2addr(const char *path);
     62 
     63 }  // namespace __tsan
     64 
     65 #endif  // TSAN_INTERFACE_H
     66