From 86f27ba678fb1db724b0cc1dba3576f8ff0647e0 Mon Sep 17 00:00:00 2001 From: Dinar Temirbulatov Date: Thu, 18 Nov 2010 01:54:05 +0300 Subject: re PR middle-end/31490 (Compile error section type conflict) 2010-11-17 Dinar Temirbulatov Steve Ellcey PR middle-end/31490 * varasm.c (categorize_decl_for_section): Ignore reloc_rw_mask if section attribute used. Co-Authored-By: Steve Ellcey From-SVN: r166887 --- gcc/varasm.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'gcc/varasm.c') diff --git a/gcc/varasm.c b/gcc/varasm.c index 215e0edbd59..6171e30799a 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -6102,13 +6102,17 @@ categorize_decl_for_section (const_tree decl, int reloc) /* Here the reloc_rw_mask is not testing whether the section should 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 ()) + minimize cache misses inside the dynamic linker. If the data + has a section attribute, ignore reloc_rw_mask() so that all data + in a given named section is catagorized in the same way. */ + 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 -- cgit v1.2.1