2006-07-10 04:45:13 -07:00
/*
2007-10-16 01:27:00 -07:00
* Copyright ( C ) 2000 - 2007 Jeff Dike ( jdike @ { addtoit , linux . intel } . com )
2005-04-16 15:20:36 -07:00
* Licensed under the GPL
*/
# include "linux/file.h"
2007-07-30 02:36:13 +04:00
# include "linux/fs.h"
2007-10-16 01:27:00 -07:00
# include "linux/mm.h"
# include "linux/sched.h"
2005-04-16 15:20:36 -07:00
# include "linux/utsname.h"
2009-11-30 17:37:04 -05:00
# include "linux/syscalls.h"
2007-10-16 01:27:00 -07:00
# include "asm/current.h"
2005-04-16 15:20:36 -07:00
# include "asm/mman.h"
# include "asm/uaccess.h"
2007-10-16 01:27:00 -07:00
# include "asm/unistd.h"
2005-04-16 15:20:36 -07:00
long sys_fork ( void )
{
2012-09-20 09:28:25 -04:00
return do_fork ( SIGCHLD , UPT_SP ( & current - > thread . regs . regs ) ,
2005-06-25 14:55:21 -07:00
& current - > thread . regs , 0 , NULL , NULL ) ;
2005-04-16 15:20:36 -07:00
}
long sys_vfork ( void )
{
2012-09-20 09:28:25 -04:00
return do_fork ( CLONE_VFORK | CLONE_VM | SIGCHLD ,
2005-06-25 14:55:21 -07:00
UPT_SP ( & current - > thread . regs . regs ) ,
& current - > thread . regs , 0 , NULL , NULL ) ;
2012-09-20 09:28:25 -04:00
}
long sys_clone ( unsigned long clone_flags , unsigned long newsp ,
void __user * parent_tid , void __user * child_tid )
{
if ( ! newsp )
newsp = UPT_SP ( & current - > thread . regs . regs ) ;
return do_fork ( clone_flags , newsp , & current - > thread . regs , 0 , parent_tid ,
child_tid ) ;
2005-04-16 15:20:36 -07:00
}
long old_mmap ( unsigned long addr , unsigned long len ,
unsigned long prot , unsigned long flags ,
unsigned long fd , unsigned long offset )
{
long err = - EINVAL ;
if ( offset & ~ PAGE_MASK )
goto out ;
2009-11-30 17:37:04 -05:00
err = sys_mmap_pgoff ( addr , len , prot , flags , fd , offset > > PAGE_SHIFT ) ;
2005-04-16 15:20:36 -07:00
out :
return err ;
}