diff mbox

[mingw/cygwin] : Allow relocated const data to be put in read-only section by default

Message ID CAEwic4Zbnps2dxvzGiDh7-BDpS4a4X_JJ3Zfmdi+bPY4dkZ_Ag@mail.gmail.com
State New
Headers show

Commit Message

Kai Tietz March 3, 2012, 9:32 a.m. UTC
Hi,

this patch allows that relocated const data is placed into .rdata.  To provide
old behavior for older runtimes not supporting pseudo-relocation operating on
read-only sections, the option -fwritable-relocated-rdata can be used.

ChangeLog

2012-03-03  Kai Tietz  <ktietz@redhat.com>

	* doc/invoke.texi (fwritable-relocated-rdata): Document
	new Cygwin/MinGW target option.
	* config/i386/winnt.c (i386_pe_unique_section): Ignore
	reloc if flag -fwritable-relocated-rdata is not set.
	(i386_pe_section_type_flags): Likewise.
	* config/i386/cygming.opt (fwritable-relocated-rdata):
	Add new flag variable flag_writable_rel_rdata.

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

Regards,
Kai

Comments

Kai Tietz March 7, 2012, 9:36 a.m. UTC | #1
Hi,

as from Dave's side there is no objection, I committed this patch to
4.8 at revision 185027.

Regards,
Kai

2012/3/3 Kai Tietz <ktietz70@googlemail.com>:
> Hi,
>
> this patch allows that relocated const data is placed into .rdata.  To provide
> old behavior for older runtimes not supporting pseudo-relocation operating on
> read-only sections, the option -fwritable-relocated-rdata can be used.
>
> ChangeLog
>
> 2012-03-03  Kai Tietz  <ktietz@redhat.com>
>
>        * doc/invoke.texi (fwritable-relocated-rdata): Document
>        new Cygwin/MinGW target option.
>        * config/i386/winnt.c (i386_pe_unique_section): Ignore
>        reloc if flag -fwritable-relocated-rdata is not set.
>        (i386_pe_section_type_flags): Likewise.
>        * config/i386/cygming.opt (fwritable-relocated-rdata):
>        Add new flag variable flag_writable_rel_rdata.
>
> Tested for i686-w64-mingw32, x86_64-w64-mingw32, and i686-pc-cygwin.
> Ok for apply?
>
> Regards,
> Kai
>
> Index: doc/invoke.texi
> ===================================================================
> --- doc/invoke.texi     (revision 184760)
> +++ doc/invoke.texi     (working copy)
> @@ -13826,6 +13826,13 @@
>  Windows, as there the user32 API, which is used to set executable
>  privileges, isn't available.
>
> +@item -fwritable-relocated-rdata
> +@opindex fno-writable-relocated-rdata
> +This option is available for MinGW and Cygwin targets.  It specifies
> +that relocated-data in read-only section is put into .data
> +section.  This is a necessary for older runtimes not supporting
> +modification of .rdata sections for pseudo-relocation.
> +
>  @item -mpe-aligned-commons
>  @opindex mpe-aligned-commons
>  This option is available for Cygwin and MinGW targets.  It
> Index: config/i386/winnt.c
> ===================================================================
> --- config/i386/winnt.c (revision 184760)
> +++ config/i386/winnt.c (working copy)
> @@ -395,6 +395,10 @@
>   const char *name, *prefix;
>   char *string;
>
> +  /* Ignore RELOC, if we are allowed to put relocated
> +     const data into read-only section.  */
> +  if (!flag_writable_rel_rdata)
> +    reloc = 0;
>   name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
>   name = i386_pe_strip_name_encoding_full (name);
>
> @@ -441,6 +445,10 @@
>   unsigned int flags;
>   unsigned int **slot;
>
> +  /* Ignore RELOC, if we are allowed to put relocated
> +     const data into read-only section.  */
> +  if (!flag_writable_rel_rdata)
> +    reloc = 0;
>   /* The names we put in the hashtable will always be the unique
>      versions given to us by the stringtable, so we can just use
>      their addresses as the keys.  */
> Index: config/i386/cygming.opt
> ===================================================================
> --- config/i386/cygming.opt     (revision 184760)
> +++ config/i386/cygming.opt     (working copy)
> @@ -53,4 +53,8 @@
>  posix
>  Driver
>
> +fwritable-relocated-rdata
> +Common Report Var(flag_writable_rel_rdata) Init(0)
> +Put relocated read-only data into .data section.
> +
>  ; Retain blank line above
diff mbox

Patch

Index: doc/invoke.texi
===================================================================
--- doc/invoke.texi	(revision 184760)
+++ doc/invoke.texi	(working copy)
@@ -13826,6 +13826,13 @@ 
 Windows, as there the user32 API, which is used to set executable
 privileges, isn't available.

+@item -fwritable-relocated-rdata
+@opindex fno-writable-relocated-rdata
+This option is available for MinGW and Cygwin targets.  It specifies
+that relocated-data in read-only section is put into .data
+section.  This is a necessary for older runtimes not supporting
+modification of .rdata sections for pseudo-relocation.
+
 @item -mpe-aligned-commons
 @opindex mpe-aligned-commons
 This option is available for Cygwin and MinGW targets.  It
Index: config/i386/winnt.c
===================================================================
--- config/i386/winnt.c	(revision 184760)
+++ config/i386/winnt.c	(working copy)
@@ -395,6 +395,10 @@ 
   const char *name, *prefix;
   char *string;

+  /* Ignore RELOC, if we are allowed to put relocated
+     const data into read-only section.  */
+  if (!flag_writable_rel_rdata)
+    reloc = 0;
   name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
   name = i386_pe_strip_name_encoding_full (name);

@@ -441,6 +445,10 @@ 
   unsigned int flags;
   unsigned int **slot;

+  /* Ignore RELOC, if we are allowed to put relocated
+     const data into read-only section.  */
+  if (!flag_writable_rel_rdata)
+    reloc = 0;
   /* The names we put in the hashtable will always be the unique
      versions given to us by the stringtable, so we can just use
      their addresses as the keys.  */
Index: config/i386/cygming.opt
===================================================================
--- config/i386/cygming.opt	(revision 184760)
+++ config/i386/cygming.opt	(working copy)
@@ -53,4 +53,8 @@ 
 posix
 Driver

+fwritable-relocated-rdata
+Common Report Var(flag_writable_rel_rdata) Init(0)
+Put relocated read-only data into .data section.
+
 ; Retain blank line above