diff mbox series

[1/7] Fix internal tests when building with clang

Message ID 20241231182649.1811734-2-adhemerval.zanella@linaro.org
State New
Headers show
Series More fixes for building tests with clang | expand

Commit Message

Adhemerval Zanella Netto Dec. 31, 2024, 6:26 p.m. UTC
When building internal tests, clang fails with:

../include/string.h:183:44: error: attribute declaration must precede definition [-Werror,-Wignored-attributes]
  183 | extern __typeof (mempcpy) mempcpy __asm__ ("__mempcpy");
      |                                            ^
../string/bits/string_fortified.h:42:8: note: previous definition is here
   42 | __NTH (mempcpy (void *__restrict __dest, const void *__restrict __src,
      |        ^

Because memcpy might be already defined if glibc is build with
fortify support.

The straighforward solution is just to avoid this indirection for
internal tests, since it is not required.

Checked on aarch64-linux-gnu.
---
 include/string.h        | 4 +++-
 scripts/gen-as-const.py | 3 ++-
 2 files changed, 5 insertions(+), 2 deletions(-)

Comments

H.J. Lu Jan. 1, 2025, 12:35 a.m. UTC | #1
On Wed, Jan 1, 2025 at 2:26 AM Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
>
> When building internal tests, clang fails with:
>
> ../include/string.h:183:44: error: attribute declaration must precede definition [-Werror,-Wignored-attributes]
>   183 | extern __typeof (mempcpy) mempcpy __asm__ ("__mempcpy");
>       |                                            ^
> ../string/bits/string_fortified.h:42:8: note: previous definition is here
>    42 | __NTH (mempcpy (void *__restrict __dest, const void *__restrict __src,
>       |        ^
>
> Because memcpy might be already defined if glibc is build with
> fortify support.
>
> The straighforward solution is just to avoid this indirection for
> internal tests, since it is not required.
>
> Checked on aarch64-linux-gnu.
> ---
>  include/string.h        | 4 +++-
>  scripts/gen-as-const.py | 3 ++-
>  2 files changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/include/string.h b/include/string.h
> index 3b4c6007d7..003636b75b 100644
> --- a/include/string.h
> +++ b/include/string.h
> @@ -175,7 +175,9 @@ extern __typeof (strnlen) strnlen attribute_hidden;
>  extern __typeof (strsep) strsep attribute_hidden;
>  #endif
>
> -#if (!IS_IN (libc) || !defined SHARED) \
> +/* Also exclude tests and related modules.  */
> +#if ((!IS_IN (libc) || !defined SHARED) \
> +     && !(IS_IN (testsuite_internal) || IS_IN (extramodules))) \
>    && !defined NO_MEMPCPY_STPCPY_REDIRECT
>  /* Redirect calls to __builtin_mempcpy and __builtin_stpcpy to call
>     __mempcpy and __stpcpy if not inlined.  */

These were added when __stpcpy and __mempcpy were macros
defined in string/bits/string2.h that call __builtin_stpcpy and
__builtin_mempcpy.  But string/bits/string2.h was removed by

commit 18b10de7ced9e9c3843299fb600e40b11af3e0af
Author: Wilco Dijkstra <wdijkstr@arm.com>
Date:   Mon Jun 12 15:19:38 2017 +0100

    2017-06-12  Wilco Dijkstra  <wdijkstr@arm.com>

    There is no longer a need for string2.h, so remove it and all mention of it.
    Move the redirect for __stpcpy to include/string.h since it is
still required
    until all internal uses have been renamed.
    This fixes several linknamespace/localplt failures when building with -Os.

            [BZ #15105]
            [BZ #19463]
            * include/string.h: Add internal redirect for __stpcpy.
            * string/Makefile: Remove bits/string2.h.
            * string/string.h: Update comment.
            * string/string-inlines.c: Remove bits/string2.h include
and comment.
            * string/bits/string2.h: Remove file.

Can you try this patch instead?


> diff --git a/scripts/gen-as-const.py b/scripts/gen-as-const.py
> index 2f6b09d05b..17d08dd5a2 100644
> --- a/scripts/gen-as-const.py
> +++ b/scripts/gen-as-const.py
> @@ -38,7 +38,8 @@ def gen_test(sym_data):
>      for arg in sym_data:
>          if isinstance(arg, str):
>              if arg == 'START':
> -                out_lines.append('#include <stdint.h>\n'
> +                out_lines.append('#define NO_MEMPCPY_STPCPY_REDIRECT\n'
> +                                 '#include <stdint.h>\n'
>                                   '#include <stdio.h>\n'
>                                   '#include <bits/wordsize.h>\n'
>                                   '#if __WORDSIZE == 64\n'
> --
> 2.43.0
>


--
H.J.
diff mbox series

Patch

diff --git a/include/string.h b/include/string.h
index 3b4c6007d7..003636b75b 100644
--- a/include/string.h
+++ b/include/string.h
@@ -175,7 +175,9 @@  extern __typeof (strnlen) strnlen attribute_hidden;
 extern __typeof (strsep) strsep attribute_hidden;
 #endif
 
-#if (!IS_IN (libc) || !defined SHARED) \
+/* Also exclude tests and related modules.  */
+#if ((!IS_IN (libc) || !defined SHARED) \
+     && !(IS_IN (testsuite_internal) || IS_IN (extramodules))) \
   && !defined NO_MEMPCPY_STPCPY_REDIRECT
 /* Redirect calls to __builtin_mempcpy and __builtin_stpcpy to call
    __mempcpy and __stpcpy if not inlined.  */
diff --git a/scripts/gen-as-const.py b/scripts/gen-as-const.py
index 2f6b09d05b..17d08dd5a2 100644
--- a/scripts/gen-as-const.py
+++ b/scripts/gen-as-const.py
@@ -38,7 +38,8 @@  def gen_test(sym_data):
     for arg in sym_data:
         if isinstance(arg, str):
             if arg == 'START':
-                out_lines.append('#include <stdint.h>\n'
+                out_lines.append('#define NO_MEMPCPY_STPCPY_REDIRECT\n'
+                                 '#include <stdint.h>\n'
                                  '#include <stdio.h>\n'
                                  '#include <bits/wordsize.h>\n'
                                  '#if __WORDSIZE == 64\n'