Hello,

this patch makes sure that for pe(+)-coff targets always relocations
are allowed in readonly memory.
This fixes for x86_64-w64-mingw32 target some testcases.

ChangeLog

2012-06-27  Kai Tietz

        * config/i386/winnt.c (i386_pe_reloc_rw_mask): New function.
        * config/i386/i386-protos.h (i386_pe_reloc_rw_mask): Add
        prototype.
        * config/i386/cygming.h (TARGET_ASM_RELOC_RW_MASK): Define
        as i386_pe_reloc_rw_mask.

Tested for i686-pc-cygwin, i686-w64-mingw32, and x86_64-w64-mingw32.
Ok for apply?

Regards,
Kai

Index: config/i386/winnt.c
===================================================================
--- config/i386/winnt.c (revision 189009)
+++ config/i386/winnt.c (working copy)
@@ -421,6 +421,14 @@
   DECL_SECTION_NAME (decl) = build_string (len, string);
 }

+/* Local and global relocs can be placed always into readonly memory for
+   memory for PE-COFF targets.  */
+int
+i386_pe_reloc_rw_mask (void)
+{
+  return 0;
+}
+
 /* Select a set of attributes for section NAME based on the properties
    of DECL and whether or not RELOC indicates that DECL's initializer
    might contain runtime relocations.
Index: config/i386/i386-protos.h
===================================================================
--- config/i386/i386-protos.h   (revision 189009)
+++ config/i386/i386-protos.h   (working copy)
@@ -264,6 +264,8 @@
 extern bool i386_pe_type_dllimport_p (tree);
 extern bool i386_pe_type_dllexport_p (tree);

+extern int i386_pe_reloc_rw_mask (void);
+
 extern rtx maybe_get_pool_constant (rtx);

 extern char internal_label_prefix[16];
Index: config/i386/cygming.h
===================================================================
--- config/i386/cygming.h       (revision 189009)
+++ config/i386/cygming.h       (working copy)
@@ -225,6 +225,11 @@

 #define SUBTARGET_ENCODE_SECTION_INFO  i386_pe_encode_section_info

+/* Local and global relocs can be placed always into readonly memory
+   for PE-COFF targets.  */
+#undef TARGET_ASM_RELOC_RW_MASK
+#define TARGET_ASM_RELOC_RW_MASK i386_pe_reloc_rw_mask
+
 /* Output a common block.  */
 #undef ASM_OUTPUT_ALIGNED_DECL_COMMON
 #define ASM_OUTPUT_ALIGNED_DECL_COMMON \

Reply via email to