about summary refs log tree commit diff
path: root/sysdeps/i386/i686
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/i386/i686')
-rw-r--r--sysdeps/i386/i686/add_n.S13
-rw-r--r--sysdeps/i386/i686/bzero.S2
-rw-r--r--sysdeps/i386/i686/memcpy.S9
-rw-r--r--sysdeps/i386/i686/mempcpy.S10
-rw-r--r--sysdeps/i386/i686/memset.S9
-rw-r--r--sysdeps/i386/i686/strcmp.S19
-rw-r--r--sysdeps/i386/i686/strtok.S17
-rw-r--r--sysdeps/i386/i686/strtok_r.S2
8 files changed, 60 insertions, 21 deletions
diff --git a/sysdeps/i386/i686/add_n.S b/sysdeps/i386/i686/add_n.S
index 45e1284b1b..0b0684f931 100644
--- a/sysdeps/i386/i686/add_n.S
+++ b/sysdeps/i386/i686/add_n.S
@@ -20,6 +20,7 @@
 
 #include "sysdep.h"
 #include "asm-syntax.h"
+#include "bp-sym.h"
 #include "bp-asm.h"
 
 #define PARMS	LINKAGE+8		/* space for 2 saved regs */
@@ -33,7 +34,7 @@
 L(1):	addl    (%esp), %eax
 	ret
 #endif
-ENTRY(__mpn_add_n)
+ENTRY (BP_SYM (__mpn_add_n))
 	ENTER
 
 	pushl %edi
@@ -43,7 +44,13 @@ ENTRY(__mpn_add_n)
 	movl	S1(%esp),%esi
 	movl	S2(%esp),%edx
 	movl	SIZE(%esp),%ecx
-
+#if __BOUNDED_POINTERS__
+	shll	$2, %ecx	/* convert limbs to bytes */
+	CHECK_BOUNDS_BOTH_WIDE (%edi, RES(%esp), %ecx)
+	CHECK_BOUNDS_BOTH_WIDE (%esi, S1(%esp), %ecx)
+	CHECK_BOUNDS_BOTH_WIDE (%edx, S2(%esp), %ecx)
+	shrl	$2, %ecx
+#endif
 	movl	%ecx,%eax
 	shrl	$3,%ecx			/* compute count for unrolled loop */
 	negl	%eax
@@ -104,4 +111,4 @@ L(oop):	movl	(%esi),%eax
 
 	LEAVE
 	ret
-END(__mpn_add_n)
+END (BP_SYM (__mpn_add_n))
diff --git a/sysdeps/i386/i686/bzero.S b/sysdeps/i386/i686/bzero.S
index 34b0faa91b..c1e4a6d50e 100644
--- a/sysdeps/i386/i686/bzero.S
+++ b/sysdeps/i386/i686/bzero.S
@@ -1,3 +1,3 @@
 #define memset __bzero
 #include <sysdeps/i386/i686/memset.S>
-weak_alias (__bzero, bzero)
+weak_alias (BP_SYM (__bzero), BP_SYM (bzero))
diff --git a/sysdeps/i386/i686/memcpy.S b/sysdeps/i386/i686/memcpy.S
index 8e8cc41fbc..cf836f438f 100644
--- a/sysdeps/i386/i686/memcpy.S
+++ b/sysdeps/i386/i686/memcpy.S
@@ -21,6 +21,7 @@
 
 #include <sysdep.h>
 #include "asm-syntax.h"
+#include "bp-sym.h"
 #include "bp-asm.h"
 
 #define PARMS	LINKAGE		/* no space for saved regs */
@@ -30,7 +31,7 @@
 #define LEN	SRC+PTR_SIZE
 
 	.text
-ENTRY(memcpy)
+ENTRY (BP_SYM (memcpy))
 	ENTER
 
 	movl	LEN(%esp), %ecx
@@ -38,6 +39,9 @@ ENTRY(memcpy)
 	movl	DEST(%esp), %edi
 	movl	%esi, %edx
 	movl	SRC(%esp), %esi
+	CHECK_BOUNDS_BOTH_WIDE (%edi, DEST(%esp), %ecx)
+	CHECK_BOUNDS_BOTH_WIDE (%esi, SRC(%esp), %ecx)
+
 	cld
 	shrl	$1, %ecx
 	jnc	1f
@@ -50,7 +54,8 @@ ENTRY(memcpy)
 	movl	%eax, %edi
 	movl	%edx, %esi
 	movl	DEST(%esp), %eax
+	RETURN_BOUNDED_POINTER (DEST(%esp))
 
 	LEAVE
 	RET_PTR
-END(memcpy)
+END (BP_SYM (memcpy))
diff --git a/sysdeps/i386/i686/mempcpy.S b/sysdeps/i386/i686/mempcpy.S
index c851d06d44..685c599742 100644
--- a/sysdeps/i386/i686/mempcpy.S
+++ b/sysdeps/i386/i686/mempcpy.S
@@ -21,6 +21,7 @@
 
 #include <sysdep.h>
 #include "asm-syntax.h"
+#include "bp-sym.h"
 #include "bp-asm.h"
 
 #define PARMS	LINKAGE		/* no space for saved regs */
@@ -30,14 +31,16 @@
 #define LEN	SRC+PTR_SIZE
 
 	.text
-ENTRY(__mempcpy)
+ENTRY (BP_SYM (__mempcpy))
 	ENTER
 
 	movl	LEN(%esp), %ecx
 	movl	%edi, %eax
 	movl	DEST(%esp), %edi
+	CHECK_BOUNDS_BOTH_WIDE (%edi, DEST(%esp), %ecx)
 	movl	%esi, %edx
 	movl	SRC(%esp), %esi
+	CHECK_BOUNDS_BOTH_WIDE (%esi, SRC(%esp), %ecx)
 	cld
 	shrl	$1, %ecx
 	jnc	1f
@@ -49,8 +52,9 @@ ENTRY(__mempcpy)
 	movsl
 	xchgl	%edi, %eax
 	movl	%edx, %esi
+	RETURN_BOUNDED_POINTER (DEST(%esp))
 
 	LEAVE
 	RET_PTR
-END(__mempcpy)
-weak_alias (__mempcpy, mempcpy)
+END (BP_SYM (__mempcpy))
+weak_alias (BP_SYM (__mempcpy), BP_SYM (mempcpy))
diff --git a/sysdeps/i386/i686/memset.S b/sysdeps/i386/i686/memset.S
index 74ce87bfc7..98ba39d3d0 100644
--- a/sysdeps/i386/i686/memset.S
+++ b/sysdeps/i386/i686/memset.S
@@ -21,6 +21,7 @@
 
 #include <sysdep.h>
 #include "asm-syntax.h"
+#include "bp-sym.h"
 #include "bp-asm.h"
 
 /* BEWARE: `#ifdef memset' means that memset is redefined as `bzero' */
@@ -38,13 +39,14 @@
 #endif
 
         .text
-ENTRY (memset)
+ENTRY (BP_SYM (memset))
 	ENTER
 
 	cld
 	pushl	%edi
 	movl	DEST(%esp), %edx
 	movl	LEN(%esp), %ecx
+	CHECK_BOUNDS_BOTH_WIDE (%edx, DEST(%esp), %ecx)
 #if BZERO_P
 	xorl	%eax, %eax	/* fill with 0 */
 #else
@@ -79,7 +81,8 @@ ENTRY (memset)
 
 1:
 #if !BZERO_P
-	movl	DEST(%esp), %eax
+	movl DEST(%esp), %eax	/* start address of destination is result */
+	RETURN_BOUNDED_POINTER (DEST(%esp))
 #endif
 	popl	%edi
 
@@ -89,4 +92,4 @@ ENTRY (memset)
 #else
 	RET_PTR
 #endif
-END (memset)
+END (BP_SYM (memset))
diff --git a/sysdeps/i386/i686/strcmp.S b/sysdeps/i386/i686/strcmp.S
index efda8515aa..b353db7e9d 100644
--- a/sysdeps/i386/i686/strcmp.S
+++ b/sysdeps/i386/i686/strcmp.S
@@ -20,6 +20,7 @@
 
 #include <sysdep.h>
 #include "asm-syntax.h"
+#include "bp-sym.h"
 #include "bp-asm.h"
 
 #define PARMS	LINKAGE		/* no space for saved regs */
@@ -27,27 +28,37 @@
 #define STR2	STR1+PTR_SIZE
 
         .text
-ENTRY (strcmp)
+ENTRY (BP_SYM (strcmp))
 	ENTER
 
 	movl	STR1(%esp), %ecx
 	movl	STR2(%esp), %edx
+	CHECK_BOUNDS_LOW (%ecx, STR1(%esp))
+	CHECK_BOUNDS_LOW (%edx, STR2(%esp))
 
 L(oop):	movb	(%ecx), %al
-	incl	%ecx
 	cmpb	(%edx), %al
 	jne	L(neq)
+	incl	%ecx
 	incl	%edx
 	testb	%al, %al
 	jnz	L(oop)
 
 	xorl	%eax, %eax
+	/* when strings are equal, pointers rest one beyond
+	   the end of the NUL terminators.  */
+	CHECK_BOUNDS_HIGH (%ecx, STR1(%esp), jbe)
+	CHECK_BOUNDS_HIGH (%edx, STR2(%esp), jbe)
 	jmp	L(out)
 
 L(neq):	movl	$1, %eax
-	ja	L(out)
+	ja	L(chk)
 	negl	%eax
+	/* When strings differ, pointers rest on
+	   the unequal characters.  */
+L(chk):	CHECK_BOUNDS_HIGH (%ecx, STR1(%esp), jb)
+	CHECK_BOUNDS_HIGH (%edx, STR2(%esp), jb)
 
 L(out):	LEAVE
 	ret
-END (strcmp)
+END (BP_SYM (strcmp))
diff --git a/sysdeps/i386/i686/strtok.S b/sysdeps/i386/i686/strtok.S
index 18aa7c8c7b..96b3b5dc33 100644
--- a/sysdeps/i386/i686/strtok.S
+++ b/sysdeps/i386/i686/strtok.S
@@ -1,6 +1,6 @@
 /* strtok (str, delim) -- Return next DELIM separated token from STR.
    For Intel 80686.
-   Copyright (C) 1998 Free Software Foundation, Inc.
+   Copyright (C) 1998, 2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -21,6 +21,8 @@
 
 #include <sysdep.h>
 #include "asm-syntax.h"
+#include "bp-sym.h"
+#include "bp-asm.h"
 
 /* This file can be used for three variants of the strtok function:
 
@@ -45,7 +47,7 @@
 save_ptr:
 	.space 4
 
-#define FUNCTION strtok
+#define FUNCTION BP_SYM (strtok)
 #endif
 
 	.text
@@ -55,7 +57,14 @@ save_ptr:
 	ret
 #endif
 
-ENTRY (FUNCTION)
+#define PARMS	LINKAGE		/* no space for saved regs */
+#define RTN	PARMS
+#define STR	RTN+RTN_SIZE
+#define DELIM	STR+PTR_SIZE
+#define SAVE	DELIM+PTR_SIZE
+
+ENTRY (BP_SYM (FUNCTION))
+	ENTER
 
 #if !defined USE_AS_STRTOK_R && defined PIC
 	pushl %ebx			/* Save PIC register.  */
@@ -226,4 +235,4 @@ L(return):
 L(returnNULL):
 	xorl %eax, %eax
 	jmp L(return)
-END (FUNCTION)
+END (BP_SYM (FUNCTION))
diff --git a/sysdeps/i386/i686/strtok_r.S b/sysdeps/i386/i686/strtok_r.S
index 70048db2c4..cbaeabbabe 100644
--- a/sysdeps/i386/i686/strtok_r.S
+++ b/sysdeps/i386/i686/strtok_r.S
@@ -1,4 +1,4 @@
 #define FUNCTION __strtok_r
 #define USE_AS_STRTOK_R	1
 #include <sysdeps/i386/i686/strtok.S>
-weak_alias (__strtok_r, strtok_r)
+weak_alias (BP_SYM (__strtok_r), BP_SYM (strtok_r))