LLVM: llvm::MachObjectWriter Class Reference (original) (raw)

#include "[llvm/MC/MCMachObjectWriter.h](MCMachObjectWriter%5F8h%5Fsource.html)"

Public Types
using VersionInfoType
Public Member Functions
MachObjectWriter (std::unique_ptr< MCMachObjectTargetWriter > MOTW, raw_pwrite_stream &OS, bool IsLittleEndian)
const MCSymbol & findAliasedSymbol (const MCSymbol &Sym) const
void reset () override
lifetime management
void setAssembler (MCAssembler *Asm) override
void writeHeader (MachO::HeaderFileType Type, unsigned NumLoadCommands, unsigned LoadCommandsSize, bool SubsectionsViaSymbols)
void writeSegmentLoadCommand (StringRef Name, unsigned NumSections, uint64_t VMAddr, uint64_t VMSize, uint64_t SectionDataStartOffset, uint64_t SectionDataSize, uint32_t MaxProt, uint32_t InitProt)
Write a segment load command.
void writeSection (const MCAssembler &Asm, const MCSectionMachO &Sec, uint64_t VMAddr, uint64_t FileOffset, unsigned Flags, uint64_t RelocationsStart, unsigned NumRelocations)
void writeSymtabLoadCommand (uint32_t SymbolOffset, uint32_t NumSymbols, uint32_t StringTableOffset, uint32_t StringTableSize)
void writeDysymtabLoadCommand (uint32_t FirstLocalSymbol, uint32_t NumLocalSymbols, uint32_t FirstExternalSymbol, uint32_t NumExternalSymbols, uint32_t FirstUndefinedSymbol, uint32_t NumUndefinedSymbols, uint32_t IndirectSymbolOffset, uint32_t NumIndirectSymbols)
void writeNlist (MachSymbolData &MSD, const MCAssembler &Asm)
void writeLinkeditLoadCommand (uint32_t Type, uint32_t DataOffset, uint32_t DataSize)
void writeLinkerOptionsLoadCommand (const std::vector< std::string > &Options)
void addRelocation (const MCSymbol *RelSymbol, const MCSection *Sec, MachO::any_relocation_info &MRE)
void recordRelocation (const MCFragment &F, const MCFixup &Fixup, MCValue Target, uint64_t &FixedValue) override
Record a relocation entry.
void bindIndirectSymbols (MCAssembler &Asm)
void computeSymbolTable (MCAssembler &Asm, std::vector< MachSymbolData > &LocalSymbolData, std::vector< MachSymbolData > &ExternalSymbolData, std::vector< MachSymbolData > &UndefinedSymbolData)
Compute the symbol table data.
void computeSectionAddresses (const MCAssembler &Asm)
void executePostLayoutBinding () override
Perform any late binding of symbols (for example, to assign symbol indices for use when generating relocations).
bool isSymbolRefDifferenceFullyResolvedImpl (const MCSymbol &SymA, const MCFragment &FB, bool InSet, bool IsPCRel) const override
void populateAddrSigSection (MCAssembler &Asm)
uint64_t writeObject () override
Write the object file and returns the number of bytes written.
Utility Methods
std::vector< IndirectSymbolData > & getIndirectSymbols ()
std::vector< DataRegionData > & getDataRegions ()
const llvm::SmallVectorImpl< MCSection * > & getSectionOrder () const
MCLOHContainer & getLOHContainer ()
uint64_t getSectionAddress (const MCSection *Sec) const
uint64_t getSymbolAddress (const MCSymbol &S) const
uint64_t getFragmentAddress (const MCAssembler &Asm, const MCFragment *Fragment) const
uint64_t getPaddingSize (const MCAssembler &Asm, const MCSection *SD) const
const MCSymbol * getAtom (const MCSymbol &S) const
bool doesSymbolRequireExternRelocation (const MCSymbol &S)
void setVersionMin (MCVersionMinType Type, unsigned Major, unsigned Minor, unsigned Update, VersionTuple SDKVersion=VersionTuple())
Mach-O deployment target version information.
void setBuildVersion (MachO::PlatformType Platform, unsigned Major, unsigned Minor, unsigned Update, VersionTuple SDKVersion=VersionTuple())
void setTargetVariantBuildVersion (MachO::PlatformType Platform, unsigned Major, unsigned Minor, unsigned Update, VersionTuple SDKVersion)
std::vector< std::vector< std::string > > & getLinkerOptions ()
Target Writer Proxy Accessors
bool is64Bit () const
bool isX86_64 () const
Public Member Functions inherited from llvm::MCObjectWriter
MCObjectWriter (const MCObjectWriter &)=delete
MCObjectWriter & operator= (const MCObjectWriter &)=delete
virtual ~MCObjectWriter ()
MCContext & getContext () const
bool isSymbolRefDifferenceFullyResolved (const MCSymbol &A, const MCSymbol &B, bool InSet) const
Check whether the difference (A - B) between two symbol references is fully resolved.
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)
Additional Inherited Members
Protected Member Functions inherited from llvm::MCObjectWriter
MCObjectWriter ()=default
Protected Attributes inherited from llvm::MCObjectWriter
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

Definition at line 88 of file MCMachObjectWriter.h.

VersionInfoType

Initial value:

struct {

bool EmitBuildVersion;

union {

} TypeOrPlatform;

unsigned Major;

unsigned Minor;

unsigned Update;

}

The instances of the Type class are immutable: once they are created, they are never changed.

Represents a version number in the form major[.minor[.subminor[.build]]].

Definition at line 98 of file MCMachObjectWriter.h.

addRelocation()

bindIndirectSymbols()

void MachObjectWriter::bindIndirectSymbols ( MCAssembler & Asm )

computeSectionAddresses()

computeSymbolTable()

void MachObjectWriter::computeSymbolTable ( MCAssembler & Asm,
std::vector< MachSymbolData > & LocalSymbolData,
std::vector< MachSymbolData > & ExternalSymbolData,
std::vector< MachSymbolData > & UndefinedSymbolData )

Compute the symbol table data.

computeSymbolTable - Compute the symbol table data

Definition at line 578 of file MachObjectWriter.cpp.

References llvm::MCObjectWriter::Asm, assert(), llvm::MCObjectWriter::getContext(), llvm::isInt(), isSymbolLinkerVisible(), llvm::MCSymbol::isUndefined(), llvm::little, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::lookup(), llvm::MCContext::reportError(), llvm::sort(), and W.

Referenced by writeObject().

doesSymbolRequireExternRelocation()

executePostLayoutBinding()

void MachObjectWriter::executePostLayoutBinding ( ) overridevirtual

findAliasedSymbol()

getAtom()

getDataRegions()

std::vector< DataRegionData > & llvm::MachObjectWriter::getDataRegions ( ) inline

getFragmentAddress()

getIndirectSymbols()

std::vector< IndirectSymbolData > & llvm::MachObjectWriter::getIndirectSymbols ( ) inline

getLinkerOptions()

std::vector< std::vector< std::string > > & llvm::MachObjectWriter::getLinkerOptions ( ) inline

getLOHContainer()

getPaddingSize()

getSectionAddress()

getSectionOrder()

getSymbolAddress()

Definition at line 94 of file MachObjectWriter.cpp.

References llvm::Address, llvm::MCObjectWriter::Asm, llvm::CallingConv::C, llvm::dyn_cast(), llvm::MCExpr::evaluateAsRelocatable(), llvm::MCSymbol::getFragment(), llvm::MCSymbol::getName(), llvm::Target::getName(), llvm::MCFragment::getParent(), getSectionAddress(), getSymbolAddress(), llvm::MCSymbol::getVariableValue(), llvm::MCSymbol::isVariable(), and llvm::report_fatal_error().

Referenced by getSymbolAddress(), writeNlist(), and writeObject().

is64Bit()

bool llvm::MachObjectWriter::is64Bit ( ) const inline

isSymbolRefDifferenceFullyResolvedImpl()

isX86_64()

bool llvm::MachObjectWriter::isX86_64 ( ) const inline

populateAddrSigSection()

void MachObjectWriter::populateAddrSigSection ( MCAssembler & Asm )

recordRelocation()

reset()

void MachObjectWriter::reset ( ) overridevirtual

setAssembler()

void MachObjectWriter::setAssembler ( MCAssembler * Asm) overridevirtual

setBuildVersion()

setTargetVariantBuildVersion()

setVersionMin()

writeDysymtabLoadCommand()

writeHeader()

writeLinkeditLoadCommand()

writeLinkerOptionsLoadCommand()

void MachObjectWriter::writeLinkerOptionsLoadCommand ( const std::vector< std::string > & Options )

writeNlist()

void MachObjectWriter::writeNlist ( MachSymbolData & MSD,
const MCAssembler & Asm )

Definition at line 385 of file MachObjectWriter.cpp.

References llvm::Address, llvm::MCObjectWriter::Asm, llvm::Data, findAliasedSymbol(), getSymbolAddress(), is64Bit(), llvm::MCSymbolMachO::isAltEntry(), llvm::MachO::N_ABS, llvm::MachO::N_EXT, llvm::MachO::N_INDR, llvm::MachO::N_PEXT, llvm::MachO::N_SECT, llvm::MachO::N_UNDF, and W.

Referenced by writeObject().

writeObject()

uint64_t MachObjectWriter::writeObject ( ) overridevirtual

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.

Implements llvm::MCObjectWriter.

Definition at line 795 of file MachObjectWriter.cpp.

References llvm::Address, llvm::alignTo(), llvm::MCObjectWriter::Asm, assert(), llvm::cast(), llvm::MCObjectWriter::CGProfile, ComputeLinkerOptionsLoadCommandSize(), computeSymbolTable(), llvm::copy(), llvm::MCSection::curFragList(), llvm::Data, llvm::MutableArrayRef< T >::data(), llvm::dbgs(), llvm::MCObjectWriter::getContext(), getLCFromMCVM(), llvm::MCContext::getMachOSection(), llvm::SectionKind::getMetadata(), getPaddingSize(), getSectionAddress(), getSymbolAddress(), llvm::MCFragment::getVarContents(), llvm::MCSection::FragList::Head, llvm::MachO::INDIRECT_SYMBOL_ABS, llvm::MachO::INDIRECT_SYMBOL_LOCAL, is64Bit(), llvm::isUInt(), LLVM_DEBUG, llvm::MachO::MH_OBJECT, llvm::offsetToAlignment(), populateAddrSigSection(), llvm::report_fatal_error(), llvm::MCContext::reportError(), llvm::reverse(), llvm::MachO::S_ATTR_SOME_INSTRUCTIONS, llvm::MachO::S_NON_LAZY_SYMBOL_POINTERS, Size, llvm::raw_svector_ostream::str(), llvm::MCObjectWriter::SubsectionsViaSymbols, llvm::MachO::VM_PROT_EXECUTE, llvm::MachO::VM_PROT_READ, llvm::MachO::VM_PROT_WRITE, W, llvm::support::endian::write(), writeDysymtabLoadCommand(), writeHeader(), writeLinkeditLoadCommand(), writeLinkerOptionsLoadCommand(), writeNlist(), writeSection(), writeSegmentLoadCommand(), and writeSymtabLoadCommand().

writeSection()

Definition at line 262 of file MachObjectWriter.cpp.

References llvm::MCObjectWriter::Asm, assert(), llvm::MCSection::getAlign(), llvm::MCSection::getName(), llvm::MCSectionMachO::getSegmentName(), llvm::MCSectionMachO::getStubSize(), is64Bit(), llvm::MCSection::isBssSection(), llvm::isUInt(), llvm::Log2(), and W.

Referenced by writeObject().

writeSegmentLoadCommand()

Write a segment load command.

writeSegmentLoadCommand - Write a segment load command.

Parameters

NumSections The number of sections in this segment.
SectionDataSize The total size of the sections.

Definition at line 222 of file MachObjectWriter.cpp.

References assert(), is64Bit(), and W.

Referenced by writeObject().

writeSymtabLoadCommand()

W

Definition at line 185 of file MCMachObjectWriter.h.

Referenced by computeSymbolTable(), llvm::MCLOHDirective::emit(), MachObjectWriter(), writeDysymtabLoadCommand(), writeHeader(), writeLinkeditLoadCommand(), writeLinkerOptionsLoadCommand(), writeNlist(), writeObject(), writeSection(), writeSegmentLoadCommand(), and writeSymtabLoadCommand().


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