From eec7892cadd18ced5c3ec6162649e365f6201832 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sat, 25 Aug 2018 05:37:37 -0400 Subject: [PATCH 1/5] kernel/error: Correct kernel error code for invalid combination --- src/core/hle/kernel/errors.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core/hle/kernel/errors.h b/src/core/hle/kernel/errors.h index 221cb1bb53..c4d9e8ea92 100644 --- a/src/core/hle/kernel/errors.h +++ b/src/core/hle/kernel/errors.h @@ -45,7 +45,8 @@ constexpr ResultCode ERR_MAX_CONNECTIONS_REACHED(-1); constexpr ResultCode ERR_INVALID_ENUM_VALUE(ErrorModule::Kernel, ErrCodes::InvalidEnumValue); constexpr ResultCode ERR_INVALID_ENUM_VALUE_FND(-1); constexpr ResultCode ERR_INVALID_COMBINATION(-1); -constexpr ResultCode ERR_INVALID_COMBINATION_KERNEL(-1); +constexpr ResultCode ERR_INVALID_COMBINATION_KERNEL(ErrorModule::Kernel, + ErrCodes::InvalidCombination); constexpr ResultCode ERR_OUT_OF_MEMORY(-1); constexpr ResultCode ERR_INVALID_ADDRESS(ErrorModule::Kernel, ErrCodes::InvalidAddress); constexpr ResultCode ERR_INVALID_ADDRESS_STATE(ErrorModule::Kernel, ErrCodes::InvalidMemoryState); From d97ec0683f74159c192a7907cd600e2370e5e8e1 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sat, 25 Aug 2018 05:40:42 -0400 Subject: [PATCH 2/5] kernel/error: Add error code for invalid memory permissions --- src/core/hle/kernel/errors.h | 5 +++-- src/core/hle/kernel/shared_memory.cpp | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/core/hle/kernel/errors.h b/src/core/hle/kernel/errors.h index c4d9e8ea92..8b4e051911 100644 --- a/src/core/hle/kernel/errors.h +++ b/src/core/hle/kernel/errors.h @@ -15,13 +15,13 @@ enum { SessionClosedByRemote = 26, PortNameTooLong = 30, NoPendingSessions = 35, - WrongPermission = 46, InvalidBufferDescriptor = 48, MaxConnectionsReached = 52, // Confirmed Switch OS error codes InvalidAddress = 102, InvalidMemoryState = 106, + InvalidMemoryPermissions = 108, InvalidProcessorId = 113, InvalidHandle = 114, InvalidCombination = 116, @@ -40,7 +40,6 @@ enum { constexpr ResultCode ERR_OUT_OF_HANDLES(-1); constexpr ResultCode ERR_SESSION_CLOSED_BY_REMOTE(-1); constexpr ResultCode ERR_PORT_NAME_TOO_LONG(-1); -constexpr ResultCode ERR_WRONG_PERMISSION(-1); constexpr ResultCode ERR_MAX_CONNECTIONS_REACHED(-1); constexpr ResultCode ERR_INVALID_ENUM_VALUE(ErrorModule::Kernel, ErrCodes::InvalidEnumValue); constexpr ResultCode ERR_INVALID_ENUM_VALUE_FND(-1); @@ -50,6 +49,8 @@ constexpr ResultCode ERR_INVALID_COMBINATION_KERNEL(ErrorModule::Kernel, constexpr ResultCode ERR_OUT_OF_MEMORY(-1); constexpr ResultCode ERR_INVALID_ADDRESS(ErrorModule::Kernel, ErrCodes::InvalidAddress); constexpr ResultCode ERR_INVALID_ADDRESS_STATE(ErrorModule::Kernel, ErrCodes::InvalidMemoryState); +constexpr ResultCode ERR_INVALID_MEMORY_PERMISSIONS(ErrorModule::Kernel, + ErrCodes::InvalidMemoryPermissions); constexpr ResultCode ERR_INVALID_HANDLE(ErrorModule::Kernel, ErrCodes::InvalidHandle); constexpr ResultCode ERR_INVALID_STATE(ErrorModule::Kernel, ErrCodes::InvalidState); constexpr ResultCode ERR_INVALID_POINTER(-1); diff --git a/src/core/hle/kernel/shared_memory.cpp b/src/core/hle/kernel/shared_memory.cpp index 21ddc2f7dc..fc168d2b53 100644 --- a/src/core/hle/kernel/shared_memory.cpp +++ b/src/core/hle/kernel/shared_memory.cpp @@ -101,7 +101,7 @@ ResultCode SharedMemory::Map(Process* target_process, VAddr address, MemoryPermi static_cast(this->permissions) & ~static_cast(other_permissions)) { LOG_ERROR(Kernel, "cannot map id={}, address=0x{:X} name={}, permissions don't match", GetObjectId(), address, name); - return ERR_WRONG_PERMISSION; + return ERR_INVALID_MEMORY_PERMISSIONS; } VAddr target_address = address; From ce900c1cb8ba10069bcff77526edb33e4ebb1aa5 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sat, 25 Aug 2018 05:44:51 -0400 Subject: [PATCH 3/5] kernel/error: Add error code for the handle table being full This replaces the lingering 3DS constant with the proper one, and utilizes it within HandleTable's Create() member function. --- src/core/hle/kernel/errors.h | 4 ++-- src/core/hle/kernel/handle_table.cpp | 2 +- src/core/hle/kernel/handle_table.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/core/hle/kernel/errors.h b/src/core/hle/kernel/errors.h index 8b4e051911..59c5c2a67c 100644 --- a/src/core/hle/kernel/errors.h +++ b/src/core/hle/kernel/errors.h @@ -11,7 +11,6 @@ namespace Kernel { namespace ErrCodes { enum { // TODO(Subv): Remove these 3DS OS error codes. - OutOfHandles = 19, SessionClosedByRemote = 26, PortNameTooLong = 30, NoPendingSessions = 35, @@ -20,6 +19,7 @@ enum { // Confirmed Switch OS error codes InvalidAddress = 102, + HandleTableFull = 105, InvalidMemoryState = 106, InvalidMemoryPermissions = 108, InvalidProcessorId = 113, @@ -37,7 +37,7 @@ enum { // double check that the code matches before re-using the constant. // TODO(bunnei): Replace these with correct errors for Switch OS -constexpr ResultCode ERR_OUT_OF_HANDLES(-1); +constexpr ResultCode ERR_HANDLE_TABLE_FULL(ErrorModule::Kernel, ErrCodes::HandleTableFull); constexpr ResultCode ERR_SESSION_CLOSED_BY_REMOTE(-1); constexpr ResultCode ERR_PORT_NAME_TOO_LONG(-1); constexpr ResultCode ERR_MAX_CONNECTIONS_REACHED(-1); diff --git a/src/core/hle/kernel/handle_table.cpp b/src/core/hle/kernel/handle_table.cpp index 28e21428a5..6d9f7a02bb 100644 --- a/src/core/hle/kernel/handle_table.cpp +++ b/src/core/hle/kernel/handle_table.cpp @@ -26,7 +26,7 @@ ResultVal HandleTable::Create(SharedPtr obj) { u16 slot = next_free_slot; if (slot >= generations.size()) { LOG_ERROR(Kernel, "Unable to allocate Handle, too many slots in use."); - return ERR_OUT_OF_HANDLES; + return ERR_HANDLE_TABLE_FULL; } next_free_slot = generations[slot]; diff --git a/src/core/hle/kernel/handle_table.h b/src/core/hle/kernel/handle_table.h index 22ddda6300..aee3583e8a 100644 --- a/src/core/hle/kernel/handle_table.h +++ b/src/core/hle/kernel/handle_table.h @@ -47,7 +47,7 @@ public: /** * Allocates a handle for the given object. * @return The created Handle or one of the following errors: - * - `ERR_OUT_OF_HANDLES`: the maximum number of handles has been exceeded. + * - `ERR_HANDLE_TABLE_FULL`: the maximum number of handles has been exceeded. */ ResultVal Create(SharedPtr obj); From 4c6743a1554ab6140cc888eb889a43bb6e453558 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sat, 25 Aug 2018 05:52:57 -0400 Subject: [PATCH 4/5] kernel/error: Amend error code for ERR_PORT_NAME_TOO_LONG We can treat this as an alias of TooLarge for documentation purposes. This also lets us get rid of another lingering 3DS-related error code. --- src/core/hle/kernel/errors.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/core/hle/kernel/errors.h b/src/core/hle/kernel/errors.h index 59c5c2a67c..a2df8e2e8d 100644 --- a/src/core/hle/kernel/errors.h +++ b/src/core/hle/kernel/errors.h @@ -12,7 +12,6 @@ namespace ErrCodes { enum { // TODO(Subv): Remove these 3DS OS error codes. SessionClosedByRemote = 26, - PortNameTooLong = 30, NoPendingSessions = 35, InvalidBufferDescriptor = 48, MaxConnectionsReached = 52, @@ -39,7 +38,7 @@ enum { // TODO(bunnei): Replace these with correct errors for Switch OS constexpr ResultCode ERR_HANDLE_TABLE_FULL(ErrorModule::Kernel, ErrCodes::HandleTableFull); constexpr ResultCode ERR_SESSION_CLOSED_BY_REMOTE(-1); -constexpr ResultCode ERR_PORT_NAME_TOO_LONG(-1); +constexpr ResultCode ERR_PORT_NAME_TOO_LONG(ErrorModule::Kernel, ErrCodes::TooLarge); constexpr ResultCode ERR_MAX_CONNECTIONS_REACHED(-1); constexpr ResultCode ERR_INVALID_ENUM_VALUE(ErrorModule::Kernel, ErrCodes::InvalidEnumValue); constexpr ResultCode ERR_INVALID_ENUM_VALUE_FND(-1); From 8eb062bba4a458f99dd873573c93f2f59ecdd80b Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sat, 25 Aug 2018 06:15:58 -0400 Subject: [PATCH 5/5] kernel/error: Amend error code for ERR_MAX_CONNECTIONS_REACHED We can make this error code an alias of the resource limit exceeded error code, allowing us to get rid of the lingering 3DS error code of the same type. --- src/core/hle/kernel/errors.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/core/hle/kernel/errors.h b/src/core/hle/kernel/errors.h index a2df8e2e8d..4054d5db68 100644 --- a/src/core/hle/kernel/errors.h +++ b/src/core/hle/kernel/errors.h @@ -14,9 +14,9 @@ enum { SessionClosedByRemote = 26, NoPendingSessions = 35, InvalidBufferDescriptor = 48, - MaxConnectionsReached = 52, // Confirmed Switch OS error codes + MaxConnectionsReached = 7, InvalidAddress = 102, HandleTableFull = 105, InvalidMemoryState = 106, @@ -29,6 +29,7 @@ enum { TooLarge = 119, InvalidEnumValue = 120, InvalidState = 125, + ResourceLimitExceeded = 132, }; } @@ -39,7 +40,8 @@ enum { constexpr ResultCode ERR_HANDLE_TABLE_FULL(ErrorModule::Kernel, ErrCodes::HandleTableFull); constexpr ResultCode ERR_SESSION_CLOSED_BY_REMOTE(-1); constexpr ResultCode ERR_PORT_NAME_TOO_LONG(ErrorModule::Kernel, ErrCodes::TooLarge); -constexpr ResultCode ERR_MAX_CONNECTIONS_REACHED(-1); +constexpr ResultCode ERR_MAX_CONNECTIONS_REACHED(ErrorModule::Kernel, + ErrCodes::MaxConnectionsReached); constexpr ResultCode ERR_INVALID_ENUM_VALUE(ErrorModule::Kernel, ErrCodes::InvalidEnumValue); constexpr ResultCode ERR_INVALID_ENUM_VALUE_FND(-1); constexpr ResultCode ERR_INVALID_COMBINATION(-1);