[POWERPC] Add hand-coded assembly strcmp
We have an assembly version of strncmp for the bootwrapper, but not for the kernel, so we end up using the C version in the kernel. This takes the strncmp code from the bootup and copies it to the kernel proper, adding two instructions so it copes correctly with len==0. Signed-off-by: Steven Rostedt <srostedt@redhat.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
parent
4df4441e41
commit
0119536cd3
3 changed files with 17 additions and 0 deletions
|
@ -78,6 +78,7 @@ EXPORT_SYMBOL(strncpy);
|
||||||
EXPORT_SYMBOL(strcat);
|
EXPORT_SYMBOL(strcat);
|
||||||
EXPORT_SYMBOL(strlen);
|
EXPORT_SYMBOL(strlen);
|
||||||
EXPORT_SYMBOL(strcmp);
|
EXPORT_SYMBOL(strcmp);
|
||||||
|
EXPORT_SYMBOL(strncmp);
|
||||||
|
|
||||||
EXPORT_SYMBOL(csum_partial);
|
EXPORT_SYMBOL(csum_partial);
|
||||||
EXPORT_SYMBOL(csum_partial_copy_generic);
|
EXPORT_SYMBOL(csum_partial_copy_generic);
|
||||||
|
|
|
@ -75,6 +75,20 @@ _GLOBAL(strcmp)
|
||||||
beq 1b
|
beq 1b
|
||||||
blr
|
blr
|
||||||
|
|
||||||
|
_GLOBAL(strncmp)
|
||||||
|
PPC_LCMPI r5,0
|
||||||
|
beqlr
|
||||||
|
mtctr r5
|
||||||
|
addi r5,r3,-1
|
||||||
|
addi r4,r4,-1
|
||||||
|
1: lbzu r3,1(r5)
|
||||||
|
cmpwi 1,r3,0
|
||||||
|
lbzu r0,1(r4)
|
||||||
|
subf. r3,r0,r3
|
||||||
|
beqlr 1
|
||||||
|
bdnzt eq,1b
|
||||||
|
blr
|
||||||
|
|
||||||
_GLOBAL(strlen)
|
_GLOBAL(strlen)
|
||||||
addi r4,r3,-1
|
addi r4,r3,-1
|
||||||
1: lbzu r0,1(r4)
|
1: lbzu r0,1(r4)
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#define __HAVE_ARCH_STRNCPY
|
#define __HAVE_ARCH_STRNCPY
|
||||||
#define __HAVE_ARCH_STRLEN
|
#define __HAVE_ARCH_STRLEN
|
||||||
#define __HAVE_ARCH_STRCMP
|
#define __HAVE_ARCH_STRCMP
|
||||||
|
#define __HAVE_ARCH_STRNCMP
|
||||||
#define __HAVE_ARCH_STRCAT
|
#define __HAVE_ARCH_STRCAT
|
||||||
#define __HAVE_ARCH_MEMSET
|
#define __HAVE_ARCH_MEMSET
|
||||||
#define __HAVE_ARCH_MEMCPY
|
#define __HAVE_ARCH_MEMCPY
|
||||||
|
@ -18,6 +19,7 @@ extern char * strcpy(char *,const char *);
|
||||||
extern char * strncpy(char *,const char *, __kernel_size_t);
|
extern char * strncpy(char *,const char *, __kernel_size_t);
|
||||||
extern __kernel_size_t strlen(const char *);
|
extern __kernel_size_t strlen(const char *);
|
||||||
extern int strcmp(const char *,const char *);
|
extern int strcmp(const char *,const char *);
|
||||||
|
extern int strncmp(const char *, const char *, __kernel_size_t);
|
||||||
extern char * strcat(char *, const char *);
|
extern char * strcat(char *, const char *);
|
||||||
extern void * memset(void *,int,__kernel_size_t);
|
extern void * memset(void *,int,__kernel_size_t);
|
||||||
extern void * memcpy(void *,const void *,__kernel_size_t);
|
extern void * memcpy(void *,const void *,__kernel_size_t);
|
||||||
|
|
Loading…
Add table
Reference in a new issue