SectionLoadList.h revision 269024
1//===-- SectionLoadList.h -----------------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#ifndef liblldb_SectionLoadList_h_ 11#define liblldb_SectionLoadList_h_ 12 13// C Includes 14// C++ Includes 15#include <map> 16 17// Other libraries and framework includes 18#include "llvm/ADT/DenseMap.h" 19// Project includes 20#include "lldb/lldb-public.h" 21#include "lldb/Host/Mutex.h" 22 23namespace lldb_private { 24 25class SectionLoadList 26{ 27public: 28 //------------------------------------------------------------------ 29 // Constructors and Destructors 30 //------------------------------------------------------------------ 31 SectionLoadList () : 32 m_addr_to_sect (), 33 m_sect_to_addr (), 34 m_mutex (Mutex::eMutexTypeRecursive) 35 36 { 37 } 38 39 SectionLoadList (const SectionLoadList& rhs); 40 41 ~SectionLoadList() 42 { 43 // Call clear since this takes a lock and clears the section load list 44 // in case another thread is currently using this section load list 45 Clear(); 46 } 47 48 void 49 operator=(const SectionLoadList &rhs); 50 51 bool 52 IsEmpty() const; 53 54 void 55 Clear (); 56 57 lldb::addr_t 58 GetSectionLoadAddress (const lldb::SectionSP §ion_sp) const; 59 60 bool 61 ResolveLoadAddress (lldb::addr_t load_addr, Address &so_addr) const; 62 63 bool 64 SetSectionLoadAddress (const lldb::SectionSP §ion_sp, lldb::addr_t load_addr, bool warn_multiple = false); 65 66 // The old load address should be specified when unloading to ensure we get 67 // the correct instance of the section as a shared library could be loaded 68 // at more than one location. 69 bool 70 SetSectionUnloaded (const lldb::SectionSP §ion_sp, lldb::addr_t load_addr); 71 72 // Unload all instances of a section. This function can be used on systems 73 // that don't support multiple copies of the same shared library to be 74 // loaded at the same time. 75 size_t 76 SetSectionUnloaded (const lldb::SectionSP §ion_sp); 77 78 void 79 Dump (Stream &s, Target *target); 80 81protected: 82 typedef std::map<lldb::addr_t, lldb::SectionSP> addr_to_sect_collection; 83 typedef llvm::DenseMap<const Section *, lldb::addr_t> sect_to_addr_collection; 84 addr_to_sect_collection m_addr_to_sect; 85 sect_to_addr_collection m_sect_to_addr; 86 mutable Mutex m_mutex; 87}; 88 89} // namespace lldb_private 90 91#endif // liblldb_SectionLoadList_h_ 92