[lld] [LLD][COFF] Emit locally imported EC symbols for ARM64X (PR #125527)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 3 08:23:59 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lld-coff
Author: Jacek Caban (cjacek)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/125527.diff
2 Files Affected:
- (modified) lld/COFF/Writer.cpp (+6-4)
- (added) lld/test/COFF/locally-imported-arm64x.s (+32)
``````````diff
diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp
index 2bdaeb58ab432d..484ac9cdcaf9ea 100644
--- a/lld/COFF/Writer.cpp
+++ b/lld/COFF/Writer.cpp
@@ -1191,10 +1191,12 @@ void Writer::createMiscChunks() {
}
// Create thunks for locally-dllimported symbols.
- if (!ctx.symtab.localImportChunks.empty()) {
- for (Chunk *c : ctx.symtab.localImportChunks)
- rdataSec->addChunk(c);
- }
+ ctx.forEachSymtab([&](SymbolTable &symtab) {
+ if (!symtab.localImportChunks.empty()) {
+ for (Chunk *c : symtab.localImportChunks)
+ rdataSec->addChunk(c);
+ }
+ });
// Create Debug Information Chunks
debugInfoSec = config->mingw ? buildidSec : rdataSec;
diff --git a/lld/test/COFF/locally-imported-arm64x.s b/lld/test/COFF/locally-imported-arm64x.s
new file mode 100644
index 00000000000000..6091af2dfa1670
--- /dev/null
+++ b/lld/test/COFF/locally-imported-arm64x.s
@@ -0,0 +1,32 @@
+// REQUIRES: aarch64
+
+// RUN: llvm-mc -filetype=obj -triple=aarch64-windows %s -o %t.arm64.obj
+// RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %s -o %t.arm64ec.obj
+
+// RUN: lld-link -machine:arm64x -dll -noentry %t.arm64.obj %t.arm64ec.obj -out:%t.dll 2>&1 | FileCheck --check-prefix=WARN %s
+// WARN: lld-link: warning: {{.*}}.arm64.obj: locally defined symbol imported: func
+// WARN-NEXT: lld-link: warning: {{.*}}.arm64ec.obj: locally defined symbol imported: func
+
+// RUN: llvm-readobj --hex-dump=.test %t.dll | FileCheck --check-prefix=TEST %s
+// TEST: 0x180005000 00300000 08300000
+
+// RUN: llvm-readobj --coff-basereloc %t.dll | FileCheck --check-prefix=RELOCS %s
+// RELOCS: Entry {
+// RELOCS-NEXT: Type: DIR64
+// RELOCS-NEXT: Address: 0x3000
+// RELOCS-NEXT: }
+// RELOCS-NEXT: Entry {
+// RELOCS-NEXT: Type: DIR64
+// RELOCS-NEXT: Address: 0x3008
+// RELOCS-NEXT: }
+
+// RUN: llvm-readobj --hex-dump=.rdata %t.dll | FileCheck --check-prefix=RDATA %s
+// RDATA: 0x180003000 00100080 01000000 00200080 01000000
+
+ .text
+ .globl func
+func:
+ ret
+
+ .section .test, "r"
+ .rva __imp_func
``````````
</details>
https://github.com/llvm/llvm-project/pull/125527
More information about the llvm-commits
mailing list