From ab1e8a3e3265fad263368927e90c7b22fb6a2dc8 Mon Sep 17 00:00:00 2001 From: hexkyz Date: Thu, 17 Sep 2026 21:42:22 +0100 Subject: [PATCH] kern/loader/svc: adopt updated names --- .../arch/arm64/kern_k_page_table.hpp | 2 +- .../arch/arm64/kern_k_process_page_table.hpp | 2 +- .../mesosphere/kern_k_address_space_info.hpp | 4 +- .../mesosphere/kern_k_page_table_base.hpp | 14 +-- .../include/mesosphere/kern_k_process.hpp | 4 +- .../source/arch/arm64/kern_k_page_table.cpp | 2 +- .../source/kern_k_address_space_info.cpp | 22 ++--- .../source/kern_k_debug_base.cpp | 2 +- .../source/kern_k_initial_process_reader.cpp | 14 +-- .../source/kern_k_page_table_base.cpp | 12 +-- .../libmesosphere/source/kern_k_process.cpp | 20 ++-- .../source/svc/kern_svc_process.cpp | 72 +++++++------- .../include/stratosphere/cfg/cfg_types.hpp | 10 +- .../include/stratosphere/ldr/ldr_types.hpp | 60 ++++++------ .../cfg/cfg_override.board.nintendo_nx.inc | 28 +++--- .../impl/osdbg_thread_info.os.horizon.hpp | 10 +- .../include/vapours/svc/svc_types_common.hpp | 71 +++++++------- .../creport/source/creport_crash_report.hpp | 4 +- .../dmnt.gen2/source/dmnt2_debug_process.cpp | 8 +- stratosphere/loader/source/ldr_meta.cpp | 16 ++-- .../loader/source/ldr_process_creation.cpp | 94 +++++++++---------- .../pm/source/impl/pm_process_manager.cpp | 8 +- 22 files changed, 239 insertions(+), 240 deletions(-) diff --git a/libraries/libmesosphere/include/mesosphere/arch/arm64/kern_k_page_table.hpp b/libraries/libmesosphere/include/mesosphere/arch/arm64/kern_k_page_table.hpp index 9fd7dbd2f..240da83de 100644 --- a/libraries/libmesosphere/include/mesosphere/arch/arm64/kern_k_page_table.hpp +++ b/libraries/libmesosphere/include/mesosphere/arch/arm64/kern_k_page_table.hpp @@ -205,7 +205,7 @@ namespace ams::kern::arch::arm64 { } NOINLINE void InitializeForKernel(void *table, KVirtualAddress start, KVirtualAddress end); - NOINLINE Result InitializeForProcess(ams::svc::CreateProcessFlag flags, bool from_back, KMemoryManager::Pool pool, KProcessAddress code_address, size_t code_size, KSystemResource *system_resource, KResourceLimit *resource_limit, size_t process_index); + NOINLINE Result InitializeForProcess(ams::svc::CreateProcessParameterFlag flags, bool from_back, KMemoryManager::Pool pool, KProcessAddress code_address, size_t code_size, KSystemResource *system_resource, KResourceLimit *resource_limit, size_t process_index); void Finalize(); static void NoteUpdatedCallback(const void *pt) { diff --git a/libraries/libmesosphere/include/mesosphere/arch/arm64/kern_k_process_page_table.hpp b/libraries/libmesosphere/include/mesosphere/arch/arm64/kern_k_process_page_table.hpp index e80311a47..c4180594c 100644 --- a/libraries/libmesosphere/include/mesosphere/arch/arm64/kern_k_process_page_table.hpp +++ b/libraries/libmesosphere/include/mesosphere/arch/arm64/kern_k_process_page_table.hpp @@ -28,7 +28,7 @@ namespace ams::kern::arch::arm64 { m_page_table.ActivateProcess(process_index, id); } - Result Initialize(ams::svc::CreateProcessFlag flags, bool from_back, KMemoryManager::Pool pool, KProcessAddress code_address, size_t code_size, KSystemResource *system_resource, KResourceLimit *resource_limit, size_t process_index) { + Result Initialize(ams::svc::CreateProcessParameterFlag flags, bool from_back, KMemoryManager::Pool pool, KProcessAddress code_address, size_t code_size, KSystemResource *system_resource, KResourceLimit *resource_limit, size_t process_index) { R_RETURN(m_page_table.InitializeForProcess(flags, from_back, pool, code_address, code_size, system_resource, resource_limit, process_index)); } diff --git a/libraries/libmesosphere/include/mesosphere/kern_k_address_space_info.hpp b/libraries/libmesosphere/include/mesosphere/kern_k_address_space_info.hpp index 00d942a66..462ef3a71 100644 --- a/libraries/libmesosphere/include/mesosphere/kern_k_address_space_info.hpp +++ b/libraries/libmesosphere/include/mesosphere/kern_k_address_space_info.hpp @@ -37,8 +37,8 @@ namespace ams::kern { size_t m_size; Type m_type; public: - static uintptr_t GetAddressSpaceStart(ams::svc::CreateProcessFlag flags, Type type, size_t code_size); - static size_t GetAddressSpaceSize(ams::svc::CreateProcessFlag flags, Type type); + static uintptr_t GetAddressSpaceStart(ams::svc::CreateProcessParameterFlag flags, Type type, size_t code_size); + static size_t GetAddressSpaceSize(ams::svc::CreateProcessParameterFlag flags, Type type); static void SetAddressSpaceSize(size_t width, Type type, size_t size); diff --git a/libraries/libmesosphere/include/mesosphere/kern_k_page_table_base.hpp b/libraries/libmesosphere/include/mesosphere/kern_k_page_table_base.hpp index c0139ab79..02c8eb5ea 100644 --- a/libraries/libmesosphere/include/mesosphere/kern_k_page_table_base.hpp +++ b/libraries/libmesosphere/include/mesosphere/kern_k_page_table_base.hpp @@ -151,14 +151,14 @@ namespace ams::kern { static constexpr u32 DefaultMemoryIgnoreAttr = KMemoryAttribute_IpcLocked | KMemoryAttribute_DeviceShared; - static constexpr size_t GetAddressSpaceWidth(ams::svc::CreateProcessFlag as_type) { - switch (static_cast(as_type & ams::svc::CreateProcessFlag_AddressSpaceMask)) { - case ams::svc::CreateProcessFlag_AddressSpace64Bit: + static constexpr size_t GetAddressSpaceWidth(ams::svc::CreateProcessParameterFlag as_type) { + switch (static_cast(as_type & ams::svc::CreateProcessParameterFlag_AddressSpaceMask)) { + case ams::svc::CreateProcessParameterFlag_AddressSpace64Bit39: return 39; - case ams::svc::CreateProcessFlag_AddressSpace64BitDeprecated: + case ams::svc::CreateProcessParameterFlag_AddressSpace64Bit36: return 36; - case ams::svc::CreateProcessFlag_AddressSpace32Bit: - case ams::svc::CreateProcessFlag_AddressSpace32BitWithoutAlias: + case ams::svc::CreateProcessParameterFlag_AddressSpace32Bit: + case ams::svc::CreateProcessParameterFlag_AddressSpace32BitNoReserved: return 32; MESOSPHERE_UNREACHABLE_DEFAULT_CASE(); } @@ -229,7 +229,7 @@ namespace ams::kern { explicit KPageTableBase() { /* ... */ } NOINLINE void InitializeForKernel(void *table, KVirtualAddress start, KVirtualAddress end); - NOINLINE Result InitializeForProcess(ams::svc::CreateProcessFlag flags, bool from_back, void *table, KProcessAddress start, KProcessAddress end, KMemoryManager::Pool pool, KProcessAddress code_address, size_t code_size, KSystemResource *system_resource, KResourceLimit *resource_limit); + NOINLINE Result InitializeForProcess(ams::svc::CreateProcessParameterFlag flags, bool from_back, void *table, KProcessAddress start, KProcessAddress end, KMemoryManager::Pool pool, KProcessAddress code_address, size_t code_size, KSystemResource *system_resource, KResourceLimit *resource_limit); void Finalize(); diff --git a/libraries/libmesosphere/include/mesosphere/kern_k_process.hpp b/libraries/libmesosphere/include/mesosphere/kern_k_process.hpp index d20e49c7c..4a45ade8a 100644 --- a/libraries/libmesosphere/include/mesosphere/kern_k_process.hpp +++ b/libraries/libmesosphere/include/mesosphere/kern_k_process.hpp @@ -165,9 +165,9 @@ namespace ams::kern { constexpr bool CheckThreadPriority(s32 prio) const { return ((1ul << prio) & this->GetPriorityMask()) != 0; } - constexpr u32 GetCreateProcessFlags() const { return m_flags; } + constexpr u32 GetCreateProcessParameterFlags() const { return m_flags; } - constexpr bool Is64Bit() const { return m_flags & ams::svc::CreateProcessFlag_Is64Bit; } + constexpr bool Is64Bit() const { return m_flags & ams::svc::CreateProcessParameterFlag_64Bit; } constexpr KProcessAddress GetEntryPoint() const { return m_code_address; } diff --git a/libraries/libmesosphere/source/arch/arm64/kern_k_page_table.cpp b/libraries/libmesosphere/source/arch/arm64/kern_k_page_table.cpp index b22874027..3b21ab818 100644 --- a/libraries/libmesosphere/source/arch/arm64/kern_k_page_table.cpp +++ b/libraries/libmesosphere/source/arch/arm64/kern_k_page_table.cpp @@ -128,7 +128,7 @@ namespace ams::kern::arch::arm64 { KPageTableBase::InitializeForKernel(table, start, end); } - Result KPageTable::InitializeForProcess(ams::svc::CreateProcessFlag flags, bool from_back, KMemoryManager::Pool pool, KProcessAddress code_address, size_t code_size, KSystemResource *system_resource, KResourceLimit *resource_limit, size_t process_index) { + Result KPageTable::InitializeForProcess(ams::svc::CreateProcessParameterFlag flags, bool from_back, KMemoryManager::Pool pool, KProcessAddress code_address, size_t code_size, KSystemResource *system_resource, KResourceLimit *resource_limit, size_t process_index) { /* Determine our ASID */ m_asid = process_index + 1; MESOSPHERE_ABORT_UNLESS(0 < m_asid && m_asid < util::size(s_ttbr0_entries)); diff --git a/libraries/libmesosphere/source/kern_k_address_space_info.cpp b/libraries/libmesosphere/source/kern_k_address_space_info.cpp index 022dc9b54..700e6dce9 100644 --- a/libraries/libmesosphere/source/kern_k_address_space_info.cpp +++ b/libraries/libmesosphere/source/kern_k_address_space_info.cpp @@ -46,20 +46,20 @@ namespace ams::kern { 32, 36, 32, 39, 42 }; - constexpr size_t GetAddressSpaceWidth(ams::svc::CreateProcessFlag flags) { + constexpr size_t GetAddressSpaceWidth(ams::svc::CreateProcessParameterFlag flags) { /* Convert the input flags to an array index. */ - const size_t idx = (flags & ams::svc::CreateProcessFlag_AddressSpaceMask) >> ams::svc::CreateProcessFlag_AddressSpaceShift; + const size_t idx = (flags & ams::svc::CreateProcessParameterFlag_AddressSpaceMask) >> ams::svc::CreateProcessParameterFlag_AddressSpaceShift; MESOSPHERE_ABORT_UNLESS(idx < sizeof(FlagsToAddressSpaceWidthTable)); /* Return the width. */ return FlagsToAddressSpaceWidthTable[idx]; } - static_assert(GetAddressSpaceWidth(ams::svc::CreateProcessFlag_AddressSpace32Bit) == 32); - static_assert(GetAddressSpaceWidth(ams::svc::CreateProcessFlag_AddressSpace64BitDeprecated) == 36); - static_assert(GetAddressSpaceWidth(ams::svc::CreateProcessFlag_AddressSpace32BitWithoutAlias) == 32); - static_assert(GetAddressSpaceWidth(ams::svc::CreateProcessFlag_AddressSpace64Bit) == 39); - static_assert(GetAddressSpaceWidth(ams::svc::CreateProcessFlag_AddressSpace64Bit64KPage) == 42); + static_assert(GetAddressSpaceWidth(ams::svc::CreateProcessParameterFlag_AddressSpace32Bit) == 32); + static_assert(GetAddressSpaceWidth(ams::svc::CreateProcessParameterFlag_AddressSpace64Bit36) == 36); + static_assert(GetAddressSpaceWidth(ams::svc::CreateProcessParameterFlag_AddressSpace32BitNoReserved) == 32); + static_assert(GetAddressSpaceWidth(ams::svc::CreateProcessParameterFlag_AddressSpace64Bit39) == 39); + static_assert(GetAddressSpaceWidth(ams::svc::CreateProcessParameterFlag_AddressSpace64Bit42) == 42); KAddressSpaceInfo &GetAddressSpaceInfo(size_t width, KAddressSpaceInfo::Type type) { for (auto &info : AddressSpaceInfos) { @@ -72,14 +72,14 @@ namespace ams::kern { } - uintptr_t KAddressSpaceInfo::GetAddressSpaceStart(ams::svc::CreateProcessFlag flags, KAddressSpaceInfo::Type type, size_t code_size) { + uintptr_t KAddressSpaceInfo::GetAddressSpaceStart(ams::svc::CreateProcessParameterFlag flags, KAddressSpaceInfo::Type type, size_t code_size) { MESOSPHERE_UNUSED(code_size); return GetAddressSpaceInfo(GetAddressSpaceWidth(flags), type).GetAddress(); } - size_t KAddressSpaceInfo::GetAddressSpaceSize(ams::svc::CreateProcessFlag flags, KAddressSpaceInfo::Type type) { + size_t KAddressSpaceInfo::GetAddressSpaceSize(ams::svc::CreateProcessParameterFlag flags, KAddressSpaceInfo::Type type) { /* Extract the address space from the create process flags. */ - const auto as_flags = (flags & ams::svc::CreateProcessFlag_AddressSpaceMask); + const auto as_flags = (flags & ams::svc::CreateProcessParameterFlag_AddressSpaceMask); /* Get the address space width. */ const auto as_width = GetAddressSpaceWidth(flags); @@ -88,7 +88,7 @@ namespace ams::kern { size_t as_size = GetAddressSpaceInfo(as_width, type).GetSize(); /* If we're getting size for 32-bit without alias, adjust the sizes accordingly. */ - if (as_flags == ams::svc::CreateProcessFlag_AddressSpace32BitWithoutAlias) { + if (as_flags == ams::svc::CreateProcessParameterFlag_AddressSpace32BitNoReserved) { switch (type) { /* The heap space receives space that would otherwise go to the alias space. */ case KAddressSpaceInfo::Type_Heap: diff --git a/libraries/libmesosphere/source/kern_k_debug_base.cpp b/libraries/libmesosphere/source/kern_k_debug_base.cpp index 40ff0ce3f..7150c8a4e 100644 --- a/libraries/libmesosphere/source/kern_k_debug_base.cpp +++ b/libraries/libmesosphere/source/kern_k_debug_base.cpp @@ -884,7 +884,7 @@ namespace ams::kern { { out->info.create_process.program_id = process->GetProgramId(); out->info.create_process.process_id = process->GetId(); - out->info.create_process.flags = process->GetCreateProcessFlags(); + out->info.create_process.flags = process->GetCreateProcessParameterFlags(); out->info.create_process.user_exception_context_address = GetInteger(process->GetProcessLocalRegionAddress()); std::memcpy(out->info.create_process.name, process->GetName(), sizeof(out->info.create_process.name)); diff --git a/libraries/libmesosphere/source/kern_k_initial_process_reader.cpp b/libraries/libmesosphere/source/kern_k_initial_process_reader.cpp index 61c04dd18..6037c3b78 100644 --- a/libraries/libmesosphere/source/kern_k_initial_process_reader.cpp +++ b/libraries/libmesosphere/source/kern_k_initial_process_reader.cpp @@ -214,19 +214,19 @@ namespace ams::kern { /* Apply other flags. */ if (this->Is64Bit()) { - out->flags |= ams::svc::CreateProcessFlag_Is64Bit; + out->flags |= ams::svc::CreateProcessParameterFlag_64Bit; } if (this->Is64BitAddressSpace()) { - out->flags |= (GetTargetFirmware() >= TargetFirmware_2_0_0) ? ams::svc::CreateProcessFlag_AddressSpace64Bit : ams::svc::CreateProcessFlag_AddressSpace64BitDeprecated; + out->flags |= (GetTargetFirmware() >= TargetFirmware_2_0_0) ? ams::svc::CreateProcessParameterFlag_AddressSpace64Bit39 : ams::svc::CreateProcessParameterFlag_AddressSpace64Bit36; } else { - out->flags |= ams::svc::CreateProcessFlag_AddressSpace32Bit; + out->flags |= ams::svc::CreateProcessParameterFlag_AddressSpace32Bit; } if (enable_aslr) { - out->flags |= ams::svc::CreateProcessFlag_EnableAslr; + out->flags |= ams::svc::CreateProcessParameterFlag_EnableAslr; } /* All initial processes should disable device address space merge. */ - out->flags |= ams::svc::CreateProcessFlag_DisableDeviceAddressSpaceMerge; + out->flags |= ams::svc::CreateProcessParameterFlag_DisableDeviceAddressSpaceMerge; /* Set and check code address. */ /* NOTE: Even though Nintendo passes a size to GetAddressSpaceStart at other call sites, they pass */ @@ -234,8 +234,8 @@ namespace ams::kern { /* almost certainly a bug. */ using ASType = KAddressSpaceInfo::Type; const ASType as_type = this->Is64BitAddressSpace() ? ((GetTargetFirmware() >= TargetFirmware_2_0_0) ? KAddressSpaceInfo::Type_MapHuge : KAddressSpaceInfo::Type_MapSmall) : KAddressSpaceInfo::Type_MapSmall; - const uintptr_t map_start = KAddressSpaceInfo::GetAddressSpaceStart(static_cast(out->flags), as_type, out->code_num_pages); - const size_t map_size = KAddressSpaceInfo::GetAddressSpaceSize(static_cast(out->flags), as_type); + const uintptr_t map_start = KAddressSpaceInfo::GetAddressSpaceStart(static_cast(out->flags), as_type, out->code_num_pages); + const size_t map_size = KAddressSpaceInfo::GetAddressSpaceSize(static_cast(out->flags), as_type); const uintptr_t map_end = map_start + map_size; out->code_address = map_start + start_address; MESOSPHERE_ABORT_UNLESS((out->code_address / PageSize) + out->code_num_pages <= (map_end / PageSize)); diff --git a/libraries/libmesosphere/source/kern_k_page_table_base.cpp b/libraries/libmesosphere/source/kern_k_page_table_base.cpp index 5b40e20e0..5f1a5b19b 100644 --- a/libraries/libmesosphere/source/kern_k_page_table_base.cpp +++ b/libraries/libmesosphere/source/kern_k_page_table_base.cpp @@ -133,7 +133,7 @@ namespace ams::kern { MESOSPHERE_R_ABORT_UNLESS(m_memory_block_manager.Initialize(m_address_space_start, m_address_space_end, m_memory_block_slab_manager)); } - Result KPageTableBase::InitializeForProcess(ams::svc::CreateProcessFlag flags, bool from_back, void *table, KProcessAddress start, KProcessAddress end, KMemoryManager::Pool pool, KProcessAddress code_address, size_t code_size, KSystemResource *system_resource, KResourceLimit *resource_limit) { + Result KPageTableBase::InitializeForProcess(ams::svc::CreateProcessParameterFlag flags, bool from_back, void *table, KProcessAddress start, KProcessAddress end, KMemoryManager::Pool pool, KProcessAddress code_address, size_t code_size, KSystemResource *system_resource, KResourceLimit *resource_limit) { /* Validate the region. */ MESOSPHERE_ABORT_UNLESS(start <= code_address); MESOSPHERE_ABORT_UNLESS(code_address < code_address + code_size); @@ -179,8 +179,8 @@ namespace ams::kern { after_process_code_start = process_code_end; after_process_code_size = m_code_region_end - process_code_end; - /* If we have a 39-bit address space and should, enable extra size to the alias region. */ - if (flags & ams::svc::CreateProcessFlag_EnableAliasRegionExtraSize) { + /* If we have a 39-bit address space and should, enable extra size for the address sanitizer. */ + if (flags & ams::svc::CreateProcessParameterFlag_EnableAddressSanitizer) { /* Extra size is 1/8th of the address space. */ m_alias_region_extra_size = (static_cast(1) << address_space_width) / 8; @@ -212,8 +212,8 @@ namespace ams::kern { m_region_ends[RegionType_ShadowStack] = Null; /* Set other basic fields. */ - m_enable_aslr = (flags & ams::svc::CreateProcessFlag_EnableAslr) != 0; - m_enable_device_address_space_merge = (flags & ams::svc::CreateProcessFlag_DisableDeviceAddressSpaceMerge) == 0; + m_enable_aslr = (flags & ams::svc::CreateProcessParameterFlag_EnableAslr) != 0; + m_enable_device_address_space_merge = (flags & ams::svc::CreateProcessParameterFlag_DisableDeviceAddressSpaceMerge) == 0; m_allowed_exec_device_mapping = false; m_address_space_start = start; m_address_space_end = end; @@ -240,7 +240,7 @@ namespace ams::kern { region_layouts[num_regions++] = { .size = alias_region_size, .type = RegionType_Alias, .alloc_index = 0, }; region_layouts[num_regions++] = { .size = heap_region_size, .type = RegionType_Heap, .alloc_index = 0, }; - if (flags & ams::svc::CreateProcessFlag_EnableShadowStack) { + if (flags & ams::svc::CreateProcessParameterFlag_EnableShadowStack) { region_layouts[num_regions++] = { .size = ams::svc::AddressShadowStackRegionSize, .type = RegionType_ShadowStack, .alloc_index = 0, }; } diff --git a/libraries/libmesosphere/source/kern_k_process.cpp b/libraries/libmesosphere/source/kern_k_process.cpp index 7d1b0d0f4..ad49b783b 100644 --- a/libraries/libmesosphere/source/kern_k_process.cpp +++ b/libraries/libmesosphere/source/kern_k_process.cpp @@ -210,7 +210,7 @@ namespace ams::kern { m_program_id = params.program_id; m_code_address = params.code_address; m_code_size = params.code_num_pages * PageSize; - m_is_application = (params.flags & ams::svc::CreateProcessFlag_IsApplication); + m_is_application = (params.flags & ams::svc::CreateProcessParameterFlag_IsApplication); m_is_jit_debug = false; #if defined(MESOSPHERE_ENABLE_PROCESS_CREATION_TIME) @@ -226,7 +226,7 @@ namespace ams::kern { } /* Set max memory. */ - m_max_process_memory = KAddressSpaceInfo::GetAddressSpaceSize(static_cast(m_flags), KAddressSpaceInfo::Type_Heap); + m_max_process_memory = KAddressSpaceInfo::GetAddressSpaceSize(static_cast(m_flags), KAddressSpaceInfo::Type_Heap); /* Generate random entropy. */ KSystemControl::GenerateRandom(m_entropy, util::size(m_entropy)); @@ -279,7 +279,7 @@ namespace ams::kern { m_system_resource = secure_resource; } else { /* Use the system-wide system resource. */ - const bool is_app = (params.flags & ams::svc::CreateProcessFlag_IsApplication); + const bool is_app = (params.flags & ams::svc::CreateProcessParameterFlag_IsApplication); m_system_resource = std::addressof(is_app ? Kernel::GetApplicationSystemResource() : Kernel::GetSystemSystemResource()); m_is_default_application_system_resource = is_app; @@ -293,8 +293,8 @@ namespace ams::kern { /* Setup page table. */ { - const bool from_back = (params.flags & ams::svc::CreateProcessFlag_EnableAslr) == 0; - R_TRY(m_page_table.Initialize(static_cast(params.flags), from_back, pool, params.code_address, params.code_num_pages * PageSize, m_system_resource, res_limit, this->GetSlabIndex())); + const bool from_back = (params.flags & ams::svc::CreateProcessParameterFlag_EnableAslr) == 0; + R_TRY(m_page_table.Initialize(static_cast(params.flags), from_back, pool, params.code_address, params.code_num_pages * PageSize, m_system_resource, res_limit, this->GetSlabIndex())); } ON_RESULT_FAILURE_2 { m_page_table.Finalize(); }; @@ -358,7 +358,7 @@ namespace ams::kern { } else { /* Use the system-wide system resource. */ - const bool is_app = (params.flags & ams::svc::CreateProcessFlag_IsApplication); + const bool is_app = (params.flags & ams::svc::CreateProcessParameterFlag_IsApplication); m_system_resource = std::addressof(is_app ? Kernel::GetApplicationSystemResource() : Kernel::GetSystemSystemResource()); m_is_default_application_system_resource = is_app; @@ -372,8 +372,8 @@ namespace ams::kern { /* Setup page table. */ { - const bool from_back = (params.flags & ams::svc::CreateProcessFlag_EnableAslr) == 0; - R_TRY(m_page_table.Initialize(static_cast(params.flags), from_back, pool, params.code_address, code_size, m_system_resource, res_limit, this->GetSlabIndex())); + const bool from_back = (params.flags & ams::svc::CreateProcessParameterFlag_EnableAslr) == 0; + R_TRY(m_page_table.Initialize(static_cast(params.flags), from_back, pool, params.code_address, code_size, m_system_resource, res_limit, this->GetSlabIndex())); } ON_RESULT_FAILURE_2 { m_page_table.Finalize(); }; @@ -392,7 +392,7 @@ namespace ams::kern { MESOSPHERE_ABORT_UNLESS(m_process_id <= ProcessIdMax); /* If we should optimize memory allocations, do so. */ - if (m_system_resource->IsSecureResource() && (params.flags & ams::svc::CreateProcessFlag_OptimizeMemoryAllocation) != 0) { + if (m_system_resource->IsSecureResource() && (params.flags & ams::svc::CreateProcessParameterFlag_OptimizeMemoryAllocation) != 0) { R_TRY(Kernel::GetMemoryManager().InitializeOptimizedMemory(m_process_id, pool)); } @@ -1192,7 +1192,7 @@ namespace ams::kern { MESOSPHERE_ASSERT(this == GetCurrentProcessPointer()); /* If we aren't allowed to enter jit debug, don't. */ - if ((m_flags & ams::svc::CreateProcessFlag_EnableDebug) == 0) { + if ((m_flags & ams::svc::CreateProcessParameterFlag_EnableJitDebug) == 0) { return false; } diff --git a/libraries/libmesosphere/source/svc/kern_svc_process.cpp b/libraries/libmesosphere/source/svc/kern_svc_process.cpp index c570c40d6..982719d41 100644 --- a/libraries/libmesosphere/source/svc/kern_svc_process.cpp +++ b/libraries/libmesosphere/source/svc/kern_svc_process.cpp @@ -86,15 +86,15 @@ namespace ams::kern::svc { R_RETURN(KProcess::GetProcessList(out_num_processes, out_process_ids, max_out_count)); } - constexpr size_t GetProcessSlotT0Sz(ams::svc::CreateProcessFlag flags) { - if ((flags & ams::svc::CreateProcessFlag_AddressSpaceMask) == ams::svc::CreateProcessFlag_AddressSpace64Bit64KPage) { + constexpr size_t GetProcessSlotT0Sz(ams::svc::CreateProcessParameterFlag flags) { + if ((flags & ams::svc::CreateProcessParameterFlag_AddressSpaceMask) == ams::svc::CreateProcessParameterFlag_AddressSpace64Bit42) { return (64 - 42); } else { return (64 - 39); } } - KProcess *CreateProcessForAddressSpace(ams::svc::CreateProcessFlag flags) { + KProcess *CreateProcessForAddressSpace(ams::svc::CreateProcessParameterFlag flags) { /* Find a process slab slot whose root page table is meant for the requested address space. */ const size_t desired_t0sz = GetProcessSlotT0Sz(flags); @@ -132,13 +132,13 @@ namespace ams::kern::svc { } /* Validate that the parameter flags are valid. */ - R_UNLESS((params.flags & ~ams::svc::CreateProcessFlag_All) == 0, svc::ResultInvalidEnumValue()); + R_UNLESS((params.flags & ~ams::svc::CreateProcessParameterFlag_All) == 0, svc::ResultInvalidEnumValue()); /* The 64KB page size is not yet allowed. */ - R_UNLESS((params.flags & ams::svc::CreateProcessFlag_AddressSpaceMask) != ams::svc::CreateProcessFlag_AddressSpace64Bit64KPage, svc::ResultInvalidCombination()); + R_UNLESS((params.flags & ams::svc::CreateProcessParameterFlag_AddressSpaceMask) != ams::svc::CreateProcessParameterFlag_AddressSpace64Bit42, svc::ResultInvalidCombination()); /* Validate that 64-bit process is okay. */ - const bool is_64_bit = (params.flags & ams::svc::CreateProcessFlag_Is64Bit) != 0; + const bool is_64_bit = (params.flags & ams::svc::CreateProcessParameterFlag_64Bit) != 0; if constexpr (sizeof(void *) < sizeof(u64)) { R_UNLESS(!is_64_bit, svc::ResultInvalidCombination()); } @@ -147,35 +147,35 @@ namespace ams::kern::svc { uintptr_t map_start, map_end; size_t map_size; const size_t code_size = params.code_num_pages * PageSize; - switch (params.flags & ams::svc::CreateProcessFlag_AddressSpaceMask) { - case ams::svc::CreateProcessFlag_AddressSpace32Bit: - case ams::svc::CreateProcessFlag_AddressSpace32BitWithoutAlias: + switch (params.flags & ams::svc::CreateProcessParameterFlag_AddressSpaceMask) { + case ams::svc::CreateProcessParameterFlag_AddressSpace32Bit: + case ams::svc::CreateProcessParameterFlag_AddressSpace32BitNoReserved: { - map_start = KAddressSpaceInfo::GetAddressSpaceStart(static_cast(params.flags), KAddressSpaceInfo::Type_MapSmall, code_size); - map_size = KAddressSpaceInfo::GetAddressSpaceSize(static_cast(params.flags), KAddressSpaceInfo::Type_MapSmall); + map_start = KAddressSpaceInfo::GetAddressSpaceStart(static_cast(params.flags), KAddressSpaceInfo::Type_MapSmall, code_size); + map_size = KAddressSpaceInfo::GetAddressSpaceSize(static_cast(params.flags), KAddressSpaceInfo::Type_MapSmall); map_end = map_start + map_size; } break; - case ams::svc::CreateProcessFlag_AddressSpace64BitDeprecated: + case ams::svc::CreateProcessParameterFlag_AddressSpace64Bit36: { /* 64-bit address space requires 64-bit process. */ R_UNLESS(is_64_bit, svc::ResultInvalidCombination()); - map_start = KAddressSpaceInfo::GetAddressSpaceStart(static_cast(params.flags), KAddressSpaceInfo::Type_MapSmall, code_size); - map_size = KAddressSpaceInfo::GetAddressSpaceSize(static_cast(params.flags), KAddressSpaceInfo::Type_MapSmall); + map_start = KAddressSpaceInfo::GetAddressSpaceStart(static_cast(params.flags), KAddressSpaceInfo::Type_MapSmall, code_size); + map_size = KAddressSpaceInfo::GetAddressSpaceSize(static_cast(params.flags), KAddressSpaceInfo::Type_MapSmall); map_end = map_start + map_size; } break; - case ams::svc::CreateProcessFlag_AddressSpace64Bit: - case ams::svc::CreateProcessFlag_AddressSpace64Bit64KPage: + case ams::svc::CreateProcessParameterFlag_AddressSpace64Bit39: + case ams::svc::CreateProcessParameterFlag_AddressSpace64Bit42: { /* 64-bit address space requires 64-bit process. */ R_UNLESS(is_64_bit, svc::ResultInvalidCombination()); - map_start = KAddressSpaceInfo::GetAddressSpaceStart(static_cast(params.flags), KAddressSpaceInfo::Type_MapHuge, code_size); - map_end = map_start + KAddressSpaceInfo::GetAddressSpaceSize(static_cast(params.flags), KAddressSpaceInfo::Type_MapHuge); + map_start = KAddressSpaceInfo::GetAddressSpaceStart(static_cast(params.flags), KAddressSpaceInfo::Type_MapHuge, code_size); + map_end = map_start + KAddressSpaceInfo::GetAddressSpaceSize(static_cast(params.flags), KAddressSpaceInfo::Type_MapHuge); - map_size = KAddressSpaceInfo::GetAddressSpaceSize(static_cast(params.flags), KAddressSpaceInfo::Type_Heap); + map_size = KAddressSpaceInfo::GetAddressSpaceSize(static_cast(params.flags), KAddressSpaceInfo::Type_Heap); } break; default: @@ -184,11 +184,11 @@ namespace ams::kern::svc { /* Validate the pool partition. */ if (GetTargetFirmware() >= TargetFirmware_5_0_0) { - switch (params.flags & ams::svc::CreateProcessFlag_PoolPartitionMask) { - case ams::svc::CreateProcessFlag_PoolPartitionApplication: - case ams::svc::CreateProcessFlag_PoolPartitionApplet: - case ams::svc::CreateProcessFlag_PoolPartitionSystem: - case ams::svc::CreateProcessFlag_PoolPartitionSystemNonSecure: + switch (params.flags & ams::svc::CreateProcessParameterFlag_PoolPartitionMask) { + case ams::svc::CreateProcessParameterFlag_PoolPartitionApplication: + case ams::svc::CreateProcessParameterFlag_PoolPartitionApplet: + case ams::svc::CreateProcessParameterFlag_PoolPartitionSystem: + case ams::svc::CreateProcessParameterFlag_PoolPartitionSystemNonSecure: break; default: R_THROW(svc::ResultInvalidEnumValue()); @@ -204,10 +204,10 @@ namespace ams::kern::svc { /* Check that the number of extra resource pages is >= 0. */ R_UNLESS(params.system_resource_num_pages >= 0, svc::ResultInvalidSize()); - /* Validate that the alias region extra size is allowed, if enabled. */ - if (params.flags & ams::svc::CreateProcessFlag_EnableAliasRegionExtraSize) { + /* Validate that the address sanitizer is allowed, if enabled. */ + if (params.flags & ams::svc::CreateProcessParameterFlag_EnableAddressSanitizer) { /* Check that we have a 64-bit address space. */ - R_UNLESS((params.flags & ams::svc::CreateProcessFlag_AddressSpaceMask) == ams::svc::CreateProcessFlag_AddressSpace64Bit, svc::ResultInvalidState()); + R_UNLESS((params.flags & ams::svc::CreateProcessParameterFlag_AddressSpaceMask) == ams::svc::CreateProcessParameterFlag_AddressSpace64Bit39, svc::ResultInvalidState()); /* Check that the system resource page count is non-zero. */ R_UNLESS(params.system_resource_num_pages > 0, svc::ResultInvalidState()); @@ -243,8 +243,8 @@ namespace ams::kern::svc { R_UNLESS(total_pages < (kern::MainMemorySizeMax / PageSize), svc::ResultOutOfMemory()); /* Check that optimized memory allocation is used only for applications. */ - const bool optimize_allocs = (params.flags & ams::svc::CreateProcessFlag_OptimizeMemoryAllocation) != 0; - const bool is_application = (params.flags & ams::svc::CreateProcessFlag_IsApplication) != 0; + const bool optimize_allocs = (params.flags & ams::svc::CreateProcessParameterFlag_OptimizeMemoryAllocation) != 0; + const bool is_application = (params.flags & ams::svc::CreateProcessParameterFlag_IsApplication) != 0; R_UNLESS(!optimize_allocs || is_application, svc::ResultBusy()); /* Check that the user-provided capabilities are accessible and refer to valid regions. */ @@ -254,7 +254,7 @@ namespace ams::kern::svc { auto &handle_table = GetCurrentProcess().GetHandleTable(); /* Create the new process, ensuring its page table slot matches the requested address space. */ - KProcess *process = CreateProcessForAddressSpace(static_cast(params.flags)); + KProcess *process = CreateProcessForAddressSpace(static_cast(params.flags)); R_UNLESS(process != nullptr, svc::ResultOutOfResource()); /* Ensure that the only reference to the process is in the handle table when we're done. */ @@ -270,19 +270,19 @@ namespace ams::kern::svc { /* Get the pool for the process. */ const auto pool = [](u32 flags) ALWAYS_INLINE_LAMBDA -> KMemoryManager::Pool { if (GetTargetFirmware() >= TargetFirmware_5_0_0) { - switch (flags & ams::svc::CreateProcessFlag_PoolPartitionMask) { - case ams::svc::CreateProcessFlag_PoolPartitionApplication: + switch (flags & ams::svc::CreateProcessParameterFlag_PoolPartitionMask) { + case ams::svc::CreateProcessParameterFlag_PoolPartitionApplication: return KMemoryManager::Pool_Application; - case ams::svc::CreateProcessFlag_PoolPartitionApplet: + case ams::svc::CreateProcessParameterFlag_PoolPartitionApplet: return KMemoryManager::Pool_Applet; - case ams::svc::CreateProcessFlag_PoolPartitionSystem: + case ams::svc::CreateProcessParameterFlag_PoolPartitionSystem: return KMemoryManager::Pool_System; - case ams::svc::CreateProcessFlag_PoolPartitionSystemNonSecure: + case ams::svc::CreateProcessParameterFlag_PoolPartitionSystemNonSecure: default: return KMemoryManager::Pool_SystemNonSecure; } } else if (GetTargetFirmware() >= TargetFirmware_4_0_0) { - if ((flags & ams::svc::CreateProcessFlag_DeprecatedUseSecureMemory) != 0) { + if ((flags & ams::svc::CreateProcessParameterFlag_DeprecatedUseSecureMemory) != 0) { return KMemoryManager::Pool_Secure; } else { return static_cast(KSystemControl::GetCreateProcessMemoryPool()); diff --git a/libraries/libstratosphere/include/stratosphere/cfg/cfg_types.hpp b/libraries/libstratosphere/include/stratosphere/cfg/cfg_types.hpp index 20976587c..785c278dc 100644 --- a/libraries/libstratosphere/include/stratosphere/cfg/cfg_types.hpp +++ b/libraries/libstratosphere/include/stratosphere/cfg/cfg_types.hpp @@ -31,11 +31,11 @@ namespace ams::cfg { OverrideStatusFlag_AddressSpaceMask = ((1u << 2) - 1) << OverrideStatusFlag_AddressSpaceShift, #if defined(ATMOSPHERE_OS_HORIZON) - OverrideStatusFlag_AddressSpace32Bit = (svc::CreateProcessFlag_AddressSpace32Bit >> svc::CreateProcessFlag_AddressSpaceShift) << OverrideStatusFlag_AddressSpaceShift, - OverrideStatusFlag_AddressSpace64BitDeprecated = (svc::CreateProcessFlag_AddressSpace64BitDeprecated >> svc::CreateProcessFlag_AddressSpaceShift) << OverrideStatusFlag_AddressSpaceShift, - OverrideStatusFlag_AddressSpace32BitWithoutAlias = (svc::CreateProcessFlag_AddressSpace32BitWithoutAlias >> svc::CreateProcessFlag_AddressSpaceShift) << OverrideStatusFlag_AddressSpaceShift, - OverrideStatusFlag_AddressSpace64Bit = (svc::CreateProcessFlag_AddressSpace64Bit >> svc::CreateProcessFlag_AddressSpaceShift) << OverrideStatusFlag_AddressSpaceShift, - OverrideStatusFlag_AddressSpace64Bit64KPage = (svc::CreateProcessFlag_AddressSpace64Bit64KPage >> svc::CreateProcessFlag_AddressSpaceShift) << OverrideStatusFlag_AddressSpaceShift, + OverrideStatusFlag_AddressSpace32Bit = (svc::CreateProcessParameterFlag_AddressSpace32Bit >> svc::CreateProcessParameterFlag_AddressSpaceShift) << OverrideStatusFlag_AddressSpaceShift, + OverrideStatusFlag_AddressSpace64Bit36 = (svc::CreateProcessParameterFlag_AddressSpace64Bit36 >> svc::CreateProcessParameterFlag_AddressSpaceShift) << OverrideStatusFlag_AddressSpaceShift, + OverrideStatusFlag_AddressSpace32BitNoReserved = (svc::CreateProcessParameterFlag_AddressSpace32BitNoReserved >> svc::CreateProcessParameterFlag_AddressSpaceShift) << OverrideStatusFlag_AddressSpaceShift, + OverrideStatusFlag_AddressSpace64Bit39 = (svc::CreateProcessParameterFlag_AddressSpace64Bit39 >> svc::CreateProcessParameterFlag_AddressSpaceShift) << OverrideStatusFlag_AddressSpaceShift, + OverrideStatusFlag_AddressSpace64Bit42 = (svc::CreateProcessParameterFlag_AddressSpace64Bit42 >> svc::CreateProcessParameterFlag_AddressSpaceShift) << OverrideStatusFlag_AddressSpaceShift, #endif }; diff --git a/libraries/libstratosphere/include/stratosphere/ldr/ldr_types.hpp b/libraries/libstratosphere/include/stratosphere/ldr/ldr_types.hpp index c97711a53..7d36cae1c 100644 --- a/libraries/libstratosphere/include/stratosphere/ldr/ldr_types.hpp +++ b/libraries/libstratosphere/include/stratosphere/ldr/ldr_types.hpp @@ -50,9 +50,9 @@ namespace ams::ldr { ProgramInfoFlag_AllowDebug = (1 << 2), }; - enum CreateProcessFlag { - CreateProcessFlag_EnableDebug = (1 << 0), - CreateProcessFlag_DisableAslr = (1 << 1), + enum CreateProcessParameterFlag { + CreateProcessParameterFlag_EnableJitDebug = (1 << 0), + CreateProcessParameterFlag_DisableAslr = (1 << 1), }; struct ProgramArguments { @@ -194,10 +194,10 @@ namespace ams::ldr { }; #if defined(ATMOSPHERE_OS_HORIZON) - static_assert(PoolPartition_Application == (svc::CreateProcessFlag_PoolPartitionApplication >> svc::CreateProcessFlag_PoolPartitionShift)); - static_assert(PoolPartition_Applet == (svc::CreateProcessFlag_PoolPartitionApplet >> svc::CreateProcessFlag_PoolPartitionShift)); - static_assert(PoolPartition_System == (svc::CreateProcessFlag_PoolPartitionSystem >> svc::CreateProcessFlag_PoolPartitionShift)); - static_assert(PoolPartition_SystemNonSecure == (svc::CreateProcessFlag_PoolPartitionSystemNonSecure >> svc::CreateProcessFlag_PoolPartitionShift)); + static_assert(PoolPartition_Application == (svc::CreateProcessParameterFlag_PoolPartitionApplication >> svc::CreateProcessParameterFlag_PoolPartitionShift)); + static_assert(PoolPartition_Applet == (svc::CreateProcessParameterFlag_PoolPartitionApplet >> svc::CreateProcessParameterFlag_PoolPartitionShift)); + static_assert(PoolPartition_System == (svc::CreateProcessParameterFlag_PoolPartitionSystem >> svc::CreateProcessParameterFlag_PoolPartitionShift)); + static_assert(PoolPartition_SystemNonSecure == (svc::CreateProcessParameterFlag_PoolPartitionSystemNonSecure >> svc::CreateProcessParameterFlag_PoolPartitionShift)); #endif u8 signature[0x100]; @@ -223,43 +223,43 @@ namespace ams::ldr { struct Npdm { static constexpr u32 Magic = util::FourCC<'M','E','T','A'>::Code; - enum MetaFlag { - MetaFlag_Is64Bit = (1 << 0), + enum MetaFlag0 { + MetaFlag0_Is64BitInstruction = (1 << 0), - MetaFlag_AddressSpaceTypeShift = 1, - MetaFlag_AddressSpaceTypeMask = (7 << MetaFlag_AddressSpaceTypeShift), + MetaFlag0_ProcessAddressSpaceShift = 1, + MetaFlag0_ProcessAddressSpaceMask = (7 << MetaFlag0_ProcessAddressSpaceShift), - MetaFlag_OptimizeMemoryAllocation = (1 << 4), - MetaFlag_DisableDeviceAddressSpaceMerge = (1 << 5), - MetaFlag_EnableAliasRegionExtraSize = (1 << 6), - MetaFlag_PreventCodeReads = (1 << 7), + MetaFlag0_OptimizeMemoryAllocation = (1 << 4), + MetaFlag0_DisableDeviceAddressSpaceMerge = (1 << 5), + MetaFlag0_EnableAddressSanitizer = (1 << 6), + MetaFlag0_PreventCodeReads = (1 << 7), }; - enum MetaFlag2 { - MetaFlag2_EnableShadowStack = (1 << 0), + enum MetaFlag1 { + MetaFlag1_EnableShadowStack = (1 << 0), }; - enum AddressSpaceType { - AddressSpaceType_32Bit = 0, - AddressSpaceType_64BitDeprecated = 1, - AddressSpaceType_32BitWithoutAlias = 2, - AddressSpaceType_64Bit = 3, - AddressSpaceType_64Bit64KPage = 4, + enum ProcessAddressSpace { + ProcessAddressSpace_32Bit = 0, + ProcessAddressSpace_64Bit36 = 1, + ProcessAddressSpace_32BitNoReserved = 2, + ProcessAddressSpace_64Bit39 = 3, + ProcessAddressSpace_64Bit42 = 4, }; #if defined(ATMOSPHERE_OS_HORIZON) - static_assert(AddressSpaceType_32Bit == (svc::CreateProcessFlag_AddressSpace32Bit >> svc::CreateProcessFlag_AddressSpaceShift)); - static_assert(AddressSpaceType_64BitDeprecated == (svc::CreateProcessFlag_AddressSpace64BitDeprecated >> svc::CreateProcessFlag_AddressSpaceShift)); - static_assert(AddressSpaceType_32BitWithoutAlias == (svc::CreateProcessFlag_AddressSpace32BitWithoutAlias >> svc::CreateProcessFlag_AddressSpaceShift)); - static_assert(AddressSpaceType_64Bit == (svc::CreateProcessFlag_AddressSpace64Bit >> svc::CreateProcessFlag_AddressSpaceShift)); - static_assert(AddressSpaceType_64Bit64KPage == (svc::CreateProcessFlag_AddressSpace64Bit64KPage >> svc::CreateProcessFlag_AddressSpaceShift)); + static_assert(ProcessAddressSpace_32Bit == (svc::CreateProcessParameterFlag_AddressSpace32Bit >> svc::CreateProcessParameterFlag_AddressSpaceShift)); + static_assert(ProcessAddressSpace_64Bit36 == (svc::CreateProcessParameterFlag_AddressSpace64Bit36 >> svc::CreateProcessParameterFlag_AddressSpaceShift)); + static_assert(ProcessAddressSpace_32BitNoReserved == (svc::CreateProcessParameterFlag_AddressSpace32BitNoReserved >> svc::CreateProcessParameterFlag_AddressSpaceShift)); + static_assert(ProcessAddressSpace_64Bit39 == (svc::CreateProcessParameterFlag_AddressSpace64Bit39 >> svc::CreateProcessParameterFlag_AddressSpaceShift)); + static_assert(ProcessAddressSpace_64Bit42 == (svc::CreateProcessParameterFlag_AddressSpace64Bit42 >> svc::CreateProcessParameterFlag_AddressSpaceShift)); #endif u32 magic; u32 signature_key_generation; u8 reserved_08[4]; - u8 flags; - u8 flags2; + u8 flags0; + u8 flags1; u8 main_thread_priority; u8 default_cpu_id; u8 reserved_10[4]; diff --git a/libraries/libstratosphere/source/cfg/cfg_override.board.nintendo_nx.inc b/libraries/libstratosphere/source/cfg/cfg_override.board.nintendo_nx.inc index 420f71198..ecdc1ecaf 100644 --- a/libraries/libstratosphere/source/cfg/cfg_override.board.nintendo_nx.inc +++ b/libraries/libstratosphere/source/cfg/cfg_override.board.nintendo_nx.inc @@ -79,20 +79,20 @@ namespace ams::cfg { InvalidProgramOverrideKey, }, .program_as_flags = { - impl::OverrideStatusFlag_AddressSpace64Bit, - impl::OverrideStatusFlag_AddressSpace64Bit, - impl::OverrideStatusFlag_AddressSpace64Bit, - impl::OverrideStatusFlag_AddressSpace64Bit, - impl::OverrideStatusFlag_AddressSpace64Bit, - impl::OverrideStatusFlag_AddressSpace64Bit, - impl::OverrideStatusFlag_AddressSpace64Bit, - impl::OverrideStatusFlag_AddressSpace64Bit, + impl::OverrideStatusFlag_AddressSpace64Bit39, + impl::OverrideStatusFlag_AddressSpace64Bit39, + impl::OverrideStatusFlag_AddressSpace64Bit39, + impl::OverrideStatusFlag_AddressSpace64Bit39, + impl::OverrideStatusFlag_AddressSpace64Bit39, + impl::OverrideStatusFlag_AddressSpace64Bit39, + impl::OverrideStatusFlag_AddressSpace64Bit39, + impl::OverrideStatusFlag_AddressSpace64Bit39, }, .override_any_app_key = { .key_combination = HidNpadButton_R, .override_by_default = false, }, - .override_any_app_as_flag = impl::OverrideStatusFlag_AddressSpace64Bit, + .override_any_app_as_flag = impl::OverrideStatusFlag_AddressSpace64Bit39, .override_any_app = true, }; @@ -152,11 +152,11 @@ namespace ams::cfg { impl::OverrideStatusFlag ParseOverrideAddressSpace(const char *value) { if (strcasecmp(value, "39_bit") == 0 || strcasecmp(value, "39") == 0) { - return impl::OverrideStatusFlag_AddressSpace64Bit; + return impl::OverrideStatusFlag_AddressSpace64Bit39; } else if (strcasecmp(value, "42_bit") == 0 || strcasecmp(value, "42") == 0) { - return impl::OverrideStatusFlag_AddressSpace64Bit64KPage; + return impl::OverrideStatusFlag_AddressSpace64Bit42; } else if (strcasecmp(value, "36_bit") == 0 || strcasecmp(value, "36") == 0) { - return impl::OverrideStatusFlag_AddressSpace64BitDeprecated; + return impl::OverrideStatusFlag_AddressSpace64Bit36; } else if (strcasecmp(value, "32_bit") == 0 || strcasecmp(value, "32") == 0) { return impl::OverrideStatusFlag_AddressSpace32Bit; } else if (strcasecmp(value, "32_bit_without_alias") == 0 || @@ -168,10 +168,10 @@ namespace ams::cfg { strcasecmp(value, "32_without_map") == 0 || strcasecmp(value, "32_no_map") == 0) { - return impl::OverrideStatusFlag_AddressSpace32BitWithoutAlias; + return impl::OverrideStatusFlag_AddressSpace32BitNoReserved; } else { /* Default to 39-bit. */ - return impl::OverrideStatusFlag_AddressSpace64Bit; + return impl::OverrideStatusFlag_AddressSpace64Bit39; } } diff --git a/libraries/libstratosphere/source/osdbg/impl/osdbg_thread_info.os.horizon.hpp b/libraries/libstratosphere/source/osdbg/impl/osdbg_thread_info.os.horizon.hpp index 1bd74bfba..4ab701ea3 100644 --- a/libraries/libstratosphere/source/osdbg/impl/osdbg_thread_info.os.horizon.hpp +++ b/libraries/libstratosphere/source/osdbg/impl/osdbg_thread_info.os.horizon.hpp @@ -27,14 +27,14 @@ namespace ams::osdbg::impl { using ThreadInfoImpl = ThreadInfoHorizonImpl; constexpr inline bool IsLp64(const ThreadInfo *info) { - const auto as = info->_debug_info_create_process.flags & svc::CreateProcessFlag_AddressSpaceMask; - return as == svc::CreateProcessFlag_AddressSpace64Bit - || as == svc::CreateProcessFlag_AddressSpace64BitDeprecated - || as == svc::CreateProcessFlag_AddressSpace64Bit64KPage; + const auto as = info->_debug_info_create_process.flags & svc::CreateProcessParameterFlag_AddressSpaceMask; + return as == svc::CreateProcessParameterFlag_AddressSpace64Bit39 + || as == svc::CreateProcessParameterFlag_AddressSpace64Bit36 + || as == svc::CreateProcessParameterFlag_AddressSpace64Bit42; } constexpr inline bool Is64BitArch(const ThreadInfo *info) { - return (info->_debug_info_create_process.flags & svc::CreateProcessFlag_Is64Bit); + return (info->_debug_info_create_process.flags & svc::CreateProcessParameterFlag_64Bit); } } diff --git a/libraries/libvapours/include/vapours/svc/svc_types_common.hpp b/libraries/libvapours/include/vapours/svc/svc_types_common.hpp index 66f5a5648..96a18a721 100644 --- a/libraries/libvapours/include/vapours/svc/svc_types_common.hpp +++ b/libraries/libvapours/include/vapours/svc/svc_types_common.hpp @@ -96,8 +96,7 @@ namespace ams::svc { MemoryState_CodeOut = 0x15, MemoryState_Coverage = 0x16, MemoryState_Insecure = 0x17, - MemoryState_Remote = 0x18, - MemoryState_Protected = 0x19, + /* ... */ MemoryState_ShadowStack = 0x1A, }; @@ -413,62 +412,62 @@ namespace ams::svc { ProcessActivity_Paused = 1, }; - enum CreateProcessFlag : u32 { + enum CreateProcessParameterFlag : u32 { /* Is 64 bit? */ - CreateProcessFlag_Is64Bit = (1 << 0), + CreateProcessParameterFlag_64Bit = (1 << 0), /* What kind of address space? */ - CreateProcessFlag_AddressSpaceShift = 1, - CreateProcessFlag_AddressSpaceMask = (7 << CreateProcessFlag_AddressSpaceShift), /* Should be 15 but Nintendo didn't make 64K isn't usable yet */ - CreateProcessFlag_AddressSpace32Bit = (0 << CreateProcessFlag_AddressSpaceShift), - CreateProcessFlag_AddressSpace64BitDeprecated = (1 << CreateProcessFlag_AddressSpaceShift), - CreateProcessFlag_AddressSpace32BitWithoutAlias = (2 << CreateProcessFlag_AddressSpaceShift), - CreateProcessFlag_AddressSpace64Bit = (3 << CreateProcessFlag_AddressSpaceShift), - CreateProcessFlag_AddressSpace64Bit64KPage = (4 << CreateProcessFlag_AddressSpaceShift), + CreateProcessParameterFlag_AddressSpaceShift = 1, + CreateProcessParameterFlag_AddressSpaceMask = (7 << CreateProcessParameterFlag_AddressSpaceShift), /* Should be 15 but Nintendo didn't make 64K usable yet */ + CreateProcessParameterFlag_AddressSpace32Bit = (0 << CreateProcessParameterFlag_AddressSpaceShift), + CreateProcessParameterFlag_AddressSpace64Bit36 = (1 << CreateProcessParameterFlag_AddressSpaceShift), + CreateProcessParameterFlag_AddressSpace32BitNoReserved = (2 << CreateProcessParameterFlag_AddressSpaceShift), + CreateProcessParameterFlag_AddressSpace64Bit39 = (3 << CreateProcessParameterFlag_AddressSpaceShift), + CreateProcessParameterFlag_AddressSpace64Bit42 = (4 << CreateProcessParameterFlag_AddressSpaceShift), /* Should JIT debug be done on crash? */ - CreateProcessFlag_EnableDebug = (1 << 4), + CreateProcessParameterFlag_EnableJitDebug = (1 << 4), /* Should ASLR be enabled for the process? */ - CreateProcessFlag_EnableAslr = (1 << 5), + CreateProcessParameterFlag_EnableAslr = (1 << 5), /* Is the process an application? */ - CreateProcessFlag_IsApplication = (1 << 6), + CreateProcessParameterFlag_IsApplication = (1 << 6), /* 4.x deprecated: Should use secure memory? */ - CreateProcessFlag_DeprecatedUseSecureMemory = (1 << 7), + CreateProcessParameterFlag_DeprecatedUseSecureMemory = (1 << 7), /* 5.x+ Pool partition type. */ - CreateProcessFlag_PoolPartitionShift = 7, - CreateProcessFlag_PoolPartitionMask = (0xF << CreateProcessFlag_PoolPartitionShift), - CreateProcessFlag_PoolPartitionApplication = (0 << CreateProcessFlag_PoolPartitionShift), - CreateProcessFlag_PoolPartitionApplet = (1 << CreateProcessFlag_PoolPartitionShift), - CreateProcessFlag_PoolPartitionSystem = (2 << CreateProcessFlag_PoolPartitionShift), - CreateProcessFlag_PoolPartitionSystemNonSecure = (3 << CreateProcessFlag_PoolPartitionShift), + CreateProcessParameterFlag_PoolPartitionShift = 7, + CreateProcessParameterFlag_PoolPartitionMask = (0xF << CreateProcessParameterFlag_PoolPartitionShift), + CreateProcessParameterFlag_PoolPartitionApplication = (0 << CreateProcessParameterFlag_PoolPartitionShift), + CreateProcessParameterFlag_PoolPartitionApplet = (1 << CreateProcessParameterFlag_PoolPartitionShift), + CreateProcessParameterFlag_PoolPartitionSystem = (2 << CreateProcessParameterFlag_PoolPartitionShift), + CreateProcessParameterFlag_PoolPartitionSystemNonSecure = (3 << CreateProcessParameterFlag_PoolPartitionShift), /* 7.x+ Should memory allocation be optimized? This requires IsApplication. */ - CreateProcessFlag_OptimizeMemoryAllocation = (1 << 11), + CreateProcessParameterFlag_OptimizeMemoryAllocation = (1 << 11), /* 11.x+ DisableDeviceAddressSpaceMerge. */ - CreateProcessFlag_DisableDeviceAddressSpaceMerge = (1 << 12), + CreateProcessParameterFlag_DisableDeviceAddressSpaceMerge = (1 << 12), - /* 18.x EnableAliasRegionExtraSize. */ - CreateProcessFlag_EnableAliasRegionExtraSize = (1 << 13), + /* 18.x EnableAddressSanitizer. */ + CreateProcessParameterFlag_EnableAddressSanitizer = (1 << 13), /* 23.x EnableShadowStack. */ - CreateProcessFlag_EnableShadowStack = (1 << 17), + CreateProcessParameterFlag_EnableShadowStack = (1 << 17), /* Mask of all flags. */ - CreateProcessFlag_All = CreateProcessFlag_Is64Bit | - CreateProcessFlag_AddressSpaceMask | - CreateProcessFlag_EnableDebug | - CreateProcessFlag_EnableAslr | - CreateProcessFlag_IsApplication | - CreateProcessFlag_PoolPartitionMask | - CreateProcessFlag_OptimizeMemoryAllocation | - CreateProcessFlag_DisableDeviceAddressSpaceMerge | - CreateProcessFlag_EnableAliasRegionExtraSize | - CreateProcessFlag_EnableShadowStack, + CreateProcessParameterFlag_All = CreateProcessParameterFlag_64Bit | + CreateProcessParameterFlag_AddressSpaceMask | + CreateProcessParameterFlag_EnableJitDebug | + CreateProcessParameterFlag_EnableAslr | + CreateProcessParameterFlag_IsApplication | + CreateProcessParameterFlag_PoolPartitionMask | + CreateProcessParameterFlag_OptimizeMemoryAllocation | + CreateProcessParameterFlag_DisableDeviceAddressSpaceMerge | + CreateProcessParameterFlag_EnableAddressSanitizer | + CreateProcessParameterFlag_EnableShadowStack, }; /* Debug types. */ diff --git a/stratosphere/creport/source/creport_crash_report.hpp b/stratosphere/creport/source/creport_crash_report.hpp index 36aee6b11..79080d93a 100644 --- a/stratosphere/creport/source/creport_crash_report.hpp +++ b/stratosphere/creport/source/creport_crash_report.hpp @@ -67,11 +67,11 @@ namespace ams::creport { } bool IsApplication() const { - return (m_process_info.flags & svc::CreateProcessFlag_IsApplication) != 0; + return (m_process_info.flags & svc::CreateProcessParameterFlag_IsApplication) != 0; } bool Is64Bit() const { - return (m_process_info.flags & svc::CreateProcessFlag_Is64Bit) != 0; + return (m_process_info.flags & svc::CreateProcessParameterFlag_64Bit) != 0; } bool IsUserBreak() const { diff --git a/stratosphere/dmnt.gen2/source/dmnt2_debug_process.cpp b/stratosphere/dmnt.gen2/source/dmnt2_debug_process.cpp index 90505a4a9..4f25c1f5e 100644 --- a/stratosphere/dmnt.gen2/source/dmnt2_debug_process.cpp +++ b/stratosphere/dmnt.gen2/source/dmnt2_debug_process.cpp @@ -88,8 +88,8 @@ namespace ams::dmnt { m_create_process_info = d.info.create_process; /* Cache our bools. */ - m_is_64_bit = (m_create_process_info.flags & svc::CreateProcessFlag_Is64Bit); - m_is_64_bit_address_space = (m_create_process_info.flags & svc::CreateProcessFlag_AddressSpaceMask) == svc::CreateProcessFlag_AddressSpace64Bit; + m_is_64_bit = (m_create_process_info.flags & svc::CreateProcessParameterFlag_64Bit); + m_is_64_bit_address_space = (m_create_process_info.flags & svc::CreateProcessParameterFlag_AddressSpaceMask) == svc::CreateProcessParameterFlag_AddressSpace64Bit39; } break; case svc::DebugEvent_CreateThread: @@ -522,8 +522,8 @@ namespace ams::dmnt { m_create_process_info = out->info.create_process; /* Cache our bools. */ - m_is_64_bit = (m_create_process_info.flags & svc::CreateProcessFlag_Is64Bit); - m_is_64_bit_address_space = (m_create_process_info.flags & svc::CreateProcessFlag_AddressSpaceMask) == svc::CreateProcessFlag_AddressSpace64Bit; + m_is_64_bit = (m_create_process_info.flags & svc::CreateProcessParameterFlag_64Bit); + m_is_64_bit_address_space = (m_create_process_info.flags & svc::CreateProcessParameterFlag_AddressSpaceMask) == svc::CreateProcessParameterFlag_AddressSpace64Bit39; } break; case svc::DebugEvent_CreateThread: diff --git a/stratosphere/loader/source/ldr_meta.cpp b/stratosphere/loader/source/ldr_meta.cpp index f7da96292..87475196f 100644 --- a/stratosphere/loader/source/ldr_meta.cpp +++ b/stratosphere/loader/source/ldr_meta.cpp @@ -88,8 +88,8 @@ namespace ams::ldr { R_UNLESS(npdm->magic == Npdm::Magic, ldr::ResultInvalidMeta()); /* Validate flags. */ - constexpr u32 InvalidMetaFlagMask = 0x80000000; - R_UNLESS(!(npdm->flags & InvalidMetaFlagMask), ldr::ResultInvalidMeta()); + constexpr u32 InvalidMetaFlag0Mask = 0x80000000; + R_UNLESS(!(npdm->flags0 & InvalidMetaFlag0Mask), ldr::ResultInvalidMeta()); /* Validate Acid extents. */ R_TRY(ValidateSubregion(sizeof(Npdm), size, npdm->acid_offset, npdm->acid_size, sizeof(Acid))); @@ -262,15 +262,15 @@ namespace ams::ldr { /* Perform address space override. */ if (status.HasOverrideAddressSpace()) { /* Clear the existing address space. */ - meta->npdm->flags &= ~Npdm::MetaFlag_AddressSpaceTypeMask; + meta->npdm->flags0 &= ~Npdm::MetaFlag0_ProcessAddressSpaceMask; /* Set the new address space flag. */ switch (status.GetOverrideAddressSpaceFlags()) { - case cfg::impl::OverrideStatusFlag_AddressSpace32Bit: meta->npdm->flags |= (Npdm::AddressSpaceType_32Bit) << Npdm::MetaFlag_AddressSpaceTypeShift; break; - case cfg::impl::OverrideStatusFlag_AddressSpace64BitDeprecated: meta->npdm->flags |= (Npdm::AddressSpaceType_64BitDeprecated) << Npdm::MetaFlag_AddressSpaceTypeShift; break; - case cfg::impl::OverrideStatusFlag_AddressSpace32BitWithoutAlias: meta->npdm->flags |= (Npdm::AddressSpaceType_32BitWithoutAlias) << Npdm::MetaFlag_AddressSpaceTypeShift; break; - case cfg::impl::OverrideStatusFlag_AddressSpace64Bit: meta->npdm->flags |= (Npdm::AddressSpaceType_64Bit) << Npdm::MetaFlag_AddressSpaceTypeShift; break; - case cfg::impl::OverrideStatusFlag_AddressSpace64Bit64KPage: meta->npdm->flags |= (Npdm::AddressSpaceType_64Bit64KPage) << Npdm::MetaFlag_AddressSpaceTypeShift; break; + case cfg::impl::OverrideStatusFlag_AddressSpace32Bit: meta->npdm->flags0 |= (Npdm::ProcessAddressSpace_32Bit) << Npdm::MetaFlag0_ProcessAddressSpaceShift; break; + case cfg::impl::OverrideStatusFlag_AddressSpace64Bit36: meta->npdm->flags0 |= (Npdm::ProcessAddressSpace_64Bit36) << Npdm::MetaFlag0_ProcessAddressSpaceShift; break; + case cfg::impl::OverrideStatusFlag_AddressSpace32BitNoReserved: meta->npdm->flags0 |= (Npdm::ProcessAddressSpace_32BitNoReserved) << Npdm::MetaFlag0_ProcessAddressSpaceShift; break; + case cfg::impl::OverrideStatusFlag_AddressSpace64Bit39: meta->npdm->flags0 |= (Npdm::ProcessAddressSpace_64Bit39) << Npdm::MetaFlag0_ProcessAddressSpaceShift; break; + case cfg::impl::OverrideStatusFlag_AddressSpace64Bit42: meta->npdm->flags0 |= (Npdm::ProcessAddressSpace_64Bit42) << Npdm::MetaFlag0_ProcessAddressSpaceShift; break; AMS_UNREACHABLE_DEFAULT_CASE(); } } diff --git a/stratosphere/loader/source/ldr_process_creation.cpp b/stratosphere/loader/source/ldr_process_creation.cpp index d05450541..019f7c1e8 100644 --- a/stratosphere/loader/source/ldr_process_creation.cpp +++ b/stratosphere/loader/source/ldr_process_creation.cpp @@ -175,8 +175,8 @@ namespace ams::ldr { return (MakeProgramInfoFlag(static_cast(meta->aci_kac), meta->aci->kac_size / sizeof(util::BitPack32)) & ProgramInfoFlag_ApplicationTypeMask) == ProgramInfoFlag_Application; } - Npdm::AddressSpaceType GetAddressSpaceType(const Meta *meta) { - return static_cast((meta->npdm->flags & Npdm::MetaFlag_AddressSpaceTypeMask) >> Npdm::MetaFlag_AddressSpaceTypeShift); + Npdm::ProcessAddressSpace GetProcessAddressSpace(const Meta *meta) { + return static_cast((meta->npdm->flags0 & Npdm::MetaFlag0_ProcessAddressSpaceMask) >> Npdm::MetaFlag0_ProcessAddressSpaceShift); } Acid::PoolPartition GetPoolPartition(const Meta *meta) { @@ -399,55 +399,55 @@ namespace ams::ldr { R_SUCCEED(); } - Result GetCreateProcessFlags(u32 *out, const Meta *meta, const u32 ldr_flags) { - const u8 meta_flags = meta->npdm->flags; + Result GetCreateProcessParameterFlags(u32 *out, const Meta *meta, const u32 ldr_flags) { + const u8 meta_flags = meta->npdm->flags0; u32 flags = 0; /* Set Is64Bit. */ - if (meta_flags & Npdm::MetaFlag_Is64Bit) { - flags |= svc::CreateProcessFlag_Is64Bit; + if (meta_flags & Npdm::MetaFlag0_Is64BitInstruction) { + flags |= svc::CreateProcessParameterFlag_64Bit; } - /* Set AddressSpaceType. */ - switch (GetAddressSpaceType(meta)) { - case Npdm::AddressSpaceType_32Bit: - flags |= svc::CreateProcessFlag_AddressSpace32Bit; + /* Set ProcessAddressSpace. */ + switch (GetProcessAddressSpace(meta)) { + case Npdm::ProcessAddressSpace_32Bit: + flags |= svc::CreateProcessParameterFlag_AddressSpace32Bit; break; - case Npdm::AddressSpaceType_64BitDeprecated: - flags |= svc::CreateProcessFlag_AddressSpace64BitDeprecated; + case Npdm::ProcessAddressSpace_64Bit36: + flags |= svc::CreateProcessParameterFlag_AddressSpace64Bit36; break; - case Npdm::AddressSpaceType_32BitWithoutAlias: - flags |= svc::CreateProcessFlag_AddressSpace32BitWithoutAlias; + case Npdm::ProcessAddressSpace_32BitNoReserved: + flags |= svc::CreateProcessParameterFlag_AddressSpace32BitNoReserved; break; - case Npdm::AddressSpaceType_64Bit: - flags |= svc::CreateProcessFlag_AddressSpace64Bit; + case Npdm::ProcessAddressSpace_64Bit39: + flags |= svc::CreateProcessParameterFlag_AddressSpace64Bit39; break; - case Npdm::AddressSpaceType_64Bit64KPage: - flags |= svc::CreateProcessFlag_AddressSpace64Bit64KPage; + case Npdm::ProcessAddressSpace_64Bit42: + flags |= svc::CreateProcessParameterFlag_AddressSpace64Bit42; break; default: R_THROW(ldr::ResultInvalidMeta()); } /* Set Enable Debug. */ - if (ldr_flags & CreateProcessFlag_EnableDebug) { - flags |= svc::CreateProcessFlag_EnableDebug; + if (ldr_flags & CreateProcessParameterFlag_EnableJitDebug) { + flags |= svc::CreateProcessParameterFlag_EnableJitDebug; } /* Set Enable ASLR. */ - if (!(ldr_flags & CreateProcessFlag_DisableAslr)) { - flags |= svc::CreateProcessFlag_EnableAslr; + if (!(ldr_flags & CreateProcessParameterFlag_DisableAslr)) { + flags |= svc::CreateProcessParameterFlag_EnableAslr; } /* Set Is Application. */ if (IsApplication(meta)) { - flags |= svc::CreateProcessFlag_IsApplication; + flags |= svc::CreateProcessParameterFlag_IsApplication; /* 7.0.0+: Set OptimizeMemoryAllocation if relevant. */ if (hos::GetVersion() >= hos::Version_7_0_0) { - if (meta_flags & Npdm::MetaFlag_OptimizeMemoryAllocation) { - flags |= svc::CreateProcessFlag_OptimizeMemoryAllocation; + if (meta_flags & Npdm::MetaFlag0_OptimizeMemoryAllocation) { + flags |= svc::CreateProcessParameterFlag_OptimizeMemoryAllocation; } } } @@ -459,19 +459,19 @@ namespace ams::ldr { switch (GetPoolPartition(meta)) { case Acid::PoolPartition_Application: if (IsApplet(meta)) { - flags |= svc::CreateProcessFlag_PoolPartitionApplet; + flags |= svc::CreateProcessParameterFlag_PoolPartitionApplet; } else { - flags |= svc::CreateProcessFlag_PoolPartitionApplication; + flags |= svc::CreateProcessParameterFlag_PoolPartitionApplication; } break; case Acid::PoolPartition_Applet: - flags |= svc::CreateProcessFlag_PoolPartitionApplet; + flags |= svc::CreateProcessParameterFlag_PoolPartitionApplet; break; case Acid::PoolPartition_System: - flags |= svc::CreateProcessFlag_PoolPartitionSystem; + flags |= svc::CreateProcessParameterFlag_PoolPartitionSystem; break; case Acid::PoolPartition_SystemNonSecure: - flags |= svc::CreateProcessFlag_PoolPartitionSystemNonSecure; + flags |= svc::CreateProcessParameterFlag_PoolPartitionSystemNonSecure; break; default: R_THROW(ldr::ResultInvalidMeta()); @@ -479,18 +479,18 @@ namespace ams::ldr { } else if (hos::GetVersion() >= hos::Version_4_0_0) { /* On 4.0.0+, the corresponding bit was simply "UseSecureMemory". */ if (meta->acid->flags & Acid::AcidFlag_DeprecatedUseSecureMemory) { - flags |= svc::CreateProcessFlag_DeprecatedUseSecureMemory; + flags |= svc::CreateProcessParameterFlag_DeprecatedUseSecureMemory; } } /* 11.0.0+/meso Set Disable DAS merge. */ - if (meta_flags & Npdm::MetaFlag_DisableDeviceAddressSpaceMerge) { - flags |= svc::CreateProcessFlag_DisableDeviceAddressSpaceMerge; + if (meta_flags & Npdm::MetaFlag0_DisableDeviceAddressSpaceMerge) { + flags |= svc::CreateProcessParameterFlag_DisableDeviceAddressSpaceMerge; } /* 18.0.0+/meso Set Alias region extra size. */ - if (meta_flags & Npdm::MetaFlag_EnableAliasRegionExtraSize) { - flags |= svc::CreateProcessFlag_EnableAliasRegionExtraSize; + if (meta_flags & Npdm::MetaFlag0_EnableAddressSanitizer) { + flags |= svc::CreateProcessParameterFlag_EnableAddressSanitizer; } *out = flags; @@ -508,7 +508,7 @@ namespace ams::ldr { out->reslimit = resource_limit; /* Set flags. */ - R_TRY(GetCreateProcessFlags(std::addressof(out->flags), meta, flags)); + R_TRY(GetCreateProcessParameterFlags(std::addressof(out->flags), meta, flags)); /* 3.0.0+ System Resource Size. */ if (hos::GetVersion() >= hos::Version_3_0_0) { @@ -518,7 +518,7 @@ namespace ams::ldr { /* Validate system resource usage. */ if (meta->npdm->system_resource_size) { /* Process must be 64-bit. */ - R_UNLESS((out->flags & svc::CreateProcessFlag_AddressSpace64Bit), ldr::ResultInvalidMeta()); + R_UNLESS((out->flags & svc::CreateProcessParameterFlag_AddressSpace64Bit39), ldr::ResultInvalidMeta()); /* Process must be application or applet. */ R_UNLESS(IsApplication(meta) || IsApplet(meta), ldr::ResultInvalidMeta()); @@ -586,21 +586,21 @@ namespace ams::ldr { uintptr_t aslr_start = 0; size_t aslr_size = 0; if (hos::GetVersion() >= hos::Version_2_0_0) { - switch (out_param->flags & svc::CreateProcessFlag_AddressSpaceMask) { - case svc::CreateProcessFlag_AddressSpace32Bit: - case svc::CreateProcessFlag_AddressSpace32BitWithoutAlias: + switch (out_param->flags & svc::CreateProcessParameterFlag_AddressSpaceMask) { + case svc::CreateProcessParameterFlag_AddressSpace32Bit: + case svc::CreateProcessParameterFlag_AddressSpace32BitNoReserved: aslr_start = svc::AddressSmallMap32Start; aslr_size = svc::AddressSmallMap32Size; break; - case svc::CreateProcessFlag_AddressSpace64BitDeprecated: + case svc::CreateProcessParameterFlag_AddressSpace64Bit36: aslr_start = svc::AddressSmallMap36Start; aslr_size = svc::AddressSmallMap36Size; break; - case svc::CreateProcessFlag_AddressSpace64Bit: + case svc::CreateProcessParameterFlag_AddressSpace64Bit39: aslr_start = svc::AddressMap39Start; aslr_size = svc::AddressMap39Size; break; - case svc::CreateProcessFlag_AddressSpace64Bit64KPage: + case svc::CreateProcessParameterFlag_AddressSpace64Bit42: aslr_start = svc::AddressMap42Start; aslr_size = svc::AddressMap42Size; break; @@ -608,7 +608,7 @@ namespace ams::ldr { } } else { /* On 1.0.0, only 2 address space types existed. */ - if (out_param->flags & svc::CreateProcessFlag_AddressSpace64BitDeprecated) { + if (out_param->flags & svc::CreateProcessParameterFlag_AddressSpace64Bit36) { aslr_start = svc::AddressSmallMap36Start; aslr_size = svc::AddressSmallMap36Size; } else { @@ -621,7 +621,7 @@ namespace ams::ldr { /* Set Create Process output. */ uintptr_t aslr_slide = 0; size_t free_size = (aslr_size - total_size); - if (out_param->flags & svc::CreateProcessFlag_EnableAslr) { + if (out_param->flags & svc::CreateProcessParameterFlag_EnableAslr) { aslr_slide = GenerateSecureRandom(free_size / os::MemoryBlockUnitSize) * os::MemoryBlockUnitSize; } @@ -864,8 +864,8 @@ namespace ams::ldr { os::ProcessId process_id = os::GetProcessId(info.process_handle); /* Register new process. */ - const auto as_type = GetAddressSpaceType(std::addressof(meta)); - RoManager::GetInstance().RegisterProcess(pin_id, process_id, meta.aci->program_id, as_type == Npdm::AddressSpaceType_64Bit || as_type == Npdm::AddressSpaceType_64BitDeprecated); + const auto as_type = GetProcessAddressSpace(std::addressof(meta)); + RoManager::GetInstance().RegisterProcess(pin_id, process_id, meta.aci->program_id, as_type == Npdm::ProcessAddressSpace_64Bit39 || as_type == Npdm::ProcessAddressSpace_64Bit36); /* Register all NSOs. */ for (int i = 0; i < ctx.nso_count; i++) { diff --git a/stratosphere/pm/source/impl/pm_process_manager.cpp b/stratosphere/pm/source/impl/pm_process_manager.cpp index 8a4d7ba16..dc1fbbdf2 100644 --- a/stratosphere/pm/source/impl/pm_process_manager.cpp +++ b/stratosphere/pm/source/impl/pm_process_manager.cpp @@ -86,14 +86,14 @@ namespace ams::pm::impl { R_ABORT_UNLESS(os::CreateSystemEvent(std::addressof(g_hook_to_create_application_process_event), os::EventClearMode_AutoClear, true)); } - inline u32 GetLoaderCreateProcessFlags(u32 launch_flags) { + inline u32 GetLoaderCreateProcessParameterFlags(u32 launch_flags) { u32 ldr_flags = 0; if (ShouldSignalOnException(launch_flags) || (hos::GetVersion() >= hos::Version_2_0_0 && !ShouldStartSuspended(launch_flags))) { - ldr_flags |= ldr::CreateProcessFlag_EnableDebug; + ldr_flags |= ldr::CreateProcessParameterFlag_EnableJitDebug; } if (ShouldDisableAslr(launch_flags)) { - ldr_flags |= ldr::CreateProcessFlag_DisableAslr; + ldr_flags |= ldr::CreateProcessParameterFlag_DisableAslr; } return ldr_flags; @@ -166,7 +166,7 @@ namespace ams::pm::impl { WaitResourceAvailable(std::addressof(program_info)); /* Actually create the process. */ - R_TRY(ldr::pm::CreateProcess(std::addressof(process_handle), pin_id, GetLoaderCreateProcessFlags(flags), GetResourceLimitHandle(std::addressof(program_info)), attrs.program_attrs)); + R_TRY(ldr::pm::CreateProcess(std::addressof(process_handle), pin_id, GetLoaderCreateProcessParameterFlags(flags), GetResourceLimitHandle(std::addressof(program_info)), attrs.program_attrs)); } /* Get the process id. */