Ignore:
File:
1 edited

Legend:

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

    rf8fb03b rf8b69a1e  
    4949#include <lib/elf_load.h>
    5050#include <str.h>
     51#include <str_error.h>
    5152#include <log.h>
    5253#include <syscall/copy.h>
     
    9899        if (!area) {
    99100                free(kernel_uarg);
    100                 task_destroy(prg->task);
     101                task_release(prg->task);
    101102                prg->task = NULL;
    102103                return ENOMEM;
     
    118119                free(kernel_uarg);
    119120                as_area_destroy(as, virt);
    120                 task_destroy(prg->task);
     121                task_release(prg->task);
    121122                prg->task = NULL;
    122123                return ELIMIT;
     
    142143 *
    143144 */
    144 errno_t program_create_from_image(void *image_addr, char *name, program_t *prg)
     145errno_t program_create_from_image(void *image_addr, size_t image_size, char *name, program_t *prg)
    145146{
    146147        as_t *as = as_create(0);
     
    156157        }
    157158
    158         return program_create(as, ((elf_header_t *) image_addr)->e_entry,
     159        errno_t rc = program_create(as, ((elf_header_t *) image_addr)->e_entry,
    159160            name, prg);
     161
     162        if (rc == EOK) {
     163                prg->task->debug_sections = calloc(1, sizeof(debug_sections_t));
     164                if (prg->task->debug_sections != NULL)
     165                        *prg->task->debug_sections = get_debug_sections(image_addr, image_size);
     166        }
     167
     168        return rc;
    160169}
    161170
     
    203212void program_ready(program_t *prg)
    204213{
    205         thread_ready(prg->main_thread);
     214        thread_start(prg->main_thread);
     215        thread_detach(prg->main_thread);
     216        prg->main_thread = NULL;
    206217}
    207218
     
    241252        program_ready(&prg);
    242253
     254        task_release(prg.task);
     255
    243256        return EOK;
    244257}
Note: See TracChangeset for help on using the changeset viewer.