From ff88d5a26f109979d5c5f04bca0f42a64d971d10 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Wed, 29 Jul 2015 20:25:40 +0000 Subject: [PATCH] COFF: Add /safeseh command line option. If /safeseh is specified, all input files must be compatible with Safe SEH. llvm-svn: 243565 --- lld/COFF/Driver.cpp | 11 ++++++++++ lld/test/COFF/safeseh.test | 51 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 lld/test/COFF/safeseh.test diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index b7e7f4c..6d2f484 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -693,6 +693,17 @@ bool LinkerDriver::link(llvm::ArrayRef ArgsArr) { } } + // Handle /safeseh. + if (Args.hasArg(OPT_safeseh)) { + for (ObjectFile *File : Symtab.ObjectFiles) { + if (File->SEHCompat) + continue; + llvm::errs() << "/safeseh: " << File->getName() + << " is not compatible with SEH\n"; + return false; + } + } + // Windows specific -- when we are creating a .dll file, we also // need to create a .lib file. if (!Config->Exports.empty()) { diff --git a/lld/test/COFF/safeseh.test b/lld/test/COFF/safeseh.test new file mode 100644 index 0000000..a3cd4f7 --- /dev/null +++ b/lld/test/COFF/safeseh.test @@ -0,0 +1,51 @@ +# RUN: sed s/FEAT_VALUE/1/ %s | yaml2obj > %t.obj +# RUN: lld -flavor link2 /out:%t.exe /subsystem:console /entry:main /safeseh %t.obj + +# RUN: sed s/FEAT_VALUE/0/ %s | yaml2obj > %t.obj +# RUN: not lld -flavor link2 /out:%t.exe /subsystem:console /entry:main \ +# RUN: /safeseh %t.obj >& %t.log +# RUN: FileCheck %s < %t.log + +# CHECK: /safeseh: {{.*}} is not compatible with SEH + +--- +header: + Machine: IMAGE_FILE_MACHINE_I386 + Characteristics: [ ] +sections: + - Name: .text + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ] + Alignment: 1 + SectionData: 0000000000000000 +symbols: + - Name: '@comp.id' + Value: 14766605 + SectionNumber: 65535 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + - Name: '@feat.00' + Value: FEAT_VALUE + SectionNumber: 65535 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + - Name: .text + Value: 0 + SectionNumber: 1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 8 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 0 + - Name: _main + Value: 0 + SectionNumber: 1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_FUNCTION + StorageClass: IMAGE_SYM_CLASS_EXTERNAL +... -- 2.7.4