runtime/lib/src/lib.h

41 lines
972 B
C
Raw Normal View History

2025-02-14 23:10:29 -05:00
#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;
};