diff options
author | Martin Storsjo <martin@martin.st> | 2017-12-15 20:53:03 +0000 |
---|---|---|
committer | Martin Storsjo <martin@martin.st> | 2017-12-15 20:53:03 +0000 |
commit | a1e9b6e3d2d82e2259631450e9b345b4ec3d5b51 (patch) | |
tree | 85dacf95b4901f2e61a6f8c444d368b46761dbfb | |
parent | cad70885a537e8392794f82cd9664ca37b03cb9f (diff) | |
download | bcm5719-llvm-a1e9b6e3d2d82e2259631450e9b345b4ec3d5b51.tar.gz bcm5719-llvm-a1e9b6e3d2d82e2259631450e9b345b4ec3d5b51.zip |
[COFF] Set the IMAGE_DLL_CHARACTERISTICS_NO_SEH flag automatically
This seems to match how link.exe sets it.
Differential Revision: https://reviews.llvm.org/D41252
llvm-svn: 320860
-rw-r--r-- | lld/COFF/Writer.cpp | 3 | ||||
-rw-r--r-- | lld/test/COFF/hello32.test | 3 | ||||
-rw-r--r-- | lld/test/COFF/safeseh.s | 6 |
3 files changed, 9 insertions, 3 deletions
diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp index dd171ca2bf2..584f0621bea 100644 --- a/lld/COFF/Writer.cpp +++ b/lld/COFF/Writer.cpp @@ -688,6 +688,9 @@ template <typename PEHeaderTy> void Writer::writeHeader() { PE->DLLCharacteristics |= IMAGE_DLL_CHARACTERISTICS_NX_COMPAT; if (!Config->AllowIsolation) PE->DLLCharacteristics |= IMAGE_DLL_CHARACTERISTICS_NO_ISOLATION; + if (Config->Machine == I386 && !SEHTable && + !Symtab->findUnderscore("_load_config_used")) + PE->DLLCharacteristics |= IMAGE_DLL_CHARACTERISTICS_NO_SEH; if (Config->TerminalServerAware) PE->DLLCharacteristics |= IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE; PE->NumberOfRvaAndSize = NumberfOfDataDirectory; diff --git a/lld/test/COFF/hello32.test b/lld/test/COFF/hello32.test index 923bffdc982..2399193da6a 100644 --- a/lld/test/COFF/hello32.test +++ b/lld/test/COFF/hello32.test @@ -42,9 +42,10 @@ HEADER-NEXT: MinorSubsystemVersion: 0 HEADER-NEXT: SizeOfImage: 20480 HEADER-NEXT: SizeOfHeaders: 512 HEADER-NEXT: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI (0x3) -HEADER-NEXT: Characteristics [ (0x9140) +HEADER-NEXT: Characteristics [ (0x9540) HEADER-NEXT: IMAGE_DLL_CHARACTERISTICS_APPCONTAINER (0x1000) HEADER-NEXT: IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE (0x40) +HEADER-NEXT: IMAGE_DLL_CHARACTERISTICS_NO_SEH (0x400) 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/safeseh.s b/lld/test/COFF/safeseh.s index d8fea2e44ee..35f54c590d1 100644 --- a/lld/test/COFF/safeseh.s +++ b/lld/test/COFF/safeseh.s @@ -1,11 +1,12 @@ # RUN: llvm-mc -triple i686-windows-msvc %s -filetype=obj -o %t.obj # RUN: lld-link %t.obj -safeseh -out:%t.exe -opt:noref -entry:main -# RUN: llvm-readobj -coff-basereloc -coff-load-config %t.exe | FileCheck %s --check-prefix=CHECK-NOGC +# RUN: llvm-readobj -coff-basereloc -coff-load-config -file-headers %t.exe | FileCheck %s --check-prefix=CHECK-NOGC # RUN: lld-link %t.obj -safeseh -out:%t.exe -opt:ref -entry:main -# RUN: llvm-readobj -coff-basereloc -coff-load-config %t.exe | FileCheck %s --check-prefix=CHECK-GC +# RUN: llvm-readobj -coff-basereloc -coff-load-config -file-headers %t.exe | FileCheck %s --check-prefix=CHECK-GC # __safe_se_handler_table needs to be relocated against ImageBase. # check that the relocation is present. +# CHECK-NOGC-NOT: IMAGE_DLL_CHARACTERISTICS_NO_SEH # CHECK-NOGC: BaseReloc [ # CHECK-NOGC: Entry { # CHECK-NOGC: Type: HIGHLOW @@ -20,6 +21,7 @@ # Without the SEH table, the address is absolute, so check that we do # not have a relocation for it. +# CHECK-GC-NOT: IMAGE_DLL_CHARACTERISTICS_NO_SEH # CHECK-GC: BaseReloc [ # CHECK-GC-NEXT: ] # CHECK-GC: LoadConfig [ |