putuser.S (b74b953b998bcc2db91b694446f3a2619ec32de6) putuser.S (247055aa21ffef1c49dd64710d5e94c2aee19b58)
1/*
2 * linux/arch/arm/lib/putuser.S
3 *
4 * Copyright (C) 2001 Russell King
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.

--- 14 unchanged lines hidden (view full) ---

23 * No other registers must be altered. (see <asm/uaccess.h>
24 * for specific ASM register usage).
25 *
26 * Note that ADDR_LIMIT is either 0 or 0xc0000000
27 * Note also that it is intended that __put_user_bad is not global.
28 */
29#include <linux/linkage.h>
30#include <asm/errno.h>
1/*
2 * linux/arch/arm/lib/putuser.S
3 *
4 * Copyright (C) 2001 Russell King
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.

--- 14 unchanged lines hidden (view full) ---

23 * No other registers must be altered. (see <asm/uaccess.h>
24 * for specific ASM register usage).
25 *
26 * Note that ADDR_LIMIT is either 0 or 0xc0000000
27 * Note also that it is intended that __put_user_bad is not global.
28 */
29#include <linux/linkage.h>
30#include <asm/errno.h>
31#include <asm/domain.h>
31
32ENTRY(__put_user_1)
32
33ENTRY(__put_user_1)
331: strbt r2, [r0]
341: T(strb) r2, [r0]
34 mov r0, #0
35 mov pc, lr
36ENDPROC(__put_user_1)
37
38ENTRY(__put_user_2)
39 mov ip, r2, lsr #8
40#ifdef CONFIG_THUMB2_KERNEL
41#ifndef __ARMEB__
35 mov r0, #0
36 mov pc, lr
37ENDPROC(__put_user_1)
38
39ENTRY(__put_user_2)
40 mov ip, r2, lsr #8
41#ifdef CONFIG_THUMB2_KERNEL
42#ifndef __ARMEB__
422: strbt r2, [r0]
433: strbt ip, [r0, #1]
432: T(strb) r2, [r0]
443: T(strb) ip, [r0, #1]
44#else
45#else
452: strbt ip, [r0]
463: strbt r2, [r0, #1]
462: T(strb) ip, [r0]
473: T(strb) r2, [r0, #1]
47#endif
48#else /* !CONFIG_THUMB2_KERNEL */
49#ifndef __ARMEB__
48#endif
49#else /* !CONFIG_THUMB2_KERNEL */
50#ifndef __ARMEB__
502: strbt r2, [r0], #1
513: strbt ip, [r0]
512: T(strb) r2, [r0], #1
523: T(strb) ip, [r0]
52#else
53#else
532: strbt ip, [r0], #1
543: strbt r2, [r0]
542: T(strb) ip, [r0], #1
553: T(strb) r2, [r0]
55#endif
56#endif /* CONFIG_THUMB2_KERNEL */
57 mov r0, #0
58 mov pc, lr
59ENDPROC(__put_user_2)
60
61ENTRY(__put_user_4)
56#endif
57#endif /* CONFIG_THUMB2_KERNEL */
58 mov r0, #0
59 mov pc, lr
60ENDPROC(__put_user_2)
61
62ENTRY(__put_user_4)
624: strt r2, [r0]
634: T(str) r2, [r0]
63 mov r0, #0
64 mov pc, lr
65ENDPROC(__put_user_4)
66
67ENTRY(__put_user_8)
68#ifdef CONFIG_THUMB2_KERNEL
64 mov r0, #0
65 mov pc, lr
66ENDPROC(__put_user_4)
67
68ENTRY(__put_user_8)
69#ifdef CONFIG_THUMB2_KERNEL
695: strt r2, [r0]
706: strt r3, [r0, #4]
705: T(str) r2, [r0]
716: T(str) r3, [r0, #4]
71#else
72#else
725: strt r2, [r0], #4
736: strt r3, [r0]
735: T(str) r2, [r0], #4
746: T(str) r3, [r0]
74#endif
75 mov r0, #0
76 mov pc, lr
77ENDPROC(__put_user_8)
78
79__put_user_bad:
80 mov r0, #-EFAULT
81 mov pc, lr
82ENDPROC(__put_user_bad)
83
84.pushsection __ex_table, "a"
85 .long 1b, __put_user_bad
86 .long 2b, __put_user_bad
87 .long 3b, __put_user_bad
88 .long 4b, __put_user_bad
89 .long 5b, __put_user_bad
90 .long 6b, __put_user_bad
91.popsection
75#endif
76 mov r0, #0
77 mov pc, lr
78ENDPROC(__put_user_8)
79
80__put_user_bad:
81 mov r0, #-EFAULT
82 mov pc, lr
83ENDPROC(__put_user_bad)
84
85.pushsection __ex_table, "a"
86 .long 1b, __put_user_bad
87 .long 2b, __put_user_bad
88 .long 3b, __put_user_bad
89 .long 4b, __put_user_bad
90 .long 5b, __put_user_bad
91 .long 6b, __put_user_bad
92.popsection