1 |
/* Load a task using the single server, and then run it |
/* Load a task using the single server, and then run it |
2 |
as if we were the kernel. |
as if we were the kernel. |
3 |
Copyright (C) 1993,94,95,96,97,98,99,2000,01,02 Free Software Foundation, Inc. |
Copyright (C) 1993,94,95,96,97,98,99,2000,01,02,05 Free Software Foundation, Inc. |
4 |
|
|
5 |
This file is part of the GNU Hurd. |
This file is part of the GNU Hurd. |
6 |
|
|
367 |
str_start = ((vm_address_t) arg_pos |
str_start = ((vm_address_t) arg_pos |
368 |
+ (argc + 2) * sizeof (char *) + sizeof (integer_t)); |
+ (argc + 2) * sizeof (char *) + sizeof (integer_t)); |
369 |
p = args + ((vm_address_t) arg_pos & (vm_page_size - 1)); |
p = args + ((vm_address_t) arg_pos & (vm_page_size - 1)); |
370 |
*((int *) p)++ = argc; |
*(int *) p = argc; |
371 |
|
p = (char *) ((int *) p + 1); |
372 |
for (i = 0; i < argc; i++) |
for (i = 0; i < argc; i++) |
373 |
*((char **) p)++ = argv[i] - strings + (char *) str_start; |
{ |
374 |
*((char **) p)++ = 0; |
*(char **) p = argv[i] - strings + (char *) str_start; |
375 |
*((char **) p)++ = 0; |
p = (char *) ((char **) p + 1); |
376 |
|
} |
377 |
|
*(char **) p = 0; |
378 |
|
p = (char *) ((char **) p + 1); |
379 |
|
*(char **) p = 0; |
380 |
|
p = (char *) ((char **) p + 1); |
381 |
memcpy (p, strings, stringlen); |
memcpy (p, strings, stringlen); |
382 |
bzero (args, (vm_offset_t) arg_pos & (vm_page_size - 1)); |
bzero (args, (vm_offset_t) arg_pos & (vm_page_size - 1)); |
383 |
vm_write (task, trunc_page ((vm_offset_t) arg_pos), (vm_address_t) args, |
vm_write (task, trunc_page ((vm_offset_t) arg_pos), (vm_address_t) args, |