Fix "noinit" attribute being ignored for -O0 and -fdata-sections
authorJozef Lawrynowicz <jozef.l@mittosystems.com>
Mon, 23 Nov 2020 11:43:39 +0000 (11:43 +0000)
committerJozef Lawrynowicz <jozef.l@mittosystems.com>
Mon, 23 Nov 2020 11:43:39 +0000 (11:43 +0000)
commitb510765dedfec573c756cb1fcfcb5b0c3830c5e9
treefc1c04fa396e7abcbd4fb88b6cf1d8b1fd091794
parent4a8c54359a593e4e53192303159144dd70bfced1
Fix "noinit" attribute being ignored for -O0 and -fdata-sections

Variables with the "noinit" attribute are ignored at -O0 because they
are treated like a regular bss variable and placed in the .bss section.

With -fdata-sections they are ignored because they are not handled in
resolve_unique_section.

gcc/ChangeLog:

* tree.h (DECL_NOINIT_P): Define.
* varasm.c (DECL_NOINIT_P): Check DECL_NOINIT_P before using
unnamed bss/lcomm sections for bss_initializer variables.
(default_elf_select_section): Use DECL_NOINIT_P instead of
looking up attribute for .noinit section selection.
(default_unique_section): Check DECL_NOINIT_P for .noinit
section selection.

gcc/testsuite/ChangeLog:

* gcc.c-torture/execute/noinit-attribute.c: Don't override
optimization options set by torture test harness.
* lib/target-supports.exp (check_effective_target_noinit): Adjust
comment formatting.
gcc/testsuite/gcc.c-torture/execute/noinit-attribute.c
gcc/testsuite/lib/target-supports.exp
gcc/tree.h
gcc/varasm.c