| # REQUIRES: x86 |
| # RUN: llvm-mc %s -triple x86_64-windows-msvc -filetype=obj -o %t.obj |
| # RUN: lld-link %t.obj -dll -noentry -out:%t.dll -merge:.xdata=.xdata 2>&1 \ |
| # RUN: | FileCheck %s --check-prefix=WARN |
| # RUN: llvm-readobj -sections %t.dll | FileCheck %s --check-prefix=XDATA |
| # RUN: lld-link %t.obj -dll -noentry -out:%t.dll |
| # RUN: llvm-readobj -sections %t.dll | FileCheck %s --check-prefix=RDATA |
| |
| # There shouldn't be much xdata, because all three .pdata entries (12 bytes |
| # each) should use the same .xdata unwind info. |
| # XDATA: Name: .rdata |
| # XDATA-NEXT: VirtualSize: 0x73 |
| # XDATA: Name: .pdata |
| # XDATA-NEXT: VirtualSize: 0x24 |
| # XDATA: Name: .xdata |
| # XDATA-NEXT: VirtualSize: 0x8 |
| # |
| # WARN: warning: .xdata=.rdata: already merged into .xdata |
| # |
| # RDATA: Name: .rdata |
| # RDATA-NEXT: VirtualSize: 0x7C |
| # RDATA: Name: .pdata |
| # RDATA-NEXT: VirtualSize: 0x24 |
| |
| .text |
| callee: |
| ret |
| |
| .def xdata1; |
| .scl 2; |
| .type 32; |
| .endef |
| .section .text,"xr",one_only,xdata1 |
| .globl xdata1 # -- Begin function xdata1 |
| .p2align 4, 0x90 |
| xdata1: # @xdata1 |
| .seh_proc xdata1 |
| # BB#0: # %entry |
| subq $40, %rsp |
| .seh_stackalloc 40 |
| .seh_endprologue |
| callq callee |
| nop |
| addq $40, %rsp |
| jmp callee # TAILCALL |
| .seh_handlerdata |
| .section .text,"xr",one_only,xdata1 |
| .seh_endproc |
| # -- End function |
| .def xdata2; |
| .scl 2; |
| .type 32; |
| .endef |
| .section .text,"xr",one_only,xdata2 |
| .globl xdata2 # -- Begin function xdata2 |
| .p2align 4, 0x90 |
| xdata2: # @xdata2 |
| .seh_proc xdata2 |
| # BB#0: # %entry |
| subq $40, %rsp |
| .seh_stackalloc 40 |
| .seh_endprologue |
| callq callee |
| callq callee |
| nop |
| addq $40, %rsp |
| jmp callee # TAILCALL |
| .seh_handlerdata |
| .section .text,"xr",one_only,xdata2 |
| .seh_endproc |
| # -- End function |
| .def xdata3; |
| .scl 2; |
| .type 32; |
| .endef |
| .section .text,"xr",one_only,xdata3 |
| .globl xdata3 # -- Begin function xdata3 |
| .p2align 4, 0x90 |
| xdata3: # @xdata3 |
| .seh_proc xdata3 |
| # BB#0: # %entry |
| subq $40, %rsp |
| .seh_stackalloc 40 |
| .seh_endprologue |
| callq callee |
| callq callee |
| callq callee |
| nop |
| addq $40, %rsp |
| jmp callee # TAILCALL |
| .seh_handlerdata |
| .section .text,"xr",one_only,xdata3 |
| .seh_endproc |
| # -- End function |
| .section .drectve,"yn" |
| .ascii " -export:xdata1" |
| .ascii " -export:xdata2" |
| .ascii " -export:xdata3" |
| |