aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@redhat.com>2011-08-04 14:59:25 -0400
committerAndreas Schwab <schwab@redhat.com>2011-08-05 10:00:57 +0200
commit8cb4ac4610e7b7c17a0e7350f92ea0d4bc06b019 (patch)
tree5022317c6cd9cecca8178bbd3e5abb70279af1d8
parentfcbeae78e427e902e85df3a0f5952b15d767035f (diff)
downloadglibc-8cb4ac4610e7b7c17a0e7350f92ea0d4bc06b019.zip
glibc-8cb4ac4610e7b7c17a0e7350f92ea0d4bc06b019.tar.gz
glibc-8cb4ac4610e7b7c17a0e7350f92ea0d4bc06b019.tar.bz2
Fix inline strncat/strncmp on x86
(cherry picked from commit 8c1a459f9a64abee69c154c8a0e5ab9be86256e4)
-rw-r--r--ChangeLog6
-rw-r--r--sysdeps/i386/i486/bits/string.h16
2 files changed, 14 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 1c034b6..2f63794 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2011-07-25 Andreas Schwab <schwab@redhat.com>
+
+ * sysdeps/i386/i486/bits/string.h (__strncat_g): Correctly handle
+ __n bigger than INT_MAX+1.
+ (__strncmp_g): Likewise.
+
2011-07-23 Ulrich Drepper <drepper@gmail.com>
* sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): Fix one more
diff --git a/sysdeps/i386/i486/bits/string.h b/sysdeps/i386/i486/bits/string.h
index 9f05c7e..4f8c104 100644
--- a/sysdeps/i386/i486/bits/string.h
+++ b/sysdeps/i386/i486/bits/string.h
@@ -1,6 +1,6 @@
/* Optimized, inlined string functions. i486 version.
- Copyright (C) 1997,1998,1999,2000,2001,2002,2003,2004,2007
- Free Software Foundation, Inc.
+ Copyright (C) 1997,1998,1999,2000,2001,2002,2003,2004,2007,2011
+ Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -1058,8 +1058,8 @@ __strncat_g (char *__dest, __const char __src[], size_t __n)
"movl %4, %3\n\t"
"decl %1\n\t"
"1:\n\t"
- "decl %3\n\t"
- "js 2f\n\t"
+ "subl $1,%3\n\t"
+ "jc 2f\n\t"
"movb (%2),%b0\n\t"
"movsb\n\t"
"testb %b0,%b0\n\t"
@@ -1078,8 +1078,8 @@ __strncat_g (char *__dest, __const char __src[], size_t __n)
"leal 1(%1),%1\n\t"
"jne 1b\n"
"2:\n\t"
- "decl %3\n\t"
- "js 3f\n\t"
+ "subl $1,%3\n\t"
+ "jc 3f\n\t"
"movb (%2),%b0\n\t"
"leal 1(%2),%2\n\t"
"movb %b0,(%1)\n\t"
@@ -1219,8 +1219,8 @@ __strncmp_g (__const char *__s1, __const char *__s2, size_t __n)
register int __res;
__asm__ __volatile__
("1:\n\t"
- "decl %3\n\t"
- "js 2f\n\t"
+ "subl $1,%3\n\t"
+ "jc 2f\n\t"
"movb (%1),%b0\n\t"
"incl %1\n\t"
"cmpb %b0,(%2)\n\t"