class MachObjectWriter
Declaration
class MachObjectWriter : public MCObjectWriter { /* full declaration omitted */ };
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().
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:83
Inherits from: MCObjectWriter
Member Variables
- public support::endian::Writer W
Method Overview
- public MachObjectWriter(std::unique_ptr<MCMachObjectTargetWriter> MOTW, llvm::raw_pwrite_stream & OS, bool IsLittleEndian)
- public void addRelocation(const llvm::MCSymbol * RelSymbol, const llvm::MCSection * Sec, MachO::any_relocation_info & MRE)
- public void bindIndirectSymbols(llvm::MCAssembler & Asm)
- public void computeSectionAddresses(const llvm::MCAssembler & Asm, const llvm::MCAsmLayout & Layout)
- public void computeSymbolTable(llvm::MCAssembler & Asm, std::vector<MachSymbolData> & LocalSymbolData, std::vector<MachSymbolData> & ExternalSymbolData, std::vector<MachSymbolData> & UndefinedSymbolData)
- public bool doesSymbolRequireExternRelocation(const llvm::MCSymbol & S)
- public void executePostLayoutBinding(llvm::MCAssembler & Asm, const llvm::MCAsmLayout & Layout)
- public const llvm::MCSymbol & findAliasedSymbol(const llvm::MCSymbol & Sym) const
- public uint64_t getFragmentAddress(const llvm::MCFragment * Fragment, const llvm::MCAsmLayout & Layout) const
- public uint64_t getPaddingSize(const llvm::MCSection * SD, const llvm::MCAsmLayout & Layout) const
- public uint64_t getSectionAddress(const llvm::MCSection * Sec) const
- public llvm::SectionAddrMap & getSectionAddressMap()
- public uint64_t getSymbolAddress(const llvm::MCSymbol & S, const llvm::MCAsmLayout & Layout) const
- public bool is64Bit() const
- public bool isFixupKindPCRel(const llvm::MCAssembler & Asm, unsigned int Kind)
- public bool isSymbolRefDifferenceFullyResolvedImpl(const llvm::MCAssembler & Asm, const llvm::MCSymbol & SymA, const llvm::MCFragment & FB, bool InSet, bool IsPCRel) const
- public bool isSymbolRefDifferenceFullyResolvedImpl(const llvm::MCAssembler & Asm, const llvm::MCSymbol & A, const llvm::MCSymbol & B, bool InSet) const
- public bool isX86_64() const
- public void recordRelocation(llvm::MCAssembler & Asm, const llvm::MCAsmLayout & Layout, const llvm::MCFragment * Fragment, const llvm::MCFixup & Fixup, llvm::MCValue Target, uint64_t & FixedValue)
- public void recordScatteredRelocation(const llvm::MCAssembler & Asm, const llvm::MCAsmLayout & Layout, const llvm::MCFragment * Fragment, const llvm::MCFixup & Fixup, llvm::MCValue Target, unsigned int Log2Size, uint64_t & FixedValue)
- public void recordTLVPRelocation(const llvm::MCAssembler & Asm, const llvm::MCAsmLayout & Layout, const llvm::MCFragment * Fragment, const llvm::MCFixup & Fixup, llvm::MCValue Target, uint64_t & FixedValue)
- public void reset()
- public 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)
- public void writeHeader(MachO::HeaderFileType Type, unsigned int NumLoadCommands, unsigned int LoadCommandsSize, bool SubsectionsViaSymbols)
- public void writeLinkeditLoadCommand(uint32_t Type, uint32_t DataOffset, uint32_t DataSize)
- public void writeLinkerOptionsLoadCommand(const std::vector<std::string> & Options)
- public void writeNlist(llvm::MachObjectWriter::MachSymbolData & MSD, const llvm::MCAsmLayout & Layout)
- public uint64_t writeObject(llvm::MCAssembler & Asm, const llvm::MCAsmLayout & Layout)
- public void writeSection(const llvm::MCAsmLayout & Layout, const llvm::MCSection & Sec, uint64_t VMAddr, uint64_t FileOffset, unsigned int Flags, uint64_t RelocationsStart, unsigned int NumRelocations)
- public void writeSegmentLoadCommand(llvm::StringRef Name, unsigned int NumSections, uint64_t VMAddr, uint64_t VMSize, uint64_t SectionDataStartOffset, uint64_t SectionDataSize, uint32_t MaxProt, uint32_t InitProt)
- public void writeSymtabLoadCommand(uint32_t SymbolOffset, uint32_t NumSymbols, uint32_t StringTableOffset, uint32_t StringTableSize)
Inherited from MCObjectWriter:
- public addAddrsigSymbol
- public emitAddrsigSection
- public executePostLayoutBinding
- public isSymbolRefDifferenceFullyResolved
- public isSymbolRefDifferenceFullyResolvedImpl
- public isSymbolRefDifferenceFullyResolvedImpl
- public recordRelocation
- public reset
- public writeObject
Methods
¶MachObjectWriter(
std::unique_ptr<MCMachObjectTargetWriter>
MOTW,
llvm::raw_pwrite_stream& OS,
bool IsLittleEndian)
MachObjectWriter(
std::unique_ptr<MCMachObjectTargetWriter>
MOTW,
llvm::raw_pwrite_stream& OS,
bool IsLittleEndian)
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:128
Parameters
- std::unique_ptr<MCMachObjectTargetWriter> MOTW
- llvm::raw_pwrite_stream& OS
- bool IsLittleEndian
¶void addRelocation(
const llvm::MCSymbol* RelSymbol,
const llvm::MCSection* Sec,
MachO::any_relocation_info& MRE)
void addRelocation(
const llvm::MCSymbol* RelSymbol,
const llvm::MCSection* Sec,
MachO::any_relocation_info& MRE)
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:229
Parameters
- const llvm::MCSymbol* RelSymbol
- const llvm::MCSection* Sec
- MachO::any_relocation_info& MRE
¶void bindIndirectSymbols(llvm::MCAssembler& Asm)
void bindIndirectSymbols(llvm::MCAssembler& Asm)
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:249
Parameters
- llvm::MCAssembler& Asm
¶void computeSectionAddresses(
const llvm::MCAssembler& Asm,
const llvm::MCAsmLayout& Layout)
void computeSectionAddresses(
const llvm::MCAssembler& Asm,
const llvm::MCAsmLayout& Layout)
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:257
Parameters
- const llvm::MCAssembler& Asm
- const llvm::MCAsmLayout& Layout
¶void computeSymbolTable(
llvm::MCAssembler& Asm,
std::vector<MachSymbolData>& LocalSymbolData,
std::vector<MachSymbolData>&
ExternalSymbolData,
std::vector<MachSymbolData>&
UndefinedSymbolData)
void computeSymbolTable(
llvm::MCAssembler& Asm,
std::vector<MachSymbolData>& LocalSymbolData,
std::vector<MachSymbolData>&
ExternalSymbolData,
std::vector<MachSymbolData>&
UndefinedSymbolData)
Description
Compute the symbol table data.
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:252
Parameters
- llvm::MCAssembler& Asm
- std::vector<MachSymbolData>& LocalSymbolData
- std::vector<MachSymbolData>& ExternalSymbolData
- std::vector<MachSymbolData>& UndefinedSymbolData
¶bool doesSymbolRequireExternRelocation(
const llvm::MCSymbol& S)
bool doesSymbolRequireExternRelocation(
const llvm::MCSymbol& S)
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:161
Parameters
- const llvm::MCSymbol& S
¶void executePostLayoutBinding(
llvm::MCAssembler& Asm,
const llvm::MCAsmLayout& Layout)
void executePostLayoutBinding(
llvm::MCAssembler& Asm,
const llvm::MCAsmLayout& Layout)
Description
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.
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:260
Parameters
- llvm::MCAssembler& Asm
- const llvm::MCAsmLayout& Layout
¶const llvm::MCSymbol& findAliasedSymbol(
const llvm::MCSymbol& Sym) const
const llvm::MCSymbol& findAliasedSymbol(
const llvm::MCSymbol& Sym) const
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:135
Parameters
- const llvm::MCSymbol& Sym
¶uint64_t getFragmentAddress(
const llvm::MCFragment* Fragment,
const llvm::MCAsmLayout& Layout) const
uint64_t getFragmentAddress(
const llvm::MCFragment* Fragment,
const llvm::MCAsmLayout& Layout) const
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:156
Parameters
- const llvm::MCFragment* Fragment
- const llvm::MCAsmLayout& Layout
¶uint64_t getPaddingSize(
const llvm::MCSection* SD,
const llvm::MCAsmLayout& Layout) const
uint64_t getPaddingSize(
const llvm::MCSection* SD,
const llvm::MCAsmLayout& Layout) const
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:159
Parameters
- const llvm::MCSection* SD
- const llvm::MCAsmLayout& Layout
¶uint64_t getSectionAddress(
const llvm::MCSection* Sec) const
uint64_t getSectionAddress(
const llvm::MCSection* Sec) const
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:151
Parameters
- const llvm::MCSection* Sec
¶llvm::SectionAddrMap& getSectionAddressMap()
llvm::SectionAddrMap& getSectionAddressMap()
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:149
¶uint64_t getSymbolAddress(
const llvm::MCSymbol& S,
const llvm::MCAsmLayout& Layout) const
uint64_t getSymbolAddress(
const llvm::MCSymbol& S,
const llvm::MCAsmLayout& Layout) const
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:154
Parameters
- const llvm::MCSymbol& S
- const llvm::MCAsmLayout& Layout
¶bool is64Bit() const
bool is64Bit() const
Description
@ {
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:168
¶bool isFixupKindPCRel(
const llvm::MCAssembler& Asm,
unsigned int Kind)
bool isFixupKindPCRel(
const llvm::MCAssembler& Asm,
unsigned int Kind)
Description
@ {
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:147
Parameters
- const llvm::MCAssembler& Asm
- unsigned int Kind
¶bool isSymbolRefDifferenceFullyResolvedImpl(
const llvm::MCAssembler& Asm,
const llvm::MCSymbol& SymA,
const llvm::MCFragment& FB,
bool InSet,
bool IsPCRel) const
bool isSymbolRefDifferenceFullyResolvedImpl(
const llvm::MCAssembler& Asm,
const llvm::MCSymbol& SymA,
const llvm::MCFragment& FB,
bool InSet,
bool IsPCRel) const
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:268
Parameters
- const llvm::MCAssembler& Asm
- const llvm::MCSymbol& SymA
- const llvm::MCFragment& FB
- bool InSet
- bool IsPCRel
¶bool isSymbolRefDifferenceFullyResolvedImpl(
const llvm::MCAssembler& Asm,
const llvm::MCSymbol& A,
const llvm::MCSymbol& B,
bool InSet) const
bool isSymbolRefDifferenceFullyResolvedImpl(
const llvm::MCAssembler& Asm,
const llvm::MCSymbol& A,
const llvm::MCSymbol& B,
bool InSet) const
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:263
Parameters
- const llvm::MCAssembler& Asm
- const llvm::MCSymbol& A
- const llvm::MCSymbol& B
- bool InSet
¶bool isX86_64() const
bool isX86_64() const
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:169
¶void recordRelocation(
llvm::MCAssembler& Asm,
const llvm::MCAsmLayout& Layout,
const llvm::MCFragment* Fragment,
const llvm::MCFixup& Fixup,
llvm::MCValue Target,
uint64_t& FixedValue)
void recordRelocation(
llvm::MCAssembler& Asm,
const llvm::MCAsmLayout& Layout,
const llvm::MCFragment* Fragment,
const llvm::MCFixup& Fixup,
llvm::MCValue Target,
uint64_t& FixedValue)
Description
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().
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:245
Parameters
- llvm::MCAssembler& Asm
- const llvm::MCAsmLayout& Layout
- const llvm::MCFragment* Fragment
- const llvm::MCFixup& Fixup
- llvm::MCValue Target
- uint64_t& FixedValue
¶void recordScatteredRelocation(
const llvm::MCAssembler& Asm,
const llvm::MCAsmLayout& Layout,
const llvm::MCFragment* Fragment,
const llvm::MCFixup& Fixup,
llvm::MCValue Target,
unsigned int Log2Size,
uint64_t& FixedValue)
void recordScatteredRelocation(
const llvm::MCAssembler& Asm,
const llvm::MCAsmLayout& Layout,
const llvm::MCFragment* Fragment,
const llvm::MCFixup& Fixup,
llvm::MCValue Target,
unsigned int Log2Size,
uint64_t& FixedValue)
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:235
Parameters
- const llvm::MCAssembler& Asm
- const llvm::MCAsmLayout& Layout
- const llvm::MCFragment* Fragment
- const llvm::MCFixup& Fixup
- llvm::MCValue Target
- unsigned int Log2Size
- uint64_t& FixedValue
¶void recordTLVPRelocation(
const llvm::MCAssembler& Asm,
const llvm::MCAsmLayout& Layout,
const llvm::MCFragment* Fragment,
const llvm::MCFixup& Fixup,
llvm::MCValue Target,
uint64_t& FixedValue)
void recordTLVPRelocation(
const llvm::MCAssembler& Asm,
const llvm::MCAsmLayout& Layout,
const llvm::MCFragment* Fragment,
const llvm::MCFixup& Fixup,
llvm::MCValue Target,
uint64_t& FixedValue)
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:241
Parameters
- const llvm::MCAssembler& Asm
- const llvm::MCAsmLayout& Layout
- const llvm::MCFragment* Fragment
- const llvm::MCFixup& Fixup
- llvm::MCValue Target
- uint64_t& FixedValue
¶void reset()
void reset()
Description
@ {
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:140
¶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 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)
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:197
Parameters
- 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 writeHeader(MachO::HeaderFileType Type,
unsigned int NumLoadCommands,
unsigned int LoadCommandsSize,
bool SubsectionsViaSymbols)
void writeHeader(MachO::HeaderFileType Type,
unsigned int NumLoadCommands,
unsigned int LoadCommandsSize,
bool SubsectionsViaSymbols)
Description
@ }
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:176
Parameters
- MachO::HeaderFileType Type
- unsigned int NumLoadCommands
- unsigned int LoadCommandsSize
- bool SubsectionsViaSymbols
¶void writeLinkeditLoadCommand(uint32_t Type,
uint32_t DataOffset,
uint32_t DataSize)
void writeLinkeditLoadCommand(uint32_t Type,
uint32_t DataOffset,
uint32_t DataSize)
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:205
Parameters
- uint32_t Type
- uint32_t DataOffset
- uint32_t DataSize
¶void writeLinkerOptionsLoadCommand(
const std::vector<std::string>& Options)
void writeLinkerOptionsLoadCommand(
const std::vector<std::string>& Options)
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:208
Parameters
- const std::vector<std::string>& Options
¶void writeNlist(
llvm::MachObjectWriter::MachSymbolData& MSD,
const llvm::MCAsmLayout& Layout)
void writeNlist(
llvm::MachObjectWriter::MachSymbolData& MSD,
const llvm::MCAsmLayout& Layout)
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:203
Parameters
- llvm::MachObjectWriter::MachSymbolData& MSD
- const llvm::MCAsmLayout& Layout
¶uint64_t writeObject(
llvm::MCAssembler& Asm,
const llvm::MCAsmLayout& Layout)
uint64_t writeObject(
llvm::MCAssembler& Asm,
const llvm::MCAsmLayout& Layout)
Description
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.
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:273
Parameters
- llvm::MCAssembler& Asm
- const llvm::MCAsmLayout& Layout
¶void writeSection(const llvm::MCAsmLayout& Layout,
const llvm::MCSection& Sec,
uint64_t VMAddr,
uint64_t FileOffset,
unsigned int Flags,
uint64_t RelocationsStart,
unsigned int NumRelocations)
void writeSection(const llvm::MCAsmLayout& Layout,
const llvm::MCSection& Sec,
uint64_t VMAddr,
uint64_t FileOffset,
unsigned int Flags,
uint64_t RelocationsStart,
unsigned int NumRelocations)
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:189
Parameters
- const llvm::MCAsmLayout& Layout
- const llvm::MCSection& Sec
- uint64_t VMAddr
- uint64_t FileOffset
- unsigned int Flags
- uint64_t RelocationsStart
- unsigned int NumRelocations
¶void writeSegmentLoadCommand(
llvm::StringRef Name,
unsigned int NumSections,
uint64_t VMAddr,
uint64_t VMSize,
uint64_t SectionDataStartOffset,
uint64_t SectionDataSize,
uint32_t MaxProt,
uint32_t InitProt)
void writeSegmentLoadCommand(
llvm::StringRef Name,
unsigned int NumSections,
uint64_t VMAddr,
uint64_t VMSize,
uint64_t SectionDataStartOffset,
uint64_t SectionDataSize,
uint32_t MaxProt,
uint32_t InitProt)
Description
Write a segment load command.
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:183
Parameters
- llvm::StringRef Name
- unsigned int NumSections
- The number of sections in this segment.
- uint64_t VMAddr
- uint64_t VMSize
- uint64_t SectionDataStartOffset
- uint64_t SectionDataSize
- The total size of the sections.
- uint32_t MaxProt
- uint32_t InitProt
¶void writeSymtabLoadCommand(
uint32_t SymbolOffset,
uint32_t NumSymbols,
uint32_t StringTableOffset,
uint32_t StringTableSize)
void writeSymtabLoadCommand(
uint32_t SymbolOffset,
uint32_t NumSymbols,
uint32_t StringTableOffset,
uint32_t StringTableSize)
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:193
Parameters
- uint32_t SymbolOffset
- uint32_t NumSymbols
- uint32_t StringTableOffset
- uint32_t StringTableSize