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:
- include/llvm/MC/MCMachObjectWriter.h
- lib/MC/MachObjectWriter.cpp