Tweaks
This commit is contained in:
parent
5751a5a0c1
commit
e6839074fd
@ -5,7 +5,7 @@ add_executable(runtime
|
|||||||
src/memory.cpp
|
src/memory.cpp
|
||||||
src/main.cpp
|
src/main.cpp
|
||||||
src/trampoline.cpp
|
src/trampoline.cpp
|
||||||
src/pipe.cpp
|
src/loop.cpp
|
||||||
src/signals.cpp
|
src/signals.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -2,11 +2,10 @@
|
|||||||
#include <cerrno>
|
#include <cerrno>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <sys/wait.h>
|
|
||||||
|
|
||||||
#include <trampoline/types.h>
|
#include <trampoline/types.h>
|
||||||
|
|
||||||
#include "pipe.h"
|
#include "loop.h"
|
||||||
|
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "trampoline.h"
|
#include "trampoline.h"
|
||||||
@ -23,7 +22,7 @@ static void safe_pipe(int *out) {
|
|||||||
ERR("Unable To Create Pipe: %s", strerror(errno));
|
ERR("Unable To Create Pipe: %s", strerror(errno));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void init_pipe_common() {
|
void create_pipes() {
|
||||||
safe_pipe(arguments_pipe);
|
safe_pipe(arguments_pipe);
|
||||||
safe_pipe(return_value_pipe);
|
safe_pipe(return_value_pipe);
|
||||||
}
|
}
|
||||||
@ -39,7 +38,7 @@ void init_pipe_guest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Host
|
// Host
|
||||||
void init_pipe_host(pid_t guest_pid) {
|
void pipe_read_loop() {
|
||||||
// Close Unneeded Pipes
|
// Close Unneeded Pipes
|
||||||
close(arguments_pipe[PIPE_WRITE]);
|
close(arguments_pipe[PIPE_WRITE]);
|
||||||
close(return_value_pipe[PIPE_READ]);
|
close(return_value_pipe[PIPE_READ]);
|
||||||
@ -62,15 +61,4 @@ void init_pipe_host(pid_t guest_pid) {
|
|||||||
write(return_value_pipe[PIPE_WRITE], &ret, sizeof(uint32_t));
|
write(return_value_pipe[PIPE_WRITE], &ret, sizeof(uint32_t));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Reap Child
|
|
||||||
int status;
|
|
||||||
if (waitpid(guest_pid, &status, 0) == -1) {
|
|
||||||
ERR("Unable To Reap Child: %s", strerror(errno));
|
|
||||||
}
|
|
||||||
// Exit
|
|
||||||
if (WIFEXITED(status)) {
|
|
||||||
exit(WEXITSTATUS(status));
|
|
||||||
} else {
|
|
||||||
ERR("Unable To Determine Exit Code");
|
|
||||||
}
|
|
||||||
}
|
}
|
5
native/src/loop.h
Normal file
5
native/src/loop.h
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
void create_pipes();
|
||||||
|
void pipe_read_loop();
|
||||||
|
void init_pipe_guest();
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "pipe.h"
|
#include "loop.h"
|
||||||
#include "signals.h"
|
#include "signals.h"
|
||||||
|
|
||||||
// Main
|
// Main
|
||||||
@ -16,7 +16,7 @@ int main(__attribute__((unused)) int argc, char *argv[]) {
|
|||||||
ERR("Invalid Arguments");
|
ERR("Invalid Arguments");
|
||||||
}
|
}
|
||||||
// Setup
|
// Setup
|
||||||
init_pipe_common();
|
create_pipes();
|
||||||
// Fork
|
// Fork
|
||||||
pid_t pid = fork();
|
pid_t pid = fork();
|
||||||
if (pid == -1) {
|
if (pid == -1) {
|
||||||
@ -37,7 +37,19 @@ int main(__attribute__((unused)) int argc, char *argv[]) {
|
|||||||
init_signals(pid);
|
init_signals(pid);
|
||||||
init_memory(pid);
|
init_memory(pid);
|
||||||
|
|
||||||
// Start Pipes
|
// Read From Pipes
|
||||||
init_pipe_host(pid);
|
pipe_read_loop();
|
||||||
|
|
||||||
|
// Reap Child
|
||||||
|
int status;
|
||||||
|
if (waitpid(pid, &status, 0) == -1) {
|
||||||
|
ERR("Unable To Reap Child: %s", strerror(errno));
|
||||||
|
}
|
||||||
|
// Exit
|
||||||
|
if (WIFEXITED(status)) {
|
||||||
|
exit(WEXITSTATUS(status));
|
||||||
|
} else {
|
||||||
|
ERR("Unusual Exit");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -19,6 +19,6 @@ void memory_writer(uint32_t guest_addr, const void *data, uint32_t size) {
|
|||||||
remote[0].iov_len = size;
|
remote[0].iov_len = size;
|
||||||
const ssize_t ret = process_vm_writev(guest_pid, local, 1, remote, 1, 0);
|
const ssize_t ret = process_vm_writev(guest_pid, local, 1, remote, 1, 0);
|
||||||
if (ret != size) {
|
if (ret != size) {
|
||||||
ERR("Unable To Write Data: %s", strerror(errno));
|
ERR("Unable To Write Data: %#10x: %s", guest_addr, strerror(errno));
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,7 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
void init_pipe_common();
|
|
||||||
void init_pipe_host(pid_t guest_pid);
|
|
||||||
void init_pipe_guest();
|
|
Loading…
Reference in New Issue
Block a user