]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - arch/mips/lib/strlen_user.S
Merge branches 'for-4.11/upstream-fixes', 'for-4.12/accutouch', 'for-4.12/cp2112...
[mirror_ubuntu-artful-kernel.git] / arch / mips / lib / strlen_user.S
CommitLineData
1da177e4
LT
1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
b1bac373
SH
6 * Copyright (C) 1996, 1998, 1999, 2004 by Ralf Baechle
7 * Copyright (C) 1999 Silicon Graphics, Inc.
8 * Copyright (C) 2011 MIPS Technologies, Inc.
1da177e4
LT
9 */
10#include <asm/asm.h>
048eb582 11#include <asm/asm-offsets.h>
d6cb6715 12#include <asm/export.h>
1da177e4
LT
13#include <asm/regdef.h>
14
15#define EX(insn,reg,addr,handler) \
169: insn reg, addr; \
17 .section __ex_table,"a"; \
18 PTR 9b, handler; \
19 .previous
20
21/*
22 * Return the size of a string (including the ending 0)
23 *
24 * Return 0 for error
25 */
5cc49497
MC
26 .macro __BUILD_STRLEN_ASM func
27LEAF(__strlen_\func\()_asm)
1da177e4
LT
28 LONG_L v0, TI_ADDR_LIMIT($28) # pointer ok?
29 and v0, a0
5cc49497 30 bnez v0, .Lfault\@
1da177e4 31
1da177e4 32 move v0, a0
05397054 33.ifeqs "\func", "kernel"
5cc49497 341: EX(lbu, v1, (v0), .Lfault\@)
05397054
MC
35.else
361: EX(lbue, v1, (v0), .Lfault\@)
37.endif
1da177e4 38 PTR_ADDIU v0, 1
b1bac373 39 bnez v1, 1b
1da177e4
LT
40 PTR_SUBU v0, a0
41 jr ra
5cc49497 42 END(__strlen_\func\()_asm)
1da177e4 43
5cc49497 44.Lfault\@: move v0, zero
1da177e4 45 jr ra
5cc49497
MC
46 .endm
47
05397054
MC
48#ifndef CONFIG_EVA
49 /* Set aliases */
50 .global __strlen_user_asm
05397054 51 .set __strlen_user_asm, __strlen_kernel_asm
b668970e 52EXPORT_SYMBOL(__strlen_user_asm)
05397054
MC
53#endif
54
55__BUILD_STRLEN_ASM kernel
b668970e 56EXPORT_SYMBOL(__strlen_kernel_asm)
05397054
MC
57
58#ifdef CONFIG_EVA
59
60 .set push
61 .set eva
5cc49497 62__BUILD_STRLEN_ASM user
05397054 63 .set pop
b668970e 64EXPORT_SYMBOL(__strlen_user_asm)
05397054 65#endif