2018-06-06 21:56:51 +08:00
|
|
|
# REQUIRES: x86
|
2017-11-18 03:50:10 +08:00
|
|
|
# RUN: llvm-mc %s -triple x86_64-windows-msvc -filetype=obj -o %t.obj
|
2018-04-21 05:32:37 +08:00
|
|
|
# RUN: lld-link %t.obj -dll -noentry -out:%t.dll -merge:.xdata=.xdata 2>&1 \
|
|
|
|
# RUN: | FileCheck %s --check-prefix=WARN
|
2019-05-01 13:49:01 +08:00
|
|
|
# RUN: llvm-readobj --sections %t.dll | FileCheck %s --check-prefix=XDATA
|
2017-11-18 03:50:10 +08:00
|
|
|
# RUN: lld-link %t.obj -dll -noentry -out:%t.dll
|
2019-05-01 13:49:01 +08:00
|
|
|
# RUN: llvm-readobj --sections %t.dll | FileCheck %s --check-prefix=RDATA
|
2017-11-18 03:50:10 +08:00
|
|
|
|
|
|
|
# There shouldn't be much xdata, because all three .pdata entries (12 bytes
|
|
|
|
# each) should use the same .xdata unwind info.
|
2018-04-21 05:32:37 +08:00
|
|
|
# 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
|
2017-11-18 03:50:10 +08:00
|
|
|
|
|
|
|
.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"
|
|
|
|
|