brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.5 KiB · d9defe6 Raw
213 lines · plain
1// This test checks that we emit unwind info correctly for functions2// larger than 1MB.3// RUN: llvm-mc -triple aarch64-pc-win32 -filetype=obj %s -o %t.o4// RUN: llvm-readobj -S -r -u %t.o | FileCheck %s5 6// CHECK:        Section {7// CHECK:          Number: 48// CHECK-NEXT:     Name: .xdata (2E 78 64 61 74 61 00 00)9// CHECK-NEXT:     VirtualSize: 0x010// CHECK-NEXT:     VirtualAddress: 0x011// CHECK-NEXT:     RawDataSize: 5212// CHECK-NEXT:     PointerToRawData: 0x3D0A2013// CHECK-NEXT:     PointerToRelocations: 0x014// CHECK-NEXT:     PointerToLineNumbers: 0x015// CHECK-NEXT:     RelocationCount: 016// CHECK-NEXT:     LineNumberCount: 017// CHECK-NEXT:     Characteristics [ (0x40300040)18// CHECK-NEXT:       IMAGE_SCN_ALIGN_4BYTES (0x300000)19// CHECK-NEXT:       IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)20// CHECK-NEXT:       IMAGE_SCN_MEM_READ (0x40000000)21// CHECK-NEXT:     ]22// CHECK-NEXT:   }23// CHECK-NEXT:   Section {24// CHECK-NEXT:     Number: 525// CHECK-NEXT:     Name: .pdata (2E 70 64 61 74 61 00 00)26// CHECK-NEXT:     VirtualSize: 0x027// CHECK-NEXT:     VirtualAddress: 0x028// CHECK-NEXT:     RawDataSize: 4029// CHECK-NEXT:     PointerToRawData: 0x3D0A5430// CHECK-NEXT:     PointerToRelocations: 0x3D0A7C31// CHECK-NEXT:     PointerToLineNumbers: 0x032// CHECK-NEXT:     RelocationCount: 1033// CHECK-NEXT:     LineNumberCount: 034// CHECK-NEXT:     Characteristics [ (0x40300040)35// CHECK-NEXT:       IMAGE_SCN_ALIGN_4BYTES (0x300000)36// CHECK-NEXT:       IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)37// CHECK-NEXT:       IMAGE_SCN_MEM_READ (0x40000000)38// CHECK-NEXT:     ]39// CHECK-NEXT:   }40// CHECK-NEXT: ]41// CHECK-LABEL: Relocations [42// CHECK-NEXT:   Section (1) .text {43// CHECK-NEXT:     0x186A04 IMAGE_REL_ARM64_BRANCH26 foo (14)44// CHECK-NEXT:     0x3D091C IMAGE_REL_ARM64_BRANCH26 foo (14)45// CHECK-NEXT:   }46// CHECK-NEXT:   Section (5) .pdata {47// CHECK-NEXT:     0x0 IMAGE_REL_ARM64_ADDR32NB .text (0)48// CHECK-NEXT:     0x4 IMAGE_REL_ARM64_ADDR32NB .xdata (9)49// CHECK-NEXT:     0x8 IMAGE_REL_ARM64_ADDR32NB .text (0)50// CHECK-NEXT:     0xC IMAGE_REL_ARM64_ADDR32NB .xdata (9)51// CHECK-NEXT:     0x10 IMAGE_REL_ARM64_ADDR32NB $L.text_1 (2)52// CHECK-NEXT:     0x14 IMAGE_REL_ARM64_ADDR32NB .xdata (9)53// CHECK-NEXT:     0x18 IMAGE_REL_ARM64_ADDR32NB $L.text_2 (3)54// CHECK-NEXT:     0x1C IMAGE_REL_ARM64_ADDR32NB .xdata (9)55// CHECK-NEXT:     0x20 IMAGE_REL_ARM64_ADDR32NB $L.text_3 (4)56// CHECK-NEXT:     0x24 IMAGE_REL_ARM64_ADDR32NB .xdata (9)57// CHECK-NEXT:   }58// CHECK-NEXT: ]59// CHECK-LABEL: UnwindInformation [60// CHECK-NEXT:   RuntimeFunction {61// CHECK-NEXT:     Function: a (0x0)62// CHECK-NEXT:     ExceptionRecord: .xdata (0x0)63// CHECK-NEXT:     ExceptionData {64// CHECK-NEXT:       FunctionLength: 104857265// CHECK-NEXT:       Version: 066// CHECK-NEXT:       ExceptionData: No67// CHECK-NEXT:       EpiloguePacked: No68// CHECK-NEXT:       EpilogueScopes: 069// CHECK-NEXT:       ByteCodeLength: 470// CHECK-NEXT:       Prologue [71// CHECK-NEXT:         0xd561              ; str x30, [sp, #-16]!72// CHECK-NEXT:         0xe4                ; end73// CHECK-NEXT:       ]74// CHECK-NEXT:       EpilogueScopes [75// CHECK-NEXT:       ]76// CHECK-NEXT:     }77// CHECK-NEXT:   }78// CHECK-NEXT:   RuntimeFunction {79// CHECK-NEXT:     Function: a +0xFFFFC (0xFFFFC)80// CHECK-NEXT:     ExceptionRecord: .xdata +0x8 (0x8)81// CHECK-NEXT:     ExceptionData {82// CHECK-NEXT:       FunctionLength: 55144483// CHECK-NEXT:       Version: 084// CHECK-NEXT:       ExceptionData: No85// CHECK-NEXT:       EpiloguePacked: Yes86// CHECK-NEXT:       EpilogueOffset: 187// CHECK-NEXT:       ByteCodeLength: 488// CHECK-NEXT:       Prologue [89// CHECK-NEXT:         0xe5                ; end_c90// CHECK-NEXT:         0xd561              ; str x30, [sp, #-16]!91// CHECK-NEXT:         0xe4                ; end92// CHECK-NEXT:       ]93// CHECK-NEXT:       Epilogue [94// CHECK-NEXT:         0xd561              ; ldr x30, [sp], #1695// CHECK-NEXT:         0xe4                ; end96// CHECK-NEXT:       ]97// CHECK-NEXT:     }98// CHECK-NEXT:   }99// CHECK-NEXT:   RuntimeFunction {100// CHECK-NEXT:     Function: b (0x186A10)101// CHECK-NEXT:     ExceptionRecord: .xdata +0x10 (0x10)102// CHECK-NEXT:     ExceptionData {103// CHECK-NEXT:       FunctionLength: 1048572104// CHECK-NEXT:       Version: 0105// CHECK-NEXT:       ExceptionData: No106// CHECK-NEXT:       EpiloguePacked: No107// CHECK-NEXT:       EpilogueScopes: 0108// CHECK-NEXT:       ByteCodeLength: 8109// CHECK-NEXT:       Prologue [110// CHECK-NEXT:         0xe1                ; mov fp, sp111// CHECK-NEXT:         0xc81e              ; stp x19, x20, [sp, #240]112// CHECK-NEXT:         0x9f                ; stp x29, x30, [sp, #-256]!113// CHECK-NEXT:         0xe4                ; end114// CHECK-NEXT:       ]115// CHECK-NEXT:       EpilogueScopes [116// CHECK-NEXT:       ]117// CHECK-NEXT:     }118// CHECK-NEXT:   }119// CHECK-NEXT:   RuntimeFunction {120// CHECK-NEXT:     Function: $L.text_2 +0x86A0C (0x286A0C)121// CHECK-NEXT:     ExceptionRecord: .xdata +0x1C (0x1C)122// CHECK-NEXT:     ExceptionData {123// CHECK-NEXT:       FunctionLength: 1048572124// CHECK-NEXT:       Version: 0125// CHECK-NEXT:       ExceptionData: No126// CHECK-NEXT:       EpiloguePacked: Yes127// CHECK-NEXT:       EpilogueOffset: 0128// CHECK-NEXT:       ByteCodeLength: 8129// CHECK-NEXT:       Prologue [130// CHECK-NEXT:         0xe5                ; end_c131// CHECK-NEXT:         0xe1                ; mov fp, sp132// CHECK-NEXT:         0xc81e              ; stp x19, x20, [sp, #240]133// CHECK-NEXT:         0x9f                ; stp x29, x30, [sp, #-256]!134// CHECK-NEXT:         0xe4                ; end135// CHECK-NEXT:       ]136// CHECK-NEXT:     }137// CHECK-NEXT:   }138// CHECK-NEXT:   RuntimeFunction {139// CHECK-NEXT:     Function: $L.text_3 +0x86A08 (0x386A08)140// CHECK-NEXT:     ExceptionRecord: .xdata +0x28 (0x28)141// CHECK-NEXT:     ExceptionData {142// CHECK-NEXT:       FunctionLength: 302888143// CHECK-NEXT:       Version: 0144// CHECK-NEXT:       ExceptionData: No145// CHECK-NEXT:       EpiloguePacked: Yes146// CHECK-NEXT:       EpilogueOffset: 1147// CHECK-NEXT:       ByteCodeLength: 8148// CHECK-NEXT:       Prologue [149// CHECK-NEXT:         0xe5                ; end_c150// CHECK-NEXT:         0xe1                ; mov fp, sp151// CHECK-NEXT:         0xc81e              ; stp x19, x20, [sp, #240]152// CHECK-NEXT:         0x9f                ; stp x29, x30, [sp, #-256]!153// CHECK-NEXT:         0xe4                ; end154// CHECK-NEXT:       ]155// CHECK-NEXT:       Epilogue [156// CHECK-NEXT:         0xe1                ; mov sp, fp157// CHECK-NEXT:         0xc81e              ; ldp x19, x20, [sp, #240]158// CHECK-NEXT:         0x9f                ; ldp x29, x30, [sp], #256159// CHECK-NEXT:         0xe4                ; end160// CHECK-NEXT:       ]161// CHECK-NEXT:     }162// CHECK-NEXT:   }163// CHECK-NEXT: ]164 165	.text166// A simple function with an single epilog mirroring the prolog.167	.global	a168	.p2align	2169	.seh_proc a170a:171	str	x30, [sp, #-16]!172	.seh_save_reg_x	x30, 16173	.seh_endprologue174        .rept 400000175        nop176        .endr177	bl	foo178	.seh_startepilogue179	ldr	x30, [sp], #16180	.seh_save_reg_x	x30, 16181	.seh_endepilogue182	ret183	.seh_endfunclet184	.seh_endproc185 186// Example 1 from https://docs.microsoft.com/en-us/cpp/build/arm64-exception-handling#function-fragments187	.global	b188	.p2align	2189	.seh_proc b190b:191	stp	x29, lr, [sp, #-256]!192	.seh_save_fplr_x 256193	stp	x19, x20, [sp, #240]194	.seh_save_regp x19, 240195	mov	x29, fp196	.seh_set_fp197	.seh_endprologue198        .rept 600000199        nop200        .endr201	bl	foo202	.seh_startepilogue203	mov	sp, x29204	.seh_set_fp205	ldp	x19, x20, [sp, #240]206	.seh_save_regp x19, 240207	ldp	x29, lr, [sp], #256208	.seh_save_fplr_x 256209	.seh_endepilogue210	ret211	.seh_endfunclet212	.seh_endproc213