149ce8969d3154e1560106cfe530444c09410f217Greg Clayton//===-- ModuleSpec.h --------------------------------------------*- C++ -*-===// 249ce8969d3154e1560106cfe530444c09410f217Greg Clayton// 349ce8969d3154e1560106cfe530444c09410f217Greg Clayton// The LLVM Compiler Infrastructure 449ce8969d3154e1560106cfe530444c09410f217Greg Clayton// 549ce8969d3154e1560106cfe530444c09410f217Greg Clayton// This file is distributed under the University of Illinois Open Source 649ce8969d3154e1560106cfe530444c09410f217Greg Clayton// License. See LICENSE.TXT for details. 749ce8969d3154e1560106cfe530444c09410f217Greg Clayton// 849ce8969d3154e1560106cfe530444c09410f217Greg Clayton//===----------------------------------------------------------------------===// 949ce8969d3154e1560106cfe530444c09410f217Greg Clayton 1049ce8969d3154e1560106cfe530444c09410f217Greg Clayton#ifndef liblldb_ModuleSpec_h_ 1149ce8969d3154e1560106cfe530444c09410f217Greg Clayton#define liblldb_ModuleSpec_h_ 1249ce8969d3154e1560106cfe530444c09410f217Greg Clayton 1349ce8969d3154e1560106cfe530444c09410f217Greg Clayton#include "lldb/Core/ArchSpec.h" 14f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton#include "lldb/Core/Stream.h" 1549ce8969d3154e1560106cfe530444c09410f217Greg Clayton#include "lldb/Core/UUID.h" 1649ce8969d3154e1560106cfe530444c09410f217Greg Clayton#include "lldb/Host/FileSpec.h" 1749ce8969d3154e1560106cfe530444c09410f217Greg Clayton#include "lldb/Target/PathMappingList.h" 1849ce8969d3154e1560106cfe530444c09410f217Greg Clayton 1949ce8969d3154e1560106cfe530444c09410f217Greg Claytonnamespace lldb_private { 2049ce8969d3154e1560106cfe530444c09410f217Greg Clayton 2149ce8969d3154e1560106cfe530444c09410f217Greg Claytonclass ModuleSpec 2249ce8969d3154e1560106cfe530444c09410f217Greg Clayton{ 2349ce8969d3154e1560106cfe530444c09410f217Greg Claytonpublic: 2449ce8969d3154e1560106cfe530444c09410f217Greg Clayton ModuleSpec () : 2549ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_file (), 2649ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_platform_file (), 2749ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_symbol_file (), 2849ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_arch (), 2949ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_uuid (), 3049ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_object_name (), 3149ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_object_offset (0), 320e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton m_object_mod_time (), 3349ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_source_mappings () 3449ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 3549ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 3649ce8969d3154e1560106cfe530444c09410f217Greg Clayton 3749ce8969d3154e1560106cfe530444c09410f217Greg Clayton ModuleSpec (const FileSpec &file_spec) : 3849ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_file (file_spec), 3949ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_platform_file (), 4049ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_symbol_file (), 4149ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_arch (), 4249ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_uuid (), 4349ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_object_name (), 4449ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_object_offset (0), 450e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton m_object_mod_time (), 4649ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_source_mappings () 4749ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 4849ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 4949ce8969d3154e1560106cfe530444c09410f217Greg Clayton 5049ce8969d3154e1560106cfe530444c09410f217Greg Clayton ModuleSpec (const FileSpec &file_spec, const ArchSpec &arch) : 5149ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_file (file_spec), 5249ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_platform_file (), 5349ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_symbol_file (), 5449ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_arch (arch), 5549ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_uuid (), 5649ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_object_name (), 5749ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_object_offset (0), 580e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton m_object_mod_time (), 5949ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_source_mappings () 6049ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 6149ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 6249ce8969d3154e1560106cfe530444c09410f217Greg Clayton 6349ce8969d3154e1560106cfe530444c09410f217Greg Clayton ModuleSpec (const ModuleSpec &rhs) : 6449ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_file (rhs.m_file), 6549ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_platform_file (rhs.m_platform_file), 6649ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_symbol_file (rhs.m_symbol_file), 6749ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_arch (rhs.m_arch), 6849ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_uuid (rhs.m_uuid), 6949ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_object_name (rhs.m_object_name), 7049ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_object_offset (rhs.m_object_offset), 710e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton m_object_mod_time (rhs.m_object_mod_time), 7249ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_source_mappings (rhs.m_source_mappings) 7349ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 7449ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 7549ce8969d3154e1560106cfe530444c09410f217Greg Clayton 7649ce8969d3154e1560106cfe530444c09410f217Greg Clayton ModuleSpec & 7749ce8969d3154e1560106cfe530444c09410f217Greg Clayton operator = (const ModuleSpec &rhs) 7849ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 7949ce8969d3154e1560106cfe530444c09410f217Greg Clayton if (this != &rhs) 8049ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 8149ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_file = rhs.m_file; 8249ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_platform_file = rhs.m_platform_file; 8349ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_symbol_file = rhs.m_symbol_file; 8449ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_arch = rhs.m_arch; 8549ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_uuid = rhs.m_uuid; 8649ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_object_name = rhs.m_object_name; 8749ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_object_offset = rhs.m_object_offset; 880e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton m_object_mod_time = rhs.m_object_mod_time; 8949ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_source_mappings = rhs.m_source_mappings; 9049ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 9149ce8969d3154e1560106cfe530444c09410f217Greg Clayton return *this; 9249ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 9349ce8969d3154e1560106cfe530444c09410f217Greg Clayton 9449ce8969d3154e1560106cfe530444c09410f217Greg Clayton FileSpec * 9549ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetFileSpecPtr () 9649ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 9749ce8969d3154e1560106cfe530444c09410f217Greg Clayton if (m_file) 9849ce8969d3154e1560106cfe530444c09410f217Greg Clayton return &m_file; 9949ce8969d3154e1560106cfe530444c09410f217Greg Clayton return NULL; 10049ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 10149ce8969d3154e1560106cfe530444c09410f217Greg Clayton 10249ce8969d3154e1560106cfe530444c09410f217Greg Clayton const FileSpec * 10349ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetFileSpecPtr () const 10449ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 10549ce8969d3154e1560106cfe530444c09410f217Greg Clayton if (m_file) 10649ce8969d3154e1560106cfe530444c09410f217Greg Clayton return &m_file; 10749ce8969d3154e1560106cfe530444c09410f217Greg Clayton return NULL; 10849ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 10949ce8969d3154e1560106cfe530444c09410f217Greg Clayton 11049ce8969d3154e1560106cfe530444c09410f217Greg Clayton FileSpec & 11149ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetFileSpec () 11249ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 11349ce8969d3154e1560106cfe530444c09410f217Greg Clayton return m_file; 11449ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 11549ce8969d3154e1560106cfe530444c09410f217Greg Clayton const FileSpec & 11649ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetFileSpec () const 11749ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 11849ce8969d3154e1560106cfe530444c09410f217Greg Clayton return m_file; 11949ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 12049ce8969d3154e1560106cfe530444c09410f217Greg Clayton 12149ce8969d3154e1560106cfe530444c09410f217Greg Clayton FileSpec * 12249ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetPlatformFileSpecPtr () 12349ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 12449ce8969d3154e1560106cfe530444c09410f217Greg Clayton if (m_platform_file) 12549ce8969d3154e1560106cfe530444c09410f217Greg Clayton return &m_platform_file; 12649ce8969d3154e1560106cfe530444c09410f217Greg Clayton return NULL; 12749ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 12849ce8969d3154e1560106cfe530444c09410f217Greg Clayton 12949ce8969d3154e1560106cfe530444c09410f217Greg Clayton const FileSpec * 13049ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetPlatformFileSpecPtr () const 13149ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 13249ce8969d3154e1560106cfe530444c09410f217Greg Clayton if (m_platform_file) 13349ce8969d3154e1560106cfe530444c09410f217Greg Clayton return &m_platform_file; 13449ce8969d3154e1560106cfe530444c09410f217Greg Clayton return NULL; 13549ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 13649ce8969d3154e1560106cfe530444c09410f217Greg Clayton 13749ce8969d3154e1560106cfe530444c09410f217Greg Clayton FileSpec & 13849ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetPlatformFileSpec () 13949ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 14049ce8969d3154e1560106cfe530444c09410f217Greg Clayton return m_platform_file; 14149ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 14249ce8969d3154e1560106cfe530444c09410f217Greg Clayton 14349ce8969d3154e1560106cfe530444c09410f217Greg Clayton const FileSpec & 14449ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetPlatformFileSpec () const 14549ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 14649ce8969d3154e1560106cfe530444c09410f217Greg Clayton return m_platform_file; 14749ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 14849ce8969d3154e1560106cfe530444c09410f217Greg Clayton 14949ce8969d3154e1560106cfe530444c09410f217Greg Clayton FileSpec * 15049ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetSymbolFileSpecPtr () 15149ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 15249ce8969d3154e1560106cfe530444c09410f217Greg Clayton if (m_symbol_file) 15349ce8969d3154e1560106cfe530444c09410f217Greg Clayton return &m_symbol_file; 15449ce8969d3154e1560106cfe530444c09410f217Greg Clayton return NULL; 15549ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 15649ce8969d3154e1560106cfe530444c09410f217Greg Clayton 15749ce8969d3154e1560106cfe530444c09410f217Greg Clayton const FileSpec * 15849ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetSymbolFileSpecPtr () const 15949ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 16049ce8969d3154e1560106cfe530444c09410f217Greg Clayton if (m_symbol_file) 16149ce8969d3154e1560106cfe530444c09410f217Greg Clayton return &m_symbol_file; 16249ce8969d3154e1560106cfe530444c09410f217Greg Clayton return NULL; 16349ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 16449ce8969d3154e1560106cfe530444c09410f217Greg Clayton 16549ce8969d3154e1560106cfe530444c09410f217Greg Clayton FileSpec & 16649ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetSymbolFileSpec () 16749ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 16849ce8969d3154e1560106cfe530444c09410f217Greg Clayton return m_symbol_file; 16949ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 17049ce8969d3154e1560106cfe530444c09410f217Greg Clayton 17149ce8969d3154e1560106cfe530444c09410f217Greg Clayton const FileSpec & 17249ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetSymbolFileSpec () const 17349ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 17449ce8969d3154e1560106cfe530444c09410f217Greg Clayton return m_symbol_file; 17549ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 17649ce8969d3154e1560106cfe530444c09410f217Greg Clayton 17749ce8969d3154e1560106cfe530444c09410f217Greg Clayton 17849ce8969d3154e1560106cfe530444c09410f217Greg Clayton ArchSpec * 17949ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetArchitecturePtr () 18049ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 18149ce8969d3154e1560106cfe530444c09410f217Greg Clayton if (m_arch.IsValid()) 18249ce8969d3154e1560106cfe530444c09410f217Greg Clayton return &m_arch; 18349ce8969d3154e1560106cfe530444c09410f217Greg Clayton return NULL; 18449ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 18549ce8969d3154e1560106cfe530444c09410f217Greg Clayton 18649ce8969d3154e1560106cfe530444c09410f217Greg Clayton const ArchSpec * 18749ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetArchitecturePtr () const 18849ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 18949ce8969d3154e1560106cfe530444c09410f217Greg Clayton if (m_arch.IsValid()) 19049ce8969d3154e1560106cfe530444c09410f217Greg Clayton return &m_arch; 19149ce8969d3154e1560106cfe530444c09410f217Greg Clayton return NULL; 19249ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 19349ce8969d3154e1560106cfe530444c09410f217Greg Clayton 19449ce8969d3154e1560106cfe530444c09410f217Greg Clayton ArchSpec & 19549ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetArchitecture () 19649ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 19749ce8969d3154e1560106cfe530444c09410f217Greg Clayton return m_arch; 19849ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 19949ce8969d3154e1560106cfe530444c09410f217Greg Clayton 20049ce8969d3154e1560106cfe530444c09410f217Greg Clayton const ArchSpec & 20149ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetArchitecture () const 20249ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 20349ce8969d3154e1560106cfe530444c09410f217Greg Clayton return m_arch; 20449ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 20549ce8969d3154e1560106cfe530444c09410f217Greg Clayton 20649ce8969d3154e1560106cfe530444c09410f217Greg Clayton UUID * 20749ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetUUIDPtr () 20849ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 20949ce8969d3154e1560106cfe530444c09410f217Greg Clayton if (m_uuid.IsValid()) 21049ce8969d3154e1560106cfe530444c09410f217Greg Clayton return &m_uuid; 21149ce8969d3154e1560106cfe530444c09410f217Greg Clayton return NULL; 21249ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 21349ce8969d3154e1560106cfe530444c09410f217Greg Clayton 21449ce8969d3154e1560106cfe530444c09410f217Greg Clayton const UUID * 21549ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetUUIDPtr () const 21649ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 21749ce8969d3154e1560106cfe530444c09410f217Greg Clayton if (m_uuid.IsValid()) 21849ce8969d3154e1560106cfe530444c09410f217Greg Clayton return &m_uuid; 21949ce8969d3154e1560106cfe530444c09410f217Greg Clayton return NULL; 22049ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 22149ce8969d3154e1560106cfe530444c09410f217Greg Clayton 22249ce8969d3154e1560106cfe530444c09410f217Greg Clayton UUID & 22349ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetUUID () 22449ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 22549ce8969d3154e1560106cfe530444c09410f217Greg Clayton return m_uuid; 22649ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 22749ce8969d3154e1560106cfe530444c09410f217Greg Clayton 22849ce8969d3154e1560106cfe530444c09410f217Greg Clayton const UUID & 22949ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetUUID () const 23049ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 23149ce8969d3154e1560106cfe530444c09410f217Greg Clayton return m_uuid; 23249ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 23349ce8969d3154e1560106cfe530444c09410f217Greg Clayton 23449ce8969d3154e1560106cfe530444c09410f217Greg Clayton ConstString & 23549ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetObjectName () 23649ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 23749ce8969d3154e1560106cfe530444c09410f217Greg Clayton return m_object_name; 23849ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 23949ce8969d3154e1560106cfe530444c09410f217Greg Clayton 24049ce8969d3154e1560106cfe530444c09410f217Greg Clayton const ConstString & 24149ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetObjectName () const 24249ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 24349ce8969d3154e1560106cfe530444c09410f217Greg Clayton return m_object_name; 24449ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 24549ce8969d3154e1560106cfe530444c09410f217Greg Clayton 24649ce8969d3154e1560106cfe530444c09410f217Greg Clayton uint64_t 24749ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetObjectOffset () const 24849ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 24949ce8969d3154e1560106cfe530444c09410f217Greg Clayton return m_object_offset; 25049ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 25149ce8969d3154e1560106cfe530444c09410f217Greg Clayton 25249ce8969d3154e1560106cfe530444c09410f217Greg Clayton void 25349ce8969d3154e1560106cfe530444c09410f217Greg Clayton SetObjectOffset (uint64_t object_offset) 25449ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 25549ce8969d3154e1560106cfe530444c09410f217Greg Clayton m_object_offset = object_offset; 25649ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 2570e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton 2580e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton TimeValue & 2590e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton GetObjectModificationTime () 2600e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton { 2610e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton return m_object_mod_time; 2620e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton } 2630e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton 2640e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton const TimeValue & 2650e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton GetObjectModificationTime () const 2660e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton { 2670e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton return m_object_mod_time; 2680e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton } 26949ce8969d3154e1560106cfe530444c09410f217Greg Clayton 27049ce8969d3154e1560106cfe530444c09410f217Greg Clayton PathMappingList & 27149ce8969d3154e1560106cfe530444c09410f217Greg Clayton GetSourceMappingList () const 27249ce8969d3154e1560106cfe530444c09410f217Greg Clayton { 27349ce8969d3154e1560106cfe530444c09410f217Greg Clayton return m_source_mappings; 27449ce8969d3154e1560106cfe530444c09410f217Greg Clayton } 27549ce8969d3154e1560106cfe530444c09410f217Greg Clayton 27636b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton void 27736b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton Clear () 27836b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton { 27936b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton m_file.Clear(); 28036b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton m_platform_file.Clear(); 28136b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton m_symbol_file.Clear(); 28236b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton m_arch.Clear(); 28336b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton m_uuid.Clear(); 28436b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton m_object_name.Clear(); 28536b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton m_object_offset = 0; 28636b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton m_source_mappings.Clear(false); 2870e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton m_object_mod_time.Clear(); 28836b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton } 28936b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton 290f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton 291f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton operator bool () const 292f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 293f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (m_file) 294f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return true; 295f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (m_platform_file) 296f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return true; 297f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (m_symbol_file) 298f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return true; 299f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (m_arch.IsValid()) 300f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return true; 301f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (m_uuid.IsValid()) 302f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return true; 303f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (m_object_name) 304f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return true; 305f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (m_object_mod_time.IsValid()) 306f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return true; 307f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return false; 308f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 309f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton 310f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton void 311f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton Dump (Stream &strm) 312f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 313f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton bool dumped_something = false; 314f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (m_file) 315f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 316f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton strm.PutCString("file = '"); 317f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton strm << m_file; 318f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton strm.PutCString("'"); 319f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton dumped_something = true; 320f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 321f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (m_platform_file) 322f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 323f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (dumped_something) 324f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton strm.PutCString(", "); 325f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton strm.PutCString("platform_file = '"); 326f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton strm << m_platform_file; 327f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton strm.PutCString("'"); 328f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton dumped_something = true; 329f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 330f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (m_symbol_file) 331f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 332f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (dumped_something) 333f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton strm.PutCString(", "); 334f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton strm.PutCString("symbol_file = '"); 335f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton strm << m_symbol_file; 336f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton strm.PutCString("'"); 337f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton dumped_something = true; 338f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 339f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (m_arch.IsValid()) 340f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 341f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (dumped_something) 342f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton strm.PutCString(", "); 343f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton strm.Printf("arch = %s", m_arch.GetTriple().str().c_str()); 344f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton dumped_something = true; 345f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 346f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (m_uuid.IsValid()) 347f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 348f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (dumped_something) 349f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton strm.PutCString(", "); 350f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton strm.PutCString("uuid = "); 351f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton m_uuid.Dump(&strm); 352f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton dumped_something = true; 353f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 354f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (m_object_name) 355f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 356f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (dumped_something) 357f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton strm.PutCString(", "); 358f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton strm.Printf("object_name = %s", m_object_name.GetCString()); 359f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton dumped_something = true; 360f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 3617980d35608225dc71b3dd946d4c3aea85bc24e85Greg Clayton if (m_object_offset > 0) 3627980d35608225dc71b3dd946d4c3aea85bc24e85Greg Clayton { 3637980d35608225dc71b3dd946d4c3aea85bc24e85Greg Clayton if (dumped_something) 3647980d35608225dc71b3dd946d4c3aea85bc24e85Greg Clayton strm.PutCString(", "); 3657980d35608225dc71b3dd946d4c3aea85bc24e85Greg Clayton strm.Printf("object_offset = 0x%" PRIx64, m_object_offset); 3667980d35608225dc71b3dd946d4c3aea85bc24e85Greg Clayton dumped_something = true; 3677980d35608225dc71b3dd946d4c3aea85bc24e85Greg Clayton } 3687980d35608225dc71b3dd946d4c3aea85bc24e85Greg Clayton if (m_object_mod_time.IsValid()) 3697980d35608225dc71b3dd946d4c3aea85bc24e85Greg Clayton { 3707980d35608225dc71b3dd946d4c3aea85bc24e85Greg Clayton if (dumped_something) 3717980d35608225dc71b3dd946d4c3aea85bc24e85Greg Clayton strm.PutCString(", "); 3727980d35608225dc71b3dd946d4c3aea85bc24e85Greg Clayton strm.Printf("object_mod_time = 0x%" PRIx64, m_object_mod_time.GetAsSecondsSinceJan1_1970()); 3737980d35608225dc71b3dd946d4c3aea85bc24e85Greg Clayton dumped_something = true; 3747980d35608225dc71b3dd946d4c3aea85bc24e85Greg Clayton } 375f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 376f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton 377f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton bool 378f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton Matches (const ModuleSpec &match_module_spec, bool exact_arch_match) const 379f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 380f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (match_module_spec.GetUUIDPtr() && match_module_spec.GetUUID() != GetUUID()) 381f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return false; 382f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (match_module_spec.GetObjectName() && match_module_spec.GetObjectName() != GetObjectName()) 383f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return false; 384f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (match_module_spec.GetFileSpecPtr()) 385f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 386f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton const FileSpec &fspec = match_module_spec.GetFileSpec(); 387f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (!FileSpec::Equal(fspec, GetFileSpec(), fspec.GetDirectory().IsEmpty() == false)) 388f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return false; 389f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 390f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (match_module_spec.GetPlatformFileSpecPtr()) 391f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 392f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton const FileSpec &fspec = match_module_spec.GetPlatformFileSpec(); 393f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (!FileSpec::Equal(fspec, GetPlatformFileSpec(), fspec.GetDirectory().IsEmpty() == false)) 394f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return false; 395f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton 396f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 397f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (match_module_spec.GetSymbolFileSpecPtr()) 398f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 399f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton const FileSpec &fspec = match_module_spec.GetSymbolFileSpec(); 400f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (!FileSpec::Equal(fspec, GetSymbolFileSpec(), fspec.GetDirectory().IsEmpty() == false)) 401f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return false; 402f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton 403f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 404f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (match_module_spec.GetArchitecturePtr()) 405f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 406f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (exact_arch_match) 407f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 408f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (!GetArchitecture().IsExactMatch(match_module_spec.GetArchitecture())) 409f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return false; 410f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 411f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton else 412f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 413f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (!GetArchitecture().IsCompatibleMatch(match_module_spec.GetArchitecture())) 414f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return false; 415f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 416f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 417f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return true; 418f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 419f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton 42049ce8969d3154e1560106cfe530444c09410f217Greg Claytonprotected: 42149ce8969d3154e1560106cfe530444c09410f217Greg Clayton FileSpec m_file; 42249ce8969d3154e1560106cfe530444c09410f217Greg Clayton FileSpec m_platform_file; 42349ce8969d3154e1560106cfe530444c09410f217Greg Clayton FileSpec m_symbol_file; 42449ce8969d3154e1560106cfe530444c09410f217Greg Clayton ArchSpec m_arch; 42549ce8969d3154e1560106cfe530444c09410f217Greg Clayton UUID m_uuid; 42649ce8969d3154e1560106cfe530444c09410f217Greg Clayton ConstString m_object_name; 42749ce8969d3154e1560106cfe530444c09410f217Greg Clayton uint64_t m_object_offset; 4280e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton TimeValue m_object_mod_time; 42949ce8969d3154e1560106cfe530444c09410f217Greg Clayton mutable PathMappingList m_source_mappings; 43049ce8969d3154e1560106cfe530444c09410f217Greg Clayton}; 43149ce8969d3154e1560106cfe530444c09410f217Greg Clayton 43236b877d2d27f7d1890f2d13807a3addb216648e2Greg Claytonclass ModuleSpecList 43336b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton{ 43436b877d2d27f7d1890f2d13807a3addb216648e2Greg Claytonpublic: 43536b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton ModuleSpecList () : 43636b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton m_specs(), 43736b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton m_mutex(Mutex::eMutexTypeRecursive) 43836b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton { 43936b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton } 44036b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton 44136b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton ModuleSpecList (const ModuleSpecList &rhs) : 44236b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton m_specs(), 44336b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton m_mutex(Mutex::eMutexTypeRecursive) 44436b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton { 44536b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton Mutex::Locker lhs_locker(m_mutex); 44636b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton Mutex::Locker rhs_locker(rhs.m_mutex); 44736b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton m_specs = rhs.m_specs; 44836b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton } 44936b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton 45036b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton ~ModuleSpecList () 45136b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton { 45236b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton } 453f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton 454f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton ModuleSpecList & 455f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton operator = (const ModuleSpecList &rhs) 456f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 457f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (this != &rhs) 458f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 459f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton Mutex::Locker lhs_locker(m_mutex); 460f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton Mutex::Locker rhs_locker(rhs.m_mutex); 461f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton m_specs = rhs.m_specs; 462f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 463f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return *this; 464f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 465f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton 46636b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton size_t 46736b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton GetSize() const 46836b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton { 46936b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton Mutex::Locker locker(m_mutex); 47036b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton return m_specs.size(); 47136b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton } 47236b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton 47336b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton void 47436b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton Clear () 47536b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton { 47636b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton Mutex::Locker locker(m_mutex); 47736b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton m_specs.clear(); 47836b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton } 47936b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton 48036b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton void 48136b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton Append (const ModuleSpec &spec) 48236b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton { 48336b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton Mutex::Locker locker(m_mutex); 48436b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton m_specs.push_back (spec); 48536b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton } 486f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton 487f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton void 488f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton Append (const ModuleSpecList &rhs) 489f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 490f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton Mutex::Locker lhs_locker(m_mutex); 491f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton Mutex::Locker rhs_locker(rhs.m_mutex); 492f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton m_specs.insert(m_specs.end(), rhs.m_specs.begin(), rhs.m_specs.end()); 493f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 494f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton 4957980d35608225dc71b3dd946d4c3aea85bc24e85Greg Clayton // The index "i" must be valid and this can't be used in 4967980d35608225dc71b3dd946d4c3aea85bc24e85Greg Clayton // multi-threaded code as no mutex lock is taken. 4977980d35608225dc71b3dd946d4c3aea85bc24e85Greg Clayton ModuleSpec & 4987980d35608225dc71b3dd946d4c3aea85bc24e85Greg Clayton GetModuleSpecRefAtIndex (size_t i) 4997980d35608225dc71b3dd946d4c3aea85bc24e85Greg Clayton { 5007980d35608225dc71b3dd946d4c3aea85bc24e85Greg Clayton return m_specs[i]; 5017980d35608225dc71b3dd946d4c3aea85bc24e85Greg Clayton } 50236b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton bool 50336b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton GetModuleSpecAtIndex (size_t i, ModuleSpec &module_spec) const 50436b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton { 50536b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton Mutex::Locker locker(m_mutex); 50636b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton if (i < m_specs.size()) 50736b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton { 50836b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton module_spec = m_specs[i]; 50936b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton return true; 51036b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton } 51136b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton module_spec.Clear(); 51236b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton return false; 51336b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton } 51436b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton 515f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton 51636b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton bool 51736b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton FindMatchingModuleSpec (const ModuleSpec &module_spec, ModuleSpec &match_module_spec) const 51836b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton { 51936b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton Mutex::Locker locker(m_mutex); 520f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton bool exact_arch_match = true; 52136b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton for (auto spec: m_specs) 52236b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton { 523f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (spec.Matches(module_spec, exact_arch_match)) 524f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 525f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton match_module_spec = spec; 526f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return true; 527f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 52836b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton } 52936b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton 53036b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton // If there was an architecture, retry with a compatible arch 531f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (module_spec.GetArchitecturePtr()) 53236b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton { 533f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton exact_arch_match = false; 53436b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton for (auto spec: m_specs) 53536b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton { 536f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (spec.Matches(module_spec, exact_arch_match)) 537f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 538f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton match_module_spec = spec; 539f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return true; 540f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 54136b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton } 54236b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton } 54336b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton match_module_spec.Clear(); 54436b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton return false; 54536b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton } 546f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton 547f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton size_t 548f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton FindMatchingModuleSpecs (const ModuleSpec &module_spec, ModuleSpecList &matching_list) const 549f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 550f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton Mutex::Locker locker(m_mutex); 551f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton bool exact_arch_match = true; 552f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton const size_t initial_match_count = matching_list.GetSize(); 553f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton for (auto spec: m_specs) 554f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 555f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (spec.Matches(module_spec, exact_arch_match)) 556f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton matching_list.Append (spec); 557f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 558f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton 559f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton // If there was an architecture, retry with a compatible arch if no matches were found 560f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (module_spec.GetArchitecturePtr() && (initial_match_count == matching_list.GetSize())) 561f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 562f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton exact_arch_match = false; 563f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton for (auto spec: m_specs) 564f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 565f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (spec.Matches(module_spec, exact_arch_match)) 566f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton matching_list.Append (spec); 567f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 568f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 569f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return matching_list.GetSize() - initial_match_count; 570f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 571f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton 572f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton void 573f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton Dump (Stream &strm) 574f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 575f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton Mutex::Locker locker(m_mutex); 576f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton uint32_t idx = 0; 577f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton for (auto spec: m_specs) 578f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton { 579f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton strm.Printf("[%u] ", idx); 580f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton spec.Dump (strm); 581f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton strm.EOL(); 582f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton ++idx; 583f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 584f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton } 58536b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton 58636b877d2d27f7d1890f2d13807a3addb216648e2Greg Claytonprotected: 58736b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton typedef std::vector<ModuleSpec> collection; ///< The module collection type. 58836b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton collection m_specs; ///< The collection of modules. 58936b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton mutable Mutex m_mutex; 59036b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton}; 59136b877d2d27f7d1890f2d13807a3addb216648e2Greg Clayton 59249ce8969d3154e1560106cfe530444c09410f217Greg Clayton} // namespace lldb_private 59349ce8969d3154e1560106cfe530444c09410f217Greg Clayton 59449ce8969d3154e1560106cfe530444c09410f217Greg Clayton#endif // liblldb_ModuleSpec_h_ 595