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