File tree Expand file tree Collapse file tree 2 files changed +25
-1
lines changed Expand file tree Collapse file tree 2 files changed +25
-1
lines changed Original file line number Diff line number Diff line change @@ -534,7 +534,22 @@ void ObjFile::initializeSymbols() {
534534
535535Symbol *ObjFile::createUndefined (COFFSymbolRef sym, bool overrideLazy) {
536536 StringRef name = check (coffObj->getSymbolName (sym));
537- return ctx.symtab .addUndefined (name, this , overrideLazy);
537+ Symbol *s = ctx.symtab .addUndefined (name, this , overrideLazy);
538+
539+ // Add an anti-dependency alias for undefined AMD64 symbols on the ARM64EC
540+ // target.
541+ if (isArm64EC (ctx.config .machine ) && getMachineType () == AMD64) {
542+ auto u = dyn_cast<Undefined>(s);
543+ if (u && !u->weakAlias ) {
544+ if (std::optional<std::string> mangledName =
545+ getArm64ECMangledFunctionName (name)) {
546+ Symbol *m = ctx.symtab .addUndefined (saver ().save (*mangledName), this ,
547+ /* overrideLazy=*/ false );
548+ u->setWeakAlias (m, /* antiDep=*/ true );
549+ }
550+ }
551+ }
552+ return s;
538553}
539554
540555static const coff_aux_section_definition *findSectionDef (COFFObjectFile *obj,
Original file line number Diff line number Diff line change @@ -8,6 +8,7 @@ RUN: llvm-mc -filetype=obj -triple=arm64ec-windows mangled-func.s -o mangled-fun
88RUN: llvm-mc -filetype=obj -triple=arm64ec-windows ref-demangled.s -o ref-demangled.obj
99RUN: llvm-mc -filetype=obj -triple=arm64ec-windows demangled-entry-drectve.s -o demangled-entry-drectve.obj
1010RUN: llvm-mc -filetype=obj -triple=x86_64-windows demangled-dll-main.s -o x64-dll-main.obj
11+ RUN: llvm-mc -filetype=obj -triple=x86_64-windows ref-demangled.s -o ref-x64.obj
1112RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %S/Inputs/loadconfig-arm64ec.s -o loadconfig-arm64ec.obj
1213
1314RUN: llvm-lib -machine:arm64ec -out:func.lib mangled-func.obj
@@ -80,6 +81,14 @@ RUN: lld-link -machine:arm64ec -dll -noentry -out:demangled-export-ref.dll mangl
8081RUN: ref-demangled.obj loadconfig-arm64ec.obj "-export:#func"
8182RUN: llvm-objdump -d demangled-export-ref.dll | FileCheck -check-prefix=DISASM %s
8283
84+ Verify that an x86_64 object file can reference ARM64EC mangled functions without requiring an explicit alias.
85+ RUN: lld-link -machine:arm64ec -dll -noentry -out:x64-ref.dll mangled-func.obj ref-x64.obj loadconfig-arm64ec.obj
86+ RUN: llvm-objdump -d x64-ref.dll | FileCheck -check-prefix=DISASM2 %s
87+
88+ Verify that an x86_64 object file can reference ARM64EC mangled functions provided by a library.
89+ RUN: lld-link -machine:arm64ec -dll -noentry -out:x64-lib-ref.dll func.lib ref-x64.obj loadconfig-arm64ec.obj
90+ RUN: llvm-objdump -d x64-lib-ref.dll | FileCheck -check-prefix=DISASM2 %s
91+
8392DISASM2: 0000000180001000 <.text>:
8493DISASM2-NEXT: 180001000: d65f03c0 ret
8594
You can’t perform that action at this time.
0 commit comments