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

📄 uaccess-armo.s

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 S
字号:
/* *  linux/arch/arm/lib/uaccess-armo.S * *  Copyright (C) 1998 Russell King * *  Note!  Some code fragments found in here have a special calling *  convention - they are not APCS compliant! * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */#include <linux/linkage.h>#include <asm/assembler.h>		.text		.globl	SYMBOL_NAME(uaccess_user)SYMBOL_NAME(uaccess_user):		.word	uaccess_user_put_byte		.word	uaccess_user_get_byte		.word	uaccess_user_put_half		.word	uaccess_user_get_half		.word	uaccess_user_put_word		.word	uaccess_user_get_word		.word	__arch_copy_from_user		.word	__arch_copy_to_user		.word	__arch_clear_user		.word	__arch_strncpy_from_user		.word	__arch_strnlen_user@ In : r0 = x, r1 = addr, r2 = error@ Out: r2 = erroruaccess_user_put_byte:		stmfd	sp!, {lr}USER(		strbt	r0, [r1])		ldmfd	sp!, {pc}^@ In : r0 = x, r1 = addr, r2 = error@ Out: r2 = erroruaccess_user_put_half:		stmfd	sp!, {lr}USER(		strbt	r0, [r1], #1)		mov	r0, r0, lsr #8USER(		strbt	r0, [r1])		ldmfd	sp!, {pc}^@ In : r0 = x, r1 = addr, r2 = error@ Out: r2 = erroruaccess_user_put_word:		stmfd	sp!, {lr}USER(		strt	r0, [r1])		ldmfd	sp!, {pc}^9001:		mov	r2, #-EFAULT		ldmfd	sp!, {pc}^@ In : r0 = addr, r1 = error@ Out: r0 = x, r1 = erroruaccess_user_get_byte:		stmfd	sp!, {lr}USER(		ldrbt	r0, [r0])		ldmfd	sp!, {pc}^@ In : r0 = addr, r1 = error@ Out: r0 = x, r1 = erroruaccess_user_get_half:		stmfd	sp!, {lr}USER(		ldrt	r0, [r0])		mov	r0, r0, lsl #16		mov	r0, r0, lsr #16		ldmfd	sp!, {pc}^@ In : r0 = addr, r1 = error@ Out: r0 = x, r1 = erroruaccess_user_get_word:		stmfd	sp!, {lr}USER(		ldrt	r0, [r0])		ldmfd	sp!, {pc}^9001:		mov	r1, #-EFAULT		ldmfd	sp!, {pc}^		.globl	SYMBOL_NAME(uaccess_kernel)SYMBOL_NAME(uaccess_kernel):		.word	uaccess_kernel_put_byte		.word	uaccess_kernel_get_byte		.word	uaccess_kernel_put_half		.word	uaccess_kernel_get_half		.word	uaccess_kernel_put_word		.word	uaccess_kernel_get_word		.word	uaccess_kernel_copy		.word	uaccess_kernel_copy		.word	uaccess_kernel_clear		.word	uaccess_kernel_strncpy_from		.word	uaccess_kernel_strlen@ In : r0 = x, r1 = addr, r2 = error@ Out: r2 = erroruaccess_kernel_put_byte:		stmfd	sp!, {lr}		strb	r0, [r1]		ldmfd	sp!, {pc}^@ In : r0 = x, r1 = addr, r2 = error@ Out: r2 = erroruaccess_kernel_put_half:		stmfd	sp!, {lr}		strb	r0, [r1]		mov	r0, r0, lsr #8		strb	r0, [r1, #1]		ldmfd	sp!, {pc}^@ In : r0 = x, r1 = addr, r2 = error@ Out: r2 = erroruaccess_kernel_put_word:		stmfd	sp!, {lr}		str	r0, [r1]		ldmfd	sp!, {pc}^@ In : r0 = addr, r1 = error@ Out: r0 = x, r1 = erroruaccess_kernel_get_byte:		stmfd	sp!, {lr}		ldrb	r0, [r0]		ldmfd	sp!, {pc}^@ In : r0 = addr, r1 = error@ Out: r0 = x, r1 = erroruaccess_kernel_get_half:		stmfd	sp!, {lr}		ldr	r0, [r0]		mov	r0, r0, lsl #16		mov	r0, r0, lsr #16		ldmfd	sp!, {pc}^@ In : r0 = addr, r1 = error@ Out: r0 = x, r1 = erroruaccess_kernel_get_word:		stmfd	sp!, {lr}		ldr	r0, [r0]		ldmfd	sp!, {pc}^/* Prototype: int uaccess_kernel_copy(void *to, const char *from, size_t n) * Purpose  : copy a block to kernel memory from kernel memory * Params   : to   - kernel memory *          : from - kernel memory *          : n    - number of bytes to copy * Returns  : Number of bytes NOT copied. */uaccess_kernel_copy:		stmfd	sp!, {lr}		bl	SYMBOL_NAME(memcpy)		mov	r0, #0		ldmfd	sp!, {pc}^/* Prototype: int uaccess_kernel_clear(void *addr, size_t sz) * Purpose  : clear some kernel memory * Params   : addr - kernel memory address to clear *          : sz   - number of bytes to clear * Returns  : number of bytes NOT cleared */uaccess_kernel_clear:		stmfd	sp!, {lr}		mov	r2, #0		cmp	r1, #4		blt	2f		ands	ip, r0, #3		beq	1f		cmp	ip, #1		strb	r2, [r0], #1		strleb	r2, [r0], #1		strltb	r2, [r0], #1		rsb	ip, ip, #4		sub	r1, r1, ip		@  7  6  5  4  3  2  11:		subs	r1, r1, #8		@ -1 -2 -3 -4 -5 -6 -7		bmi	2f		str	r2, [r0], #4		str	r2, [r0], #4		b	1b2:		adds	r1, r1, #4		@  3  2  1  0 -1 -2 -3		strpl	r2, [r0], #4		tst	r1, #2			@ 1x 1x 0x 0x 1x 1x 0x		strneb	r2, [r0], #1		strneb	r2, [r0], #1		tst	r1, #1			@ x1 x0 x1 x0 x1 x0 x1		strneb	r2, [r0], #1		mov	r0, #0		ldmfd	sp!, {pc}^/* Prototype: size_t uaccess_kernel_strncpy_from(char *dst, char *src, size_t len) * Purpose  : copy a string from kernel memory to kernel memory * Params   : dst - kernel memory destination *          : src - kernel memory source *          : len - maximum length of string * Returns  : number of characters copied */uaccess_kernel_strncpy_from:		stmfd	sp!, {lr}		mov	ip, r21:		subs	r2, r2, #1		bmi	2f		ldrb	r3, [r1], #1		strb	r3, [r0], #1		teq	r3, #0		bne	1b2:		subs	r0, ip, r2		ldmfd	sp!, {pc}^/* Prototype: int uaccess_kernel_strlen(char *str) * Purpose  : get length of a string in kernel memory * Params   : str - address of string in kernel memory * Returns  : length of string *including terminator*, or zero on error */uaccess_kernel_strlen:		stmfd	sp!, {lr}		mov	r2, r01:		ldrb	r1, [r0], #1		teq	r1, #0		bne	1b		sub	r0, r0, r2		ldmfd	sp!, {pc}^

⌨️ 快捷键说明

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