[lld] 486f790 - [LLD][COFF] Process all ARM64EC import symbols in MapFile's getSymbols (#109118)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 19 04:47:27 PDT 2024
Author: Jacek Caban
Date: 2024-09-19T13:47:22+02:00
New Revision: 486f790d294d1bc3bdaeb4377889c4b03f0b1bca
URL: https://github.com/llvm/llvm-project/commit/486f790d294d1bc3bdaeb4377889c4b03f0b1bca
DIFF: https://github.com/llvm/llvm-project/commit/486f790d294d1bc3bdaeb4377889c4b03f0b1bca.diff
LOG: [LLD][COFF] Process all ARM64EC import symbols in MapFile's getSymbols (#109118)
Added:
Modified:
lld/COFF/Chunks.h
lld/COFF/InputFiles.cpp
lld/COFF/MapFile.cpp
lld/test/COFF/arm64ec-import.test
Removed:
################################################################################
diff --git a/lld/COFF/Chunks.h b/lld/COFF/Chunks.h
index 24d7c37de7f3b0..04a656ae0874ec 100644
--- a/lld/COFF/Chunks.h
+++ b/lld/COFF/Chunks.h
@@ -625,6 +625,7 @@ class ImportThunkChunkARM64EC : public ImportThunkChunk {
void writeTo(uint8_t *buf) const override;
Defined *exitThunk;
+ Defined *sym = nullptr;
private:
ImportFile *file;
diff --git a/lld/COFF/InputFiles.cpp b/lld/COFF/InputFiles.cpp
index d9184b04735e83..b19275abebc3ac 100644
--- a/lld/COFF/InputFiles.cpp
+++ b/lld/COFF/InputFiles.cpp
@@ -1126,7 +1126,8 @@ void ImportFile::parse() {
StringRef impChkName = saver().save("__impchk_" + name);
impchkThunk = make<ImportThunkChunkARM64EC>(this);
- ctx.symtab.addImportThunk(impChkName, impSym, impchkThunk);
+ impchkThunk->sym =
+ ctx.symtab.addImportThunk(impChkName, impSym, impchkThunk);
ctx.driver.pullArm64ECIcallHelper();
}
}
diff --git a/lld/COFF/MapFile.cpp b/lld/COFF/MapFile.cpp
index 7c9c1711214550..55a1cd942ab858 100644
--- a/lld/COFF/MapFile.cpp
+++ b/lld/COFF/MapFile.cpp
@@ -126,6 +126,14 @@ static void getSymbols(const COFFLinkerContext &ctx,
syms.push_back(file->impSym);
if (file->thunkSym && file->thunkSym->isLive())
syms.push_back(file->thunkSym);
+ if (file->auxThunkSym && file->auxThunkSym->isLive())
+ syms.push_back(file->auxThunkSym);
+ if (file->impchkThunk)
+ syms.push_back(file->impchkThunk->sym);
+ if (file->impECSym)
+ syms.push_back(file->impECSym);
+ if (file->auxImpCopySym)
+ syms.push_back(file->auxImpCopySym);
}
sortUniqueSymbols(syms, ctx.config.imageBase);
diff --git a/lld/test/COFF/arm64ec-import.test b/lld/test/COFF/arm64ec-import.test
index 92d7f5517bd426..08ff31ce1a8f3b 100644
--- a/lld/test/COFF/arm64ec-import.test
+++ b/lld/test/COFF/arm64ec-import.test
@@ -12,15 +12,15 @@ RUN: llvm-lib -machine:x64 -def:test.def -out:test-x86_64.lib
Link using ARM64EC import library:
RUN: lld-link -machine:arm64ec -dll -noentry -out:out.dll loadconfig-arm64ec.obj icall.obj hybmp.obj \
-RUN: test.obj test-arm64ec.lib test2-arm64ec.lib
+RUN: test.obj test-arm64ec.lib test2-arm64ec.lib -map
Link using x86_64 import library:
RUN: lld-link -machine:arm64ec -dll -noentry -out:out2.dll loadconfig-arm64ec.obj icall.obj hybmp.obj \
-RUN: test.obj test-x86_64.lib test2-arm64ec.lib
+RUN: test.obj test-x86_64.lib test2-arm64ec.lib -map
Link using x86_64 object file:
RUN: lld-link -machine:arm64ec -dll -noentry -out:out3.dll loadconfig-arm64ec.obj icall.obj hybmp.obj \
-RUN: test-x86_64.obj test-arm64ec.lib test2-arm64ec.lib
+RUN: test-x86_64.obj test-arm64ec.lib test2-arm64ec.lib -map
RUN: llvm-readobj --coff-imports out.dll | FileCheck --check-prefix=IMPORTS %s
RUN: llvm-readobj --coff-imports out2.dll | FileCheck --check-prefix=IMPORTS %s
@@ -87,6 +87,28 @@ TESTSEC-X64-NEXT: 0x180007010 08300000 00500000 10300000 20300000
TESTSEC-X64-NEXT: 0x180007020 14100000 28100000 00200000 08100000
TESTSEC-X64-NEXT: 0x180007030 3c100000 a0420000
+RUN: FileCheck --check-prefix=MAP %s < out.map
+RUN: FileCheck --check-prefix=MAP %s < out2.map
+RUN: FileCheck --check-prefix=MAP %s < out3.map
+MAP: 0001:00000008 #func 0000000180001008 test{{.*}}:test.dll
+MAP-NEXT: 0001:00000014 __impchk_func 0000000180001014 test{{.*}}:test.dll
+MAP-NEXT: 0001:00000028 __impchk_func2 0000000180001028 test{{.*}}:test.dll
+MAP-NEXT: 0001:0000003c #t2func 000000018000103c test2{{.*}}:test2.dll
+MAP-NEXT: 0001:00000048 __impchk_t2func 0000000180001048 test2{{.*}}:test2.dll
+MAP: 0001:00001000 func 0000000180002000 test{{.*}}:test.dll
+MAP-NEXT: 0002:00000000 __imp_data 0000000180003000 test{{.*}}:test.dll
+MAP-NEXT: 0002:00000008 __imp_aux_func 0000000180003008 test{{.*}}:test.dll
+MAP-NEXT: 0002:00000010 __imp_aux_func2 0000000180003010 test{{.*}}:test.dll
+MAP-NEXT: 0002:00000020 __imp_aux_t2func 0000000180003020 test2{{.*}}:test2.dll
+MAP: 0002:00001298 __auximpcopy_data 0000000180004298 test{{.*}}:test.dll
+MAP-NEXT: 0002:000012a0 __auximpcopy_func 00000001800042a0 test{{.*}}:test.dll
+MAP-NEXT: 0002:000012a8 __auximpcopy_func2 00000001800042a8 test{{.*}}:test.dll
+MAP-NEXT: 0002:000012b8 __auximpcopy_t2func 00000001800042b8 test2{{.*}}:test2.dll
+MAP: 0002:00002000 __imp_aux_data 0000000180005000 test{{.*}}:test.dll
+MAP-NEXT: 0002:00002008 __imp_func 0000000180005008 test{{.*}}:test.dll
+MAP-NEXT: 0002:00002010 __imp_func2 0000000180005010 test{{.*}}:test.dll
+MAP-NEXT: 0002:00002020 __imp_t2func 0000000180005020 test2{{.*}}:test2.dll
+
RUN: llvm-readobj --headers out.dll | FileCheck -check-prefix=HEADERS %s
RUN: llvm-readobj --headers out2.dll | FileCheck -check-prefix=HEADERS %s
RUN: llvm-readobj --headers out3.dll | FileCheck -check-prefix=HEADERS %s
More information about the llvm-commits
mailing list