diff options
Diffstat (limited to 'src/kernel/elf.c')
-rw-r--r-- | src/kernel/elf.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/kernel/elf.c b/src/kernel/elf.c index 8113c14..60fa3a9 100644 --- a/src/kernel/elf.c +++ b/src/kernel/elf.c @@ -73,10 +73,10 @@ struct ph_entry { uint32_t align; } __attribute__ ((packed)); -bool try_elf_run(const struct drive *d, const char *path, const char *pass_old_vma) { +uint32_t try_elf_run(const struct drive *d, const char *path, const char *pass_old_vma) { file_id_t h = d->get_file(d, path); if (!h) - return false; + return 0; struct elf_header ehead; @@ -87,7 +87,7 @@ bool try_elf_run(const struct drive *d, const char *path, const char *pass_old_v (ehead.endianness != LITTLE_ENDIAN) || ehead.os_abi_version) { d->free_file(d, h); - return false; + return 0; } uint32_t phtable_size = ehead.phentry_size * ehead.phtable_count; @@ -104,7 +104,7 @@ bool try_elf_run(const struct drive *d, const char *path, const char *pass_old_v continue; void *pma = pd_user_allocate(pd, entry->vma, (entry->vms - 1) / 4096 + 1, entry->flags & PH_WRITABLE); fmcpy(pma, d, h, entry->fa, entry->fs); - for (uint8_t *pma_i = pma + entry->fs; pma_i < pma + entry->vms; ++pma_i) + for (uint8_t *pma_i = pma + entry->fs; pma_i < (uint8_t *)pma + entry->vms; ++pma_i) *pma_i = 0; } @@ -128,6 +128,7 @@ bool try_elf_run(const struct drive *d, const char *path, const char *pass_old_v tstate.page_directory = pd; tstate.ret_addr = ehead.entry_vma; tstate.edx = (uint32_t)pass_vma; + tstate.wait_mode = NONE; const char *path_end_start = path; for (const char *i = path; *i; ++i) @@ -142,6 +143,5 @@ bool try_elf_run(const struct drive *d, const char *path, const char *pass_old_v } tstate.name[i] = '\0'; - new_task(tstate); - return true; + return new_task(tstate); }
\ No newline at end of file |