]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
AVR: target/122516: Make attribute "retain" work.
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 19:26:50 +0000 (20:26 +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.

gcc/config/avr/elf.h

index d240f8549d79137f8c4d7685f5d68572c6dbc8dd..e0f8a8770ba3bcfa87af977bcd5872effecb9e0c 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.  */