REQUIRES: aarch64 RUN: split-file %s %t.dir && cd %t.dir RUN: llvm-mc -filetype=obj -triple=arm64ec-windows ext.s -o ext.obj RUN: llvm-mc -filetype=obj -triple=arm64ec-windows ext-mangled.s -o ext-mangled.obj RUN: llvm-mc -filetype=obj -triple=arm64ec-windows impl.s -o impl.obj RUN: llvm-mc -filetype=obj -triple=arm64ec-windows impl-cpp.s -o impl-cpp.obj RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %S/Inputs/loadconfig-arm64ec.s -o loadconfig.obj # Ensure -alternatename can change a mangled function symbol aliasing a defined symbol (typically a guest exit thunk). RUN: lld-link -machine:arm64ec -dll -noentry -out:out1.dll ext.obj loadconfig.obj "-alternatename:#func=altsym" RUN: llvm-objdump -d out1.dll | FileCheck --check-prefix=DISASM %s DISASM: 0000000180001000 <.text>: DISASM-NEXT: 180001000: 52800020 mov w0, #0x1 // =1 DISASM-NEXT: 180001004: d65f03c0 ret DISASM-NOT: .thnk RUN: llvm-readobj --hex-dump=.test out1.dll | FileCheck --check-prefix=TESTSEC %s TESTSEC: 0x180005000 00100000 00100000 # Ensure -alternatename can change a demangled function symbol aliasing an anti-dependency symbol. RUN: lld-link -machine:arm64ec -dll -noentry -out:out2.dll ext.obj loadconfig.obj -alternatename:func=altsym RUN: llvm-objdump -d out2.dll | FileCheck --check-prefix=DISASM2 %s DISASM2: Disassembly of section .text: DISASM2-EMPTY: DISASM2-NEXT: 0000000180001000 <.text>: DISASM2-NEXT: 180001000: 52800020 mov w0, #0x1 // =1 DISASM2-NEXT: 180001004: d65f03c0 ret DISASM2-EMPTY: DISASM2-NEXT: Disassembly of section .thnk: DISASM2-EMPTY: DISASM2-NEXT: 0000000180006000 <.thnk>: DISASM2-NEXT: 180006000: 52800040 mov w0, #0x2 // =2 DISASM2-NEXT: 180006004: d65f03c0 ret RUN: llvm-readobj --hex-dump=.test out2.dll | FileCheck --check-prefix=TESTSEC2 %s TESTSEC2: 0x180005000 00100000 00600000 # Ensure -alternatename cannot modify a demangled function symbol aliasing a defined symbol. RUN: lld-link -machine:arm64ec -dll -noentry -out:out3.dll impl.obj loadconfig.obj -alternatename:func=altsym RUN: llvm-objdump -d out3.dll | FileCheck --check-prefix=DISASM %s RUN: llvm-readobj --hex-dump=.test out3.dll | FileCheck --check-prefix=TESTSEC %s RUN: lld-link -machine:arm64ec -dll -noentry -out:out4.dll impl-cpp.obj loadconfig.obj -alternatename:func=altsym RUN: llvm-objdump -d out4.dll | FileCheck --check-prefix=DISASM %s RUN: llvm-readobj --hex-dump=.test out4.dll | FileCheck --check-prefix=TESTSEC %s # Check that when both mangled and demangled alternate names are used, # only the one whose target is defined is used (the mangled one in this case). RUN: lld-link -machine:arm64ec -dll -noentry -out:out5.dll ext-mangled.obj loadconfig.obj "-alternatename:#func=#altsym" -alternatename:func=altsym RUN: llvm-objdump -d out5.dll | FileCheck --check-prefix=DISASM %s RUN: llvm-readobj --hex-dump=.test out5.dll | FileCheck --check-prefix=TESTSEC %s # Check that when both mangled and demangled alternate names are used, # only the one whose target is defined is used (the demangled one in this case). RUN: lld-link -machine:arm64ec -dll -noentry -out:out6.dll ext.obj loadconfig.obj "-alternatename:#func=#altsym" -alternatename:func=altsym RUN: llvm-objdump -d out6.dll | FileCheck --check-prefix=DISASM2 %s RUN: llvm-readobj --hex-dump=.test out6.dll | FileCheck --check-prefix=TESTSEC2 %s #--- ext.s .weak_anti_dep func .set func, "#func" .weak_anti_dep "#func" .set "#func", thunksym .section .test, "r" .rva func .rva "#func" .section .thnk,"xr",discard,thunksym thunksym: mov w0, #2 ret .section .text,"xr",discard,altsym .globl altsym altsym: mov w0, #1 ret #--- ext-mangled.s .weak_anti_dep func .set func, "#func" .weak_anti_dep "#func" .set "#func", thunksym .section .test, "r" .rva func .rva "#func" .section .thnk,"xr",discard,thunksym thunksym: mov w0, #2 ret .section .text,"xr",discard,"#altsym" .globl "#altsym" "#altsym": mov w0, #1 ret .weak_anti_dep altsym .set altsym,"#altsym" #--- impl.s .weak_anti_dep func .set func, "#func" .section .test, "r" .rva func .rva "#func" .section .text,"xr",discard,"#func" "#func": mov w0, #1 ret .section .text,"xr",discard,altsym .globl altsym altsym: mov w0, #2 ret #--- impl-cpp.s .weak_anti_dep func .set func, "?func@@$$hYAXXZ" .section .test, "r" .rva func .rva "?func@@$$hYAXXZ" .section .text,"xr",discard,"?func@@$$hYAXXZ" "?func@@$$hYAXXZ": mov w0, #1 ret .section .text,"xr",discard,altsym .globl altsym altsym: mov w0, #2 ret