# REQUIRES: x86 # RUN: llvm-mc -triple i686-windows-msvc %s -filetype=obj -o %t.obj # RUN: not lld-link %t.obj -safeseh -out:%t.exe -entry:main 2>&1 | FileCheck %s --check-prefix=ERROR # safe seh should be on by default. # RUN: not lld-link %t.obj -out:%t.exe -entry:main 2>&1 | FileCheck %s --check-prefix=ERROR # RUN: lld-link %t.obj -safeseh:no -out:%t.exe -entry:main # RUN: llvm-readobj --file-headers --coff-load-config %t.exe | FileCheck %s # -lldmingw should also turn off safeseh by default. # RUN: lld-link %t.obj -lldmingw -out:%t.exe -entry:main # RUN: llvm-readobj --file-headers --coff-load-config %t.exe | FileCheck %s # ERROR: /safeseh: {{.*}}safeseh-no.s.tmp.obj is not compatible with SEH # CHECK: Characteristics [ # CHECK-NOT: IMAGE_DLL_CHARACTERISTICS_NO_SEH # CHECK: ] # CHECK: LoadConfig [ # CHECK: Size: 0x48 # CHECK: SEHandlerTable: 0x0 # CHECK: SEHandlerCount: 0 # CHECK: ] # CHECK-NOT: SEHTable # Explicitly mark the object as not having safeseh. LLD should error unless # -safeseh:no is passed. .def @feat.00; .scl 3; .type 0; .endef .globl @feat.00 @feat.00 = 0 .def _main; .scl 2; .type 32; .endef .section .text,"xr",one_only,_main .globl _main _main: movl $42, %eax ret # Add a handler to create an .sxdata section, which -safeseh:no should ignore. .def _my_handler; .scl 3; .type 32; .endef .section .text,"xr",one_only,_my_handler _my_handler: ret .safeseh _my_handler .section .rdata,"dr" .globl __load_config_used __load_config_used: .long 72 .fill 60, 1, 0 .long ___safe_se_handler_table .long ___safe_se_handler_count