41 lines
972 B
C++
41 lines
972 B
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
|
|
#include <trampoline/types.h>
|
|
|
|
// Common
|
|
struct Trampoline {
|
|
virtual ~Trampoline() = default;
|
|
// Error Codes
|
|
enum class Error : uint32_t {
|
|
NONE = 0,
|
|
// Generic
|
|
COMMAND_TOO_BIG,
|
|
// System Call
|
|
SYSCALL,
|
|
// Pipe
|
|
MISSING_PIPE,
|
|
INVALID_PIPE,
|
|
PIPE_WRITE,
|
|
PIPE_READ
|
|
};
|
|
// Call
|
|
virtual Error call(uint32_t id, uint32_t *ret_ptr, uint32_t length, const unsigned char *args) = 0;
|
|
};
|
|
|
|
// Syscall Method
|
|
struct SyscallTrampoline final : Trampoline {
|
|
static bool should_use();
|
|
Error call(uint32_t id, uint32_t *ret_ptr, uint32_t length, const unsigned char *args) override;
|
|
};
|
|
|
|
// Pipe Method
|
|
struct PipeTrampoline final : Trampoline {
|
|
PipeTrampoline();
|
|
Error call(uint32_t id, uint32_t *ret_ptr, uint32_t length, const unsigned char *args) override;
|
|
private:
|
|
Error status;
|
|
int arguments_pipe;
|
|
int return_value_pipe;
|
|
}; |