From: Georg-Johann Lay Date: Fri, 17 Nov 2023 11:51:16 +0000 (+0100) Subject: PR target/53372: Don't ignore section attribute with address-space. X-Git-Tag: basepoints/gcc-15~4587 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=68221c54a9752dbf131c231413edfd21046f8dad;p=thirdparty%2Fgcc.git PR target/53372: Don't ignore section attribute with address-space. gcc/ PR target/53372 * config/avr/avr.cc (avr_asm_named_section) [AVR_SECTION_PROGMEM]: Only return some .progmem*.data section if the user did not specify a section attribute. (avr_section_type_flags) [avr_progmem_p]: Unset SECTION_NOTYPE in returned section flags. gcc/testsuite/ PR target/53372 * gcc.target/avr/pr53372-1.c: New test. * gcc.target/avr/pr53372-2.c: New test. --- diff --git a/gcc/config/avr/avr.cc b/gcc/config/avr/avr.cc index 5e0217de36fc..c3e0995dfc3b 100644 --- a/gcc/config/avr/avr.cc +++ b/gcc/config/avr/avr.cc @@ -10873,7 +10873,12 @@ avr_asm_init_sections (void) static void avr_asm_named_section (const char *name, unsigned int flags, tree decl) { - if (flags & AVR_SECTION_PROGMEM) + if (flags & AVR_SECTION_PROGMEM + // Only use section .progmem*.data if there is no attribute section. + && ! (decl + && DECL_SECTION_NAME (decl) + && symtab_node::get (decl) + && ! symtab_node::get (decl)->implicit_section)) { addr_space_t as = (flags & AVR_SECTION_PROGMEM) / SECTION_MACH_DEP; const char *old_prefix = ".rodata"; @@ -10942,6 +10947,7 @@ avr_section_type_flags (tree decl, const char *name, int reloc) flags |= as * SECTION_MACH_DEP; flags &= ~SECTION_WRITE; flags &= ~SECTION_BSS; + flags &= ~SECTION_NOTYPE; } return flags; diff --git a/gcc/testsuite/gcc.target/avr/pr53372-1.c b/gcc/testsuite/gcc.target/avr/pr53372-1.c new file mode 100644 index 000000000000..7d3f193e79a3 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/pr53372-1.c @@ -0,0 +1,10 @@ +/* { dg-do compile { target { ! avr_tiny } } } */ +/* { dg-options "-std=gnu99" } */ + +__attribute__((__section__("fffsection"))) +const __flash char fff = 123; + +const __flash char ppp = 124; + +/* { dg-final { scan-assembler ".section fffsection,\"a\",@progbits" } } */ +/* { dg-final { scan-assembler ".section .progmem.data,\"a\",@progbits" } } */ diff --git a/gcc/testsuite/gcc.target/avr/pr53372-2.c b/gcc/testsuite/gcc.target/avr/pr53372-2.c new file mode 100644 index 000000000000..79ef2b7bbdbd --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/pr53372-2.c @@ -0,0 +1,10 @@ +/* { dg-do compile { target { ! avr_tiny } } } */ +/* { dg-options "-std=gnu99 -fdata-sections" } */ + +__attribute__((__section__("fffsection"))) +const __flash char fff = 123; + +const __flash char ppp = 124; + +/* { dg-final { scan-assembler ".section fffsection,\"a\",@progbits" } } */ +/* { dg-final { scan-assembler ".section .progmem.data.ppp,\"a\",@progbits" } } */