Changes in kernel/generic/src/proc/program.c [f8fb03b:3fcea34] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/proc/program.c
rf8fb03b r3fcea34 49 49 #include <lib/elf_load.h> 50 50 #include <str.h> 51 #include <str_error.h> 51 52 #include <log.h> 52 53 #include <syscall/copy.h> 53 54 #include <proc/program.h> 55 #include <userspace.h> 54 56 55 57 /** … … 71 73 errno_t program_create(as_t *as, uspace_addr_t entry_addr, char *name, program_t *prg) 72 74 { 73 uspace_arg_t *kernel_uarg = (uspace_arg_t *) 74 malloc(sizeof(uspace_arg_t)); 75 uinit_arg_t *kernel_uarg = malloc(sizeof(uinit_arg_t)); 75 76 if (!kernel_uarg) 76 77 return ENOMEM; … … 98 99 if (!area) { 99 100 free(kernel_uarg); 100 task_ destroy(prg->task);101 task_release(prg->task); 101 102 prg->task = NULL; 102 103 return ENOMEM; 103 104 } 104 105 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; 106 kernel_uarg->pc = entry_addr; 107 kernel_uarg->sp = arch_get_initial_sp(virt, STACK_SIZE_USER); 111 108 112 109 /* … … 118 115 free(kernel_uarg); 119 116 as_area_destroy(as, virt); 120 task_ destroy(prg->task);117 task_release(prg->task); 121 118 prg->task = NULL; 122 119 return ELIMIT; … … 142 139 * 143 140 */ 144 errno_t program_create_from_image(void *image_addr, char *name, program_t *prg)141 errno_t program_create_from_image(void *image_addr, size_t image_size, char *name, program_t *prg) 145 142 { 146 143 as_t *as = as_create(0); … … 156 153 } 157 154 158 returnprogram_create(as, ((elf_header_t *) image_addr)->e_entry,155 errno_t rc = program_create(as, ((elf_header_t *) image_addr)->e_entry, 159 156 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; 160 165 } 161 166 … … 203 208 void program_ready(program_t *prg) 204 209 { 205 thread_ready(prg->main_thread); 210 thread_start(prg->main_thread); 211 thread_detach(prg->main_thread); 212 prg->main_thread = NULL; 206 213 } 207 214 … … 241 248 program_ready(&prg); 242 249 250 task_release(prg.task); 251 243 252 return EOK; 244 253 }
Note:
See TracChangeset
for help on using the changeset viewer.