[llvm] b65760b - MCObjectTargetWriter: Add getContext/reportError and use it for ELF

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Sat May 24 20:43:53 PDT 2025


Author: Fangrui Song
Date: 2025-05-24T20:43:48-07:00
New Revision: b65760bc7fcdee8179bf1e57fce3786737528dd8

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

LOG: MCObjectTargetWriter: Add getContext/reportError and use it for ELF

Prepare for removing MCContext from getRelocType functions.

Added: 
    

Modified: 
    llvm/include/llvm/MC/MCELFObjectWriter.h
    llvm/include/llvm/MC/MCObjectWriter.h
    llvm/lib/MC/ELFObjectWriter.cpp
    llvm/lib/MC/MCObjectWriter.cpp
    llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/MC/MCELFObjectWriter.h b/llvm/include/llvm/MC/MCELFObjectWriter.h
index 1fa1afa5aaa1b..25fa7981ad062 100644
--- a/llvm/include/llvm/MC/MCELFObjectWriter.h
+++ b/llvm/include/llvm/MC/MCELFObjectWriter.h
@@ -168,6 +168,7 @@ class ELFObjectWriter final : public MCObjectWriter {
                   bool IsLittleEndian);
 
   void reset() override;
+  void setAssembler(MCAssembler *Asm) override;
   void executePostLayoutBinding() override;
   void recordRelocation(const MCFragment &F, const MCFixup &Fixup,
                         MCValue Target, uint64_t &FixedValue) override;
@@ -182,7 +183,7 @@ class ELFObjectWriter final : public MCObjectWriter {
   bool useSectionSymbol(const MCValue &Val, const MCSymbolELF *Sym, uint64_t C,
                         unsigned Type) const;
 
-  bool checkRelocation(MCContext &Ctx, SMLoc Loc, const MCSectionELF *From,
+  bool checkRelocation(SMLoc Loc, const MCSectionELF *From,
                        const MCSectionELF *To);
 
   unsigned getELFHeaderEFlags() const { return ELFHeaderEFlags; }

diff  --git a/llvm/include/llvm/MC/MCObjectWriter.h b/llvm/include/llvm/MC/MCObjectWriter.h
index 71dfa41211530..0d5630749e042 100644
--- a/llvm/include/llvm/MC/MCObjectWriter.h
+++ b/llvm/include/llvm/MC/MCObjectWriter.h
@@ -55,7 +55,7 @@ class MCObjectWriter {
   MCObjectWriter &operator=(const MCObjectWriter &) = delete;
   virtual ~MCObjectWriter();
 
-  void setAssembler(MCAssembler *A) { Asm = A; }
+  virtual void setAssembler(MCAssembler *A) { Asm = A; }
 
   MCContext &getContext() const;
 
@@ -135,7 +135,14 @@ class MCObjectWriter {
 class MCObjectTargetWriter {
 public:
   virtual ~MCObjectTargetWriter() = default;
+  void setAssembler(MCAssembler *A) { Asm = A; }
   virtual Triple::ObjectFormatType getFormat() const = 0;
+
+protected:
+  MCContext &getContext() const;
+  void reportError(SMLoc L, const Twine &Msg) const;
+
+  MCAssembler *Asm = nullptr;
 };
 
 } // end namespace llvm

diff  --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp
index 57418486c25f9..4665d8574a852 100644
--- a/llvm/lib/MC/ELFObjectWriter.cpp
+++ b/llvm/lib/MC/ELFObjectWriter.cpp
@@ -1182,6 +1182,11 @@ void ELFObjectWriter::reset() {
   MCObjectWriter::reset();
 }
 
+void ELFObjectWriter::setAssembler(MCAssembler *Asm) {
+  MCObjectWriter::setAssembler(Asm);
+  TargetObjectWriter->setAssembler(Asm);
+}
+
 bool ELFObjectWriter::hasRelocationAddend() const {
   return TargetObjectWriter->hasRelocationAddend();
 }
@@ -1303,15 +1308,15 @@ bool ELFObjectWriter::useSectionSymbol(const MCValue &Val,
   return !TargetObjectWriter->needsRelocateWithSymbol(Val, *Sym, Type);
 }
 
-bool ELFObjectWriter::checkRelocation(MCContext &Ctx, SMLoc Loc,
-                                      const MCSectionELF *From,
+bool ELFObjectWriter::checkRelocation(SMLoc Loc, const MCSectionELF *From,
                                       const MCSectionELF *To) {
   if (isDwoSection(*From)) {
-    Ctx.reportError(Loc, "A dwo section may not contain relocations");
+    getContext().reportError(Loc, "A dwo section may not contain relocations");
     return false;
   }
   if (To && isDwoSection(*To)) {
-    Ctx.reportError(Loc, "A relocation may not refer to a dwo section");
+    getContext().reportError(Loc,
+                             "A relocation may not refer to a dwo section");
     return false;
   }
   return true;
@@ -1339,7 +1344,7 @@ void ELFObjectWriter::recordRelocation(const MCFragment &F,
   const MCSectionELF *SecA = (SymA && SymA->isInSection())
                                  ? cast<MCSectionELF>(&SymA->getSection())
                                  : nullptr;
-  if (DwoOS && !checkRelocation(Ctx, Fixup.getLoc(), &FixupSection, SecA))
+  if (DwoOS && !checkRelocation(Fixup.getLoc(), &FixupSection, SecA))
     return;
 
   bool IsPCRel = Backend.getFixupKindInfo(Fixup.getKind()).Flags &

diff  --git a/llvm/lib/MC/MCObjectWriter.cpp b/llvm/lib/MC/MCObjectWriter.cpp
index 0c1789a531a9f..3e1f0026ea3ec 100644
--- a/llvm/lib/MC/MCObjectWriter.cpp
+++ b/llvm/lib/MC/MCObjectWriter.cpp
@@ -8,6 +8,7 @@
 
 #include "llvm/MC/MCObjectWriter.h"
 #include "llvm/MC/MCAssembler.h"
+#include "llvm/MC/MCContext.h"
 #include "llvm/MC/MCExpr.h"
 #include "llvm/MC/MCFragment.h"
 #include "llvm/MC/MCSymbol.h"
@@ -53,3 +54,11 @@ bool MCObjectWriter::isSymbolRefDifferenceFullyResolvedImpl(
 void MCObjectWriter::addFileName(MCAssembler &Asm, StringRef FileName) {
   FileNames.emplace_back(std::string(FileName), Asm.Symbols.size());
 }
+
+MCContext &MCObjectTargetWriter::getContext() const {
+  return Asm->getContext();
+}
+
+void MCObjectTargetWriter::reportError(SMLoc L, const Twine &Msg) const {
+  return Asm->getContext().reportError(L, Msg);
+}

diff  --git a/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp
index cac4b81429b00..4e17a15134ecf 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp
@@ -370,7 +370,7 @@ unsigned X86ELFObjectWriter::getRelocType(MCContext &Ctx, const MCValue &Target,
   case RT64_NONE:
     break;
   case RT64_64:
-    Ctx.reportError(Fixup.getLoc(), "unsupported relocation type");
+    reportError(Fixup.getLoc(), "unsupported relocation type");
     return ELF::R_386_NONE;
   case RT64_32:
   case RT64_32S:


        


More information about the llvm-commits mailing list