[mammoth] Return ErrorOr when creating a process
This commit is contained in:
parent
0ec2fa3e76
commit
1f7a15eed4
|
@ -10,6 +10,8 @@ class ErrorOr {
|
|||
ErrorOr() = delete;
|
||||
ErrorOr(const ErrorOr&) = delete;
|
||||
ErrorOr(ErrorOr&&) = delete;
|
||||
// FIXME: Do we have to call ~T manually here.
|
||||
~ErrorOr() {}
|
||||
|
||||
ErrorOr(ErrorCode code) : error_(code), ok_(false) {}
|
||||
ErrorOr(const T& obj) : obj_(obj), ok_(true) {}
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
#pragma once
|
||||
|
||||
#include <glacier/status/error_or.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "mammoth/channel.h"
|
||||
|
||||
uint64_t SpawnProcessFromElfRegion(uint64_t program, Channel& local);
|
||||
glcr::ErrorOr<Channel> SpawnProcessFromElfRegion(uint64_t program);
|
||||
|
|
|
@ -95,8 +95,8 @@ uint64_t LoadElfProgram(uint64_t base, uint64_t as_cap) {
|
|||
|
||||
} // namespace
|
||||
|
||||
uint64_t SpawnProcessFromElfRegion(uint64_t program, Channel& local) {
|
||||
Channel foreign;
|
||||
glcr::ErrorOr<Channel> SpawnProcessFromElfRegion(uint64_t program) {
|
||||
Channel local, foreign;
|
||||
check(CreateChannels(local, foreign));
|
||||
|
||||
uint64_t proc_cap;
|
||||
|
@ -134,5 +134,5 @@ uint64_t SpawnProcessFromElfRegion(uint64_t program, Channel& local) {
|
|||
#endif
|
||||
check(ZThreadStart(thread_cap, entry_point, foreign_port_id, 0));
|
||||
|
||||
return glcr::OK;
|
||||
return local;
|
||||
}
|
||||
|
|
|
@ -17,8 +17,11 @@ uint64_t main(uint64_t port_cap) {
|
|||
uint64_t vaddr;
|
||||
check(ZAddressSpaceMap(gSelfVmasCap, 0, gBootDenaliVmmoCap, &vaddr));
|
||||
|
||||
Channel local;
|
||||
check(SpawnProcessFromElfRegion(vaddr, local));
|
||||
auto local_or = SpawnProcessFromElfRegion(vaddr);
|
||||
if (!local_or) {
|
||||
check(local_or.error());
|
||||
}
|
||||
Channel local = local_or.value();
|
||||
|
||||
DenaliClient client(local);
|
||||
GptReader reader(client);
|
||||
|
|
Loading…
Reference in New Issue