1. In the emulator, why the seperate i386_fork routines? The semantic of returning 0 in retval[1] for parent and 1 for child is a BSD thing, not an architecture thing. It is true in 4.4 lite as well as 4.3. Seems this should be part of the "generic" e_fork routines. 2. In e_bnr_stubs.c:bnr_wait4(), the test for wpid != 0 is unnecesary. wpid is always a pointer to the result array passed in from emul_syscall. Also, since that result array is really 2 ints, treating the pointer to it as a "short *" and doing "*wpid = tmp_wpid" will set the wrong (high) half of the first return register on a big-endian machine. Should just declare it as an "int *" and do *wpid = tmp_wpid & 0xffff; or *wpid = (u_short) tmp_wpid; 3. In bsd_server_side.c:bsd_osigvec(), the "tramp" argument is passed in to, but not used by, osigvec(). Needed? 4. In e_bsd_stubs.c:e_execve(), should it be passing char_count instead of the page-rounded arg_size to bsd_execve? Guess it doesn't matter since secure_execve rounds it first thing anyway. 5. In serv_syscalls.c, what is "cmu_binary" in bsd_take_signal and bsd_sigreturn for? It appears to be unused. 6. In server_exec.c:after_exec(), the various *_count params are said to be OUT but are never set. Bug? 7. In server_exec.c:secure_execve(), there is a "+80" when computing argv_space. Is this space for the potential cfname/cfargs/fname strings? If so, why not compute exactly since you have the string lengths available. Or at the very least: "(3 * PATH_LENGTH) / sizeof(char *)". If the current 320 bytes (80*sizeof(char *)) proves too small the consequence is trashed argv strings on a downward growing stack or trashed stack frames on an upward growing stack. 8. In emul_exec.c:emul_trap_run(), why the binary type switches? Why not always call the machine dependent emul_setup() or emul_exec_start() and let them differentiate linux from not-linux. Or do you envision linux running on other architectures? 9. Should emul_binary_type even be considered machine independent? While it is conceivable that linux or netbsd will run on something other than a 386, you might still wind up with BT_NETBSD_386 and BT_NETBSD_PA due to other differences (object file formats?) 10.What is the intent of the "mapped_addr = 0x90000000" in emul_exec.c:emul_exec_open(). Simply to avoid conflict with the application's likely address range? Is there a reason to keep it below EMULATOR_BASE (0xa0000000 on the 386)? Can you just use MAP_FILE_BASE?