From c43a9d18cdbcf47335ddac2c5432b0c0805fa83e Mon Sep 17 00:00:00 2001 From: Hariharan Devarajan Date: Tue, 22 Aug 2023 22:49:17 -0700 Subject: [PATCH] changed stdio calls to syscalls to make it non-interceptable. --- src/dlio_profiler/writer/base_writer.h | 39 ++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/dlio_profiler/writer/base_writer.h b/src/dlio_profiler/writer/base_writer.h index 2a34c839..61e904b7 100644 --- a/src/dlio_profiler/writer/base_writer.h +++ b/src/dlio_profiler/writer/base_writer.h @@ -22,6 +22,45 @@ namespace dlio_profiler { protected: bool throw_error; std::string filename; + int dlp_open(const char *pathname, int flags, ...) { + mode_t mode; + va_list args; + long result; + + va_start(args, flags); + if (flags & O_CREAT) { + mode = va_arg(args, mode_t); + } + else { + mode = 0; + } + va_end(args); +#if defined(SYS_open) + result = syscall(SYS_open, pathname, flags, mode); +#else + result = syscall(SYS_openat, AT_FDCWD, pathname, flags, mode); +#endif + + if (result >= 0) + return (int) result; + return -1; + } + + ssize_t dlp_write(int fd, const void *buf, size_t count) { + return syscall(SYS_write, fd, buf, count); + } + + ssize_t dlp_read(int fd, void *buf, size_t count) { + return syscall(SYS_read, fd, buf, count); + } + + int dlp_close(int fd) { + return syscall(SYS_close, fd); + } + + int dlp_fsync(int fd) { + return syscall(SYS_fsync, fd); + } public: virtual void initialize(char *filename, bool throw_error) = 0;