X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/09aa85cf875db1e6fd1317cd2b9947b9d3675d6c..f8bd95b7a13dfe54d800e2d7ecdb0329f0798289:/lunaix-os/kernel/loader/exec.c diff --git a/lunaix-os/kernel/loader/exec.c b/lunaix-os/kernel/loader/exec.c index 0105753..6a18ffc 100644 --- a/lunaix-os/kernel/loader/exec.c +++ b/lunaix-os/kernel/loader/exec.c @@ -7,6 +7,7 @@ #include #include #include +#include #include @@ -25,11 +26,11 @@ exec_str_size(const char** str_arr, size_t* length) sz += strlen(chr); len++; - chr = *(str_arr + sz); + chr = *(str_arr++); } *length = len; - return sz + 1; + return sz + sizeof(char*); } void @@ -50,7 +51,7 @@ __exec_remap_heap(struct ld_param* param, struct proc_mm* pvms) .flags = MAP_ANON | MAP_PRIVATE, .type = REGION_TYPE_HEAP, .proct = PROT_READ | PROT_WRITE, - .mlen = DEFAULT_HEAP_PAGES * PG_SIZE }; + .mlen = PG_SIZE }; int status = 0; struct mm_region* heap; if ((status = mem_map(NULL, &heap, param->info.end, NULL, &map_param))) { @@ -115,7 +116,7 @@ exec_load(struct ld_param* param, memcpy(arg_start + sz_argv, (void*)envp, sz_envp); ptr_t* ustack = (ptr_t*)USTACK_TOP; - struct usr_exec_param* exec_param = mapped; + struct usr_exec_param* exec_param = (struct usr_exec_param*)mapped; ustack[-1] = (ptr_t)mapped; param->info.stack_top = &ustack[-1]; @@ -127,6 +128,8 @@ exec_load(struct ld_param* param, .info = param->info }; } else { // TODO need to find a way to inject argv and envp remotely + // this is for the support of kernel level implementation of + // posix_spawn fail("not implemented"); } @@ -192,5 +195,5 @@ __DEFINE_LXSYSCALL3(int, // return so execve 'will not return' from the perspective of it's invoker done: - return errno; + return DO_STATUS(errno); } \ No newline at end of file