From ed4ef4dfa0d1403a751ac091996b3e5ea09d3db2 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Sun, 2 Jun 2024 16:41:37 +0200 Subject: [PATCH] [CodeGen][ARM64EC] Use alias symbol for exporting hybrid_patchable functions. Exporting $hp_target symbol doesn't make sense, use the unmangled alias instead. This is not compatible with MSVC, but it makes using dllexport together with hybrid_patchable attribute possible. --- llvm/lib/Target/AArch64/AArch64Arm64ECCallLowering.cpp | 5 +++++ llvm/test/CodeGen/AArch64/arm64ec-hybrid-patchable.ll | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/llvm/lib/Target/AArch64/AArch64Arm64ECCallLowering.cpp b/llvm/lib/Target/AArch64/AArch64Arm64ECCallLowering.cpp index 310b152ef981735..415edb189e60c49 100644 --- a/llvm/lib/Target/AArch64/AArch64Arm64ECCallLowering.cpp +++ b/llvm/lib/Target/AArch64/AArch64Arm64ECCallLowering.cpp @@ -833,6 +833,11 @@ bool AArch64Arm64ECCallLowering::runOnModule(Module &Mod) { "EXP+" + MangledName.value()))); A->setAliasee(&F); + if (F.hasDLLExportStorageClass()) { + A->setDLLStorageClass(GlobalValue::DLLExportStorageClass); + F.setDLLStorageClass(GlobalValue::DefaultStorageClass); + } + FnsMap[A] = GlobalAlias::create(GlobalValue::LinkOnceODRLinkage, MangledName.value(), &F); PatchableFns.insert(A); diff --git a/llvm/test/CodeGen/AArch64/arm64ec-hybrid-patchable.ll b/llvm/test/CodeGen/AArch64/arm64ec-hybrid-patchable.ll index e5387d40b9c64a7..64fb5b36b2c6234 100644 --- a/llvm/test/CodeGen/AArch64/arm64ec-hybrid-patchable.ll +++ b/llvm/test/CodeGen/AArch64/arm64ec-hybrid-patchable.ll @@ -238,7 +238,7 @@ define dso_local void @caller() nounwind { ; CHECK-NEXT: .symidx exp ; CHECK-NEXT: .word 0 ; CHECK-NEXT: .section .drectve,"yni" -; CHECK-NEXT: .ascii " /EXPORT:\"#exp$hp_target,EXPORTAS,exp$hp_target\"" +; CHECK-NEXT: .ascii " /EXPORT:exp" ; CHECK-NEXT: .def func; ; CHECK-NEXT: .scl 2;