[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