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:84
Inherits from: MCObjectWriter
Member Variables
- private std::unique_ptr<MCMachObjectTargetWriter> TargetObjectWriter
- The target specific Mach-O writer instance.
- private DenseMap<const llvm::MCSection*, std::vector<RelAndSymbol>> Relocations
- private DenseMap<const llvm::MCSection*, unsigned int> IndirectSymBase
- private llvm::SectionAddrMap SectionAddress
- private llvm::StringTableBuilder StringTable
- @ {
- private std::vector<MachSymbolData> LocalSymbolData
- private std::vector<MachSymbolData> ExternalSymbolData
- private std::vector<MachSymbolData> UndefinedSymbolData
- public support::endian::Writer W
Inherited from MCObjectWriter:
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
- private llvm::MachObjectWriter::MachSymbolData * findSymbolData(const llvm::MCSymbol & Sym)
- 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 & A, const llvm::MCSymbol & B, bool InSet) const
- public bool isSymbolRefDifferenceFullyResolvedImpl(const llvm::MCAssembler & Asm, const llvm::MCSymbol & SymA, const llvm::MCFragment & FB, bool InSet, bool IsPCRel) const
- public bool isX86_64() const
- public void populateAddrSigSection(llvm::MCAssembler & Asm)
- 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 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)
- private void writeWithPadding(llvm::StringRef Str, uint64_t Size)
Inherited from MCObjectWriter:
- public addAddrsigSymbol
- public emitAddrsigSection
- public executePostLayoutBinding
- public getAddrsigSyms
- public getEmitAddrsigSection
- public isSymbolRefDifferenceFullyResolved
- public isSymbolRefDifferenceFullyResolvedImpl
- public isSymbolRefDifferenceFullyResolvedImpl
- public markGnuAbi
- 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:129
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:232
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:242
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:250
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:245
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:164
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:253
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:138
Parameters
- const llvm::MCSymbol& Sym
¶llvm::MachObjectWriter::MachSymbolData*
findSymbolData(const llvm::MCSymbol& Sym)
llvm::MachObjectWriter::MachSymbolData*
findSymbolData(const llvm::MCSymbol& Sym)
Description
@ }
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:124
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:159
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:162
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:154
Parameters
- const llvm::MCSection* Sec
¶llvm::SectionAddrMap& getSectionAddressMap()
llvm::SectionAddrMap& getSectionAddressMap()
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:152
¶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:157
Parameters
- const llvm::MCSymbol& S
- const llvm::MCAsmLayout& Layout
¶bool is64Bit() const
bool is64Bit() const
Description
@ {
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:171
¶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:150
Parameters
- const llvm::MCAssembler& Asm
- unsigned int Kind
¶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:256
Parameters
- const llvm::MCAssembler& Asm
- const llvm::MCSymbol& A
- const llvm::MCSymbol& B
- bool InSet
¶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:261
Parameters
- const llvm::MCAssembler& Asm
- const llvm::MCSymbol& SymA
- const llvm::MCFragment& FB
- bool InSet
- bool IsPCRel
¶bool isX86_64() const
bool isX86_64() const
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:172
¶void populateAddrSigSection(
llvm::MCAssembler& Asm)
void populateAddrSigSection(
llvm::MCAssembler& Asm)
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:266
Parameters
- llvm::MCAssembler& Asm
¶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:238
Parameters
- 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:143
¶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:200
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:179
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:208
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:211
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:206
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:268
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:192
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:186
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:196
Parameters
- uint32_t SymbolOffset
- uint32_t NumSymbols
- uint32_t StringTableOffset
- uint32_t StringTableSize
¶void writeWithPadding(llvm::StringRef Str,
uint64_t Size)
void writeWithPadding(llvm::StringRef Str,
uint64_t Size)
Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:126
Parameters
- llvm::StringRef Str
- uint64_t Size