42 lines · plain
1# REQUIRES: x862# RUN: rm -rf %t && split-file %s %t3 4## Ensure that we resolve the entry point to the unmangled weak alias instead of5## the mangled library definition (which would fail with an undefined symbol).6 7# RUN: llvm-mc -triple x86_64-windows-msvc -filetype obj -o %t/entry-weak.obj %t/entry-weak.s8# RUN: llvm-mc -triple x86_64-windows-msvc -filetype obj -o %t/entry-mangled.obj %t/entry-mangled.s9# RUN: llvm-lib -out:%t/entry-mangled.lib %t/entry-mangled.obj10# RUN: lld-link -subsystem:console -entry:entry -out:%t/entry-weak-external.exe %t/entry-weak.obj %t/entry-mangled.lib11# RUN: llvm-readobj --file-headers %t/entry-weak-external.exe | FileCheck %s12 13## Ensure that we don't resolve the entry point to a weak alias pointing to an14## undefined symbol (which would have caused the entry point to be 0 instead of15## an actual address). I can't think of a way of triggering this edge case16## without using /force:unresolved, which means it likely doesn't matter in17## practice, but we still match link.exe's behavior for it.18 19# RUN: llvm-mc -triple x86_64-windows-msvc -filetype obj -o %t/entry-weak-undefined.obj %t/entry-weak-undefined.s20# RUN: lld-link -subsystem:console -entry:entry -force:unresolved -out:%t/entry-undefined-weak-external.exe \21# RUN: %t/entry-weak-undefined.obj %t/entry-mangled.lib22# RUN: llvm-readobj --file-headers %t/entry-undefined-weak-external.exe | FileCheck %s23 24# CHECK: AddressOfEntryPoint: 0x100025 26#--- entry-weak.s27.globl default_entry28default_entry:29 ret30 31.weak entry32entry = default_entry33 34#--- entry-mangled.s35.globl "?entry@@YAHXZ"36"?entry@@YAHXZ":37 jmp does_not_exist38 39#--- entry-weak-undefined.s40.weak entry41entry = does_not_exist42