1254721Semaste//===-- AddressResolver.h ---------------------------------------*- C++ -*-===// 2254721Semaste// 3254721Semaste// The LLVM Compiler Infrastructure 4254721Semaste// 5254721Semaste// This file is distributed under the University of Illinois Open Source 6254721Semaste// License. See LICENSE.TXT for details. 7254721Semaste// 8254721Semaste//===----------------------------------------------------------------------===// 9254721Semaste 10254721Semaste#ifndef liblldb_AddressResolver_h_ 11254721Semaste#define liblldb_AddressResolver_h_ 12254721Semaste 13254721Semaste#include <vector> 14254721Semaste 15254721Semaste// C Includes 16254721Semaste// C++ Includes 17254721Semaste// Other libraries and framework includes 18254721Semaste// Project includes 19254721Semaste#include "lldb/lldb-private.h" 20254721Semaste#include "lldb/Core/Address.h" 21254721Semaste#include "lldb/Core/AddressRange.h" 22254721Semaste#include "lldb/Host/FileSpec.h" 23254721Semaste#include "lldb/Core/SearchFilter.h" 24254721Semaste#include "lldb/Core/ConstString.h" 25254721Semaste 26254721Semastenamespace lldb_private { 27254721Semaste 28254721Semaste//---------------------------------------------------------------------- 29254721Semaste/// @class AddressResolver AddressResolver.h "lldb/Core/AddressResolver.h" 30254721Semaste/// @brief This class works with SearchFilter to resolve function names and 31254721Semaste/// source file locations to their concrete addresses. 32254721Semaste//---------------------------------------------------------------------- 33254721Semaste 34254721Semaste//---------------------------------------------------------------------- 35254721Semaste/// General Outline: 36254721Semaste/// The AddressResolver is a Searcher. In that protocol, 37254721Semaste/// the SearchFilter asks the question "At what depth of the symbol context 38254721Semaste/// descent do you want your callback to get called?" of the filter. The resolver 39254721Semaste/// answers this question (in the GetDepth method) and provides the resolution callback. 40254721Semaste//---------------------------------------------------------------------- 41254721Semaste 42254721Semasteclass AddressResolver : 43254721Semaste public Searcher 44254721Semaste{ 45254721Semastepublic: 46254721Semaste 47254721Semaste typedef enum 48254721Semaste { 49254721Semaste Exact, 50254721Semaste Regexp, 51254721Semaste Glob 52254721Semaste } MatchType; 53254721Semaste 54254721Semaste 55254721Semaste AddressResolver (); 56254721Semaste 57254721Semaste virtual 58254721Semaste ~AddressResolver (); 59254721Semaste 60254721Semaste virtual void 61254721Semaste ResolveAddress (SearchFilter &filter); 62254721Semaste 63254721Semaste virtual void 64254721Semaste ResolveAddressInModules (SearchFilter &filter, 65254721Semaste ModuleList &modules); 66254721Semaste 67254721Semaste virtual void 68254721Semaste GetDescription (Stream *s) = 0; 69254721Semaste 70254721Semaste std::vector<AddressRange> & 71254721Semaste GetAddressRanges (); 72254721Semaste 73254721Semaste size_t 74254721Semaste GetNumberOfAddresses (); 75254721Semaste 76254721Semaste AddressRange & 77254721Semaste GetAddressRangeAtIndex (size_t idx); 78254721Semaste 79254721Semasteprotected: 80254721Semaste 81254721Semaste std::vector<AddressRange> m_address_ranges; 82254721Semaste 83254721Semasteprivate: 84254721Semaste DISALLOW_COPY_AND_ASSIGN(AddressResolver); 85254721Semaste}; 86254721Semaste 87254721Semaste} // namespace lldb_private 88254721Semaste 89254721Semaste#endif // liblldb_AddressResolver_h_ 90