48 lines
707 B
ArmAsm
48 lines
707 B
ArmAsm
|
/* strncpy_from_user.S: Sparc strncpy from userspace.
|
||
|
*
|
||
|
* Copyright(C) 1996 David S. Miller
|
||
|
*/
|
||
|
|
||
|
#include <asm/ptrace.h>
|
||
|
#include <asm/errno.h>
|
||
|
|
||
|
.text
|
||
|
.align 4
|
||
|
|
||
|
/* Must return:
|
||
|
*
|
||
|
* -EFAULT for an exception
|
||
|
* count if we hit the buffer limit
|
||
|
* bytes copied if we hit a null byte
|
||
|
*/
|
||
|
|
||
|
.globl __strncpy_from_user
|
||
|
__strncpy_from_user:
|
||
|
/* %o0=dest, %o1=src, %o2=count */
|
||
|
mov %o2, %o3
|
||
|
1:
|
||
|
subcc %o2, 1, %o2
|
||
|
bneg 2f
|
||
|
nop
|
||
|
10:
|
||
|
ldub [%o1], %o4
|
||
|
add %o0, 1, %o0
|
||
|
cmp %o4, 0
|
||
|
add %o1, 1, %o1
|
||
|
bne 1b
|
||
|
stb %o4, [%o0 - 1]
|
||
|
2:
|
||
|
add %o2, 1, %o0
|
||
|
retl
|
||
|
sub %o3, %o0, %o0
|
||
|
|
||
|
.section .fixup,#alloc,#execinstr
|
||
|
.align 4
|
||
|
4:
|
||
|
retl
|
||
|
mov -EFAULT, %o0
|
||
|
|
||
|
.section __ex_table,#alloc
|
||
|
.align 4
|
||
|
.word 10b, 4b
|