diff options
author | Andreas Schwab <schwab@redhat.com> | 2011-08-04 14:59:25 -0400 |
---|---|---|
committer | Ulrich Drepper <drepper@gmail.com> | 2011-08-04 14:59:25 -0400 |
commit | 8c1a459f9a64abee69c154c8a0e5ab9be86256e4 (patch) | |
tree | bc044cba7787611928b93118f95e587e8de63a26 | |
parent | 798be72d127adf18f382323d0eed0a1e394967f8 (diff) | |
download | glibc-8c1a459f9a64abee69c154c8a0e5ab9be86256e4.tar.gz glibc-8c1a459f9a64abee69c154c8a0e5ab9be86256e4.tar.xz glibc-8c1a459f9a64abee69c154c8a0e5ab9be86256e4.zip |
Fix inline strncat/strncmp on x86
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | sysdeps/i386/i486/bits/string.h | 16 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/strlen.S | 2 |
3 files changed, 15 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog index 80b7d7ca09..aaa6f8b81c 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> * posix/unistd.h: Define SEEK_DATA and SEEK_HOLE. diff --git a/sysdeps/i386/i486/bits/string.h b/sysdeps/i386/i486/bits/string.h index 9f05c7e655..4f8c104fee 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" diff --git a/sysdeps/x86_64/multiarch/strlen.S b/sysdeps/x86_64/multiarch/strlen.S index d78970742f..43e2100f41 100644 --- a/sysdeps/x86_64/multiarch/strlen.S +++ b/sysdeps/x86_64/multiarch/strlen.S @@ -1,5 +1,5 @@ /* strlen(str) -- determine the length of the string STR. - Copyright (C) 2009, 2010 Free Software Foundation, Inc. + Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc. Contributed by Ulrich Drepper <drepper@redhat.com>. This file is part of the GNU C Library. |