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() {
534
534
535
535
Symbol *ObjFile::createUndefined (COFFSymbolRef sym, bool overrideLazy) {
536
536
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 =
547
+ ctx.symtab .addUndefined (saver ().save (*mangledName), this , false );
548
+ u->setWeakAlias (m, true );
549
+ }
550
+ }
551
+ }
552
+ return s;
538
553
}
539
554
540
555
static 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
8
8
RUN: llvm-mc -filetype=obj -triple=arm64ec-windows ref-demangled.s -o ref-demangled.obj
9
9
RUN: llvm-mc -filetype=obj -triple=arm64ec-windows demangled-entry-drectve.s -o demangled-entry-drectve.obj
10
10
RUN: 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
11
12
RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %S/Inputs/loadconfig-arm64ec.s -o loadconfig-arm64ec.obj
12
13
13
14
RUN: 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
80
81
RUN: ref-demangled.obj loadconfig-arm64ec.obj "-export:#func"
81
82
RUN: llvm-objdump -d demangled-export-ref.dll | FileCheck -check-prefix=DISASM %s
82
83
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
+
83
92
DISASM2: 0000000180001000 <.text>:
84
93
DISASM2-NEXT: 180001000: d65f03c0 ret
85
94
You can’t perform that action at this time.
0 commit comments