brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.2 KiB · 31e8453 Raw
162 lines · plain
1// This test checks that the SEH directives emit the correct unwind data.2 3// RUN: llvm-mc -triple x86_64-pc-win32 -filetype=obj %s | llvm-readobj -S -u -r - | FileCheck %s4 5// CHECK:      Sections [6// CHECK:        Section {7// CHECK:          Name: .text8// CHECK:          RelocationCount: 09// CHECK:          Characteristics [10// CHECK-NEXT:       ALIGN_4BYTES11// CHECK-NEXT:       CNT_CODE12// CHECK-NEXT:       MEM_EXECUTE13// CHECK-NEXT:       MEM_READ14// CHECK-NEXT:     ]15// CHECK-NEXT:   }16// CHECK:        Section {17// CHECK:          Name: .xdata18// CHECK:          RawDataSize: 5219// CHECK:          RelocationCount: 420// CHECK:          Characteristics [21// CHECK-NEXT:       ALIGN_4BYTES22// CHECK-NEXT:       CNT_INITIALIZED_DATA23// CHECK-NEXT:       MEM_READ24// CHECK-NEXT:     ]25// CHECK-NEXT:   }26// CHECK:        Section {27// CHECK:          Name: .pdata28// CHECK:          RelocationCount: 929// CHECK:          Characteristics [30// CHECK-NEXT:       ALIGN_4BYTES31// CHECK-NEXT:       CNT_INITIALIZED_DATA32// CHECK-NEXT:       MEM_READ33// CHECK-NEXT:     ]34// CHECK-NEXT:   }35// CHECK-NEXT: ]36 37// CHECK-NEXT: Relocations [38// CHECK-NEXT:   Section (4) .xdata {39// CHECK-NEXT:     0x14 IMAGE_REL_AMD64_ADDR32NB __C_specific_handler40// CHECK-NEXT:     0x20 IMAGE_REL_AMD64_ADDR32NB .text41// CHECK-NEXT:     0x24 IMAGE_REL_AMD64_ADDR32NB .text42// CHECK-NEXT:     0x28 IMAGE_REL_AMD64_ADDR32NB .xdata43// CHECK-NEXT:   }44// CHECK-NEXT:   Section (5) .pdata {45// CHECK-NEXT:     0x0 IMAGE_REL_AMD64_ADDR32NB .text46// CHECK-NEXT:     0x4 IMAGE_REL_AMD64_ADDR32NB .text47// CHECK-NEXT:     0x8 IMAGE_REL_AMD64_ADDR32NB .xdata48// CHECK-NEXT:     0xC IMAGE_REL_AMD64_ADDR32NB .text49// CHECK-NEXT:     0x10 IMAGE_REL_AMD64_ADDR32NB .text50// CHECK-NEXT:     0x14 IMAGE_REL_AMD64_ADDR32NB .xdata51// CHECK-NEXT:     0x18 IMAGE_REL_AMD64_ADDR32NB .text52// CHECK-NEXT:     0x1C IMAGE_REL_AMD64_ADDR32NB .text53// CHECK-NEXT:     0x20 IMAGE_REL_AMD64_ADDR32NB .xdata54// CHECK-NEXT:   }55// CHECK-NEXT: ]56 57 58// CHECK:      UnwindInformation [59// CHECK-NEXT:   RuntimeFunction {60// CHECK-NEXT:     StartAddress: [[CodeSect1:[^ ]+]] [[BeginDisp1:(\+0x[A-F0-9]+)?]]61// CHECK-NEXT:     EndAddress: [[CodeSect1]] [[EndDisp1:(\+0x[A-F0-9]+)?]]62// CHECK-NEXT:     UnwindInfoAddress:63// CHECK-NEXT:     UnwindInfo {64// CHECK-NEXT:       Version: 165// CHECK-NEXT:       Flags [66// CHECK-NEXT:         ExceptionHandler67// CHECK-NEXT:       ]68// CHECK-NEXT:       PrologSize: 1869// CHECK-NEXT:       FrameRegister: RBX70// CHECK-NEXT:       FrameOffset: 0x071// CHECK-NEXT:       UnwindCodeCount: 872// CHECK-NEXT:       UnwindCodes [73// CHECK-NEXT:         0x12: SET_FPREG reg=RBX, offset=0x074// CHECK-NEXT:         0x0F: PUSH_NONVOL reg=RBX75// CHECK-NEXT:         0x0E: SAVE_XMM128 reg=XMM8, offset=0x076// CHECK-NEXT:         0x09: SAVE_NONVOL reg=RSI, offset=0x1077// CHECK-NEXT:         0x04: ALLOC_SMALL size=2478// CHECK-NEXT:         0x00: PUSH_MACHFRAME errcode=yes79// CHECK-NEXT:       ]80// CHECK-NEXT:       Handler: __C_specific_handler81// CHECK-NEXT:     }82// CHECK-NEXT:   }83// CHECK-NEXT:   RuntimeFunction {84// CHECK-NEXT:     StartAddress: [[CodeSect2:[^ ]+]] [[BeginDisp2:(\+0x[A-F0-9]+)?]]85// CHECK-NEXT:     EndAddress: [[CodeSect2]] [[BeginDisp2:(\+0x[A-F0-9]+)?]]86// CHECK-NEXT:     UnwindInfoAddress:87// CHECK-NEXT:     UnwindInfo {88// CHECK-NEXT:       Version: 189// CHECK-NEXT:       Flags [90// CHECK-NEXT:         ChainInfo91// CHECK-NEXT:       ]92// CHECK-NEXT:       PrologSize: 093// CHECK-NEXT:       FrameRegister: -94// CHECK-NEXT:       FrameOffset: -95// CHECK-NEXT:       UnwindCodeCount: 096// CHECK-NEXT:       UnwindCodes [97// CHECK-NEXT:       ]98// CHECK-NEXT:       Chained {99// CHECK-NEXT:         StartAddress: [[CodeSect1]] [[BeginDisp1]]100// CHECK-NEXT:         EndAddress: [[CodeSect1]] [[EndDisp1]]101// CHECK-NEXT:         UnwindInfoAddress:102// CHECK-NEXT:       }103// CHECK-NEXT:     }104// CHECK-NEXT:   }105// CHECK-NEXT:   RuntimeFunction {106// CHECK-NEXT:     StartAddress: [[CodeSect3:[^ ]+]] [[BeginDisp3:(\+0x[A-F0-9]+)?]]107// CHECK-NEXT:     EndAddress: [[CodeSect3]] [[BeginDisp3:(\+0x[A-F0-9]+)?]]108// CHECK-NEXT:     UnwindInfoAddress:109// CHECK-NEXT:     UnwindInfo {110// CHECK-NEXT:       Version: 1111// CHECK-NEXT:       Flags [112// CHECK-NEXT:       ]113// CHECK-NEXT:       PrologSize: 0114// CHECK-NEXT:       FrameRegister: -115// CHECK-NEXT:       FrameOffset: -116// CHECK-NEXT:       UnwindCodeCount: 0117// CHECK-NEXT:       UnwindCodes [118// CHECK-NEXT:       ]119// CHECK-NEXT:     }120// CHECK-NEXT:   }121// CHECK-NEXT: ]122 123    .text124    .globl func125    .def func; .scl 2; .type 32; .endef126    .seh_proc func127func:128    .seh_pushframe @code129    subq $24, %rsp130    .seh_stackalloc 24131    movq %rsi, 16(%rsp)132    .seh_savereg %rsi, 16133    movups %xmm8, (%rsp)134    .seh_savexmm %xmm8, 0135    pushq %rbx136    .seh_pushreg %rbx137    mov %rsp, %rbx138    .seh_setframe 3, 0139    .seh_endprologue140    .seh_handler __C_specific_handler, @except141    .seh_handlerdata142    .long 0143    .text144    .seh_startchained145    .seh_endprologue146    .seh_endchained147    .seh_startepilogue148    lea (%rbx), %rsp149    pop %rbx150    addq $24, %rsp151    .seh_endepilogue152    ret153    .seh_endproc154 155// Test emission of small functions.156    .globl smallFunc157    .def smallFunc; .scl 2; .type 32; .endef158    .seh_proc smallFunc159smallFunc:160    ret161    .seh_endproc162