ObjectFile.h revision 88af6b9217f9ff8b4592f38ac5175de697275f49
168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer//===- ObjectFile.h - File format independent object file -------*- C++ -*-===// 268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer// 368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer// The LLVM Compiler Infrastructure 468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer// 568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer// This file is distributed under the University of Illinois Open Source 668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer// License. See LICENSE.TXT for details. 768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer// 868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer//===----------------------------------------------------------------------===// 968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer// 1068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer// This file declares a file format independent ObjectFile class. 1168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer// 1268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer//===----------------------------------------------------------------------===// 1368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 1468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer#ifndef LLVM_OBJECT_OBJECT_FILE_H 1568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer#define LLVM_OBJECT_OBJECT_FILE_H 1668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 1788af6b9217f9ff8b4592f38ac5175de697275f49Michael J. Spencer#include "llvm/ADT/StringRef.h" 1888af6b9217f9ff8b4592f38ac5175de697275f49Michael J. Spencer#include "llvm/System/DataTypes.h" 1968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 2068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencernamespace llvm { 2168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 2268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerclass MemoryBuffer; 2388af6b9217f9ff8b4592f38ac5175de697275f49Michael J. Spencerclass StringRef; 2468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 2568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencernamespace object { 2668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 2768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerclass ObjectFile; 2868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencertypedef uint64_t DataRefImpl; 2968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 3068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer/// SymbolRef - This is a value type class that represents a single symbol in 3168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer/// the list of symbols in the object file. 3268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerclass SymbolRef { 3368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer DataRefImpl SymbolPimpl; 3468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer const ObjectFile *OwningObject; 3568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 3668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerpublic: 3768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer SymbolRef(DataRefImpl SymbolP, const ObjectFile *Owner); 3868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 3968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer bool operator==(const SymbolRef &Other) const; 4068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 4168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer SymbolRef getNext() const; 4268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 4368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer StringRef getName() const; 4468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer uint64_t getAddress() const; 4568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer uint64_t getSize() const; 4668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 4768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer /// Returns the ascii char that should be displayed in a symbol table dump via 4868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer /// nm for this symbol. 4968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer char getNMTypeChar() const; 5068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 5168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer /// Returns true for symbols that are internal to the object file format such 5268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer /// as section symbols. 5368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer bool isInternal() const; 5468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer}; 5568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 5668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer/// SectionRef - This is a value type class that represents a single section in 5768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer/// the list of sections in the object file. 5868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerclass SectionRef { 5968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer DataRefImpl SectionPimpl; 6068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer const ObjectFile *OwningObject; 6168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 6268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerpublic: 6368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer SectionRef(DataRefImpl SectionP, const ObjectFile *Owner); 6468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 6568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer bool operator==(const SectionRef &Other) const; 6668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 6768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer SectionRef getNext() const; 6868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 6968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer StringRef getName() const; 7068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer uint64_t getAddress() const; 7168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer uint64_t getSize() const; 7268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer StringRef getContents() const; 7368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 7468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer // FIXME: Move to the normalization layer when it's created. 7568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer bool isText() const; 7668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer}; 7768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 7868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerconst uint64_t UnknownAddressOrSize = ~0ULL; 7968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 8068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer/// ObjectFile - This class is the base class for all object file types. 8168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer/// Concrete instances of this object are created by createObjectFile, which 8268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer/// figure out which type to create. 8368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerclass ObjectFile { 8468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerprivate: 8568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer ObjectFile(); // = delete 8668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer ObjectFile(const ObjectFile &other); // = delete 8768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 8868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerprotected: 8968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer MemoryBuffer *MapFile; 9068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer const uint8_t *base; 9168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 9268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer ObjectFile(MemoryBuffer *Object); 9368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 9468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer // These functions are for SymbolRef to call internally. The main goal of 9568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer // this is to allow SymbolRef::SymbolPimpl to point directly to the symbol 9668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer // entry in the memory mapped object file. SymbolPimpl cannot contain any 9768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer // virtual functions because then it could not point into the memory mapped 9868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer // file. 9968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer friend class SymbolRef; 10068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual SymbolRef getSymbolNext(DataRefImpl Symb) const = 0; 10168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual StringRef getSymbolName(DataRefImpl Symb) const = 0; 10268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual uint64_t getSymbolAddress(DataRefImpl Symb) const = 0; 10368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual uint64_t getSymbolSize(DataRefImpl Symb) const = 0; 10468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual char getSymbolNMTypeChar(DataRefImpl Symb) const = 0; 10568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual bool isSymbolInternal(DataRefImpl Symb) const = 0; 10668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 10768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer // Same as above for SectionRef. 10868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer friend class SectionRef; 10968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual SectionRef getSectionNext(DataRefImpl Sec) const = 0; 11068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual StringRef getSectionName(DataRefImpl Sec) const = 0; 11168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual uint64_t getSectionAddress(DataRefImpl Sec) const = 0; 11268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual uint64_t getSectionSize(DataRefImpl Sec) const = 0; 11368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual StringRef getSectionContents(DataRefImpl Sec) const = 0; 11468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual bool isSectionText(DataRefImpl Sec) const = 0; 11568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 11668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 11768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerpublic: 11868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer template<class content_type> 11968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer class content_iterator { 12068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer content_type Current; 12168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer public: 12268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer content_iterator(content_type symb) 12368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer : Current(symb) {} 12468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 12568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer const content_type* operator->() const { 12668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer return &Current; 12768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer } 12868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 12968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer bool operator==(const content_iterator &other) const { 13068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer return Current == other.Current; 13168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer } 13268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 13368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer bool operator!=(const content_iterator &other) const { 13468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer return !(*this == other); 13568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer } 13668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 13768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer content_iterator& operator++() { // Preincrement 13868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer Current = Current.getNext(); 13968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer return *this; 14068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer } 14168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer }; 14268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 14368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer typedef content_iterator<SymbolRef> symbol_iterator; 14468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer typedef content_iterator<SectionRef> section_iterator; 14568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 14668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual ~ObjectFile(); 14768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 14868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual symbol_iterator begin_symbols() const = 0; 14968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual symbol_iterator end_symbols() const = 0; 15068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 15168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual section_iterator begin_sections() const = 0; 15268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual section_iterator end_sections() const = 0; 15368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 15468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer /// @brief The number of bytes used to represent an address in this object 15568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer /// file format. 15668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual uint8_t getBytesInAddress() const = 0; 15768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 15868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual StringRef getFileFormatName() const = 0; 15988af6b9217f9ff8b4592f38ac5175de697275f49Michael J. Spencer virtual /* Triple::ArchType */ unsigned getArch() const = 0; 16068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 16168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer StringRef getFilename() const; 16268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 16368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer /// @returns Pointer to ObjectFile subclass to handle this type of object. 16468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer /// @param ObjectPath The path to the object file. ObjectPath.isObject must 16568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer /// return true. 16668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer /// @brief Create ObjectFile from path. 16788af6b9217f9ff8b4592f38ac5175de697275f49Michael J. Spencer static ObjectFile *createObjectFile(StringRef ObjectPath); 16868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer static ObjectFile *createObjectFile(MemoryBuffer *Object); 16968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 17068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerprivate: 17168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer static ObjectFile *createCOFFObjectFile(MemoryBuffer *Object); 17268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer static ObjectFile *createELFObjectFile(MemoryBuffer *Object); 17368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer static ObjectFile *createMachOObjectFile(MemoryBuffer *Object); 17468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer static ObjectFile *createArchiveObjectFile(MemoryBuffer *Object); 17568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer static ObjectFile *createLibObjectFile(MemoryBuffer *Object); 17668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer}; 17768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 17868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer// Inline function definitions. 17968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerinline SymbolRef::SymbolRef(DataRefImpl SymbolP, const ObjectFile *Owner) 18068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer : SymbolPimpl(SymbolP) 18168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer , OwningObject(Owner) {} 18268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 18368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerinline bool SymbolRef::operator==(const SymbolRef &Other) const { 18468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer return SymbolPimpl == Other.SymbolPimpl; 18568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 18668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 18768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerinline SymbolRef SymbolRef::getNext() const { 18868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer return OwningObject->getSymbolNext(SymbolPimpl); 18968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 19068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 19168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerinline StringRef SymbolRef::getName() const { 19268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer return OwningObject->getSymbolName(SymbolPimpl); 19368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 19468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 19568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerinline uint64_t SymbolRef::getAddress() const { 19668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer return OwningObject->getSymbolAddress(SymbolPimpl); 19768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 19868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 19968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerinline uint64_t SymbolRef::getSize() const { 20068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer return OwningObject->getSymbolSize(SymbolPimpl); 20168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 20268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 20368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerinline char SymbolRef::getNMTypeChar() const { 20468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer return OwningObject->getSymbolNMTypeChar(SymbolPimpl); 20568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 20668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 20768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerinline bool SymbolRef::isInternal() const { 20868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer return OwningObject->isSymbolInternal(SymbolPimpl); 20968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 21068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 21168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 21268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer/// SectionRef 21368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerinline SectionRef::SectionRef(DataRefImpl SectionP, 21468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer const ObjectFile *Owner) 21568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer : SectionPimpl(SectionP) 21668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer , OwningObject(Owner) {} 21768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 21868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerinline bool SectionRef::operator==(const SectionRef &Other) const { 21968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer return SectionPimpl == Other.SectionPimpl; 22068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 22168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 22268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerinline SectionRef SectionRef::getNext() const { 22368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer return OwningObject->getSectionNext(SectionPimpl); 22468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 22568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 22668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerinline StringRef SectionRef::getName() const { 22768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer return OwningObject->getSectionName(SectionPimpl); 22868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 22968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 23068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerinline uint64_t SectionRef::getAddress() const { 23168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer return OwningObject->getSectionAddress(SectionPimpl); 23268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 23368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 23468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerinline uint64_t SectionRef::getSize() const { 23568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer return OwningObject->getSectionSize(SectionPimpl); 23668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 23768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 23868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerinline StringRef SectionRef::getContents() const { 23968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer return OwningObject->getSectionContents(SectionPimpl); 24068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 24168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 24268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerinline bool SectionRef::isText() const { 24368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer return OwningObject->isSectionText(SectionPimpl); 24468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 24568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 24668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} // end namespace object 24768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} // end namespace llvm 24868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 24968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer#endif 250