diff options
| author | Rui Ueyama <ruiu@google.com> | 2017-09-15 22:49:13 +0000 |
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2017-09-15 22:49:13 +0000 |
| commit | eef6b2a5c97c139a447a2b1d45d48262be5239e3 (patch) | |
| tree | 1668e2c731a0ee1f6d8f7f26d8953fbc7bf876a3 | |
| parent | b5abcc558d4a1b53e3efbd4d26a8fd0d6676130e (diff) | |
| download | bcm5719-llvm-eef6b2a5c97c139a447a2b1d45d48262be5239e3.tar.gz bcm5719-llvm-eef6b2a5c97c139a447a2b1d45d48262be5239e3.zip | |
Revert r303378: Set IMAGE_DLL_CHARACTERISTICS_NO_BIND.
r303378 was submitted because r303374 (Merge IAT and ILT) made lld's
output incompatible with the Binding feature. Now that r303374 was
reverted, we do not need to keep this change.
Pointed out by pcc.
llvm-svn: 313414
| -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, 13 insertions, 10 deletions
diff --git a/lld/COFF/Config.h b/lld/COFF/Config.h index 0b8489b7c53..995a398a3c9 100644 --- a/lld/COFF/Config.h +++ b/lld/COFF/Config.h @@ -167,6 +167,7 @@ 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 0cae83461c1..6785111acd3 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -962,6 +962,8 @@ void LinkerDriver::link(ArrayRef<const char *> ArgsArr) { } // 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 799611f39ab..66e4818650e 100644 --- a/lld/COFF/Writer.cpp +++ b/lld/COFF/Writer.cpp @@ -683,19 +683,14 @@ 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 e987bb95389..feb65f39d4d 100644 --- a/lld/test/COFF/hello32.test +++ b/lld/test/COFF/hello32.test @@ -42,10 +42,9 @@ HEADER-NEXT: MinorSubsystemVersion: 0 HEADER-NEXT: SizeOfImage: 16896 HEADER-NEXT: SizeOfHeaders: 512 HEADER-NEXT: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI (0x3) -HEADER-NEXT: Characteristics [ (0x9940) +HEADER-NEXT: Characteristics [ (0x9140) 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 a23da1971d1..39f944beddb 100644 --- a/lld/test/COFF/options.test +++ b/lld/test/COFF/options.test @@ -2,7 +2,13 @@ # RUN: lld-link /out:%t.exe /entry:main %t.obj # RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=BIND %s -BIND: IMAGE_DLL_CHARACTERISTICS_NO_BIND +# 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 # RUN: lld-link /out:%t.exe /entry:main %t.obj # RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=ISO %s |

