Blame view
arch/arm/lib/getuser.S
1.59 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
/* * linux/arch/arm/lib/getuser.S * * Copyright (C) 2001 Russell King * * 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. * * Idea from x86 version, (C) Copyright 1998 Linus Torvalds * * These functions have a non-standard call interface to make them more * efficient, especially as they return an error value in addition to * the "real" return value. * * __get_user_X * * Inputs: r0 contains the address * Outputs: r0 is the error code * r2, r3 contains the zero-extended value * lr corrupted * |
4baa99224 [ARM] move includ... |
23 |
* No other registers must be altered. (see <asm/uaccess.h> |
1da177e4c Linux-2.6.12-rc2 |
24 25 26 27 28 |
* for specific ASM register usage). * * Note that ADDR_LIMIT is either 0 or 0xc0000000. * Note also that it is intended that __get_user_bad is not global. */ |
93ed39701 [ARM] 5227/1: Add... |
29 |
#include <linux/linkage.h> |
1da177e4c Linux-2.6.12-rc2 |
30 |
#include <asm/errno.h> |
247055aa2 ARM: 6384/1: Remo... |
31 |
#include <asm/domain.h> |
1da177e4c Linux-2.6.12-rc2 |
32 |
|
93ed39701 [ARM] 5227/1: Add... |
33 |
ENTRY(__get_user_1) |
247055aa2 ARM: 6384/1: Remo... |
34 |
1: T(ldrb) r2, [r0] |
1da177e4c Linux-2.6.12-rc2 |
35 36 |
mov r0, #0 mov pc, lr |
93ed39701 [ARM] 5227/1: Add... |
37 |
ENDPROC(__get_user_1) |
1da177e4c Linux-2.6.12-rc2 |
38 |
|
93ed39701 [ARM] 5227/1: Add... |
39 |
ENTRY(__get_user_2) |
8b592783a Thumb-2: Implemen... |
40 |
#ifdef CONFIG_THUMB2_KERNEL |
247055aa2 ARM: 6384/1: Remo... |
41 42 |
2: T(ldrb) r2, [r0] 3: T(ldrb) r3, [r0, #1] |
8b592783a Thumb-2: Implemen... |
43 |
#else |
247055aa2 ARM: 6384/1: Remo... |
44 45 |
2: T(ldrb) r2, [r0], #1 3: T(ldrb) r3, [r0] |
8b592783a Thumb-2: Implemen... |
46 |
#endif |
1da177e4c Linux-2.6.12-rc2 |
47 48 49 50 51 52 53 |
#ifndef __ARMEB__ orr r2, r2, r3, lsl #8 #else orr r2, r3, r2, lsl #8 #endif mov r0, #0 mov pc, lr |
93ed39701 [ARM] 5227/1: Add... |
54 |
ENDPROC(__get_user_2) |
1da177e4c Linux-2.6.12-rc2 |
55 |
|
93ed39701 [ARM] 5227/1: Add... |
56 |
ENTRY(__get_user_4) |
247055aa2 ARM: 6384/1: Remo... |
57 |
4: T(ldr) r2, [r0] |
1da177e4c Linux-2.6.12-rc2 |
58 59 |
mov r0, #0 mov pc, lr |
93ed39701 [ARM] 5227/1: Add... |
60 |
ENDPROC(__get_user_4) |
1da177e4c Linux-2.6.12-rc2 |
61 |
|
1da177e4c Linux-2.6.12-rc2 |
62 63 64 65 |
__get_user_bad: mov r2, #0 mov r0, #-EFAULT mov pc, lr |
93ed39701 [ARM] 5227/1: Add... |
66 |
ENDPROC(__get_user_bad) |
1da177e4c Linux-2.6.12-rc2 |
67 |
|
4260415f6 ARM: fix build er... |
68 |
.pushsection __ex_table, "a" |
1da177e4c Linux-2.6.12-rc2 |
69 70 71 72 |
.long 1b, __get_user_bad .long 2b, __get_user_bad .long 3b, __get_user_bad .long 4b, __get_user_bad |
4260415f6 ARM: fix build er... |
73 |
.popsection |