]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/COFF/icf-pdata.s
Vendor import of lld trunk r338150:
[FreeBSD/FreeBSD.git] / test / COFF / icf-pdata.s
1 # REQUIRES: x86
2 # RUN: llvm-mc %s -triple x86_64-windows-msvc -filetype=obj -o %t.obj
3 # RUN: lld-link %t.obj -dll -noentry -out:%t.dll -merge:.xdata=.xdata
4 # RUN: llvm-readobj -sections -coff-exports %t.dll | FileCheck %s
5
6 # CHECK:         Name: .pdata
7 # CHECK-NEXT:    VirtualSize: 0x18
8 # CHECK:         Name: .xdata
9 # CHECK-NEXT:    VirtualSize: 0x10
10
11 # CHECK:         Name: xdata1
12 # CHECK-NEXT:    RVA: 0x1010
13 # CHECK:         Name: xdata1a
14 # CHECK-NEXT:    RVA: 0x1010
15 # CHECK:         Name: xdata1b
16 # CHECK-NEXT:    RVA: 0x1030
17
18         .text
19 callee:
20         ret
21
22         .def     xdata1;
23         .scl    2;
24         .type   32;
25         .endef
26         .section        .text,"xr",one_only,xdata1
27         .globl  xdata1                  # -- Begin function xdata1
28         .p2align        4, 0x90
29 xdata1:                                 # @xdata1
30 .seh_proc xdata1
31 # BB#0:                                 # %entry
32         subq    $40, %rsp
33         .seh_stackalloc 40
34         .seh_endprologue
35         callq   callee
36         nop
37         addq    $40, %rsp
38         jmp     callee                  # TAILCALL
39         .seh_handlerdata
40         .section        .text,"xr",one_only,xdata1
41         .seh_endproc
42                                         # -- End function
43
44 # xdata1a is identical to xdata1, so it should be ICFd, and so should its pdata.
45 # It also has associative debug and CFG sections which should be ignored by ICF.
46         .def     xdata1a;
47         .scl    2;
48         .type   32;
49         .endef
50         .section        .text,"xr",one_only,xdata1a
51         .globl  xdata1a                  # -- Begin function xdata1a
52         .p2align        4, 0x90
53 xdata1a:                                 # @xdata1a
54 .seh_proc xdata1a
55 # BB#0:                                 # %entry
56         subq    $40, %rsp
57         .seh_stackalloc 40
58         .seh_endprologue
59         callq   callee
60         nop
61         addq    $40, %rsp
62         jmp     callee                  # TAILCALL
63         .seh_handlerdata
64         .section        .text,"xr",one_only,xdata1a
65         .seh_endproc
66
67         .section .debug$S,"r",associative,xdata1a
68         .section .gfids$y,"r",associative,xdata1a
69         .section .gljmp$y,"r",associative,xdata1a
70
71 # xdata1b's text is identical to xdata1, but its xdata specifies a different
72 # stack size, so it cannot be ICFd with xdata1.
73         .def     xdata1b;
74         .scl    2;
75         .type   32;
76         .endef
77         .section        .text,"xr",one_only,xdata1b
78         .globl  xdata1b                  # -- Begin function xdata1b
79         .p2align        4, 0x90
80 xdata1b:                                 # @xdata1b
81 .seh_proc xdata1b
82 # BB#0:                                 # %entry
83         subq    $40, %rsp
84         .seh_stackalloc 48
85         .seh_endprologue
86         callq   callee
87         nop
88         addq    $40, %rsp
89         jmp     callee                  # TAILCALL
90         .seh_handlerdata
91         .section        .text,"xr",one_only,xdata1b
92         .seh_endproc
93                                         # -- End function
94
95         .section        .drectve,"yn"
96         .ascii  " -export:xdata1"
97         .ascii  " -export:xdata1a"
98         .ascii  " -export:xdata1b"