Skip to content

Commit

Permalink
Merge branch 'binutils-x64-option-default-bases-low' into gcc_set_ldf…
Browse files Browse the repository at this point in the history
…lags_for_target_disable_dynamicbase
  • Loading branch information
jeremyd2019 committed Sep 8, 2020
2 parents 9989b0e + d32cd1e commit fb11b69
Show file tree
Hide file tree
Showing 3 changed files with 135 additions and 29 deletions.
26 changes: 0 additions & 26 deletions mingw-w64-binutils/0320-aslr-compat-base-addr.patch

This file was deleted.

128 changes: 128 additions & 0 deletions mingw-w64-binutils/2001-option-x64-default-bases-low.patch
@@ -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;
}

10 changes: 7 additions & 3 deletions mingw-w64-binutils/PKGBUILD
Expand Up @@ -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/"
Expand All @@ -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'
Expand All @@ -39,7 +40,8 @@ sha256sums=('1b11659fb49e20e18db460d44485f09442c8c56d5df165de9461eb09c8302f85'
'4bc1d1481f060f99330e897652f499dd61afda8f8d1c8769e8e54adcd3c8eb7e'
'4af3eed435759426fa30b621821edfb2a27a67d182db2f5e22bc86c3dd61d62d'
'9170e8efb3db82acb98561e472e441c9e5e829997a40836bd9b2f2cc19557b05'
'5009fd749d4a8e710e26da988157d69f797eefb202ed7d246999c9e4bd9e8755')
'5009fd749d4a8e710e26da988157d69f797eefb202ed7d246999c9e4bd9e8755'
'02cd51648b34c634857082c1988f81c15048202920cf4ca6776a45af5284aab9')
validpgpkeys=('EAF1C276A747E9ED86210CBAC3126D3B4AE55E93'
'3A24BC1E8FB409FA9F14371813FCEF89DD9E3C4F')

Expand All @@ -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() {
Expand Down

0 comments on commit fb11b69

Please sign in to comment.