LLVM 22.0.0git
|
Defines the object file and target independent interfaces used by the assembler backend to write native file format object files. More...
#include "llvm/MC/MCObjectWriter.h"
Classes | |
struct | CGProfileEntry |
Public Member Functions | |
MCObjectWriter (const MCObjectWriter &)=delete | |
MCObjectWriter & | operator= (const MCObjectWriter &)=delete |
virtual | ~MCObjectWriter () |
virtual void | setAssembler (MCAssembler *A) |
MCContext & | getContext () const |
virtual void | reset () |
lifetime management | |
High-Level API | |
virtual void | executePostLayoutBinding () |
Perform any late binding of symbols (for example, to assign symbol indices for use when generating relocations). | |
virtual void | recordRelocation (const MCFragment &F, const MCFixup &Fixup, MCValue Target, uint64_t &FixedValue) |
Record a relocation entry. | |
bool | isSymbolRefDifferenceFullyResolved (const MCSymbol &A, const MCSymbol &B, bool InSet) const |
Check whether the difference (A - B) between two symbol references is fully resolved. | |
virtual bool | isSymbolRefDifferenceFullyResolvedImpl (const MCSymbol &SymA, const MCFragment &FB, bool InSet, bool IsPCRel) const |
MutableArrayRef< std::pair< std::string, size_t > > | getFileNames () |
void | addFileName (StringRef FileName) |
void | setCompilerVersion (StringRef CompilerVers) |
void | emitAddrsigSection () |
Tell the object writer to emit an address-significance table during writeObject(). | |
bool | getEmitAddrsigSection () |
void | addAddrsigSymbol (const MCSymbol *Sym) |
Record the given symbol in the address-significance table to be written diring writeObject(). | |
std::vector< const MCSymbol * > & | getAddrsigSyms () |
SmallVector< CGProfileEntry, 0 > & | getCGProfile () |
bool | getSubsectionsViaSymbols () const |
void | setSubsectionsViaSymbols (bool Value) |
virtual uint64_t | writeObject ()=0 |
Write the object file and returns the number of bytes written. | |
Protected Member Functions | |
MCObjectWriter ()=default | |
Protected Attributes | |
MCAssembler * | Asm = nullptr |
SmallVector< std::pair< std::string, size_t >, 0 > | FileNames |
List of declared file names. | |
std::string | CompilerVersion |
std::vector< const MCSymbol * > | AddrsigSyms |
bool | EmitAddrsigSection = false |
bool | SubsectionsViaSymbols = false |
SmallVector< CGProfileEntry, 0 > | CGProfile |
Defines the object file and target independent interfaces used by the assembler backend to write native file format object files.
The object writer contains a few callbacks used by the assembler to allow the object writer to modify the assembler data structures at appropriate points. Once assembly is complete, the object writer is given the MCAssembler instance, which contains all the symbol and section data which should be emitted as part of writeObject().
Definition at line 34 of file MCObjectWriter.h.
|
protecteddefault |
|
delete |
|
virtualdefault |
Record the given symbol in the address-significance table to be written diring writeObject().
Definition at line 115 of file MCObjectWriter.h.
References Sym.
Referenced by llvm::MCObjectStreamer::emitAddrsigSym().
void MCObjectWriter::addFileName | ( | StringRef | FileName | ) |
Definition at line 53 of file MCObjectWriter.cpp.
References Asm, llvm::SmallVectorImpl< T >::emplace_back(), and FileNames.
|
inline |
Tell the object writer to emit an address-significance table during writeObject().
If this function is not called, all symbols are treated as address-significant.
Definition at line 109 of file MCObjectWriter.h.
Referenced by llvm::MCObjectStreamer::emitAddrsig().
|
inlinevirtual |
Perform any late binding of symbols (for example, to assign symbol indices for use when generating relocations).
This routine is called by the assembler after layout and relaxation is complete.
Reimplemented in llvm::ELFObjectWriter, llvm::MachObjectWriter, and llvm::WinCOFFObjectWriter.
Definition at line 74 of file MCObjectWriter.h.
Referenced by llvm::MCAssembler::layout().
Definition at line 117 of file MCObjectWriter.h.
Referenced by llvm::MachObjectWriter::populateAddrSigSection().
|
inline |
Definition at line 118 of file MCObjectWriter.h.
Referenced by llvm::MCELFStreamer::emitCGProfileEntry(), llvm::MCWinCOFFStreamer::emitCGProfileEntry(), and llvm::WinCOFFWriter::writeObject().
MCContext & MCObjectWriter::getContext | ( | ) | const |
Definition at line 23 of file MCObjectWriter.cpp.
References Asm, and llvm::MCAssembler::getContext().
Referenced by llvm::ELFObjectWriter::checkRelocation(), llvm::MachObjectWriter::populateAddrSigSection(), llvm::ELFObjectWriter::recordRelocation(), llvm::MachObjectWriter::recordRelocation(), llvm::DXContainerObjectWriter::writeObject(), llvm::MachObjectWriter::writeObject(), and llvm::WinCOFFObjectWriter::writeObject().
|
inline |
Definition at line 111 of file MCObjectWriter.h.
Referenced by llvm::WinCOFFWriter::writeObject().
|
inline |
Definition at line 98 of file MCObjectWriter.h.
|
inline |
Definition at line 121 of file MCObjectWriter.h.
bool MCObjectWriter::isSymbolRefDifferenceFullyResolved | ( | const MCSymbol & | A, |
const MCSymbol & | B, | ||
bool | InSet | ||
) | const |
Check whether the difference (A - B) between two symbol references is fully resolved.
Clients are not required to answer precisely and may conservatively return false, even when a difference is fully resolved.
Definition at line 36 of file MCObjectWriter.cpp.
References assert(), llvm::MCSymbol::getFragment(), isSymbolRefDifferenceFullyResolvedImpl(), and llvm::MCSymbol::isUndefined().
|
virtual |
Reimplemented in llvm::ELFObjectWriter, llvm::MachObjectWriter, and llvm::WinCOFFObjectWriter.
Definition at line 44 of file MCObjectWriter.cpp.
References llvm::MCFragment::getParent(), and llvm::MCSymbol::getSection().
Referenced by isSymbolRefDifferenceFullyResolved().
|
delete |
|
virtual |
Record a relocation entry.
This routine is called by the assembler after layout and relaxation, and post layout binding. The implementation is responsible for storing information about the relocation so that it can be emitted during writeObject().
Reimplemented in llvm::ELFObjectWriter, llvm::GOFFObjectWriter, llvm::MachObjectWriter, and llvm::WinCOFFObjectWriter.
Definition at line 33 of file MCObjectWriter.cpp.
Referenced by llvm::LoongArchAsmBackend::addReloc(), llvm::RISCVAsmBackend::addReloc(), llvm::AVRAsmBackend::applyFixup(), llvm::MCAsmBackend::maybeAddReloc(), and llvm::RISCVAsmBackend::maybeAddVendorReloc().
|
virtual |
lifetime management
Reimplemented in llvm::ELFObjectWriter, llvm::MachObjectWriter, and llvm::WinCOFFObjectWriter.
Definition at line 25 of file MCObjectWriter.cpp.
References AddrsigSyms, CGProfile, llvm::SmallVectorImpl< T >::clear(), EmitAddrsigSection, FileNames, and SubsectionsViaSymbols.
Referenced by llvm::ELFObjectWriter::reset(), llvm::MachObjectWriter::reset(), and llvm::WinCOFFObjectWriter::reset().
|
inlinevirtual |
Reimplemented in llvm::ELFObjectWriter, llvm::MachObjectWriter, and llvm::WinCOFFObjectWriter.
Definition at line 59 of file MCObjectWriter.h.
References A.
Referenced by llvm::ELFObjectWriter::setAssembler(), llvm::MachObjectWriter::setAssembler(), and llvm::WinCOFFObjectWriter::setAssembler().
|
inline |
Definition at line 102 of file MCObjectWriter.h.
|
inline |
Definition at line 122 of file MCObjectWriter.h.
|
pure virtual |
Write the object file and returns the number of bytes written.
This routine is called by the assembler after layout and relaxation is complete, fixups have been evaluated and applied, and relocations generated.
Implemented in llvm::DXContainerObjectWriter, llvm::ELFObjectWriter, llvm::GOFFObjectWriter, llvm::MachObjectWriter, and llvm::WinCOFFObjectWriter.
Referenced by llvm::MCAssembler::Finish().
Definition at line 41 of file MCObjectWriter.h.
Referenced by llvm::ELFObjectWriter::executePostLayoutBinding(), reset(), and llvm::WinCOFFWriter::writeObject().
|
protected |
Definition at line 36 of file MCObjectWriter.h.
Referenced by addFileName(), llvm::MachObjectWriter::bindIndirectSymbols(), llvm::MachObjectWriter::computeSectionAddresses(), llvm::MachObjectWriter::computeSymbolTable(), llvm::ELFObjectWriter::executePostLayoutBinding(), llvm::MachObjectWriter::executePostLayoutBinding(), getContext(), llvm::MachObjectWriter::getFragmentAddress(), llvm::MachObjectWriter::getPaddingSize(), llvm::MachObjectWriter::getSymbolAddress(), llvm::ELFObjectWriter::recordRelocation(), llvm::MachObjectWriter::recordRelocation(), llvm::ELFObjectWriter::setAssembler(), llvm::MachObjectWriter::setAssembler(), llvm::WinCOFFObjectWriter::setAssembler(), llvm::DXContainerObjectWriter::writeObject(), llvm::ELFObjectWriter::writeObject(), llvm::GOFFObjectWriter::writeObject(), llvm::MachObjectWriter::writeObject(), and llvm::MachObjectWriter::writeSection().
|
protected |
Definition at line 50 of file MCObjectWriter.h.
Referenced by reset(), and llvm::MachObjectWriter::writeObject().
|
protected |
Definition at line 40 of file MCObjectWriter.h.
|
protected |
Definition at line 42 of file MCObjectWriter.h.
Referenced by reset().
|
protected |
List of declared file names.
Definition at line 38 of file MCObjectWriter.h.
Referenced by addFileName(), and reset().
|
protected |
Definition at line 43 of file MCObjectWriter.h.
Referenced by llvm::MachObjectWriter::isSymbolRefDifferenceFullyResolvedImpl(), reset(), llvm::MachObjectWriter::writeHeader(), and llvm::MachObjectWriter::writeObject().