aboutsummaryrefslogtreecommitdiffstats
path: root/test/MC/COFF/seh-section.s
blob: c95eece800bd90da3ae27c578d5723c2eed1591c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// This test ensures functions in custom sections get unwind info emitted in a
// distinct .xdata section. Ideally we'd just emit a second .xdata section with
// the same name and characteristics, but MC uniques sections by name and
// characteristics, so that is not possible.
// RUN: llvm-mc -filetype=obj -triple x86_64-pc-win32 %s | llvm-readobj -s -sd | FileCheck %s

// CHECK:      Name: .xdata$foo
// CHECK-NEXT: VirtualSize
// CHECK-NEXT: VirtualAddress
// CHECK-NEXT: RawDataSize: 8
// CHECK-NEXT: PointerToRawData
// CHECK-NEXT: PointerToRelocations
// CHECK-NEXT: PointerToLineNumbers
// CHECK-NEXT: RelocationCount: 0
// CHECK-NEXT: LineNumberCount: 0
// CHECK-NEXT: Characteristics [
// CHECK-NEXT:   IMAGE_SCN_ALIGN_4BYTES
// CHECK-NEXT:   IMAGE_SCN_CNT_INITIALIZED_DATA
// CHECK-NEXT:   IMAGE_SCN_MEM_READ
// CHECK-NEXT: ]
// CHECK-NEXT: SectionData (
// CHECK-NEXT:   0000: 01050200 05500402
// CHECK-NEXT: )

// CHECK:      Name: .xdata$.mytext
// CHECK-NEXT: VirtualSize
// CHECK-NEXT: VirtualAddress
// CHECK-NEXT: RawDataSize: 8
// CHECK-NEXT: PointerToRawData
// CHECK-NEXT: PointerToRelocations
// CHECK-NEXT: PointerToLineNumbers
// CHECK-NEXT: RelocationCount: 0
// CHECK-NEXT: LineNumberCount: 0
// CHECK-NEXT: Characteristics [
// CHECK-NEXT:   IMAGE_SCN_ALIGN_4BYTES
// CHECK-NEXT:   IMAGE_SCN_CNT_INITIALIZED_DATA
// CHECK-NEXT:   IMAGE_SCN_MEM_READ
// CHECK-NEXT: ]
// CHECK-NEXT: SectionData (
// CHECK-NEXT:   0000: 01050200 05500402
// CHECK-NEXT: )

// CHECK:      Name: .xdata
// CHECK-NEXT: VirtualSize
// CHECK-NEXT: VirtualAddress
// CHECK-NEXT: RawDataSize: 8
// CHECK-NEXT: PointerToRawData
// CHECK-NEXT: PointerToRelocations
// CHECK-NEXT: PointerToLineNumbers
// CHECK-NEXT: RelocationCount: 0
// CHECK-NEXT: LineNumberCount: 0
// CHECK-NEXT: Characteristics [
// CHECK-NEXT:   IMAGE_SCN_ALIGN_4BYTES
// CHECK-NEXT:   IMAGE_SCN_CNT_INITIALIZED_DATA
// CHECK-NEXT:   IMAGE_SCN_MEM_READ
// CHECK-NEXT: ]
// CHECK-NEXT: SectionData (
// CHECK-NEXT:   0000: 01050200 05500402
// CHECK-NEXT: )



    .section .text$foo,"x"
    .globl foo
    .def foo; .scl 2; .type 32; .endef
    .seh_proc foo
foo:
    subq $8, %rsp
    .seh_stackalloc 8
    pushq %rbp
    .seh_pushreg %rbp
    .seh_endprologue
    popq %rbp
    addq $8, %rsp
    ret
    .seh_endproc

    .section .mytext,"x"
    .globl bar
    .def bar; .scl 2; .type 32; .endef
    .seh_proc bar
bar:
    subq $8, %rsp
    .seh_stackalloc 8
    pushq %rbp
    .seh_pushreg %rbp
    .seh_endprologue
    popq %rbp
    addq $8, %rsp
    ret
    .seh_endproc

    .section .text
    .globl baz
    .def baz; .scl 2; .type 32; .endef
    .seh_proc baz
baz:
    subq $8, %rsp
    .seh_stackalloc 8
    pushq %rbp
    .seh_pushreg %rbp
    .seh_endprologue
    popq %rbp
    addq $8, %rsp
    ret
    .seh_endproc