COFF: Ensure that objects produced by LLVM link with /safeseh
Summary:
We indicate that the object files are safe by emitting a @feat.00
absolute address symbol. The address is presumably interpreted as a
bitfield of features that the compiler would like to enable. Bit 0 is
documented in the PE COFF spec to opt in to "registered SEH", which is
what /safeseh enables.
LLVM's object files are safe by default because LLVM doesn't know how to
produce SEH handlers.
Reviewers: Bigcheese
CC: llvm-commits
Differential Revision: http://llvm-reviews.chandlerc.com/D1691
llvm-svn: 190898
diff --git a/llvm/test/CodeGen/X86/coff-feat00.ll b/llvm/test/CodeGen/X86/coff-feat00.ll
new file mode 100644
index 0000000..1dcd427
--- /dev/null
+++ b/llvm/test/CodeGen/X86/coff-feat00.ll
@@ -0,0 +1,7 @@
+; RUN: llc -O0 -mtriple=i386-pc-win32 -filetype=asm -o - %s | FileCheck %s
+
+define i32 @foo() {
+ ret i32 0
+}
+
+; CHECK: @feat.00 = 1
diff --git a/llvm/test/MC/COFF/feat00.s b/llvm/test/MC/COFF/feat00.s
new file mode 100644
index 0000000..b8862de
--- /dev/null
+++ b/llvm/test/MC/COFF/feat00.s
@@ -0,0 +1,13 @@
+// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s -o - | llvm-readobj -t | FileCheck %s
+
+"@feat.00" = 123
+
+// CHECK: Symbol {
+// CHECK: Name: @feat.00
+// CHECK: Value: 123
+// CHECK: Section: (-1)
+// CHECK: BaseType: Null (0x0)
+// CHECK: ComplexType: Null (0x0)
+// CHECK: StorageClass: External (0x2)
+// CHECK: AuxSymbolCount: 0
+// CHECK: }