From 5063daf7357ccdc2c9e899ca0421c2e8e580c88d Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Thu, 27 Feb 2014 14:09:29 +0000 Subject: This patch adds a default manifest in to the final links performed by the Cygwin and MinGW targets. 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. --- ld/scripttempl/pe.sc | 34 +++++++++++++++++++++++----------- ld/scripttempl/pep.sc | 34 +++++++++++++++++++++++----------- 2 files changed, 46 insertions(+), 22 deletions(-) (limited to 'ld/scripttempl') diff --git a/ld/scripttempl/pe.sc b/ld/scripttempl/pe.sc index 59ce042..6cf59ea 100644 --- a/ld/scripttempl/pe.sc +++ b/ld/scripttempl/pe.sc @@ -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 <