|
LLVM 24.0.0git
|
#include "llvm/MC/MCMachObjectWriter.h"
Classes | |
| struct | DataRegionData |
Public Types | |
| using | VersionInfoType |
Public Attributes | |
| support::endian::Writer | W |
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.
Definition at line 98 of file MCMachObjectWriter.h.
|
inline |
Definition at line 179 of file MCMachObjectWriter.h.
References llvm::big, is64Bit(), llvm::little, llvm::move(), and W.
|
inline |
Definition at line 324 of file MCMachObjectWriter.h.
References P.
Referenced by emitRelocation(), and populateAddrSigSection().
| void MachObjectWriter::bindIndirectSymbols | ( | MCAssembler & | Asm | ) |
Definition at line 521 of file MachObjectWriter.cpp.
References llvm::MCObjectWriter::Asm, llvm::enumerate(), llvm::report_fatal_error(), llvm::MachO::S_LAZY_SYMBOL_POINTERS, llvm::MachO::S_NON_LAZY_SYMBOL_POINTERS, llvm::MachO::S_SYMBOL_STUBS, and llvm::MachO::S_THREAD_LOCAL_VARIABLE_POINTERS.
Referenced by executePostLayoutBinding().
| void MachObjectWriter::computeSectionAddresses | ( | const MCAssembler & | Asm | ) |
strictly be necessary.
Definition at line 687 of file MachObjectWriter.cpp.
References llvm::alignTo(), llvm::MCObjectWriter::Asm, and getPaddingSize().
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 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().
Definition at line 68 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.
Reimplemented from llvm::MCObjectWriter.
Definition at line 717 of file MachObjectWriter.cpp.
References llvm::MCObjectWriter::Asm, bindIndirectSymbols(), and computeSectionAddresses().
Definition at line 373 of file MachObjectWriter.cpp.
References llvm::dyn_cast(), llvm::MCSymbol::getVariableValue(), llvm::MCSymbol::isVariable(), and llvm::Ref.
Referenced by isSymbolRefDifferenceFullyResolvedImpl(), and writeNlist().
Definition at line 151 of file MachObjectWriter.cpp.
References llvm::MCFragment::getAtom(), llvm::MCSymbol::getFragment(), llvm::MCFragment::getParent(), llvm::MCSymbol::isInSection(), llvm::MCAsmInfoDarwin::isSectionAtomizableBySymbols(), and isSymbolLinkerVisible().
|
inline |
Definition at line 200 of file MCMachObjectWriter.h.
| uint64_t MachObjectWriter::getFragmentAddress | ( | const MCAssembler & | Asm, |
| const MCFragment * | Fragment ) const |
Definition at line 88 of file MachObjectWriter.cpp.
References llvm::MCObjectWriter::Asm, and getSectionAddress().
|
inline |
Definition at line 197 of file MCMachObjectWriter.h.
|
inline |
Definition at line 254 of file MCMachObjectWriter.h.
|
inline |
Definition at line 204 of file MCMachObjectWriter.h.
| uint64_t MachObjectWriter::getPaddingSize | ( | const MCAssembler & | Asm, |
| const MCSection * | SD ) const |
Definition at line 126 of file MachObjectWriter.cpp.
References llvm::MCObjectWriter::Asm, llvm::MCSection::getAlign(), getSectionAddress(), llvm::MCSection::isBssSection(), llvm::Next, and llvm::offsetToAlignment().
Referenced by computeSectionAddresses(), and writeObject().
Definition at line 206 of file MCMachObjectWriter.h.
Referenced by getFragmentAddress(), getPaddingSize(), getSymbolAddress(), and writeObject().
|
inline |
Definition at line 201 of file MCMachObjectWriter.h.
Definition at line 94 of file MachObjectWriter.cpp.
References llvm::Address, llvm::MCObjectWriter::Asm, 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().
|
inline |
Definition at line 263 of file MCMachObjectWriter.h.
Referenced by MachObjectWriter(), populateAddrSigSection(), writeHeader(), writeLinkerOptionsLoadCommand(), writeNlist(), writeObject(), writeSection(), and writeSegmentLoadCommand().
|
overridevirtual |
Reimplemented from llvm::MCObjectWriter.
Definition at line 724 of file MachObjectWriter.cpp.
References findAliasedSymbol(), llvm::MCFragment::getAtom(), llvm::MCSymbol::getFragment(), llvm::MCFragment::getParent(), llvm::MCSymbol::getSection(), llvm::MCSymbol::isInSection(), llvm::MCSymbol::isTemporary(), isX86_64(), and llvm::MCObjectWriter::SubsectionsViaSymbols.
|
inline |
Definition at line 264 of file MCMachObjectWriter.h.
References llvm::MachO::CPU_TYPE_X86_64.
Referenced by isSymbolRefDifferenceFullyResolvedImpl().
| void MachObjectWriter::populateAddrSigSection | ( | MCAssembler & | Asm | ) |
Definition at line 781 of file MachObjectWriter.cpp.
References addRelocation(), llvm::MCObjectWriter::Asm, llvm::MachO::GENERIC_RELOC_VANILLA, llvm::MCObjectFileInfo::getAddrSigSection(), llvm::MCObjectWriter::getAddrsigSyms(), llvm::MCObjectWriter::getContext(), llvm::MCContext::getObjectFileInfo(), is64Bit(), llvm::MachO::any_relocation_info::r_word0, and llvm::MachO::any_relocation_info::r_word1.
Referenced by writeObject().
|
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().
Reimplemented from llvm::MCObjectWriter.
Definition at line 508 of file MachObjectWriter.cpp.
References llvm::MCObjectWriter::Asm, F, Fixup, llvm::MCObjectWriter::getContext(), isFixupTargetValid(), and llvm::MCContext::reportError().
|
overridevirtual |
lifetime management
Reimplemented from llvm::MCObjectWriter.
Definition at line 43 of file MachObjectWriter.cpp.
References llvm::MCObjectWriter::reset().
|
overridevirtual |
Reimplemented from llvm::MCObjectWriter.
Definition at line 63 of file MachObjectWriter.cpp.
References llvm::MCObjectWriter::Asm, and llvm::MCObjectWriter::setAssembler().
|
inline |
Definition at line 231 of file MCMachObjectWriter.h.
|
inline |
Definition at line 252 of file MCMachObjectWriter.h.
|
inline |
Definition at line 241 of file MCMachObjectWriter.h.
|
inline |
Mach-O deployment target version information.
Definition at line 221 of file MCMachObjectWriter.h.
| 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 325 of file MachObjectWriter.cpp.
Referenced by writeObject().
| void MachObjectWriter::writeHeader | ( | MachO::HeaderFileType | Type, |
| unsigned | NumLoadCommands, | ||
| unsigned | LoadCommandsSize, | ||
| bool | SubsectionsViaSymbols ) |
Definition at line 170 of file MachObjectWriter.cpp.
References assert(), llvm::MachO::CPU_SUBTYPE_ARM64E, llvm::MachO::CPU_SUBTYPE_ARM64E_WITH_PTRAUTH_VERSION(), llvm::MachO::CPU_TYPE_ARM64, is64Bit(), llvm::MachO::MH_MAGIC, llvm::MachO::MH_MAGIC_64, llvm::MachO::MH_SUBSECTIONS_VIA_SYMBOLS, llvm::MCObjectWriter::SubsectionsViaSymbols, and W.
Referenced by writeObject().
| void MachObjectWriter::writeLinkeditLoadCommand | ( | uint32_t | Type, |
| uint32_t | DataOffset, | ||
| uint32_t | DataSize ) |
Definition at line 453 of file MachObjectWriter.cpp.
Referenced by writeObject().
| void MachObjectWriter::writeLinkerOptionsLoadCommand | ( | const std::vector< std::string > & | Options | ) |
Definition at line 476 of file MachObjectWriter.cpp.
References assert(), ComputeLinkerOptionsLoadCommandSize(), is64Bit(), llvm::offsetToAlignment(), Options, Size, and W.
Referenced by writeObject().
| 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().
|
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().
| void MachObjectWriter::writeSection | ( | const MCAssembler & | Asm, |
| const MCSectionMachO & | Sec, | ||
| uint64_t | VMAddr, | ||
| uint64_t | FileOffset, | ||
| unsigned | Flags, | ||
| uint64_t | RelocationsStart, | ||
| unsigned | NumRelocations ) |
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().
| void MachObjectWriter::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.
writeSegmentLoadCommand - Write a segment load command.
| 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().
| void MachObjectWriter::writeSymtabLoadCommand | ( | uint32_t | SymbolOffset, |
| uint32_t | NumSymbols, | ||
| uint32_t | StringTableOffset, | ||
| uint32_t | StringTableSize ) |
Definition at line 306 of file MachObjectWriter.cpp.
Referenced by writeObject().
| support::endian::Writer llvm::MachObjectWriter::W |
Definition at line 187 of file MCMachObjectWriter.h.
Referenced by computeSymbolTable(), llvm::MCLOHDirective::emit(), MachObjectWriter(), writeDysymtabLoadCommand(), writeHeader(), writeLinkeditLoadCommand(), writeLinkerOptionsLoadCommand(), writeNlist(), writeObject(), writeSection(), writeSegmentLoadCommand(), and writeSymtabLoadCommand().