# 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 # RUN: llvm-readobj --sections --coff-exports %t.dll | FileCheck %s # CHECK: Name: .pdata # CHECK-NEXT: VirtualSize: 0x18 # CHECK: Name: .xdata # CHECK-NEXT: VirtualSize: 0x10 # CHECK: Name: xdata1 # CHECK-NEXT: RVA: 0x1010 # CHECK: Name: xdata1a # CHECK-NEXT: RVA: 0x1010 # CHECK: Name: xdata1b # CHECK-NEXT: RVA: 0x1030 .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 # xdata1a is identical to xdata1, so it should be ICFd, and so should its pdata. # It also has associative debug and CFG sections which should be ignored by ICF. .def xdata1a; .scl 2; .type 32; .endef .section .text,"xr",one_only,xdata1a .globl xdata1a # -- Begin function xdata1a .p2align 4, 0x90 xdata1a: # @xdata1a .seh_proc xdata1a # 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,xdata1a .seh_endproc .section .debug$S,"r",associative,xdata1a .section .gfids$y,"r",associative,xdata1a .section .gljmp$y,"r",associative,xdata1a # xdata1b's text is identical to xdata1, but its xdata specifies a different # stack size, so it cannot be ICFd with xdata1. .def xdata1b; .scl 2; .type 32; .endef .section .text,"xr",one_only,xdata1b .globl xdata1b # -- Begin function xdata1b .p2align 4, 0x90 xdata1b: # @xdata1b .seh_proc xdata1b # BB#0: # %entry subq $40, %rsp .seh_stackalloc 48 .seh_endprologue callq callee nop addq $40, %rsp jmp callee # TAILCALL .seh_handlerdata .section .text,"xr",one_only,xdata1b .seh_endproc # -- End function .section .drectve,"yn" .ascii " -export:xdata1" .ascii " -export:xdata1a" .ascii " -export:xdata1b"