1*6fa2df46SAndroid Build Coastguard Worker // Copyright (C) 2021 The Android Open Source Project 2*6fa2df46SAndroid Build Coastguard Worker // 3*6fa2df46SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); 4*6fa2df46SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License. 5*6fa2df46SAndroid Build Coastguard Worker // You may obtain a copy of the License at 6*6fa2df46SAndroid Build Coastguard Worker // 7*6fa2df46SAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0 8*6fa2df46SAndroid Build Coastguard Worker // 9*6fa2df46SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software 10*6fa2df46SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, 11*6fa2df46SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*6fa2df46SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and 13*6fa2df46SAndroid Build Coastguard Worker // limitations under the License. 14*6fa2df46SAndroid Build Coastguard Worker 15*6fa2df46SAndroid Build Coastguard Worker #pragma once 16*6fa2df46SAndroid Build Coastguard Worker 17*6fa2df46SAndroid Build Coastguard Worker #include <dirent.h> 18*6fa2df46SAndroid Build Coastguard Worker #include <fcntl.h> 19*6fa2df46SAndroid Build Coastguard Worker #include <sys/param.h> 20*6fa2df46SAndroid Build Coastguard Worker #include <sys/stat.h> 21*6fa2df46SAndroid Build Coastguard Worker #include <unistd.h> 22*6fa2df46SAndroid Build Coastguard Worker 23*6fa2df46SAndroid Build Coastguard Worker #include <cstdint> 24*6fa2df46SAndroid Build Coastguard Worker #include <string> 25*6fa2df46SAndroid Build Coastguard Worker 26*6fa2df46SAndroid Build Coastguard Worker namespace dittosuite { 27*6fa2df46SAndroid Build Coastguard Worker 28*6fa2df46SAndroid Build Coastguard Worker struct SchedAttr__ { 29*6fa2df46SAndroid Build Coastguard Worker uint32_t size; /* Size of this structure */ 30*6fa2df46SAndroid Build Coastguard Worker uint32_t sched_policy; /* Policy (SCHED_*) */ 31*6fa2df46SAndroid Build Coastguard Worker uint64_t sched_flags; /* Flags */ 32*6fa2df46SAndroid Build Coastguard Worker 33*6fa2df46SAndroid Build Coastguard Worker int32_t sched_nice; /* Nice value (SCHED_OTHER, 34*6fa2df46SAndroid Build Coastguard Worker SCHED_BATCH) */ 35*6fa2df46SAndroid Build Coastguard Worker uint32_t sched_priority; /* Static priority (SCHED_FIFO, 36*6fa2df46SAndroid Build Coastguard Worker SCHED_RR) */ 37*6fa2df46SAndroid Build Coastguard Worker /* Remaining fields are for SCHED_DEADLINE */ 38*6fa2df46SAndroid Build Coastguard Worker uint64_t sched_runtime; 39*6fa2df46SAndroid Build Coastguard Worker uint64_t sched_deadline; 40*6fa2df46SAndroid Build Coastguard Worker uint64_t sched_period; 41*6fa2df46SAndroid Build Coastguard Worker }; 42*6fa2df46SAndroid Build Coastguard Worker 43*6fa2df46SAndroid Build Coastguard Worker std::string to_string(const SchedAttr__& attr); 44*6fa2df46SAndroid Build Coastguard Worker 45*6fa2df46SAndroid Build Coastguard Worker class SyscallInterface { 46*6fa2df46SAndroid Build Coastguard Worker public: ~SyscallInterface()47*6fa2df46SAndroid Build Coastguard Worker virtual ~SyscallInterface() {} 48*6fa2df46SAndroid Build Coastguard Worker 49*6fa2df46SAndroid Build Coastguard Worker virtual int Access(const std::string& path_name, int mode) = 0; 50*6fa2df46SAndroid Build Coastguard Worker virtual int Close(int fd) = 0; 51*6fa2df46SAndroid Build Coastguard Worker virtual int CloseDir(DIR* dirp) = 0; 52*6fa2df46SAndroid Build Coastguard Worker virtual int FAdvise(int fd, int64_t offset, int64_t len, int advice) = 0; 53*6fa2df46SAndroid Build Coastguard Worker virtual int FAllocate(int fd, int mode, int64_t offset, int64_t len) = 0; 54*6fa2df46SAndroid Build Coastguard Worker virtual int FTruncate(int fd, int64_t length) = 0; 55*6fa2df46SAndroid Build Coastguard Worker virtual int FStat(int filedes, struct stat64* buf) = 0; 56*6fa2df46SAndroid Build Coastguard Worker virtual int FSync(int fd) = 0; 57*6fa2df46SAndroid Build Coastguard Worker virtual pid_t GetTid() = 0; 58*6fa2df46SAndroid Build Coastguard Worker virtual int Open(const std::string& path_name, int flags, int mode) = 0; 59*6fa2df46SAndroid Build Coastguard Worker virtual DIR* OpenDir(const std::string& name) = 0; 60*6fa2df46SAndroid Build Coastguard Worker virtual int64_t Read(int fd, char* buf, int64_t count, int64_t offset) = 0; 61*6fa2df46SAndroid Build Coastguard Worker virtual int SchedSetattr(pid_t pid, const SchedAttr__& attr, unsigned int flags) = 0; 62*6fa2df46SAndroid Build Coastguard Worker virtual struct dirent* ReadDir(DIR* dirp) = 0; 63*6fa2df46SAndroid Build Coastguard Worker virtual int64_t ReadLink(const std::string& path_name, char* buf, int64_t bufsiz) = 0; 64*6fa2df46SAndroid Build Coastguard Worker virtual void Sync() = 0; 65*6fa2df46SAndroid Build Coastguard Worker virtual int Unlink(const std::string& path_name) = 0; 66*6fa2df46SAndroid Build Coastguard Worker virtual int64_t Write(int fd, char* buf, int64_t count, int64_t offset) = 0; 67*6fa2df46SAndroid Build Coastguard Worker virtual int LockMutex(pthread_mutex_t* mutex) = 0; 68*6fa2df46SAndroid Build Coastguard Worker virtual int UnlockMutex(pthread_mutex_t* mutex) = 0; 69*6fa2df46SAndroid Build Coastguard Worker }; 70*6fa2df46SAndroid Build Coastguard Worker 71*6fa2df46SAndroid Build Coastguard Worker class Syscall : public SyscallInterface { 72*6fa2df46SAndroid Build Coastguard Worker public: 73*6fa2df46SAndroid Build Coastguard Worker Syscall(Syscall& other) = delete; 74*6fa2df46SAndroid Build Coastguard Worker void operator=(const Syscall&) = delete; 75*6fa2df46SAndroid Build Coastguard Worker 76*6fa2df46SAndroid Build Coastguard Worker static Syscall& GetSyscall(); 77*6fa2df46SAndroid Build Coastguard Worker 78*6fa2df46SAndroid Build Coastguard Worker int Access(const std::string& path_name, int mode) override; 79*6fa2df46SAndroid Build Coastguard Worker int Close(int fd) override; 80*6fa2df46SAndroid Build Coastguard Worker int CloseDir(DIR* dirp) override; 81*6fa2df46SAndroid Build Coastguard Worker int FAdvise(int fd, int64_t offset, int64_t len, int advice) override; 82*6fa2df46SAndroid Build Coastguard Worker int FAllocate(int fd, int mode, int64_t offset, int64_t len) override; 83*6fa2df46SAndroid Build Coastguard Worker int FTruncate(int fd, int64_t length) override; 84*6fa2df46SAndroid Build Coastguard Worker int FStat(int filedes, struct stat64* buf) override; 85*6fa2df46SAndroid Build Coastguard Worker int FSync(int fd) override; 86*6fa2df46SAndroid Build Coastguard Worker pid_t GetTid() override; 87*6fa2df46SAndroid Build Coastguard Worker int Open(const std::string& path_name, int flags, int mode) override; 88*6fa2df46SAndroid Build Coastguard Worker DIR* OpenDir(const std::string& name) override; 89*6fa2df46SAndroid Build Coastguard Worker int64_t Read(int fd, char* buf, int64_t count, int64_t offset) override; 90*6fa2df46SAndroid Build Coastguard Worker int SchedSetattr(pid_t pid, const SchedAttr__& attr, unsigned int flags) override; 91*6fa2df46SAndroid Build Coastguard Worker struct dirent* ReadDir(DIR* dirp) override; 92*6fa2df46SAndroid Build Coastguard Worker int64_t ReadLink(const std::string& path_name, char* buf, int64_t bufsiz) override; 93*6fa2df46SAndroid Build Coastguard Worker void Sync() override; 94*6fa2df46SAndroid Build Coastguard Worker int Unlink(const std::string& path_name) override; 95*6fa2df46SAndroid Build Coastguard Worker int64_t Write(int fd, char* buf, int64_t count, int64_t offset) override; 96*6fa2df46SAndroid Build Coastguard Worker int LockMutex(pthread_mutex_t* mutex) override; 97*6fa2df46SAndroid Build Coastguard Worker int UnlockMutex(pthread_mutex_t* mutex) override; 98*6fa2df46SAndroid Build Coastguard Worker 99*6fa2df46SAndroid Build Coastguard Worker private: Syscall()100*6fa2df46SAndroid Build Coastguard Worker Syscall(){}; 101*6fa2df46SAndroid Build Coastguard Worker }; 102*6fa2df46SAndroid Build Coastguard Worker 103*6fa2df46SAndroid Build Coastguard Worker } // namespace dittosuite 104