strncpy_from_user_32.S 707 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /* strncpy_from_user.S: Sparc strncpy from userspace.
  2. *
  3. * Copyright(C) 1996 David S. Miller
  4. */
  5. #include <asm/ptrace.h>
  6. #include <asm/errno.h>
  7. .text
  8. .align 4
  9. /* Must return:
  10. *
  11. * -EFAULT for an exception
  12. * count if we hit the buffer limit
  13. * bytes copied if we hit a null byte
  14. */
  15. .globl __strncpy_from_user
  16. __strncpy_from_user:
  17. /* %o0=dest, %o1=src, %o2=count */
  18. mov %o2, %o3
  19. 1:
  20. subcc %o2, 1, %o2
  21. bneg 2f
  22. nop
  23. 10:
  24. ldub [%o1], %o4
  25. add %o0, 1, %o0
  26. cmp %o4, 0
  27. add %o1, 1, %o1
  28. bne 1b
  29. stb %o4, [%o0 - 1]
  30. 2:
  31. add %o2, 1, %o0
  32. retl
  33. sub %o3, %o0, %o0
  34. .section .fixup,#alloc,#execinstr
  35. .align 4
  36. 4:
  37. retl
  38. mov -EFAULT, %o0
  39. .section __ex_table,#alloc
  40. .align 4
  41. .word 10b, 4b