mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 20:42:44 +02:00
ro: add ldrRoLoadNrrEx, fix roDmnt
This commit is contained in:
parent
76b6f521fe
commit
23bd10f6db
@ -19,5 +19,6 @@ Result ldrRoLoadNro(u64* out_address, u64 nro_address, u64 nro_size, u64 bss_add
|
|||||||
Result ldrRoUnloadNro(u64 nro_address);
|
Result ldrRoUnloadNro(u64 nro_address);
|
||||||
Result ldrRoLoadNrr(u64 nrr_address, u64 nrr_size);
|
Result ldrRoLoadNrr(u64 nrr_address, u64 nrr_size);
|
||||||
Result ldrRoUnloadNrr(u64 nrr_address);
|
Result ldrRoUnloadNrr(u64 nrr_address);
|
||||||
|
Result ldrRoLoadNrrEx(u64 nrr_address, u64 nrr_size);
|
||||||
|
|
||||||
Result roDmntGetModuleInfos(u64 pid, LoaderModuleInfo *out_module_infos, size_t out_size, u32 *num_out);
|
Result roDmntGetModuleInfos(u64 pid, LoaderModuleInfo *out_module_infos, size_t max_out_modules, u32 *num_out);
|
||||||
|
@ -134,7 +134,7 @@ Result ldrRoUnloadNro(u64 nro_address) {
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ldrRoLoadNrr(u64 nrr_address, u64 nrr_size) {
|
static Result _ldrRoLoadNrr(u64 cmd_id, u64 nrr_address, u64 nrr_size) {
|
||||||
IpcCommand c;
|
IpcCommand c;
|
||||||
ipcInitialize(&c);
|
ipcInitialize(&c);
|
||||||
ipcSendPid(&c);
|
ipcSendPid(&c);
|
||||||
@ -150,7 +150,7 @@ Result ldrRoLoadNrr(u64 nrr_address, u64 nrr_size) {
|
|||||||
raw = serviceIpcPrepareHeader(&g_roSrv, &c, sizeof(*raw));
|
raw = serviceIpcPrepareHeader(&g_roSrv, &c, sizeof(*raw));
|
||||||
|
|
||||||
raw->magic = SFCI_MAGIC;
|
raw->magic = SFCI_MAGIC;
|
||||||
raw->cmd_id = 2;
|
raw->cmd_id = cmd_id;
|
||||||
raw->pid = 0;
|
raw->pid = 0;
|
||||||
raw->nrr_address = nrr_address;
|
raw->nrr_address = nrr_address;
|
||||||
raw->nrr_size = nrr_size;
|
raw->nrr_size = nrr_size;
|
||||||
@ -173,6 +173,10 @@ Result ldrRoLoadNrr(u64 nrr_address, u64 nrr_size) {
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Result ldrRoLoadNrr(u64 nrr_address, u64 nrr_size) {
|
||||||
|
return _ldrRoLoadNrr(2, nrr_address, nrr_size);
|
||||||
|
}
|
||||||
|
|
||||||
Result ldrRoUnloadNrr(u64 nrr_address) {
|
Result ldrRoUnloadNrr(u64 nrr_address) {
|
||||||
IpcCommand c;
|
IpcCommand c;
|
||||||
ipcInitialize(&c);
|
ipcInitialize(&c);
|
||||||
@ -210,6 +214,13 @@ Result ldrRoUnloadNrr(u64 nrr_address) {
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Result ldrRoLoadNrrEx(u64 nrr_address, u64 nrr_size) {
|
||||||
|
if (hosversionBefore(7,0,0)) {
|
||||||
|
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
||||||
|
}
|
||||||
|
return _ldrRoLoadNrr(10, nrr_address, nrr_size);
|
||||||
|
}
|
||||||
|
|
||||||
Result _ldrRoInitialize(void) {
|
Result _ldrRoInitialize(void) {
|
||||||
IpcCommand c;
|
IpcCommand c;
|
||||||
ipcInitialize(&c);
|
ipcInitialize(&c);
|
||||||
@ -243,11 +254,11 @@ Result _ldrRoInitialize(void) {
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
Result roDmntGetModuleInfos(u64 pid, LoaderModuleInfo *out_module_infos, size_t out_size, u32 *num_out) {
|
Result roDmntGetModuleInfos(u64 pid, LoaderModuleInfo *out_module_infos, size_t max_out_modules, u32 *num_out) {
|
||||||
IpcCommand c;
|
IpcCommand c;
|
||||||
ipcInitialize(&c);
|
ipcInitialize(&c);
|
||||||
|
|
||||||
ipcAddRecvStatic(&c, out_module_infos, out_size, 0);
|
ipcAddRecvBuffer(&c, out_module_infos, max_out_modules * sizeof(*out_module_infos), BufferType_Normal);
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
u64 magic;
|
u64 magic;
|
||||||
|
Loading…
Reference in New Issue
Block a user