1c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// This test checks the alignment and padding of the unwind info. 2c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke 3c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// RUN: llvm-mc -triple x86_64-pc-win32 -filetype=obj %s | llvm-readobj -s -sd -sr -u | FileCheck %s 4c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke 5c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: Sections [ 6c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: Section { 7c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: Name: .xdata 8c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: RawDataSize: 8 9c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: RelocationCount: 0 10c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: Characteristics [ 11c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ALIGN_4BYTES 12c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: CNT_INITIALIZED_DATA 13c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: MEM_READ 14c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ] 15c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: Relocations [ 16c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ] 17c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: SectionData ( 18c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: 0000: 01000000 00000000 19c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ) 20c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: } 21c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: Section { 22c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: Name: .pdata 23c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: RawDataSize: 12 24c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: RelocationCount: 3 25c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: Characteristics [ 26c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: IMAGE_SCN_ALIGN_4BYTES 27c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA 28c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: IMAGE_SCN_MEM_READ 29c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ] 30c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: Relocations [ 31c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: [[BeginDisp:0x[A-F0-9]+]] IMAGE_REL_AMD64_ADDR32NB smallFunc 32c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: [[EndDisp:0x[A-F0-9]+]] IMAGE_REL_AMD64_ADDR32NB smallFunc 33c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: [[UnwindDisp:0x[A-F0-9]+]] IMAGE_REL_AMD64_ADDR32NB .xdata 34c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ] 35c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: SectionData ( 36c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: 0000: 00000000 01000000 00000000 37c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ) 38c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: } 39c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK: UnwindInformation [ 40c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: RuntimeFunction { 41c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: StartAddress: smallFunc {{(\+0x[A-F0-9]+ )?}}([[BeginDisp]]) 42c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: EndAddress: smallFunc {{(\+0x[A-F0-9]+ )?}}([[EndDisp]]) 43c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: UnwindInfoAddress: .xdata {{(\+0x[A-F0-9]+ )?}}([[UnwindDisp]]) 44c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: UnwindInfo { 45c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: Version: 1 46c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: Flags [ 47c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ] 48c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: PrologSize: 0 49c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: FrameRegister: - 50c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: FrameOffset: - 51c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: UnwindCodeCount: 0 52c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: UnwindCodes [ 53c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ] 54c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: } 55c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: } 56c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// CHECK-NEXT: ] 57c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke 58c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// Generate the minimal unwind info. 59c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke// It contains only the version set to 1. All other bytes are 0. 60c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke .globl smallFunc 61c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke .def smallFunc; .scl 2; .type 32; .endef 62c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke .seh_proc smallFunc 63c29a720b362790746ca899a0b44fa35a1b399a42Kai NackesmallFunc: 64c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke ret 65c29a720b362790746ca899a0b44fa35a1b399a42Kai Nacke .seh_endproc 66