interpret

This commit is contained in:
aramya 2023-07-01 17:23:03 +01:00
parent 97f10d22f5
commit 803d40b487
2 changed files with 35 additions and 3 deletions

View File

@ -2,8 +2,40 @@
extern void (*ofw)();
void* interpret(char* cmd, ...)
void* interpret(char* cmd, int32_t* stack_args, int n_stack_args, int32_t* retaddr)
{
struct
{
char* service;
int32_t n_args;
int32_t n_rets;
char* arg1;
int32_t argN[n_stack_args];
int32_t ret1;
int32_t retN[16];
} ofw_arg;
SERVICE("interpret", 10, 1+n_stack_args, 16);
ofw_arg.arg1 = cmd;
int i;
for (i = 0; i < n_stack_args; i++)
{
ofw_arg.argN[i] = stack_args[i];
}
ofw(&ofw_arg);
int32_t* addr = claim(retaddr, 17, 1);
*addr = ofw_arg.ret1;
for (i = 1; i < 17; i++)
{
addr[i] = ofw_arg.retN[i];
}
return addr;
}
void* set_callback(void* addr)

View File

@ -246,7 +246,7 @@ int32_t package_to_path(phandle package, void* buf, int32_t buflen)
}
void* call_method(char* method, ihandle instance, int32_t* stack_args, int32_t n_stack_args)
void* call_method(char* method, ihandle instance, int32_t* stack_args, int32_t n_stack_args, int32_t* retaddr)
{
struct
{
@ -273,7 +273,7 @@ void* call_method(char* method, ihandle instance, int32_t* stack_args, int32_t n
ofw(&ofw_arg);
int32_t* addr = claim((int32_t*)0x04000000, 17, 1);
int32_t* addr = claim(retaddr, 17, 1);
*addr = ofw_arg.ret1;
for (i = 1; i < 17; i++)