* peXXigen.c (_bfd_XXi_swap_scnhdr_out): Don't remove
authorDanny Smith <dannysmith@users.sourceforge.net>
Tue, 20 Jan 2004 21:04:19 +0000 (21:04 +0000)
committerDanny Smith <dannysmith@users.sourceforge.net>
Tue, 20 Jan 2004 21:04:19 +0000 (21:04 +0000)
IMAGE_SCN_MEM_WRITE flag from .text section if WP_TEXT
flag has been cleared.

bfd/ChangeLog
bfd/peXXigen.c

index 2330758524db047f3af8d8c522500ccb2a79f02a..6818677152fd2acf48d855f67535e456a114d6f7 100644 (file)
@@ -1,3 +1,9 @@
+2004-01-20  Danny Smith  <dannysmith@users.sourceforge.net>
+
+       * peXXigen.c (_bfd_XXi_swap_scnhdr_out): Don't remove
+       IMAGE_SCN_MEM_WRITE flag from .text section if WP_TEXT
+       flag has been cleared.
+
 2004-01-19  Kazu Hirata  <kazu@cs.umass.edu>
 
        * coff-h8300.c: Add and adjust comments about relaxation.
index 2fe294fe1bfbfbfad71ae4512763461d5d3e2497..559f2a2f67b50c8e3f71c1a91021aeb1f3a15556 100644 (file)
@@ -1,5 +1,5 @@
 /* Support for the generic parts of PE/PEI; the common executable parts.
-   Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+   Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
    Free Software Foundation, Inc.
    Written by Cygnus Solutions.
 
@@ -985,13 +985,21 @@ _bfd_XXi_swap_scnhdr_out (abfd, in, out)
     pe_required_section_flags * p;
     int flags = scnhdr_int->s_flags;
 
+    /* We have defaulted to adding the IMAGE_SCN_MEM_WRITE flag, but now
+       we know exactly what this specific section wants so we remove it
+       and then allow the must_have field to add it back in if necessary.
+       However, we don't remove IMAGE_SCN_MEM_WRITE flag from .text if the
+       default WP_TEXT file flag has been cleared.  WP_TEXT may be cleared
+       by ld --enable-auto-import (if auto-import is actually needed),
+       by ld --omagic, or by obcopy --writable-text.  */
+  
+    if (strcmp (scnhdr_int->s_name, ".text") 
+       || (bfd_get_file_flags (abfd) & WP_TEXT))
+      flags &= ~IMAGE_SCN_MEM_WRITE;
+
     for (p = known_sections; p->section_name; p++)
       if (strcmp (scnhdr_int->s_name, p->section_name) == 0)
        {
-         /* We have defaulted to adding the IMAGE_SCN_MEM_WRITE flag, but now
-            we know exactly what this specific section wants so we remove it
-            and then allow the must_have field to add it back in if necessary.  */
-         flags &= ~IMAGE_SCN_MEM_WRITE;
          flags |= p->must_have;
          break;
        }