tsan_fd.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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-exception
  6. //
  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 elsewhere
  16. // int server_socket; // initialized elsewhere
  17. //
  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 on
  28. // the scope as necessary. Some scopes are very fine grained (e.g. pipe
  29. // operations synchronize only with operations on the same pipe), while
  30. // others are corse-grained (e.g. all operations on local files synchronize
  31. // with each other).
  32. //===----------------------------------------------------------------------===//
  33. #ifndef TSAN_FD_H
  34. #define TSAN_FD_H
  35. #include "tsan_rtl.h"
  36. namespace __tsan {
  37. void FdInit();
  38. void FdAcquire(ThreadState *thr, uptr pc, int fd);
  39. void FdRelease(ThreadState *thr, uptr pc, int fd);
  40. void FdAccess(ThreadState *thr, uptr pc, int fd);
  41. void FdClose(ThreadState *thr, uptr pc, int fd, bool write = true);
  42. void FdFileCreate(ThreadState *thr, uptr pc, int fd);
  43. void FdDup(ThreadState *thr, uptr pc, int oldfd, int newfd, bool write);
  44. void FdPipeCreate(ThreadState *thr, uptr pc, int rfd, int wfd);
  45. void FdEventCreate(ThreadState *thr, uptr pc, int fd);
  46. void FdSignalCreate(ThreadState *thr, uptr pc, int fd);
  47. void FdInotifyCreate(ThreadState *thr, uptr pc, int fd);
  48. void FdPollCreate(ThreadState *thr, uptr pc, int fd);
  49. void FdSocketCreate(ThreadState *thr, uptr pc, int fd);
  50. void FdSocketAccept(ThreadState *thr, uptr pc, int fd, int newfd);
  51. void FdSocketConnecting(ThreadState *thr, uptr pc, int fd);
  52. void FdSocketConnect(ThreadState *thr, uptr pc, int fd);
  53. bool FdLocation(uptr addr, int *fd, Tid *tid, StackID *stack);
  54. void FdOnFork(ThreadState *thr, uptr pc);
  55. uptr File2addr(const char *path);
  56. uptr Dir2addr(const char *path);
  57. } // namespace __tsan
  58. #endif // TSAN_INTERFACE_H