| # REQUIRES: x86 |
| # RUN: llvm-mc -triple i686-windows-msvc %s -filetype=obj -o %t.obj |
| # RUN: lld-link %t.obj -safeseh -out:%t.exe -entry:main |
| # RUN: llvm-readobj --file-headers %t.exe | FileCheck %s |
| |
| # This object lacks a _load_config_used global, so we set |
| # IMAGE_DLL_CHARACTERISTICS_NO_SEH even though there is an exception handler. |
| # This is a more secure default. If someone wants to use a CRT without a load |
| # config and they want to use 32-bit SEH, they will need to provide a |
| # safeseh-compatible load config. |
| |
| # CHECK-LABEL: Characteristics [ |
| # CHECK: IMAGE_DLL_CHARACTERISTICS_NO_SEH |
| # CHECK: ] |
| |
| # CHECK-LABEL: DataDirectory { |
| # CHECK: LoadConfigTableRVA: 0x0 |
| # CHECK: LoadConfigTableSize: 0x0 |
| # CHECK: } |
| |
| # CHECK-NOT: LoadConfig |
| # CHECK-NOT: SEHTable |
| |
| .def @feat.00; |
| .scl 3; |
| .type 0; |
| .endef |
| .globl @feat.00 |
| @feat.00 = 1 |
| |
| .text |
| .def _main; .scl 2; .type 32; .endef |
| .globl _main |
| _main: |
| pushl $_my_handler |
| movl $42, %eax |
| popl %ecx |
| ret |
| |
| .def _my_handler; .scl 3; .type 32; .endef |
| _my_handler: |
| ret |
| |
| .safeseh _my_handler |