|
31 | 31 | #include "tsan_mman.h"
|
32 | 32 | #include "tsan_fd.h"
|
33 | 33 |
|
| 34 | +#include <stdarg.h> |
| 35 | + |
34 | 36 | using namespace __tsan;
|
35 | 37 |
|
36 | 38 | #if SANITIZER_FREEBSD || SANITIZER_MAC
|
@@ -135,6 +137,7 @@ const int PTHREAD_BARRIER_SERIAL_THREAD = -1;
|
135 | 137 | #endif
|
136 | 138 | const int MAP_FIXED = 0x10;
|
137 | 139 | typedef long long_t;
|
| 140 | +typedef __sanitizer::u16 mode_t; |
138 | 141 |
|
139 | 142 | // From /usr/include/unistd.h
|
140 | 143 | # define F_ULOCK 0 /* Unlock a previously locked region. */
|
@@ -1505,20 +1508,28 @@ TSAN_INTERCEPTOR(int, fstat64, int fd, void *buf) {
|
1505 | 1508 | #define TSAN_MAYBE_INTERCEPT_FSTAT64
|
1506 | 1509 | #endif
|
1507 | 1510 |
|
1508 |
| -TSAN_INTERCEPTOR(int, open, const char *name, int flags, int mode) { |
1509 |
| - SCOPED_TSAN_INTERCEPTOR(open, name, flags, mode); |
| 1511 | +TSAN_INTERCEPTOR(int, open, const char *name, int oflag, ...) { |
| 1512 | + va_list ap; |
| 1513 | + va_start(ap, oflag); |
| 1514 | + mode_t mode = va_arg(ap, int); |
| 1515 | + va_end(ap); |
| 1516 | + SCOPED_TSAN_INTERCEPTOR(open, name, oflag, mode); |
1510 | 1517 | READ_STRING(thr, pc, name, 0);
|
1511 |
| - int fd = REAL(open)(name, flags, mode); |
| 1518 | + int fd = REAL(open)(name, oflag, mode); |
1512 | 1519 | if (fd >= 0)
|
1513 | 1520 | FdFileCreate(thr, pc, fd);
|
1514 | 1521 | return fd;
|
1515 | 1522 | }
|
1516 | 1523 |
|
1517 | 1524 | #if SANITIZER_LINUX
|
1518 |
| -TSAN_INTERCEPTOR(int, open64, const char *name, int flags, int mode) { |
1519 |
| - SCOPED_TSAN_INTERCEPTOR(open64, name, flags, mode); |
| 1525 | +TSAN_INTERCEPTOR(int, open64, const char *name, int oflag, ...) { |
| 1526 | + va_list ap; |
| 1527 | + va_start(ap, oflag); |
| 1528 | + mode_t mode = va_arg(ap, int); |
| 1529 | + va_end(ap); |
| 1530 | + SCOPED_TSAN_INTERCEPTOR(open64, name, oflag, mode); |
1520 | 1531 | READ_STRING(thr, pc, name, 0);
|
1521 |
| - int fd = REAL(open64)(name, flags, mode); |
| 1532 | + int fd = REAL(open64)(name, oflag, mode); |
1522 | 1533 | if (fd >= 0)
|
1523 | 1534 | FdFileCreate(thr, pc, fd);
|
1524 | 1535 | return fd;
|
|
0 commit comments