//===-- WatchpointResourceList.h --------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLDB_BREAKPOINT_WATCHPOINTRESOURCELIST_H #define LLDB_BREAKPOINT_WATCHPOINTRESOURCELIST_H #include "lldb/Utility/Iterable.h" #include "lldb/lldb-private.h" #include "lldb/lldb-public.h" #include #include namespace lldb_private { class WatchpointResourceList { public: WatchpointResourceList(); ~WatchpointResourceList(); /// Add a WatchpointResource to the list. /// /// \param[in] wp_res_sp /// A shared pointer to a breakpoint site being added to the list. /// /// \return /// The ID of the BreakpointSite in the list. lldb::wp_resource_id_t Add(const lldb::WatchpointResourceSP &wp_res_sp); /// Removes the watchpoint resource given by \a id from this list. /// /// \param[in] id /// The watchpoint resource to remove. /// /// \result /// \b true if the watchpoint resource \a id was in the list. bool Remove(lldb::wp_resource_id_t id); /// Removes the watchpoint resource containing address \a addr from this list. /// /// \param[in] addr /// The address from which to remove a watchpoint resource. /// /// \result /// \b true if \a addr had a watchpoint resource to remove from the list. bool RemoveByAddress(lldb::addr_t addr); /// Returns a shared pointer to the watchpoint resource which contains /// \a addr. /// /// \param[in] addr /// The address to look for. /// /// \result /// A shared pointer to the watchpoint resource. May contain a nullptr /// pointer if no watchpoint site exists with a matching address. lldb::WatchpointResourceSP FindByAddress(lldb::addr_t addr); /// Returns a shared pointer to the watchpoint resource which is owned /// by \a wp_sp. /// /// \param[in] wp_sp /// The WatchpointSP to look for. /// /// \result /// A shared pointer to the watchpoint resource. May contain a nullptr /// pointer if no watchpoint site exists lldb::WatchpointResourceSP FindByWatchpointSP(lldb::WatchpointSP &wp_sp); /// Returns a shared pointer to the watchpoint resource which is owned /// by \a wp. /// /// \param[in] wp /// The Watchpoint to look for. /// /// \result /// A shared pointer to the watchpoint resource. May contain a nullptr /// pointer if no watchpoint site exists lldb::WatchpointResourceSP FindByWatchpoint(const lldb_private::Watchpoint *wp); /// Returns a shared pointer to the watchpoint resource which has hardware /// index \a id. Some Process plugins may not have access to the actual /// hardware watchpoint register number used for a WatchpointResource, so /// the wp_resource_id_t may not be correctly tracking the target's wp /// register target. /// /// \param[in] id /// The hardware resource index to search for. /// /// \result /// A shared pointer to the watchpoint resource. May contain a nullptr /// pointer if no watchpoint site exists with a matching id. lldb::WatchpointResourceSP FindByID(lldb::wp_resource_id_t id); /// /// Get the number of WatchpointResources that are available. /// /// \return /// The number of WatchpointResources that are stored in the /// WatchpointResourceList. uint32_t GetSize(); /// Get the WatchpointResource at a given index. /// /// \param [in] idx /// The index of the resource. /// \return /// The WatchpointResource at that index number. lldb::WatchpointResourceSP GetResourceAtIndex(uint32_t idx); typedef std::vector collection; typedef LockingAdaptedIterable WatchpointResourceIterable; /// Iterate over the list of WatchpointResources. /// /// \return /// An Iterable object which can be used to loop over the resources /// that exist. WatchpointResourceIterable Resources() { return WatchpointResourceIterable(m_resources, m_mutex); } /// Clear out the list of resources from the WatchpointResourceList void Clear(); std::mutex &GetMutex(); private: collection m_resources; std::mutex m_mutex; }; } // namespace lldb_private #endif // LLDB_BREAKPOINT_WATCHPOINTRESOURCELIST_H