Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v2.6.13 88 lines 1.4 kB view raw
1/* 2 * __get_user functions. 3 * 4 * (C) Copyright 2001 Hirokazu Takata 5 * 6 * These functions have a non-standard call interface 7 * to make them more efficient, especially as they 8 * return an error value in addition to the "real" 9 * return value. 10 */ 11 12#include <linux/config.h> 13 14/* 15 * __get_user_X 16 * 17 * Inputs: r0 contains the address 18 * 19 * Outputs: r0 is error code (0 or -EFAULT) 20 * r1 contains zero-extended value 21 * 22 * These functions should not modify any other registers, 23 * as they get called from within inline assembly. 24 */ 25 26#ifdef CONFIG_ISA_DUAL_ISSUE 27 28 .text 29 .balign 4 30 .globl __get_user_1 31__get_user_1: 321: ldub r1, @r0 || ldi r0, #0 33 jmp r14 34 35 .balign 4 36 .globl __get_user_2 37__get_user_2: 382: lduh r1, @r0 || ldi r0, #0 39 jmp r14 40 41 .balign 4 42 .globl __get_user_4 43__get_user_4: 443: ld r1, @r0 || ldi r0, #0 45 jmp r14 46 47bad_get_user: 48 ldi r1, #0 || ldi r0, #-14 49 jmp r14 50 51#else /* not CONFIG_ISA_DUAL_ISSUE */ 52 53 .text 54 .balign 4 55 .globl __get_user_1 56__get_user_1: 571: ldub r1, @r0 58 ldi r0, #0 59 jmp r14 60 61 .balign 4 62 .globl __get_user_2 63__get_user_2: 642: lduh r1, @r0 65 ldi r0, #0 66 jmp r14 67 68 .balign 4 69 .globl __get_user_4 70__get_user_4: 713: ld r1, @r0 72 ldi r0, #0 73 jmp r14 74 75bad_get_user: 76 ldi r1, #0 77 ldi r0, #-14 78 jmp r14 79 80#endif /* not CONFIG_ISA_DUAL_ISSUE */ 81 82.section __ex_table,"a" 83 .long 1b,bad_get_user 84 .long 2b,bad_get_user 85 .long 3b,bad_get_user 86.previous 87 88 .end