Home | History | Annotate | Download | only in COFF
      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