blob: a2363f5dc62656f3ef5a095aa9aae8b778bcb5fe [file] [edit]
REQUIRES: x86
RUN: split-file %s %t.dir && cd %t.dir
RUN: llvm-mc -filetype=obj -triple=x86_64-windows weak-ref.s -o weak-ref.obj
RUN: llvm-mc -filetype=obj -triple=x86_64-windows weak-def.s -o weak-def.obj
RUN: env LLD_IN_TEST=1 not lld-link -entry:entry -subsystem:console -out:test.exe weak-ref.obj weak-def.obj 2>&1 | FileCheck -check-prefix=ERR %s
ERR: error: duplicate symbol: weakfunc
Test that we get the same choice for weakfunc (pointing at the definition
in weak-def.s, not the absolute null fallback provided by weak-ref.s),
regardless of which object is linked first.
RUN: lld-link -lld-allow-duplicate-weak -entry:entry -subsystem:console -out:test.exe weak-def.obj weak-ref.obj
RUN: llvm-objdump -s test.exe | FileCheck %s
RUN: lld-link -lld-allow-duplicate-weak -entry:entry -subsystem:console -out:test.exe weak-ref.obj weak-def.obj
RUN: llvm-objdump -s test.exe | FileCheck %s
CHECK: Contents of section .rdata:
CHECK-NEXT: 140002000 14100040 01000000
#--- weak-ref.s
.text
.globl entry
entry:
cmpq $0, .refptr.weakfunc(%rip)
je .LBB0_1
rex64 jmpq *.refptr.weakfunc(%rip)
.LBB0_1:
retq
.section .rdata$.refptr.weakfunc,"dr",discard,.refptr.weakfunc
.globl .refptr.weakfunc
.refptr.weakfunc:
.quad weakfunc
.weak weakfunc
#--- weak-def.s
.section .text$b,"xr"
.balign 4
.weak weakfunc
weakfunc:
retq