sys_arm.c 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /*
  2. * linux/arch/arm/kernel/sys_arm.c
  3. *
  4. * Copyright (C) People who wrote linux/arch/i386/kernel/sys_i386.c
  5. * Copyright (C) 1995, 1996 Russell King.
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License version 2 as
  9. * published by the Free Software Foundation.
  10. *
  11. * This file contains various random system calls that
  12. * have a non-standard calling sequence on the Linux/arm
  13. * platform.
  14. */
  15. #include <linux/export.h>
  16. #include <linux/errno.h>
  17. #include <linux/sched.h>
  18. #include <linux/mm.h>
  19. #include <linux/sem.h>
  20. #include <linux/msg.h>
  21. #include <linux/shm.h>
  22. #include <linux/stat.h>
  23. #include <linux/syscalls.h>
  24. #include <linux/mman.h>
  25. #include <linux/fs.h>
  26. #include <linux/file.h>
  27. #include <linux/ipc.h>
  28. #include <linux/uaccess.h>
  29. #include <linux/slab.h>
  30. /* Fork a new task - this creates a new program thread.
  31. * This is called indirectly via a small wrapper
  32. */
  33. asmlinkage int sys_fork(struct pt_regs *regs)
  34. {
  35. #ifdef CONFIG_MMU
  36. return do_fork(SIGCHLD, regs->ARM_sp, regs, 0, NULL, NULL);
  37. #else
  38. /* can not support in nommu mode */
  39. return(-EINVAL);
  40. #endif
  41. }
  42. /* Clone a task - this clones the calling program thread.
  43. * This is called indirectly via a small wrapper
  44. */
  45. asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp,
  46. int __user *parent_tidptr, int tls_val,
  47. int __user *child_tidptr, struct pt_regs *regs)
  48. {
  49. if (!newsp)
  50. newsp = regs->ARM_sp;
  51. return do_fork(clone_flags, newsp, regs, 0, parent_tidptr, child_tidptr);
  52. }
  53. asmlinkage int sys_vfork(struct pt_regs *regs)
  54. {
  55. return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->ARM_sp, regs, 0, NULL, NULL);
  56. }
  57. /*
  58. * Since loff_t is a 64 bit type we avoid a lot of ABI hassle
  59. * with a different argument ordering.
  60. */
  61. asmlinkage long sys_arm_fadvise64_64(int fd, int advice,
  62. loff_t offset, loff_t len)
  63. {
  64. return sys_fadvise64_64(fd, offset, len, advice);
  65. }