Remove string/bits/string2.h header

Message ID AM5PR0802MB2610AE28A40007CBBF8A338E83980@AM5PR0802MB2610.eurprd08.prod.outlook.com
State Superseded
Headers

Commit Message

Wilco Dijkstra Dec. 12, 2016, 12:32 p.m. UTC
  After patches [1-5] there is no longer a need for string2.h.
Move the remaining defines for __bzero and __stpcpy to string.h
(these are needed as otherwise elf/localplt fails) and remove all
mention of string2.h.

[1] https://sourceware.org/ml/libc-alpha/2016-12/msg00361.html
[2] https://sourceware.org/ml/libc-alpha/2016-12/msg00362.html
[3] https://sourceware.org/ml/libc-alpha/2016-11/msg00660.html
[4] https://sourceware.org/ml/libc-alpha/2016-11/msg00853.html
[5] https://sourceware.org/ml/libc-alpha/2016-11/msg00843.html

ChangeLog:
2015-12-12  Wilco Dijkstra  <wdijkstr@arm.com>

	* string/Makefile: Remove bits/string2.h
	* string/string.h: Add define for __bcopy and __stpcpy.
	* string/string-inlines.c: Update comment.
	* string/bits/string2.h: Remove file.

--
  

Comments

Zack Weinberg Dec. 12, 2016, 12:46 p.m. UTC | #1
On Mon, Dec 12, 2016 at 7:32 AM, Wilco Dijkstra <Wilco.Dijkstra@arm.com> wrote:
> After patches [1-5] there is no longer a need for string2.h.
> Move the remaining defines for __bzero and __stpcpy to string.h
> (these are needed as otherwise elf/localplt fails) and remove all
> mention of string2.h.

I'd prefer that this header stick around, even if there is no
_current_ use for it.  I need somewhere to put the inline expansion of
explicit_bzero (see
https://sourceware.org/ml/libc-alpha/2016-12/msg00274.html) and it
seems likely to me that new uses will appear.

> +#ifdef __USE_MISC
> +# define __bzero(s, n) __builtin_memset (s, '\0', n)
> +#endif
> +
> +#ifdef  __USE_XOPEN2K8
> +# ifndef __stpcpy
> +#  define __stpcpy(dest, src) __builtin_stpcpy (dest, src)
> +# endif
> +#endif

These can probably go in include/string.h instead of string/string.h.

zw
  
Wilco Dijkstra Dec. 12, 2016, 1:28 p.m. UTC | #2
Zack Weinberg wrote:
> On Mon, Dec 12, 2016 at 7:32 AM, Wilco Dijkstra <Wilco.Dijkstra@arm.com> wrote:
> > After patches [1-5] there is no longer a need for string2.h.
> > Move the remaining defines for __bzero and __stpcpy to string.h
> > (these are needed as otherwise elf/localplt fails) and remove all
> > mention of string2.h.
>
> I'd prefer that this header stick around, even if there is no
> _current_ use for it.  I need somewhere to put the inline expansion of
> explicit_bzero (see
> https://sourceware.org/ml/libc-alpha/2016-12/msg00274.html) and it
> seems likely to me that new uses will appear.

I think it is best to get rid of string2.h given it is only included in a limited number of
cases. There are now only small number of inlines left that are useful. The
explicit_bzero is an example of something you want to inline always (as it's just
memset), not in the limited cases of string2.h.

> These can probably go in include/string.h instead of string/string.h.

Yes if that's more appropriate. Does your header cleanup solve both the internal
name space issues as well as allowing builtins to be used in GLIBC internally?

Wilco
  
Zack Weinberg Dec. 12, 2016, 1:35 p.m. UTC | #3
On Mon, Dec 12, 2016 at 8:28 AM, Wilco Dijkstra <Wilco.Dijkstra@arm.com> wrote:
> Zack Weinberg wrote:
>> On Mon, Dec 12, 2016 at 7:32 AM, Wilco Dijkstra <Wilco.Dijkstra@arm.com> wrote:
>> > After patches [1-5] there is no longer a need for string2.h.
>> > Move the remaining defines for __bzero and __stpcpy to string.h
>> > (these are needed as otherwise elf/localplt fails) and remove all
>> > mention of string2.h.
>>
>> I'd prefer that this header stick around, even if there is no
>> _current_ use for it.  I need somewhere to put the inline expansion of
>> explicit_bzero (see
>> https://sourceware.org/ml/libc-alpha/2016-12/msg00274.html) and it
>> seems likely to me that new uses will appear.
>
> I think it is best to get rid of string2.h given it is only included in a limited number of
> cases. There are now only small number of inlines left that are useful. The
> explicit_bzero is an example of something you want to inline always (as it's just
> memset), not in the limited cases of string2.h.

So, where should I put it then?  Directly in string.h?

>> These can probably go in include/string.h instead of string/string.h.
>
> Yes if that's more appropriate.

I *think* they are only used by internal code at this point, but we
might need to check all the sysdeps/.../bits/string.h variations as
well.  (In general, __foobar aliases should be in include/ unless
they're used somehow by the public headers.)

> Does your header cleanup solve both the internal
> name space issues as well as allowing builtins to be used in GLIBC internally?

I don't think it solves all the problems in that area, no.

zw
  

Patch

diff --git a/string/Makefile b/string/Makefile
index 69d3f802fbaed773cac5d93c1f132d539ce5ecb4..a28fb0824ea4170483aa43cc1c3038a5bb8be2db 100644
--- a/string/Makefile
+++ b/string/Makefile
@@ -24,7 +24,7 @@  include ../Makeconfig
 
 headers	:= string.h strings.h memory.h endian.h bits/endian.h \
 	   argz.h envz.h byteswap.h bits/byteswap.h bits/byteswap-16.h \
-	   bits/string.h bits/string2.h bits/string3.h
+	   bits/string.h bits/string3.h
 
 routines	:= strcat strchr strcmp strcoll strcpy strcspn		\
 		   strverscmp strdup strndup				\
diff --git a/string/bits/string2.h b/string/bits/string2.h
deleted file mode 100644
index e24309d38dafa5cb191b22231694b016d2ec3629..0000000000000000000000000000000000000000
--- a/string/bits/string2.h
+++ /dev/null
@@ -1,61 +0,0 @@ 
-/* Machine-independant string function optimizations.
-   Copyright (C) 1997-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#ifndef _STRING_H
-# error "Never use <bits/string2.h> directly; include <string.h> instead."
-#endif
-
-#ifndef __NO_STRING_INLINES
-
-/* Unlike the definitions in the header <bits/string.h> the
-   definitions contained here are not optimized down to assembler
-   level.  Those optimizations are not always a good idea since this
-   means the code size increases a lot.  Instead the definitions here
-   optimize some functions in a way which do not dramatically
-   increase the code size and which do not use assembler.  The main
-   trick is to use GCC's `__builtin_constant_p' function.
-
-   Every function XXX which has a defined version in
-   <bits/string.h> must be accompanied by a symbol _HAVE_STRING_ARCH_XXX
-   to make sure we don't get redefinitions.
-
-   We must use here macros instead of inline functions since the
-   trick won't work with the latter.  */
-
-#ifndef __STRING_INLINE
-# ifdef __cplusplus
-#  define __STRING_INLINE inline
-# else
-#  define __STRING_INLINE __extern_inline
-# endif
-#endif
-
-/* Set N bytes of S to 0.  */
-#define __bzero(s, n) __builtin_memset (s, '\0', n)
-
-/* Copy SRC to DEST, returning pointer to final NUL byte.  */
-#ifndef __stpcpy
-# define __stpcpy(dest, src) __builtin_stpcpy (dest, src)
-#endif
-
-#ifndef _FORCE_INLINES
-# undef __STRING_INLINE
-#endif
-
-#endif /* No string inlines.  */
diff --git a/string/string-inlines.c b/string/string-inlines.c
index 6d0c0c51b3027f99d26aace85523d7f337df8308..9db66a94d55b0874660e4b36d478c91db423c446 100644
--- a/string/string-inlines.c
+++ b/string/string-inlines.c
@@ -15,9 +15,8 @@ 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-/*  <bits/string.h> and <bits/string2.h> declare some extern inline
-    functions.  These functions are declared additionally here if
-    inlining is not possible.  */
+/*  <bits/string.h> may declare some extern inline functions.
+    These functions are defined here if inlining is not possible.  */
 
 #undef __USE_STRING_INLINES
 #define __USE_STRING_INLINES
diff --git a/string/string.h b/string/string.h
index b103e64912fe1904098e229ccb845bb2c5c10835..ad97f7e4014e082f03e61f043103e587f71b777b 100644
--- a/string/string.h
+++ b/string/string.h
@@ -615,19 +615,11 @@  extern char *basename (const char *__filename) __THROW __nonnull ((1));
 	__USE_STRING_INLINES
      is defined before including this header.
 
-   - machine-independent optimizations which do not increase the
-     code size significantly and which optimize mainly situations
-     where one or more arguments are compile-time constants.
-     These optimizations are used always when the compiler is
-     taught to optimize.
-
    One can inhibit all optimizations by defining __NO_STRING_INLINES.  */
 
 /* Get the machine-dependent optimizations (if any).  */
 #  include <bits/string.h>
 
-/* These are generic optimizations which do not add too much inline code.  */
-#  include <bits/string2.h>
 # endif
 
 # if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
@@ -653,6 +645,16 @@  __mempcpy_inline (void *__restrict __dest,
 # endif
 #endif
 
+#ifdef __USE_MISC
+# define __bzero(s, n) __builtin_memset (s, '\0', n)
+#endif
+
+#ifdef  __USE_XOPEN2K8
+# ifndef __stpcpy
+#  define __stpcpy(dest, src) __builtin_stpcpy (dest, src)
+# endif
+#endif
+
 __END_DECLS
 
 #endif /* string.h  */