sys_exec and sys_proc_create now use argenv (XCC)
authorKevin Klues <klueska@cs.berkeley.edu>
Sun, 12 Jul 2015 02:03:38 +0000 (19:03 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 14 Jul 2015 14:33:16 +0000 (10:33 -0400)
commit766529fabeb75575affe6a05a9e4db1ce089442e
treef6a4cfb5dff8efd6c640ad01b130bcbfc390c81d
parent96149f485f3e1fc4c45ed046f1456780349e6996
sys_exec and sys_proc_create now use argenv (XCC)

These syscalls now take an argenv pointer and it's length instead of a
pointer to a procinfo struct with the arg and env stuff embedded in it.

When these syscalls are issued, the kernel first copies the argenv
structure to kernel memory, verifies internal consistency of all
pointers, and unpacks it into argc, envc, argv, and envp variables for
further processing. It then passes these values to a new implementation
of load_elf, who is now responsible for making sure these values end up
in the right place for the new process.  Eventually this will be on it's
stack at the locations defined by the SYSV ABI.  For now, it just copies
them into procinfo since taht is where existing code expects it to be
when popping into user space.

The main purpose of this commit was to make sure that this new method of
passing arguments and environment is going to work, moving forward. The
next step is to modify where these values are placed (i.e. on the new
processes stack), and then update the low levels of user-space to
account for this change.
kern/include/elf.h
kern/include/ros/limits.h
kern/include/ros/procinfo.h
kern/src/elf.c
kern/src/process.c
kern/src/syscall.c
tests/old/proctests.c
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/execve.c
user/parlib/syscall.c