[PATCH 53/59] gmon: Only used -fno-tree-loop-distribute-patterns if compiler supports it

Adhemerval Zanella Netto adhemerval.zanella@linaro.org
Tue Oct 21 11:49:32 GMT 2025



On 20/10/25 16:27, Collin Funk wrote:
> Adhemerval Zanella <adhemerval.zanella@linaro.org> writes:
> 
>> ---
>>  configure     | 11 ++++++++---
>>  configure.ac  |  1 +
>>  gmon/Makefile |  5 ++++-
>>  3 files changed, 13 insertions(+), 4 deletions(-)
>>
>> diff --git a/configure b/configure
>> index 26f6682c1e6..c8ed16bd79d 100755
>> --- a/configure
>> +++ b/configure
>> @@ -7515,7 +7515,8 @@ $conftest_code
>>  EOF
>>  
>>  saved_CC="$CC"
>> -CC="$TEST_CC"
>> +saved_CFLAGS="$CFLAGS"
>> +CC="$TEST_CC -Wno-unused-command-line-argument"
>>  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for traditional tls support in testing" >&5
>>  printf %s "checking for traditional tls support in testing... " >&6; }
>>  if test ${libc_cv_test_mtls_traditional+y}
>> @@ -8015,6 +8016,8 @@ if test $libc_cv_test_cc_loop_to_function = yes; then
>>  
>>  fi
>>  
>> +config_vars="$config_vars
>> +config-cflags-cc-loop-to-function = $libc_cv_cc_loop_to_function"
>>  
>>  
>>  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -Wimplicit-fallthrough" >&5
>> @@ -8107,7 +8110,8 @@ if test "$TEST_CC" = "$CC"; then
>>  else
>>  
>>  saved_CC="$CC"
>> -CC="$TEST_CC"
>> +saved_CFLAGS="$CFLAGS"
>> +CC="$TEST_CC -Wno-unused-command-line-argument"
>>  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -Wfree-labels in testing" >&5
>>  printf %s "checking for -Wfree-labels in testing... " >&6; }
>>  if test ${libc_cv_test_cc_wfree_labels+y}
>> @@ -8167,7 +8171,8 @@ if test "$TEST_CC" = "$CC"; then
>>  else
>>  
>>  saved_CC="$CC"
>> -CC="$TEST_CC"
>> +saved_CFLAGS="$CFLAGS"
>> +CC="$TEST_CC -Wno-unused-command-line-argument"
>>  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -Wmissing-parameter-name in testing" >&5
>>  printf %s "checking for -Wmissing-parameter-name in testing... " >&6; }
>>  if test ${libc_cv_test_cc_wmissing_parameter_name+y}
>> diff --git a/configure.ac b/configure.ac
>> index 7111d081f20..f5cbdd6bdb5 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> @@ -1599,6 +1599,7 @@ if test $libc_cv_test_cc_loop_to_function = yes; then
>>    AC_DEFINE(HAVE_TEST_CC_INHIBIT_LOOP_TO_LIBCALL)
>>  fi
>>  AC_SUBST(libc_cv_cc_loop_to_function)
>> +LIBC_CONFIG_VAR(config-cflags-cc-loop-to-function,$libc_cv_cc_loop_to_function)
>>  
>>  LIBC_TRY_CC_AND_TEST_CC_OPTION([for -Wimplicit-fallthrough],
>>    [-Werror -Wimplicit-fallthrough],
>> diff --git a/gmon/Makefile b/gmon/Makefile
>> index b42c14aa83d..c7534bff67c 100644
>> --- a/gmon/Makefile
>> +++ b/gmon/Makefile
>> @@ -64,7 +64,10 @@ endif
>>  
>>  # The mcount code won't work without a frame pointer nor when memcpy or
>>  # memset are called.
>> -CFLAGS-mcount.c := -fno-omit-frame-pointer -fno-tree-loop-distribute-patterns
>> +CFLAGS-mcount.c := -fno-omit-frame-pointer
>> +ifeq (yes,$(config-cflags-cc-loop-to-function))
>> +CFLAGS-mcount.c += -fno-tree-loop-distribute-patterns
>> +endif
>>  
>>  CFLAGS-tst-gmon.c := -fno-omit-frame-pointer -pg
>>  tst-gmon-no-pie = yes
> 
> I couldn't find an equivalent option to disable this optimization with
> clang. I'm assuming you checked and couldn't find it as well?

At least with clang-21 it does not expand memcpy/memset on mcount.c.  The
flag was added to fix BZ#33134 [1], but it did not add a regression test.
I will double check the generate code.

[1] https://sourceware.org/bugzilla/show_bug.cgi?id=33134

> 
> If so, this patch makes sense.
> 
> Reviewed-by: Collin Funk <collin.funk1@gmail.com>
> 
> Collin



More information about the Libc-alpha mailing list