# REQUIRES: x86 # 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 --file-headers %t.exe | FileCheck %s --check-prefix=CHECK-NOGC # RUN: lld-link %t.obj -safeseh -out:%t.exe -opt:noref -entry:main -debug:dwarf # 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 --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 # CHECK-NOGC: LoadConfig [ # CHECK-NOGC: Size: 0x48 # CHECK-NOGC: SEHandlerTable: 0x # CHECK-NOGC: SEHandlerCount: 1 # CHECK-NOGC: ] # CHECK-NOGC: SEHTable [ # CHECK-NOGC-NEXT: 0x401006 # CHECK-NOGC-NEXT: ] # If we enable GC, the exception handler should be removed, and we should add # the DLL characteristic flag that indicates that there are no exception # handlers in this DLL. The exception handler table in the load config should # be empty and there should be no relocations for it. # # CHECK-GC: Characteristics [ # CHECK-GC: IMAGE_DLL_CHARACTERISTICS_NO_SEH # CHECK-GC: ] # CHECK-GC: BaseReloc [ # CHECK-GC-NEXT: ] # CHECK-GC: LoadConfig [ # CHECK-GC: Size: 0x48 # CHECK-GC: SEHandlerTable: 0x0 # CHECK-GC: SEHandlerCount: 0 # CHECK-GC: ] # CHECK-GC-NOT: SEHTable .def @feat.00; .scl 3; .type 0; .endef .globl @feat.00 @feat.00 = 1 .def _main; .scl 2; .type 32; .endef .section .text,"xr",one_only,_main .globl _main _main: movl $42, %eax ret # This handler can be GCd, which will make the safeseh table empty, so it should # appear null. .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