brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.6 KiB · 5e19456 Raw
248 lines · plain
1// This test checks that the SEH directives emit the correct unwind data.2 3// RUN: llvm-mc -triple aarch64-pc-win32 -filetype=obj %s | llvm-readobj -S -r -u - | FileCheck %s4 5// Check that the output assembler directives also can be parsed, and6// that they produce equivalent output:7 8// RUN: llvm-mc -triple aarch64-pc-win32 -filetype=asm %s | llvm-mc -triple aarch64-pc-win32 -filetype=obj - | llvm-readobj -S -r -u - | FileCheck %s9 10// CHECK:      Sections [11// CHECK:        Section {12// CHECK:          Name: .text13// CHECK:          RelocationCount: 014// CHECK:          Characteristics [15// CHECK-NEXT:       ALIGN_4BYTES16// CHECK-NEXT:       CNT_CODE17// CHECK-NEXT:       MEM_EXECUTE18// CHECK-NEXT:       MEM_READ19// CHECK-NEXT:     ]20// CHECK-NEXT:   }21// CHECK:        Section {22// CHECK:          Name: .xdata23// CHECK:          RawDataSize: 10024// CHECK:          RelocationCount: 125// CHECK:          Characteristics [26// CHECK-NEXT:       ALIGN_4BYTES27// CHECK-NEXT:       CNT_INITIALIZED_DATA28// CHECK-NEXT:       MEM_READ29// CHECK-NEXT:     ]30// CHECK-NEXT:   }31// CHECK:        Section {32// CHECK:          Name: .pdata33// CHECK:          RelocationCount: 234// CHECK:          Characteristics [35// CHECK-NEXT:       ALIGN_4BYTES36// CHECK-NEXT:       CNT_INITIALIZED_DATA37// CHECK-NEXT:       MEM_READ38// CHECK-NEXT:     ]39// CHECK-NEXT:   }40// CHECK-NEXT: ]41 42// CHECK-NEXT: Relocations [43// CHECK-NEXT:   Section (4) .xdata {44// CHECK-NEXT:     0x58 IMAGE_REL_ARM64_ADDR32NB __C_specific_handler45// CHECK-NEXT:   }46// CHECK-NEXT:   Section (5) .pdata {47// CHECK-NEXT:     0x0 IMAGE_REL_ARM64_ADDR32NB .text48// CHECK-NEXT:     0x4 IMAGE_REL_ARM64_ADDR32NB .xdata49// CHECK-NEXT:   }50// CHECK-NEXT: ]51 52// CHECK-NEXT: UnwindInformation [53// CHECK-NEXT:   RuntimeFunction {54// CHECK-NEXT:     Function: func55// CHECK-NEXT:     ExceptionRecord: .xdata56// CHECK-NEXT:     ExceptionData {57// CHECK-NEXT:       FunctionLength: 17258// CHECK:            Prologue [59// CHECK-NEXT:         0xe716c3            ; str p6, [sp, #3, mul vl]60// CHECK-NEXT:         0xe703c5            ; str z11, [sp, #5, mul vl]61// CHECK-NEXT:         0xdf05              ; addvl sp, #-562// CHECK-NEXT:         0xe76983            ; stp q9, q10, [sp, #-64]!63// CHECK-NEXT:         0xe73d83            ; str q29, [sp, #-64]!64// CHECK-NEXT:         0xe76243            ; stp d2, d3, [sp, #-64]!65// CHECK-NEXT:         0xe73f43            ; str d31, [sp, #-64]!66// CHECK-NEXT:         0xe77d03            ; stp x29, x30, [sp, #-64]!67// CHECK-NEXT:         0xe73e03            ; str x30, [sp, #-64]!68// CHECK-NEXT:         0xe74384            ; stp q3, q4, [sp, #64]69// CHECK-NEXT:         0xe71e84            ; str q30, [sp, #64]70// CHECK-NEXT:         0xe74444            ; stp d4, d5, [sp, #64]71// CHECK-NEXT:         0xe71d48            ; str d29, [sp, #64]72// CHECK-NEXT:         0xe74104            ; stp x1, x2, [sp, #64]73// CHECK-NEXT:         0xe70008            ; str x0, [sp, #64]74// CHECK-NEXT:         0xfc                ; pacibsp75// CHECK-NEXT:         0xec                ; clear unwound to call76// CHECK-NEXT:         0xeb                ; EC context77// CHECK-NEXT:         0xea                ; context78// CHECK-NEXT:         0xe9                ; machine frame79// CHECK-NEXT:         0xe8                ; trap frame80// CHECK-NEXT:         0xe3                ; nop81// CHECK-NEXT:         0xe202              ; add fp, sp, #1682// CHECK-NEXT:         0xdd41              ; str d13, [sp, #8]83// CHECK-NEXT:         0xde83              ; str d12, [sp, #-32]!84// CHECK-NEXT:         0xd884              ; stp d10, d11, [sp, #32]85// CHECK-NEXT:         0xda05              ; stp d8, d9, [sp, #-48]!86// CHECK-NEXT:         0x83                ; stp x29, x30, [sp, #-32]!87// CHECK-NEXT:         0x46                ; stp x29, x30, [sp, #48]88// CHECK-NEXT:         0xd141              ; str x24, [sp, #8]89// CHECK-NEXT:         0xd483              ; str x23, [sp, #-32]!90// CHECK-NEXT:         0xe6                ; save next91// CHECK-NEXT:         0xc882              ; stp x21, x22, [sp, #16]92// CHECK-NEXT:         0xd6c2              ; stp x25, lr, [sp, #16]93// CHECK-NEXT:         0x24                ; stp x19, x20, [sp, #-32]!94// CHECK-NEXT:         0xcc83              ; stp x21, x22, [sp, #-32]!95// CHECK-NEXT:         0x83                ; stp x29, x30, [sp, #-32]!96// CHECK-NEXT:         0xe1                ; mov fp, sp97// CHECK-NEXT:         0x01                ; sub sp, #1698// CHECK-NEXT:         0xe4                ; end99// CHECK-NEXT:       ]100// CHECK-NEXT:       EpilogueScopes [101// CHECK-NEXT:         EpilogueScope {102// CHECK-NEXT:           StartOffset: 41103// CHECK-NEXT:           EpilogueStartIndex: 77104// CHECK-NEXT:           Opcodes [105// CHECK-NEXT:             0x01                ; add sp, #16106// CHECK-NEXT:             0xe4                ; end107// CHECK-NEXT:           ]108// CHECK-NEXT:         }109// CHECK-NEXT:       ]110// CHECK-NEXT:       ExceptionHandler [111// CHECK-NEXT:         Routine: __C_specific_handler (0x0)112// CHECK-NEXT:         Parameter: 0x0113// CHECK-NEXT:       ]114// CHECK-NEXT:     }115// CHECK-NEXT:   }116// CHECK-NEXT: ]117 118 119    .text120    .globl func121    .def func122    .scl 2123    .type 32124    .endef125    .seh_proc func126func:127    sub sp, sp, #24128    .seh_stackalloc 24129    mov x29, sp130    .seh_set_fp131    stp x29, x30, [sp, #-32]!132    .seh_save_fplr_x 32133    stp x21, x22, [sp, #-32]!134    .seh_save_regp_x x21, 32135    stp x19, x20, [sp, #-32]!136    .seh_save_r19r20_x 32137    stp x25, x30, [sp, #16]138    .seh_save_lrpair x25, 16139    stp x21, x22, [sp, #16]140    .seh_save_regp x21, 16141    stp x23, x24, [sp, #32]142    .seh_save_next143    str x23, [sp, #-32]!144    .seh_save_reg_x x23, 32145    str x24, [sp, #8]146    .seh_save_reg x24, 8147    stp x29, x30, [sp, #48]148    .seh_save_fplr 48149    stp x29, x30, [sp, #-32]!150    .seh_save_fplr_x 32151    stp d8, d9, [sp, #-48]!152    .seh_save_fregp_x d8, 48153    stp d10, d11, [sp, #32]154    .seh_save_fregp d10, 32155    str d12, [sp, #-32]!156    .seh_save_freg_x d12, 32157    str d13, [sp, #8]158    .seh_save_freg d13, 8159    add x29, sp, #16160    .seh_add_fp 16161    nop162    .seh_nop163    nop164    .seh_trap_frame165    nop166    .seh_pushframe167    nop168    .seh_context169    nop170    .seh_ec_context171    nop172    .seh_clear_unwound_to_call173    pacibsp174    .seh_pac_sign_lr175    nop176    .seh_save_any_reg x0, 64177    nop178    .seh_save_any_reg_p x1, 64179    nop180    .seh_save_any_reg d29, 64181    nop182    .seh_save_any_reg_p d4, 64183    nop184    .seh_save_any_reg q30, 64185    nop186    .seh_save_any_reg_p q3, 64187    nop188    .seh_save_any_reg_x lr, 64189    nop190    .seh_save_any_reg_px fp, 64191    nop192    .seh_save_any_reg_x d31, 64193    nop194    .seh_save_any_reg_px d2, 64195    nop196    .seh_save_any_reg_x q29, 64197    nop198    .seh_save_any_reg_px q9, 64199    nop200    .seh_allocz 5201    nop202    .seh_save_zreg z11, 5203    nop204    .seh_save_preg p6, 3205    nop206    .seh_endprologue207    nop208    .seh_startepilogue209    add sp, sp, #24210    .seh_stackalloc 24211    .seh_endepilogue212    ret213    .seh_handler __C_specific_handler, @except214    .seh_handlerdata215    .long 0216    .text217    .seh_endproc218 219    // Function with no .seh directives; no pdata/xdata entries are220    // generated.221    .globl smallFunc222    .def smallFunc223    .scl 2224    .type 32225    .endef226    .seh_proc smallFunc227smallFunc:228    ret229    .seh_endproc230 231    // Function with no .seh directives, but with .seh_handlerdata.232    // No xdata/pdata entries are generated, but the custom handler data233    // (the .long after .seh_handlerdata) is left orphaned in the xdata234    // section.235    .globl handlerFunc236    .def handlerFunc237    .scl 2238    .type 32239    .endef240    .seh_proc handlerFunc241handlerFunc:242    ret243    .seh_handler __C_specific_handler, @except244    .seh_handlerdata245    .long 0246    .text247    .seh_endproc248