{"push_id":724165882,"size":5,"distinct_size":5,"ref":"refs/heads/cxx","head":"115c26489edb2680a4f25c1d4db37180afe469b8","before":"d137ca695d614fd92b6cec127f739ab13a62e267","commits":[{"sha":"8ee53d9a9b165011ef3165d33088143cd069fe37","author":{"email":"bad82f9a6b32052c72c6c00c54e3d2aaf917be49@cs.berkeley.edu","name":"Kevin Klues"},"message":"sys_exec and sys_proc_create now use argenv (XCC)\n\nThese syscalls now take an argenv pointer and it's length instead of a\npointer to a procinfo struct with the arg and env stuff embedded in it.\n\nWhen these syscalls are issued, the kernel first copies the argenv\nstructure to kernel memory, verifies internal consistency of all\npointers, and unpacks it into argc, envc, argv, and envp variables for\nfurther processing. It then passes these values to a new implementation\nof load_elf, who is now responsible for making sure these values end up\nin the right place for the new process.  Eventually this will be on it's\nstack at the locations defined by the SYSV ABI.  For now, it just copies\nthem into procinfo since taht is where existing code expects it to be\nwhen popping into user space.\n\nThe main purpose of this commit was to make sure that this new method of\npassing arguments and environment is going to work, moving forward. The\nnext step is to modify where these values are placed (i.e. on the new\nprocesses stack), and then update the low levels of user-space to\naccount for this change.","distinct":true,"url":"https://api.github.com/repos/brho/akaros/commits/8ee53d9a9b165011ef3165d33088143cd069fe37"},{"sha":"a2c428c06339fe701305c215e8634458679be027","author":{"email":"bad82f9a6b32052c72c6c00c54e3d2aaf917be49@cs.berkeley.edu","name":"Kevin Klues"},"message":"One step closer to argv/envp/auxv on the stack\n\nI've now rearranged load_elf to call out to a function called\npopulate_stack(), which will fill in the argc, envp, and auxv\ninformation in the appropriate places on the stack. For now it still\nfills in procinfo, but I've rewritten how this is done so that it makes\nmemcpy_to_user() calls to (UINFO)->argp and (UINFO)->argbuf instead of\nwriting to the kernel mapping for p->procinfo->argp and\np->procinfo->argbuf. This mimics how I plan to copy data onto the user\nstack in a subsequent commit.\n\nTo make this work, I've had to temporarily modify the memcpy_to_user()\ncall to accept writes to memory that is mapped as 'user-read-only'. This\nwas necessary since procinfo is mapped in in this way.  Once I start\nwriting to the stack, this will not be an issue, and this change can be\nreverted.","distinct":true,"url":"https://api.github.com/repos/brho/akaros/commits/a2c428c06339fe701305c215e8634458679be027"},{"sha":"8f777c8c1fef5d80f40ff5205aa59e79c5d0eb69","author":{"email":"bad82f9a6b32052c72c6c00c54e3d2aaf917be49@cs.berkeley.edu","name":"Kevin Klues"},"message":"Finalize arg, env, aux migration (1/3) (CXX) (BB)\n\nThe next 3 commits break up the last steps of migrating our arg, env,\nand aux vectors to be passed on the stack instead of in procinfo.  This\nnow makes us compatible with the SYSV ABI, and thus much less reliant on\nsysdep customizations in glibc. (of which we probably missed a bunch we\ndidn't even realize before).\n\nThis commit focuses on the final changes to the kernel internals that\nallow us to properly pass this information on the stack. The\npopulate_stack() function in elf.c now properly fills out the chunk of\nthe stack responsible for passing this information instead of populating\nprocinfo. We also needed to fix some stack alignment stuff in\nproc_ctx_init() now that we are relying on the stack to contain specific\ncontent. The comments in process64.c outline what this change was.","distinct":true,"url":"https://api.github.com/repos/brho/akaros/commits/8f777c8c1fef5d80f40ff5205aa59e79c5d0eb69"},{"sha":"43283e40fe70756b0295c640cb351bb549af6d6d","author":{"email":"bad82f9a6b32052c72c6c00c54e3d2aaf917be49@cs.berkeley.edu","name":"Kevin Klues"},"message":"Finalize arg, env, aux migration (2/3) (CXX) (BB)\n\nIn this commit I remove a few sysdep files that we no longer need to\nspecialize anymore. However, because Akaros needs to have the ability to\nreenter the _start function mutliple times, it is impossible to do away\nwith all sysdeps on these low level interfaces.\n\nThe true system dependent stuff has now been isolated in a file called\ninit.c in sysdeps/akaros (this name is required in order to get it to\nlink in with crt1.o).  It now introduces a new function called\n__libc_vcore_entry(), which handles all the code necessary to deal with\nour reentrant _start() function.  Our system dependant _start() function\nsimply calls out to __libc_vcore_entry() and then jumps to the\n_real_start(), as defined by the current architecture (currently only\nx86_64).\n\nBy becoming compliant with the SYSV ABI all of the code dealing with\nunpacking our args, env, and auxv data from procinfo is now unnecessary.","distinct":true,"url":"https://api.github.com/repos/brho/akaros/commits/43283e40fe70756b0295c640cb351bb549af6d6d"},{"sha":"115c26489edb2680a4f25c1d4db37180afe469b8","author":{"email":"bad82f9a6b32052c72c6c00c54e3d2aaf917be49@cs.berkeley.edu","name":"Kevin Klues"},"message":"Finalize arg, env, aux migration (3/3) (CXX) (BB)\n\nRemove all traces of procinfo->argp and procinfo->argbuf from the kernel\nand the cooresponding procinfo.h header file.","distinct":true,"url":"https://api.github.com/repos/brho/akaros/commits/115c26489edb2680a4f25c1d4db37180afe469b8"}]}