vfork.S 712 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /*
  2. Copyright 2002, 2015 Yoshinori Sato <ysato@users.sourceforge.jp>
  3. */
  4. #include <sys/syscall.h>
  5. #ifdef __H8300S__
  6. .h8300s
  7. #else
  8. .h8300h
  9. #endif
  10. .text
  11. .align 2
  12. .globl __vfork
  13. .hidden __vfork
  14. .type __vfork,@function
  15. __vfork:
  16. mov.l @sp+,er2 /* er2 = return address */
  17. mov.l #vfork_args,er1
  18. sub.l er0,er0
  19. mov.b #__NR_clone,r0l
  20. trapa #0
  21. mov.l #-4096,er1
  22. cmp.l er0,er1
  23. bcc done
  24. neg.l er0
  25. # if !defined(__PIC__)
  26. mov.l er0,@errno
  27. # else
  28. mov.l @(errno@GOTOFF,er5),er1
  29. mov.l er0,@er1
  30. # endif
  31. sub.l er0,er0
  32. dec.l #1,er0
  33. done:
  34. jmp @er2
  35. vfork_args:
  36. .long 0x00004111 /* CLONE_VFORK | CLONE_VM | SIGCHLD */
  37. .long 0
  38. .long 0
  39. .long 0
  40. .long 0
  41. weak_alias(__vfork,vfork)
  42. libc_hidden_def(vfork)
  43. .end