aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/i386/i586/strchr.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/i386/i586/strchr.S')
-rw-r--r--sysdeps/i386/i586/strchr.S16
1 files changed, 10 insertions, 6 deletions
diff --git a/sysdeps/i386/i586/strchr.S b/sysdeps/i386/i586/strchr.S
index bf351f605e..bff1b8a84a 100644
--- a/sysdeps/i386/i586/strchr.S
+++ b/sysdeps/i386/i586/strchr.S
@@ -21,6 +21,7 @@
#include <sysdep.h>
#include "asm-syntax.h"
+#include "bp-sym.h"
#include "bp-asm.h"
/* This version is especially optimized for the i586 (and following?)
@@ -42,7 +43,7 @@
#define CHR STR+PTR_SIZE
.text
-ENTRY (strchr)
+ENTRY (BP_SYM (strchr))
ENTER
pushl %edi /* Save callee-safe registers. */
@@ -53,6 +54,7 @@ ENTRY (strchr)
movl STR(%esp), %eax
movl CHR(%esp), %edx
+ CHECK_BOUNDS_LOW (%eax, STR(%esp))
movl %eax, %edi /* duplicate string pointer for later */
xorl %ecx, %ecx /* clear %ecx */
@@ -279,7 +281,9 @@ L(5): subl $4, %eax /* adjust pointer */
incl %eax /* increment pointer */
-L(2): popl %ebp /* restore saved registers */
+L(2): CHECK_BOUNDS_HIGH (%eax, STR(%esp), jb)
+ RETURN_BOUNDED_POINTER (STR(%esp))
+ popl %ebp /* restore saved registers */
popl %ebx
popl %esi
@@ -321,8 +325,8 @@ L(4): subl $4, %eax /* adjust pointer */
cmpb %dl, %ch /* fourth byte == C? */
je L(2) /* yes => return pointer */
-L(3): xorl %eax, %eax /* set return value = NULL */
-
+L(3): xorl %eax, %eax
+ RETURN_NULL_BOUNDED_POINTER
popl %ebp /* restore saved registers */
popl %ebx
@@ -331,7 +335,7 @@ L(3): xorl %eax, %eax /* set return value = NULL */
LEAVE
RET_PTR
-END (strchr)
+END (BP_SYM (strchr))
#undef index
-weak_alias (strchr, index)
+weak_alias (BP_SYM (strchr), BP_SYM (index))