mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 12:32:40 +02:00
51 lines
1.0 KiB
C
51 lines
1.0 KiB
C
// Copyright 2017 plutoo
|
|
#include "types.h"
|
|
#include "result.h"
|
|
#include "ipc.h"
|
|
#include "services/fatal.h"
|
|
#include "services/sm.h"
|
|
#include "kernel/detect.h"
|
|
#include "kernel/svc.h"
|
|
|
|
void fatalSimple(Result err) {
|
|
Result rc = 0;
|
|
|
|
if (detectDebugger()) {
|
|
svcBreak(0x80000000, err, 0);
|
|
}
|
|
|
|
if (!smHasInitialized()) {
|
|
rc = smInitialize();
|
|
}
|
|
|
|
if (R_SUCCEEDED(rc)) {
|
|
Handle srv;
|
|
rc = smGetServiceOriginal(&srv, smEncodeName("fatal:u"));
|
|
|
|
if (R_SUCCEEDED(rc)) {
|
|
IpcCommand c;
|
|
ipcInitialize(&c);
|
|
ipcSendPid(&c);
|
|
|
|
struct {
|
|
u64 magic;
|
|
u64 cmd_id;
|
|
u64 result;
|
|
u64 unknown;
|
|
} *raw;
|
|
|
|
raw = ipcPrepareHeader(&c, sizeof(*raw));
|
|
|
|
raw->magic = SFCI_MAGIC;
|
|
raw->cmd_id = 1;
|
|
raw->result = err;
|
|
raw->unknown = 0;
|
|
|
|
ipcDispatch(srv);
|
|
}
|
|
}
|
|
|
|
((void(*)())0xBADC0DE)();
|
|
__builtin_unreachable();
|
|
}
|