Index: lib/Makefile =================================================================== --- lib/Makefile +++ lib/Makefile @@ -101,7 +101,9 @@ lldbPluginSymbolVendorMacOSX.a \ lldbPluginProcessDarwin.a \ lldbPluginProcessMachCore.a \ - lldbPluginSystemRuntimeMacOSX.a + lldbPluginSystemRuntimeMacOSX.a \ + lldbPluginProcessElfCore.a \ + lldbPluginJITLoaderGDB.a endif ifeq ($(HOST_OS),Linux) Index: source/Core/Section.cpp =================================================================== --- source/Core/Section.cpp +++ source/Core/Section.cpp @@ -142,7 +142,7 @@ if (load_base_addr != LLDB_INVALID_ADDRESS) load_base_addr += GetOffset(); } - else + if (load_base_addr == LLDB_INVALID_ADDRESS) { load_base_addr = target->GetSectionLoadList().GetSectionLoadAddress (const_cast
(this)->shared_from_this()); } Index: source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp =================================================================== --- source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp +++ source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp @@ -144,6 +144,27 @@ return instance->ReadJITDescriptor(false); } +static void updateSectionLoadAddress(const SectionList §ion_list, Target &target, uint64_t symbolfile_addr, uint64_t symbolfile_size) +{ + const uint32_t num_sections = section_list.GetSize(); + for (uint32_t i = 0; iIsFake()) { + updateSectionLoadAddress(section_sp->GetChildren(), target, symbolfile_addr, symbolfile_size); + } + else if (section_sp->GetFileAddress() > 0x100000) + target.SetSectionLoadAddress(section_sp, section_sp->GetFileAddress(), true); + else { + section_sp->SetFileAddress(symbolfile_addr+section_sp->GetFileOffset()); + target.SetSectionLoadAddress(section_sp, symbolfile_addr+section_sp->GetFileOffset(), true); + } + } + } +} + bool JITLoaderGDB::ReadJITDescriptor(bool all_entries) { @@ -212,11 +233,30 @@ m_jit_objects.insert( std::pair( symbolfile_addr, module_sp)); - module_sp->SetLoadAddress(target, 0, true, changed); + if (module_sp->GetObjectFile()->GetPluginName() == ConstString("mach-o")) + { + ObjectFile *image_object_file = module_sp->GetObjectFile(); + if (image_object_file) + { + const SectionList *section_list = image_object_file->GetSectionList (); + if (section_list) + { + updateSectionLoadAddress(*section_list, target, symbolfile_addr, symbolfile_size); + } + } + } + else + { + module_sp->SetLoadAddress(target, 0, true, changed); + } // load the symbol table right away module_sp->GetObjectFile()->GetSymtab(); + module_sp->GetSymbolVendor()->GetNumCompileUnits(); + module_sp->GetSymbolVendor()->GetCompileUnitAtIndex(0); + module_sp->ParseAllDebugSymbols(); + module_list.AppendIfNeeded(module_sp); ModuleList module_list; @@ -295,9 +335,7 @@ JITLoaderGDB::CreateInstance(Process *process, bool force) { JITLoaderSP jit_loader_sp; - ArchSpec arch (process->GetTarget().GetArchitecture()); - if (arch.GetTriple().getVendor() != llvm::Triple::Apple) - jit_loader_sp.reset(new JITLoaderGDB(process)); + jit_loader_sp.reset(new JITLoaderGDB(process)); return jit_loader_sp; } Index: source/Plugins/Makefile =================================================================== --- source/Plugins/Makefile +++ source/Plugins/Makefile @@ -33,6 +33,8 @@ #DIRS += Process/MacOSX-User DIRS += Process/mach-core DIRS += SystemRuntime/MacOSX +DIRS += Process/elf-core +DIRS += JITLoader/GDB endif ifeq ($(HOST_OS),Linux) Index: source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp =================================================================== --- source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp +++ source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp @@ -1986,37 +1986,37 @@ } } } + } - else + + nlist_data.SetData (m_data, + symtab_load_command.symoff, + nlist_data_byte_size); + strtab_data.SetData (m_data, + symtab_load_command.stroff, + strtab_data_byte_size); + + if (dyld_info.export_size > 0) { - nlist_data.SetData (m_data, - symtab_load_command.symoff, - nlist_data_byte_size); - strtab_data.SetData (m_data, - symtab_load_command.stroff, - strtab_data_byte_size); - - if (dyld_info.export_size > 0) - { - dyld_trie_data.SetData (m_data, - dyld_info.export_off, - dyld_info.export_size); - } + dyld_trie_data.SetData (m_data, + dyld_info.export_off, + dyld_info.export_size); + } - if (m_dysymtab.nindirectsyms != 0) - { - indirect_symbol_index_data.SetData (m_data, - m_dysymtab.indirectsymoff, - m_dysymtab.nindirectsyms * 4); - } - if (function_starts_load_command.cmd) - { - function_starts_data.SetData (m_data, - function_starts_load_command.dataoff, - function_starts_load_command.datasize); - } + if (m_dysymtab.nindirectsyms != 0) + { + indirect_symbol_index_data.SetData (m_data, + m_dysymtab.indirectsymoff, + m_dysymtab.nindirectsyms * 4); + } + if (function_starts_load_command.cmd) + { + function_starts_data.SetData (m_data, + function_starts_load_command.dataoff, + function_starts_load_command.datasize); } + if (nlist_data.GetByteSize() == 0 && memory_module_load_level == eMemoryModuleLoadLevelComplete) { if (log)