177c93b2f2388b974253af4149aa025b4751f92adGuanXuetao/* 277c93b2f2388b974253af4149aa025b4751f92adGuanXuetao * linux/arch/unicore32/lib/strncpy_from_user.S 377c93b2f2388b974253af4149aa025b4751f92adGuanXuetao * 477c93b2f2388b974253af4149aa025b4751f92adGuanXuetao * Code specific to PKUnity SoC and UniCore ISA 577c93b2f2388b974253af4149aa025b4751f92adGuanXuetao * 677c93b2f2388b974253af4149aa025b4751f92adGuanXuetao * Copyright (C) 2001-2010 GUAN Xue-tao 777c93b2f2388b974253af4149aa025b4751f92adGuanXuetao * 877c93b2f2388b974253af4149aa025b4751f92adGuanXuetao * This program is free software; you can redistribute it and/or modify 977c93b2f2388b974253af4149aa025b4751f92adGuanXuetao * it under the terms of the GNU General Public License version 2 as 1077c93b2f2388b974253af4149aa025b4751f92adGuanXuetao * published by the Free Software Foundation. 1177c93b2f2388b974253af4149aa025b4751f92adGuanXuetao */ 1277c93b2f2388b974253af4149aa025b4751f92adGuanXuetao#include <linux/linkage.h> 1377c93b2f2388b974253af4149aa025b4751f92adGuanXuetao#include <asm/assembler.h> 1477c93b2f2388b974253af4149aa025b4751f92adGuanXuetao#include <asm/errno.h> 1577c93b2f2388b974253af4149aa025b4751f92adGuanXuetao 1677c93b2f2388b974253af4149aa025b4751f92adGuanXuetao .text 1777c93b2f2388b974253af4149aa025b4751f92adGuanXuetao .align 5 1877c93b2f2388b974253af4149aa025b4751f92adGuanXuetao 1977c93b2f2388b974253af4149aa025b4751f92adGuanXuetao/* 2077c93b2f2388b974253af4149aa025b4751f92adGuanXuetao * Copy a string from user space to kernel space. 2177c93b2f2388b974253af4149aa025b4751f92adGuanXuetao * r0 = dst, r1 = src, r2 = byte length 2277c93b2f2388b974253af4149aa025b4751f92adGuanXuetao * returns the number of characters copied (strlen of copied string), 2377c93b2f2388b974253af4149aa025b4751f92adGuanXuetao * -EFAULT on exception, or "len" if we fill the whole buffer 2477c93b2f2388b974253af4149aa025b4751f92adGuanXuetao */ 2577c93b2f2388b974253af4149aa025b4751f92adGuanXuetaoENTRY(__strncpy_from_user) 2677c93b2f2388b974253af4149aa025b4751f92adGuanXuetao mov ip, r1 2777c93b2f2388b974253af4149aa025b4751f92adGuanXuetao1: sub.a r2, r2, #1 2877c93b2f2388b974253af4149aa025b4751f92adGuanXuetao ldrusr r3, r1, 1, ns 2977c93b2f2388b974253af4149aa025b4751f92adGuanXuetao bfs 2f 3077c93b2f2388b974253af4149aa025b4751f92adGuanXuetao stb.w r3, [r0]+, #1 3177c93b2f2388b974253af4149aa025b4751f92adGuanXuetao cxor.a r3, #0 3277c93b2f2388b974253af4149aa025b4751f92adGuanXuetao bne 1b 3377c93b2f2388b974253af4149aa025b4751f92adGuanXuetao sub r1, r1, #1 @ take NUL character out of count 3477c93b2f2388b974253af4149aa025b4751f92adGuanXuetao2: sub r0, r1, ip 3577c93b2f2388b974253af4149aa025b4751f92adGuanXuetao mov pc, lr 3677c93b2f2388b974253af4149aa025b4751f92adGuanXuetaoENDPROC(__strncpy_from_user) 3777c93b2f2388b974253af4149aa025b4751f92adGuanXuetao 3877c93b2f2388b974253af4149aa025b4751f92adGuanXuetao .pushsection .fixup,"ax" 3977c93b2f2388b974253af4149aa025b4751f92adGuanXuetao .align 0 4077c93b2f2388b974253af4149aa025b4751f92adGuanXuetao9001: mov r3, #0 4177c93b2f2388b974253af4149aa025b4751f92adGuanXuetao stb r3, [r0+], #0 @ null terminate 4277c93b2f2388b974253af4149aa025b4751f92adGuanXuetao mov r0, #-EFAULT 4377c93b2f2388b974253af4149aa025b4751f92adGuanXuetao mov pc, lr 4477c93b2f2388b974253af4149aa025b4751f92adGuanXuetao .popsection 4577c93b2f2388b974253af4149aa025b4751f92adGuanXuetao 46