This patch adds a default manifest in to the final links performed by the Cygwin...
authorNick Clifton <nickc@redhat.com>
Thu, 27 Feb 2014 14:09:29 +0000 (14:09 +0000)
committerNick Clifton <nickc@redhat.com>
Thu, 27 Feb 2014 14:13:43 +0000 (14:13 +0000)
The manifest is necessary in order for the linked binaries to be executed in a Windows 8 environment.

The manifest is added using a linker script so that this feature will be compiler-neutral.  The resource
merging code in the linker means that if an application provides its own manifest then the default
manifest will be ignored.

* configure.in (all_emul_extra_binaries): New variable.  Populated
by invoking configure.tgt.
(EMUL_EXTRA_BINARIES): New substitution.
* configure: Regenerate.
* configure.tgt (target_extra_binaries): New variable.  Set to
default-manifest.o for Cygwin and MinGW targets.
* Makefile.am (EMUL_EXTRA_BINARIES): New variable.  Initialised
by the configure script.
(ALL_EMUL_EXTRA_BINARIES): New variable.
(default-manifest.o): New rule to build the default manifest.
(ld_new_DEPENDENCIES): Add EMUL_EXTRA_BINARIES.
(install-data-local): Add EMUL_EXTRA_BINARIES.
* Makefile.in: Regenerate.
* ld.texinfo: Document default manifest support.
* emulparams/i386pe.sh (DEFAULT_MANIFEST): Define.
* emulparams/i386pep.sh (DEFAULT_MANIFEST): Define.
* emultempl/default-manifest.rc: New file.
* scripttempl/pe.sc (R_RSRC): Include DEFAULT_MANIFEST, if defined.
* scripttempl/pep.sc (R_RSRC): Likewise.

* ld-pe/longsecn-1.d: Allow for extra sections.
* ld-pe/longsecn-2.d: Likewise.
* ld-pe/longsecn.d: Likewise.
* ld-pe/secrel.d: Likewise.

17 files changed:
ld/ChangeLog
ld/Makefile.am
ld/Makefile.in
ld/configure
ld/configure.in
ld/configure.tgt
ld/emulparams/i386pe.sh
ld/emulparams/i386pep.sh
ld/emultempl/default-manifest.rc [new file with mode: 0644]
ld/ld.texinfo
ld/scripttempl/pe.sc
ld/scripttempl/pep.sc
ld/testsuite/ChangeLog
ld/testsuite/ld-pe/longsecn-1.d
ld/testsuite/ld-pe/longsecn-2.d
ld/testsuite/ld-pe/longsecn.d
ld/testsuite/ld-pe/secrel.d

index cc814c9bc18069f00e7802ef28d4fbbffbb579bd..a0c52842e948abede7acbea7df26fae6265adf42 100644 (file)
@@ -8,6 +8,28 @@
        (PARSE_AND_LIST_LONGOPTS, PARSE_AND_LIST_OPTIONS): Exclude
        -secure-plt, -bss-plt and -sdata-got when vxworks.
 
+2014-02-27  Nick Clifton  <nickc@redhat.com>
+
+       * configure.in (all_emul_extra_binaries): New variable.  Populated
+       by invoking configure.tgt.
+       (EMUL_EXTRA_BINARIES): New substitution.
+       * configure: Regenerate.
+       * configure.tgt (target_extra_binaries): New variable.  Set to
+       default-manifest.o for Cygwin and MinGW targets.
+       * Makefile.am (EMUL_EXTRA_BINARIES): New variable.  Initialised
+       by the configure script.
+       (ALL_EMUL_EXTRA_BINARIES): New variable.
+       (default-manifest.o): New rule to build the default manifest.
+       (ld_new_DEPENDENCIES): Add EMUL_EXTRA_BINARIES.
+       (install-data-local): Add EMUL_EXTRA_BINARIES.
+       * Makefile.in: Regenerate.
+       * ld.texinfo: Document default manifest support.
+       * emulparams/i386pe.sh (DEFAULT_MANIFEST): Define.
+       * emulparams/i386pep.sh (DEFAULT_MANIFEST): Define.
+       * emultempl/default-manifest.rc: New file.
+       * scripttempl/pe.sc (R_RSRC): Include DEFAULT_MANIFEST, if defined.
+       * scripttempl/pep.sc (R_RSRC): Likewise.
+
 2014-02-26  Dan Mick  <dan.mick@inktank.com>
 
        PR ld/16569
index 5968668c42e7915ffb65cc9f2587285bfa3e45a5..e15dfac15a9f739277214e687c794a0eae41cd1e 100644 (file)
@@ -59,6 +59,8 @@ scriptdir = $(tooldir)/lib
 EMUL = @EMUL@
 EMULATION_OFILES = @EMULATION_OFILES@
 EMUL_EXTRA_OFILES = @EMUL_EXTRA_OFILES@
+EMUL_EXTRA_BINARIES = @EMUL_EXTRA_BINARIES@
+
 
 # Search path to override the default search path for -lfoo libraries.
 # If LIB_PATH is empty, the ones in the script (if any) are left alone.
@@ -489,6 +491,9 @@ ALL_EMUL_EXTRA_OFILES = \
        pe-dll.@OBJEXT@ \
        pep-dll.@OBJEXT@
 
+ALL_EMUL_EXTRA_BINARIES = \
+       default-manifest.@OBJEXT@
+
 CFILES = ldctor.c ldemul.c ldexp.c ldfile.c ldlang.c \
        ldmain.c ldmisc.c ldver.c ldwrite.c lexsup.c \
        mri.c ldcref.c pe-dll.c pep-dll.c ldlex-wrapper.c \
@@ -1921,6 +1926,10 @@ eshlelf64_nbsd.c: $(srcdir)/emulparams/shlelf64_nbsd.sh \
   $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} shlelf64_nbsd "$(tdir_shlelf64_nbsd)"
 
+# Rule to create a manifest file for Cygwin and Mingw.
+default-manifest.o: $(srcdir)/emultempl/default-manifest.rc
+       ../binutils/windres -o $@ $<
+
 # We need this for automake to use YLWRAP.
 EXTRA_ld_new_SOURCES = deffilep.y ldlex.l
 # Allow dependency tracking to work for these files, too.
@@ -1928,7 +1937,8 @@ EXTRA_ld_new_SOURCES += pep-dll.c pe-dll.c
 
 ld_new_SOURCES = ldgram.y ldlex-wrapper.c lexsup.c ldlang.c mri.c ldctor.c ldmain.c \
        ldwrite.c ldexp.c ldemul.c ldver.c ldmisc.c ldfile.c ldcref.c $(PLUGIN_C)
-ld_new_DEPENDENCIES = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) $(BFDLIB) $(LIBIBERTY) $(LIBINTL_DEP)
+ld_new_DEPENDENCIES = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) $(EMUL_EXTRA_BINARIES) \
+                     $(BFDLIB) $(LIBIBERTY) $(LIBINTL_DEP)
 ld_new_LDADD = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) $(BFDLIB) $(LIBIBERTY) $(LIBINTL)
 
 # Dependency tracking for the generated emulation files.
@@ -2074,9 +2084,9 @@ install-exec-local: ld-new$(EXEEXT) install-binPROGRAMS
          fi; \
        fi
 
-install-data-local:
+install-data-local: $(EMUL_EXTRA_BINARIES)
        $(mkinstalldirs) $(DESTDIR)$(scriptdir)/ldscripts
-       for f in ldscripts/*; do \
+       for f in ldscripts/* $(EMUL_EXTRA_BINARIES); do \
          $(INSTALL_DATA) $$f $(DESTDIR)$(scriptdir)/$$f ; \
        done
 
index 59cba73cd649c2ddac8b5405fd22b3877f488ec3..1a3d9ac0d9a84ea499352d5f6bdec13dd928c497 100644 (file)
@@ -219,6 +219,7 @@ EGREP = @EGREP@
 EMUL = @EMUL@
 EMULATION_LIBPATH = @EMULATION_LIBPATH@
 EMULATION_OFILES = @EMULATION_OFILES@
+EMUL_EXTRA_BINARIES = @EMUL_EXTRA_BINARIES@
 EMUL_EXTRA_OFILES = @EMUL_EXTRA_OFILES@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
@@ -388,6 +389,7 @@ AM_CFLAGS = $(WARN_CFLAGS)
 # We can't put the scripts in $(datadir) because the SEARCH_DIR
 # directives need to be different for native and cross linkers.
 scriptdir = $(tooldir)/lib
+EMUL_DEPS = 
 BASEDIR = $(srcdir)/..
 BFDDIR = $(BASEDIR)/bfd
 INCDIR = $(BASEDIR)/include
@@ -795,6 +797,9 @@ ALL_EMUL_EXTRA_OFILES = \
        pe-dll.@OBJEXT@ \
        pep-dll.@OBJEXT@
 
+ALL_EMUL_EXTRA_BINARIES = \
+       default-manifest.@OBJEXT@
+
 CFILES = ldctor.c ldemul.c ldexp.c ldfile.c ldlang.c \
        ldmain.c ldmisc.c ldver.c ldwrite.c lexsup.c \
        mri.c ldcref.c pe-dll.c pep-dll.c ldlex-wrapper.c \
@@ -838,7 +843,9 @@ EXTRA_ld_new_SOURCES = deffilep.y ldlex.l pep-dll.c pe-dll.c \
 ld_new_SOURCES = ldgram.y ldlex-wrapper.c lexsup.c ldlang.c mri.c ldctor.c ldmain.c \
        ldwrite.c ldexp.c ldemul.c ldver.c ldmisc.c ldfile.c ldcref.c $(PLUGIN_C)
 
-ld_new_DEPENDENCIES = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) $(BFDLIB) $(LIBIBERTY) $(LIBINTL_DEP)
+ld_new_DEPENDENCIES = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) $(EMUL_EXTRA_BINARIES) \
+                     $(BFDLIB) $(LIBIBERTY) $(LIBINTL_DEP)
+
 ld_new_LDADD = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) $(BFDLIB) $(LIBIBERTY) $(LIBINTL)
 
 # A test program for C++ constructors and destructors.
@@ -3353,6 +3360,10 @@ eshlelf64_nbsd.c: $(srcdir)/emulparams/shlelf64_nbsd.sh \
   $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} shlelf64_nbsd "$(tdir_shlelf64_nbsd)"
 
+# Rule to create a manifest file for Cygwin and Mingw.
+default-manifest.o: $(srcdir)/emultempl/default-manifest.rc
+       ../binutils/windres -o $@ $<
+
 check-DEJAGNU: site.exp
        srcroot=`cd $(srcdir) && pwd`; export srcroot; \
        r=`pwd`; export r; \
@@ -3438,9 +3449,9 @@ install-exec-local: ld-new$(EXEEXT) install-binPROGRAMS
          fi; \
        fi
 
-install-data-local:
+install-data-local: $(EMUL_EXTRA_BINARIES)
        $(mkinstalldirs) $(DESTDIR)$(scriptdir)/ldscripts
-       for f in ldscripts/*; do \
+       for f in ldscripts/* $(EMUL_EXTRA_BINARIES); do \
          $(INSTALL_DATA) $$f $(DESTDIR)$(scriptdir)/$$f ; \
        done
 diststuff: info $(EXTRA_DIST)
index 8452a13876555fa2c751e2087b9b100b1e9378cc..30c6a36397b4c8a677e21c0c303df460c203cbe8 100755 (executable)
@@ -605,6 +605,7 @@ LIBOBJS
 TESTBFDLIB
 EMULATION_LIBPATH
 LIB_PATH
+EMUL_EXTRA_BINARIES
 EMUL_EXTRA_OFILES
 EMULATION_OFILES
 EMUL
@@ -12193,7 +12194,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12196 "configure"
+#line 12197 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12299,7 +12300,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12302 "configure"
+#line 12303 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -16837,6 +16838,7 @@ all_targets=
 EMUL=
 all_emuls=
 all_emul_extras=
+all_emul_extra_binaries=
 all_libpath=
 
 rm -f tdirs
          ;;
        esac
     done
+
+    for i in $targ_extra_binaries; do
+       case " $all_emul_extra_binaries " in
+       *" ${i} "*) ;;
+       *)
+         all_emul_extra_binaries="$all_emul_extra_binaries ${i}"
+         ;;
+       esac
+    done
   fi
 done
 
@@ -16959,14 +16970,17 @@ if test x${all_targets} = xtrue; then
     EMULATION_OFILES='$(ALL_EMULATIONS)'
   fi
   EMUL_EXTRA_OFILES='$(ALL_EMUL_EXTRA_OFILES)'
+  EMUL_EXTRA_BINARIES='$(ALL_EMUL_EXTRA_BINARIES)'
 else
   EMULATION_OFILES=$all_emuls
   EMUL_EXTRA_OFILES=$all_emul_extras
+  EMUL_EXTRA_BINARIES=$all_emul_extra_binaries
 fi
 
 
 
 
+
 EMULATION_LIBPATH=$all_libpath
 
 
index 619c15161cf73497880b10143502aafbd1397c42..26ac5827467bf2b25247730265aea131623003b3 100644 (file)
@@ -275,6 +275,7 @@ all_targets=
 EMUL=
 all_emuls=
 all_emul_extras=
+all_emul_extra_binaries=
 all_libpath=
 
 dnl We need to get an arbitrary number of tdir definitions into
@@ -353,6 +354,15 @@ do
          ;;
        esac
     done
+
+    for i in $targ_extra_binaries; do
+       case " $all_emul_extra_binaries " in
+       *" ${i} "*) ;;
+       *)
+         all_emul_extra_binaries="$all_emul_extra_binaries ${i}"
+         ;;
+       esac
+    done
   fi
 done
 
@@ -368,12 +378,15 @@ if test x${all_targets} = xtrue; then
     EMULATION_OFILES='$(ALL_EMULATIONS)'
   fi
   EMUL_EXTRA_OFILES='$(ALL_EMUL_EXTRA_OFILES)'
+  EMUL_EXTRA_BINARIES='$(ALL_EMUL_EXTRA_BINARIES)'
 else
   EMULATION_OFILES=$all_emuls
   EMUL_EXTRA_OFILES=$all_emul_extras
+  EMUL_EXTRA_BINARIES=$all_emul_extra_binaries
 fi
 AC_SUBST(EMULATION_OFILES)
 AC_SUBST(EMUL_EXTRA_OFILES)
+AC_SUBST(EMUL_EXTRA_BINARIES)
 AC_SUBST(LIB_PATH)
 
 EMULATION_LIBPATH=$all_libpath
index c2c3eabfa40ac1fedfd8c6fbda5a7db2ec95032c..2f7d60a7ad2722084655a3a14bfc5e7290ad609c 100644 (file)
@@ -26,7 +26,8 @@
 #  targ_emul           name of linker emulation to use
 #  targ_extra_emuls    additional linker emulations to provide
 #  targ_extra_libpath  additional linker emulations using LIB_PATH
-#  targ_extra_ofiles   additional objects needed by the emulation
+#  targ_extra_ofiles   additional host-compiled objects needed by the emulation
+#  targ_extra_binaries  additional target-built binaries needed by the emulation
 #  targ64_extra_emuls  additional linker emulations to provide if
 #                      --enable-64-bit-bfd is given or if host is 64 bit.
 #  targ64_extra_libpath        additional linker emulations using LIB_PATH if
@@ -309,23 +310,30 @@ i[3-7]86-*-gnu*)  targ_emul=elf_i386 ;;
 i[3-7]86-*-msdos*)     targ_emul=i386msdos; targ_extra_emuls=i386aout ;;
 i[3-7]86-*-moss*)      targ_emul=i386moss; targ_extra_emuls=i386msdos ;;
 i[3-7]86-*-winnt*)     targ_emul=i386pe ;
+                       targ_extra_binaries="default-manifest.o" ;
                        targ_extra_ofiles="deffilep.o pe-dll.o" ;;
 i[3-7]86-*-pe)         targ_emul=i386pe ;
+                       targ_extra_binaries="default-manifest.o" ;
                        targ_extra_ofiles="deffilep.o pe-dll.o" ;;
 i[3-7]86-*-cygwin*)    targ_emul=i386pe ;
-                       targ_extra_ofiles="deffilep.o pe-dll.o"
+                       targ_extra_binaries="default-manifest.o" ;
+                       targ_extra_ofiles="deffilep.o pe-dll.o" ;
                        test "$targ" != "$host" && LIB_PATH='${tooldir}/lib/w32api' ;;
 i[3-7]86-*-mingw32*)   targ_emul=i386pe ;
+                       targ_extra_binaries="default-manifest.o" ;
                        targ_extra_ofiles="deffilep.o pe-dll.o" ;;
 x86_64-*-pe | x86_64-*-pep) targ_emul=i386pep ;
                        targ_extra_emuls=i386pe ;
+                       targ_extra_binaries="default-manifest.o" ;
                        targ_extra_ofiles="deffilep.o pep-dll.o pe-dll.o" ;;
 x86_64-*-cygwin)       targ_emul=i386pep ;
                        targ_extra_emuls=i386pe
+                       targ_extra_binaries="default-manifest.o" ;
                        targ_extra_ofiles="deffilep.o pep-dll.o pe-dll.o"
                        test "$targ" != "$host" && LIB_PATH='${tooldir}/lib/w32api' ;;
 x86_64-*-mingw*)       targ_emul=i386pep ;
                        targ_extra_emuls=i386pe
+                       targ_extra_binaries="default-manifest.o" ;
                        targ_extra_ofiles="deffilep.o pep-dll.o pe-dll.o" ;;
 i[3-7]86-*-interix*)   targ_emul=i386pe_posix;
                        targ_extra_ofiles="deffilep.o pe-dll.o" ;;
index 38191ecb24c15f1f885fdad570e3aa464937292a..6e3c790fcfa0ee3ae86ddb0972059213d56054b2 100644 (file)
@@ -7,3 +7,4 @@ SUBSYSTEM=PE_DEF_SUBSYSTEM
 INITIAL_SYMBOL_CHAR=\"_\"
 TARGET_PAGE_SIZE=0x1000
 GENERATE_AUTO_IMPORT_SCRIPT=1
+DEFAULT_MANIFEST="default-manifest.o"
index 76a980287c744fe266f63b65ee8cbc69d234b0e2..c84ce44d12594bd0745344d53ba4dfece79124c1 100644 (file)
@@ -7,3 +7,4 @@ SUBSYSTEM=PE_DEF_SUBSYSTEM
 INITIAL_SYMBOL_CHAR=\"_\"
 TARGET_PAGE_SIZE=0x1000
 GENERATE_AUTO_IMPORT_SCRIPT=1
+DEFAULT_MANIFEST="default-manifest.o"
diff --git a/ld/emultempl/default-manifest.rc b/ld/emultempl/default-manifest.rc
new file mode 100644 (file)
index 0000000..a4d303f
--- /dev/null
@@ -0,0 +1,28 @@
+LANGUAGE 0, 0
+
+/* CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST MOVEABLE PURE DISCARDABLE */
+1 9 MOVEABLE PURE DISCARDABLE
+BEGIN
+  "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>\n"
+  "<assembly xmlns=""urn:schemas-microsoft-com:asm.v1"" manifestVersion=""1.0"">\n"
+  "  <trustInfo xmlns=""urn:schemas-microsoft-com:asm.v3"">\n"
+  "    <security>\n"
+  "      <requestedPrivileges>\n"
+  "        <requestedExecutionLevel level=""asInvoker""/>\n"
+  "      </requestedPrivileges>\n"
+  "    </security>\n"
+  "  </trustInfo>\n"
+  "  <compatibility xmlns=""urn:schemas-microsoft-com:compatibility.v1"">\n"
+  "    <application>\n"
+  "      <!--The ID below indicates application support for Windows Vista -->\n"
+  "      <supportedOS Id=""{e2011457-1546-43c5-a5fe-008deee3d3f0}""/>\n"
+  "      <!--The ID below indicates application support for Windows 7 -->\n"
+  "      <supportedOS Id=""{35138b9a-5d96-4fbd-8e2d-a2440225f93a}""/>\n"
+  "      <!--The ID below indicates application support for Windows 8 -->\n"
+  "      <supportedOS Id=""{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}""/>\n"
+  "      <!--The ID below indicates application support for Windows 8.1 -->\n"
+  "      <supportedOS Id=""{1f676c76-80e1-4239-95bb-83d0f6d0da78}""/> \n"
+  "    </application>\n"
+  "  </compatibility>\n"
+  "</assembly>\n"
+END
index bfc264378dbc0a07f378eec904ca53c8b8c59ab5..b1dff791935fd4dd151763daac2924c6f7a90fe5 100644 (file)
@@ -7585,6 +7585,15 @@ by @command{ld} and respected when laying out the common symbols.  Native
 tools will be able to process object files employing this GNU extension,
 but will fail to respect the alignment instructions, and may issue noisy
 warnings about unknown linker directives.
+
+@cindex default manifest
+@item default manifest
+The linker will automatically add a default manifest to the .rsrc
+section of any fully linked cygwin or MingGW binary.  This manifest is
+necessary in order to be able to execute the binary under Windows 8
+(or later).  An application can supply its own manifest, and if it
+does so then this manifest will be used in preference to the default
+one.
 @end table
 
 @ifclear GENERIC
index 59ce0420d58803b6b7154f6c31b0b016448c4d11..6cf59eafcc3bfcf244122736a16997f10e6d8225 100644 (file)
@@ -39,12 +39,25 @@ if test "${RELOCATING}"; then
   R_CRT_XP='*(SORT(.CRT$XP*))  /* Pre-termination */'
   R_CRT_XT='*(SORT(.CRT$XT*))  /* Termination */'
   R_TLS='
-    *(.tls$AAA)    
+    *(.tls$AAA)
     *(.tls)
     *(.tls$)
     *(SORT(.tls$*))
     *(.tls$ZZZ)'
-  R_RSRC='*(SORT(.rsrc$*))'
+  if test -z "$DEFAULT_MANIFEST"; then
+    R_RSRC='
+      *(.rsrc)
+      *(SORT(.rsrc$*))'
+  else
+    R_RSRC="
+      /* The default manifest contains information necessary for
+         binaries to run under Windows 8 (or later).  It is included as
+         the last resource file so that if the application has provided
+         its own manifest then that one will take precedence.  */
+      *(EXCLUDE_FILE ($DEFAULT_MANIFEST) .rsrc)
+      *(SORT(.rsrc*))
+      KEEP ($DEFAULT_MANIFEST(.rsrc))"
+  fi
 else
   R_TEXT=
   R_DATA=
@@ -53,7 +66,7 @@ else
   R_IDATA5=
   R_IDATA67=
   R_CRT=
-  R_RSRC=
+  R_RSRC='*(.rsrc)'
 fi
 
 cat <<EOF
@@ -69,7 +82,7 @@ SECTIONS
   ${RELOCATING+   lower than the target page size. */}
   ${RELOCATING+. = SIZEOF_HEADERS;}
   ${RELOCATING+. = ALIGN(__section_alignment__);}
-  .text ${RELOCATING+ __image_base__ + ( __section_alignment__ < ${TARGET_PAGE_SIZE} ? . : __section_alignment__ )} : 
+  .text ${RELOCATING+ __image_base__ + ( __section_alignment__ < ${TARGET_PAGE_SIZE} ? . : __section_alignment__ )} :
   {
     ${RELOCATING+ *(.init)}
     *(.text)
@@ -78,9 +91,9 @@ SECTIONS
     ${RELOCATING+ *(.gnu.linkonce.t.*)}
     *(.glue_7t)
     *(.glue_7)
-    ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ; 
+    ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
                        LONG (-1);*(.ctors); *(.ctor); *(SORT(.ctors.*));  LONG (0); }
-    ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ; 
+    ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
                        LONG (-1); *(.dtors); *(.dtor); *(SORT(.dtors.*));  LONG (0); }
     ${RELOCATING+ *(.fini)}
     /* ??? Why is .gcc_exc here?  */
@@ -96,7 +109,7 @@ SECTIONS
      breaks building the cygwin32 dll.  Instead, we name the section
      ".data_cygwin_nocopy" and explicitly include it after __data_end__. */
 
-  .data ${RELOCATING+BLOCK(__section_alignment__)} : 
+  .data ${RELOCATING+BLOCK(__section_alignment__)} :
   {
     ${RELOCATING+__data_start__ = . ;}
     *(.data)
@@ -202,13 +215,12 @@ SECTIONS
   }
 
   .rsrc ${RELOCATING+BLOCK(__section_alignment__)} :
-  {                                    
-    *(.rsrc)
+  {
     ${R_RSRC}
   }
 
   .reloc ${RELOCATING+BLOCK(__section_alignment__)} :
-  {                                    
+  {
     *(.reloc)
   }
 
@@ -226,7 +238,7 @@ SECTIONS
      Symbols in the DWARF debugging sections are relative to the beginning
      of the section.  Unlike other targets that fake this by putting the
      section VMA at 0, the PE format will not allow it.  */
-     
+
   /* DWARF 1.1 and DWARF 2.  */
   .debug_aranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
index 884baaf2fd3bdcd921267b06e2f45227d286b47b..324a743b949e61c120897e7df2272ff6297ee451 100644 (file)
@@ -39,12 +39,25 @@ if test "${RELOCATING}"; then
   R_CRT_XP='*(SORT(.CRT$XP*))  /* Pre-termination */'
   R_CRT_XT='*(SORT(.CRT$XT*))  /* Termination */'
   R_TLS='
-    *(.tls$AAA)    
+    *(.tls$AAA)
     *(.tls)
     *(.tls$)
     *(SORT(.tls$*))
     *(.tls$ZZZ)'
-  R_RSRC='*(SORT(.rsrc$*))'
+  if test -z "$DEFAULT_MANIFEST"; then
+    R_RSRC='
+      *(.rsrc)
+      *(SORT(.rsrc$*))'
+  else
+    R_RSRC="
+      /* The default manifest contains information necessary for
+         binaries to run under Windows 8 (or later).  It is included as
+         the last resource file so that if the application has provided
+         its own manifest then that one will take precedence.  */
+      *(EXCLUDE_FILE ($DEFAULT_MANIFEST) .rsrc)
+      *(SORT(.rsrc*))
+      KEEP ($DEFAULT_MANIFEST(.rsrc))"
+  fi
 else
   R_TEXT=
   R_DATA=
@@ -53,7 +66,7 @@ else
   R_IDATA5=
   R_IDATA67=
   R_CRT=
-  R_RSRC=
+  R_RSRC='*(.rsrc)'
 fi
 
 cat <<EOF
@@ -69,7 +82,7 @@ SECTIONS
   ${RELOCATING+   lower than the target page size. */}
   ${RELOCATING+. = SIZEOF_HEADERS;}
   ${RELOCATING+. = ALIGN(__section_alignment__);}
-  .text ${RELOCATING+ __image_base__ + ( __section_alignment__ < ${TARGET_PAGE_SIZE} ? . : __section_alignment__ )} : 
+  .text ${RELOCATING+ __image_base__ + ( __section_alignment__ < ${TARGET_PAGE_SIZE} ? . : __section_alignment__ )} :
   {
     ${RELOCATING+ *(.init)}
     *(.text)
@@ -79,9 +92,9 @@ SECTIONS
     *(.glue_7t)
     *(.glue_7)
     ${CONSTRUCTING+. = ALIGN(8);}
-    ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ; 
+    ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
                        LONG (-1); LONG (-1);*(.ctors); *(.ctor); *(SORT(.ctors.*));  LONG (0); LONG (0); }
-    ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ; 
+    ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
                        LONG (-1); LONG (-1); *(.dtors); *(.dtor); *(SORT(.dtors.*));  LONG (0); LONG (0); }
     ${RELOCATING+ *(.fini)}
     /* ??? Why is .gcc_exc here?  */
@@ -96,7 +109,7 @@ SECTIONS
      breaks building the cygwin32 dll.  Instead, we name the section
      ".data_cygwin_nocopy" and explicitly include it after __data_end__. */
 
-  .data ${RELOCATING+BLOCK(__section_alignment__)} : 
+  .data ${RELOCATING+BLOCK(__section_alignment__)} :
   {
     ${RELOCATING+__data_start__ = . ;}
     *(.data)
@@ -207,13 +220,12 @@ SECTIONS
   }
 
   .rsrc ${RELOCATING+BLOCK(__section_alignment__)} :
-  {                                    
-    *(.rsrc)
+  {
     ${R_RSRC}
   }
 
   .reloc ${RELOCATING+BLOCK(__section_alignment__)} :
-  {                                    
+  {
     *(.reloc)
   }
 
@@ -231,7 +243,7 @@ SECTIONS
      Symbols in the DWARF debugging sections are relative to the beginning
      of the section.  Unlike other targets that fake this by putting the
      section VMA at 0, the PE format will not allow it.  */
-     
+
   /* DWARF 1.1 and DWARF 2.  */
   .debug_aranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
index 5e53f4a7a172828641b3a4ae703c08604228ef2f..1af810915956e4baa3eaedc41ec79a0f5cc34c0f 100644 (file)
@@ -1,3 +1,10 @@
+2014-02-27  Nick Clifton  <nickc@redhat.com>
+
+       * ld-pe/longsecn-1.d: Allow for extra sections.
+       * ld-pe/longsecn-2.d: Likewise.
+       * ld-pe/longsecn.d: Likewise.
+       * ld-pe/secrel.d: Likewise.
+
 2014-02-21  Alan Modra  <amodra@gmail.com>
 
        * ld-bootstrap/bootstrap.exp: Add ppc476 workaround test.
index 95b3337de3364d30b2ee66675367ac5717aae852..81a44a7f2279ce0cc8c51a14f5fdf2ef4ac6e3fd 100644 (file)
@@ -19,4 +19,4 @@ Idx Name          Size      VMA +LMA +File off  Algn
                   CONTENTS, ALLOC, LOAD, DATA
   5 \.idata        [0-9a-fA-F]+  [0-9a-fA-F]+  [0-9a-fA-F]+  [0-9a-fA-F]+  2\*\*[0-9]
                   CONTENTS, ALLOC, LOAD, DATA
-
+#...
index 8170006f8427a5277ac83af8939981eab8dc0048..64d16277a4f633ebe89eceaff2c83c30535f6e1e 100644 (file)
@@ -19,3 +19,4 @@ Idx Name          Size      VMA +LMA +File off  Algn
                   CONTENTS, ALLOC, LOAD, DATA
   5 \.idata        [0-9a-fA-F]+  [0-9a-fA-F]+  [0-9a-fA-F]+  [0-9a-fA-F]+  2\*\*[0-9]
                   CONTENTS, ALLOC, LOAD, DATA
+#...
index 2dcde3533ade9764917e7bd67cb5ab5eaac075ec..e77f6eeaf19c28add7eb2c2e50fe1c9ee4075e30 100644 (file)
@@ -19,4 +19,4 @@ Idx Name          Size      VMA +LMA +File off  Algn
                   CONTENTS, ALLOC, LOAD, DATA
   5 \.idata        [0-9a-fA-F]+  [0-9a-fA-F]+  [0-9a-fA-F]+  [0-9a-fA-F]+  2\*\*[0-9]
                   CONTENTS, ALLOC, LOAD, DATA
-
+#...
index b924f5435a75914fa0e6694ebf4d50a40c22bb3e..3f1bb4a510a0d41039342fc71e8b4c1df4f35c4f 100644 (file)
@@ -25,3 +25,4 @@ Contents of section \.rdata:
 Contents of section \.idata:\r
  .*4000 00000000 00000000 00000000 00000000  ................\r
  .*4010 00000000                             ....            \r
+#...\r