From ac7ee38c28bc28e7a5642cbf6ada80719347af8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20K=C3=A5re=20Alsaker?= 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 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 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 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 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 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 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 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 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 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 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 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 A(getTheXtensaTarget()); PassRegistry &PR = *PassRegistry::getPassRegistry(); From 091ee5af4b2356517145332ba6d1017db34ad0c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20K=C3=A5re=20Alsaker?= Date: Sun, 13 Sep 2026 15:03:49 +0200 Subject: [PATCH 2/2] [CodeGen] Export PassManager --- 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::run( MachineFunction &, AnalysisManager &); -extern template class PassManager; +extern template class LLVM_TEMPLATE_ABI PassManager; /// Convenience typedef for a pass manager over functions. using MachineFunctionPassManager = PassManager; 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; -template class PassManager; +template class LLVM_EXPORT_TEMPLATE PassManager; template class LLVM_EXPORT_TEMPLATE InnerAnalysisManagerProxy; template class LLVM_EXPORT_TEMPLATE