aboutsummaryrefslogtreecommitdiff
path: root/lldb/source
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source')
-rw-r--r--lldb/source/API/SBBreakpoint.cpp4
-rw-r--r--lldb/source/Breakpoint/BreakpointLocationList.cpp3
-rw-r--r--lldb/source/Commands/CommandObjectDisassemble.cpp6
-rw-r--r--lldb/source/Commands/CommandObjectRegister.cpp4
-rw-r--r--lldb/source/Commands/CommandObjectSource.cpp9
-rw-r--r--lldb/source/Commands/CommandObjectTarget.cpp15
-rw-r--r--lldb/source/Core/Address.cpp10
-rw-r--r--lldb/source/Core/Disassembler.cpp10
-rw-r--r--lldb/source/Core/DumpDataExtractor.cpp10
-rw-r--r--lldb/source/Core/FormatEntity.cpp2
-rw-r--r--lldb/source/Core/Section.cpp5
-rw-r--r--lldb/source/Core/Value.cpp5
-rw-r--r--lldb/source/DataFormatters/CXXFunctionPointer.cpp5
-rw-r--r--lldb/source/Expression/ObjectFileJIT.cpp4
-rw-r--r--lldb/source/Plugins/Architecture/Mips/ArchitectureMips.cpp3
-rw-r--r--lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.cpp6
-rw-r--r--lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.cpp2
-rw-r--r--lldb/source/Plugins/DynamicLoader/Static/DynamicLoaderStatic.cpp4
-rw-r--r--lldb/source/Plugins/InstrumentationRuntime/TSan/InstrumentationRuntimeTSan.cpp9
-rw-r--r--lldb/source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp2
-rw-r--r--lldb/source/Plugins/LanguageRuntime/CPlusPlus/CPPLanguageRuntime.cpp18
-rw-r--r--lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp3
-rw-r--r--lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp10
-rw-r--r--lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp2
-rw-r--r--lldb/source/Plugins/ObjectFile/Placeholder/ObjectFilePlaceholder.cpp3
-rw-r--r--lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp4
-rw-r--r--lldb/source/Plugins/Trace/intel-pt/TraceIntelPTBundleSaver.cpp3
-rw-r--r--lldb/source/Symbol/ObjectFile.cpp3
-rw-r--r--lldb/source/Target/ProcessTrace.cpp2
-rw-r--r--lldb/source/Target/SectionLoadHistory.cpp6
-rw-r--r--lldb/source/Target/Target.cpp25
-rw-r--r--lldb/source/Target/ThreadPlanStepInRange.cpp3
-rw-r--r--lldb/source/Target/ThreadPlanTracer.cpp3
33 files changed, 102 insertions, 101 deletions
diff --git a/lldb/source/API/SBBreakpoint.cpp b/lldb/source/API/SBBreakpoint.cpp
index b2ed034..87fadbc 100644
--- a/lldb/source/API/SBBreakpoint.cpp
+++ b/lldb/source/API/SBBreakpoint.cpp
@@ -137,7 +137,7 @@ SBBreakpointLocation SBBreakpoint::FindLocationByAddress(addr_t vm_addr) {
bkpt_sp->GetTarget().GetAPIMutex());
Address address;
Target &target = bkpt_sp->GetTarget();
- if (!target.GetSectionLoadList().ResolveLoadAddress(vm_addr, address)) {
+ if (!target.ResolveLoadAddress(vm_addr, address)) {
address.SetRawAddress(vm_addr);
}
sb_bp_location.SetLocation(bkpt_sp->FindLocationByAddress(address));
@@ -157,7 +157,7 @@ break_id_t SBBreakpoint::FindLocationIDByAddress(addr_t vm_addr) {
bkpt_sp->GetTarget().GetAPIMutex());
Address address;
Target &target = bkpt_sp->GetTarget();
- if (!target.GetSectionLoadList().ResolveLoadAddress(vm_addr, address)) {
+ if (!target.ResolveLoadAddress(vm_addr, address)) {
address.SetRawAddress(vm_addr);
}
break_id = bkpt_sp->FindLocationIDByAddress(address);
diff --git a/lldb/source/Breakpoint/BreakpointLocationList.cpp b/lldb/source/Breakpoint/BreakpointLocationList.cpp
index e0f1b9b..0240305 100644
--- a/lldb/source/Breakpoint/BreakpointLocationList.cpp
+++ b/lldb/source/Breakpoint/BreakpointLocationList.cpp
@@ -103,8 +103,7 @@ BreakpointLocationList::FindByAddress(const Address &addr) const {
so_addr = addr;
} else {
// Try and resolve as a load address if possible.
- m_owner.GetTarget().GetSectionLoadList().ResolveLoadAddress(
- addr.GetOffset(), so_addr);
+ m_owner.GetTarget().ResolveLoadAddress(addr.GetOffset(), so_addr);
if (!so_addr.IsValid()) {
// The address didn't resolve, so just set to passed in addr.
so_addr = addr;
diff --git a/lldb/source/Commands/CommandObjectDisassemble.cpp b/lldb/source/Commands/CommandObjectDisassemble.cpp
index 6db4b26..5b131fe 100644
--- a/lldb/source/Commands/CommandObjectDisassemble.cpp
+++ b/lldb/source/Commands/CommandObjectDisassemble.cpp
@@ -269,10 +269,10 @@ CommandObjectDisassemble::GetContainingAddressRanges() {
};
Target &target = GetTarget();
- if (!target.GetSectionLoadList().IsEmpty()) {
+ if (target.HasLoadedSections()) {
Address symbol_containing_address;
- if (target.GetSectionLoadList().ResolveLoadAddress(
- m_options.symbol_containing_addr, symbol_containing_address)) {
+ if (target.ResolveLoadAddress(m_options.symbol_containing_addr,
+ symbol_containing_address)) {
get_range(symbol_containing_address);
}
} else {
diff --git a/lldb/source/Commands/CommandObjectRegister.cpp b/lldb/source/Commands/CommandObjectRegister.cpp
index 4e047cc..fbb92e5 100644
--- a/lldb/source/Commands/CommandObjectRegister.cpp
+++ b/lldb/source/Commands/CommandObjectRegister.cpp
@@ -95,8 +95,8 @@ public:
addr_t reg_addr = reg_value.GetAsUInt64(LLDB_INVALID_ADDRESS);
if (reg_addr != LLDB_INVALID_ADDRESS) {
Address so_reg_addr;
- if (exe_ctx.GetTargetRef().GetSectionLoadList().ResolveLoadAddress(
- reg_addr, so_reg_addr)) {
+ if (exe_ctx.GetTargetRef().ResolveLoadAddress(reg_addr,
+ so_reg_addr)) {
strm.PutCString(" ");
so_reg_addr.Dump(&strm, exe_ctx.GetBestExecutionContextScope(),
Address::DumpStyleResolvedDescription);
diff --git a/lldb/source/Commands/CommandObjectSource.cpp b/lldb/source/Commands/CommandObjectSource.cpp
index c8295fd..9367832 100644
--- a/lldb/source/Commands/CommandObjectSource.cpp
+++ b/lldb/source/Commands/CommandObjectSource.cpp
@@ -302,7 +302,7 @@ protected:
size_t num_matches = 0;
assert(module_list.GetSize() > 0);
Target &target = GetTarget();
- if (target.GetSectionLoadList().IsEmpty()) {
+ if (!target.HasLoadedSections()) {
// The target isn't loaded yet, we need to lookup the file address in all
// modules. Note: the module list option does not apply to addresses.
const size_t num_modules = module_list.GetSize();
@@ -328,7 +328,7 @@ protected:
} else {
// The target has some things loaded, resolve this address to a compile
// unit + file + line and display
- if (target.GetSectionLoadList().ResolveLoadAddress(addr, so_addr)) {
+ if (target.ResolveLoadAddress(addr, so_addr)) {
ModuleSP module_sp(so_addr.GetModule());
// Check to make sure this module is in our list.
if (module_sp && module_list.GetIndexForModule(module_sp.get()) !=
@@ -959,7 +959,7 @@ protected:
StreamString error_strm;
SymbolContextList sc_list;
- if (target.GetSectionLoadList().IsEmpty()) {
+ if (!target.HasLoadedSections()) {
// The target isn't loaded yet, we need to lookup the file address in
// all modules
const ModuleList &module_list = target.GetImages();
@@ -987,8 +987,7 @@ protected:
} else {
// The target has some things loaded, resolve this address to a compile
// unit + file + line and display
- if (target.GetSectionLoadList().ResolveLoadAddress(m_options.address,
- so_addr)) {
+ if (target.ResolveLoadAddress(m_options.address, so_addr)) {
ModuleSP module_sp(so_addr.GetModule());
if (module_sp) {
SymbolContext sc;
diff --git a/lldb/source/Commands/CommandObjectTarget.cpp b/lldb/source/Commands/CommandObjectTarget.cpp
index 307f4f6..d8265e4 100644
--- a/lldb/source/Commands/CommandObjectTarget.cpp
+++ b/lldb/source/Commands/CommandObjectTarget.cpp
@@ -1522,8 +1522,8 @@ static bool LookupAddressInModule(CommandInterpreter &interpreter, Stream &strm,
Address so_addr;
SymbolContext sc;
Target *target = interpreter.GetExecutionContext().GetTargetPtr();
- if (target && !target->GetSectionLoadList().IsEmpty()) {
- if (!target->GetSectionLoadList().ResolveLoadAddress(addr, so_addr))
+ if (target && target->HasLoadedSections()) {
+ if (!target->ResolveLoadAddress(addr, so_addr))
return false;
else if (so_addr.GetModule().get() != module)
return false;
@@ -2974,8 +2974,8 @@ protected:
sect_name);
break;
} else {
- if (target.GetSectionLoadList().SetSectionLoadAddress(
- section_sp, load_addr))
+ if (target.SetSectionLoadAddress(section_sp,
+ load_addr))
changed = true;
result.AppendMessageWithFormat(
"section '%s' loaded at 0x%" PRIx64 "\n",
@@ -3329,7 +3329,7 @@ protected:
if (objfile) {
Address base_addr(objfile->GetBaseAddress());
if (base_addr.IsValid()) {
- if (!target.GetSectionLoadList().IsEmpty()) {
+ if (target.HasLoadedSections()) {
lldb::addr_t load_addr = base_addr.GetLoadAddress(&target);
if (load_addr == LLDB_INVALID_ADDRESS) {
base_addr.Dump(&strm, &target,
@@ -3544,8 +3544,7 @@ protected:
function_options, sc_list);
} else if (m_options.m_type == eLookupTypeAddress && target) {
Address addr;
- if (target->GetSectionLoadList().ResolveLoadAddress(m_options.m_addr,
- addr)) {
+ if (target->ResolveLoadAddress(m_options.m_addr, addr)) {
SymbolContext sc;
ModuleSP module_sp(addr.GetModule());
module_sp->ResolveSymbolContextForAddress(addr,
@@ -5270,7 +5269,7 @@ public:
protected:
void DoExecute(Args &command, CommandReturnObject &result) override {
Target &target = GetTarget();
- target.GetSectionLoadList().Dump(result.GetOutputStream(), &target);
+ target.DumpSectionLoadList(result.GetOutputStream());
result.SetStatus(eReturnStatusSuccessFinishResult);
}
};
diff --git a/lldb/source/Core/Address.cpp b/lldb/source/Core/Address.cpp
index 5a4751b..1dab874 100644
--- a/lldb/source/Core/Address.cpp
+++ b/lldb/source/Core/Address.cpp
@@ -138,9 +138,8 @@ static bool ReadAddress(ExecutionContextScope *exe_scope,
// If we have any sections that are loaded, try and resolve using the
// section load list
Target *target = exe_ctx.GetTargetPtr();
- if (target && !target->GetSectionLoadList().IsEmpty()) {
- if (target->GetSectionLoadList().ResolveLoadAddress(deref_addr,
- deref_so_addr))
+ if (target && target->HasLoadedSections()) {
+ if (target->ResolveLoadAddress(deref_addr, deref_so_addr))
return true;
} else {
// If we were not running, yet able to read an integer, we must have a
@@ -1046,8 +1045,9 @@ AddressClass Address::GetAddressClass() const {
bool Address::SetLoadAddress(lldb::addr_t load_addr, Target *target,
bool allow_section_end) {
- if (target && target->GetSectionLoadList().ResolveLoadAddress(
- load_addr, *this, allow_section_end))
+ if (target && target->ResolveLoadAddress(load_addr, *this,
+ SectionLoadHistory::eStopIDNow,
+ allow_section_end))
return true;
m_section_wp.reset();
m_offset = load_addr;
diff --git a/lldb/source/Core/Disassembler.cpp b/lldb/source/Core/Disassembler.cpp
index 68e5214..b3e7c4c 100644
--- a/lldb/source/Core/Disassembler.cpp
+++ b/lldb/source/Core/Disassembler.cpp
@@ -107,11 +107,11 @@ static Address ResolveAddress(Target &target, const Address &addr) {
Address resolved_addr;
// If we weren't passed in a section offset address range, try and resolve
// it to something
- bool is_resolved = target.GetSectionLoadList().IsEmpty()
- ? target.GetImages().ResolveFileAddress(
- addr.GetOffset(), resolved_addr)
- : target.GetSectionLoadList().ResolveLoadAddress(
- addr.GetOffset(), resolved_addr);
+ bool is_resolved =
+ target.HasLoadedSections()
+ ? target.ResolveLoadAddress(addr.GetOffset(), resolved_addr)
+ : target.GetImages().ResolveFileAddress(addr.GetOffset(),
+ resolved_addr);
// We weren't able to resolve the address, just treat it as a raw address
if (is_resolved && resolved_addr.IsValid())
diff --git a/lldb/source/Core/DumpDataExtractor.cpp b/lldb/source/Core/DumpDataExtractor.cpp
index 565ee3a..7214073 100644
--- a/lldb/source/Core/DumpDataExtractor.cpp
+++ b/lldb/source/Core/DumpDataExtractor.cpp
@@ -136,10 +136,10 @@ static lldb::offset_t DumpInstructions(const DataExtractor &DE, Stream *s,
lldb::addr_t addr = base_addr + start_offset;
lldb_private::Address so_addr;
bool data_from_file = true;
- if (target_sp->GetSectionLoadList().ResolveLoadAddress(addr, so_addr)) {
+ if (target_sp->ResolveLoadAddress(addr, so_addr)) {
data_from_file = false;
} else {
- if (target_sp->GetSectionLoadList().IsEmpty() ||
+ if (!target_sp->HasLoadedSections() ||
!target_sp->GetImages().ResolveFileAddress(addr, so_addr))
so_addr.SetRawAddress(addr);
}
@@ -707,8 +707,7 @@ lldb::offset_t lldb_private::DumpDataExtractor(
TargetSP target_sp(exe_scope->CalculateTarget());
lldb_private::Address so_addr;
if (target_sp) {
- if (target_sp->GetSectionLoadList().ResolveLoadAddress(addr,
- so_addr)) {
+ if (target_sp->ResolveLoadAddress(addr, so_addr)) {
s->PutChar(' ');
so_addr.Dump(s, exe_scope, Address::DumpStyleResolvedDescription,
Address::DumpStyleModuleWithFileAddress);
@@ -719,8 +718,7 @@ lldb::offset_t lldb_private::DumpDataExtractor(
if (ProcessSP process_sp = exe_scope->CalculateProcess()) {
if (ABISP abi_sp = process_sp->GetABI()) {
addr_t addr_fixed = abi_sp->FixCodeAddress(addr);
- if (target_sp->GetSectionLoadList().ResolveLoadAddress(
- addr_fixed, so_addr)) {
+ if (target_sp->ResolveLoadAddress(addr_fixed, so_addr)) {
s->PutChar(' ');
s->Printf("(0x%*.*" PRIx64 ")", (int)(2 * item_byte_size),
(int)(2 * item_byte_size), addr_fixed);
diff --git a/lldb/source/Core/FormatEntity.cpp b/lldb/source/Core/FormatEntity.cpp
index d76fc97..e132848 100644
--- a/lldb/source/Core/FormatEntity.cpp
+++ b/lldb/source/Core/FormatEntity.cpp
@@ -412,7 +412,7 @@ static bool DumpAddressAndContent(Stream &s, const SymbolContext *sc,
Target *target = Target::GetTargetFromContexts(exe_ctx, sc);
addr_t vaddr = LLDB_INVALID_ADDRESS;
- if (target && !target->GetSectionLoadList().IsEmpty())
+ if (target && target->HasLoadedSections())
vaddr = addr.GetLoadAddress(target);
if (vaddr == LLDB_INVALID_ADDRESS)
vaddr = addr.GetFileAddress();
diff --git a/lldb/source/Core/Section.cpp b/lldb/source/Core/Section.cpp
index 31273ed..a17f43f 100644
--- a/lldb/source/Core/Section.cpp
+++ b/lldb/source/Core/Section.cpp
@@ -238,7 +238,7 @@ addr_t Section::GetLoadBaseAddress(Target *target) const {
load_base_addr += GetOffset();
}
if (load_base_addr == LLDB_INVALID_ADDRESS) {
- load_base_addr = target->GetSectionLoadList().GetSectionLoadAddress(
+ load_base_addr = target->GetSectionLoadAddress(
const_cast<Section *>(this)->shared_from_this());
}
return load_base_addr;
@@ -643,8 +643,7 @@ bool SectionList::ContainsSection(user_id_t sect_id) const {
void SectionList::Dump(llvm::raw_ostream &s, unsigned indent, Target *target,
bool show_header, uint32_t depth) const {
- bool target_has_loaded_sections =
- target && !target->GetSectionLoadList().IsEmpty();
+ bool target_has_loaded_sections = target && target->HasLoadedSections();
if (show_header && !m_sections.empty()) {
s.indent(indent);
s << llvm::formatv(
diff --git a/lldb/source/Core/Value.cpp b/lldb/source/Core/Value.cpp
index bd93c04..70299cb 100644
--- a/lldb/source/Core/Value.cpp
+++ b/lldb/source/Core/Value.cpp
@@ -364,10 +364,9 @@ Status Value::GetValueAsData(ExecutionContext *exe_ctx, DataExtractor &data,
// memory sections loaded. This allows you to use "target modules
// load" to load your executable and any shared libraries, then
// execute commands where you can look at types in data sections.
- const SectionLoadList &target_sections = target->GetSectionLoadList();
- if (!target_sections.IsEmpty()) {
+ if (target->HasLoadedSections()) {
address = m_value.ULongLong(LLDB_INVALID_ADDRESS);
- if (target_sections.ResolveLoadAddress(address, file_so_addr)) {
+ if (target->ResolveLoadAddress(address, file_so_addr)) {
address_type = eAddressTypeLoad;
data.SetByteOrder(target->GetArchitecture().GetByteOrder());
data.SetAddressByteSize(
diff --git a/lldb/source/DataFormatters/CXXFunctionPointer.cpp b/lldb/source/DataFormatters/CXXFunctionPointer.cpp
index 6d56e39..e17659a 100644
--- a/lldb/source/DataFormatters/CXXFunctionPointer.cpp
+++ b/lldb/source/DataFormatters/CXXFunctionPointer.cpp
@@ -39,9 +39,8 @@ bool lldb_private::formatters::CXXFunctionPointerSummaryProvider(
Address so_addr;
Target *target = exe_ctx.GetTargetPtr();
- if (target && !target->GetSectionLoadList().IsEmpty()) {
- target->GetSectionLoadList().ResolveLoadAddress(func_ptr_address,
- so_addr);
+ if (target && target->HasLoadedSections()) {
+ target->ResolveLoadAddress(func_ptr_address, so_addr);
if (so_addr.GetSection() == nullptr) {
// If we have an address that doesn't correspond to any symbol,
// it might have authentication bits. Strip them & see if it
diff --git a/lldb/source/Expression/ObjectFileJIT.cpp b/lldb/source/Expression/ObjectFileJIT.cpp
index 9a83986..e4a6135 100644
--- a/lldb/source/Expression/ObjectFileJIT.cpp
+++ b/lldb/source/Expression/ObjectFileJIT.cpp
@@ -178,8 +178,8 @@ bool ObjectFileJIT::SetLoadAddress(Target &target, lldb::addr_t value,
SectionSP section_sp(section_list->GetSectionAtIndex(sect_idx));
if (section_sp && section_sp->GetFileSize() > 0 &&
!section_sp->IsThreadSpecific()) {
- if (target.GetSectionLoadList().SetSectionLoadAddress(
- section_sp, section_sp->GetFileAddress() + value))
+ if (target.SetSectionLoadAddress(section_sp,
+ section_sp->GetFileAddress() + value))
++num_loaded_sections;
}
}
diff --git a/lldb/source/Plugins/Architecture/Mips/ArchitectureMips.cpp b/lldb/source/Plugins/Architecture/Mips/ArchitectureMips.cpp
index 5aa9034..3748be0 100644
--- a/lldb/source/Plugins/Architecture/Mips/ArchitectureMips.cpp
+++ b/lldb/source/Plugins/Architecture/Mips/ArchitectureMips.cpp
@@ -76,8 +76,7 @@ lldb::addr_t ArchitectureMips::GetBreakableLoadAddress(lldb::addr_t addr,
Address resolved_addr;
- SectionLoadList &section_load_list = target.GetSectionLoadList();
- if (section_load_list.IsEmpty())
+ if (!target.HasLoadedSections())
// No sections are loaded, so we must assume we are not running yet and
// need to operate only on file address.
target.ResolveFileAddress(addr, resolved_addr);
diff --git a/lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.cpp b/lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.cpp
index 81c1221..76f2db0 100644
--- a/lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.cpp
+++ b/lldb/source/Plugins/Disassembler/LLVMC/DisassemblerLLVMC.cpp
@@ -1787,9 +1787,9 @@ const char *DisassemblerLLVMC::SymbolLookup(uint64_t value, uint64_t *type_ptr,
module_sp->ResolveFileAddress(value, value_so_addr);
module_sp->ResolveFileAddress(pc, pc_so_addr);
}
- } else if (target && !target->GetSectionLoadList().IsEmpty()) {
- target->GetSectionLoadList().ResolveLoadAddress(value, value_so_addr);
- target->GetSectionLoadList().ResolveLoadAddress(pc, pc_so_addr);
+ } else if (target && target->HasLoadedSections()) {
+ target->ResolveLoadAddress(value, value_so_addr);
+ target->ResolveLoadAddress(pc, pc_so_addr);
}
SymbolContext sym_ctx;
diff --git a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.cpp b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.cpp
index 82555d1..5b11059 100644
--- a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.cpp
+++ b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.cpp
@@ -368,7 +368,7 @@ bool DynamicLoaderMacOS::NotifyBreakpointHit(void *baton,
dyld_instance->UnloadAllImages();
dyld_instance->ClearDYLDModule();
process->GetTarget().GetImages().Clear();
- process->GetTarget().GetSectionLoadList().Clear();
+ process->GetTarget().ClearSectionLoadList();
addr_t all_image_infos = process->GetImageInfoAddress();
int addr_size =
diff --git a/lldb/source/Plugins/DynamicLoader/Static/DynamicLoaderStatic.cpp b/lldb/source/Plugins/DynamicLoader/Static/DynamicLoaderStatic.cpp
index e8b9237..643c965 100644
--- a/lldb/source/Plugins/DynamicLoader/Static/DynamicLoaderStatic.cpp
+++ b/lldb/source/Plugins/DynamicLoader/Static/DynamicLoaderStatic.cpp
@@ -103,8 +103,8 @@ void DynamicLoaderStatic::LoadAllImagesAtFileAddresses() {
for (size_t sect_idx = 0; sect_idx < num_sections; ++sect_idx) {
SectionSP section_sp(section_list->GetSectionAtIndex(sect_idx));
if (section_sp) {
- if (target.GetSectionLoadList().GetSectionLoadAddress(
- section_sp) != LLDB_INVALID_ADDRESS) {
+ if (target.GetSectionLoadAddress(section_sp) !=
+ LLDB_INVALID_ADDRESS) {
no_load_addresses = false;
break;
}
diff --git a/lldb/source/Plugins/InstrumentationRuntime/TSan/InstrumentationRuntimeTSan.cpp b/lldb/source/Plugins/InstrumentationRuntime/TSan/InstrumentationRuntimeTSan.cpp
index 6d3e5b7..70e3680 100644
--- a/lldb/source/Plugins/InstrumentationRuntime/TSan/InstrumentationRuntimeTSan.cpp
+++ b/lldb/source/Plugins/InstrumentationRuntime/TSan/InstrumentationRuntimeTSan.cpp
@@ -546,8 +546,7 @@ static std::string Sprintf(const char *format, ...) {
static std::string GetSymbolNameFromAddress(ProcessSP process_sp, addr_t addr) {
lldb_private::Address so_addr;
- if (!process_sp->GetTarget().GetSectionLoadList().ResolveLoadAddress(addr,
- so_addr))
+ if (!process_sp->GetTarget().ResolveLoadAddress(addr, so_addr))
return "";
lldb_private::Symbol *symbol = so_addr.CalculateSymbolContextSymbol();
@@ -561,8 +560,7 @@ static std::string GetSymbolNameFromAddress(ProcessSP process_sp, addr_t addr) {
static void GetSymbolDeclarationFromAddress(ProcessSP process_sp, addr_t addr,
Declaration &decl) {
lldb_private::Address so_addr;
- if (!process_sp->GetTarget().GetSectionLoadList().ResolveLoadAddress(addr,
- so_addr))
+ if (!process_sp->GetTarget().ResolveLoadAddress(addr, so_addr))
return;
lldb_private::Symbol *symbol = so_addr.CalculateSymbolContextSymbol();
@@ -600,8 +598,7 @@ addr_t InstrumentationRuntimeTSan::GetFirstNonInternalFramePc(
addr_t addr = *maybe_addr;
lldb_private::Address so_addr;
- if (!process_sp->GetTarget().GetSectionLoadList().ResolveLoadAddress(
- addr, so_addr))
+ if (!process_sp->GetTarget().ResolveLoadAddress(addr, so_addr))
continue;
if (so_addr.GetModule() == runtime_module_sp)
diff --git a/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp b/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp
index 1688fb2..b6487d4 100644
--- a/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp
+++ b/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp
@@ -377,7 +377,7 @@ bool JITLoaderGDB::ReadJITDescriptorImpl(bool all_entries) {
for (uint32_t i = 0; i < num_sections; ++i) {
SectionSP section_sp(section_list->GetSectionAtIndex(i));
if (section_sp) {
- target.GetSectionLoadList().SetSectionUnloaded(section_sp);
+ target.SetSectionUnloaded(section_sp);
}
}
}
diff --git a/lldb/source/Plugins/LanguageRuntime/CPlusPlus/CPPLanguageRuntime.cpp b/lldb/source/Plugins/LanguageRuntime/CPlusPlus/CPPLanguageRuntime.cpp
index e7ca3f6..fb70654 100644
--- a/lldb/source/Plugins/LanguageRuntime/CPlusPlus/CPPLanguageRuntime.cpp
+++ b/lldb/source/Plugins/LanguageRuntime/CPlusPlus/CPPLanguageRuntime.cpp
@@ -266,21 +266,20 @@ CPPLanguageRuntime::FindLibCppStdFunctionCallableInfo(
Target &target = process->GetTarget();
- if (target.GetSectionLoadList().IsEmpty())
+ if (!target.HasLoadedSections())
return optional_info;
Address vtable_first_entry_resolved;
- if (!target.GetSectionLoadList().ResolveLoadAddress(
- vtable_address_first_entry, vtable_first_entry_resolved))
+ if (!target.ResolveLoadAddress(vtable_address_first_entry,
+ vtable_first_entry_resolved))
return optional_info;
Address vtable_addr_resolved;
SymbolContext sc;
Symbol *symbol = nullptr;
- if (!target.GetSectionLoadList().ResolveLoadAddress(vtable_address,
- vtable_addr_resolved))
+ if (!target.ResolveLoadAddress(vtable_address, vtable_addr_resolved))
return optional_info;
target.GetImages().ResolveSymbolContextForAddress(
@@ -322,8 +321,8 @@ CPPLanguageRuntime::FindLibCppStdFunctionCallableInfo(
// Setup for cases 2, 4 and 5 we have a pointer to a function after the
// vtable. We will use a process of elimination to drop through each case
// and obtain the data we need.
- if (target.GetSectionLoadList().ResolveLoadAddress(
- possible_function_address, function_address_resolved)) {
+ if (target.ResolveLoadAddress(possible_function_address,
+ function_address_resolved)) {
target.GetImages().ResolveSymbolContextForAddress(
function_address_resolved, eSymbolContextEverything, sc);
symbol = sc.symbol;
@@ -418,15 +417,14 @@ CPPLanguageRuntime::GetStepThroughTrampolinePlan(Thread &thread,
TargetSP target_sp(thread.CalculateTarget());
- if (target_sp->GetSectionLoadList().IsEmpty())
+ if (!target_sp->HasLoadedSections())
return ret_plan_sp;
Address pc_addr_resolved;
SymbolContext sc;
Symbol *symbol;
- if (!target_sp->GetSectionLoadList().ResolveLoadAddress(curr_pc,
- pc_addr_resolved))
+ if (!target_sp->ResolveLoadAddress(curr_pc, pc_addr_resolved))
return ret_plan_sp;
target_sp->GetImages().ResolveSymbolContextForAddress(
diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
index 6452baa..13e1198 100644
--- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -762,8 +762,7 @@ bool ObjectFileELF::SetLoadAddress(Target &target, lldb::addr_t value,
if (GetAddressByteSize() == 4)
load_addr &= 0xFFFFFFFF;
- if (target.GetSectionLoadList().SetSectionLoadAddress(section_sp,
- load_addr))
+ if (target.SetSectionLoadAddress(section_sp, load_addr))
++num_loaded_sections;
}
}
diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
index 488c9bd..bf2d293 100644
--- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
+++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
@@ -6253,9 +6253,9 @@ bool ObjectFileMachO::SetLoadAddress(Target &target, lldb::addr_t value,
"0x%" PRIx64,
section_sp->GetName().AsCString(),
section_sp->GetFileAddress() + value);
- if (target.GetSectionLoadList().SetSectionLoadAddress(
- section_sp, section_sp->GetFileAddress() + value,
- warn_multiple))
+ if (target.SetSectionLoadAddress(section_sp,
+ section_sp->GetFileAddress() + value,
+ warn_multiple))
++num_loaded_sections;
}
}
@@ -6276,8 +6276,8 @@ bool ObjectFileMachO::SetLoadAddress(Target &target, lldb::addr_t value,
"ObjectFileMachO::SetLoadAddress segment '%s' load addr is "
"0x%" PRIx64,
section_sp->GetName().AsCString(), section_load_addr);
- if (target.GetSectionLoadList().SetSectionLoadAddress(
- section_sp, section_load_addr, warn_multiple))
+ if (target.SetSectionLoadAddress(section_sp, section_load_addr,
+ warn_multiple))
++num_loaded_sections;
}
}
diff --git a/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp b/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
index bfdb814..6d92a20 100644
--- a/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
+++ b/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
@@ -482,7 +482,7 @@ bool ObjectFilePECOFF::SetLoadAddress(Target &target, addr_t value,
// that have SHF_ALLOC in their flag bits.
SectionSP section_sp(section_list->GetSectionAtIndex(sect_idx));
if (section_sp && !section_sp->IsThreadSpecific()) {
- if (target.GetSectionLoadList().SetSectionLoadAddress(
+ if (target.SetSectionLoadAddress(
section_sp, section_sp->GetFileAddress() + value))
++num_loaded_sections;
}
diff --git a/lldb/source/Plugins/ObjectFile/Placeholder/ObjectFilePlaceholder.cpp b/lldb/source/Plugins/ObjectFile/Placeholder/ObjectFilePlaceholder.cpp
index ec1f3f6..e8745d6 100644
--- a/lldb/source/Plugins/ObjectFile/Placeholder/ObjectFilePlaceholder.cpp
+++ b/lldb/source/Plugins/ObjectFile/Placeholder/ObjectFilePlaceholder.cpp
@@ -59,8 +59,7 @@ bool ObjectFilePlaceholder::SetLoadAddress(Target &target, addr_t value,
GetModule()->GetSectionList();
assert(m_sections_up->GetNumSections(0) == 1);
- target.GetSectionLoadList().SetSectionLoadAddress(
- m_sections_up->GetSectionAtIndex(0), m_base);
+ target.SetSectionLoadAddress(m_sections_up->GetSectionAtIndex(0), m_base);
return true;
}
diff --git a/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp b/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp
index 05b3bb9..ef3c00e 100644
--- a/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp
+++ b/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp
@@ -383,12 +383,12 @@ void ProcessMinidump::BuildMemoryRegions() {
MemoryRegionInfos to_add;
ModuleList &modules = GetTarget().GetImages();
- SectionLoadList &load_list = GetTarget().GetSectionLoadList();
+ Target &target = GetTarget();
modules.ForEach([&](const ModuleSP &module_sp) {
SectionList *sections = module_sp->GetSectionList();
for (size_t i = 0; i < sections->GetSize(); ++i) {
SectionSP section_sp = sections->GetSectionAtIndex(i);
- addr_t load_addr = load_list.GetSectionLoadAddress(section_sp);
+ addr_t load_addr = target.GetSectionLoadAddress(section_sp);
if (load_addr == LLDB_INVALID_ADDRESS)
continue;
MemoryRegionInfo::RangeType section_range(load_addr,
diff --git a/lldb/source/Plugins/Trace/intel-pt/TraceIntelPTBundleSaver.cpp b/lldb/source/Plugins/Trace/intel-pt/TraceIntelPTBundleSaver.cpp
index a09bb37..3b1535a 100644
--- a/lldb/source/Plugins/Trace/intel-pt/TraceIntelPTBundleSaver.cpp
+++ b/lldb/source/Plugins/Trace/intel-pt/TraceIntelPTBundleSaver.cpp
@@ -263,8 +263,7 @@ BuildModulesSection(Process &process, FileSpec directory) {
lldb::addr_t load_addr = LLDB_INVALID_ADDRESS;
Address base_addr(objfile->GetBaseAddress());
- if (base_addr.IsValid() &&
- !process.GetTarget().GetSectionLoadList().IsEmpty())
+ if (base_addr.IsValid() && process.GetTarget().HasLoadedSections())
load_addr = base_addr.GetLoadAddress(&process.GetTarget());
if (load_addr == LLDB_INVALID_ADDRESS)
diff --git a/lldb/source/Symbol/ObjectFile.cpp b/lldb/source/Symbol/ObjectFile.cpp
index d3881f8..264acad 100644
--- a/lldb/source/Symbol/ObjectFile.cpp
+++ b/lldb/source/Symbol/ObjectFile.cpp
@@ -646,8 +646,7 @@ ObjectFile::GetLoadableData(Target &target) {
for (size_t i = 0; i < section_count; ++i) {
LoadableData loadable;
SectionSP section_sp = section_list->GetSectionAtIndex(i);
- loadable.Dest =
- target.GetSectionLoadList().GetSectionLoadAddress(section_sp);
+ loadable.Dest = target.GetSectionLoadAddress(section_sp);
if (loadable.Dest == LLDB_INVALID_ADDRESS)
continue;
// We can skip sections like bss
diff --git a/lldb/source/Target/ProcessTrace.cpp b/lldb/source/Target/ProcessTrace.cpp
index 4718a7c..f131339 100644
--- a/lldb/source/Target/ProcessTrace.cpp
+++ b/lldb/source/Target/ProcessTrace.cpp
@@ -123,7 +123,7 @@ bool ProcessTrace::GetProcessInfo(ProcessInstanceInfo &info) {
size_t ProcessTrace::DoReadMemory(addr_t addr, void *buf, size_t size,
Status &error) {
Address resolved_address;
- GetTarget().GetSectionLoadList().ResolveLoadAddress(addr, resolved_address);
+ GetTarget().ResolveLoadAddress(addr, resolved_address);
return GetTarget().ReadMemoryFromFileCache(resolved_address, buf, size,
error);
diff --git a/lldb/source/Target/SectionLoadHistory.cpp b/lldb/source/Target/SectionLoadHistory.cpp
index f329d42..99797b1d 100644
--- a/lldb/source/Target/SectionLoadHistory.cpp
+++ b/lldb/source/Target/SectionLoadHistory.cpp
@@ -112,13 +112,15 @@ SectionLoadHistory::GetSectionLoadAddress(uint32_t stop_id,
}
bool SectionLoadHistory::ResolveLoadAddress(uint32_t stop_id, addr_t load_addr,
- Address &so_addr) {
+ Address &so_addr,
+ bool allow_section_end) {
// First find the top level section that this load address exists in
std::lock_guard<std::recursive_mutex> guard(m_mutex);
const bool read_only = true;
SectionLoadList *section_load_list =
GetSectionLoadListForStopID(stop_id, read_only);
- return section_load_list->ResolveLoadAddress(load_addr, so_addr);
+ return section_load_list->ResolveLoadAddress(load_addr, so_addr,
+ allow_section_end);
}
bool SectionLoadHistory::SetSectionLoadAddress(
diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index 46216ba..8d77097 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -270,12 +270,18 @@ void Target::DeleteCurrentProcess() {
if (m_process_sp) {
// We dispose any active tracing sessions on the current process
m_trace_sp.reset();
- m_section_load_history.Clear();
+
if (m_process_sp->IsAlive())
m_process_sp->Destroy(false);
m_process_sp->Finalize(false /* not destructing */);
+ // Let the process finalize itself first, then clear the section load
+ // history. Some objects owned by the process might end up calling
+ // SectionLoadHistory::SetSectionUnloaded() which can create entries in
+ // the section load history that can mess up subsequent processes.
+ m_section_load_history.Clear();
+
CleanupProcess();
m_process_sp.reset();
@@ -3217,8 +3223,9 @@ Status Target::Install(ProcessLaunchInfo *launch_info) {
}
bool Target::ResolveLoadAddress(addr_t load_addr, Address &so_addr,
- uint32_t stop_id) {
- return m_section_load_history.ResolveLoadAddress(stop_id, load_addr, so_addr);
+ uint32_t stop_id, bool allow_section_end) {
+ return m_section_load_history.ResolveLoadAddress(stop_id, load_addr, so_addr,
+ allow_section_end);
}
bool Target::ResolveFileAddress(lldb::addr_t file_addr,
@@ -5147,3 +5154,15 @@ Target::ReportStatistics(const lldb_private::StatisticsOptions &options) {
}
void Target::ResetStatistics() { m_stats.Reset(*this); }
+
+bool Target::HasLoadedSections() { return !GetSectionLoadList().IsEmpty(); }
+
+lldb::addr_t Target::GetSectionLoadAddress(const lldb::SectionSP &section_sp) {
+ return GetSectionLoadList().GetSectionLoadAddress(section_sp);
+}
+
+void Target::ClearSectionLoadList() { GetSectionLoadList().Clear(); }
+
+void Target::DumpSectionLoadList(Stream &s) {
+ GetSectionLoadList().Dump(s, this);
+}
diff --git a/lldb/source/Target/ThreadPlanStepInRange.cpp b/lldb/source/Target/ThreadPlanStepInRange.cpp
index 4a2ede8..109d1b6 100644
--- a/lldb/source/Target/ThreadPlanStepInRange.cpp
+++ b/lldb/source/Target/ThreadPlanStepInRange.cpp
@@ -263,8 +263,7 @@ bool ThreadPlanStepInRange::ShouldStop(Event *event_ptr) {
const Architecture *arch = GetTarget().GetArchitecturePlugin();
if (arch) {
Address curr_sec_addr;
- GetTarget().GetSectionLoadList().ResolveLoadAddress(curr_addr,
- curr_sec_addr);
+ GetTarget().ResolveLoadAddress(curr_addr, curr_sec_addr);
bytes_to_skip = arch->GetBytesToSkip(*sc.symbol, curr_sec_addr);
}
}
diff --git a/lldb/source/Target/ThreadPlanTracer.cpp b/lldb/source/Target/ThreadPlanTracer.cpp
index ff9f49c..356ce379 100644
--- a/lldb/source/Target/ThreadPlanTracer.cpp
+++ b/lldb/source/Target/ThreadPlanTracer.cpp
@@ -140,8 +140,7 @@ void ThreadPlanAssemblyTracer::Log() {
Address pc_addr;
bool addr_valid = false;
uint8_t buffer[16] = {0}; // Must be big enough for any single instruction
- addr_valid = m_process.GetTarget().GetSectionLoadList().ResolveLoadAddress(
- pc, pc_addr);
+ addr_valid = m_process.GetTarget().ResolveLoadAddress(pc, pc_addr);
pc_addr.Dump(stream, &GetThread(), Address::DumpStyleResolvedDescription,
Address::DumpStyleModuleWithFileAddress);