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 >