From aa7c824ea422152e3e8ac4586a9b94d2c755c23d Mon Sep 17 00:00:00 2001 From: bunnei Date: Mon, 1 Jan 2018 14:38:34 -0500 Subject: svc: Implement svcExitProcess. --- src/core/hle/kernel/process.cpp | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) (limited to 'src/core/hle/kernel/process.cpp') diff --git a/src/core/hle/kernel/process.cpp b/src/core/hle/kernel/process.cpp index 35cf6dc95..8e74059ea 100644 --- a/src/core/hle/kernel/process.cpp +++ b/src/core/hle/kernel/process.cpp @@ -2,6 +2,7 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include #include #include "common/assert.h" #include "common/common_funcs.h" @@ -16,6 +17,9 @@ namespace Kernel { +// Lists all processes that exist in the current session. +static std::vector> process_list; + SharedPtr CodeSet::Create(std::string name, u64 program_id) { SharedPtr codeset(new CodeSet); @@ -36,7 +40,9 @@ SharedPtr Process::Create(std::string&& name) { process->name = std::move(name); process->flags.raw = 0; process->flags.memory_region.Assign(MemoryRegion::APPLICATION); + process->status = ProcessStatus::Created; + process_list.push_back(process); return process; } @@ -129,6 +135,7 @@ void Process::Run(VAddr entry_point, s32 main_thread_priority, u32 stack_size) { } vm_manager.LogLayout(Log::Level::Debug); + status = ProcessStatus::Running; Kernel::SetupMainThread(entry_point, main_thread_priority, this); } @@ -137,11 +144,11 @@ void Process::LoadModule(SharedPtr module_, VAddr base_addr) { memory_region = GetMemoryRegion(flags.memory_region); auto MapSegment = [&](CodeSet::Segment& segment, VMAPermission permissions, - MemoryState memory_state) { + MemoryState memory_state) { auto vma = vm_manager - .MapMemoryBlock(segment.addr + base_addr, module_->memory, segment.offset, segment.size, - memory_state) - .Unwrap(); + .MapMemoryBlock(segment.addr + base_addr, module_->memory, segment.offset, + segment.size, memory_state) + .Unwrap(); vm_manager.Reprotect(vma, permissions); misc_memory_used += segment.size; memory_region->used += segment.size; @@ -299,5 +306,20 @@ ResultCode Process::UnmapMemory(VAddr dst_addr, VAddr /*src_addr*/, u64 size) { Kernel::Process::Process() {} Kernel::Process::~Process() {} -SharedPtr g_current_process; +void ClearProcessList() { + process_list.clear(); +} + +SharedPtr GetProcessById(u32 process_id) { + auto itr = std::find_if( + process_list.begin(), process_list.end(), + [&](const SharedPtr& process) { return process->process_id == process_id; }); + + if (itr == process_list.end()) + return nullptr; + + return *itr; } + +SharedPtr g_current_process; +} // namespace Kernel -- cgit v1.2.3