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:   IMAGE_SCN_MEM_WRITE
     18 // CHECK-NEXT: SectionData
     19 // CHECK-NEXT:   09 12 08 03 00 03 0F 30 - 0E 88 00 00 09 64 02 00
     20 // CHECK-NEXT:   04 22 00 1A 00 00 00 00 - 00 00 00 00 21 00 00 00
     21 // CHECK-NEXT:   00 00 00 00 1B 00 00 00 - 00 00 00 00 01 00 00 00
     22 // CHECK-NEXT:   00 00 00 00
     23 
     24     .text
     25     .globl func
     26     .def func; .scl 2; .type 32; .endef
     27     .seh_proc func
     28 func:
     29     .seh_pushframe @code
     30     subq $24, %rsp
     31     .seh_stackalloc 24
     32     movq %rsi, 16(%rsp)
     33     .seh_savereg %rsi, 16
     34     movups %xmm8, (%rsp)
     35     .seh_savexmm %xmm8, 0
     36     pushq %rbx
     37     .seh_pushreg 3
     38     mov %rsp, %rbx
     39     .seh_setframe 3, 0
     40     .seh_endprologue
     41     .seh_handler __C_specific_handler, @except
     42     .seh_handlerdata
     43     .long 0
     44     .text
     45     .seh_startchained
     46     .seh_endprologue
     47     .seh_endchained
     48     lea (%rbx), %rsp
     49     pop %rbx
     50     addq $24, %rsp
     51     ret
     52     .seh_endproc
     53 
     54 // Test emission of small functions.
     55     .globl smallFunc
     56     .def smallFunc; .scl 2; .type 32; .endef
     57     .seh_proc smallFunc
     58 smallFunc:
     59     ret
     60     .seh_endproc
     61