binutils: option to move default bases under 4GB
msys2/MINGW-packages#6932 and msys2/MINGW-packages#6907 show packages have issues with the new default base addresses, so add an option to change back to the old defaults during the transition.
This commit is contained in:
@@ -1,26 +0,0 @@
|
||||
--- binutils-2.35/ld/emultempl/pep.em.orig 2020-08-27 08:46:36.064000100 +0200
|
||||
+++ binutils-2.35/ld/emultempl/pep.em 2020-08-27 09:00:44.598810700 +0200
|
||||
@@ -104,19 +104,19 @@
|
||||
#undef NT_EXE_IMAGE_BASE
|
||||
#define NT_EXE_IMAGE_BASE \
|
||||
((bfd_vma) (${move_default_addr_high} ? 0x100400000LL \
|
||||
- : 0x400000LL))
|
||||
+ : 0x140000000LL))
|
||||
#undef NT_DLL_IMAGE_BASE
|
||||
#define NT_DLL_IMAGE_BASE \
|
||||
((bfd_vma) (${move_default_addr_high} ? 0x400000000LL \
|
||||
- : 0x10000000LL))
|
||||
+ : 0x180000000LL))
|
||||
#undef NT_DLL_AUTO_IMAGE_BASE
|
||||
#define NT_DLL_AUTO_IMAGE_BASE \
|
||||
((bfd_vma) (${move_default_addr_high} ? 0x400000000LL \
|
||||
- : 0x61300000LL))
|
||||
+ : 0x1C0000000LL))
|
||||
#undef NT_DLL_AUTO_IMAGE_MASK
|
||||
#define NT_DLL_AUTO_IMAGE_MASK \
|
||||
((bfd_vma) (${move_default_addr_high} ? 0x1ffff0000LL \
|
||||
- : 0x0ffc0000LL))
|
||||
+ : 0x1ffff0000LL))
|
||||
#else
|
||||
#undef NT_EXE_IMAGE_BASE
|
||||
#define NT_EXE_IMAGE_BASE \
|
||||
128
mingw-w64-binutils/2001-option-x64-default-bases-low.patch
Normal file
128
mingw-w64-binutils/2001-option-x64-default-bases-low.patch
Normal file
@@ -0,0 +1,128 @@
|
||||
diff --git a/ld/emultempl/pep.em b/ld/emultempl/pep.em
|
||||
index ea792fe25a..de6d7aafbb 100644
|
||||
--- a/ld/emultempl/pep.em
|
||||
+++ b/ld/emultempl/pep.em
|
||||
@@ -107,18 +107,26 @@ fragment <<EOF
|
||||
#define NT_EXE_IMAGE_BASE \
|
||||
((bfd_vma) (${move_default_addr_high} ? 0x100400000LL \
|
||||
: 0x140000000LL))
|
||||
+#undef NT_EXE_IMAGE_BASE_LOW
|
||||
+#define NT_EXE_IMAGE_BASE_LOW ((bfd_vma) 0x400000LL)
|
||||
#undef NT_DLL_IMAGE_BASE
|
||||
#define NT_DLL_IMAGE_BASE \
|
||||
((bfd_vma) (${move_default_addr_high} ? 0x400000000LL \
|
||||
: 0x180000000LL))
|
||||
+#undef NT_DLL_IMAGE_BASE_LOW
|
||||
+#define NT_DLL_IMAGE_BASE_LOW ((bfd_vma) 0x10000000LL)
|
||||
#undef NT_DLL_AUTO_IMAGE_BASE
|
||||
#define NT_DLL_AUTO_IMAGE_BASE \
|
||||
((bfd_vma) (${move_default_addr_high} ? 0x400000000LL \
|
||||
: 0x1C0000000LL))
|
||||
+#undef NT_DLL_AUTO_IMAGE_BASE_LOW
|
||||
+#define NT_DLL_AUTO_IMAGE_BASE_LOW ((bfd_vma) 0x61300000LL)
|
||||
#undef NT_DLL_AUTO_IMAGE_MASK
|
||||
#define NT_DLL_AUTO_IMAGE_MASK \
|
||||
((bfd_vma) (${move_default_addr_high} ? 0x1ffff0000LL \
|
||||
: 0x1ffff0000LL))
|
||||
+#undef NT_DLL_AUTO_IMAGE_MASK_LOW
|
||||
+#define NT_DLL_AUTO_IMAGE_MASK_LOW ((bfd_vma) 0x0ffc0000LL)
|
||||
#else
|
||||
#undef NT_EXE_IMAGE_BASE
|
||||
#define NT_EXE_IMAGE_BASE \
|
||||
@@ -151,6 +159,7 @@ static int support_old_code = 0;
|
||||
static lang_assignment_statement_type *image_base_statement = 0;
|
||||
static unsigned short pe_dll_characteristics = DEFAULT_DLL_CHARACTERISTICS;
|
||||
static bfd_boolean insert_timestamp = TRUE;
|
||||
+static bfd_boolean high_default_bases = TRUE;
|
||||
static const char *emit_build_id;
|
||||
|
||||
#ifdef DLL_SUPPORT
|
||||
@@ -260,7 +269,9 @@ enum options
|
||||
OPTION_DISABLE_NO_SEH,
|
||||
OPTION_DISABLE_NO_BIND,
|
||||
OPTION_DISABLE_WDM_DRIVER,
|
||||
- OPTION_DISABLE_TERMINAL_SERVER_AWARE
|
||||
+ OPTION_DISABLE_TERMINAL_SERVER_AWARE,
|
||||
+ OPTION_DEFAULT_IMAGE_BASE_LOW,
|
||||
+ OPTION_DEFAULT_IMAGE_BASE_HIGH
|
||||
};
|
||||
|
||||
static void
|
||||
@@ -349,6 +360,10 @@ gld${EMULATION_NAME}_add_options
|
||||
{"disable-no-bind", no_argument, NULL, OPTION_DISABLE_NO_BIND},
|
||||
{"disable-wdmdriver", no_argument, NULL, OPTION_DISABLE_WDM_DRIVER},
|
||||
{"disable-tsaware", no_argument, NULL, OPTION_DISABLE_TERMINAL_SERVER_AWARE},
|
||||
+#if defined(TARGET_IS_i386pep) || ! defined(DLL_SUPPORT)
|
||||
+ {"default-image-base-low", no_argument, NULL, OPTION_DEFAULT_IMAGE_BASE_LOW},
|
||||
+ {"default-image-base-high", no_argument, NULL, OPTION_DEFAULT_IMAGE_BASE_HIGH},
|
||||
+#endif
|
||||
{NULL, no_argument, NULL, 0}
|
||||
};
|
||||
|
||||
@@ -486,6 +501,10 @@ gld_${EMULATION_NAME}_list_options (FILE *file)
|
||||
fprintf (file, _(" --[disable-]tsaware Image is Terminal Server aware\n"));
|
||||
fprintf (file, _(" --build-id[=STYLE] Generate build ID\n"));
|
||||
#endif
|
||||
+#if defined(TARGET_IS_i386pep) || ! defined(DLL_SUPPORT)
|
||||
+ fprintf (file, _(" --default-image-base-low Default image bases under 4GB\n"));
|
||||
+ fprintf (file, _(" --default-image-base-high Default image bases over 4GB\n"));
|
||||
+#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -893,6 +912,12 @@ gld${EMULATION_NAME}_handle_option (int optc)
|
||||
if (strcmp (optarg, "none"))
|
||||
emit_build_id = xstrdup (optarg);
|
||||
break;
|
||||
+ case OPTION_DEFAULT_IMAGE_BASE_LOW:
|
||||
+ high_default_bases = FALSE;
|
||||
+ break;
|
||||
+ case OPTION_DEFAULT_IMAGE_BASE_HIGH:
|
||||
+ high_default_bases = TRUE;
|
||||
+ break;
|
||||
}
|
||||
|
||||
/* Set DLLCharacteristics bits */
|
||||
@@ -932,7 +957,14 @@ static bfd_vma
|
||||
compute_dll_image_base (const char *ofile)
|
||||
{
|
||||
bfd_vma hash = (bfd_vma) strhash (ofile);
|
||||
- return NT_DLL_AUTO_IMAGE_BASE + ((hash << 16) & NT_DLL_AUTO_IMAGE_MASK);
|
||||
+#ifdef TARGET_IS_i386pep
|
||||
+ if (high_default_bases)
|
||||
+#endif
|
||||
+ return NT_DLL_AUTO_IMAGE_BASE + ((hash << 16) & NT_DLL_AUTO_IMAGE_MASK);
|
||||
+#ifdef TARGET_IS_i386pep
|
||||
+ else
|
||||
+ return NT_DLL_AUTO_IMAGE_BASE_LOW + ((hash << 16) & NT_DLL_AUTO_IMAGE_MASK_LOW);
|
||||
+#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -957,13 +989,25 @@ gld_${EMULATION_NAME}_set_symbols (void)
|
||||
#ifdef DLL_SUPPORT
|
||||
init[IMAGEBASEOFF].value = (pep_enable_auto_image_base
|
||||
? compute_dll_image_base (output_filename)
|
||||
+#ifdef TARGET_IS_i386pep
|
||||
+ : (high_default_bases
|
||||
+ ? NT_DLL_IMAGE_BASE
|
||||
+ : NT_DLL_IMAGE_BASE_LOW));
|
||||
+#else
|
||||
: NT_DLL_IMAGE_BASE);
|
||||
+#endif
|
||||
#else
|
||||
- init[IMAGEBASEOFF].value = NT_DLL_IMAGE_BASE;
|
||||
+ init[IMAGEBASEOFF].value = (high_default_bases ? NT_DLL_IMAGE_BASE : NT_DLL_IMAGE_BASE_LOW);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
+#if defined(TARGET_IS_i386pep) || ! defined(DLL_SUPPORT)
|
||||
+ init[IMAGEBASEOFF].value = (high_default_bases
|
||||
+ ? NT_EXE_IMAGE_BASE
|
||||
+ : NT_EXE_IMAGE_BASE_LOW);
|
||||
+#else
|
||||
init[IMAGEBASEOFF].value = NT_EXE_IMAGE_BASE;
|
||||
+#endif
|
||||
init[MSIMAGEBASEOFF].value = init[IMAGEBASEOFF].value;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ _realname=binutils
|
||||
pkgbase=mingw-w64-${_realname}
|
||||
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}")
|
||||
pkgver=2.35
|
||||
pkgrel=4
|
||||
pkgrel=5
|
||||
pkgdesc="A set of programs to assemble and manipulate binary and object files (mingw-w64)"
|
||||
arch=('any')
|
||||
url="https://www.gnu.org/software/binutils/"
|
||||
@@ -27,7 +27,8 @@ source=(https://ftp.gnu.org/gnu/binutils/${_realname}-${pkgver}.tar.xz{,.sig}
|
||||
1001-Change-the-default-characteristics-of-DLLs-built-by-.patch
|
||||
1002-mingw-plugin-test-regressions-due-to-commit-514b4e19.patch
|
||||
1003-Fixes-for-testsuite-failures-introduced-by-the-chang.patch
|
||||
2000-Temporarily-revert-default-dll-characteristics.patch)
|
||||
2000-Temporarily-revert-default-dll-characteristics.patch
|
||||
2001-option-x64-default-bases-low.patch)
|
||||
sha256sums=('1b11659fb49e20e18db460d44485f09442c8c56d5df165de9461eb09c8302f85'
|
||||
'SKIP'
|
||||
'93296b909e1a4f9d8a4bbe2437aafa17ca565ef6642a9812b0360c05be228c9d'
|
||||
@@ -39,7 +40,8 @@ sha256sums=('1b11659fb49e20e18db460d44485f09442c8c56d5df165de9461eb09c8302f85'
|
||||
'4bc1d1481f060f99330e897652f499dd61afda8f8d1c8769e8e54adcd3c8eb7e'
|
||||
'4af3eed435759426fa30b621821edfb2a27a67d182db2f5e22bc86c3dd61d62d'
|
||||
'9170e8efb3db82acb98561e472e441c9e5e829997a40836bd9b2f2cc19557b05'
|
||||
'5009fd749d4a8e710e26da988157d69f797eefb202ed7d246999c9e4bd9e8755')
|
||||
'5009fd749d4a8e710e26da988157d69f797eefb202ed7d246999c9e4bd9e8755'
|
||||
'02cd51648b34c634857082c1988f81c15048202920cf4ca6776a45af5284aab9')
|
||||
validpgpkeys=('EAF1C276A747E9ED86210CBAC3126D3B4AE55E93'
|
||||
'3A24BC1E8FB409FA9F14371813FCEF89DD9E3C4F')
|
||||
|
||||
@@ -58,6 +60,8 @@ prepare() {
|
||||
|
||||
# Temporarily revert defaults change while testing.
|
||||
patch -p1 -i "${srcdir}"/2000-Temporarily-revert-default-dll-characteristics.patch
|
||||
# Add an option to change default bases back below 4GB to ease transition
|
||||
patch -p1 -i "${srcdir}"/2001-option-x64-default-bases-low.patch
|
||||
}
|
||||
|
||||
build() {
|
||||
|
||||
Reference in New Issue
Block a user