All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH 1/1] package/gcc: undefine NDEBUG directive
@ 2021-06-17 12:19 Andreas Ziegler
  2021-06-20 18:23 ` Romain Naour
  2021-07-04 19:58 ` Yann E. MORIN
  0 siblings, 2 replies; 4+ messages in thread
From: Andreas Ziegler @ 2021-06-17 12:19 UTC (permalink / raw)
  To: buildroot

GCC performs internal consistency checks that can be controlled with --enable-checking, but not completely removed for all stages of the build. One of these checks uses the assert macro from <assert.h>  Defining NDEBUG removes the assertion code, which is not anticipated in the gcc code. 

Undefine the NDEBUG flag for package/gcc to preserve assertions. 

This fixes the following error during build of GCC 10:

../../../libgomp/target.c: In function ?gomp_unmap_vars_internal?:
../../../libgomp/target.c:1474:9: error: unused variable ?is_tgt_unmapped? [-Werror=unused-variable]
 1474 |    bool is_tgt_unmapped = gomp_remove_var (devicep, k);
      |         ^~~~~~~~~~~~~~~
../../../libgomp/target.c:1473:28: error: unused variable ?k_tgt? [-Werror=unused-variable]
 1473 |    struct target_mem_desc *k_tgt = k->tgt;
      |                            ^~~~~

Signed-off-by: Andreas Ziegler <br015@umbiko.net>
---
 package/gcc/gcc.mk | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk
index ed9b93e50f..4ee32c03a7 100644
--- a/package/gcc/gcc.mk
+++ b/package/gcc/gcc.mk
@@ -90,7 +90,8 @@ HOST_GCC_COMMON_CONF_OPTS = \
 HOST_GCC_COMMON_CONF_ENV = \
 	MAKEINFO=missing
 
-GCC_COMMON_TARGET_CFLAGS = $(TARGET_CFLAGS)
+# gcc should not be built with NDEBUG enabled
+GCC_COMMON_TARGET_CFLAGS = $(TARGET_CFLAGS) -UNDEBUG
 GCC_COMMON_TARGET_CXXFLAGS = $(TARGET_CXXFLAGS)
 
 # used to fix ../../../../libsanitizer/libbacktrace/../../libbacktrace/elf.c:772:21: error: 'st.st_mode' may be used uninitialized in this function [-Werror=maybe-uninitialized]
-- 
2.25.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [Buildroot] [PATCH 1/1] package/gcc: undefine NDEBUG directive
  2021-06-17 12:19 [Buildroot] [PATCH 1/1] package/gcc: undefine NDEBUG directive Andreas Ziegler
@ 2021-06-20 18:23 ` Romain Naour
  2021-06-21  4:49   ` Andreas Ziegler
  2021-07-04 19:58 ` Yann E. MORIN
  1 sibling, 1 reply; 4+ messages in thread
From: Romain Naour @ 2021-06-20 18:23 UTC (permalink / raw)
  To: buildroot

Hello Andreas,

Le 17/06/2021 ? 14:19, Andreas Ziegler a ?crit?:
> GCC performs internal consistency checks that can be controlled with --enable-checking, but not completely removed for all stages of the build. One of these checks uses the assert macro from <assert.h>  Defining NDEBUG removes the assertion code, which is not anticipated in the gcc code. 
> 
> Undefine the NDEBUG flag for package/gcc to preserve assertions. 
> 
> This fixes the following error during build of GCC 10:
> 
> ../../../libgomp/target.c: In function ?gomp_unmap_vars_internal?:
> ../../../libgomp/target.c:1474:9: error: unused variable ?is_tgt_unmapped? [-Werror=unused-variable]
>  1474 |    bool is_tgt_unmapped = gomp_remove_var (devicep, k);
>       |         ^~~~~~~~~~~~~~~
> ../../../libgomp/target.c:1473:28: error: unused variable ?k_tgt? [-Werror=unused-variable]
>  1473 |    struct target_mem_desc *k_tgt = k->tgt;
>       |                            ^~~~~

It seems an error related to Werror being enabled.

Usually we prefer disable Werror while building a package in Buildroot because
any package can trigger new warning with the latest compiler.

Maybe we can use -Wno-error not just when BR2_ENABLE_DEBUG is set:

https://git.buildroot.net/buildroot/commit/?id=dcaf6e75acb4d21c2c31c70b054dac8d18710fcb

Best regards,
Romain

> 
> Signed-off-by: Andreas Ziegler <br015@umbiko.net>
> ---
>  package/gcc/gcc.mk | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk
> index ed9b93e50f..4ee32c03a7 100644
> --- a/package/gcc/gcc.mk
> +++ b/package/gcc/gcc.mk
> @@ -90,7 +90,8 @@ HOST_GCC_COMMON_CONF_OPTS = \
>  HOST_GCC_COMMON_CONF_ENV = \
>  	MAKEINFO=missing
>  
> -GCC_COMMON_TARGET_CFLAGS = $(TARGET_CFLAGS)
> +# gcc should not be built with NDEBUG enabled
> +GCC_COMMON_TARGET_CFLAGS = $(TARGET_CFLAGS) -UNDEBUG
>  GCC_COMMON_TARGET_CXXFLAGS = $(TARGET_CXXFLAGS)
>  
>  # used to fix ../../../../libsanitizer/libbacktrace/../../libbacktrace/elf.c:772:21: error: 'st.st_mode' may be used uninitialized in this function [-Werror=maybe-uninitialized]
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Buildroot] [PATCH 1/1] package/gcc: undefine NDEBUG directive
  2021-06-20 18:23 ` Romain Naour
@ 2021-06-21  4:49   ` Andreas Ziegler
  0 siblings, 0 replies; 4+ messages in thread
From: Andreas Ziegler @ 2021-06-21  4:49 UTC (permalink / raw)
  To: buildroot

Bonjour Romain,

On 2021-06-20 18:23, Romain Naour wrote:
> Hello Andreas,
> 
> Le 17/06/2021 ? 14:19, Andreas Ziegler a ?crit?:
>> GCC performs internal consistency checks that can be controlled with 
>> --enable-checking, but not completely removed for all stages of the 
>> build. One of these checks uses the assert macro from <assert.h>  
>> Defining NDEBUG removes the assertion code, which is not anticipated 
>> in the gcc code.
>> 
>> Undefine the NDEBUG flag for package/gcc to preserve assertions.
>> 
>> This fixes the following error during build of GCC 10:
>> 
>> ../../../libgomp/target.c: In function ?gomp_unmap_vars_internal?:
>> ../../../libgomp/target.c:1474:9: error: unused variable 
>> ?is_tgt_unmapped? [-Werror=unused-variable]
>>  1474 |    bool is_tgt_unmapped = gomp_remove_var (devicep, k);
>>       |         ^~~~~~~~~~~~~~~
>> ../../../libgomp/target.c:1473:28: error: unused variable ?k_tgt? 
>> [-Werror=unused-variable]
>>  1473 |    struct target_mem_desc *k_tgt = k->tgt;
>>       |                            ^~~~~
> 
> It seems an error related to Werror being enabled.
> 
> Usually we prefer disable Werror while building a package in Buildroot 
> because
> any package can trigger new warning with the latest compiler.

Using -Wno-error was my first idea, though I would have preferred to 
just disable the actual error: -Werror=unused-variable. I posted a 
question an the mailing list

https://marc.info/?l=buildroot&m=162366255526973&w=2

After receiving no answer, I did some more research:

-- gcc does not use NDEBUG consistently, but relies on assertions to 
monitor some internal structures. These assertions, but not the code,  
are disabled via the C library when NDEBUG is set.

-- The build process explicitly sets -Werror in some phases.

-- For enabling and disabling individual internal checks and assertions, 
configure options exist:

--enable-werror
--disable-werror
--enable-checking
--disable-checking
--disable-stage1-checking
--enable-stage1-checking

So my recommendation is to remove NDEBUG, not suppress the error 
message. This is the least invasive option.

> Maybe we can use -Wno-error not just when BR2_ENABLE_DEBUG is set:
> 
> https://git.buildroot.net/buildroot/commit/?id=dcaf6e75acb4d21c2c31c70b054dac8d18710fcb

I have seen this, but would not recommend disabling errors overall to 
catch one specific error that manifests. -Wno-error=maybe-uninitialized 
might have been more elegant ...

Kind regards,
Andreas


> Best regards,
> Romain
> 
>> 
>> Signed-off-by: Andreas Ziegler <br015@umbiko.net>
>> ---
>>  package/gcc/gcc.mk | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>> 
>> diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk
>> index ed9b93e50f..4ee32c03a7 100644
>> --- a/package/gcc/gcc.mk
>> +++ b/package/gcc/gcc.mk
>> @@ -90,7 +90,8 @@ HOST_GCC_COMMON_CONF_OPTS = \
>>  HOST_GCC_COMMON_CONF_ENV = \
>>  	MAKEINFO=missing
>> 
>> -GCC_COMMON_TARGET_CFLAGS = $(TARGET_CFLAGS)
>> +# gcc should not be built with NDEBUG enabled
>> +GCC_COMMON_TARGET_CFLAGS = $(TARGET_CFLAGS) -UNDEBUG
>>  GCC_COMMON_TARGET_CXXFLAGS = $(TARGET_CXXFLAGS)
>> 
>>  # used to fix 
>> ../../../../libsanitizer/libbacktrace/../../libbacktrace/elf.c:772:21: 
>> error: 'st.st_mode' may be used uninitialized in this function 
>> [-Werror=maybe-uninitialized]
>> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Buildroot] [PATCH 1/1] package/gcc: undefine NDEBUG directive
  2021-06-17 12:19 [Buildroot] [PATCH 1/1] package/gcc: undefine NDEBUG directive Andreas Ziegler
  2021-06-20 18:23 ` Romain Naour
@ 2021-07-04 19:58 ` Yann E. MORIN
  1 sibling, 0 replies; 4+ messages in thread
From: Yann E. MORIN @ 2021-07-04 19:58 UTC (permalink / raw)
  To: buildroot

Andreas, All,

On 2021-06-17 14:19 +0200, Andreas Ziegler spake thusly:
> GCC performs internal consistency checks that can be controlled with --enable-checking, but not completely removed for all stages of the build. One of these checks uses the assert macro from <assert.h>  Defining NDEBUG removes the assertion code, which is not anticipated in the gcc code. 
> 
> Undefine the NDEBUG flag for package/gcc to preserve assertions. 
> 
> This fixes the following error during build of GCC 10:
> 
> ../../../libgomp/target.c: In function ?gomp_unmap_vars_internal?:
> ../../../libgomp/target.c:1474:9: error: unused variable ?is_tgt_unmapped? [-Werror=unused-variable]
>  1474 |    bool is_tgt_unmapped = gomp_remove_var (devicep, k);
>       |         ^~~~~~~~~~~~~~~
> ../../../libgomp/target.c:1473:28: error: unused variable ?k_tgt? [-Werror=unused-variable]
>  1473 |    struct target_mem_desc *k_tgt = k->tgt;
>       |                            ^~~~~
> 
> Signed-off-by: Andreas Ziegler <br015@umbiko.net>

We are now no longer setting NDEBUG in the infra; see a1c7cff1a081.

So this patch is no longer needed; I've marked it as rejected.

Thanks!

Regards,
Yann E. MORIN.

> ---
>  package/gcc/gcc.mk | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk
> index ed9b93e50f..4ee32c03a7 100644
> --- a/package/gcc/gcc.mk
> +++ b/package/gcc/gcc.mk
> @@ -90,7 +90,8 @@ HOST_GCC_COMMON_CONF_OPTS = \
>  HOST_GCC_COMMON_CONF_ENV = \
>  	MAKEINFO=missing
>  
> -GCC_COMMON_TARGET_CFLAGS = $(TARGET_CFLAGS)
> +# gcc should not be built with NDEBUG enabled
> +GCC_COMMON_TARGET_CFLAGS = $(TARGET_CFLAGS) -UNDEBUG
>  GCC_COMMON_TARGET_CXXFLAGS = $(TARGET_CXXFLAGS)
>  
>  # used to fix ../../../../libsanitizer/libbacktrace/../../libbacktrace/elf.c:772:21: error: 'st.st_mode' may be used uninitialized in this function [-Werror=maybe-uninitialized]
> -- 
> 2.25.1
> 
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-07-04 19:58 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-17 12:19 [Buildroot] [PATCH 1/1] package/gcc: undefine NDEBUG directive Andreas Ziegler
2021-06-20 18:23 ` Romain Naour
2021-06-21  4:49   ` Andreas Ziegler
2021-07-04 19:58 ` Yann E. MORIN

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.