diff options
| author | Rui Ueyama <ruiu@google.com> | 2017-05-18 20:26:58 +0000 |
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2017-05-18 20:26:58 +0000 |
| commit | a6749432114fdf02a365d8ddac8c363cbc656974 (patch) | |
| tree | dfd3d8efc58173a6fb171c05cae729a61512b1f6 /lld | |
| parent | d66d976efd89deea86e27e79e1f375fb6bfd968a (diff) | |
| download | bcm5719-llvm-a6749432114fdf02a365d8ddac8c363cbc656974.tar.gz bcm5719-llvm-a6749432114fdf02a365d8ddac8c363cbc656974.zip | |
Set IMAGE_DLL_CHARACTERISTICS_NO_BIND.
Our output is not compatible with the Binding feature, so make it
explicit that.
Differential Revision: https://reviews.llvm.org/D33336
llvm-svn: 303378
Diffstat (limited to 'lld')
| -rw-r--r-- | lld/COFF/Config.h | 1 | ||||
| -rw-r--r-- | lld/COFF/Driver.cpp | 2 | ||||
| -rw-r--r-- | lld/COFF/Writer.cpp | 9 | ||||
| -rw-r--r-- | lld/test/COFF/hello32.test | 3 | ||||
| -rw-r--r-- | lld/test/COFF/options.test | 8 |
5 files changed, 10 insertions, 13 deletions
diff --git a/lld/COFF/Config.h b/lld/COFF/Config.h index 2e08ddc9e10..d859b1fbb7d 100644 --- a/lld/COFF/Config.h +++ b/lld/COFF/Config.h @@ -155,7 +155,6 @@ struct Configuration { uint32_t MajorOSVersion = 6; uint32_t MinorOSVersion = 0; bool DynamicBase = true; - bool AllowBind = true; bool NxCompat = true; bool AllowIsolation = true; bool TerminalServerAware = true; diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index eeae495c13a..da028242886 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -820,8 +820,6 @@ void LinkerDriver::link(ArrayRef<const char *> ArgsArr) { Config->ManifestInput.push_back(Arg->getValue()); // Handle miscellaneous boolean flags. - if (Args.hasArg(OPT_allowbind_no)) - Config->AllowBind = false; if (Args.hasArg(OPT_allowisolation_no)) Config->AllowIsolation = false; if (Args.hasArg(OPT_dynamicbase_no)) diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp index 745b152bd0f..5cadb739cc4 100644 --- a/lld/COFF/Writer.cpp +++ b/lld/COFF/Writer.cpp @@ -615,14 +615,19 @@ template <typename PEHeaderTy> void Writer::writeHeader() { PE->SizeOfStackCommit = Config->StackCommit; PE->SizeOfHeapReserve = Config->HeapReserve; PE->SizeOfHeapCommit = Config->HeapCommit; + + // Import Descriptor Tables and Import Address Tables are merged + // in our output. That's not compatible with the Binding feature + // that is sort of prelinking. Setting this flag to make it clear + // that our outputs are not for the Binding. + PE->DLLCharacteristics = IMAGE_DLL_CHARACTERISTICS_NO_BIND; + if (Config->AppContainer) PE->DLLCharacteristics |= IMAGE_DLL_CHARACTERISTICS_APPCONTAINER; if (Config->DynamicBase) PE->DLLCharacteristics |= IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE; if (Config->HighEntropyVA) PE->DLLCharacteristics |= IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA; - if (!Config->AllowBind) - PE->DLLCharacteristics |= IMAGE_DLL_CHARACTERISTICS_NO_BIND; if (Config->NxCompat) PE->DLLCharacteristics |= IMAGE_DLL_CHARACTERISTICS_NX_COMPAT; if (!Config->AllowIsolation) diff --git a/lld/test/COFF/hello32.test b/lld/test/COFF/hello32.test index e6117b990da..b7c5f28c353 100644 --- a/lld/test/COFF/hello32.test +++ b/lld/test/COFF/hello32.test @@ -41,9 +41,10 @@ HEADER-NEXT: MinorSubsystemVersion: 0 HEADER-NEXT: SizeOfImage: 16896 HEADER-NEXT: SizeOfHeaders: 512 HEADER-NEXT: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI (0x3) -HEADER-NEXT: Characteristics [ (0x9140) +HEADER-NEXT: Characteristics [ (0x9940) HEADER-NEXT: IMAGE_DLL_CHARACTERISTICS_APPCONTAINER (0x1000) HEADER-NEXT: IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE (0x40) +HEADER-NEXT: IMAGE_DLL_CHARACTERISTICS_NO_BIND (0x800) HEADER-NEXT: IMAGE_DLL_CHARACTERISTICS_NX_COMPAT (0x100) HEADER-NEXT: IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE (0x8000) HEADER-NEXT: ] diff --git a/lld/test/COFF/options.test b/lld/test/COFF/options.test index 39f944beddb..a23da1971d1 100644 --- a/lld/test/COFF/options.test +++ b/lld/test/COFF/options.test @@ -2,13 +2,7 @@ # RUN: lld-link /out:%t.exe /entry:main %t.obj # RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=BIND %s -# RUN: lld-link /allowbind /out:%t.exe /entry:main %t.obj -# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=BIND %s -BIND-NOT: IMAGE_DLL_CHARACTERISTICS_NO_BIND - -# RUN: lld-link /allowbind:no /out:%t.exe /entry:main %t.obj -# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=NOBIND %s -NOBIND: IMAGE_DLL_CHARACTERISTICS_NO_BIND +BIND: IMAGE_DLL_CHARACTERISTICS_NO_BIND # RUN: lld-link /out:%t.exe /entry:main %t.obj # RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=ISO %s |

