[lld] cddeb55 - [ELF] Initialize LLVM targets before parsing -mllvm (#228314)

via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 1 20:55:29 PDT 2026


Author: Fangrui Song
Date: 2026-10-01T20:55:17-07:00
New Revision: cddeb5505f748990cafd46eab11afe464571ea69

URL: https://github.com/llvm/llvm-project/commit/cddeb5505f748990cafd46eab11afe464571ea69
DIFF: https://github.com/llvm/llvm-project/commit/cddeb5505f748990cafd46eab11afe464571ea69.diff

LOG: [ELF] Initialize LLVM targets before parsing -mllvm (#228314)

readConfigs parses -mllvm before initLLVM initializes the targets, so an
option that a target registers at initialization (currently only Sparc
#227977)
is rejected as unknown.
Call initLLVM first, as the COFF, MachO, and wasm ports do. This will be
covered once a -mllvm used by lld/test/ELF/lto tests migrates.

Added: 
    

Modified: 
    lld/ELF/Driver.cpp

Removed: 
    


################################################################################
diff  --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index 4e5a5eb8664d7..00842f8f08bfd 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -699,6 +699,7 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
     }
   }
 
+  initLLVM();
   readConfigs(ctx, args);
   checkZOptions(ctx, args);
 
@@ -716,7 +717,6 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
   {
     llvm::TimeTraceScope timeScope("ExecuteLinker");
 
-    initLLVM();
     createFiles(args);
     if (errCount(ctx))
       return;
@@ -1368,6 +1368,8 @@ static void parseClangOption(Ctx &ctx, StringRef opt, const Twine &msg) {
   raw_string_ostream os(err);
 
   const char *argv[] = {ctx.arg.progName.data(), opt.data()};
+  // Called after initLLVM() to ensure target-specific RegisterLibraryOptions
+  // have been called.
   if (cl::ParseCommandLineOptions(2, argv, "", &os))
     return;
   ErrAlways(ctx) << msg << ": " << StringRef(err).trim();


        


More information about the llvm-commits mailing list