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