Replace fatalThrow with diagAbortWithResult

This commit is contained in:
fincs 2020-10-29 14:06:58 +01:00
parent c69c6a9e0d
commit 18019db14a
No known key found for this signature in database
GPG Key ID: 62C7609ADA219C60

View File

@ -72,7 +72,7 @@ void __appInit(void)
rc = smInitialize(); rc = smInitialize();
if (R_FAILED(rc)) if (R_FAILED(rc))
fatalThrow(MAKERESULT(Module_HomebrewLoader, 1)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 1));
rc = setsysInitialize(); rc = setsysInitialize();
if (R_SUCCEEDED(rc)) { if (R_SUCCEEDED(rc)) {
@ -87,13 +87,13 @@ void __appInit(void)
rc = fsInitialize(); rc = fsInitialize();
if (R_FAILED(rc)) if (R_FAILED(rc))
fatalThrow(MAKERESULT(Module_HomebrewLoader, 2)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 2));
} }
void __wrap_exit(void) void __wrap_exit(void)
{ {
// exit() effectively never gets called, so let's stub it out. // exit() effectively never gets called, so let's stub it out.
fatalThrow(MAKERESULT(Module_HomebrewLoader, 39)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 39));
} }
static void* g_heapAddr; static void* g_heapAddr;
@ -138,7 +138,7 @@ static void setupHbHeap(void)
Result rc = svcSetHeapSize(&addr, size); Result rc = svcSetHeapSize(&addr, size);
if (R_FAILED(rc) || addr==NULL) if (R_FAILED(rc) || addr==NULL)
fatalThrow(MAKERESULT(Module_HomebrewLoader, 9)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 9));
g_heapAddr = addr; g_heapAddr = addr;
g_heapSize = size; g_heapSize = size;
@ -157,11 +157,11 @@ static void procHandleReceiveThread(void* arg)
s32 idx = 0; s32 idx = 0;
rc = svcReplyAndReceive(&idx, &session, 1, INVALID_HANDLE, UINT64_MAX); rc = svcReplyAndReceive(&idx, &session, 1, INVALID_HANDLE, UINT64_MAX);
if (R_FAILED(rc)) if (R_FAILED(rc))
fatalThrow(MAKERESULT(Module_HomebrewLoader, 15)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 15));
HipcParsedRequest r = hipcParseRequest(base); HipcParsedRequest r = hipcParseRequest(base);
if (r.meta.num_copy_handles != 1) if (r.meta.num_copy_handles != 1)
fatalThrow(MAKERESULT(Module_HomebrewLoader, 17)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 17));
g_procHandle = r.data.copy_handles[0]; g_procHandle = r.data.copy_handles[0];
svcCloseHandle(session); svcCloseHandle(session);
@ -226,16 +226,16 @@ static void getOwnProcessHandle(void)
Handle server_handle, client_handle; Handle server_handle, client_handle;
rc = svcCreateSession(&server_handle, &client_handle, 0, 0); rc = svcCreateSession(&server_handle, &client_handle, 0, 0);
if (R_FAILED(rc)) if (R_FAILED(rc))
fatalThrow(MAKERESULT(Module_HomebrewLoader, 12)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 12));
Thread t; Thread t;
rc = threadCreate(&t, &procHandleReceiveThread, (void*)(uintptr_t)server_handle, NULL, 0x1000, 0x20, 0); rc = threadCreate(&t, &procHandleReceiveThread, (void*)(uintptr_t)server_handle, NULL, 0x1000, 0x20, 0);
if (R_FAILED(rc)) if (R_FAILED(rc))
fatalThrow(MAKERESULT(Module_HomebrewLoader, 10)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 10));
rc = threadStart(&t); rc = threadStart(&t);
if (R_FAILED(rc)) if (R_FAILED(rc))
fatalThrow(MAKERESULT(Module_HomebrewLoader, 13)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 13));
hipcMakeRequestInline(armGetTls(), hipcMakeRequestInline(armGetTls(),
.num_copy_handles = 1, .num_copy_handles = 1,
@ -295,21 +295,21 @@ void loadNro(void)
g_procHandle, g_nroAddr + header->segments[0].file_off, ((u64) g_heapAddr) + header->segments[0].file_off, header->segments[0].size); g_procHandle, g_nroAddr + header->segments[0].file_off, ((u64) g_heapAddr) + header->segments[0].file_off, header->segments[0].size);
if (R_FAILED(rc)) if (R_FAILED(rc))
fatalThrow(MAKERESULT(Module_HomebrewLoader, 24)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 24));
// .rodata // .rodata
rc = svcUnmapProcessCodeMemory( rc = svcUnmapProcessCodeMemory(
g_procHandle, g_nroAddr + header->segments[1].file_off, ((u64) g_heapAddr) + header->segments[1].file_off, header->segments[1].size); g_procHandle, g_nroAddr + header->segments[1].file_off, ((u64) g_heapAddr) + header->segments[1].file_off, header->segments[1].size);
if (R_FAILED(rc)) if (R_FAILED(rc))
fatalThrow(MAKERESULT(Module_HomebrewLoader, 25)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 25));
// .data + .bss // .data + .bss
rc = svcUnmapProcessCodeMemory( rc = svcUnmapProcessCodeMemory(
g_procHandle, g_nroAddr + header->segments[2].file_off, ((u64) g_heapAddr) + header->segments[2].file_off, rw_size); g_procHandle, g_nroAddr + header->segments[2].file_off, ((u64) g_heapAddr) + header->segments[2].file_off, rw_size);
if (R_FAILED(rc)) if (R_FAILED(rc))
fatalThrow(MAKERESULT(Module_HomebrewLoader, 26)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 26));
svcBreak(BreakReason_NotificationOnlyFlag | BreakReason_PostUnloadDll, g_nroAddr, g_nroSize); svcBreak(BreakReason_NotificationOnlyFlag | BreakReason_PostUnloadDll, g_nroAddr, g_nroSize);
@ -334,27 +334,27 @@ void loadNro(void)
rc = fsdevMountSdmc(); rc = fsdevMountSdmc();
if (R_FAILED(rc)) if (R_FAILED(rc))
fatalThrow(MAKERESULT(Module_HomebrewLoader, 404)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 404));
int fd = open(g_nextNroPath, O_RDONLY); int fd = open(g_nextNroPath, O_RDONLY);
if (fd < 0) if (fd < 0)
fatalThrow(MAKERESULT(Module_HomebrewLoader, 3)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 3));
// Reset NRO path to load hbmenu by default next time. // Reset NRO path to load hbmenu by default next time.
g_nextNroPath[0] = '\0'; g_nextNroPath[0] = '\0';
if (read(fd, start, sizeof(*start)) != sizeof(*start)) if (read(fd, start, sizeof(*start)) != sizeof(*start))
fatalThrow(MAKERESULT(Module_HomebrewLoader, 4)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 4));
if (read(fd, header, sizeof(*header)) != sizeof(*header)) if (read(fd, header, sizeof(*header)) != sizeof(*header))
fatalThrow(MAKERESULT(Module_HomebrewLoader, 4)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 4));
if (header->magic != NROHEADER_MAGIC) if (header->magic != NROHEADER_MAGIC)
fatalThrow(MAKERESULT(Module_HomebrewLoader, 5)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 5));
size_t rest_size = header->size - (sizeof(NroStart) + sizeof(NroHeader)); size_t rest_size = header->size - (sizeof(NroStart) + sizeof(NroHeader));
if (read(fd, rest, rest_size) != rest_size) if (read(fd, rest, rest_size) != rest_size)
fatalThrow(MAKERESULT(Module_HomebrewLoader, 7)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 7));
close(fd); close(fd);
fsdevUnmountAll(); fsdevUnmountAll();
@ -371,7 +371,7 @@ void loadNro(void)
if (header->segments[i].file_off >= header->size || header->segments[i].size > header->size || if (header->segments[i].file_off >= header->size || header->segments[i].size > header->size ||
(header->segments[i].file_off + header->segments[i].size) > header->size) (header->segments[i].file_off + header->segments[i].size) > header->size)
{ {
fatalThrow(MAKERESULT(Module_HomebrewLoader, 6)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 6));
} }
} }
@ -388,28 +388,28 @@ void loadNro(void)
virtmemUnlock(); virtmemUnlock();
if (R_FAILED(rc)) if (R_FAILED(rc))
fatalThrow(MAKERESULT(Module_HomebrewLoader, 18)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 18));
// .text // .text
rc = svcSetProcessMemoryPermission( rc = svcSetProcessMemoryPermission(
g_procHandle, (u64)map_addr + header->segments[0].file_off, header->segments[0].size, Perm_R | Perm_X); g_procHandle, (u64)map_addr + header->segments[0].file_off, header->segments[0].size, Perm_R | Perm_X);
if (R_FAILED(rc)) if (R_FAILED(rc))
fatalThrow(MAKERESULT(Module_HomebrewLoader, 19)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 19));
// .rodata // .rodata
rc = svcSetProcessMemoryPermission( rc = svcSetProcessMemoryPermission(
g_procHandle, (u64)map_addr + header->segments[1].file_off, header->segments[1].size, Perm_R); g_procHandle, (u64)map_addr + header->segments[1].file_off, header->segments[1].size, Perm_R);
if (R_FAILED(rc)) if (R_FAILED(rc))
fatalThrow(MAKERESULT(Module_HomebrewLoader, 20)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 20));
// .data + .bss // .data + .bss
rc = svcSetProcessMemoryPermission( rc = svcSetProcessMemoryPermission(
g_procHandle, (u64)map_addr + header->segments[2].file_off, rw_size, Perm_Rw); g_procHandle, (u64)map_addr + header->segments[2].file_off, rw_size, Perm_Rw);
if (R_FAILED(rc)) if (R_FAILED(rc))
fatalThrow(MAKERESULT(Module_HomebrewLoader, 21)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 21));
u64 nro_size = header->segments[2].file_off + rw_size; u64 nro_size = header->segments[2].file_off + rw_size;
u64 nro_heap_start = ((u64) g_heapAddr) + nro_size; u64 nro_heap_start = ((u64) g_heapAddr) + nro_size;
@ -489,6 +489,6 @@ int main(int argc, char **argv)
getIsCodeMemoryAvailable(); getIsCodeMemoryAvailable();
loadNro(); loadNro();
fatalThrow(MAKERESULT(Module_HomebrewLoader, 8)); diagAbortWithResult(MAKERESULT(Module_HomebrewLoader, 8));
return 0; return 0;
} }