From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32202 invoked by alias); 27 May 2004 09:26:08 -0000 Mailing-List: contact libc-hacker-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-hacker-owner@sources.redhat.com Received: (qmail 32177 invoked from network); 27 May 2004 09:26:07 -0000 Received: from unknown (HELO sunsite.ms.mff.cuni.cz) (195.113.15.26) by sourceware.org with SMTP; 27 May 2004 09:26:07 -0000 Received: from sunsite.ms.mff.cuni.cz (sunsite.mff.cuni.cz [127.0.0.1]) by sunsite.ms.mff.cuni.cz (8.12.8/8.12.8) with ESMTP id i4R7Cf3j026166; Thu, 27 May 2004 09:12:41 +0200 Received: (from jakub@localhost) by sunsite.ms.mff.cuni.cz (8.12.8/8.12.8/Submit) id i4R7Ce5G026154; Thu, 27 May 2004 09:12:40 +0200 Date: Thu, 27 May 2004 09:47:00 -0000 From: Jakub Jelinek To: Ulrich Drepper , "H. J. Lu" Cc: Glibc hackers Subject: [PATCH] changes for GCC 3.2+ and 3.4+ (followup) Message-ID: <20040527071240.GU5191@sunsite.ms.mff.cuni.cz> Reply-To: Jakub Jelinek References: <20040526124659.GT5191@sunsite.ms.mff.cuni.cz> <40B4D342.3060301@redhat.com> <20040526203623.GA3779@lucon.org> <20040527010102.GA8045@lucon.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20040527010102.GA8045@lucon.org> User-Agent: Mutt/1.4i X-SW-Source: 2004-05/txt/msg00048.txt.bz2 On Wed, May 26, 2004 at 06:01:02PM -0700, H. J. Lu wrote: > I think the patch is incomplete. You are right, sorry. I haven't built glibc with it after doing all changes, only tested whether apps using that header are ok. Further testing revealed that at least on x86_64 there was one new .plt slot, __bzero. This patch fixes that too. Build/make check tested on x86_64 and i686. 2004-05-27 Jakub Jelinek * string/bits/string2.h (__bzero): Define even for GCC 3.0+. * sysdeps/alpha/stpcpy.S (stpcpy): Add libc_hidden_builtin_def. * sysdeps/alpha/alphaev67/stpcpy.S (stpcpy): Likewise. * sysdeps/powerpc/powerpc32/stpcpy.S (stpcpy): Likewise. * sysdeps/powerpc/powerpc64/stpcpy.S (stpcpy): Likewise. * sysdeps/sparc/sparc32/stpcpy.S (stpcpy): Likewise. * sysdeps/sparc/sparc64/stpcpy.S (stpcpy): Likewise. * sysdeps/i386/stpcpy.S (stpcpy): Likewise. * sysdeps/i386/i586/stpcpy.S (stpcpy): Likewise. * sysdeps/generic/stpcpy.c (stpcpy): Likewise. * sysdeps/x86_64/stpcpy.S (stpcpy): Likewise. * sysdeps/i386/i586/memcpy.S (memcpy): Remove libc_hidden_builtin_def if MEMPCPY_P. * sysdeps/x86_64/memcpy.S (memcpy): Likewise. * sysdeps/i386/i686/mempcpy.S (mempcpy): Add libc_hidden_builtin_def. * sysdeps/i386/i586/mempcpy.S (mempcpy): Likewise. * sysdeps/generic/mempcpy.c (mempcpy): Likewise. * sysdeps/x86_64/mempcpy.S (mempcpy): Likewise. --- libc/sysdeps/alpha/alphaev67/stpcpy.S.jj 2002-08-04 03:22:10.000000000 +0200 +++ libc/sysdeps/alpha/alphaev67/stpcpy.S 2004-05-27 09:33:56.000000000 +0200 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2002 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2002, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson . @@ -51,3 +51,4 @@ ENTRY(__stpcpy) weak_alias (__stpcpy, stpcpy) libc_hidden_def (__stpcpy) +libc_hidden_builtin_def (stpcpy) --- libc/sysdeps/alpha/stpcpy.S.jj 2002-08-04 03:22:10.000000000 +0200 +++ libc/sysdeps/alpha/stpcpy.S 2004-05-27 09:25:26.000000000 +0200 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1996, 2002, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson , 1996. @@ -53,3 +53,4 @@ ENTRY(__stpcpy) weak_alias (__stpcpy, stpcpy) libc_hidden_def (__stpcpy) +libc_hidden_builtin_def (stpcpy) --- libc/sysdeps/powerpc/powerpc64/stpcpy.S.jj 2002-09-18 01:50:02.000000000 +0200 +++ libc/sysdeps/powerpc/powerpc64/stpcpy.S 2004-05-27 09:34:42.000000000 +0200 @@ -1,5 +1,5 @@ /* Optimized stpcpy implementation for PowerPC64. - Copyright (C) 1997, 1999, 2000, 2002 Free Software Foundation, Inc. + Copyright (C) 1997, 1999, 2000, 2002, 2004 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 @@ -119,3 +119,4 @@ END (BP_SYM (__stpcpy)) weak_alias (BP_SYM (__stpcpy), BP_SYM (stpcpy)) libc_hidden_def (__stpcpy) +libc_hidden_builtin_def (stpcpy) --- libc/sysdeps/powerpc/powerpc32/stpcpy.S.jj 2002-09-05 10:26:37.000000000 +0200 +++ libc/sysdeps/powerpc/powerpc32/stpcpy.S 2004-05-27 09:34:21.000000000 +0200 @@ -1,5 +1,5 @@ /* Optimized stpcpy implementation for PowerPC. - Copyright (C) 1997, 1999, 2000, 2002 Free Software Foundation, Inc. + Copyright (C) 1997, 1999, 2000, 2002, 2004 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 @@ -119,3 +119,4 @@ END (BP_SYM (__stpcpy)) weak_alias (BP_SYM (__stpcpy), BP_SYM (stpcpy)) libc_hidden_def (__stpcpy) +libc_hidden_builtin_def (stpcpy) --- libc/sysdeps/sparc/sparc32/stpcpy.S.jj 2002-08-04 03:22:11.000000000 +0200 +++ libc/sysdeps/sparc/sparc32/stpcpy.S 2004-05-27 09:24:28.000000000 +0200 @@ -1,6 +1,6 @@ /* Copy SRC to DEST returning the address of the terminating '\0' in DEST. For SPARC v7. - Copyright (C) 1996, 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1996, 1999, 2002, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek . @@ -162,3 +162,4 @@ END(__stpcpy) weak_alias(__stpcpy, stpcpy) libc_hidden_def (__stpcpy) +libc_hidden_builtin_def (stpcpy) --- libc/sysdeps/sparc/sparc64/stpcpy.S.jj 2003-01-27 21:55:28.000000000 +0100 +++ libc/sysdeps/sparc/sparc64/stpcpy.S 2004-05-27 09:25:07.000000000 +0200 @@ -1,6 +1,6 @@ /* Copy SRC to DEST returning the address of the terminating '\0' in DEST. For SPARC v9. - Copyright (C) 1998, 1999, 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jan Vondrak and Jakub Jelinek . @@ -272,3 +272,4 @@ END(__stpcpy) weak_alias (__stpcpy, stpcpy) libc_hidden_def (__stpcpy) +libc_hidden_builtin_def (stpcpy) --- libc/sysdeps/i386/i686/mempcpy.S.jj 2002-08-03 08:41:06.000000000 +0200 +++ libc/sysdeps/i386/i686/mempcpy.S 2004-05-27 09:44:36.649392190 +0200 @@ -1,7 +1,7 @@ /* Copy memory block and return pointer to following byte. For Intel 80x86, x>=6. This file is part of the GNU C Library. - Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2002, 2004 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1998. The GNU C Library is free software; you can redistribute it and/or @@ -59,3 +59,4 @@ ENTRY (BP_SYM (__mempcpy)) END (BP_SYM (__mempcpy)) libc_hidden_def (BP_SYM (__mempcpy)) weak_alias (BP_SYM (__mempcpy), BP_SYM (mempcpy)) +libc_hidden_builtin_def (mempcpy) --- libc/sysdeps/i386/i586/memcpy.S.jj 2003-04-30 00:47:20.000000000 +0200 +++ libc/sysdeps/i386/i586/memcpy.S 2004-05-27 08:01:30.918955620 +0200 @@ -116,4 +116,6 @@ L(1): rep; movsb LEAVE RET_PTR END (BP_SYM (memcpy)) +#if !MEMPCPY_P libc_hidden_builtin_def (memcpy) +#endif --- libc/sysdeps/i386/i586/mempcpy.S.jj 2002-08-03 08:41:05.000000000 +0200 +++ libc/sysdeps/i386/i586/mempcpy.S 2004-05-27 08:00:18.000000000 +0200 @@ -3,3 +3,4 @@ libc_hidden_def (BP_SYM (__mempcpy)) weak_alias (BP_SYM (__mempcpy), BP_SYM (mempcpy)) +libc_hidden_builtin_def (mempcpy) --- libc/sysdeps/i386/i586/stpcpy.S.jj 2002-08-04 03:22:11.000000000 +0200 +++ libc/sysdeps/i386/i586/stpcpy.S 2004-05-27 09:23:46.000000000 +0200 @@ -5,3 +5,4 @@ weak_alias (__stpcpy, stpcpy) libc_hidden_def (__stpcpy) +libc_hidden_builtin_def (stpcpy) --- libc/sysdeps/i386/stpcpy.S.jj 2002-08-04 03:22:10.000000000 +0200 +++ libc/sysdeps/i386/stpcpy.S 2004-05-27 09:23:21.000000000 +0200 @@ -1,6 +1,7 @@ /* Copy SRC to DEST returning the address of the terminating '\0' in DEST. For Intel 80x86, x>=3. - Copyright (C) 1994,1995,1996,1997,2000,2002 Free Software Foundation, Inc. + Copyright (C) 1994, 1995, 1996, 1997, 2000, 2002, 2004 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper (drepper@gnu.ai.mit.edu). @@ -94,3 +95,4 @@ END (BP_SYM (__stpcpy)) weak_alias (BP_SYM (__stpcpy), BP_SYM (stpcpy)) libc_hidden_def (__stpcpy) +libc_hidden_builtin_def (stpcpy) --- libc/sysdeps/generic/mempcpy.c.jj 2002-08-03 10:42:02.000000000 +0200 +++ libc/sysdeps/generic/mempcpy.c 2004-05-27 08:00:07.000000000 +0200 @@ -1,7 +1,7 @@ /* Copy memory to memory until the specified number of bytes has been copied, return pointer to following byte. Overlap is NOT handled correctly. - Copyright (C) 1991, 1997, 1998, 2002 Free Software Foundation, Inc. + Copyright (C) 1991, 1997, 1998, 2002, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Torbjorn Granlund (tege@sics.se). @@ -66,3 +66,4 @@ __mempcpy (dstpp, srcpp, len) } libc_hidden_def (__mempcpy) weak_alias (__mempcpy, mempcpy) +libc_hidden_builtin_def (mempcpy) --- libc/sysdeps/generic/stpcpy.c.jj 2002-08-04 03:22:10.000000000 +0200 +++ libc/sysdeps/generic/stpcpy.c 2004-05-27 09:21:55.000000000 +0200 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 1995, 1997, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1992, 1995, 1997, 2002, 2004 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 @@ -50,3 +50,6 @@ libc_hidden_def (__stpcpy) #ifdef weak_alias weak_alias (__stpcpy, stpcpy) #endif +#ifdef libc_hidden_builtin_def +libc_hidden_builtin_def (stpcpy) +#endif --- libc/sysdeps/x86_64/memcpy.S.jj 2004-02-12 11:53:38.000000000 +0100 +++ libc/sysdeps/x86_64/memcpy.S 2004-05-27 08:03:31.249390840 +0200 @@ -1,5 +1,5 @@ /* Highly optimized version for x86-64. - Copyright (C) 1997, 2000, 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 1997, 2000, 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Based on i586 version contributed by Ulrich Drepper , 1997. @@ -90,4 +90,6 @@ ENTRY (BP_SYM (memcpy)) ret END (BP_SYM (memcpy)) +#if !MEMPCPY_P libc_hidden_builtin_def (memcpy) +#endif --- libc/sysdeps/x86_64/mempcpy.S.jj 2002-08-31 19:33:34.000000000 +0200 +++ libc/sysdeps/x86_64/mempcpy.S 2004-05-27 09:43:49.997752771 +0200 @@ -3,3 +3,4 @@ libc_hidden_def (BP_SYM (__mempcpy)) weak_alias (BP_SYM (__mempcpy), BP_SYM (mempcpy)) +libc_hidden_builtin_def (mempcpy) --- libc/sysdeps/x86_64/stpcpy.S.jj 2002-08-31 19:41:24.000000000 +0200 +++ libc/sysdeps/x86_64/stpcpy.S 2004-05-27 09:22:26.614751714 +0200 @@ -5,3 +5,4 @@ weak_alias (__stpcpy, stpcpy) libc_hidden_def (__stpcpy) +libc_hidden_builtin_def (stpcpy) --- libc/string/bits/string2.h.jj 2004-05-26 15:57:38.000000000 +0200 +++ libc/string/bits/string2.h 2004-05-27 10:08:28.008873934 +0200 @@ -94,9 +94,10 @@ __STRING2_COPY_TYPE (8); ((size_t)(const void *)((__x) + 1) - (size_t)(const void *)(__x) == 1) /* Set N bytes of S to C. */ -#if !defined _HAVE_STRING_ARCH_memset && ! __GNUC_PREREQ (3, 0) -# if _STRING_ARCH_unaligned -# define memset(s, c, n) \ +#if !defined _HAVE_STRING_ARCH_memset +# if !__GNUC_PREREQ (3, 0) +# if _STRING_ARCH_unaligned +# define memset(s, c, n) \ (__extension__ (__builtin_constant_p (n) && (n) <= 16 \ ? ((n) == 1 \ ? __memset_1 (s, c) \ @@ -105,10 +106,10 @@ __STRING2_COPY_TYPE (8); ? ({ void *__s = (s); __bzero (__s, n); __s; }) \ : memset (s, c, n)))) -# define __memset_1(s, c) ({ void *__s = (s); \ +# define __memset_1(s, c) ({ void *__s = (s); \ *((__uint8_t *) __s) = (__uint8_t) c; __s; }) -# define __memset_gc(s, c, n) \ +# define __memset_gc(s, c, n) \ ({ void *__s = (s); \ union { \ unsigned int __ui; \ @@ -177,15 +178,19 @@ __STRING2_COPY_TYPE (8); } \ \ __s; }) -# else -# define memset(s, c, n) \ +# else +# define memset(s, c, n) \ (__extension__ (__builtin_constant_p (c) && (c) == '\0' \ ? ({ void *__s = (s); __bzero (__s, n); __s; }) \ : memset (s, c, n))) +# endif # endif -/* GCC optimizes memset(s, 0, n) but not bzero(s, n). - The optimization is broken before EGCS 1.1. */ +/* GCC < 3.0 optimizes memset(s, 0, n) but not bzero(s, n). + The optimization is broken before EGCS 1.1. + GCC 3.0+ has __builtin_bzero as well, but at least till GCC 3.4 + if it decides to call the library function, it calls memset + and not bzero. */ # if __GNUC_PREREQ (2, 91) # define __bzero(s, n) __builtin_memset (s, '\0', n) # endif Jakub