]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
AVR: target/122516: Make attribute "retain" work. releases/gcc-13
authorGeorg-Johann Lay <avr@gjlay.de>
Thu, 6 Nov 2025 19:20:49 +0000 (20:20 +0100)
committerGeorg-Johann Lay <avr@gjlay.de>
Thu, 6 Nov 2025 21:22:59 +0000 (22:22 +0100)
Due to some quirks in crtstuff.c, attribute "retain" requires
some features that avr doesn't implement -- even though it
doesnt't even use crtstuff.  This patch works around that.

PR target/122516
gcc/
* config/avr/elf.h (SUPPORTS_SHF_GNU_RETAIN): Define if
HAVE_GAS_SHF_GNU_RETAIN.

(cherry picked from commit d5ede6fff1ff19738d60350856ab852522809068)

gcc/config/avr/elf.h

index 86be435319ea931b5ff612b72c4c8d3603cb8d82..42c0d67ddfcccd8afa82a9e0239c3ab877c6ce60 100644 (file)
    along with GCC; see the file COPYING3.  If not see
    <http://www.gnu.org/licenses/>.  */
 
+/* defaults.h requires HAVE_INITFINI_ARRAY_SUPPORT to be present
+   in order for attribute "retain" to be recognized.  This is due
+   to some quirks in crtstuff.h -- which isn't even used by avr.
+   All we need is that Binutils supports the "R"etain section flag.
+   If that's the case, define SUPPORTS_SHF_GNU_RETAIN so that
+   defaults.h doesn't define it to 0.  */
+#if defined(IN_GCC) && !defined(USED_FOR_TARGET) && !defined(GENERATOR_FILE)
+#include "auto-host.h" /* HAVE_GAS_SHF_GNU_RETAIN */
+#if HAVE_GAS_SHF_GNU_RETAIN
+#undef SUPPORTS_SHF_GNU_RETAIN
+#define SUPPORTS_SHF_GNU_RETAIN 1
+#endif
+#endif
 
 /* Overriding some definitions from elfos.h for AVR.  */