⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uaccess.s

📁 linux-2.6.15.6
💻 S
字号:
/* *  arch/s390/lib/uaccess.S *    __copy_{from|to}_user functions. * *  s390 *    Copyright (C) 2000,2002 IBM Deutschland Entwicklung GmbH, IBM Corporation *    Authors(s): Martin Schwidefsky (schwidefsky@de.ibm.com) * *  These functions have standard call interface */#include <linux/errno.h>#include <asm/lowcore.h>#include <asm/asm-offsets.h>        .text        .align 4        .globl __copy_from_user_asm	# %r2 = to, %r3 = n, %r4 = from__copy_from_user_asm:	slr	%r0,%r00:	mvcp	0(%r3,%r2),0(%r4),%r0	jnz	1f	slr	%r2,%r2	br	%r141:	la	%r2,256(%r2)	la	%r4,256(%r4)	ahi	%r3,-2562:	mvcp	0(%r3,%r2),0(%r4),%r0	jnz	1b3:	slr	%r2,%r2	br	%r144:	lhi	%r0,-4096	lr	%r5,%r4	slr	%r5,%r0	nr	%r5,%r0		# %r5 = (%r4 + 4096) & -4096	slr	%r5,%r4		# %r5 = #bytes to next user page boundary	clr	%r3,%r5		# copy crosses next page boundary ?	jnh	6f		# no, the current page faulted	# move with the reduced length which is < 2565:	mvcp	0(%r5,%r2),0(%r4),%r0	slr	%r3,%r56:	lr	%r2,%r3	br	%r14        .section __ex_table,"a"	.long	0b,4b	.long	2b,4b	.long	5b,6b        .previous        .align 4        .text        .globl __copy_to_user_asm	# %r2 = from, %r3 = n, %r4 = to__copy_to_user_asm:	slr	%r0,%r00:	mvcs	0(%r3,%r4),0(%r2),%r0	jnz	1f	slr	%r2,%r2	br	%r141:	la	%r2,256(%r2)	la	%r4,256(%r4)	ahi	%r3,-2562:	mvcs	0(%r3,%r4),0(%r2),%r0	jnz	1b3:	slr	%r2,%r2	br	%r144:	lhi	%r0,-4096	lr	%r5,%r4	slr	%r5,%r0	nr	%r5,%r0		# %r5 = (%r4 + 4096) & -4096	slr	%r5,%r4		# %r5 = #bytes to next user page boundary	clr	%r3,%r5		# copy crosses next page boundary ?	jnh	6f		# no, the current page faulted	# move with the reduced length which is < 2565:	mvcs	0(%r5,%r4),0(%r2),%r0	slr	%r3,%r56:	lr	%r2,%r3	br	%r14        .section __ex_table,"a"	.long	0b,4b	.long	2b,4b	.long	5b,6b        .previous        .align 4        .text        .globl __copy_in_user_asm	# %r2 = from, %r3 = n, %r4 = to__copy_in_user_asm:	sacf	256	bras	1,1f	mvc	0(1,%r4),0(%r2)0:	mvc	0(256,%r4),0(%r2)	la	%r2,256(%r2)	la	%r4,256(%r4)1:	ahi	%r3,-256	jnm	0b2:	ex	%r3,0(%r1)	sacf	0	slr	%r2,%r2	br	143:	mvc	0(1,%r4),0(%r2)	la	%r2,1(%r2)	la	%r4,1(%r4)	ahi	%r3,-1	jnm	3b4:	lr	%r2,%r3	sacf	0	br	%r14        .section __ex_table,"a"	.long	0b,3b	.long	2b,3b	.long	3b,4b        .previous        .align 4        .text        .globl __clear_user_asm	# %r2 = to, %r3 = n__clear_user_asm:	bras	%r5,0f	.long	empty_zero_page0:	l	%r5,0(%r5)	slr	%r0,%r01:	mvcs	0(%r3,%r2),0(%r5),%r0	jnz	2f	slr	%r2,%r2	br	%r142:	la	%r2,256(%r2)	ahi	%r3,-2563:	mvcs	0(%r3,%r2),0(%r5),%r0	jnz	2b4:	slr	%r2,%r2	br	%r145:	lhi	%r0,-4096	lr	%r4,%r2	slr	%r4,%r0	nr	%r4,%r0		# %r4 = (%r2 + 4096) & -4096	slr	%r4,%r2		# %r4 = #bytes to next user page boundary	clr	%r3,%r4		# clear crosses next page boundary ?	jnh	7f		# no, the current page faulted	# clear with the reduced length which is < 2566:	mvcs	0(%r4,%r2),0(%r5),%r0	slr	%r3,%r47:	lr	%r2,%r3	br	%r14        .section __ex_table,"a"	.long	1b,5b	.long	3b,5b	.long	6b,7b        .previous        .align 4        .text        .globl __strncpy_from_user_asm	# %r2 = count, %r3 = dst, %r4 = src__strncpy_from_user_asm:	lhi	%r0,0	lr	%r1,%r4	la	%r4,0(%r4)	# clear high order bit from %r4	la	%r2,0(%r2,%r4)	# %r2 points to first byte after string	sacf	2560:	srst	%r2,%r1	jo	0b	sacf	0	lr	%r1,%r2	jh	1f		# \0 found in string ?	ahi	%r1,1		# include \0 in copy1:	slr	%r1,%r4		# %r1 = copy length (without \0)	slr	%r2,%r4		# %r2 = return length (including \0)2:	mvcp	0(%r1,%r3),0(%r4),%r0	jnz	3f	br	%r143:	la	%r3,256(%r3)	la	%r4,256(%r4)	ahi	%r1,-256	mvcp	0(%r1,%r3),0(%r4),%r0	jnz	3b	br	%r144:	sacf	0	lhi	%r2,-EFAULT	br	%r14	.section __ex_table,"a"	.long	0b,4b	.previous        .align 4        .text        .globl __strnlen_user_asm	# %r2 = count, %r3 = src__strnlen_user_asm:	lhi	%r0,0	lr	%r1,%r3	la	%r3,0(%r3)	# clear high order bit from %r4	la	%r2,0(%r2,%r3)	# %r2 points to first byte after string	sacf	2560:	srst	%r2,%r1	jo	0b	sacf	0	jh	1f		# \0 found in string ?	ahi	%r2,1		# strnlen_user result includes the \01:	slr	%r2,%r3	br	%r142:	sacf	0	lhi	%r2,-EFAULT	br	%r14	.section __ex_table,"a"	.long	0b,2b	.previous

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -