aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/lldb/source/Target/ThreadPlanCallFunction.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm-project/lldb/source/Target/ThreadPlanCallFunction.cpp')
-rw-r--r--contrib/llvm-project/lldb/source/Target/ThreadPlanCallFunction.cpp132
1 files changed, 50 insertions, 82 deletions
diff --git a/contrib/llvm-project/lldb/source/Target/ThreadPlanCallFunction.cpp b/contrib/llvm-project/lldb/source/Target/ThreadPlanCallFunction.cpp
index 68d771c37946..23d114e30990 100644
--- a/contrib/llvm-project/lldb/source/Target/ThreadPlanCallFunction.cpp
+++ b/contrib/llvm-project/lldb/source/Target/ThreadPlanCallFunction.cpp
@@ -59,46 +59,21 @@ bool ThreadPlanCallFunction::ConstructorSetup(
m_constructor_errors.Printf(
"Trying to put the stack in unreadable memory at: 0x%" PRIx64 ".",
m_function_sp);
- if (log)
- log->Printf("ThreadPlanCallFunction(%p): %s.", static_cast<void *>(this),
- m_constructor_errors.GetData());
+ LLDB_LOGF(log, "ThreadPlanCallFunction(%p): %s.", static_cast<void *>(this),
+ m_constructor_errors.GetData());
return false;
}
- Module *exe_module = GetTarget().GetExecutableModulePointer();
-
- if (exe_module == nullptr) {
+ llvm::Expected<Address> start_address = GetTarget().GetEntryPointAddress();
+ if (!start_address) {
m_constructor_errors.Printf(
- "Can't execute code without an executable module.");
- if (log)
- log->Printf("ThreadPlanCallFunction(%p): %s.", static_cast<void *>(this),
- m_constructor_errors.GetData());
+ "%s", llvm::toString(start_address.takeError()).c_str());
+ LLDB_LOGF(log, "ThreadPlanCallFunction(%p): %s.", static_cast<void *>(this),
+ m_constructor_errors.GetData());
return false;
- } else {
- ObjectFile *objectFile = exe_module->GetObjectFile();
- if (!objectFile) {
- m_constructor_errors.Printf(
- "Could not find object file for module \"%s\".",
- exe_module->GetFileSpec().GetFilename().AsCString());
-
- if (log)
- log->Printf("ThreadPlanCallFunction(%p): %s.",
- static_cast<void *>(this), m_constructor_errors.GetData());
- return false;
- }
-
- m_start_addr = objectFile->GetEntryPointAddress();
- if (!m_start_addr.IsValid()) {
- m_constructor_errors.Printf(
- "Could not find entry point address for executable module \"%s\".",
- exe_module->GetFileSpec().GetFilename().AsCString());
- if (log)
- log->Printf("ThreadPlanCallFunction(%p): %s.",
- static_cast<void *>(this), m_constructor_errors.GetData());
- return false;
- }
}
+ m_start_addr = *start_address;
start_load_addr = m_start_addr.GetLoadAddress(&GetTarget());
// Checkpoint the thread state so we can restore it later.
@@ -109,9 +84,8 @@ bool ThreadPlanCallFunction::ConstructorSetup(
if (!thread.CheckpointThreadState(m_stored_thread_state)) {
m_constructor_errors.Printf("Setting up ThreadPlanCallFunction, failed to "
"checkpoint thread state.");
- if (log)
- log->Printf("ThreadPlanCallFunction(%p): %s.", static_cast<void *>(this),
- m_constructor_errors.GetData());
+ LLDB_LOGF(log, "ThreadPlanCallFunction(%p): %s.", static_cast<void *>(this),
+ m_constructor_errors.GetData());
return false;
}
function_load_addr = m_function_addr.GetLoadAddress(&GetTarget());
@@ -196,10 +170,10 @@ void ThreadPlanCallFunction::DoTakedown(bool success) {
if (!m_valid) {
// Don't call DoTakedown if we were never valid to begin with.
- if (log)
- log->Printf("ThreadPlanCallFunction(%p): Log called on "
- "ThreadPlanCallFunction that was never valid.",
- static_cast<void *>(this));
+ LLDB_LOGF(log,
+ "ThreadPlanCallFunction(%p): Log called on "
+ "ThreadPlanCallFunction that was never valid.",
+ static_cast<void *>(this));
return;
}
@@ -207,20 +181,20 @@ void ThreadPlanCallFunction::DoTakedown(bool success) {
if (success) {
SetReturnValue();
}
- if (log)
- log->Printf("ThreadPlanCallFunction(%p): DoTakedown called for thread "
- "0x%4.4" PRIx64 ", m_valid: %d complete: %d.\n",
- static_cast<void *>(this), m_thread.GetID(), m_valid,
- IsPlanComplete());
+ LLDB_LOGF(log,
+ "ThreadPlanCallFunction(%p): DoTakedown called for thread "
+ "0x%4.4" PRIx64 ", m_valid: %d complete: %d.\n",
+ static_cast<void *>(this), m_thread.GetID(), m_valid,
+ IsPlanComplete());
m_takedown_done = true;
m_stop_address =
m_thread.GetStackFrameAtIndex(0)->GetRegisterContext()->GetPC();
m_real_stop_info_sp = GetPrivateStopInfo();
if (!m_thread.RestoreRegisterStateFromCheckpoint(m_stored_thread_state)) {
- if (log)
- log->Printf("ThreadPlanCallFunction(%p): DoTakedown failed to restore "
- "register state",
- static_cast<void *>(this));
+ LLDB_LOGF(log,
+ "ThreadPlanCallFunction(%p): DoTakedown failed to restore "
+ "register state",
+ static_cast<void *>(this));
}
SetPlanComplete(success);
ClearBreakpoints();
@@ -228,11 +202,11 @@ void ThreadPlanCallFunction::DoTakedown(bool success) {
ReportRegisterState("Restoring thread state after function call. "
"Restored register state:");
} else {
- if (log)
- log->Printf("ThreadPlanCallFunction(%p): DoTakedown called as no-op for "
- "thread 0x%4.4" PRIx64 ", m_valid: %d complete: %d.\n",
- static_cast<void *>(this), m_thread.GetID(), m_valid,
- IsPlanComplete());
+ LLDB_LOGF(log,
+ "ThreadPlanCallFunction(%p): DoTakedown called as no-op for "
+ "thread 0x%4.4" PRIx64 ", m_valid: %d complete: %d.\n",
+ static_cast<void *>(this), m_thread.GetID(), m_valid,
+ IsPlanComplete());
}
}
@@ -288,10 +262,9 @@ bool ThreadPlanCallFunction::DoPlanExplainsStop(Event *event_ptr) {
stop_reason = eStopReasonNone;
else
stop_reason = m_real_stop_info_sp->GetStopReason();
- if (log)
- log->Printf(
- "ThreadPlanCallFunction::PlanExplainsStop: Got stop reason - %s.",
- Thread::StopReasonAsCString(stop_reason));
+ LLDB_LOGF(log,
+ "ThreadPlanCallFunction::PlanExplainsStop: Got stop reason - %s.",
+ Thread::StopReasonAsCString(stop_reason));
if (stop_reason == eStopReasonBreakpoint && BreakpointsExplainStop())
return true;
@@ -300,9 +273,8 @@ bool ThreadPlanCallFunction::DoPlanExplainsStop(Event *event_ptr) {
// then we should not consider ourselves complete. Return true to
// acknowledge the stop.
if (Process::ProcessEventData::GetInterruptedFromEvent(event_ptr)) {
- if (log)
- log->Printf("ThreadPlanCallFunction::PlanExplainsStop: The event is an "
- "Interrupt, returning true.");
+ LLDB_LOGF(log, "ThreadPlanCallFunction::PlanExplainsStop: The event is an "
+ "Interrupt, returning true.");
return true;
}
// We control breakpoints separately from other "stop reasons." So first,
@@ -321,10 +293,10 @@ bool ThreadPlanCallFunction::DoPlanExplainsStop(Event *event_ptr) {
bool is_internal = true;
for (uint32_t i = 0; i < num_owners; i++) {
Breakpoint &bp = bp_site_sp->GetOwnerAtIndex(i)->GetBreakpoint();
- if (log)
- log->Printf("ThreadPlanCallFunction::PlanExplainsStop: hit "
- "breakpoint %d while calling function",
- bp.GetID());
+ LLDB_LOGF(log,
+ "ThreadPlanCallFunction::PlanExplainsStop: hit "
+ "breakpoint %d while calling function",
+ bp.GetID());
if (!bp.IsInternal()) {
is_internal = false;
@@ -332,25 +304,23 @@ bool ThreadPlanCallFunction::DoPlanExplainsStop(Event *event_ptr) {
}
}
if (is_internal) {
- if (log)
- log->Printf("ThreadPlanCallFunction::PlanExplainsStop hit an "
- "internal breakpoint, not stopping.");
+ LLDB_LOGF(log, "ThreadPlanCallFunction::PlanExplainsStop hit an "
+ "internal breakpoint, not stopping.");
return false;
}
}
if (m_ignore_breakpoints) {
- if (log)
- log->Printf("ThreadPlanCallFunction::PlanExplainsStop: we are ignoring "
- "breakpoints, overriding breakpoint stop info ShouldStop, "
- "returning true");
+ LLDB_LOGF(log,
+ "ThreadPlanCallFunction::PlanExplainsStop: we are ignoring "
+ "breakpoints, overriding breakpoint stop info ShouldStop, "
+ "returning true");
m_real_stop_info_sp->OverrideShouldStop(false);
return true;
} else {
- if (log)
- log->Printf("ThreadPlanCallFunction::PlanExplainsStop: we are not "
- "ignoring breakpoints, overriding breakpoint stop info "
- "ShouldStop, returning true");
+ LLDB_LOGF(log, "ThreadPlanCallFunction::PlanExplainsStop: we are not "
+ "ignoring breakpoints, overriding breakpoint stop info "
+ "ShouldStop, returning true");
m_real_stop_info_sp->OverrideShouldStop(true);
return false;
}
@@ -418,9 +388,8 @@ bool ThreadPlanCallFunction::MischiefManaged() {
Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_STEP));
if (IsPlanComplete()) {
- if (log)
- log->Printf("ThreadPlanCallFunction(%p): Completed call function plan.",
- static_cast<void *>(this));
+ LLDB_LOGF(log, "ThreadPlanCallFunction(%p): Completed call function plan.",
+ static_cast<void *>(this));
ThreadPlan::MischiefManaged();
return true;
@@ -469,9 +438,8 @@ bool ThreadPlanCallFunction::BreakpointsExplainStop() {
m_objc_language_runtime->ExceptionBreakpointsExplainStop(
stop_info_sp))) {
Log *log(lldb_private::GetLogIfAnyCategoriesSet(LIBLLDB_LOG_STEP));
- if (log)
- log->Printf("ThreadPlanCallFunction::BreakpointsExplainStop - Hit an "
- "exception breakpoint, setting plan complete.");
+ LLDB_LOGF(log, "ThreadPlanCallFunction::BreakpointsExplainStop - Hit an "
+ "exception breakpoint, setting plan complete.");
SetPlanComplete(false);