ObjectFile.h revision 59a0e79631ed851d98cf9c2ba6fa5f9aafdfdc93
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 14674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#ifndef LLVM_OBJECT_OBJECTFILE_H 15674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#define LLVM_OBJECT_OBJECTFILE_H 1668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 1788af6b9217f9ff8b4592f38ac5175de697275f49Michael J. Spencer#include "llvm/ADT/StringRef.h" 18255f89faee13dc491cb64fbeae3c763e7e2ea4e6Chandler Carruth#include "llvm/Object/Binary.h" 191f6efa3996dd1929fbc129203ce5009b620e6969Michael J. Spencer#include "llvm/Support/DataTypes.h" 2025b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer#include "llvm/Support/ErrorHandling.h" 21001c9205fca2220480589ec355cb6ec701a37e08Michael J. Spencer#include "llvm/Support/MemoryBuffer.h" 227acdb4d237181976b04e72f6a6c329c3b2604440Michael J. Spencer#include <cstring> 2324973c1063bfb7ac353732a4e8eb801830336c5fEli Bendersky#include <vector> 2468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 2568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencernamespace llvm { 2668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencernamespace object { 2768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 2868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerclass ObjectFile; 297acdb4d237181976b04e72f6a6c329c3b2604440Michael J. Spencer 307acdb4d237181976b04e72f6a6c329c3b2604440Michael J. Spencerunion DataRefImpl { 317acdb4d237181976b04e72f6a6c329c3b2604440Michael J. Spencer struct { 324344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer // ELF needs this for relocations. This entire union should probably be a 334344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer // char[max(8, sizeof(uintptr_t))] and require the impl to cast. 344344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer uint16_t a, b; 354344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer uint32_t c; 364344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer } w; 374344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer struct { 387acdb4d237181976b04e72f6a6c329c3b2604440Michael J. Spencer uint32_t a, b; 397acdb4d237181976b04e72f6a6c329c3b2604440Michael J. Spencer } d; 4025b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer uintptr_t p; 413fd9b8422328a60664a5c631ec9519b58017fcbcDanil Malyshev DataRefImpl() { 423fd9b8422328a60664a5c631ec9519b58017fcbcDanil Malyshev std::memset(this, 0, sizeof(DataRefImpl)); 433fd9b8422328a60664a5c631ec9519b58017fcbcDanil Malyshev } 447acdb4d237181976b04e72f6a6c329c3b2604440Michael J. Spencer}; 457acdb4d237181976b04e72f6a6c329c3b2604440Michael J. Spencer 464344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencertemplate<class content_type> 474344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencerclass content_iterator { 484344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer content_type Current; 494344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencerpublic: 504344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer content_iterator(content_type symb) 514344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer : Current(symb) {} 524344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer 534344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer const content_type* operator->() const { 544344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer return &Current; 554344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer } 564344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer 574344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer const content_type &operator*() const { 584344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer return Current; 594344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer } 604344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer 614344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer bool operator==(const content_iterator &other) const { 624344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer return Current == other.Current; 634344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer } 644344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer 654344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer bool operator!=(const content_iterator &other) const { 664344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer return !(*this == other); 674344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer } 684344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer 694344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer content_iterator& increment(error_code &err) { 704344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer content_type next; 714344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer if (error_code ec = Current.getNext(next)) 724344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer err = ec; 734344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer else 744344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer Current = next; 754344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer return *this; 764344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer } 774344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer}; 784344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer 795b957e6fd9853f938b8b33cfeb03d80595a9c2f8Eric Christopherinline bool operator==(const DataRefImpl &a, const DataRefImpl &b) { 807acdb4d237181976b04e72f6a6c329c3b2604440Michael J. Spencer // Check bitwise identical. This is the only legal way to compare a union w/o 817acdb4d237181976b04e72f6a6c329c3b2604440Michael J. Spencer // knowing which member is in use. 827acdb4d237181976b04e72f6a6c329c3b2604440Michael J. Spencer return std::memcmp(&a, &b, sizeof(DataRefImpl)) == 0; 837acdb4d237181976b04e72f6a6c329c3b2604440Michael J. Spencer} 8468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 855b957e6fd9853f938b8b33cfeb03d80595a9c2f8Eric Christopherinline bool operator<(const DataRefImpl &a, const DataRefImpl &b) { 863314c26475b5561abbfe0785e0a64d189d5b4060Michael J. Spencer // Check bitwise identical. This is the only legal way to compare a union w/o 873314c26475b5561abbfe0785e0a64d189d5b4060Michael J. Spencer // knowing which member is in use. 883314c26475b5561abbfe0785e0a64d189d5b4060Michael J. Spencer return std::memcmp(&a, &b, sizeof(DataRefImpl)) < 0; 893314c26475b5561abbfe0785e0a64d189d5b4060Michael J. Spencer} 903314c26475b5561abbfe0785e0a64d189d5b4060Michael J. Spencer 919b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencerclass SymbolRef; 9268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 930fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer/// RelocationRef - This is a value type class that represents a single 940fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer/// relocation in the list of relocations in the object file. 950fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramerclass RelocationRef { 960fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer DataRefImpl RelocationPimpl; 970fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer const ObjectFile *OwningObject; 980fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer 990fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramerpublic: 1003fd9b8422328a60664a5c631ec9519b58017fcbcDanil Malyshev RelocationRef() : OwningObject(NULL) { } 1010fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer 1020fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer RelocationRef(DataRefImpl RelocationP, const ObjectFile *Owner); 1030fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer 1040fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer bool operator==(const RelocationRef &Other) const; 1050fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer 1060fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer error_code getNext(RelocationRef &Result) const; 1070fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer 1080fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer error_code getAddress(uint64_t &Result) const; 109b0436a73054fe676b216a0cf872d1fc433125c62Danil Malyshev error_code getOffset(uint64_t &Result) const; 1100fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer error_code getSymbol(SymbolRef &Result) const; 1119472b8d220fc746498429f430cb4c4dbfbd38f2aOwen Anderson error_code getType(uint64_t &Result) const; 1124344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer 1130685e94895f26f96aa1032696e3150dd00aad1f3Owen Anderson /// @brief Indicates whether this relocation should hidden when listing 1140685e94895f26f96aa1032696e3150dd00aad1f3Owen Anderson /// relocations, usually because it is the trailing part of a multipart 1150685e94895f26f96aa1032696e3150dd00aad1f3Owen Anderson /// relocation that will be printed as part of the leading relocation. 1160685e94895f26f96aa1032696e3150dd00aad1f3Owen Anderson error_code getHidden(bool &Result) const; 1170685e94895f26f96aa1032696e3150dd00aad1f3Owen Anderson 1184344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer /// @brief Get a string that represents the type of this relocation. 1194344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer /// 1204344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer /// This is for display purposes only. 1214344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer error_code getTypeName(SmallVectorImpl<char> &Result) const; 1220fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer error_code getAdditionalInfo(int64_t &Result) const; 1234344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer 1244344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer /// @brief Get a string that represents the calculation of the value of this 1254344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer /// relocation. 1264344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer /// 1274344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer /// This is for display purposes only. 1284344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer error_code getValueString(SmallVectorImpl<char> &Result) const; 1299ac0f1d7255d7941c331b0a62a830a3b033358fdMarshall Clow 1309ac0f1d7255d7941c331b0a62a830a3b033358fdMarshall Clow DataRefImpl getRawDataRefImpl() const; 1310fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer}; 1324344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencertypedef content_iterator<RelocationRef> relocation_iterator; 1330fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer 13468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer/// SectionRef - This is a value type class that represents a single section in 13568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer/// the list of sections in the object file. 13668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerclass SectionRef { 13707ea23aa2d17f701fa125442c20c1eba75b55fdbBenjamin Kramer friend class SymbolRef; 13868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer DataRefImpl SectionPimpl; 13968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer const ObjectFile *OwningObject; 14068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 14168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerpublic: 1423fd9b8422328a60664a5c631ec9519b58017fcbcDanil Malyshev SectionRef() : OwningObject(NULL) { } 143dedd6ee135f886e219035b2cf5957ce492f90ed1Michael J. Spencer 14468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer SectionRef(DataRefImpl SectionP, const ObjectFile *Owner); 14568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 14668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer bool operator==(const SectionRef &Other) const; 1475b957e6fd9853f938b8b33cfeb03d80595a9c2f8Eric Christopher bool operator<(const SectionRef &Other) const; 14868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 14925b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer error_code getNext(SectionRef &Result) const; 15068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 15125b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer error_code getName(StringRef &Result) const; 15225b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer error_code getAddress(uint64_t &Result) const; 15325b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer error_code getSize(uint64_t &Result) const; 15425b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer error_code getContents(StringRef &Result) const; 15568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 156e2f2f07be7cf2b55b7e5501291bbcede87e43fd6Michael J. Spencer /// @brief Get the alignment of this section as the actual value (not log 2). 157e2f2f07be7cf2b55b7e5501291bbcede87e43fd6Michael J. Spencer error_code getAlignment(uint64_t &Result) const; 158e2f2f07be7cf2b55b7e5501291bbcede87e43fd6Michael J. Spencer 15968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer // FIXME: Move to the normalization layer when it's created. 16025b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer error_code isText(bool &Result) const; 16113afc5eff2d7370ab486d5039886ab8bbf9039daMichael J. Spencer error_code isData(bool &Result) const; 16213afc5eff2d7370ab486d5039886ab8bbf9039daMichael J. Spencer error_code isBSS(bool &Result) const; 163c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurd error_code isRequiredForExecution(bool &Result) const; 164c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurd error_code isVirtual(bool &Result) const; 165c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurd error_code isZeroInit(bool &Result) const; 1663a129c85920404e7ccdb7e655c89fa60a0309cfdAndrew Kaylor error_code isReadOnlyData(bool &Result) const; 16707ea23aa2d17f701fa125442c20c1eba75b55fdbBenjamin Kramer 16807ea23aa2d17f701fa125442c20c1eba75b55fdbBenjamin Kramer error_code containsSymbol(SymbolRef S, bool &Result) const; 1694344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer 1704344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer relocation_iterator begin_relocations() const; 1714344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer relocation_iterator end_relocations() const; 172c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurd 173c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurd DataRefImpl getRawDataRefImpl() const; 17468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer}; 1754344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencertypedef content_iterator<SectionRef> section_iterator; 17668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 1779b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer/// SymbolRef - This is a value type class that represents a single symbol in 1789b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer/// the list of symbols in the object file. 1799b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencerclass SymbolRef { 1809b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer friend class SectionRef; 1819b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer DataRefImpl SymbolPimpl; 1829b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer const ObjectFile *OwningObject; 1839b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer 1849b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencerpublic: 1853fd9b8422328a60664a5c631ec9519b58017fcbcDanil Malyshev SymbolRef() : OwningObject(NULL) { } 1869b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer 1879b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer enum Type { 1882c67727046234ad9702ab5acb72700b5ac99a676David Meyer ST_Unknown, // Type not specified 1899b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer ST_Data, 190206d17cf605293f1c12d8bfa8cf72826a29b253fMichael J. Spencer ST_Debug, 191206d17cf605293f1c12d8bfa8cf72826a29b253fMichael J. Spencer ST_File, 192206d17cf605293f1c12d8bfa8cf72826a29b253fMichael J. Spencer ST_Function, 1939b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer ST_Other 1949b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer }; 1959b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer 196c46255a32ec92c427e621b6d7eabd887962ce4a4David Meyer enum Flags { 197c46255a32ec92c427e621b6d7eabd887962ce4a4David Meyer SF_None = 0, 1982c67727046234ad9702ab5acb72700b5ac99a676David Meyer SF_Undefined = 1U << 0, // Symbol is defined in another object file 1992c67727046234ad9702ab5acb72700b5ac99a676David Meyer SF_Global = 1U << 1, // Global symbol 2002c67727046234ad9702ab5acb72700b5ac99a676David Meyer SF_Weak = 1U << 2, // Weak symbol 2012c67727046234ad9702ab5acb72700b5ac99a676David Meyer SF_Absolute = 1U << 3, // Absolute symbol 2022c67727046234ad9702ab5acb72700b5ac99a676David Meyer SF_ThreadLocal = 1U << 4, // Thread local symbol 2032c67727046234ad9702ab5acb72700b5ac99a676David Meyer SF_Common = 1U << 5, // Symbol has common linkage 2042c67727046234ad9702ab5acb72700b5ac99a676David Meyer SF_FormatSpecific = 1U << 31 // Specific to the object file format 2052c67727046234ad9702ab5acb72700b5ac99a676David Meyer // (e.g. section symbols) 206c46255a32ec92c427e621b6d7eabd887962ce4a4David Meyer }; 207c46255a32ec92c427e621b6d7eabd887962ce4a4David Meyer 2089b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer SymbolRef(DataRefImpl SymbolP, const ObjectFile *Owner); 2099b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer 2109b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer bool operator==(const SymbolRef &Other) const; 2115b957e6fd9853f938b8b33cfeb03d80595a9c2f8Eric Christopher bool operator<(const SymbolRef &Other) const; 2129b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer 2139b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer error_code getNext(SymbolRef &Result) const; 2149b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer 2159b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer error_code getName(StringRef &Result) const; 21601fa41a106ed0ff86c3b9ffe0843679211bf487cAlexey Samsonov /// Returns the symbol virtual address (i.e. address at which it will be 21701fa41a106ed0ff86c3b9ffe0843679211bf487cAlexey Samsonov /// mapped). 2189b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer error_code getAddress(uint64_t &Result) const; 219b0436a73054fe676b216a0cf872d1fc433125c62Danil Malyshev error_code getFileOffset(uint64_t &Result) const; 22059a0e79631ed851d98cf9c2ba6fa5f9aafdfdc93Rafael Espindola /// @brief Get the alignment of this symbol as the actual value (not log 2). 22159a0e79631ed851d98cf9c2ba6fa5f9aafdfdc93Rafael Espindola error_code getAlignment(uint32_t &Result) const; 2229b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer error_code getSize(uint64_t &Result) const; 2239b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer error_code getType(SymbolRef::Type &Result) const; 2249b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer 2259b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer /// Returns the ascii char that should be displayed in a symbol table dump via 2269b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer /// nm for this symbol. 2279b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer error_code getNMTypeChar(char &Result) const; 2289b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer 229c46255a32ec92c427e621b6d7eabd887962ce4a4David Meyer /// Get symbol flags (bitwise OR of SymbolRef::Flags) 230c46255a32ec92c427e621b6d7eabd887962ce4a4David Meyer error_code getFlags(uint32_t &Result) const; 2319b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer 2329b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer /// @brief Get section this symbol is defined in reference to. Result is 2339b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer /// end_sections() if it is undefined or is an absolute symbol. 2349b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer error_code getSection(section_iterator &Result) const; 2359b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer 236a41dce3c642e50775352cce49e3a3d0cd004d393Tim Northover /// @brief Get value of the symbol in the symbol table. 237a41dce3c642e50775352cce49e3a3d0cd004d393Tim Northover error_code getValue(uint64_t &Val) const; 238a41dce3c642e50775352cce49e3a3d0cd004d393Tim Northover 2399b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer DataRefImpl getRawDataRefImpl() const; 2409b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer}; 2419b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencertypedef content_iterator<SymbolRef> symbol_iterator; 2429b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer 2435c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer/// LibraryRef - This is a value type class that represents a single library in 2445c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer/// the list of libraries needed by a shared or dynamic object. 2455c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyerclass LibraryRef { 2465c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer friend class SectionRef; 2475c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer DataRefImpl LibraryPimpl; 2485c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer const ObjectFile *OwningObject; 2495c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer 2505c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyerpublic: 2513fd9b8422328a60664a5c631ec9519b58017fcbcDanil Malyshev LibraryRef() : OwningObject(NULL) { } 2525c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer 2535c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer LibraryRef(DataRefImpl LibraryP, const ObjectFile *Owner); 2545c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer 2555c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer bool operator==(const LibraryRef &Other) const; 2565b957e6fd9853f938b8b33cfeb03d80595a9c2f8Eric Christopher bool operator<(const LibraryRef &Other) const; 2575c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer 2585c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer error_code getNext(LibraryRef &Result) const; 2595c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer 2605c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer // Get the path to this library, as stored in the object file. 2615c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer error_code getPath(StringRef &Result) const; 2625c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer 2635c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer DataRefImpl getRawDataRefImpl() const; 2645c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer}; 2655c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyertypedef content_iterator<LibraryRef> library_iterator; 2665c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer 26768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerconst uint64_t UnknownAddressOrSize = ~0ULL; 26868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 26968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer/// ObjectFile - This class is the base class for all object file types. 27068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer/// Concrete instances of this object are created by createObjectFile, which 27160f0819cb583799029fa11179576dd7f01d8002aEric Christopher/// figures out which type to create. 272001c9205fca2220480589ec355cb6ec701a37e08Michael J. Spencerclass ObjectFile : public Binary { 2732d24e2a396a1d211baaeedf32148a3b657240170David Blaikie virtual void anchor(); 2749f9ce61972871efcf794bdc6125835c2c32cd863Craig Topper ObjectFile() LLVM_DELETED_FUNCTION; 2759f9ce61972871efcf794bdc6125835c2c32cd863Craig Topper ObjectFile(const ObjectFile &other) LLVM_DELETED_FUNCTION; 27668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 27768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerprotected: 2782c6f997290f589b80da903e33718175666557dd7Rafael Espindola ObjectFile(unsigned int Type, MemoryBuffer *source); 27968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 280001c9205fca2220480589ec355cb6ec701a37e08Michael J. Spencer const uint8_t *base() const { 281001c9205fca2220480589ec355cb6ec701a37e08Michael J. Spencer return reinterpret_cast<const uint8_t *>(Data->getBufferStart()); 282001c9205fca2220480589ec355cb6ec701a37e08Michael J. Spencer } 28368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 28468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer // These functions are for SymbolRef to call internally. The main goal of 28568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer // this is to allow SymbolRef::SymbolPimpl to point directly to the symbol 28668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer // entry in the memory mapped object file. SymbolPimpl cannot contain any 28768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer // virtual functions because then it could not point into the memory mapped 28868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer // file. 28925b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer // 29025b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer // Implementations assume that the DataRefImpl is valid and has not been 29125b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer // modified externally. It's UB otherwise. 29268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer friend class SymbolRef; 29325b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer virtual error_code getSymbolNext(DataRefImpl Symb, SymbolRef &Res) const = 0; 29425b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer virtual error_code getSymbolName(DataRefImpl Symb, StringRef &Res) const = 0; 2955b957e6fd9853f938b8b33cfeb03d80595a9c2f8Eric Christopher virtual error_code getSymbolAddress(DataRefImpl Symb, uint64_t &Res) const = 0; 2965b957e6fd9853f938b8b33cfeb03d80595a9c2f8Eric Christopher virtual error_code getSymbolFileOffset(DataRefImpl Symb, uint64_t &Res)const=0; 29759a0e79631ed851d98cf9c2ba6fa5f9aafdfdc93Rafael Espindola virtual error_code getSymbolAlignment(DataRefImpl Symb, uint32_t &Res) const; 29825b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer virtual error_code getSymbolSize(DataRefImpl Symb, uint64_t &Res) const = 0; 2992c10ecbe4c800bd8a2e1b3e05c4eedf75658b565Michael J. Spencer virtual error_code getSymbolType(DataRefImpl Symb, 3002c10ecbe4c800bd8a2e1b3e05c4eedf75658b565Michael J. Spencer SymbolRef::Type &Res) const = 0; 30125b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer virtual error_code getSymbolNMTypeChar(DataRefImpl Symb, char &Res) const = 0; 302c46255a32ec92c427e621b6d7eabd887962ce4a4David Meyer virtual error_code getSymbolFlags(DataRefImpl Symb, 303c46255a32ec92c427e621b6d7eabd887962ce4a4David Meyer uint32_t &Res) const = 0; 3049b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer virtual error_code getSymbolSection(DataRefImpl Symb, 3059b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer section_iterator &Res) const = 0; 306a41dce3c642e50775352cce49e3a3d0cd004d393Tim Northover virtual error_code getSymbolValue(DataRefImpl Symb, uint64_t &Val) const = 0; 30768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 30868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer // Same as above for SectionRef. 30968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer friend class SectionRef; 31025b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer virtual error_code getSectionNext(DataRefImpl Sec, SectionRef &Res) const = 0; 31125b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer virtual error_code getSectionName(DataRefImpl Sec, StringRef &Res) const = 0; 31225b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer virtual error_code getSectionAddress(DataRefImpl Sec, uint64_t &Res) const =0; 31325b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer virtual error_code getSectionSize(DataRefImpl Sec, uint64_t &Res) const = 0; 31425b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer virtual error_code getSectionContents(DataRefImpl Sec, StringRef &Res)const=0; 315e2f2f07be7cf2b55b7e5501291bbcede87e43fd6Michael J. Spencer virtual error_code getSectionAlignment(DataRefImpl Sec, uint64_t &Res)const=0; 31625b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer virtual error_code isSectionText(DataRefImpl Sec, bool &Res) const = 0; 31713afc5eff2d7370ab486d5039886ab8bbf9039daMichael J. Spencer virtual error_code isSectionData(DataRefImpl Sec, bool &Res) const = 0; 31813afc5eff2d7370ab486d5039886ab8bbf9039daMichael J. Spencer virtual error_code isSectionBSS(DataRefImpl Sec, bool &Res) const = 0; 319c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurd virtual error_code isSectionRequiredForExecution(DataRefImpl Sec, 320c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurd bool &Res) const = 0; 321c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurd // A section is 'virtual' if its contents aren't present in the object image. 322c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurd virtual error_code isSectionVirtual(DataRefImpl Sec, bool &Res) const = 0; 323c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurd virtual error_code isSectionZeroInit(DataRefImpl Sec, bool &Res) const = 0; 3245b957e6fd9853f938b8b33cfeb03d80595a9c2f8Eric Christopher virtual error_code isSectionReadOnlyData(DataRefImpl Sec, bool &Res) const =0; 32507ea23aa2d17f701fa125442c20c1eba75b55fdbBenjamin Kramer virtual error_code sectionContainsSymbol(DataRefImpl Sec, DataRefImpl Symb, 32607ea23aa2d17f701fa125442c20c1eba75b55fdbBenjamin Kramer bool &Result) const = 0; 3274344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer virtual relocation_iterator getSectionRelBegin(DataRefImpl Sec) const = 0; 3284344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer virtual relocation_iterator getSectionRelEnd(DataRefImpl Sec) const = 0; 32968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 33068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 3310fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer // Same as above for RelocationRef. 3320fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer friend class RelocationRef; 3330fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer virtual error_code getRelocationNext(DataRefImpl Rel, 3340fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer RelocationRef &Res) const = 0; 3350fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer virtual error_code getRelocationAddress(DataRefImpl Rel, 3360fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer uint64_t &Res) const =0; 337b0436a73054fe676b216a0cf872d1fc433125c62Danil Malyshev virtual error_code getRelocationOffset(DataRefImpl Rel, 338b0436a73054fe676b216a0cf872d1fc433125c62Danil Malyshev uint64_t &Res) const =0; 3390fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer virtual error_code getRelocationSymbol(DataRefImpl Rel, 3400fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer SymbolRef &Res) const = 0; 3410fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer virtual error_code getRelocationType(DataRefImpl Rel, 3429472b8d220fc746498429f430cb4c4dbfbd38f2aOwen Anderson uint64_t &Res) const = 0; 3434344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer virtual error_code getRelocationTypeName(DataRefImpl Rel, 3444344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer SmallVectorImpl<char> &Result) const = 0; 3450fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer virtual error_code getRelocationAdditionalInfo(DataRefImpl Rel, 3460fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer int64_t &Res) const = 0; 3474344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer virtual error_code getRelocationValueString(DataRefImpl Rel, 3484344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer SmallVectorImpl<char> &Result) const = 0; 3490685e94895f26f96aa1032696e3150dd00aad1f3Owen Anderson virtual error_code getRelocationHidden(DataRefImpl Rel, bool &Result) const { 3500685e94895f26f96aa1032696e3150dd00aad1f3Owen Anderson Result = false; 3510685e94895f26f96aa1032696e3150dd00aad1f3Owen Anderson return object_error::success; 3520685e94895f26f96aa1032696e3150dd00aad1f3Owen Anderson } 3530fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer 3545c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer // Same for LibraryRef 3555c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer friend class LibraryRef; 3565c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer virtual error_code getLibraryNext(DataRefImpl Lib, LibraryRef &Res) const = 0; 3575c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer virtual error_code getLibraryPath(DataRefImpl Lib, StringRef &Res) const = 0; 3585c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer 35968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerpublic: 36068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 36168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual symbol_iterator begin_symbols() const = 0; 36268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual symbol_iterator end_symbols() const = 0; 36368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 364dfa1896b6b61e708f002b814794890ff308172eeMichael J. Spencer virtual symbol_iterator begin_dynamic_symbols() const = 0; 365dfa1896b6b61e708f002b814794890ff308172eeMichael J. Spencer virtual symbol_iterator end_dynamic_symbols() const = 0; 366dfa1896b6b61e708f002b814794890ff308172eeMichael J. Spencer 36768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual section_iterator begin_sections() const = 0; 36868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual section_iterator end_sections() const = 0; 36968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 3705c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer virtual library_iterator begin_libraries_needed() const = 0; 3715c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer virtual library_iterator end_libraries_needed() const = 0; 3725c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer 37368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer /// @brief The number of bytes used to represent an address in this object 37468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer /// file format. 37568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual uint8_t getBytesInAddress() const = 0; 37668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 37768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer virtual StringRef getFileFormatName() const = 0; 37888af6b9217f9ff8b4592f38ac5175de697275f49Michael J. Spencer virtual /* Triple::ArchType */ unsigned getArch() const = 0; 37968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 38097f7787bfb56ad31fe20ec0bb9c3c9f3253d14fbDavid Meyer /// For shared objects, returns the name which this object should be 38197f7787bfb56ad31fe20ec0bb9c3c9f3253d14fbDavid Meyer /// loaded from at runtime. This corresponds to DT_SONAME on ELF and 38297f7787bfb56ad31fe20ec0bb9c3c9f3253d14fbDavid Meyer /// LC_ID_DYLIB (install name) on MachO. 38397f7787bfb56ad31fe20ec0bb9c3c9f3253d14fbDavid Meyer virtual StringRef getLoadName() const = 0; 38497f7787bfb56ad31fe20ec0bb9c3c9f3253d14fbDavid Meyer 38568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer /// @returns Pointer to ObjectFile subclass to handle this type of object. 38668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer /// @param ObjectPath The path to the object file. ObjectPath.isObject must 38768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer /// return true. 38868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer /// @brief Create ObjectFile from path. 38988af6b9217f9ff8b4592f38ac5175de697275f49Michael J. Spencer static ObjectFile *createObjectFile(StringRef ObjectPath); 39068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer static ObjectFile *createObjectFile(MemoryBuffer *Object); 39168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 392001c9205fca2220480589ec355cb6ec701a37e08Michael J. Spencer static inline bool classof(const Binary *v) { 3936f9489a86f33624f9ff5388411d12359ce9cef20David Meyer return v->isObject(); 394001c9205fca2220480589ec355cb6ec701a37e08Michael J. Spencer } 395001c9205fca2220480589ec355cb6ec701a37e08Michael J. Spencer 396001c9205fca2220480589ec355cb6ec701a37e08Michael J. Spencerpublic: 39768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer static ObjectFile *createCOFFObjectFile(MemoryBuffer *Object); 398f4eff4baeb44f9dee988e9293d029dcaa359420dEli Bendersky static ObjectFile *createELFObjectFile(MemoryBuffer *Object); 39968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer static ObjectFile *createMachOObjectFile(MemoryBuffer *Object); 40068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer}; 40168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 40268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer// Inline function definitions. 40368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerinline SymbolRef::SymbolRef(DataRefImpl SymbolP, const ObjectFile *Owner) 40468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer : SymbolPimpl(SymbolP) 40568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer , OwningObject(Owner) {} 40668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 40768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerinline bool SymbolRef::operator==(const SymbolRef &Other) const { 40868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer return SymbolPimpl == Other.SymbolPimpl; 40968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 41068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 4115b957e6fd9853f938b8b33cfeb03d80595a9c2f8Eric Christopherinline bool SymbolRef::operator<(const SymbolRef &Other) const { 4123314c26475b5561abbfe0785e0a64d189d5b4060Michael J. Spencer return SymbolPimpl < Other.SymbolPimpl; 4133314c26475b5561abbfe0785e0a64d189d5b4060Michael J. Spencer} 4143314c26475b5561abbfe0785e0a64d189d5b4060Michael J. Spencer 41525b15777df42d5d608810f6881b6c98107481d69Michael J. Spencerinline error_code SymbolRef::getNext(SymbolRef &Result) const { 41625b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer return OwningObject->getSymbolNext(SymbolPimpl, Result); 41768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 41868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 41925b15777df42d5d608810f6881b6c98107481d69Michael J. Spencerinline error_code SymbolRef::getName(StringRef &Result) const { 42025b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer return OwningObject->getSymbolName(SymbolPimpl, Result); 42168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 42268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 42325b15777df42d5d608810f6881b6c98107481d69Michael J. Spencerinline error_code SymbolRef::getAddress(uint64_t &Result) const { 42425b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer return OwningObject->getSymbolAddress(SymbolPimpl, Result); 42568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 42668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 427b0436a73054fe676b216a0cf872d1fc433125c62Danil Malyshevinline error_code SymbolRef::getFileOffset(uint64_t &Result) const { 428b0436a73054fe676b216a0cf872d1fc433125c62Danil Malyshev return OwningObject->getSymbolFileOffset(SymbolPimpl, Result); 429ac241fe9f0d73c6f632e4f7f89e06b698d39da54Benjamin Kramer} 430ac241fe9f0d73c6f632e4f7f89e06b698d39da54Benjamin Kramer 43159a0e79631ed851d98cf9c2ba6fa5f9aafdfdc93Rafael Espindolainline error_code SymbolRef::getAlignment(uint32_t &Result) const { 43259a0e79631ed851d98cf9c2ba6fa5f9aafdfdc93Rafael Espindola return OwningObject->getSymbolAlignment(SymbolPimpl, Result); 43359a0e79631ed851d98cf9c2ba6fa5f9aafdfdc93Rafael Espindola} 43459a0e79631ed851d98cf9c2ba6fa5f9aafdfdc93Rafael Espindola 43525b15777df42d5d608810f6881b6c98107481d69Michael J. Spencerinline error_code SymbolRef::getSize(uint64_t &Result) const { 43625b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer return OwningObject->getSymbolSize(SymbolPimpl, Result); 43768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 43868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 43925b15777df42d5d608810f6881b6c98107481d69Michael J. Spencerinline error_code SymbolRef::getNMTypeChar(char &Result) const { 44025b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer return OwningObject->getSymbolNMTypeChar(SymbolPimpl, Result); 44168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 44268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 443c46255a32ec92c427e621b6d7eabd887962ce4a4David Meyerinline error_code SymbolRef::getFlags(uint32_t &Result) const { 444c46255a32ec92c427e621b6d7eabd887962ce4a4David Meyer return OwningObject->getSymbolFlags(SymbolPimpl, Result); 4459b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer} 4469b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer 4479b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencerinline error_code SymbolRef::getSection(section_iterator &Result) const { 4489b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer return OwningObject->getSymbolSection(SymbolPimpl, Result); 4499b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer} 4509b2b812fea4df160437e7b7d56e38f6335189ad0Michael J. Spencer 4511130a799ab2fd7042625163a2506518960394884Michael J. Spencerinline error_code SymbolRef::getType(SymbolRef::Type &Result) const { 452ac241fe9f0d73c6f632e4f7f89e06b698d39da54Benjamin Kramer return OwningObject->getSymbolType(SymbolPimpl, Result); 453ac241fe9f0d73c6f632e4f7f89e06b698d39da54Benjamin Kramer} 454ac241fe9f0d73c6f632e4f7f89e06b698d39da54Benjamin Kramer 455a41dce3c642e50775352cce49e3a3d0cd004d393Tim Northoverinline error_code SymbolRef::getValue(uint64_t &Val) const { 456a41dce3c642e50775352cce49e3a3d0cd004d393Tim Northover return OwningObject->getSymbolValue(SymbolPimpl, Val); 457a41dce3c642e50775352cce49e3a3d0cd004d393Tim Northover} 458a41dce3c642e50775352cce49e3a3d0cd004d393Tim Northover 45915c3f727aeff6a80e3f9e7e6b1284748e5f3322aNick Lewyckyinline DataRefImpl SymbolRef::getRawDataRefImpl() const { 46015c3f727aeff6a80e3f9e7e6b1284748e5f3322aNick Lewycky return SymbolPimpl; 46115c3f727aeff6a80e3f9e7e6b1284748e5f3322aNick Lewycky} 46215c3f727aeff6a80e3f9e7e6b1284748e5f3322aNick Lewycky 46368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 46468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer/// SectionRef 46568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerinline SectionRef::SectionRef(DataRefImpl SectionP, 46668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer const ObjectFile *Owner) 46768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer : SectionPimpl(SectionP) 46868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer , OwningObject(Owner) {} 46968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 47068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencerinline bool SectionRef::operator==(const SectionRef &Other) const { 47168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer return SectionPimpl == Other.SectionPimpl; 47268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 47368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 4745b957e6fd9853f938b8b33cfeb03d80595a9c2f8Eric Christopherinline bool SectionRef::operator<(const SectionRef &Other) const { 4753314c26475b5561abbfe0785e0a64d189d5b4060Michael J. Spencer return SectionPimpl < Other.SectionPimpl; 4763314c26475b5561abbfe0785e0a64d189d5b4060Michael J. Spencer} 4773314c26475b5561abbfe0785e0a64d189d5b4060Michael J. Spencer 47825b15777df42d5d608810f6881b6c98107481d69Michael J. Spencerinline error_code SectionRef::getNext(SectionRef &Result) const { 47925b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer return OwningObject->getSectionNext(SectionPimpl, Result); 48068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 48168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 48225b15777df42d5d608810f6881b6c98107481d69Michael J. Spencerinline error_code SectionRef::getName(StringRef &Result) const { 48325b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer return OwningObject->getSectionName(SectionPimpl, Result); 48468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 48568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 48625b15777df42d5d608810f6881b6c98107481d69Michael J. Spencerinline error_code SectionRef::getAddress(uint64_t &Result) const { 48725b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer return OwningObject->getSectionAddress(SectionPimpl, Result); 48868b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 48968b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 49025b15777df42d5d608810f6881b6c98107481d69Michael J. Spencerinline error_code SectionRef::getSize(uint64_t &Result) const { 49125b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer return OwningObject->getSectionSize(SectionPimpl, Result); 49268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 49368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 49425b15777df42d5d608810f6881b6c98107481d69Michael J. Spencerinline error_code SectionRef::getContents(StringRef &Result) const { 49525b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer return OwningObject->getSectionContents(SectionPimpl, Result); 49668b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 49768b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 498e2f2f07be7cf2b55b7e5501291bbcede87e43fd6Michael J. Spencerinline error_code SectionRef::getAlignment(uint64_t &Result) const { 499e2f2f07be7cf2b55b7e5501291bbcede87e43fd6Michael J. Spencer return OwningObject->getSectionAlignment(SectionPimpl, Result); 500e2f2f07be7cf2b55b7e5501291bbcede87e43fd6Michael J. Spencer} 501e2f2f07be7cf2b55b7e5501291bbcede87e43fd6Michael J. Spencer 50225b15777df42d5d608810f6881b6c98107481d69Michael J. Spencerinline error_code SectionRef::isText(bool &Result) const { 50325b15777df42d5d608810f6881b6c98107481d69Michael J. Spencer return OwningObject->isSectionText(SectionPimpl, Result); 50468b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} 50568b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 50613afc5eff2d7370ab486d5039886ab8bbf9039daMichael J. Spencerinline error_code SectionRef::isData(bool &Result) const { 50713afc5eff2d7370ab486d5039886ab8bbf9039daMichael J. Spencer return OwningObject->isSectionData(SectionPimpl, Result); 50813afc5eff2d7370ab486d5039886ab8bbf9039daMichael J. Spencer} 50913afc5eff2d7370ab486d5039886ab8bbf9039daMichael J. Spencer 51013afc5eff2d7370ab486d5039886ab8bbf9039daMichael J. Spencerinline error_code SectionRef::isBSS(bool &Result) const { 51113afc5eff2d7370ab486d5039886ab8bbf9039daMichael J. Spencer return OwningObject->isSectionBSS(SectionPimpl, Result); 51213afc5eff2d7370ab486d5039886ab8bbf9039daMichael J. Spencer} 51313afc5eff2d7370ab486d5039886ab8bbf9039daMichael J. Spencer 514c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurdinline error_code SectionRef::isRequiredForExecution(bool &Result) const { 515c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurd return OwningObject->isSectionRequiredForExecution(SectionPimpl, Result); 516c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurd} 517c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurd 518c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurdinline error_code SectionRef::isVirtual(bool &Result) const { 519c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurd return OwningObject->isSectionVirtual(SectionPimpl, Result); 520c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurd} 521c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurd 522c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurdinline error_code SectionRef::isZeroInit(bool &Result) const { 523c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurd return OwningObject->isSectionZeroInit(SectionPimpl, Result); 524c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurd} 525c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurd 5263a129c85920404e7ccdb7e655c89fa60a0309cfdAndrew Kaylorinline error_code SectionRef::isReadOnlyData(bool &Result) const { 5273a129c85920404e7ccdb7e655c89fa60a0309cfdAndrew Kaylor return OwningObject->isSectionReadOnlyData(SectionPimpl, Result); 5283a129c85920404e7ccdb7e655c89fa60a0309cfdAndrew Kaylor} 5293a129c85920404e7ccdb7e655c89fa60a0309cfdAndrew Kaylor 53007ea23aa2d17f701fa125442c20c1eba75b55fdbBenjamin Kramerinline error_code SectionRef::containsSymbol(SymbolRef S, bool &Result) const { 53107ea23aa2d17f701fa125442c20c1eba75b55fdbBenjamin Kramer return OwningObject->sectionContainsSymbol(SectionPimpl, S.SymbolPimpl, 53207ea23aa2d17f701fa125442c20c1eba75b55fdbBenjamin Kramer Result); 53307ea23aa2d17f701fa125442c20c1eba75b55fdbBenjamin Kramer} 53407ea23aa2d17f701fa125442c20c1eba75b55fdbBenjamin Kramer 5354344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencerinline relocation_iterator SectionRef::begin_relocations() const { 5364344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer return OwningObject->getSectionRelBegin(SectionPimpl); 5374344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer} 5384344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer 5394344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencerinline relocation_iterator SectionRef::end_relocations() const { 5404344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer return OwningObject->getSectionRelEnd(SectionPimpl); 5414344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer} 5424344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer 543c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurdinline DataRefImpl SectionRef::getRawDataRefImpl() const { 544c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurd return SectionPimpl; 545c68dda815e64fb2fb463318d1eaa304e22199d50Preston Gurd} 5460fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer 5470fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer/// RelocationRef 5480fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramerinline RelocationRef::RelocationRef(DataRefImpl RelocationP, 5490fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer const ObjectFile *Owner) 5500fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer : RelocationPimpl(RelocationP) 5510fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer , OwningObject(Owner) {} 5520fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer 5530fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramerinline bool RelocationRef::operator==(const RelocationRef &Other) const { 5540fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer return RelocationPimpl == Other.RelocationPimpl; 5550fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer} 5560fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer 5570fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramerinline error_code RelocationRef::getNext(RelocationRef &Result) const { 5580fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer return OwningObject->getRelocationNext(RelocationPimpl, Result); 5590fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer} 5600fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer 5610fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramerinline error_code RelocationRef::getAddress(uint64_t &Result) const { 5620fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer return OwningObject->getRelocationAddress(RelocationPimpl, Result); 5630fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer} 5640fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer 565b0436a73054fe676b216a0cf872d1fc433125c62Danil Malyshevinline error_code RelocationRef::getOffset(uint64_t &Result) const { 566b0436a73054fe676b216a0cf872d1fc433125c62Danil Malyshev return OwningObject->getRelocationOffset(RelocationPimpl, Result); 567b0436a73054fe676b216a0cf872d1fc433125c62Danil Malyshev} 568b0436a73054fe676b216a0cf872d1fc433125c62Danil Malyshev 5690fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramerinline error_code RelocationRef::getSymbol(SymbolRef &Result) const { 5700fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer return OwningObject->getRelocationSymbol(RelocationPimpl, Result); 5710fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer} 5720fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer 5739472b8d220fc746498429f430cb4c4dbfbd38f2aOwen Andersoninline error_code RelocationRef::getType(uint64_t &Result) const { 5740fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer return OwningObject->getRelocationType(RelocationPimpl, Result); 5750fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer} 5760fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer 5774344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencerinline error_code RelocationRef::getTypeName(SmallVectorImpl<char> &Result) 5784344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer const { 5794344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer return OwningObject->getRelocationTypeName(RelocationPimpl, Result); 5804344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer} 5814344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer 5820fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramerinline error_code RelocationRef::getAdditionalInfo(int64_t &Result) const { 5830fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer return OwningObject->getRelocationAdditionalInfo(RelocationPimpl, Result); 5840fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer} 5850fcab076f0358890e2f1b213f4303c780e05d99dBenjamin Kramer 5864344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencerinline error_code RelocationRef::getValueString(SmallVectorImpl<char> &Result) 5874344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer const { 5884344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer return OwningObject->getRelocationValueString(RelocationPimpl, Result); 5894344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer} 5904344b1ef9b3721a5ebc2e024f753772a1e4ddd92Michael J. Spencer 5910685e94895f26f96aa1032696e3150dd00aad1f3Owen Andersoninline error_code RelocationRef::getHidden(bool &Result) const { 5920685e94895f26f96aa1032696e3150dd00aad1f3Owen Anderson return OwningObject->getRelocationHidden(RelocationPimpl, Result); 5930685e94895f26f96aa1032696e3150dd00aad1f3Owen Anderson} 5949ac0f1d7255d7941c331b0a62a830a3b033358fdMarshall Clow 5959ac0f1d7255d7941c331b0a62a830a3b033358fdMarshall Clowinline DataRefImpl RelocationRef::getRawDataRefImpl() const { 5969ac0f1d7255d7941c331b0a62a830a3b033358fdMarshall Clow return RelocationPimpl; 5979ac0f1d7255d7941c331b0a62a830a3b033358fdMarshall Clow} 5989ac0f1d7255d7941c331b0a62a830a3b033358fdMarshall Clow 5995c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer// Inline function definitions. 6005c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyerinline LibraryRef::LibraryRef(DataRefImpl LibraryP, const ObjectFile *Owner) 6015c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer : LibraryPimpl(LibraryP) 6025c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer , OwningObject(Owner) {} 6035c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer 6045c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyerinline bool LibraryRef::operator==(const LibraryRef &Other) const { 6055c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer return LibraryPimpl == Other.LibraryPimpl; 6065c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer} 6075c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer 6085b957e6fd9853f938b8b33cfeb03d80595a9c2f8Eric Christopherinline bool LibraryRef::operator<(const LibraryRef &Other) const { 6095c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer return LibraryPimpl < Other.LibraryPimpl; 6105c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer} 6115c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer 6125c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyerinline error_code LibraryRef::getNext(LibraryRef &Result) const { 6135c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer return OwningObject->getLibraryNext(LibraryPimpl, Result); 6145c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer} 6155c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer 6165c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyerinline error_code LibraryRef::getPath(StringRef &Result) const { 6175c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer return OwningObject->getLibraryPath(LibraryPimpl, Result); 6185c2b4ea73c8f48bb5f96c86fe437385b8fb3dcdaDavid Meyer} 6190685e94895f26f96aa1032696e3150dd00aad1f3Owen Anderson 62068b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} // end namespace object 62168b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer} // end namespace llvm 62268b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer 62368b3f0c40e29e461dbbc85370078692df4336b42Michael J. Spencer#endif 624