More Changes
Some checks failed
CI / Build (AMD64) (push) Failing after 22m43s
CI / Build (ARM64) (push) Failing after 24m45s
CI / Build (ARMHF) (push) Failing after 14m6s
CI / Test (AMD64, Client) (push) Has been skipped
CI / Test (AMD64, Server) (push) Has been skipped
CI / Test (ARM64, Client) (push) Has been skipped
CI / Test (ARM64, Server) (push) Has been skipped
CI / Test (ARMHF, Client) (push) Has been skipped
CI / Test (ARMHF, Server) (push) Has been skipped
CI / Build Example Mods (push) Has been skipped
CI / Release (push) Has been skipped

This commit is contained in:
TheBrokenRail 2025-01-04 05:38:38 -05:00
parent 00fee9c410
commit 489615d47f
7 changed files with 5 additions and 98 deletions

@ -1 +1 @@
Subproject commit a271e6e12af08e0d21f68db940af968d8e0be981
Subproject commit 5baa6b1948aeebb5e13af31ff62dc97f00a3b71e

View File

@ -2,13 +2,6 @@ project(runtime)
## Extra Runtime
# QEMU
set(QEMU_VERSION "9.1.1")
force_set(RUNTIME_QEMU_ARCHIVE "${CMAKE_CURRENT_SOURCE_DIR}/../../archives/qemu-${QEMU_VERSION}.tar.xz" FILEPATH)
if(NOT BUILD_NATIVE_COMPONENTS)
force_set(TRAMPOLINE_HEADERS_ONLY TRUE BOOL)
endif()
# Build
add_subdirectory(src)

@ -1 +1 @@
Subproject commit c1b4b02770dee1f5dfca2ca21a627baf10942cde
Subproject commit 03c9c891b6304d29a9aae662a45ee79b89e76540

View File

@ -17,13 +17,13 @@ if(BUILD_NATIVE_COMPONENTS)
setup_library(media-layer-trampoline TRUE TRUE)
elseif(BUILD_ARM_COMPONENTS)
# Guest Component
add_library(media-layer-core SHARED src/guest/guest.cpp ${MEDIA_LAYER_TRAMPOLINE_SRC})
add_library(media-layer-core SHARED ${MEDIA_LAYER_TRAMPOLINE_SRC})
target_link_libraries(media-layer-core
PUBLIC
media-layer-headers
PRIVATE
reborn-util
trampoline-headers
trampoline
)
target_compile_definitions(media-layer-core PRIVATE MEDIA_LAYER_TRAMPOLINE_GUEST)
# Install

View File

@ -1,80 +0,0 @@
#include <unistd.h>
#include <libreborn/log.h>
#include <string>
#include <sys/mman.h>
#include "guest.h"
// Syscall Method
static uint32_t trampoline_syscall(const uint32_t id, const unsigned char *args) {
// Make Syscall
const long ret = syscall(TRAMPOLINE_SYSCALL, id, args);
if (ret == -1) {
// Error
ERR("Trampoline Error: %s", strerror(errno));
}
// Return
return *(uint32_t *) args;
}
// Pipe Method
static int get_pipe(const char *env) {
const char *value = getenv(env);
if (value == nullptr) {
IMPOSSIBLE();
}
const std::string str = value;
return std::stoi(str);
}
static uint32_t trampoline_pipe(const uint32_t id, const bool allow_early_return, const uint32_t length, const unsigned char *args) {
// Get Pipes
static int arguments_pipe = -1;
static int return_value_pipe = -1;
if (arguments_pipe == -1) {
arguments_pipe = get_pipe(_MCPI_TRAMPOLINE_ARGUMENTS_ENV);
return_value_pipe = get_pipe(_MCPI_TRAMPOLINE_RETURN_VALUE_ENV);
}
// Write Command
const trampoline_pipe_arguments cmd = {
.id = id,
.allow_early_return = allow_early_return,
.length = length
};
if (write(arguments_pipe, &cmd, sizeof(trampoline_pipe_arguments)) != sizeof(trampoline_pipe_arguments)) {
ERR("Unable To Write Trampoline Command");
}
// Write Arguments
size_t position = 0;
while (position < length) {
const ssize_t ret = write(arguments_pipe, args + position, length - position);
if (ret == -1) {
ERR("Unable To Write Trampoline Arguments");
} else {
position += ret;
}
}
if (allow_early_return) {
return 0;
}
// Return
uint32_t ret;
if (read(return_value_pipe, &ret, sizeof(uint32_t)) != sizeof(uint32_t)) {
ERR("Unable To Read Trampoline Return Value");
}
return ret;
}
// Main Function
uint32_t _raw_trampoline(const uint32_t id, const bool allow_early_return, const uint32_t length, const unsigned char *args) {
if (length > MAX_TRAMPOLINE_ARGS_SIZE) {
ERR("Command Too Big");
}
// Configure Method
static bool use_syscall = getenv(MCPI_USE_PIPE_TRAMPOLINE_ENV) == nullptr;
// Use Correct Method
if (use_syscall) {
return trampoline_syscall(id, args);
} else {
return trampoline_pipe(id, allow_early_return, length, args);
}
}

View File

@ -5,9 +5,6 @@
#include "../common/common.h"
// Trampoline Function
uint32_t _raw_trampoline(uint32_t id, bool allow_early_return, uint32_t length, const unsigned char *args);
// Compile Trampoline Arguments
template <typename T>
void _handle_trampoline_arg(unsigned char *&out, const T &arg) {
@ -64,7 +61,7 @@ unsigned int _trampoline(const unsigned int id, const bool allow_early_return, A
unsigned char *end = out;
_add_to_trampoline_args(end, args...);
const uint32_t length = end - out;
return _raw_trampoline(id, allow_early_return, length, out);
return raw_trampoline(id, allow_early_return, length, out);
}
#define trampoline(...) _trampoline(_id, ##__VA_ARGS__)

View File

@ -4,9 +4,6 @@
#include "../common/common.h"
// Trampoline Function
extern "C" std::remove_pointer_t<trampoline_t> trampoline;
// Macro
typedef uint32_t handler_t(trampoline_writer_t writer, const unsigned char *args);
__attribute__((visibility("internal"))) void _add_handler(unsigned char id, handler_t *handler);