On Thu, Dec 03, 2020 at 04:06:50PM -0800, H.J. Lu via Gcc-patches wrote:
> When SECTION_RETAIN is used, definitions marked with used attribute and
> unmarked definitions are placed in the same section.  Instead of issue
> an error:
> 
> [hjl@gnu-cfl-2 gcc]$ /usr/gcc-11.0.0-x32/bin/gcc -S c.c 
> -fdiagnostics-plain-output
> c.c:2:49: error: ‘foo1’ causes a section type conflict with ‘foo2’
> c.c:1:54: note: ‘foo2’ was declared here
> [hjl@gnu-cfl-2 gcc]$
> 
> the first patch switches to a new section if the SECTION_RETAIN bit
> doesn't match.  The second optional patch issues a warning:
> 
> [hjl@gnu-cfl-2 gcc]$ ./xgcc -B./ -S c.c -fdiagnostics-plain-output
> c.c:2:49: warning: ‘foo1’ without ‘used’ attribute is placed in a section 
> with ‘foo2’ with ‘used’ attribute [-Wattributes]
> [hjl@gnu-cfl-2 gcc]$

I think the warning is useful, since we are modifying the structure of
the object file where the user may not expect it. It ensures they review
which declarations have "used" applied so they don't unexpectedly lose
parts of their program they wanted to keep by putting them in a
section that was marked "used" elsewhere.

> 
> H.J. Lu (2):
>   Switch to a new section if the SECTION_RETAIN bit doesn't match
>   Warn used and not used symbols in the same section

We should probably use a new PR to associate with these patches, rather
than PR/98121.

Your changes here address the issue exposed by glibc code, whilst 98121
was for the broader issue of whether "used" should apply SHF_GNU_RETAIN.

Let me know if you agree, and I'll create a new GCC PR for the specific
issue that was exposed by glibc. We should then mark 98121 as
resolved/rejected, since we are not changing whether "used" applies
SHF_GNU_RETAIN.

Thanks,
Jozef
> 
>  gcc/output.h                             |  2 +-
>  gcc/testsuite/c-c++-common/attr-used-5.c | 27 +++++++++++++++
>  gcc/testsuite/c-c++-common/attr-used-6.c | 27 +++++++++++++++
>  gcc/testsuite/c-c++-common/attr-used-7.c |  9 +++++
>  gcc/testsuite/c-c++-common/attr-used-8.c |  9 +++++
>  gcc/varasm.c                             | 43 +++++++++++++++++++++---
>  6 files changed, 112 insertions(+), 5 deletions(-)
>  create mode 100644 gcc/testsuite/c-c++-common/attr-used-5.c
>  create mode 100644 gcc/testsuite/c-c++-common/attr-used-6.c
>  create mode 100644 gcc/testsuite/c-c++-common/attr-used-7.c
>  create mode 100644 gcc/testsuite/c-c++-common/attr-used-8.c
> 
> -- 
> 2.28.0
> 

Reply via email to