|
LLVM
4.0.0
|
Defines the object file and target independent interfaces used by the assembler backend to write native file format object files. More...
#include <MCObjectWriter.h>
Public Member Functions | |
| virtual | ~MCObjectWriter () |
| virtual void | reset () |
| lifetime management More... | |
| bool | isLittleEndian () const |
| raw_pwrite_stream & | getStream () |
| void | setStream (raw_pwrite_stream &NewOS) |
High-Level API | |
| virtual void | executePostLayoutBinding (MCAssembler &Asm, const MCAsmLayout &Layout)=0 |
| Perform any late binding of symbols (for example, to assign symbol indices for use when generating relocations). More... | |
| virtual void | recordRelocation (MCAssembler &Asm, const MCAsmLayout &Layout, const MCFragment *Fragment, const MCFixup &Fixup, MCValue Target, bool &IsPCRel, uint64_t &FixedValue)=0 |
| Record a relocation entry. More... | |
| 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 | isSymbolRefDifferenceFullyResolvedImpl (const MCAssembler &Asm, const MCSymbol &A, const MCSymbol &B, bool InSet) const |
| virtual bool | isSymbolRefDifferenceFullyResolvedImpl (const MCAssembler &Asm, const MCSymbol &SymA, const MCFragment &FB, bool InSet, bool IsPCRel) const |
| virtual bool | isWeak (const MCSymbol &Sym) const |
| True if this symbol (which is a variable) is weak. More... | |
| virtual void | writeObject (MCAssembler &Asm, const MCAsmLayout &Layout)=0 |
| Write the object file. More... | |
Binary Output | |
| 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) |
Protected Member Functions | |
| MCObjectWriter (raw_pwrite_stream &OS, bool IsLittleEndian) | |
| unsigned | getInitialOffset () |
Protected Attributes | |
| unsigned | IsLittleEndian: 1 |
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().
The object writer also contains a number of helper methods for writing binary data to the output stream.
Definition at line 40 of file MCObjectWriter.h.
|
inlineprotected |
Definition at line 50 of file MCObjectWriter.h.
|
virtual |
Definition at line 17 of file MCObjectWriter.cpp.
|
pure virtual |
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.
Implemented in llvm::MachObjectWriter.
Referenced by llvm::MCAssembler::layout().
|
inlineprotected |
Definition at line 53 of file MCObjectWriter.h.
References llvm::raw_ostream::tell().
|
inline |
Definition at line 65 of file MCObjectWriter.h.
Referenced by llvm::MCLOHDirective::emit(), llvm::MCAssembler::Finish(), llvm::MachObjectWriter::writeDysymtabLoadCommand(), writeFragment(), llvm::MachObjectWriter::writeHeader(), llvm::MachObjectWriter::writeLinkeditLoadCommand(), llvm::MachObjectWriter::writeLinkerOptionsLoadCommand(), llvm::MachObjectWriter::writeObject(), llvm::MachObjectWriter::writeSection(), llvm::MCAssembler::writeSectionData(), llvm::MachObjectWriter::writeSegmentLoadCommand(), and llvm::MachObjectWriter::writeSymtabLoadCommand().
|
inline |
Definition at line 63 of file MCObjectWriter.h.
References IsLittleEndian.
| bool MCObjectWriter::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.
Clients are not required to answer precisely and may conservatively return false, even when a difference is fully resolved.
Definition at line 20 of file MCObjectWriter.cpp.
References llvm::MCSymbol::getFragment(), llvm::MCSymbolRefExpr::getKind(), llvm::MCSymbolRefExpr::getSymbol(), isSymbolRefDifferenceFullyResolvedImpl(), llvm::MCSymbol::isUndefined(), SB, and llvm::MCSymbolRefExpr::VK_None.
|
virtual |
Reimplemented in llvm::MachObjectWriter.
Definition at line 39 of file MCObjectWriter.cpp.
References llvm::MCSymbol::getFragment().
Referenced by isSymbolRefDifferenceFullyResolved(), and llvm::MachObjectWriter::isSymbolRefDifferenceFullyResolvedImpl().
|
virtual |
Reimplemented in llvm::MachObjectWriter.
Definition at line 46 of file MCObjectWriter.cpp.
References llvm::MCFragment::getParent(), and llvm::MCSymbol::getSection().
True if this symbol (which is a variable) is weak.
This is not just STB_WEAK, but more generally whether or not we can evaluate past it.
Definition at line 55 of file MCObjectWriter.cpp.
|
pure virtual |
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().
Implemented in llvm::MachObjectWriter.
|
inlinevirtual |
lifetime management
Reimplemented in llvm::MachObjectWriter.
Definition at line 61 of file MCObjectWriter.h.
Referenced by llvm::MachObjectWriter::reset(), and llvm::MCAssembler::reset().
|
inline |
Definition at line 66 of file MCObjectWriter.h.
|
inline |
Definition at line 153 of file MCObjectWriter.h.
References IsLittleEndian, writeBE16(), and writeLE16().
Referenced by writeFragment(), llvm::MachObjectWriter::writeNlist(), llvm::ARMAsmBackend::writeNopData(), and llvm::MachObjectWriter::writeObject().
|
inline |
Definition at line 160 of file MCObjectWriter.h.
References IsLittleEndian, writeBE32(), and writeLE32().
Referenced by llvm::MachObjectWriter::writeDysymtabLoadCommand(), writeFragment(), llvm::MachObjectWriter::writeHeader(), llvm::MachObjectWriter::writeLinkeditLoadCommand(), llvm::MachObjectWriter::writeLinkerOptionsLoadCommand(), llvm::MachObjectWriter::writeNlist(), llvm::ARMAsmBackend::writeNopData(), llvm::MachObjectWriter::writeObject(), llvm::MachObjectWriter::writeSection(), llvm::MachObjectWriter::writeSegmentLoadCommand(), and llvm::MachObjectWriter::writeSymtabLoadCommand().
|
inline |
Definition at line 167 of file MCObjectWriter.h.
References IsLittleEndian, writeBE64(), and writeLE64().
Referenced by writeFragment(), llvm::MachObjectWriter::writeNlist(), llvm::MachObjectWriter::writeSection(), and llvm::MachObjectWriter::writeSegmentLoadCommand().
|
inline |
Definition at line 127 of file MCObjectWriter.h.
Referenced by writeFragment(), llvm::MachObjectWriter::writeNlist(), and llvm::ARMAsmBackend::writeNopData().
|
inline |
Definition at line 141 of file MCObjectWriter.h.
References llvm::support::endian::Writer< endian >::write().
Referenced by write16().
|
inline |
Definition at line 145 of file MCObjectWriter.h.
References llvm::support::endian::Writer< endian >::write().
Referenced by write32().
|
inline |
Definition at line 149 of file MCObjectWriter.h.
References llvm::support::endian::Writer< endian >::write().
Referenced by write64().
|
inline |
Definition at line 183 of file MCObjectWriter.h.
References llvm::SmallVectorTemplateCommon< T, typename >::data(), and llvm::SmallVectorTemplateCommon< T, typename >::size().
Referenced by writeFragment(), llvm::MachObjectWriter::writeLinkerOptionsLoadCommand(), llvm::MachObjectWriter::writeObject(), llvm::MachObjectWriter::writeSection(), and llvm::MachObjectWriter::writeSegmentLoadCommand().
Definition at line 188 of file MCObjectWriter.h.
References assert(), llvm::StringRef::size(), and WriteZeros().
|
inline |
Definition at line 129 of file MCObjectWriter.h.
References llvm::support::endian::Writer< endian >::write().
Referenced by write16().
|
inline |
Definition at line 133 of file MCObjectWriter.h.
References llvm::support::endian::Writer< endian >::write().
Referenced by write32().
|
inline |
Definition at line 137 of file MCObjectWriter.h.
References llvm::support::endian::Writer< endian >::write().
Referenced by write64().
|
pure virtual |
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.
Implemented in llvm::MachObjectWriter.
Referenced by llvm::MCAssembler::Finish().
|
inline |
Definition at line 174 of file MCObjectWriter.h.
References i.
Referenced by writeBytes(), llvm::AVRAsmBackend::writeNopData(), llvm::MipsAsmBackend::writeNopData(), and llvm::MachObjectWriter::writeObject().
|
protected |
Definition at line 47 of file MCObjectWriter.h.
Referenced by llvm::MachObjectWriter::computeSymbolTable(), isLittleEndian(), write16(), write32(), and write64().
1.8.6