Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/proc/program.c

    r3fcea34 rf8fb03b  
    4949#include <lib/elf_load.h>
    5050#include <str.h>
    51 #include <str_error.h>
    5251#include <log.h>
    5352#include <syscall/copy.h>
    5453#include <proc/program.h>
    55 #include <userspace.h>
    5654
    5755/**
     
    7371errno_t program_create(as_t *as, uspace_addr_t entry_addr, char *name, program_t *prg)
    7472{
    75         uinit_arg_t *kernel_uarg = malloc(sizeof(uinit_arg_t));
     73        uspace_arg_t *kernel_uarg = (uspace_arg_t *)
     74            malloc(sizeof(uspace_arg_t));
    7675        if (!kernel_uarg)
    7776                return ENOMEM;
     
    9998        if (!area) {
    10099                free(kernel_uarg);
    101                 task_release(prg->task);
     100                task_destroy(prg->task);
    102101                prg->task = NULL;
    103102                return ENOMEM;
    104103        }
    105104
    106         kernel_uarg->pc = entry_addr;
    107         kernel_uarg->sp = arch_get_initial_sp(virt, STACK_SIZE_USER);
     105        kernel_uarg->uspace_entry = entry_addr;
     106        kernel_uarg->uspace_stack = virt;
     107        kernel_uarg->uspace_stack_size = STACK_SIZE_USER;
     108        kernel_uarg->uspace_thread_function = USPACE_NULL;
     109        kernel_uarg->uspace_thread_arg = USPACE_NULL;
     110        kernel_uarg->uspace_uarg = USPACE_NULL;
    108111
    109112        /*
     
    115118                free(kernel_uarg);
    116119                as_area_destroy(as, virt);
    117                 task_release(prg->task);
     120                task_destroy(prg->task);
    118121                prg->task = NULL;
    119122                return ELIMIT;
     
    139142 *
    140143 */
    141 errno_t program_create_from_image(void *image_addr, size_t image_size, char *name, program_t *prg)
     144errno_t program_create_from_image(void *image_addr, char *name, program_t *prg)
    142145{
    143146        as_t *as = as_create(0);
     
    153156        }
    154157
    155         errno_t rc = program_create(as, ((elf_header_t *) image_addr)->e_entry,
     158        return program_create(as, ((elf_header_t *) image_addr)->e_entry,
    156159            name, prg);
    157 
    158         if (rc == EOK) {
    159                 prg->task->debug_sections = calloc(1, sizeof(debug_sections_t));
    160                 if (prg->task->debug_sections != NULL)
    161                         *prg->task->debug_sections = get_debug_sections(image_addr, image_size);
    162         }
    163 
    164         return rc;
    165160}
    166161
     
    208203void program_ready(program_t *prg)
    209204{
    210         thread_start(prg->main_thread);
    211         thread_detach(prg->main_thread);
    212         prg->main_thread = NULL;
     205        thread_ready(prg->main_thread);
    213206}
    214207
     
    248241        program_ready(&prg);
    249242
    250         task_release(prg.task);
    251 
    252243        return EOK;
    253244}
Note: See TracChangeset for help on using the changeset viewer.