Sourceware Bugzilla – Attachment 12800 Details for
Bug 19011
Issues with ld on mingw-w64 and bad defaults
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
[PATCH 1/2] Add options to disable dll characteristics flags.
0001-Add-options-to-disable-dll-characteristics-flags.patch (text/plain), 16.47 KB, created by
sourceware-bugzilla
on 2020-08-26 21:01:58 UTC
(
hide
)
Description:
[PATCH 1/2] Add options to disable dll characteristics flags.
Filename:
MIME Type:
Creator:
sourceware-bugzilla
Created:
2020-08-26 21:01:58 UTC
Size:
16.47 KB
patch
obsolete
>From cda3ebbf8df099dd57e3805a634f7a10cd2f089a Mon Sep 17 00:00:00 2001 >From: Jeremy Drake <sourceware-bugzilla@jdrake.com> >Date: Wed, 19 Aug 2020 21:39:36 -0700 >Subject: [PATCH 1/2] Add options to disable dll characteristics flags. > >These will be necessary when any become enabled by default. Also add >single place (per emul) to set default dll characteristics. >--- > ld/emultempl/pe.em | 74 +++++++++++++++++++++++++++++++++++------ > ld/emultempl/pep.em | 81 +++++++++++++++++++++++++++++++++++++-------- > 2 files changed, 131 insertions(+), 24 deletions(-) > >diff --git a/ld/emultempl/pe.em b/ld/emultempl/pe.em >index eb7c812470..8d61fae2bd 100644 >--- a/ld/emultempl/pe.em >+++ b/ld/emultempl/pe.em >@@ -104,6 +104,8 @@ fragment <<EOF > #define DEFAULT_PSEUDO_RELOC_VERSION 1 > #endif > >+#define DEFAULT_DLL_CHARACTERISTICS 0x0 >+ > #if defined(TARGET_IS_i386pe) || ! defined(DLL_SUPPORT) > #define PE_DEF_SUBSYSTEM 3 > #else >@@ -129,7 +131,7 @@ static flagword real_flags = 0; > static int support_old_code = 0; > static char * thumb_entry_symbol = NULL; > static lang_assignment_statement_type *image_base_statement = 0; >-static unsigned short pe_dll_characteristics = 0; >+static unsigned short pe_dll_characteristics = DEFAULT_DLL_CHARACTERISTICS; > static bfd_boolean insert_timestamp = TRUE; > static const char *emit_build_id; > >@@ -271,6 +273,17 @@ fragment <<EOF > #define OPTION_NO_INSERT_TIMESTAMP (OPTION_INSERT_TIMESTAMP + 1) > #define OPTION_BUILD_ID (OPTION_NO_INSERT_TIMESTAMP + 1) > #define OPTION_ENABLE_RELOC_SECTION (OPTION_BUILD_ID + 1) >+#define OPTION_DISABLE_RELOC_SECTION (OPTION_ENABLE_RELOC_SECTION + 1) >+/* DLLCharacteristics flags. */ >+#define OPTION_DISABLE_DYNAMIC_BASE (OPTION_DISABLE_RELOC_SECTION + 1) >+#define OPTION_DISABLE_FORCE_INTEGRITY (OPTION_DISABLE_DYNAMIC_BASE + 1) >+#define OPTION_DISABLE_NX_COMPAT (OPTION_DISABLE_FORCE_INTEGRITY + 1) >+#define OPTION_DISABLE_NO_ISOLATION (OPTION_DISABLE_NX_COMPAT + 1) >+#define OPTION_DISABLE_NO_SEH (OPTION_DISABLE_NO_ISOLATION + 1) >+#define OPTION_DISABLE_NO_BIND (OPTION_DISABLE_NO_SEH + 1) >+#define OPTION_DISABLE_WDM_DRIVER (OPTION_DISABLE_NO_BIND + 1) >+#define OPTION_DISABLE_TERMINAL_SERVER_AWARE \ >+ (OPTION_DISABLE_WDM_DRIVER + 1) > > static void > gld${EMULATION_NAME}_add_options >@@ -342,15 +355,24 @@ gld${EMULATION_NAME}_add_options > {"enable-long-section-names", no_argument, NULL, OPTION_ENABLE_LONG_SECTION_NAMES}, > {"disable-long-section-names", no_argument, NULL, OPTION_DISABLE_LONG_SECTION_NAMES}, > {"dynamicbase",no_argument, NULL, OPTION_DYNAMIC_BASE}, >+ {"disable-dynamicbase",no_argument, NULL, OPTION_DISABLE_DYNAMIC_BASE}, > {"forceinteg", no_argument, NULL, OPTION_FORCE_INTEGRITY}, >+ {"disable-forceinteg", no_argument, NULL, OPTION_DISABLE_FORCE_INTEGRITY}, > {"nxcompat", no_argument, NULL, OPTION_NX_COMPAT}, >+ {"disable-nxcompat", no_argument, NULL, OPTION_DISABLE_NX_COMPAT}, > {"no-isolation", no_argument, NULL, OPTION_NO_ISOLATION}, >+ {"disable-no-isolation", no_argument, NULL, OPTION_DISABLE_NO_ISOLATION}, > {"no-seh", no_argument, NULL, OPTION_NO_SEH}, >+ {"disable-no-seh", no_argument, NULL, OPTION_DISABLE_NO_SEH}, > {"no-bind", no_argument, NULL, OPTION_NO_BIND}, >+ {"disable-no-bind", no_argument, NULL, OPTION_DISABLE_NO_BIND}, > {"wdmdriver", no_argument, NULL, OPTION_WDM_DRIVER}, >+ {"disable-wdmdriver", no_argument, NULL, OPTION_DISABLE_WDM_DRIVER}, > {"tsaware", no_argument, NULL, OPTION_TERMINAL_SERVER_AWARE}, >+ {"disable-tsaware", no_argument, NULL, OPTION_DISABLE_TERMINAL_SERVER_AWARE}, > {"build-id", optional_argument, NULL, OPTION_BUILD_ID}, > {"enable-reloc-section", no_argument, NULL, OPTION_ENABLE_RELOC_SECTION}, >+ {"disable-reloc-section", no_argument, NULL, OPTION_DISABLE_RELOC_SECTION}, > {NULL, no_argument, NULL, 0} > }; > >@@ -414,7 +436,7 @@ static definfo init[] = > D(SizeOfHeapReserve,"__size_of_heap_reserve__", 0x100000, FALSE), > D(SizeOfHeapCommit,"__size_of_heap_commit__", 0x1000, FALSE), > D(LoaderFlags,"__loader_flags__", 0x0, FALSE), >- D(DllCharacteristics, "__dll_characteristics__", 0x0, FALSE), >+ D(DllCharacteristics, "__dll_characteristics__", DEFAULT_DLL_CHARACTERISTICS, FALSE), > { NULL, 0, 0, NULL, 0 , FALSE} > }; > >@@ -483,18 +505,21 @@ gld_${EMULATION_NAME}_list_options (FILE *file) > executable image files\n")); > fprintf (file, _(" --disable-long-section-names Never use long COFF section names, even\n\ > in object files\n")); >- fprintf (file, _(" --dynamicbase Image base address may be relocated using\n\ >+ fprintf (file, _(" --[disable-]dynamicbase Image base address may be relocated using\n\ > address space layout randomization (ASLR)\n")); > fprintf (file, _(" --enable-reloc-section Create the base relocation table\n")); >- fprintf (file, _(" --forceinteg Code integrity checks are enforced\n")); >- fprintf (file, _(" --nxcompat Image is compatible with data execution prevention\n")); >- fprintf (file, _(" --no-isolation Image understands isolation but do not isolate the image\n")); >- fprintf (file, _(" --no-seh Image does not use SEH. No SE handler may\n\ >+ fprintf (file, _(" --disable-reloc-section Do not create the base relocation table\n")); >+ fprintf (file, _(" --[disable-]forceinteg Code integrity checks are enforced\n")); >+ fprintf (file, _(" --[disable-]nxcompat Image is compatible with data execution\n\ >+ prevention\n")); >+ fprintf (file, _(" --[disable-]no-isolation Image understands isolation but do not\n\ >+ isolate the image\n")); >+ fprintf (file, _(" --[disable-]no-seh Image does not use SEH. No SE handler may\n\ > be called in this image\n")); >- fprintf (file, _(" --no-bind Do not bind this image\n")); >- fprintf (file, _(" --wdmdriver Driver uses the WDM model\n")); >- fprintf (file, _(" --tsaware Image is Terminal Server aware\n")); >- fprintf (file, _(" --build-id[=STYLE] Generate build ID\n")); >+ fprintf (file, _(" --[disable-]no-bind Do not bind this image\n")); >+ fprintf (file, _(" --[disable-]wdmdriver Driver uses the WDM model\n")); >+ fprintf (file, _(" --[disable-]tsaware Image is Terminal Server aware\n")); >+ fprintf (file, _(" --build-id[=STYLE] Generate build ID\n")); > } > > >@@ -862,27 +887,54 @@ gld${EMULATION_NAME}_handle_option (int optc) > case OPTION_ENABLE_RELOC_SECTION: > pe_dll_enable_reloc_section = 1; > break; >+ case OPTION_DISABLE_RELOC_SECTION: >+ pe_dll_enable_reloc_section = 0; >+ /* fall through */ >+ case OPTION_DISABLE_DYNAMIC_BASE: >+ pe_dll_characteristics &= ~ IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE; >+ break; > case OPTION_FORCE_INTEGRITY: > pe_dll_characteristics |= IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY; > break; >+ case OPTION_DISABLE_FORCE_INTEGRITY: >+ pe_dll_characteristics &= ~ IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY; >+ break; > case OPTION_NX_COMPAT: > pe_dll_characteristics |= IMAGE_DLL_CHARACTERISTICS_NX_COMPAT; > break; >+ case OPTION_DISABLE_NX_COMPAT: >+ pe_dll_characteristics &= ~ IMAGE_DLL_CHARACTERISTICS_NX_COMPAT; >+ break; > case OPTION_NO_ISOLATION: > pe_dll_characteristics |= IMAGE_DLLCHARACTERISTICS_NO_ISOLATION; > break; >+ case OPTION_DISABLE_NO_ISOLATION: >+ pe_dll_characteristics &= ~ IMAGE_DLLCHARACTERISTICS_NO_ISOLATION; >+ break; > case OPTION_NO_SEH: > pe_dll_characteristics |= IMAGE_DLLCHARACTERISTICS_NO_SEH; > break; >+ case OPTION_DISABLE_NO_SEH: >+ pe_dll_characteristics &= ~ IMAGE_DLLCHARACTERISTICS_NO_SEH; >+ break; > case OPTION_NO_BIND: > pe_dll_characteristics |= IMAGE_DLLCHARACTERISTICS_NO_BIND; > break; >+ case OPTION_DISABLE_NO_BIND: >+ pe_dll_characteristics &= ~ IMAGE_DLLCHARACTERISTICS_NO_BIND; >+ break; > case OPTION_WDM_DRIVER: > pe_dll_characteristics |= IMAGE_DLLCHARACTERISTICS_WDM_DRIVER; > break; >+ case OPTION_DISABLE_WDM_DRIVER: >+ pe_dll_characteristics &= ~ IMAGE_DLLCHARACTERISTICS_WDM_DRIVER; >+ break; > case OPTION_TERMINAL_SERVER_AWARE: > pe_dll_characteristics |= IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE; > break; >+ case OPTION_DISABLE_TERMINAL_SERVER_AWARE: >+ pe_dll_characteristics &= ~ IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE; >+ break; > case OPTION_BUILD_ID: > free ((char *) emit_build_id); > emit_build_id = NULL; >diff --git a/ld/emultempl/pep.em b/ld/emultempl/pep.em >index a0a7023e70..947fab6562 100644 >--- a/ld/emultempl/pep.em >+++ b/ld/emultempl/pep.em >@@ -99,6 +99,8 @@ fragment <<EOF > #define DLL_SUPPORT > #endif > >+#define DEFAULT_DLL_CHARACTERISTICS 0x0 >+ > #if defined(TARGET_IS_i386pep) || ! defined(DLL_SUPPORT) > #define PE_DEF_SUBSYSTEM 3 > #undef NT_EXE_IMAGE_BASE >@@ -147,7 +149,7 @@ static int pep_subsystem = ${SUBSYSTEM}; > static flagword real_flags = IMAGE_FILE_LARGE_ADDRESS_AWARE; > static int support_old_code = 0; > static lang_assignment_statement_type *image_base_statement = 0; >-static unsigned short pe_dll_characteristics = 0; >+static unsigned short pe_dll_characteristics = DEFAULT_DLL_CHARACTERISTICS; > static bfd_boolean insert_timestamp = TRUE; > static const char *emit_build_id; > >@@ -248,7 +250,17 @@ enum options > OPTION_NO_INSERT_TIMESTAMP, > OPTION_TERMINAL_SERVER_AWARE, > OPTION_BUILD_ID, >- OPTION_ENABLE_RELOC_SECTION >+ OPTION_ENABLE_RELOC_SECTION, >+ OPTION_DISABLE_RELOC_SECTION, >+ OPTION_DISABLE_HIGH_ENTROPY_VA, >+ OPTION_DISABLE_DYNAMIC_BASE, >+ OPTION_DISABLE_FORCE_INTEGRITY, >+ OPTION_DISABLE_NX_COMPAT, >+ OPTION_DISABLE_NO_ISOLATION, >+ OPTION_DISABLE_NO_SEH, >+ OPTION_DISABLE_NO_BIND, >+ OPTION_DISABLE_WDM_DRIVER, >+ OPTION_DISABLE_TERMINAL_SERVER_AWARE > }; > > static void >@@ -327,6 +339,16 @@ gld${EMULATION_NAME}_add_options > {"no-insert-timestamp", no_argument, NULL, OPTION_NO_INSERT_TIMESTAMP}, > {"build-id", optional_argument, NULL, OPTION_BUILD_ID}, > {"enable-reloc-section", no_argument, NULL, OPTION_ENABLE_RELOC_SECTION}, >+ {"disable-reloc-section", no_argument, NULL, OPTION_DISABLE_RELOC_SECTION}, >+ {"disable-high-entropy-va", no_argument, NULL, OPTION_DISABLE_HIGH_ENTROPY_VA}, >+ {"disable-dynamicbase",no_argument, NULL, OPTION_DISABLE_DYNAMIC_BASE}, >+ {"disable-forceinteg", no_argument, NULL, OPTION_DISABLE_FORCE_INTEGRITY}, >+ {"disable-nxcompat", no_argument, NULL, OPTION_DISABLE_NX_COMPAT}, >+ {"disable-no-isolation", no_argument, NULL, OPTION_DISABLE_NO_ISOLATION}, >+ {"disable-no-seh", no_argument, NULL, OPTION_DISABLE_NO_SEH}, >+ {"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}, > {NULL, no_argument, NULL, 0} > }; > >@@ -384,7 +406,7 @@ static definfo init[] = > D(SizeOfHeapReserve,"__size_of_heap_reserve__", 0x100000, FALSE), > D(SizeOfHeapCommit,"__size_of_heap_commit__", 0x1000, FALSE), > D(LoaderFlags,"__loader_flags__", 0x0, FALSE), >- D(DllCharacteristics, "__dll_characteristics__", 0x0, FALSE), >+ D(DllCharacteristics, "__dll_characteristics__", DEFAULT_DLL_CHARACTERISTICS, FALSE), > { NULL, 0, 0, NULL, 0, FALSE} > }; > >@@ -446,20 +468,23 @@ gld_${EMULATION_NAME}_list_options (FILE *file) > executable image files\n")); > fprintf (file, _(" --disable-long-section-names Never use long COFF section names, even\n\ > in object files\n")); >- fprintf (file, _(" --high-entropy-va Image is compatible with 64-bit address space\n\ >+ fprintf (file, _(" --[disable-]high-entropy-va Image is compatible with 64-bit address space\n\ > layout randomization (ASLR)\n")); >- fprintf (file, _(" --dynamicbase Image base address may be relocated using\n\ >+ fprintf (file, _(" --[disable-]dynamicbase Image base address may be relocated using\n\ > address space layout randomization (ASLR)\n")); > fprintf (file, _(" --enable-reloc-section Create the base relocation table\n")); >- fprintf (file, _(" --forceinteg Code integrity checks are enforced\n")); >- fprintf (file, _(" --nxcompat Image is compatible with data execution prevention\n")); >- fprintf (file, _(" --no-isolation Image understands isolation but do not isolate the image\n")); >- fprintf (file, _(" --no-seh Image does not use SEH; no SE handler may\n\ >+ fprintf (file, _(" --disable-reloc-section Do not create the base relocation table\n")); >+ fprintf (file, _(" --[disable-]forceinteg Code integrity checks are enforced\n")); >+ fprintf (file, _(" --[disable-]nxcompat Image is compatible with data execution\n\ >+ prevention\n")); >+ fprintf (file, _(" --[disable-]no-isolation Image understands isolation but do not\n\ >+ isolate the image\n")); >+ fprintf (file, _(" --[disable-]no-seh Image does not use SEH; no SE handler may\n\ > be called in this image\n")); >- fprintf (file, _(" --no-bind Do not bind this image\n")); >- fprintf (file, _(" --wdmdriver Driver uses the WDM model\n")); >- fprintf (file, _(" --tsaware Image is Terminal Server aware\n")); >- fprintf (file, _(" --build-id[=STYLE] Generate build ID\n")); >+ fprintf (file, _(" --[disable-]no-bind Do not bind this image\n")); >+ fprintf (file, _(" --[disable-]wdmdriver Driver uses the WDM model\n")); >+ fprintf (file, _(" --[disable-]tsaware Image is Terminal Server aware\n")); >+ fprintf (file, _(" --build-id[=STYLE] Generate build ID\n")); > #endif > } > >@@ -809,27 +834,57 @@ gld${EMULATION_NAME}_handle_option (int optc) > case OPTION_ENABLE_RELOC_SECTION: > pep_dll_enable_reloc_section = 1; > break; >+ case OPTION_DISABLE_RELOC_SECTION: >+ pep_dll_enable_reloc_section = 0; >+ /* fall through */ >+ case OPTION_DISABLE_DYNAMIC_BASE: >+ pe_dll_characteristics &= ~ IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE; >+ /* fall through */ >+ case OPTION_DISABLE_HIGH_ENTROPY_VA: >+ pe_dll_characteristics &= ~ IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA; >+ break; > case OPTION_FORCE_INTEGRITY: > pe_dll_characteristics |= IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY; > break; >+ case OPTION_DISABLE_FORCE_INTEGRITY: >+ pe_dll_characteristics &= ~ IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY; >+ break; > case OPTION_NX_COMPAT: > pe_dll_characteristics |= IMAGE_DLL_CHARACTERISTICS_NX_COMPAT; > break; >+ case OPTION_DISABLE_NX_COMPAT: >+ pe_dll_characteristics &= ~ IMAGE_DLL_CHARACTERISTICS_NX_COMPAT; >+ break; > case OPTION_NO_ISOLATION: > pe_dll_characteristics |= IMAGE_DLLCHARACTERISTICS_NO_ISOLATION; > break; >+ case OPTION_DISABLE_NO_ISOLATION: >+ pe_dll_characteristics &= ~ IMAGE_DLLCHARACTERISTICS_NO_ISOLATION; >+ break; > case OPTION_NO_SEH: > pe_dll_characteristics |= IMAGE_DLLCHARACTERISTICS_NO_SEH; > break; >+ case OPTION_DISABLE_NO_SEH: >+ pe_dll_characteristics &= ~ IMAGE_DLLCHARACTERISTICS_NO_SEH; >+ break; > case OPTION_NO_BIND: > pe_dll_characteristics |= IMAGE_DLLCHARACTERISTICS_NO_BIND; > break; >+ case OPTION_DISABLE_NO_BIND: >+ pe_dll_characteristics &= ~ IMAGE_DLLCHARACTERISTICS_NO_BIND; >+ break; > case OPTION_WDM_DRIVER: > pe_dll_characteristics |= IMAGE_DLLCHARACTERISTICS_WDM_DRIVER; > break; >+ case OPTION_DISABLE_WDM_DRIVER: >+ pe_dll_characteristics &= ~ IMAGE_DLLCHARACTERISTICS_WDM_DRIVER; >+ break; > case OPTION_TERMINAL_SERVER_AWARE: > pe_dll_characteristics |= IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE; > break; >+ case OPTION_DISABLE_TERMINAL_SERVER_AWARE: >+ pe_dll_characteristics &= ~ IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE; >+ break; > case OPTION_BUILD_ID: > free ((char *) emit_build_id); > emit_build_id = NULL; >-- >2.28.0.windows.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 19011
:
11152
| 12800 |
12801
|
12802
|
12804