|
LLVM
3.7.0
|
#include <MCMachObjectWriter.h>
Public Member Functions | |
| MachObjectWriter (MCMachObjectTargetWriter *MOTW, raw_pwrite_stream &OS, bool IsLittleEndian) | |
| const MCSymbol & | findAliasedSymbol (const MCSymbol &Sym) const |
| void | writeHeader (unsigned NumLoadCommands, unsigned LoadCommandsSize, bool SubsectionsViaSymbols) |
| void | writeSegmentLoadCommand (unsigned NumSections, uint64_t VMSize, uint64_t SectionDataStartOffset, uint64_t SectionDataSize) |
| Write a segment load command. More... | |
| void | writeSection (const MCAssembler &Asm, const MCAsmLayout &Layout, const MCSection &Sec, uint64_t FileOffset, 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 MCAsmLayout &Layout) |
| 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 | recordScatteredRelocation (const MCAssembler &Asm, const MCAsmLayout &Layout, const MCFragment *Fragment, const MCFixup &Fixup, MCValue Target, unsigned Log2Size, uint64_t &FixedValue) |
| void | recordTLVPRelocation (const MCAssembler &Asm, const MCAsmLayout &Layout, const MCFragment *Fragment, const MCFixup &Fixup, MCValue Target, uint64_t &FixedValue) |
| void | recordRelocation (MCAssembler &Asm, const MCAsmLayout &Layout, const MCFragment *Fragment, const MCFixup &Fixup, MCValue Target, bool &IsPCRel, uint64_t &FixedValue) override |
| Record a relocation entry. More... | |
| 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. More... | |
| void | computeSectionAddresses (const MCAssembler &Asm, const MCAsmLayout &Layout) |
| void | executePostLayoutBinding (MCAssembler &Asm, const MCAsmLayout &Layout) override |
| Perform any late binding of symbols (for example, to assign symbol indices for use when generating relocations). More... | |
| bool | isSymbolRefDifferenceFullyResolvedImpl (const MCAssembler &Asm, const MCSymbol &SymA, const MCFragment &FB, bool InSet, bool IsPCRel) const override |
| void | writeObject (MCAssembler &Asm, const MCAsmLayout &Layout) override |
| Write the object file. More... | |
Lifetime management Methods | |
| void | reset () override |
| lifetime management More... | |
Utility Methods | |
| bool | isFixupKindPCRel (const MCAssembler &Asm, unsigned Kind) |
| SectionAddrMap & | getSectionAddressMap () |
| uint64_t | getSectionAddress (const MCSection *Sec) const |
| uint64_t | getSymbolAddress (const MCSymbol &S, const MCAsmLayout &Layout) const |
| uint64_t | getFragmentAddress (const MCFragment *Fragment, const MCAsmLayout &Layout) const |
| uint64_t | getPaddingSize (const MCSection *SD, const MCAsmLayout &Layout) const |
| bool | doesSymbolRequireExternRelocation (const MCSymbol &S) |
Target Writer Proxy Accessors | |
| bool | is64Bit () const |
| bool | isX86_64 () const |
Public Member Functions inherited from llvm::MCObjectWriter | |
| virtual | ~MCObjectWriter () |
| bool | isLittleEndian () const |
| raw_ostream & | getStream () |
| 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. More... | |
| virtual bool | isWeak (const MCSymbol &Sym) const |
| True if this symbol (which is a variable) is weak. More... | |
| void | write8 (uint8_t Value) |
| void | writeLE16 (uint16_t Value) |
| void | writeLE32 (uint32_t Value) |
| void | writeLE64 (uint64_t Value) |
| void | writeBE16 (uint16_t Value) |
| void | writeBE32 (uint32_t Value) |
| void | writeBE64 (uint64_t Value) |
| void | write16 (uint16_t Value) |
| void | write32 (uint32_t Value) |
| void | write64 (uint64_t Value) |
| void | WriteZeros (unsigned N) |
| void | writeBytes (const SmallVectorImpl< char > &ByteVec, unsigned ZeroFillSize=0) |
| void | writeBytes (StringRef Str, unsigned ZeroFillSize=0) |
Additional Inherited Members | |
Protected Member Functions inherited from llvm::MCObjectWriter | |
| MCObjectWriter (raw_pwrite_stream &OS, bool IsLittleEndian) | |
Protected Attributes inherited from llvm::MCObjectWriter | |
| raw_pwrite_stream & | OS |
| unsigned | IsLittleEndian: 1 |
Definition at line 74 of file MCMachObjectWriter.h.
|
inline |
Definition at line 117 of file MCMachObjectWriter.h.
|
inline |
Definition at line 213 of file MCMachObjectWriter.h.
References P.
| void MachObjectWriter::bindIndirectSymbols | ( | MCAssembler & | Asm | ) |
Definition at line 444 of file MachObjectWriter.cpp.
References llvm::MCSymbol::getName(), llvm::MCSectionMachO::getType(), llvm::MCAssembler::indirect_symbol_begin(), llvm::MCAssembler::indirect_symbol_end(), llvm::MCAssembler::registerSymbol(), llvm::report_fatal_error(), llvm::MachO::S_LAZY_SYMBOL_POINTERS, llvm::MachO::S_NON_LAZY_SYMBOL_POINTERS, llvm::MachO::S_SYMBOL_STUBS, llvm::ARMBuildAttrs::Section, and llvm::ARMBuildAttrs::Symbol.
Referenced by executePostLayoutBinding().
| void MachObjectWriter::computeSectionAddresses | ( | const MCAssembler & | Asm, |
| const MCAsmLayout & | Layout | ||
| ) |
strictly be necessary.
Definition at line 607 of file MachObjectWriter.cpp.
References getPaddingSize(), llvm::MCAsmLayout::getSectionAddressSize(), llvm::MCAsmLayout::getSectionOrder(), and llvm::RoundUpToAlignment().
Referenced by executePostLayoutBinding().
| 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 506 of file MachObjectWriter.cpp.
References llvm::StringTableBuilder::add(), llvm::MCAssembler::begin(), llvm::MCAssembler::end(), llvm::StringTableBuilder::finalize(), llvm::StringTableBuilder::getOffset(), llvm::MCObjectWriter::IsLittleEndian, llvm::MCAssembler::isSymbolLinkerVisible(), llvm::DenseMapBase< DenseMap< KeyT, ValueT, KeyInfoT, BucketT >, KeyT, ValueT, KeyInfoT, BucketT >::lookup(), llvm::StringTableBuilder::MachO, llvm::ARMBuildAttrs::Section, llvm::ARMBuildAttrs::Symbol, and llvm::MCAssembler::symbols().
Referenced by writeObject().
Definition at line 41 of file MachObjectWriter.cpp.
References llvm::MCSymbol::isUndefined().
|
overridevirtual |
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.
Implements llvm::MCObjectWriter.
Definition at line 622 of file MachObjectWriter.cpp.
References bindIndirectSymbols(), and computeSectionAddresses().
Definition at line 310 of file MachObjectWriter.cpp.
References llvm::dyn_cast(), llvm::MCSymbol::getVariableValue(), and llvm::MCSymbol::isVariable().
Referenced by isSymbolRefDifferenceFullyResolvedImpl(), and writeNlist().
| uint64_t MachObjectWriter::getFragmentAddress | ( | const MCFragment * | Fragment, |
| const MCAsmLayout & | Layout | ||
| ) | const |
Definition at line 67 of file MachObjectWriter.cpp.
References llvm::MCAsmLayout::getFragmentOffset(), llvm::MCFragment::getParent(), and getSectionAddress().
| uint64_t MachObjectWriter::getPaddingSize | ( | const MCSection * | SD, |
| const MCAsmLayout & | Layout | ||
| ) | const |
Definition at line 107 of file MachObjectWriter.cpp.
References llvm::MCSection::getAlignment(), llvm::MCSection::getLayoutOrder(), getSectionAddress(), llvm::MCAsmLayout::getSectionAddressSize(), llvm::MCAsmLayout::getSectionOrder(), llvm::MCSection::isVirtualSection(), and llvm::OffsetToAlignment().
Referenced by computeSectionAddresses(), and writeObject().
Definition at line 137 of file MCMachObjectWriter.h.
References llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::lookup().
Referenced by getFragmentAddress(), getPaddingSize(), getSymbolAddress(), writeObject(), and writeSection().
|
inline |
Definition at line 135 of file MCMachObjectWriter.h.
| uint64_t MachObjectWriter::getSymbolAddress | ( | const MCSymbol & | S, |
| const MCAsmLayout & | Layout | ||
| ) | const |
Definition at line 73 of file MachObjectWriter.cpp.
References llvm::dwarf::syntax::Address, llvm::C, llvm::MCExpr::evaluateAsRelocatable(), llvm::MCValue::getConstant(), llvm::MCSymbol::getFragment(), llvm::MCSymbol::getName(), llvm::MCFragment::getParent(), getSectionAddress(), llvm::MCValue::getSymA(), llvm::MCValue::getSymB(), llvm::MCSymbolRefExpr::getSymbol(), llvm::MCAsmLayout::getSymbolOffset(), llvm::MCSymbol::getVariableValue(), llvm::MCSymbol::isUndefined(), llvm::MCSymbol::isVariable(), and llvm::report_fatal_error().
Referenced by writeNlist(), and writeObject().
|
inline |
Definition at line 154 of file MCMachObjectWriter.h.
Referenced by writeHeader(), writeLinkerOptionsLoadCommand(), writeNlist(), writeObject(), writeSection(), and writeSegmentLoadCommand().
| bool MachObjectWriter::isFixupKindPCRel | ( | const MCAssembler & | Asm, |
| unsigned | Kind | ||
| ) |
Definition at line 60 of file MachObjectWriter.cpp.
References llvm::MCFixupKindInfo::FKF_IsPCRel, llvm::MCFixupKindInfo::Flags, llvm::MCAssembler::getBackend(), and llvm::MCAsmBackend::getFixupKindInfo().
|
overridevirtual |
Reimplemented from llvm::MCObjectWriter.
Definition at line 630 of file MachObjectWriter.cpp.
References findAliasedSymbol(), llvm::MCFragment::getAtom(), llvm::MCSymbol::getFragment(), llvm::MCFragment::getParent(), llvm::MCSymbol::getSection(), llvm::MCAssembler::getSubsectionsViaSymbols(), llvm::MCSymbol::isInSection(), llvm::MCSymbol::isTemporary(), and isX86_64().
|
inline |
Definition at line 155 of file MCMachObjectWriter.h.
References llvm::MachO::CPU_TYPE_X86_64.
Referenced by isSymbolRefDifferenceFullyResolvedImpl().
|
overridevirtual |
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().
Implements llvm::MCObjectWriter.
Definition at line 435 of file MachObjectWriter.cpp.
| void llvm::MachObjectWriter::recordScatteredRelocation | ( | const MCAssembler & | Asm, |
| const MCAsmLayout & | Layout, | ||
| const MCFragment * | Fragment, | ||
| const MCFixup & | Fixup, | ||
| MCValue | Target, | ||
| unsigned | Log2Size, | ||
| uint64_t & | FixedValue | ||
| ) |
| void llvm::MachObjectWriter::recordTLVPRelocation | ( | const MCAssembler & | Asm, |
| const MCAsmLayout & | Layout, | ||
| const MCFragment * | Fragment, | ||
| const MCFixup & | Fixup, | ||
| MCValue | Target, | ||
| uint64_t & | FixedValue | ||
| ) |
|
overridevirtual |
lifetime management
Reimplemented from llvm::MCObjectWriter.
Definition at line 31 of file MachObjectWriter.cpp.
References llvm::StringTableBuilder::clear(), and llvm::MCObjectWriter::reset().
| void MachObjectWriter::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 | ||
| ) |
Definition at line 262 of file MachObjectWriter.cpp.
References llvm::MachO::LC_DYSYMTAB, llvm::MCObjectWriter::OS, llvm::raw_ostream::tell(), and llvm::MCObjectWriter::write32().
Referenced by writeObject().
| void MachObjectWriter::writeHeader | ( | unsigned | NumLoadCommands, |
| unsigned | LoadCommandsSize, | ||
| bool | SubsectionsViaSymbols | ||
| ) |
Definition at line 120 of file MachObjectWriter.cpp.
References is64Bit(), llvm::MachO::MH_MAGIC, llvm::MachO::MH_MAGIC_64, llvm::MachO::MH_OBJECT, llvm::MachO::MH_SUBSECTIONS_VIA_SYMBOLS, llvm::MCObjectWriter::OS, llvm::raw_ostream::tell(), and llvm::MCObjectWriter::write32().
Referenced by writeObject().
| void MachObjectWriter::writeLinkeditLoadCommand | ( | uint32_t | Type, |
| uint32_t | DataOffset, | ||
| uint32_t | DataSize | ||
| ) |
Definition at line 389 of file MachObjectWriter.cpp.
References llvm::MCObjectWriter::OS, llvm::raw_ostream::tell(), and llvm::MCObjectWriter::write32().
Referenced by writeObject().
| void MachObjectWriter::writeLinkerOptionsLoadCommand | ( | const std::vector< std::string > & | Options | ) |
Definition at line 412 of file MachObjectWriter.cpp.
References ComputeLinkerOptionsLoadCommandSize(), is64Bit(), llvm::MachO::LC_LINKER_OPTION, llvm::OffsetToAlignment(), llvm::MCObjectWriter::OS, llvm::raw_ostream::tell(), llvm::MCObjectWriter::write32(), and llvm::MCObjectWriter::writeBytes().
Referenced by writeObject().
| void MachObjectWriter::writeNlist | ( | MachSymbolData & | MSD, |
| const MCAsmLayout & | Layout | ||
| ) |
Definition at line 322 of file MachObjectWriter.cpp.
References llvm::dwarf::syntax::Address, llvm::Data, findAliasedSymbol(), llvm::MCSymbol::getCommonSize(), getSymbolAddress(), if(), is64Bit(), llvm::MCSymbol::isAbsolute(), llvm::MCSymbol::isCommon(), llvm::MCSymbol::isDefined(), llvm::MCSymbol::isExternal(), llvm::MCSymbol::isPrivateExtern(), llvm::MCSymbol::isUndefined(), 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::ARMBuildAttrs::Symbol, llvm::MCObjectWriter::write16(), llvm::MCObjectWriter::write32(), llvm::MCObjectWriter::write64(), and llvm::MCObjectWriter::write8().
Referenced by writeObject().
|
overridevirtual |
Write the object file.
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 697 of file MachObjectWriter.cpp.
References llvm::dwarf::syntax::Address, ComputeLinkerOptionsLoadCommandSize(), computeSymbolTable(), llvm::StringTableBuilder::data(), llvm::Data, llvm::dbgs(), DEBUG, llvm::DataRegionData::End, llvm::MCAsmLayout::getAssembler(), llvm::MCAssembler::getDataRegions(), llvm::MCLOHContainer::getEmitSize(), llvm::MCAssembler::getLinkerOptions(), llvm::MCAssembler::getLOHContainer(), llvm::MCSymbol::getName(), getPaddingSize(), getSectionAddress(), llvm::MCAsmLayout::getSectionAddressSize(), llvm::MCAsmLayout::getSectionFileSize(), getSymbolAddress(), llvm::MCSectionMachO::getType(), llvm::MCAssembler::getVersionMinInfo(), llvm::MachO::INDIRECT_SYMBOL_ABS, llvm::MachO::INDIRECT_SYMBOL_LOCAL, is64Bit(), llvm::DataRegionData::Kind, llvm::MCAssembler::VersionMinInfoType::Kind, llvm::MachO::LC_DATA_IN_CODE, llvm::MachO::LC_LINKER_OPTIMIZATION_HINT, llvm::MachO::LC_VERSION_MIN_IPHONEOS, llvm::MachO::LC_VERSION_MIN_MACOSX, llvm::MCAssembler::VersionMinInfoType::Major, llvm::make_range(), llvm::MCVM_OSXVersionMin, llvm::MCAssembler::VersionMinInfoType::Minor, llvm::OffsetToAlignment(), llvm::MCObjectWriter::OS, llvm::RoundUpToAlignment(), llvm::MachO::S_NON_LAZY_SYMBOL_POINTERS, llvm::ARMBuildAttrs::Section, llvm::StringRef::size(), llvm::MCAssembler::size(), llvm::DataRegionData::Start, llvm::raw_ostream::tell(), llvm::MCAssembler::VersionMinInfoType::Update, llvm::MCObjectWriter::write16(), llvm::MCObjectWriter::write32(), llvm::MCObjectWriter::writeBytes(), writeDysymtabLoadCommand(), writeHeader(), writeLinkeditLoadCommand(), writeLinkerOptionsLoadCommand(), writeNlist(), writeSection(), writeSegmentLoadCommand(), writeSymtabLoadCommand(), and llvm::MCObjectWriter::WriteZeros().
| void MachObjectWriter::writeSection | ( | const MCAssembler & | Asm, |
| const MCAsmLayout & | Layout, | ||
| const MCSection & | Sec, | ||
| uint64_t | FileOffset, | ||
| uint64_t | RelocationsStart, | ||
| unsigned | NumRelocations | ||
| ) |
Definition at line 194 of file MachObjectWriter.cpp.
References llvm::MCSection::getAlignment(), getSectionAddress(), llvm::MCAsmLayout::getSectionAddressSize(), llvm::MCAsmLayout::getSectionFileSize(), llvm::MCSectionMachO::getSectionName(), llvm::MCSectionMachO::getSegmentName(), llvm::MCSectionMachO::getStubSize(), llvm::MCSectionMachO::getTypeAndAttributes(), llvm::MCSection::hasInstructions(), is64Bit(), llvm::isPowerOf2_32(), llvm::MCSectionMachO::isVirtualSection(), llvm::Log2_32(), llvm::MCObjectWriter::OS, llvm::MachO::S_ATTR_SOME_INSTRUCTIONS, llvm::ARMBuildAttrs::Section, llvm::COFF::SectionSize, llvm::raw_ostream::tell(), llvm::MCObjectWriter::write32(), llvm::MCObjectWriter::write64(), and llvm::MCObjectWriter::writeBytes().
Referenced by writeObject().
| void MachObjectWriter::writeSegmentLoadCommand | ( | unsigned | NumSections, |
| uint64_t | VMSize, | ||
| uint64_t | SectionDataStartOffset, | ||
| uint64_t | SectionDataSize | ||
| ) |
Write a segment load command.
writeSegmentLoadCommand - Write a segment load command.
| NumSections | The number of sections in this segment. |
| SectionDataSize | The total size of the sections. |
Definition at line 154 of file MachObjectWriter.cpp.
References is64Bit(), llvm::MachO::LC_SEGMENT, llvm::MachO::LC_SEGMENT_64, llvm::MCObjectWriter::OS, llvm::raw_ostream::tell(), llvm::MachO::VM_PROT_EXECUTE, llvm::MachO::VM_PROT_READ, llvm::MachO::VM_PROT_WRITE, llvm::MCObjectWriter::write32(), llvm::MCObjectWriter::write64(), and llvm::MCObjectWriter::writeBytes().
Referenced by writeObject().
| void MachObjectWriter::writeSymtabLoadCommand | ( | uint32_t | SymbolOffset, |
| uint32_t | NumSymbols, | ||
| uint32_t | StringTableOffset, | ||
| uint32_t | StringTableSize | ||
| ) |
Definition at line 243 of file MachObjectWriter.cpp.
References llvm::MachO::LC_SYMTAB, llvm::MCObjectWriter::OS, llvm::raw_ostream::tell(), and llvm::MCObjectWriter::write32().
Referenced by writeObject().
1.8.6