about summary refs log tree commit diff
path: root/sysdeps/powerpc/strcmp.S
diff options
context:
space:
mode:
authorGreg McGary <greg@mcgary.org>2000-06-30 21:35:52 +0000
committerGreg McGary <greg@mcgary.org>2000-06-30 21:35:52 +0000
commitfa87f4037711e92c52965e87a83c60f270292dc0 (patch)
treedd90b952e4f46f3fa4d1b36a51a05a03a960d422 /sysdeps/powerpc/strcmp.S
parentdbda6079a64a9dbc6dfb24280af01e871e6f7de5 (diff)
downloadglibc-fa87f4037711e92c52965e87a83c60f270292dc0.tar.gz
glibc-fa87f4037711e92c52965e87a83c60f270292dc0.tar.xz
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.S21
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))