ObjectFile.cpp revision 24a6bd9835ed1655984397b0cdf35127e47681e9
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- ObjectFile.cpp ------------------------------------------*- 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#include "lldb/lldb-private.h" 11e40b6424d9e49306392bec4b44060da36414c382Greg Clayton#include "lldb/lldb-private-log.h" 12e40b6424d9e49306392bec4b44060da36414c382Greg Clayton#include "lldb/Core/Log.h" 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Module.h" 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/PluginManager.h" 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/RegularExpression.h" 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Timer.h" 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/ObjectFile.h" 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/ObjectContainer.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/SymbolFile.h" 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb; 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private; 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24e40b6424d9e49306392bec4b44060da36414c382Greg ClaytonObjectFileSP 25e40b6424d9e49306392bec4b44060da36414c382Greg ClaytonObjectFile::FindPlugin (Module* module, const FileSpec* file, addr_t file_offset, addr_t file_size) 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Timer scoped_timer (__PRETTY_FUNCTION__, 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner "ObjectFile::FindPlugin (module = %s/%s, file = %p, file_offset = 0x%z8.8x, file_size = 0x%z8.8x)", 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner module->GetFileSpec().GetDirectory().AsCString(), 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner module->GetFileSpec().GetFilename().AsCString(), 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner file, file_offset, file_size); 32e40b6424d9e49306392bec4b44060da36414c382Greg Clayton ObjectFileSP object_file_sp; 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (module != NULL) 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (file) 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (file_size == 0) 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner file_size = file->GetByteSize(); 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (file_size == 0) 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Check for archive file with format "/path/to/archive.a(object.o)" 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner char path_with_object[PATH_MAX*2]; 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner module->GetFileSpec().GetPath(path_with_object, sizeof(path_with_object)); 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner RegularExpression g_object_regex("(.*)\\(([^\\)]+)\\)$"); 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (g_object_regex.Execute (path_with_object, 2)) 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner FileSpec archive_file; 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::string path; 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::string object; 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (g_object_regex.GetMatchAtIndex (path_with_object, 1, path) && 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner g_object_regex.GetMatchAtIndex (path_with_object, 2, object)) 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 56537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton archive_file.SetFile (path.c_str(), false); 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner file_size = archive_file.GetByteSize(); 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (file_size > 0) 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner module->SetFileSpecAndObjectName (archive_file, ConstString(object.c_str())); 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6489e4bae3cbb26e566dbbff1e717c95385d126c48Johnny Chen // No need to delegate further if (file_offset, file_size) exceeds the total file size. 6589e4bae3cbb26e566dbbff1e717c95385d126c48Johnny Chen // This is the base case. 66b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// if (file_offset + file_size > file->GetByteSize()) 67b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// return NULL; 6889e4bae3cbb26e566dbbff1e717c95385d126c48Johnny Chen 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DataBufferSP file_header_data_sp(file->ReadFileContents(file_offset, 512)); 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t idx; 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Check if this is a normal object file by iterating through 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // all object file plugin instances. 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ObjectFileCreateInstance create_object_file_callback; 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner for (idx = 0; (create_object_file_callback = PluginManager::GetObjectFileCreateCallbackAtIndex(idx)) != NULL; ++idx) 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 77e40b6424d9e49306392bec4b44060da36414c382Greg Clayton object_file_sp.reset (create_object_file_callback(module, file_header_data_sp, file, file_offset, file_size)); 78e40b6424d9e49306392bec4b44060da36414c382Greg Clayton if (object_file_sp.get()) 79e40b6424d9e49306392bec4b44060da36414c382Greg Clayton return object_file_sp; 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Check if this is a object container by iterating through 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // all object container plugin instances and then trying to get 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // an object file from the container. 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ObjectContainerCreateInstance create_object_container_callback; 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner for (idx = 0; (create_object_container_callback = PluginManager::GetObjectContainerCreateCallbackAtIndex(idx)) != NULL; ++idx) 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::auto_ptr<ObjectContainer> object_container_ap(create_object_container_callback(module, file_header_data_sp, file, file_offset, file_size)); 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (object_container_ap.get()) 91e40b6424d9e49306392bec4b44060da36414c382Greg Clayton object_file_sp = object_container_ap->GetObjectFile(file); 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 93e40b6424d9e49306392bec4b44060da36414c382Greg Clayton if (object_file_sp.get()) 94e40b6424d9e49306392bec4b44060da36414c382Greg Clayton return object_file_sp; 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 98e40b6424d9e49306392bec4b44060da36414c382Greg Clayton // We didn't find it, so clear our shared pointer in case it 99e40b6424d9e49306392bec4b44060da36414c382Greg Clayton // contains anything and return an empty shared pointer 100e40b6424d9e49306392bec4b44060da36414c382Greg Clayton object_file_sp.reset(); 101e40b6424d9e49306392bec4b44060da36414c382Greg Clayton return object_file_sp; 102e40b6424d9e49306392bec4b44060da36414c382Greg Clayton} 103e40b6424d9e49306392bec4b44060da36414c382Greg Clayton 104e40b6424d9e49306392bec4b44060da36414c382Greg ClaytonObjectFile::ObjectFile (Module* module, 105e40b6424d9e49306392bec4b44060da36414c382Greg Clayton const FileSpec *file_spec_ptr, 106e40b6424d9e49306392bec4b44060da36414c382Greg Clayton addr_t offset, 107e40b6424d9e49306392bec4b44060da36414c382Greg Clayton addr_t length, 108e40b6424d9e49306392bec4b44060da36414c382Greg Clayton DataBufferSP& headerDataSP) : 109e40b6424d9e49306392bec4b44060da36414c382Greg Clayton ModuleChild (module), 110e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_file (), // This file could be different from the original module's file 111e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_type (eTypeInvalid), 112e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_strata (eStrataInvalid), 113e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_offset (offset), 114e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_length (length), 115e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_data (headerDataSP, endian::InlHostByteOrder(), 4), 116e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_unwind_table (*this) 117e40b6424d9e49306392bec4b44060da36414c382Greg Clayton{ 118e40b6424d9e49306392bec4b44060da36414c382Greg Clayton if (file_spec_ptr) 119e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_file = *file_spec_ptr; 120e40b6424d9e49306392bec4b44060da36414c382Greg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_OBJECT)); 121e40b6424d9e49306392bec4b44060da36414c382Greg Clayton if (log) 122e40b6424d9e49306392bec4b44060da36414c382Greg Clayton { 123e40b6424d9e49306392bec4b44060da36414c382Greg Clayton if (m_file) 124e40b6424d9e49306392bec4b44060da36414c382Greg Clayton { 125e40b6424d9e49306392bec4b44060da36414c382Greg Clayton log->Printf ("%p ObjectFile::ObjectFile () module = %s/%s, file = %s/%s, offset = 0x%8.8llx, size = %llu\n", 126e40b6424d9e49306392bec4b44060da36414c382Greg Clayton this, 127e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_module->GetFileSpec().GetDirectory().AsCString(), 128e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_module->GetFileSpec().GetFilename().AsCString(), 129e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_file.GetDirectory().AsCString(), 130e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_file.GetFilename().AsCString(), 131e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_offset, 132e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_length); 133e40b6424d9e49306392bec4b44060da36414c382Greg Clayton } 134e40b6424d9e49306392bec4b44060da36414c382Greg Clayton else 135e40b6424d9e49306392bec4b44060da36414c382Greg Clayton { 136e40b6424d9e49306392bec4b44060da36414c382Greg Clayton log->Printf ("%p ObjectFile::ObjectFile () module = %s/%s, file = <NULL>, offset = 0x%8.8llx, size = %llu\n", 137e40b6424d9e49306392bec4b44060da36414c382Greg Clayton this, 138e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_module->GetFileSpec().GetDirectory().AsCString(), 139e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_module->GetFileSpec().GetFilename().AsCString(), 140e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_offset, 141e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_length); 142e40b6424d9e49306392bec4b44060da36414c382Greg Clayton } 143e40b6424d9e49306392bec4b44060da36414c382Greg Clayton } 144e40b6424d9e49306392bec4b44060da36414c382Greg Clayton} 145e40b6424d9e49306392bec4b44060da36414c382Greg Clayton 146e40b6424d9e49306392bec4b44060da36414c382Greg ClaytonObjectFile::~ObjectFile() 147e40b6424d9e49306392bec4b44060da36414c382Greg Clayton{ 148e40b6424d9e49306392bec4b44060da36414c382Greg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_OBJECT)); 149e40b6424d9e49306392bec4b44060da36414c382Greg Clayton if (log) 150e40b6424d9e49306392bec4b44060da36414c382Greg Clayton { 151e40b6424d9e49306392bec4b44060da36414c382Greg Clayton if (m_file) 152e40b6424d9e49306392bec4b44060da36414c382Greg Clayton { 153e40b6424d9e49306392bec4b44060da36414c382Greg Clayton log->Printf ("%p ObjectFile::~ObjectFile () module = %s/%s, file = %s/%s, offset = 0x%8.8llx, size = %llu\n", 154e40b6424d9e49306392bec4b44060da36414c382Greg Clayton this, 155e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_module->GetFileSpec().GetDirectory().AsCString(), 156e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_module->GetFileSpec().GetFilename().AsCString(), 157e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_file.GetDirectory().AsCString(), 158e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_file.GetFilename().AsCString(), 159e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_offset, 160e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_length); 161e40b6424d9e49306392bec4b44060da36414c382Greg Clayton } 162e40b6424d9e49306392bec4b44060da36414c382Greg Clayton else 163e40b6424d9e49306392bec4b44060da36414c382Greg Clayton { 164e40b6424d9e49306392bec4b44060da36414c382Greg Clayton log->Printf ("%p ObjectFile::~ObjectFile () module = %s/%s, file = <NULL>, offset = 0x%8.8llx, size = %llu\n", 165e40b6424d9e49306392bec4b44060da36414c382Greg Clayton this, 166e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_module->GetFileSpec().GetDirectory().AsCString(), 167e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_module->GetFileSpec().GetFilename().AsCString(), 168e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_offset, 169e40b6424d9e49306392bec4b44060da36414c382Greg Clayton m_length); 170e40b6424d9e49306392bec4b44060da36414c382Greg Clayton } 171e40b6424d9e49306392bec4b44060da36414c382Greg Clayton } 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 1737508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham 1747508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Inghambool 1757508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim InghamObjectFile::SetModulesArchitecture (const ArchSpec &new_arch) 1767508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham{ 1777508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham return m_module->SetArchitecture (new_arch); 1787508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham} 1797508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham 180b344843f75ef893762c93fd0a22d2d45712ce74dGreg ClaytonAddressClass 181e40b6424d9e49306392bec4b44060da36414c382Greg ClaytonObjectFile::GetAddressClass (addr_t file_addr) 182b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 183b1888f24fa181489840b9acf193e224d125d0776Greg Clayton Symtab *symtab = GetSymtab(); 184b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (symtab) 185b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 186b1888f24fa181489840b9acf193e224d125d0776Greg Clayton Symbol *symbol = symtab->FindSymbolContainingFileAddress(file_addr); 187b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (symbol) 188b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 189b1888f24fa181489840b9acf193e224d125d0776Greg Clayton const AddressRange *range_ptr = symbol->GetAddressRangePtr(); 190b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (range_ptr) 191b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 192b1888f24fa181489840b9acf193e224d125d0776Greg Clayton const Section *section = range_ptr->GetBaseAddress().GetSection(); 193b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (section) 194b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 195b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton const SectionType section_type = section->GetType(); 196b1888f24fa181489840b9acf193e224d125d0776Greg Clayton switch (section_type) 197b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 198b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSectionTypeInvalid: return eAddressClassUnknown; 199b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSectionTypeCode: return eAddressClassCode; 200b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSectionTypeContainer: return eAddressClassUnknown; 20124a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeData: 20224a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDataCString: 20324a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDataCStringPointers: 20424a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDataSymbolAddress: 20524a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeData4: 20624a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeData8: 20724a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeData16: 20824a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDataPointers: 20924a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeZeroFill: 21024a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDataObjCMessageRefs: 21124a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDataObjCCFStrings: 21224a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton return eAddressClassData; 21324a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDebug: 21424a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDWARFDebugAbbrev: 21524a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDWARFDebugAranges: 21624a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDWARFDebugFrame: 21724a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDWARFDebugInfo: 21824a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDWARFDebugLine: 21924a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDWARFDebugLoc: 22024a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDWARFDebugMacInfo: 22124a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDWARFDebugPubNames: 22224a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDWARFDebugPubTypes: 22324a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDWARFDebugRanges: 22424a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDWARFDebugStr: 22524a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDWARFAppleNames: 22624a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDWARFAppleTypes: 22724a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDWARFAppleNamespaces: 22824a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton case eSectionTypeDWARFAppleObjC: 22924a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton return eAddressClassDebug; 230b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSectionTypeEHFrame: return eAddressClassRuntime; 231b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSectionTypeOther: return eAddressClassUnknown; 232b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 233b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 234b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 235b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 236b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton const SymbolType symbol_type = symbol->GetType(); 237b1888f24fa181489840b9acf193e224d125d0776Greg Clayton switch (symbol_type) 238b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 239b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeAny: return eAddressClassUnknown; 240b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeAbsolute: return eAddressClassUnknown; 241b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeExtern: return eAddressClassUnknown; 242b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeCode: return eAddressClassCode; 243b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeTrampoline: return eAddressClassCode; 244b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeData: return eAddressClassData; 245b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeRuntime: return eAddressClassRuntime; 246b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeException: return eAddressClassRuntime; 247b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeSourceFile: return eAddressClassDebug; 248b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeHeaderFile: return eAddressClassDebug; 249b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeObjectFile: return eAddressClassDebug; 250b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeCommonBlock: return eAddressClassDebug; 251b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeBlock: return eAddressClassDebug; 252b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeLocal: return eAddressClassData; 253b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeParam: return eAddressClassData; 254b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeVariable: return eAddressClassData; 255b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeVariableType: return eAddressClassDebug; 256b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeLineEntry: return eAddressClassDebug; 257b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeLineHeader: return eAddressClassDebug; 258b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeScopeBegin: return eAddressClassDebug; 259b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeScopeEnd: return eAddressClassDebug; 260b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeAdditional: return eAddressClassUnknown; 261b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeCompiler: return eAddressClassDebug; 262b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeInstrumentation:return eAddressClassDebug; 263b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case eSymbolTypeUndefined: return eAddressClassUnknown; 264b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 265b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 266b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 267b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return eAddressClassUnknown; 268b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 269b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 270e40b6424d9e49306392bec4b44060da36414c382Greg ClaytonObjectFileSP 271e40b6424d9e49306392bec4b44060da36414c382Greg ClaytonObjectFile::GetSP () 272e40b6424d9e49306392bec4b44060da36414c382Greg Clayton{ 273e40b6424d9e49306392bec4b44060da36414c382Greg Clayton // This object contains an instrusive ref count base class so we can 274e40b6424d9e49306392bec4b44060da36414c382Greg Clayton // easily make a shared pointer to this object 275e40b6424d9e49306392bec4b44060da36414c382Greg Clayton return ObjectFileSP (this); 276e40b6424d9e49306392bec4b44060da36414c382Greg Clayton} 277e40b6424d9e49306392bec4b44060da36414c382Greg Clayton 278b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 279