[lld] bffb26f - [ELF] Add LinkerDriver::ctx. NFC

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 16 16:25:33 PDT 2024


Author: Fangrui Song
Date: 2024-09-16T16:25:28-07:00
New Revision: bffb26f1531ecfe209b84f77b170ddb0df991351

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

LOG: [ELF] Add LinkerDriver::ctx. NFC

Added: 
    

Modified: 
    lld/ELF/Config.h
    lld/ELF/Driver.cpp

Removed: 
    


################################################################################
diff  --git a/lld/ELF/Config.h b/lld/ELF/Config.h
index 11bf0ec4d173ba..93a5999d238336 100644
--- a/lld/ELF/Config.h
+++ b/lld/ELF/Config.h
@@ -48,6 +48,7 @@ class BitcodeCompiler;
 class OutputSection;
 class LinkerScript;
 class TargetInfo;
+struct Ctx;
 struct Partition;
 struct PhdrEntry;
 
@@ -149,11 +150,14 @@ struct VersionDefinition {
 
 class LinkerDriver {
 public:
+  LinkerDriver(Ctx &ctx);
+  LinkerDriver(LinkerDriver &) = delete;
   void linkerMain(ArrayRef<const char *> args);
   void addFile(StringRef path, bool withLOption);
   void addLibrary(StringRef name);
 
 private:
+  Ctx &ctx;
   void createFiles(llvm::opt::InputArgList &args);
   void inferMachineType();
   template <class ELFT> void link(llvm::opt::InputArgList &args);
@@ -652,6 +656,7 @@ struct Ctx {
   // STT_SECTION symbol associated to the .toc input section.
   llvm::DenseSet<std::pair<const Symbol *, uint64_t>> ppc64noTocRelax;
 
+  Ctx();
   void reset();
 
   llvm::raw_fd_ostream openAuxiliaryFile(llvm::StringRef, std::error_code &);

diff  --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index 3712d28f227f69..4a57bfd2fec323 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -91,8 +91,11 @@ void elf::errorOrWarn(const Twine &msg) {
     error(msg);
 }
 
+Ctx::Ctx() : driver(*this) {}
+
 void Ctx::reset() {
-  driver = LinkerDriver();
+  driver.~LinkerDriver();
+  new (&driver) LinkerDriver(*this);
   script = nullptr;
   target = nullptr;
 
@@ -613,6 +616,8 @@ constexpr const char *saveTempsValues[] = {
     "resolution", "preopt",     "promote", "internalize",  "import",
     "opt",        "precodegen", "prelink", "combinedindex"};
 
+LinkerDriver::LinkerDriver(Ctx &ctx) : ctx(ctx) {}
+
 void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
   ELFOptTable parser;
   opt::InputArgList args = parser.parse(argsArr.slice(1));


        


More information about the llvm-commits mailing list