[llvm] a2af375 - [MC] Move LOHContainer to MachObjectwriter
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sun Jul 21 11:19:56 PDT 2024
Author: Fangrui Song
Date: 2024-07-21T11:19:52-07:00
New Revision: a2af375556486d8027d229f3fae956af8371aa86
URL: https://github.com/llvm/llvm-project/commit/a2af375556486d8027d229f3fae956af8371aa86
DIFF: https://github.com/llvm/llvm-project/commit/a2af375556486d8027d229f3fae956af8371aa86.diff
LOG: [MC] Move LOHContainer to MachObjectwriter
Added:
Modified:
llvm/include/llvm/MC/MCAssembler.h
llvm/include/llvm/MC/MCMachObjectWriter.h
llvm/lib/MC/MCAssembler.cpp
llvm/lib/MC/MCMachOStreamer.cpp
llvm/lib/MC/MachObjectWriter.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/MC/MCAssembler.h b/llvm/include/llvm/MC/MCAssembler.h
index 4b08d50de9e22..93892ce0e832e 100644
--- a/llvm/include/llvm/MC/MCAssembler.h
+++ b/llvm/include/llvm/MC/MCAssembler.h
@@ -18,7 +18,6 @@
#include "llvm/BinaryFormat/MachO.h"
#include "llvm/MC/MCDirectives.h"
#include "llvm/MC/MCDwarf.h"
-#include "llvm/MC/MCLinkerOptimizationHint.h"
#include "llvm/MC/MCSymbol.h"
#include "llvm/Support/SMLoc.h"
#include "llvm/Support/VersionTuple.h"
@@ -122,10 +121,6 @@ class MCAssembler {
// which flags to be set.
unsigned ELFHeaderEFlags = 0;
- /// Used to communicate Linker Optimization Hint information between
- /// the Streamer and the .o writer
- MCLOHContainer LOHContainer;
-
VersionInfoType VersionInfo;
VersionInfoType DarwinTargetVariantVersionInfo;
@@ -341,14 +336,6 @@ class MCAssembler {
return LinkerOptions;
}
- // FIXME: This is a total hack, this should not be here. Once things are
- // factored so that the streamer has direct access to the .o writer, it can
- // disappear.
- MCLOHContainer &getLOHContainer() { return LOHContainer; }
- const MCLOHContainer &getLOHContainer() const {
- return const_cast<MCAssembler *>(this)->getLOHContainer();
- }
-
struct CGProfileEntry {
const MCSymbolRefExpr *From;
const MCSymbolRefExpr *To;
diff --git a/llvm/include/llvm/MC/MCMachObjectWriter.h b/llvm/include/llvm/MC/MCMachObjectWriter.h
index c26c75e98844c..60e3e28819724 100644
--- a/llvm/include/llvm/MC/MCMachObjectWriter.h
+++ b/llvm/include/llvm/MC/MCMachObjectWriter.h
@@ -13,6 +13,7 @@
#include "llvm/ADT/StringRef.h"
#include "llvm/BinaryFormat/MachO.h"
#include "llvm/MC/MCExpr.h"
+#include "llvm/MC/MCLinkerOptimizationHint.h"
#include "llvm/MC/MCObjectWriter.h"
#include "llvm/MC/MCSection.h"
#include "llvm/MC/StringTableBuilder.h"
@@ -140,6 +141,9 @@ class MachObjectWriter : public MCObjectWriter {
/// @}
+ // Used to communicate Linker Optimization Hint information.
+ MCLOHContainer LOHContainer;
+
MachSymbolData *findSymbolData(const MCSymbol &Sym);
void writeWithPadding(StringRef Str, uint64_t Size);
@@ -177,6 +181,7 @@ class MachObjectWriter : public MCObjectWriter {
return SectionOrder;
}
SectionAddrMap &getSectionAddressMap() { return SectionAddress; }
+ MCLOHContainer &getLOHContainer() { return LOHContainer; }
uint64_t getSectionAddress(const MCSection *Sec) const {
return SectionAddress.lookup(Sec);
diff --git a/llvm/lib/MC/MCAssembler.cpp b/llvm/lib/MC/MCAssembler.cpp
index c8d12eb5dcf64..ed654674c3854 100644
--- a/llvm/lib/MC/MCAssembler.cpp
+++ b/llvm/lib/MC/MCAssembler.cpp
@@ -102,7 +102,6 @@ void MCAssembler::reset() {
ThumbFuncs.clear();
BundleAlignSize = 0;
ELFHeaderEFlags = 0;
- LOHContainer.reset();
VersionInfo.Major = 0;
VersionInfo.SDKVersion = VersionTuple();
DarwinTargetVariantVersionInfo.Major = 0;
@@ -115,7 +114,6 @@ void MCAssembler::reset() {
getEmitterPtr()->reset();
if (getWriterPtr())
getWriterPtr()->reset();
- getLOHContainer().reset();
}
bool MCAssembler::registerSection(MCSection &Section) {
diff --git a/llvm/lib/MC/MCMachOStreamer.cpp b/llvm/lib/MC/MCMachOStreamer.cpp
index cb2e4e70ff395..f83e3096f3238 100644
--- a/llvm/lib/MC/MCMachOStreamer.cpp
+++ b/llvm/lib/MC/MCMachOStreamer.cpp
@@ -118,7 +118,7 @@ class MCMachOStreamer : public MCObjectStreamer {
}
void emitLOHDirective(MCLOHType Kind, const MCLOHArgs &Args) override {
- getAssembler().getLOHContainer().addDirective(Kind, Args);
+ getWriter().getLOHContainer().addDirective(Kind, Args);
}
void emitCGProfileEntry(const MCSymbolRefExpr *From,
const MCSymbolRefExpr *To, uint64_t Count) override {
diff --git a/llvm/lib/MC/MachObjectWriter.cpp b/llvm/lib/MC/MachObjectWriter.cpp
index f5435c6f3dd16..3c67f16e3d102 100644
--- a/llvm/lib/MC/MachObjectWriter.cpp
+++ b/llvm/lib/MC/MachObjectWriter.cpp
@@ -55,6 +55,7 @@ void MachObjectWriter::reset() {
LocalSymbolData.clear();
ExternalSymbolData.clear();
UndefinedSymbolData.clear();
+ LOHContainer.reset();
MCObjectWriter::reset();
}
@@ -839,7 +840,7 @@ uint64_t MachObjectWriter::writeObject(MCAssembler &Asm) {
}
// Add the loh load command size, if used.
- uint64_t LOHRawSize = Asm.getLOHContainer().getEmitSize(Asm, *this);
+ uint64_t LOHRawSize = LOHContainer.getEmitSize(Asm, *this);
uint64_t LOHSize = alignTo(LOHRawSize, is64Bit() ? 8 : 4);
if (LOHSize) {
++NumLoadCommands;
@@ -1063,7 +1064,7 @@ uint64_t MachObjectWriter::writeObject(MCAssembler &Asm) {
#ifndef NDEBUG
unsigned Start = W.OS.tell();
#endif
- Asm.getLOHContainer().emit(Asm, *this);
+ LOHContainer.emit(Asm, *this);
// Pad to a multiple of the pointer size.
W.OS.write_zeros(
offsetToAlignment(LOHRawSize, is64Bit() ? Align(8) : Align(4)));
More information about the llvm-commits
mailing list