powerpc: Fix string library functions
The powerpc strncmp implementation does not correctly handle a zero
length, despite the claim in 0119536cd3
(Add hand-coded assembly strcmp).
Additionally, all the length arguments are size_t, not int, so use
PPC_LCMPI and eq instead of cmpwi and le throughout.
Signed-off-by: Andreas Schwab <schwab@linux-m68k.org>
Acked-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
7358650e9e
commit
ca5d0674c3
@ -28,7 +28,7 @@ _GLOBAL(strcpy)
|
||||
/* This clears out any unused part of the destination buffer,
|
||||
just as the libc version does. -- paulus */
|
||||
_GLOBAL(strncpy)
|
||||
cmpwi 0,r5,0
|
||||
PPC_LCMPI 0,r5,0
|
||||
beqlr
|
||||
mtctr r5
|
||||
addi r6,r3,-1
|
||||
@ -39,7 +39,7 @@ _GLOBAL(strncpy)
|
||||
bdnzf 2,1b /* dec ctr, branch if ctr != 0 && !cr0.eq */
|
||||
bnelr /* if we didn't hit a null char, we're done */
|
||||
mfctr r5
|
||||
cmpwi 0,r5,0 /* any space left in destination buffer? */
|
||||
PPC_LCMPI 0,r5,0 /* any space left in destination buffer? */
|
||||
beqlr /* we know r0 == 0 here */
|
||||
2: stbu r0,1(r6) /* clear it out if so */
|
||||
bdnz 2b
|
||||
@ -70,8 +70,8 @@ _GLOBAL(strcmp)
|
||||
blr
|
||||
|
||||
_GLOBAL(strncmp)
|
||||
PPC_LCMPI r5,0
|
||||
ble- 2f
|
||||
PPC_LCMPI 0,r5,0
|
||||
beq- 2f
|
||||
mtctr r5
|
||||
addi r5,r3,-1
|
||||
addi r4,r4,-1
|
||||
@ -94,8 +94,8 @@ _GLOBAL(strlen)
|
||||
blr
|
||||
|
||||
_GLOBAL(memcmp)
|
||||
cmpwi 0,r5,0
|
||||
ble- 2f
|
||||
PPC_LCMPI 0,r5,0
|
||||
beq- 2f
|
||||
mtctr r5
|
||||
addi r6,r3,-1
|
||||
addi r4,r4,-1
|
||||
@ -108,8 +108,8 @@ _GLOBAL(memcmp)
|
||||
blr
|
||||
|
||||
_GLOBAL(memchr)
|
||||
cmpwi 0,r5,0
|
||||
ble- 2f
|
||||
PPC_LCMPI 0,r5,0
|
||||
beq- 2f
|
||||
mtctr r5
|
||||
addi r3,r3,-1
|
||||
1: lbzu r0,1(r3)
|
||||
|
Loading…
Reference in New Issue
Block a user