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

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

Public Member Functions
MachObjectWriter (std::unique_ptr< MCMachObjectTargetWriter > MOTW, raw_pwrite_stream &OS, bool IsLittleEndian)
const MCSymbol & findAliasedSymbol (const MCSymbol &Sym) const
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 MCSection &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 (MCAssembler &Asm, const MCFragment *Fragment, 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 (MCAssembler &Asm) override
Perform any late binding of symbols (for example, to assign symbol indices for use when generating relocations).
bool isSymbolRefDifferenceFullyResolvedImpl (const MCAssembler &Asm, const MCSymbol &SymA, const MCFragment &FB, bool InSet, bool IsPCRel) const override
void populateAddrSigSection (MCAssembler &Asm)
uint64_t writeObject (MCAssembler &Asm) override
Write the object file and returns the number of bytes written.
Lifetime management Methods
void reset () override
lifetime management
Utility Methods
bool isFixupKindPCRel (const MCAssembler &Asm, unsigned Kind)
std::vector< IndirectSymbolData > & getIndirectSymbols ()
std::vector< DataRegionData > & getDataRegions ()
const llvm::SmallVectorImpl< MCSection * > & getSectionOrder () const
SectionAddrMap & getSectionAddressMap ()
MCLOHContainer & getLOHContainer ()
uint64_t getSectionAddress (const MCSection *Sec) const
uint64_t getSymbolAddress (const MCSymbol &S, const MCAssembler &Asm) 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 ()
virtual void reset ()
lifetime management
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.
MutableArrayRef< std::pair< std::string, size_t > > getFileNames ()
void addFileName (MCAssembler &Asm, 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)
Public Attributes
union {
MCVersionMinType Type
Used when EmitBuildVersion==false. More...
MachO::PlatformType Platform
Used when EmitBuildVersion==true. More...
} TypeOrPlatform
unsigned Major
unsigned Minor
unsigned Update
VersionTuple SDKVersion
An optional version of the SDK that was used to build the source.
support::endian::Writer W
Additional Inherited Members
- Protected Member Functions inherited from llvm::MCObjectWriter
MCObjectWriter ()=default
- Protected Attributes inherited from llvm::MCObjectWriter
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 86 of file MCMachObjectWriter.h.

VersionInfoType

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 586 of file MachObjectWriter.cpp.

References assert(), llvm::support::endian::Writer::Endian, isSymbolLinkerVisible(), llvm::little, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::lookup(), llvm::sort(), and W.

Referenced by writeObject().

doesSymbolRequireExternRelocation()

executePostLayoutBinding()

void MachObjectWriter::executePostLayoutBinding ( MCAssembler & Asm) 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()

getSectionAddressMap()

SectionAddrMap & llvm::MachObjectWriter::getSectionAddressMap ( ) inline

getSectionOrder()

getSymbolAddress()

Definition at line 98 of file MachObjectWriter.cpp.

References llvm::Address, llvm::CallingConv::C, 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

isFixupKindPCRel()

isSymbolRefDifferenceFullyResolvedImpl()

isX86_64()

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

populateAddrSigSection()

void MachObjectWriter::populateAddrSigSection ( MCAssembler & Asm )

recordRelocation()

reset()

void MachObjectWriter::reset ( ) overridevirtual

setBuildVersion()

setTargetVariantBuildVersion()

setVersionMin()

writeDysymtabLoadCommand()

writeHeader()

Definition at line 174 of file MachObjectWriter.cpp.

References assert(), llvm::MachO::CPU_SUBTYPE_ARM64E, llvm::MachO::CPU_SUBTYPE_ARM64E_WITH_PTRAUTH_VERSION(), llvm::MachO::CPU_TYPE_ARM64, is64Bit(), llvm::MachO::MH_MAGIC, llvm::MachO::MH_MAGIC_64, llvm::MachO::MH_SUBSECTIONS_VIA_SYMBOLS, llvm::support::endian::Writer::OS, llvm::MCObjectWriter::SubsectionsViaSymbols, llvm::raw_ostream::tell(), Type, W, and llvm::support::endian::Writer::write().

Referenced by writeObject().

writeLinkeditLoadCommand()

writeLinkerOptionsLoadCommand()

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

Definition at line 483 of file MachObjectWriter.cpp.

References assert(), ComputeLinkerOptionsLoadCommandSize(), is64Bit(), llvm::offsetToAlignment(), Options, llvm::support::endian::Writer::OS, Size, llvm::raw_ostream::tell(), W, llvm::support::endian::Writer::write(), and llvm::raw_ostream::write_zeros().

Referenced by writeObject().

writeNlist()

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

Definition at line 392 of file MachObjectWriter.cpp.

References llvm::Address, llvm::Data, findAliasedSymbol(), getSymbolAddress(), is64Bit(), llvm::MachO::N_ABS, llvm::MachO::N_EXT, llvm::MachO::N_INDR, llvm::MachO::N_PEXT, llvm::MachO::N_SECT, llvm::MachO::N_UNDF, llvm::support::endian::Writer::OS, W, and llvm::support::endian::Writer::write().

Referenced by writeObject().

writeObject()

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 794 of file MachObjectWriter.cpp.

References llvm::Address, llvm::alignTo(), assert(), llvm::MCSection::begin(), llvm::MCObjectWriter::CGProfile, ComputeLinkerOptionsLoadCommandSize(), computeSymbolTable(), llvm::Data, llvm::dbgs(), llvm::MCLOHContainer::emit(), End, llvm::support::endian::Writer::Endian, llvm::MCLOHContainer::getEmitSize(), getLCFromMCVM(), llvm::SectionKind::getMetadata(), getPaddingSize(), getSectionAddress(), getSymbolAddress(), llvm::MachO::INDIRECT_SYMBOL_ABS, llvm::MachO::INDIRECT_SYMBOL_LOCAL, is64Bit(), LLVM_DEBUG, llvm::MachO::MH_OBJECT, Minor, llvm::offsetToAlignment(), llvm::support::endian::Writer::OS, OS, populateAddrSigSection(), llvm::report_fatal_error(), llvm::reverse(), llvm::MachO::S_ATTR_SOME_INSTRUCTIONS, llvm::MachO::S_NON_LAZY_SYMBOL_POINTERS, SDKVersion, Size, llvm::MCObjectWriter::SubsectionsViaSymbols, llvm::raw_ostream::tell(), Update, llvm::MachO::VM_PROT_EXECUTE, llvm::MachO::VM_PROT_READ, llvm::MachO::VM_PROT_WRITE, W, llvm::support::endian::Writer::write(), llvm::support::endian::write(), llvm::raw_ostream::write_zeros(), writeDysymtabLoadCommand(), writeHeader(), writeLinkeditLoadCommand(), writeLinkerOptionsLoadCommand(), writeNlist(), writeSection(), writeSegmentLoadCommand(), and writeSymtabLoadCommand().

writeSection()

writeSegmentLoadCommand()

writeSymtabLoadCommand()

Major

Minor

Platform

SDKVersion

Type

union { ... } llvm::MachObjectWriter::TypeOrPlatform

Update

W

Definition at line 183 of file MCMachObjectWriter.h.

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


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