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:

Methods

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)

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)

Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:249

Parameters

llvm::MCAssembler& Asm

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)

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)

Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:161

Parameters

const llvm::MCSymbol& S

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

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

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

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

Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:151

Parameters

const llvm::MCSection* Sec

llvm::SectionAddrMap& getSectionAddressMap()

Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:149

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

Description

@ {

Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:168

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

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

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

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)

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)

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)

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()

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)

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)

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)

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)

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)

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)

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)

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)

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)

Declared at: llvm/include/llvm/MC/MCMachObjectWriter.h:193

Parameters

uint32_t SymbolOffset
uint32_t NumSymbols
uint32_t StringTableOffset
uint32_t StringTableSize