Files
clang-p2996/lld/test/COFF/icf-xdata.s
Alvin Wong e2e132c5d9 [LLD][COFF] Set OrdinalBase to 1 for export table
Before this, LLD sets OrdinalBase to 0, which deviates from usual
practices. This technically would allow LLD to export a symbol using
ordinal 0, however LLD never use export ordinal 0, which results in
binaries with export tables always having an empty export at ordinal 0.

This change makes LLD set OrdinalBase to 1 and not create the empty
export with ordinal 0, which makes its behaviour more in line with both
the MSVC linker and the GNU linker.

Reviewed By: mstorsjo

Differential Revision: https://reviews.llvm.org/D134140
2022-10-03 10:58:44 +03:00

100 lines
2.6 KiB
ArmAsm

# 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: 0x6F
# 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: 0x78
# 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"