diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index ec8ac814d3156..d6d6cc8f394f0 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -714,9 +714,8 @@ Symbol *LinkerDriver::addUndefined(StringRef name, bool aliasEC) { Symbol *t = ctx.symtab.addUndefined(saver().save(*mangledName)); u->setWeakAlias(t, true); } - } else { - std::optional demangledName = - getArm64ECDemangledFunctionName(name); + } else if (std::optional demangledName = + getArm64ECDemangledFunctionName(name)) { Symbol *us = ctx.symtab.addUndefined(saver().save(*demangledName)); auto u = dyn_cast(us); if (u && !u->weakAlias) diff --git a/lld/COFF/SymbolTable.cpp b/lld/COFF/SymbolTable.cpp index 35d54d4945f7f..df3c5a176b52e 100644 --- a/lld/COFF/SymbolTable.cpp +++ b/lld/COFF/SymbolTable.cpp @@ -669,8 +669,11 @@ bool checkLazyECPair(SymbolTable *symtab, StringRef name, InputFile *f) { if (std::optional mangledName = getArm64ECMangledFunctionName(name)) pairName = std::move(*mangledName); + else if (std::optional demangledName = + getArm64ECDemangledFunctionName(name)) + pairName = std::move(*demangledName); else - pairName = *getArm64ECDemangledFunctionName(name); + return true; Symbol *sym = symtab->find(pairName); if (!sym) diff --git a/lld/test/COFF/arm64ec-invalid-name.s b/lld/test/COFF/arm64ec-invalid-name.s new file mode 100644 index 0000000000000..043d39e0c8089 --- /dev/null +++ b/lld/test/COFF/arm64ec-invalid-name.s @@ -0,0 +1,15 @@ +// REQUIRES: aarch64 + +// Verify that an error is emitted when attempting to export an invalid function name. +// RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %s -o %t.obj +// RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %S/Inputs/loadconfig-arm64ec.s -o %t-loadconfig.obj +// RUN: not lld-link -machine:arm64ec -dll -noentry "-export:?func" %t-loadconfig.obj %t.obj 2>&1 | FileCheck %s +// CHECK: error: Invalid ARM64EC function name '?func' + +// Verify that we can handle an invalid function name in the archive map. +// RUN: llvm-lib -machine:arm64ec -out:%t.lib %t.obj +// RUN: lld-link -machine:arm64ec -dll -noentry %t-loadconfig.obj %t.lib + + .globl "?func" +"?func": + ret