LLVM 19.0.0git
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
llvm::MCObjectWriter Class Referenceabstract

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"

Inheritance diagram for llvm::MCObjectWriter:
Inheritance graph
[legend]

Public Member Functions

 MCObjectWriter (const MCObjectWriter &)=delete
 
MCObjectWriteroperator= (const MCObjectWriter &)=delete
 
virtual ~MCObjectWriter ()
 
virtual void reset ()
 lifetime management
 
High-Level API
virtual void executePostLayoutBinding (MCAssembler &Asm, const MCAsmLayout &Layout)=0
 Perform any late binding of symbols (for example, to assign symbol indices for use when generating relocations).
 
virtual void recordRelocation (MCAssembler &Asm, const MCAsmLayout &Layout, const MCFragment *Fragment, const MCFixup &Fixup, MCValue Target, uint64_t &FixedValue)=0
 Record a relocation entry.
 
bool isSymbolRefDifferenceFullyResolved (const MCAssembler &Asm, const MCSymbolRefExpr *A, const MCSymbolRefExpr *B, bool InSet) const
 Check whether the difference (A - B) between two symbol references is fully resolved.
 
virtual bool isSymbolRefDifferenceFullyResolvedImpl (const MCAssembler &Asm, const MCSymbol &A, const MCSymbol &B, bool InSet) const
 
virtual bool isSymbolRefDifferenceFullyResolvedImpl (const MCAssembler &Asm, const MCSymbol &SymA, const MCFragment &FB, bool InSet, bool IsPCRel) const
 
virtual void markGnuAbi ()
 ELF only. Mark that we have seen GNU ABI usage (e.g. SHF_GNU_RETAIN).
 
virtual void setOverrideABIVersion (uint8_t ABIVersion)
 ELF only, override the default ABIVersion in the ELF header.
 
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 ()
 
virtual void addExceptionEntry (const MCSymbol *Symbol, const MCSymbol *Trap, unsigned LanguageCode, unsigned ReasonCode, unsigned FunctionSize, bool hasDebug)
 
virtual void addCInfoSymEntry (StringRef Name, StringRef Metadata)
 
virtual uint64_t writeObject (MCAssembler &Asm, const MCAsmLayout &Layout)=0
 Write the object file and returns the number of bytes written.
 

Protected Member Functions

 MCObjectWriter ()=default
 

Protected Attributes

std::vector< const MCSymbol * > AddrsigSyms
 
bool EmitAddrsigSection = false
 

Detailed Description

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.

Constructor & Destructor Documentation

◆ MCObjectWriter() [1/2]

llvm::MCObjectWriter::MCObjectWriter ( )
protecteddefault

◆ MCObjectWriter() [2/2]

llvm::MCObjectWriter::MCObjectWriter ( const MCObjectWriter )
delete

◆ ~MCObjectWriter()

MCObjectWriter::~MCObjectWriter ( )
virtualdefault

Member Function Documentation

◆ addAddrsigSymbol()

void llvm::MCObjectWriter::addAddrsigSymbol ( const MCSymbol Sym)
inline

Record the given symbol in the address-significance table to be written diring writeObject().

Definition at line 107 of file MCObjectWriter.h.

References AddrsigSyms, and Sym.

Referenced by llvm::MCObjectStreamer::emitAddrsigSym().

◆ addCInfoSymEntry()

virtual void llvm::MCObjectWriter::addCInfoSymEntry ( StringRef  Name,
StringRef  Metadata 
)
inlinevirtual

Definition at line 116 of file MCObjectWriter.h.

References llvm::report_fatal_error().

Referenced by llvm::MCXCOFFStreamer::emitXCOFFCInfoSym().

◆ addExceptionEntry()

virtual void llvm::MCObjectWriter::addExceptionEntry ( const MCSymbol Symbol,
const MCSymbol Trap,
unsigned  LanguageCode,
unsigned  ReasonCode,
unsigned  FunctionSize,
bool  hasDebug 
)
inlinevirtual

◆ emitAddrsigSection()

void llvm::MCObjectWriter::emitAddrsigSection ( )
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 101 of file MCObjectWriter.h.

References EmitAddrsigSection.

Referenced by llvm::MCObjectStreamer::emitAddrsig().

◆ executePostLayoutBinding()

virtual void llvm::MCObjectWriter::executePostLayoutBinding ( MCAssembler Asm,
const MCAsmLayout Layout 
)
pure virtual

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.

Implemented in llvm::MachObjectWriter.

Referenced by llvm::MCAssembler::layout().

◆ getAddrsigSyms()

std::vector< const MCSymbol * > & llvm::MCObjectWriter::getAddrsigSyms ( )
inline

Definition at line 109 of file MCObjectWriter.h.

References AddrsigSyms.

Referenced by llvm::MachObjectWriter::populateAddrSigSection().

◆ getEmitAddrsigSection()

bool llvm::MCObjectWriter::getEmitAddrsigSection ( )
inline

Definition at line 103 of file MCObjectWriter.h.

References EmitAddrsigSection.

◆ isSymbolRefDifferenceFullyResolved()

bool MCObjectWriter::isSymbolRefDifferenceFullyResolved ( const MCAssembler Asm,
const MCSymbolRefExpr A,
const MCSymbolRefExpr 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 21 of file MCObjectWriter.cpp.

References A, assert(), B, llvm::MCSymbol::getFragment(), isSymbolRefDifferenceFullyResolvedImpl(), llvm::MCSymbol::isUndefined(), and llvm::MCSymbolRefExpr::VK_None.

◆ isSymbolRefDifferenceFullyResolvedImpl() [1/2]

bool MCObjectWriter::isSymbolRefDifferenceFullyResolvedImpl ( const MCAssembler Asm,
const MCSymbol A,
const MCSymbol B,
bool  InSet 
) const
virtual

◆ isSymbolRefDifferenceFullyResolvedImpl() [2/2]

bool MCObjectWriter::isSymbolRefDifferenceFullyResolvedImpl ( const MCAssembler Asm,
const MCSymbol SymA,
const MCFragment FB,
bool  InSet,
bool  IsPCRel 
) const
virtual

Reimplemented in llvm::MachObjectWriter.

Definition at line 45 of file MCObjectWriter.cpp.

References llvm::MCFragment::getParent(), and llvm::MCSymbol::getSection().

◆ markGnuAbi()

virtual void llvm::MCObjectWriter::markGnuAbi ( )
inlinevirtual

ELF only. Mark that we have seen GNU ABI usage (e.g. SHF_GNU_RETAIN).

Definition at line 93 of file MCObjectWriter.h.

Referenced by llvm::MCELFStreamer::emitSymbolAttribute().

◆ operator=()

MCObjectWriter & llvm::MCObjectWriter::operator= ( const MCObjectWriter )
delete

◆ recordRelocation()

virtual void llvm::MCObjectWriter::recordRelocation ( MCAssembler Asm,
const MCAsmLayout Layout,
const MCFragment Fragment,
const MCFixup Fixup,
MCValue  Target,
uint64_t FixedValue 
)
pure 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().

Implemented in llvm::MachObjectWriter.

◆ reset()

virtual void llvm::MCObjectWriter::reset ( )
inlinevirtual

lifetime management

Reimplemented in llvm::MachObjectWriter.

Definition at line 47 of file MCObjectWriter.h.

Referenced by llvm::MCAssembler::reset(), and llvm::MachObjectWriter::reset().

◆ setOverrideABIVersion()

virtual void llvm::MCObjectWriter::setOverrideABIVersion ( uint8_t  ABIVersion)
inlinevirtual

ELF only, override the default ABIVersion in the ELF header.

Definition at line 96 of file MCObjectWriter.h.

Referenced by llvm::AMDGPUTargetELFStreamer::finish().

◆ writeObject()

virtual uint64_t llvm::MCObjectWriter::writeObject ( MCAssembler Asm,
const MCAsmLayout Layout 
)
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::MachObjectWriter.

Referenced by llvm::MCAssembler::Finish().

Member Data Documentation

◆ AddrsigSyms

std::vector<const MCSymbol *> llvm::MCObjectWriter::AddrsigSyms
protected

Definition at line 36 of file MCObjectWriter.h.

Referenced by addAddrsigSymbol(), and getAddrsigSyms().

◆ EmitAddrsigSection

bool llvm::MCObjectWriter::EmitAddrsigSection = false
protected

Definition at line 37 of file MCObjectWriter.h.

Referenced by emitAddrsigSection(), and getEmitAddrsigSection().


The documentation for this class was generated from the following files: