1 // This test checks that the SEH directives emit the correct unwind data. 2 // RUN: llvm-mc -triple x86_64-pc-win32 -filetype=obj %s | coff-dump.py | FileCheck %s 3 4 // CHECK: Name = .xdata 5 // CHECK-NEXT: VirtualSize 6 // CHECK-NEXT: VirtualAddress 7 // CHECK-NEXT: SizeOfRawData = 52 8 // CHECK-NEXT: PointerToRawData 9 // CHECK-NEXT: PointerToRelocations 10 // CHECK-NEXT: PointerToLineNumbers 11 // CHECK-NEXT: NumberOfRelocations = 4 12 // CHECK-NEXT: NumberOfLineNumbers = 0 13 // CHECK-NEXT: Charateristics 14 // CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA 15 // CHECK-NEXT: IMAGE_SCN_ALIGN_4BYTES 16 // CHECK-NEXT: IMAGE_SCN_MEM_READ 17 // CHECK-NEXT: SectionData 18 // CHECK-NEXT: 09 12 08 03 00 03 0F 30 - 0E 88 00 00 09 64 02 00 19 // CHECK-NEXT: 04 22 00 1A 00 00 00 00 - 00 00 00 00 21 00 00 00 20 // CHECK-NEXT: 00 00 00 00 1B 00 00 00 - 00 00 00 00 01 00 00 00 21 // CHECK-NEXT: 00 00 00 00 22 23 .text 24 .globl func 25 .def func; .scl 2; .type 32; .endef 26 .seh_proc func 27 func: 28 .seh_pushframe @code 29 subq $24, %rsp 30 .seh_stackalloc 24 31 movq %rsi, 16(%rsp) 32 .seh_savereg %rsi, 16 33 movups %xmm8, (%rsp) 34 .seh_savexmm %xmm8, 0 35 pushq %rbx 36 .seh_pushreg 3 37 mov %rsp, %rbx 38 .seh_setframe 3, 0 39 .seh_endprologue 40 .seh_handler __C_specific_handler, @except 41 .seh_handlerdata 42 .long 0 43 .text 44 .seh_startchained 45 .seh_endprologue 46 .seh_endchained 47 lea (%rbx), %rsp 48 pop %rbx 49 addq $24, %rsp 50 ret 51 .seh_endproc 52 53 // Test emission of small functions. 54 .globl smallFunc 55 .def smallFunc; .scl 2; .type 32; .endef 56 .seh_proc smallFunc 57 smallFunc: 58 ret 59 .seh_endproc 60