124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- AddressResolver.h ---------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_AddressResolver_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_AddressResolver_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <vector> 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h" 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Address.h" 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/AddressRange.h" 225f54ac373b119a4c6693e4875c48aa761fba0c86Greg Clayton#include "lldb/Host/FileSpec.h" 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/SearchFilter.h" 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ConstString.h" 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @class AddressResolver AddressResolver.h "lldb/Core/AddressResolver.h" 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @brief This class works with SearchFilter to resolve function names and 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// source file locations to their concrete addresses. 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// General Outline: 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// The AddressResolver is a Searcher. In that protocol, 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// the SearchFilter asks the question "At what depth of the symbol context 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// descent do you want your callback to get called?" of the filter. The resolver 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// answers this question (in the GetDepth method) and provides the resolution callback. 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass AddressResolver : 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public Searcher 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef enum 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Exact, 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Regexp, 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Glob 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } MatchType; 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner AddressResolver (); 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~AddressResolver (); 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ResolveAddress (SearchFilter &filter); 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ResolveAddressInModules (SearchFilter &filter, 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ModuleList &modules); 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetDescription (Stream *s) = 0; 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::vector<AddressRange> & 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetAddressRanges (); 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetNumberOfAddresses (); 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner AddressRange & 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetAddressRangeAtIndex (size_t idx); 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::vector<AddressRange> m_address_ranges; 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN(AddressResolver); 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_AddressResolver_h_ 90