Changeset 24345a5 in mainline
- Timestamp:
- 2008-11-08T10:01:59Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 24d6efc
- Parents:
- 7faabb7
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/proc/program.h
r7faabb7 r24345a5 53 53 extern void *program_loader; 54 54 55 extern void program_create(as_t *as, uintptr_t entry_addr, program_t *p); 56 extern int program_create_from_image(void *image_addr, program_t *p); 57 extern int program_create_loader(program_t *p); 55 extern void program_create(as_t *as, uintptr_t entry_addr, char *name, 56 program_t *p); 57 extern int program_create_from_image(void *image_addr, char *name, 58 program_t *p); 59 extern int program_create_loader(program_t *p, char *name); 58 60 extern void program_ready(program_t *p); 59 61 60 extern unative_t sys_program_spawn_loader(int *uspace_phone_id); 62 extern unative_t sys_program_spawn_loader(int *uspace_phone_id, 63 char *uspace_name, size_t name_len); 61 64 62 65 #endif -
kernel/generic/include/proc/task.h
r7faabb7 r24345a5 55 55 #include <udebug/udebug.h> 56 56 57 #define TASK_NAME_BUFLEN 20 58 57 59 struct thread; 58 60 … … 68 70 */ 69 71 SPINLOCK_DECLARE(lock); 70 71 char *name;72 73 char name[TASK_NAME_BUFLEN]; 72 74 /** List of threads contained in this task. */ 73 75 link_t th_head; -
kernel/generic/src/main/kinit.c
r7faabb7 r24345a5 170 170 171 171 int rc = program_create_from_image((void *) init.tasks[i].addr, 172 &programs[i]);172 "init-bin", &programs[i]); 173 173 174 174 if (rc == 0 && programs[i].task != NULL) { -
kernel/generic/src/proc/program.c
r7faabb7 r24345a5 68 68 * @param as Address space containing a binary program image. 69 69 * @param entry_addr Program entry-point address in program address space. 70 * @param name Name to set for the program's task. 70 71 * @param p Buffer for storing program information. 71 72 */ 72 void program_create(as_t *as, uintptr_t entry_addr, program_t *p)73 void program_create(as_t *as, uintptr_t entry_addr, char *name, program_t *p) 73 74 { 74 75 as_area_t *a; … … 82 83 kernel_uarg->uspace_uarg = NULL; 83 84 84 p->task = task_create(as, "app");85 p->task = task_create(as, name); 85 86 ASSERT(p->task); 86 87 … … 107 108 * 108 109 * @param image_addr Address of an executable program image. 110 * @param name Name to set for the program's task. 109 111 * @param p Buffer for storing program info. If image_addr 110 112 * points to a loader image, p->task will be set to … … 113 115 * @return EOK on success or negative error code. 114 116 */ 115 int program_create_from_image(void *image_addr, program_t *p)117 int program_create_from_image(void *image_addr, char *name, program_t *p) 116 118 { 117 119 as_t *as; … … 137 139 } 138 140 139 program_create(as, ((elf_header_t *) image_addr)->e_entry, p);141 program_create(as, ((elf_header_t *) image_addr)->e_entry, name, p); 140 142 141 143 return EOK; … … 144 146 /** Create a task from the program loader image. 145 147 * 146 * @param p Buffer for storing program info. 148 * @param p Buffer for storing program info. 149 * @param name Name to set for the program's task. 150 * 147 151 * @return EOK on success or negative error code. 148 152 */ 149 int program_create_loader(program_t *p )153 int program_create_loader(program_t *p, char *name) 150 154 { 151 155 as_t *as; … … 168 172 } 169 173 170 program_create(as, ((elf_header_t *) program_loader)->e_entry, p); 174 program_create(as, ((elf_header_t *) program_loader)->e_entry, 175 name, p); 171 176 172 177 return EOK; … … 189 194 * to it and stores the phone id into the provided buffer. 190 195 * 191 * @param uspace_phone_id Userspace address where to store the phone id. 196 * @param uspace_phone_id Userspace address where to store the phone id. 197 * @param name Name to set on the new task (typically the same 198 * as the command used to execute it). 192 199 * 193 200 * @return 0 on success or an error code from @ref errno.h. 194 201 */ 195 unative_t sys_program_spawn_loader(int *uspace_phone_id) 202 unative_t sys_program_spawn_loader(int *uspace_phone_id, char *uspace_name, 203 size_t name_len) 196 204 { 197 205 program_t p; … … 199 207 int rc; 200 208 int phone_id; 209 char namebuf[TASK_NAME_BUFLEN]; 201 210 202 211 fake_id = 0; … … 208 217 return rc; 209 218 219 /* Cap length of name and copy it from userspace. */ 220 221 if (name_len > THREAD_NAME_BUFLEN - 1) 222 name_len = THREAD_NAME_BUFLEN - 1; 223 224 rc = copy_from_uspace(namebuf, uspace_name, name_len); 225 if (rc != 0) 226 return (unative_t) rc; 227 228 namebuf[name_len] = '\0'; 229 230 /* Allocate the phone for communicating with the new task. */ 231 210 232 phone_id = phone_alloc(); 211 233 if (phone_id < 0) 212 234 return ELIMIT; 213 235 214 rc = program_create_loader(&p); 236 /* Spawn the new task. */ 237 238 rc = program_create_loader(&p, namebuf); 215 239 if (rc != 0) 216 240 return rc; -
kernel/generic/src/proc/task.c
r7faabb7 r24345a5 131 131 * 132 132 * @param as Task's address space. 133 * @param name Symbolic name .133 * @param name Symbolic name (a copy is made). 134 134 * 135 135 * @return New task's structure. … … 149 149 list_initialize(&ta->th_head); 150 150 ta->as = as; 151 ta->name = name; 151 152 memcpy(ta->name, name, TASK_NAME_BUFLEN); 153 ta->name[TASK_NAME_BUFLEN - 1] = '\0'; 154 152 155 atomic_set(&ta->refcount, 0); 153 156 atomic_set(&ta->lifecount, 0); -
kernel/generic/src/proc/thread.c
r7faabb7 r24345a5 280 280 * call. The task's lock may not be held. 281 281 * @param flags Thread flags. 282 * @param name Symbolic name .282 * @param name Symbolic name (a copy is made). 283 283 * @param uncounted Thread's accounting doesn't affect accumulated task 284 284 * accounting. … … 317 317 318 318 memcpy(t->name, name, THREAD_NAME_BUFLEN); 319 t->name[THREAD_NAME_BUFLEN - 1] = '\0'; 319 320 320 321 t->thread_code = func; … … 716 717 int rc; 717 718 718 if (name_len > = THREAD_NAME_BUFLEN)719 if (name_len > THREAD_NAME_BUFLEN - 1) 719 720 name_len = THREAD_NAME_BUFLEN - 1; 720 721 -
uspace/app/trace/trace.c
r7faabb7 r24345a5 517 517 518 518 /* Spawn a program loader */ 519 ldr = loader_spawn( );519 ldr = loader_spawn(path); 520 520 if (ldr == NULL) 521 521 return 0; -
uspace/lib/libc/generic/loader.c
r7faabb7 r24345a5 47 47 * 48 48 * Spawns a new program loader task and returns the connection structure. 49 * @param name Symbolic name to set on the newly created task. 49 50 * @return Pointer to the loader connection structure (should be 50 51 * de-allocated using free() after use). 51 52 */ 52 loader_t *loader_spawn( void)53 loader_t *loader_spawn(char *name) 53 54 { 54 55 int phone_id, rc; … … 58 59 * Ask kernel to spawn a new loader task. 59 60 */ 60 rc = __SYSCALL1(SYS_PROGRAM_SPAWN_LOADER, (sysarg_t) &phone_id); 61 rc = __SYSCALL3(SYS_PROGRAM_SPAWN_LOADER, (sysarg_t) &phone_id, 62 (sysarg_t) name, strlen(name)); 61 63 if (rc != 0) 62 64 return NULL; -
uspace/lib/libc/generic/task.c
r7faabb7 r24345a5 65 65 66 66 /* Spawn a program loader. */ 67 ldr = loader_spawn( );67 ldr = loader_spawn(path); 68 68 if (ldr == NULL) 69 69 return 0; -
uspace/lib/libc/include/loader/loader.h
r7faabb7 r24345a5 45 45 } loader_t; 46 46 47 extern loader_t *loader_spawn( void);47 extern loader_t *loader_spawn(char *name); 48 48 extern int loader_get_task_id(loader_t *, task_id_t *); 49 49 extern int loader_set_pathname(loader_t *, const char *);
Note:
See TracChangeset
for help on using the changeset viewer.