*************** *** 379,402 **** goto beyond_if; } down_write(¤t->mm->mmap_sem); error = do_mmap(bprm->file, N_TXTADDR(ex), ex.a_text, PROT_READ | PROT_EXEC, MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE | MAP_EXECUTABLE, fd_offset); up_write(¤t->mm->mmap_sem); if (error != N_TXTADDR(ex)) { send_sig(SIGKILL, current, 0); return error; } down_write(¤t->mm->mmap_sem); error = do_mmap(bprm->file, N_DATADDR(ex), ex.a_data, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE | MAP_EXECUTABLE, fd_offset + ex.a_text); up_write(¤t->mm->mmap_sem); if (error != N_DATADDR(ex)) { send_sig(SIGKILL, current, 0); return error; --- 410,447 ---- goto beyond_if; } + #ifdef CONFIG_MOSIX + error = do_mmap_down(bprm->file, N_TXTADDR(ex), ex.a_text, + PROT_READ | PROT_EXEC, + MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE | MAP_EXECUTABLE, + fd_offset); + #else down_write(¤t->mm->mmap_sem); error = do_mmap(bprm->file, N_TXTADDR(ex), ex.a_text, PROT_READ | PROT_EXEC, MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE | MAP_EXECUTABLE, fd_offset); up_write(¤t->mm->mmap_sem); + #endif /* CONFIG_MOSIX */ if (error != N_TXTADDR(ex)) { send_sig(SIGKILL, current, 0); return error; } + #ifdef CONFIG_MOSIX + error = do_mmap_down(bprm->file, N_DATADDR(ex), ex.a_data, + PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE | MAP_EXECUTABLE, + fd_offset + ex.a_text); + #else down_write(¤t->mm->mmap_sem); error = do_mmap(bprm->file, N_DATADDR(ex), ex.a_data, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE | MAP_EXECUTABLE, fd_offset + ex.a_text); up_write(¤t->mm->mmap_sem); + #endif /* CONFIG_MOSIX */ if (error != N_DATADDR(ex)) { send_sig(SIGKILL, current, 0); return error; *************** *** 405,412 **** beyond_if: set_binfmt(&aout_format); set_brk(current->mm->start_brk, current->mm->brk); retval = setup_arg_pages(bprm); if (retval < 0) { /* Someone check-me: is this error path enough? */ --- 450,476 ---- beyond_if: set_binfmt(&aout_format); + #ifdef CONFIG_MOSIX + /* if DEPUTY, the REMOTE already did "set_brk" in aout_remote_init_mm */ + if(!(current->mosix.dflags & DDEPUTY)) + #endif /* CONFIG_MOSIX */ set_brk(current->mm->start_brk, current->mm->brk); + #ifdef CONFIG_MOSIX + if(current->mosix.dflags & DDEPUTY) + { + retval = mosix_deputy_setup_args(SETUP_ARGS_AS_AOUT, + &start_stack); + if(retval < 0) + { + send_sig(SIGKILL, current, 0); + return(retval); + } + mosix_obtain_registers(START_THREAD_REGS); + } + else + { + #endif /* CONFIG_MOSIX */ retval = setup_arg_pages(bprm); if (retval < 0) { /* Someone check-me: is this error path enough? */