------- Comment #9 from dtemirbulatov at gmail dot com  2007-05-16 22:47 -------
This patch fixes both testcases

--- gcc/varasm.c.orig   2007-05-16 21:32:11.000000000 +0400
+++ gcc/varasm.c        2007-05-16 21:36:14.000000000 +0400
@@ -5762,12 +5762,14 @@ categorize_decl_for_section (tree decl, 
             be read-only or not, but whether the dynamic link will have to
             do something.  If so, we wish to segregate the data in order to
             minimize cache misses inside the dynamic linker.  */
-         if (reloc & targetm.asm_out.reloc_rw_mask ())
+         if (reloc & targetm.asm_out.reloc_rw_mask ()
+             && !lookup_attribute ("section", DECL_ATTRIBUTES (decl)))
            ret = reloc == 1 ? SECCAT_DATA_REL_LOCAL : SECCAT_DATA_REL;
          else
            ret = SECCAT_DATA;
        }
-      else if (reloc & targetm.asm_out.reloc_rw_mask ())
+      else if (reloc & targetm.asm_out.reloc_rw_mask ()
+              && !lookup_attribute ("section", DECL_ATTRIBUTES (decl)))
        ret = reloc == 1 ? SECCAT_DATA_REL_RO_LOCAL : SECCAT_DATA_REL_RO;
       else if (reloc || flag_merge_constants < 2)
        /* C and C++ don't allow different variables to share the same

, bootstraped and tested on i686-pc-linux-gnu with no new regressions, tested
4.2 version with gdb-sim on following architectures arm-elf, arm-none-eabi,
mips-elf, mipsisa64-elf, powerpc-eabisim, sh-elf, powerpc-unknown-eabispe with
no new regressions


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31490

Reply via email to