diff options
author | Greg McGary <greg@mcgary.org> | 2000-06-30 21:35:52 +0000 |
---|---|---|
committer | Greg McGary <greg@mcgary.org> | 2000-06-30 21:35:52 +0000 |
commit | fa87f4037711e92c52965e87a83c60f270292dc0 (patch) | |
tree | dd90b952e4f46f3fa4d1b36a51a05a03a960d422 /sysdeps/powerpc/strcmp.S | |
parent | dbda6079a64a9dbc6dfb24280af01e871e6f7de5 (diff) | |
download | glibc-fa87f4037711e92c52965e87a83c60f270292dc0.tar glibc-fa87f4037711e92c52965e87a83c60f270292dc0.tar.gz glibc-fa87f4037711e92c52965e87a83c60f270292dc0.tar.bz2 glibc-fa87f4037711e92c52965e87a83c60f270292dc0.zip |
* sysdeps/powerpc/bp-asm.h: New file.
* sysdeps/powerpc/__longjmp.S: Check bounds.
Wrap extern symbols in BP_SYM ().
* sysdeps/powerpc/bsd-_setjmp.S: Likewise.
* sysdeps/powerpc/bsd-setjmp.S: Likewise.
* sysdeps/powerpc/setjmp.S: Likewise.
* sysdeps/powerpc/add_n.S: Likewise.
* sysdeps/powerpc/addmul_1.S: Likewise.
* sysdeps/powerpc/lshift.S: Likewise.
* sysdeps/powerpc/rshift.S: Likewise.
* sysdeps/powerpc/mul_1.S: Likewise.
* sysdeps/powerpc/sub_n.S: Likewise.
* sysdeps/powerpc/submul_1.S: Likewise.
* sysdeps/powerpc/strlen.S: Likewise.
* sysdeps/powerpc/memset.S: Likewise.
* sysdeps/powerpc/stpcpy.S: Likewise.
* sysdeps/powerpc/strcmp.S: Likewise.
* sysdeps/powerpc/strcpy.S: Likewise.
* sysdeps/powerpc/elf/bzero.S: Likewise.
* sysdeps/powerpc/bp-asm.h: New file.
* sysdeps/powerpc/__longjmp.S: Check bounds.
Wrap extern symbols in BP_SYM ().
* sysdeps/powerpc/bsd-_setjmp.S: Likewise.
* sysdeps/powerpc/bsd-setjmp.S: Likewise.
* sysdeps/powerpc/setjmp.S: Likewise.
* sysdeps/powerpc/add_n.S: Likewise.
* sysdeps/powerpc/addmul_1.S: Likewise.
* sysdeps/powerpc/lshift.S: Likewise.
* sysdeps/powerpc/rshift.S: Likewise.
* sysdeps/powerpc/mul_1.S: Likewise.
* sysdeps/powerpc/sub_n.S: Likewise.
* sysdeps/powerpc/submul_1.S: Likewise.
* sysdeps/powerpc/strlen.S: Likewise.
* sysdeps/powerpc/memset.S: Likewise.
* sysdeps/powerpc/stpcpy.S: Likewise.
* sysdeps/powerpc/strcmp.S: Likewise.
* sysdeps/powerpc/strcpy.S: Likewise.
* sysdeps/powerpc/elf/bzero.S: Likewise.
Diffstat (limited to 'sysdeps/powerpc/strcmp.S')
-rw-r--r-- | sysdeps/powerpc/strcmp.S | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/sysdeps/powerpc/strcmp.S b/sysdeps/powerpc/strcmp.S index 1accdd70cb..fb7b9f994a 100644 --- a/sysdeps/powerpc/strcmp.S +++ b/sysdeps/powerpc/strcmp.S @@ -18,24 +18,33 @@ Boston, MA 02111-1307, USA. */ #include <sysdep.h> +#include <bp-sym.h> +#include <bp-asm.h> /* See strlen.s for comments on how the end-of-string testing works. */ /* int [r3] strcmp (const char *s1 [r3], const char *s2 [r4]) */ -EALIGN (strcmp, 4, 0) +EALIGN (BP_SYM (strcmp), 4, 0) #define rTMP r0 -#define rRTN r3 /* return value */ +#define rRTN r3 #define rSTR1 r3 /* first string arg */ #define rSTR2 r4 /* second string arg */ +#if __BOUNDED_POINTERS__ +# define rHIGH1 r11 +# define rHIGH2 r12 +#endif #define rWORD1 r5 /* current word in s1 */ #define rWORD2 r6 /* current word in s2 */ #define rFEFE r7 /* constant 0xfefefeff (-0x01010101) */ -#define r7F7F r8 /* constant 0x7f7f7f7f */ +#define r7F7F r8 /* constant 0x7f7f7f7f */ #define rNEG r9 /* ~(word in s1 | 0x7f7f7f7f) */ #define rBITDIF r10 /* bits that differ in s1 & s2 words */ + CHECK_BOUNDS_LOW (rSTR1, rTMP, rHIGH1) + CHECK_BOUNDS_LOW (rSTR2, rTMP, rHIGH2) + or rTMP, rSTR2, rSTR1 clrlwi. rTMP, rTMP, 30 lis rFEFE, -0x101 @@ -74,6 +83,7 @@ L(endstring): bgelr+ cr1 L(equal): li rRTN, 0 + /* GKM FIXME: check high bounds. */ blr L(different): @@ -83,6 +93,7 @@ L(different): bgelr+ L(highbit): ori rRTN, rWORD2, 1 + /* GKM FIXME: check high bounds. */ blr @@ -106,8 +117,10 @@ L(u1): cmpwi cr1, rWORD1, 0 cmpw rWORD1, rWORD2 bne+ cr1, L(u0) L(u3): sub rRTN, rWORD1, rWORD2 + /* GKM FIXME: check high bounds. */ blr L(u4): lbz rWORD1, -1(rSTR1) sub rRTN, rWORD1, rWORD2 + /* GKM FIXME: check high bounds. */ blr -END(strcmp) +END (BP_SYM (strcmp)) |