* pe-dll.c (make_one): Make text section readonly.
authorNick Clifton <nickc@redhat.com>
Thu, 18 Mar 2010 10:51:31 +0000 (10:51 +0000)
committerNick Clifton <nickc@redhat.com>
Thu, 18 Mar 2010 10:51:31 +0000 (10:51 +0000)
        (make_one): Add *ABS* symbol @feat.00 with value 1 to tag
        the jump stub on X86 as /SAFESEH compatible for
        native toolchains.

ld/ChangeLog
ld/pe-dll.c

index 96336012e39cdddd94983837ad492854dc287d30..424b7e836fb2e135f03f7daf4f37ec7c06a4b76f 100644 (file)
@@ -1,3 +1,10 @@
+2010-03-18  Doug Semler  <dougsemler@gmail.com>
+
+       * pe-dll.c (make_one): Make text section readonly.
+       (make_one): Add *ABS* symbol @feat.00 with value 1 to tag
+       the jump stub on X86 as /SAFESEH compatible for
+       native toolchains.
+
 2010-03-17  Alan Modra  <amodra@gmail.com>
 
        * ldlang.c (lang_size_sections_1): Remove "s" param.  Set "s" from
index 2ddbdc16c4dfacde5406cb7ca3a9af08737a76fc..ad5f82a4f047ff6d281e6aadcb382120a3dbf92a 100644 (file)
@@ -1,6 +1,6 @@
 /* Routines to help build PEI-format DLLs (Win32 etc)
    Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
-   2008, 2009 Free Software Foundation, Inc.
+   2008, 2009, 2010 Free Software Foundation, Inc.
    Written by DJ Delorie <dj@cygnus.com>
 
    This file is part of the GNU Binutils.
@@ -2096,8 +2096,9 @@ make_one (def_file_export *exp, bfd *parent, bfd_boolean include_jmp_stub)
   bfd_set_arch_mach (abfd, pe_details->bfd_arch, 0);
 
   symptr = 0;
-  symtab = xmalloc (11 * sizeof (asymbol *));
-  tx  = quick_section (abfd, ".text",    SEC_CODE|SEC_HAS_CONTENTS, 2);
+  symtab = xmalloc (12 * sizeof (asymbol *));
+
+  tx  = quick_section (abfd, ".text", SEC_CODE | SEC_HAS_CONTENTS | SEC_READONLY, 2);
   id7 = quick_section (abfd, ".idata$7", SEC_HAS_CONTENTS, 2);
   id5 = quick_section (abfd, ".idata$5", SEC_HAS_CONTENTS, 2);
   id4 = quick_section (abfd, ".idata$4", SEC_HAS_CONTENTS, 2);
@@ -2146,6 +2147,9 @@ make_one (def_file_export *exp, bfd *parent, bfd_boolean include_jmp_stub)
 #ifdef pe_use_x86_64
          quick_reloc (abfd, 2, BFD_RELOC_32_PCREL, 2);
 #else
+         /* Mark this object as SAFESEH compatible.  */
+         quick_symbol (abfd, "", "@feat.00", "", bfd_abs_section_ptr,
+                       BSF_LOCAL, 1);
           quick_reloc (abfd, 2, BFD_RELOC_32, 2);
 #endif
          break;