[PATCH] ld: revert default dll characteristics for Cygwin.
Jeremy Drake
sourceware-bugzilla@jdrake.com
Mon Mar 1 19:43:45 GMT 2021
Mail thread from
https://cygwin.com/pipermail/cygwin/2021-February/247922.html suggests
these flags will NOT work for Cygwin, which relies on stable address
layouts for their fork() emulation.
In the process, renamed move_default_addr_high shell variable to
cygwin_beahior, as the old name wasn't quite accurate anymore and I
wanted to use it choose which dll characteristics flags to use by
default.
Also copied that switch to pe.em, as it was only in pep.em before but
32-bit also needed to switch defaults for Cygwin.
---
ld/emultempl/pe.em | 13 ++++++++++++-
ld/emultempl/pep.em | 40 +++++++++++++++++++++-------------------
2 files changed, 33 insertions(+), 20 deletions(-)
diff --git a/ld/emultempl/pe.em b/ld/emultempl/pe.em
index 748a6b49412..9f757cc31dc 100644
--- a/ld/emultempl/pe.em
+++ b/ld/emultempl/pe.em
@@ -5,6 +5,16 @@ if [ -z "$MACHINE" ]; then
else
OUTPUT_ARCH=${ARCH}:${MACHINE}
fi
+
+case ${target} in
+ *-*-cygwin*)
+ cygwin_behavior=1
+ ;;
+ *)
+ cygwin_behavior=0;
+ ;;
+esac
+
rm -f e${EMULATION_NAME}.c
(echo;echo;echo;echo;echo)>e${EMULATION_NAME}.c # there, now line numbers match ;-)
fragment <<EOF
@@ -104,7 +114,8 @@ fragment <<EOF
#define DEFAULT_PSEUDO_RELOC_VERSION 1
#endif
-#define DEFAULT_DLL_CHARACTERISTICS (IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE \
+#define DEFAULT_DLL_CHARACTERISTICS (${cygwin_behavior} ? 0 : \
+ IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE \
| IMAGE_DLL_CHARACTERISTICS_NX_COMPAT)
#if defined(TARGET_IS_i386pe) || ! defined(DLL_SUPPORT)
diff --git a/ld/emultempl/pep.em b/ld/emultempl/pep.em
index ff49c15c002..69f5bd04655 100644
--- a/ld/emultempl/pep.em
+++ b/ld/emultempl/pep.em
@@ -8,10 +8,10 @@ fi
case ${target} in
*-*-cygwin*)
- move_default_addr_high=1
+ cygwin_behavior=1
;;
*)
- move_default_addr_high=0;
+ cygwin_behavior=0;
;;
esac
@@ -99,45 +99,47 @@ fragment <<EOF
#define DLL_SUPPORT
#endif
-#define DEFAULT_DLL_CHARACTERISTICS (IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE \
+#define DEFAULT_DLL_CHARACTERISTICS (${cygwin_behavior} ? 0 : \
+ IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE \
| IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA \
| IMAGE_DLL_CHARACTERISTICS_NX_COMPAT)
+
#if defined(TARGET_IS_i386pep) || ! defined(DLL_SUPPORT)
#define PE_DEF_SUBSYSTEM 3
#undef NT_EXE_IMAGE_BASE
#define NT_EXE_IMAGE_BASE \
- ((bfd_vma) (${move_default_addr_high} ? 0x100400000LL \
- : 0x140000000LL))
+ ((bfd_vma) (${cygwin_behavior} ? 0x100400000LL \
+ : 0x140000000LL))
#undef NT_DLL_IMAGE_BASE
#define NT_DLL_IMAGE_BASE \
- ((bfd_vma) (${move_default_addr_high} ? 0x400000000LL \
- : 0x180000000LL))
+ ((bfd_vma) (${cygwin_behavior} ? 0x400000000LL \
+ : 0x180000000LL))
#undef NT_DLL_AUTO_IMAGE_BASE
#define NT_DLL_AUTO_IMAGE_BASE \
- ((bfd_vma) (${move_default_addr_high} ? 0x400000000LL \
- : 0x1C0000000LL))
+ ((bfd_vma) (${cygwin_behavior} ? 0x400000000LL \
+ : 0x1C0000000LL))
#undef NT_DLL_AUTO_IMAGE_MASK
#define NT_DLL_AUTO_IMAGE_MASK \
- ((bfd_vma) (${move_default_addr_high} ? 0x1ffff0000LL \
- : 0x1ffff0000LL))
+ ((bfd_vma) (${cygwin_behavior} ? 0x1ffff0000LL \
+ : 0x1ffff0000LL))
#else
#undef NT_EXE_IMAGE_BASE
#define NT_EXE_IMAGE_BASE \
- ((bfd_vma) (${move_default_addr_high} ? 0x100010000LL \
- : 0x10000LL))
+ ((bfd_vma) (${cygwin_behavior} ? 0x100010000LL \
+ : 0x10000LL))
#undef NT_DLL_IMAGE_BASE
#define NT_DLL_IMAGE_BASE \
- ((bfd_vma) (${move_default_addr_high} ? 0x110000000LL \
- : 0x10000000LL))
+ ((bfd_vma) (${cygwin_behavior} ? 0x110000000LL \
+ : 0x10000000LL))
#undef NT_DLL_AUTO_IMAGE_BASE
#define NT_DLL_AUTO_IMAGE_BASE \
- ((bfd_vma) (${move_default_addr_high} ? 0x120000000LL \
- : 0x61300000LL))
+ ((bfd_vma) (${cygwin_behavior} ? 0x120000000LL \
+ : 0x61300000LL))
#undef NT_DLL_AUTO_IMAGE_MASK
#define NT_DLL_AUTO_IMAGE_MASK \
- ((bfd_vma) (${move_default_addr_high} ? 0x0ffff0000LL \
- : 0x0ffc0000LL))
+ ((bfd_vma) (${cygwin_behavior} ? 0x0ffff0000LL \
+ : 0x0ffc0000LL))
#undef PE_DEF_SECTION_ALIGNMENT
#define PE_DEF_SUBSYSTEM 2
#undef PE_DEF_FILE_ALIGNMENT
--
2.30.1.windows.1
More information about the Binutils
mailing list