[llvm] [llvm] Fixes for compiling LLVM as a DLL (PR #210746)

via llvm-commits llvm-commits at lists.llvm.org
Sun Sep 13 06:14:45 PDT 2026


John =?utf-8?q?Kåre?= Alsaker <john.kare.alsaker at gmail.com>
Message-ID:
In-Reply-To: <llvm.org/llvm/llvm-project/pull/210746 at github.com>


https://github.com/Zoxc updated https://github.com/llvm/llvm-project/pull/210746

>From ac7ee38c28bc28e7a5642cbf6ada80719347af8e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?John=20K=C3=A5re=20Alsaker?= <john.kare.alsaker at gmail.com>
Date: Mon, 20 Jul 2026 13:48:56 +0200
Subject: [PATCH 1/2] [llvm] Fixes for compiling LLVM as a DLL

---
 llvm/include/llvm/DTLTO/DTLTO.h                            | 2 +-
 llvm/lib/Target/CSKY/AsmParser/CSKYAsmParser.cpp           | 3 ++-
 llvm/lib/Target/CSKY/CSKYAsmPrinter.cpp                    | 3 ++-
 llvm/lib/Target/CSKY/CSKYTargetMachine.cpp                 | 2 +-
 llvm/lib/Target/CSKY/Disassembler/CSKYDisassembler.cpp     | 3 ++-
 llvm/lib/Target/CSKY/MCTargetDesc/CSKYMCTargetDesc.cpp     | 2 +-
 llvm/lib/Target/CSKY/TargetInfo/CSKYTargetInfo.cpp         | 3 ++-
 llvm/lib/Target/M68k/AsmParser/M68kAsmParser.cpp           | 3 ++-
 llvm/lib/Target/M68k/Disassembler/M68kDisassembler.cpp     | 3 ++-
 llvm/lib/Target/M68k/M68kAsmPrinter.cpp                    | 3 ++-
 llvm/lib/Target/M68k/M68kTargetMachine.cpp                 | 2 +-
 llvm/lib/Target/M68k/MCTargetDesc/M68kMCTargetDesc.cpp     | 2 +-
 llvm/lib/Target/M68k/TargetInfo/M68kTargetInfo.cpp         | 3 ++-
 llvm/lib/Target/Xtensa/AsmParser/XtensaAsmParser.cpp       | 3 ++-
 llvm/lib/Target/Xtensa/Disassembler/XtensaDisassembler.cpp | 3 ++-
 llvm/lib/Target/Xtensa/MCTargetDesc/XtensaMCTargetDesc.cpp | 3 ++-
 llvm/lib/Target/Xtensa/TargetInfo/XtensaTargetInfo.cpp     | 3 ++-
 llvm/lib/Target/Xtensa/XtensaAsmPrinter.cpp                | 3 ++-
 llvm/lib/Target/Xtensa/XtensaTargetMachine.cpp             | 2 +-
 19 files changed, 32 insertions(+), 19 deletions(-)

diff --git a/llvm/include/llvm/DTLTO/DTLTO.h b/llvm/include/llvm/DTLTO/DTLTO.h
index 13b83ec6e0770..da10e98cad9d8 100644
--- a/llvm/include/llvm/DTLTO/DTLTO.h
+++ b/llvm/include/llvm/DTLTO/DTLTO.h
@@ -113,7 +113,7 @@ class LLVM_ABI DTLTO : public LTO {
   /// but before optimization begins. Existing files are overwritten because
   /// they are likely leftovers from a previously terminated linker process and
   /// can be safely replaced.
-  LLVM_ABI Error extractLTOInputs();
+  Error extractLTOInputs();
 
   // Remove temporary files created to enable distribution.
   void cleanup() override;
diff --git a/llvm/lib/Target/CSKY/AsmParser/CSKYAsmParser.cpp b/llvm/lib/Target/CSKY/AsmParser/CSKYAsmParser.cpp
index 3f8e9a2f78842..df568a0b532d5 100644
--- a/llvm/lib/Target/CSKY/AsmParser/CSKYAsmParser.cpp
+++ b/llvm/lib/Target/CSKY/AsmParser/CSKYAsmParser.cpp
@@ -1659,6 +1659,7 @@ void CSKYAsmParser::emitToStreamer(MCStreamer &S, const MCInst &Inst) {
   S.emitInstruction((Res ? CInst : Inst), getSTI());
 }
 
-extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeCSKYAsmParser() {
+extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void
+LLVMInitializeCSKYAsmParser() {
   RegisterMCAsmParser<CSKYAsmParser> X(getTheCSKYTarget());
 }
diff --git a/llvm/lib/Target/CSKY/CSKYAsmPrinter.cpp b/llvm/lib/Target/CSKY/CSKYAsmPrinter.cpp
index 90b86a60bc675..ad4666426d0de 100644
--- a/llvm/lib/Target/CSKY/CSKYAsmPrinter.cpp
+++ b/llvm/lib/Target/CSKY/CSKYAsmPrinter.cpp
@@ -317,6 +317,7 @@ bool CSKYAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI,
   return AsmPrinter::PrintAsmMemoryOperand(MI, OpNo, ExtraCode, OS);
 }
 
-extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeCSKYAsmPrinter() {
+extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void
+LLVMInitializeCSKYAsmPrinter() {
   RegisterAsmPrinter<CSKYAsmPrinter> X(getTheCSKYTarget());
 }
diff --git a/llvm/lib/Target/CSKY/CSKYTargetMachine.cpp b/llvm/lib/Target/CSKY/CSKYTargetMachine.cpp
index 454cf1885dc37..f751ec10465a1 100644
--- a/llvm/lib/Target/CSKY/CSKYTargetMachine.cpp
+++ b/llvm/lib/Target/CSKY/CSKYTargetMachine.cpp
@@ -26,7 +26,7 @@
 
 using namespace llvm;
 
-extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeCSKYTarget() {
+extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeCSKYTarget() {
   RegisterTargetMachine<CSKYTargetMachine> X(getTheCSKYTarget());
 
   PassRegistry *Registry = PassRegistry::getPassRegistry();
diff --git a/llvm/lib/Target/CSKY/Disassembler/CSKYDisassembler.cpp b/llvm/lib/Target/CSKY/Disassembler/CSKYDisassembler.cpp
index 8945ec3446d61..803fea34205f4 100644
--- a/llvm/lib/Target/CSKY/Disassembler/CSKYDisassembler.cpp
+++ b/llvm/lib/Target/CSKY/Disassembler/CSKYDisassembler.cpp
@@ -57,7 +57,8 @@ static MCDisassembler *createCSKYDisassembler(const Target &T,
   return new CSKYDisassembler(STI, Ctx, T.createMCInstrInfo());
 }
 
-extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeCSKYDisassembler() {
+extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void
+LLVMInitializeCSKYDisassembler() {
   TargetRegistry::RegisterMCDisassembler(getTheCSKYTarget(),
                                          createCSKYDisassembler);
 }
diff --git a/llvm/lib/Target/CSKY/MCTargetDesc/CSKYMCTargetDesc.cpp b/llvm/lib/Target/CSKY/MCTargetDesc/CSKYMCTargetDesc.cpp
index 79d26decb32c8..ca67009495058 100644
--- a/llvm/lib/Target/CSKY/MCTargetDesc/CSKYMCTargetDesc.cpp
+++ b/llvm/lib/Target/CSKY/MCTargetDesc/CSKYMCTargetDesc.cpp
@@ -147,7 +147,7 @@ static MCInstrAnalysis *createCSKYInstrAnalysis(const MCInstrInfo *Info) {
   return new CSKYMCInstrAnalysis(Info);
 }
 
-extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeCSKYTargetMC() {
+extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeCSKYTargetMC() {
   auto &CSKYTarget = getTheCSKYTarget();
   TargetRegistry::RegisterMCAsmBackend(CSKYTarget, createCSKYAsmBackend);
   TargetRegistry::RegisterMCAsmInfo(CSKYTarget, createCSKYMCAsmInfo);
diff --git a/llvm/lib/Target/CSKY/TargetInfo/CSKYTargetInfo.cpp b/llvm/lib/Target/CSKY/TargetInfo/CSKYTargetInfo.cpp
index 40b7d493652d5..eec64aa590048 100644
--- a/llvm/lib/Target/CSKY/TargetInfo/CSKYTargetInfo.cpp
+++ b/llvm/lib/Target/CSKY/TargetInfo/CSKYTargetInfo.cpp
@@ -15,6 +15,7 @@ Target &llvm::getTheCSKYTarget() {
   return TheCSKYTarget;
 }
 
-extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeCSKYTargetInfo() {
+extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void
+LLVMInitializeCSKYTargetInfo() {
   RegisterTarget<Triple::csky> X(getTheCSKYTarget(), "csky", "C-SKY", "CSKY");
 }
diff --git a/llvm/lib/Target/M68k/AsmParser/M68kAsmParser.cpp b/llvm/lib/Target/M68k/AsmParser/M68kAsmParser.cpp
index 3a680cbd5e2da..084d1b6b11511 100644
--- a/llvm/lib/Target/M68k/AsmParser/M68kAsmParser.cpp
+++ b/llvm/lib/Target/M68k/AsmParser/M68kAsmParser.cpp
@@ -230,7 +230,8 @@ class M68kOperand : public MCParsedAsmOperand {
 
 } // end anonymous namespace.
 
-extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeM68kAsmParser() {
+extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void
+LLVMInitializeM68kAsmParser() {
   RegisterMCAsmParser<M68kAsmParser> X(getTheM68kTarget());
 }
 
diff --git a/llvm/lib/Target/M68k/Disassembler/M68kDisassembler.cpp b/llvm/lib/Target/M68k/Disassembler/M68kDisassembler.cpp
index 8e57add28a5f0..9298e0aa7fe39 100644
--- a/llvm/lib/Target/M68k/Disassembler/M68kDisassembler.cpp
+++ b/llvm/lib/Target/M68k/Disassembler/M68kDisassembler.cpp
@@ -196,7 +196,8 @@ static MCDisassembler *createM68kDisassembler(const Target &T,
   return new M68kDisassembler(STI, Ctx);
 }
 
-extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeM68kDisassembler() {
+extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void
+LLVMInitializeM68kDisassembler() {
   // Register the disassembler.
   TargetRegistry::RegisterMCDisassembler(getTheM68kTarget(),
                                          createM68kDisassembler);
diff --git a/llvm/lib/Target/M68k/M68kAsmPrinter.cpp b/llvm/lib/Target/M68k/M68kAsmPrinter.cpp
index 6c5492c9770ad..83d67918ab1e0 100644
--- a/llvm/lib/Target/M68k/M68kAsmPrinter.cpp
+++ b/llvm/lib/Target/M68k/M68kAsmPrinter.cpp
@@ -209,6 +209,7 @@ char M68kAsmPrinter::ID = 0;
 INITIALIZE_PASS(M68kAsmPrinter, "m68k-asm-printer", "M68k Assembly Printer",
                 false, false)
 
-extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeM68kAsmPrinter() {
+extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void
+LLVMInitializeM68kAsmPrinter() {
   RegisterAsmPrinter<M68kAsmPrinter> X(getTheM68kTarget());
 }
diff --git a/llvm/lib/Target/M68k/M68kTargetMachine.cpp b/llvm/lib/Target/M68k/M68kTargetMachine.cpp
index 9c5a903a4ca59..51d5bde1ca520 100644
--- a/llvm/lib/Target/M68k/M68kTargetMachine.cpp
+++ b/llvm/lib/Target/M68k/M68kTargetMachine.cpp
@@ -33,7 +33,7 @@ using namespace llvm;
 
 #define DEBUG_TYPE "m68k"
 
-extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeM68kTarget() {
+extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeM68kTarget() {
   RegisterTargetMachine<M68kTargetMachine> X(getTheM68kTarget());
   auto *PR = PassRegistry::getPassRegistry();
   initializeGlobalISel(*PR);
diff --git a/llvm/lib/Target/M68k/MCTargetDesc/M68kMCTargetDesc.cpp b/llvm/lib/Target/M68k/MCTargetDesc/M68kMCTargetDesc.cpp
index 9d2904dec0ad0..fc208fe305f63 100644
--- a/llvm/lib/Target/M68k/MCTargetDesc/M68kMCTargetDesc.cpp
+++ b/llvm/lib/Target/M68k/MCTargetDesc/M68kMCTargetDesc.cpp
@@ -107,7 +107,7 @@ static MCInstPrinter *createM68kMCInstPrinter(const Triple &T,
   return new M68kInstPrinter(MAI, MII, MRI);
 }
 
-extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeM68kTargetMC() {
+extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeM68kTargetMC() {
   Target &T = getTheM68kTarget();
 
   // Register the MC asm info.
diff --git a/llvm/lib/Target/M68k/TargetInfo/M68kTargetInfo.cpp b/llvm/lib/Target/M68k/TargetInfo/M68kTargetInfo.cpp
index 4701f46b0298c..c344c43b2a8d4 100644
--- a/llvm/lib/Target/M68k/TargetInfo/M68kTargetInfo.cpp
+++ b/llvm/lib/Target/M68k/TargetInfo/M68kTargetInfo.cpp
@@ -21,7 +21,8 @@ Target &getTheM68kTarget() {
 }
 } // namespace llvm
 
-extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeM68kTargetInfo() {
+extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void
+LLVMInitializeM68kTargetInfo() {
   RegisterTarget<Triple::m68k, /*HasJIT=*/true> X(
       getTheM68kTarget(), "m68k", "Motorola 68000 family", "M68k");
 }
diff --git a/llvm/lib/Target/Xtensa/AsmParser/XtensaAsmParser.cpp b/llvm/lib/Target/Xtensa/AsmParser/XtensaAsmParser.cpp
index 1a624fda48a8a..a4e64ba4205d5 100644
--- a/llvm/lib/Target/Xtensa/AsmParser/XtensaAsmParser.cpp
+++ b/llvm/lib/Target/Xtensa/AsmParser/XtensaAsmParser.cpp
@@ -878,6 +878,7 @@ ParseStatus XtensaAsmParser::parseDirective(AsmToken DirectiveID) {
 }
 
 // Force static initialization.
-extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeXtensaAsmParser() {
+extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void
+LLVMInitializeXtensaAsmParser() {
   RegisterMCAsmParser<XtensaAsmParser> X(getTheXtensaTarget());
 }
diff --git a/llvm/lib/Target/Xtensa/Disassembler/XtensaDisassembler.cpp b/llvm/lib/Target/Xtensa/Disassembler/XtensaDisassembler.cpp
index 807a2d6d35fdc..77f8f2160f65b 100644
--- a/llvm/lib/Target/Xtensa/Disassembler/XtensaDisassembler.cpp
+++ b/llvm/lib/Target/Xtensa/Disassembler/XtensaDisassembler.cpp
@@ -54,7 +54,8 @@ static MCDisassembler *createXtensaDisassembler(const Target &T,
   return new XtensaDisassembler(STI, Ctx, true);
 }
 
-extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeXtensaDisassembler() {
+extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void
+LLVMInitializeXtensaDisassembler() {
   TargetRegistry::RegisterMCDisassembler(getTheXtensaTarget(),
                                          createXtensaDisassembler);
 }
diff --git a/llvm/lib/Target/Xtensa/MCTargetDesc/XtensaMCTargetDesc.cpp b/llvm/lib/Target/Xtensa/MCTargetDesc/XtensaMCTargetDesc.cpp
index 397b56fb57b5a..7c5954a916b8f 100644
--- a/llvm/lib/Target/Xtensa/MCTargetDesc/XtensaMCTargetDesc.cpp
+++ b/llvm/lib/Target/Xtensa/MCTargetDesc/XtensaMCTargetDesc.cpp
@@ -283,7 +283,8 @@ static MCTargetStreamer *createXtensaNullTargetStreamer(MCStreamer &S) {
   return new XtensaTargetStreamer(S);
 }
 
-extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeXtensaTargetMC() {
+extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void
+LLVMInitializeXtensaTargetMC() {
   // Register the MCAsmInfo.
   TargetRegistry::RegisterMCAsmInfo(getTheXtensaTarget(),
                                     createXtensaMCAsmInfo);
diff --git a/llvm/lib/Target/Xtensa/TargetInfo/XtensaTargetInfo.cpp b/llvm/lib/Target/Xtensa/TargetInfo/XtensaTargetInfo.cpp
index 2bed4c1505be3..c31c15d2de4f2 100644
--- a/llvm/lib/Target/Xtensa/TargetInfo/XtensaTargetInfo.cpp
+++ b/llvm/lib/Target/Xtensa/TargetInfo/XtensaTargetInfo.cpp
@@ -17,7 +17,8 @@ Target &llvm::getTheXtensaTarget() {
   return TheXtensaTarget;
 }
 
-extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeXtensaTargetInfo() {
+extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void
+LLVMInitializeXtensaTargetInfo() {
   RegisterTarget<Triple::xtensa> X(getTheXtensaTarget(), "xtensa", "Xtensa 32",
                                    "XTENSA");
 }
diff --git a/llvm/lib/Target/Xtensa/XtensaAsmPrinter.cpp b/llvm/lib/Target/Xtensa/XtensaAsmPrinter.cpp
index 710084289a3e0..bdbc0943b85d1 100644
--- a/llvm/lib/Target/Xtensa/XtensaAsmPrinter.cpp
+++ b/llvm/lib/Target/Xtensa/XtensaAsmPrinter.cpp
@@ -309,6 +309,7 @@ char XtensaAsmPrinter::ID = 0;
 INITIALIZE_PASS(XtensaAsmPrinter, "xtensa-asm-printer",
                 "Xtensa Assembly Printer", false, false)
 
-extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeXtensaAsmPrinter() {
+extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void
+LLVMInitializeXtensaAsmPrinter() {
   RegisterAsmPrinter<XtensaAsmPrinter> A(getTheXtensaTarget());
 }
diff --git a/llvm/lib/Target/Xtensa/XtensaTargetMachine.cpp b/llvm/lib/Target/Xtensa/XtensaTargetMachine.cpp
index b523678cca14e..c3c63d8ffeccc 100644
--- a/llvm/lib/Target/Xtensa/XtensaTargetMachine.cpp
+++ b/llvm/lib/Target/Xtensa/XtensaTargetMachine.cpp
@@ -25,7 +25,7 @@
 
 using namespace llvm;
 
-extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeXtensaTarget() {
+extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeXtensaTarget() {
   // Register the target.
   RegisterTargetMachine<XtensaTargetMachine> A(getTheXtensaTarget());
   PassRegistry &PR = *PassRegistry::getPassRegistry();

>From 091ee5af4b2356517145332ba6d1017db34ad0c7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?John=20K=C3=A5re=20Alsaker?= <john.kare.alsaker at gmail.com>
Date: Sun, 13 Sep 2026 15:03:49 +0200
Subject: [PATCH 2/2] [CodeGen] Export PassManager<MachineFunction>

---
 llvm/include/llvm/CodeGen/MachinePassManager.h | 2 +-
 llvm/lib/CodeGen/MachinePassManager.cpp        | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/llvm/include/llvm/CodeGen/MachinePassManager.h b/llvm/include/llvm/CodeGen/MachinePassManager.h
index f4d5ab4d55b2d..c7e85ec6fb836 100644
--- a/llvm/include/llvm/CodeGen/MachinePassManager.h
+++ b/llvm/include/llvm/CodeGen/MachinePassManager.h
@@ -219,7 +219,7 @@ createFunctionToMachineFunctionPassAdaptor(MachineFunctionPassT &&Pass) {
 template <>
 LLVM_ABI PreservedAnalyses PassManager<MachineFunction>::run(
     MachineFunction &, AnalysisManager<MachineFunction> &);
-extern template class PassManager<MachineFunction>;
+extern template class LLVM_TEMPLATE_ABI PassManager<MachineFunction>;
 
 /// Convenience typedef for a pass manager over functions.
 using MachineFunctionPassManager = PassManager<MachineFunction>;
diff --git a/llvm/lib/CodeGen/MachinePassManager.cpp b/llvm/lib/CodeGen/MachinePassManager.cpp
index 6e445f6787903..24ce1bb4e0c9c 100644
--- a/llvm/lib/CodeGen/MachinePassManager.cpp
+++ b/llvm/lib/CodeGen/MachinePassManager.cpp
@@ -25,7 +25,7 @@ AnalysisKey FunctionAnalysisManagerMachineFunctionProxy::Key;
 
 namespace llvm {
 template class LLVM_EXPORT_TEMPLATE AnalysisManager<MachineFunction>;
-template class PassManager<MachineFunction>;
+template class LLVM_EXPORT_TEMPLATE PassManager<MachineFunction>;
 template class LLVM_EXPORT_TEMPLATE
     InnerAnalysisManagerProxy<MachineFunctionAnalysisManager, Module>;
 template class LLVM_EXPORT_TEMPLATE



More information about the llvm-commits mailing list