[Lldb-commits] [lldb] [lldb] Suppress unsupported language warning for assembly (PR #95871)
via lldb-commits
lldb-commits at lists.llvm.org
Mon Jun 17 16:54:55 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lldb
Author: Jonas Devlieghere (JDevlieghere)
<details>
<summary>Changes</summary>
The following warning is technically correct, but pretty much useless, since there aren't any frame variables that we'd expect the debugger to understand.
> This version of LLDB has no plugin for the language "assembler".
> Inspection of frame variables will be limited.
This message is useful in the general case but should be suppressed for the "assembler" case.
rdar://92745462
---
Full diff: https://github.com/llvm/llvm-project/pull/95871.diff
2 Files Affected:
- (modified) lldb/source/Target/Process.cpp (+50-51)
- (modified) lldb/test/Shell/Process/UnsupportedLanguage.test (+12-3)
``````````diff
diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp
index 1e321f8bde391..6a7a084d702bc 100644
--- a/lldb/source/Target/Process.cpp
+++ b/lldb/source/Target/Process.cpp
@@ -407,8 +407,8 @@ ProcessSP Process::FindPlugin(lldb::TargetSP target_sp,
create_callback =
PluginManager::GetProcessCreateCallbackForPluginName(plugin_name);
if (create_callback) {
- process_sp = create_callback(target_sp, listener_sp, crash_file_path,
- can_connect);
+ process_sp =
+ create_callback(target_sp, listener_sp, crash_file_path, can_connect);
if (process_sp) {
if (process_sp->CanDebug(target_sp, true)) {
process_sp->m_process_unique_id = ++g_process_unique_id;
@@ -421,8 +421,8 @@ ProcessSP Process::FindPlugin(lldb::TargetSP target_sp,
(create_callback =
PluginManager::GetProcessCreateCallbackAtIndex(idx)) != nullptr;
++idx) {
- process_sp = create_callback(target_sp, listener_sp, crash_file_path,
- can_connect);
+ process_sp =
+ create_callback(target_sp, listener_sp, crash_file_path, can_connect);
if (process_sp) {
if (process_sp->CanDebug(target_sp, false)) {
process_sp->m_process_unique_id = ++g_process_unique_id;
@@ -541,8 +541,7 @@ Process::~Process() {
ProcessProperties &Process::GetGlobalProperties() {
// NOTE: intentional leak so we don't crash if global destructor chain gets
// called as other threads still use the result of this function
- static ProcessProperties *g_settings_ptr =
- new ProcessProperties(nullptr);
+ static ProcessProperties *g_settings_ptr = new ProcessProperties(nullptr);
return *g_settings_ptr;
}
@@ -647,7 +646,7 @@ StateType Process::GetNextEvent(EventSP &event_sp) {
StateType state = eStateInvalid;
if (GetPrimaryListener()->GetEventForBroadcaster(this, event_sp,
- std::chrono::seconds(0)) &&
+ std::chrono::seconds(0)) &&
event_sp)
state = Process::ProcessEventData::GetStateFromEvent(event_sp.get());
@@ -745,8 +744,7 @@ StateType Process::WaitForProcessToStop(
bool Process::HandleProcessStateChangedEvent(
const EventSP &event_sp, Stream *stream,
- SelectMostRelevant select_most_relevant,
- bool &pop_process_io_handler) {
+ SelectMostRelevant select_most_relevant, bool &pop_process_io_handler) {
const bool handle_pop = pop_process_io_handler;
pop_process_io_handler = false;
@@ -937,8 +935,7 @@ bool Process::HandleProcessStateChangedEvent(
process_sp->GetStatus(*stream);
process_sp->GetThreadStatus(*stream, only_threads_with_stop_reason,
start_frame, num_frames,
- num_frames_with_source,
- stop_format);
+ num_frames_with_source, stop_format);
if (curr_thread_stop_info_sp) {
lldb::addr_t crashing_address;
ValueObjectSP valobj_sp = StopInfo::GetCrashingDereference(
@@ -1141,7 +1138,7 @@ bool Process::SetProcessExitStatus(
lldb::pid_t pid, bool exited,
int signo, // Zero for no signal
int exit_status // Exit value of process if signal is zero
- ) {
+) {
Log *log = GetLog(LLDBLog::Process);
LLDB_LOGF(log,
"Process::SetProcessExitStatus (pid=%" PRIu64
@@ -1346,7 +1343,7 @@ void Process::SetPublicState(StateType new_state, bool restarted) {
Log *log(GetLog(LLDBLog::State | LLDBLog::Process));
LLDB_LOGF(log, "(plugin = %s, state = %s, restarted = %i)",
- GetPluginName().data(), StateAsCString(new_state), restarted);
+ GetPluginName().data(), StateAsCString(new_state), restarted);
const StateType old_state = m_public_state.GetValue();
m_public_state.SetValue(new_state);
@@ -1356,15 +1353,15 @@ void Process::SetPublicState(StateType new_state, bool restarted) {
if (!StateChangedIsExternallyHijacked()) {
if (new_state == eStateDetached) {
LLDB_LOGF(log,
- "(plugin = %s, state = %s) -- unlocking run lock for detach",
- GetPluginName().data(), StateAsCString(new_state));
+ "(plugin = %s, state = %s) -- unlocking run lock for detach",
+ GetPluginName().data(), StateAsCString(new_state));
m_public_run_lock.SetStopped();
} else {
const bool old_state_is_stopped = StateIsStoppedState(old_state, false);
if ((old_state_is_stopped != new_state_is_stopped)) {
if (new_state_is_stopped && !restarted) {
LLDB_LOGF(log, "(plugin = %s, state = %s) -- unlocking run lock",
- GetPluginName().data(), StateAsCString(new_state));
+ GetPluginName().data(), StateAsCString(new_state));
m_public_run_lock.SetStopped();
}
}
@@ -1378,7 +1375,7 @@ Status Process::Resume() {
if (!m_public_run_lock.TrySetRunning()) {
Status error("Resume request failed - process still running.");
LLDB_LOGF(log, "(plugin = %s) -- TrySetRunning failed, not resuming.",
- GetPluginName().data());
+ GetPluginName().data());
return error;
}
Status error = PrivateResume();
@@ -1458,7 +1455,7 @@ void Process::SetPrivateState(StateType new_state) {
bool state_changed = false;
LLDB_LOGF(log, "(plugin = %s, state = %s)", GetPluginName().data(),
- StateAsCString(new_state));
+ StateAsCString(new_state));
std::lock_guard<std::recursive_mutex> thread_guard(m_thread_list.GetMutex());
std::lock_guard<std::recursive_mutex> guard(m_private_state.GetMutex());
@@ -1500,14 +1497,14 @@ void Process::SetPrivateState(StateType new_state) {
m_mod_id.SetStopEventForLastNaturalStopID(event_sp);
m_memory_cache.Clear();
LLDB_LOGF(log, "(plugin = %s, state = %s, stop_id = %u",
- GetPluginName().data(), StateAsCString(new_state),
- m_mod_id.GetStopID());
+ GetPluginName().data(), StateAsCString(new_state),
+ m_mod_id.GetStopID());
}
m_private_state_broadcaster.BroadcastEvent(event_sp);
} else {
LLDB_LOGF(log, "(plugin = %s, state = %s) state didn't change. Ignoring...",
- GetPluginName().data(), StateAsCString(new_state));
+ GetPluginName().data(), StateAsCString(new_state));
}
}
@@ -1523,7 +1520,8 @@ addr_t Process::GetImageInfoAddress() { return LLDB_INVALID_ADDRESS; }
const lldb::ABISP &Process::GetABI() {
if (!m_abi_sp)
- m_abi_sp = ABI::FindPlugin(shared_from_this(), GetTarget().GetArchitecture());
+ m_abi_sp =
+ ABI::FindPlugin(shared_from_this(), GetTarget().GetArchitecture());
return m_abi_sp;
}
@@ -1570,7 +1568,8 @@ LanguageRuntime *Process::GetLanguageRuntime(lldb::LanguageType language) {
// for example, CPPLanguageRuntime will support eLanguageTypeC_plus_plus,
// eLanguageTypeC_plus_plus_03, etc. Because of this, we should get the
// primary language type and make sure that our runtime supports it.
- assert(runtime->GetLanguageType() == Language::GetPrimaryLanguage(language));
+ assert(runtime->GetLanguageType() ==
+ Language::GetPrimaryLanguage(language));
return runtime;
}
@@ -1961,7 +1960,7 @@ Status Process::DisableSoftwareBreakpoint(BreakpointSite *bp_site) {
// Uncomment to verify memory caching works after making changes to caching
// code
-//#define VERIFY_MEMORY_READS
+// #define VERIFY_MEMORY_READS
size_t Process::ReadMemory(addr_t addr, void *buf, size_t size, Status &error) {
if (ABISP abi_sp = GetABI())
@@ -2818,9 +2817,7 @@ ListenerSP ProcessAttachInfo::GetListenerForProcess(Debugger &debugger) {
return debugger.GetListener();
}
-Status Process::WillLaunch(Module *module) {
- return DoWillLaunch(module);
-}
+Status Process::WillLaunch(Module *module) { return DoWillLaunch(module); }
Status Process::WillAttachToProcessWithID(lldb::pid_t pid) {
return DoWillAttachToProcessWithID(pid);
@@ -3710,8 +3707,8 @@ void Process::ControlPrivateStateThread(uint32_t signal) {
while (!receipt_received) {
// Check for a receipt for n seconds and then check if the private
// state thread is still around.
- receipt_received =
- event_receipt_sp->WaitForEventReceived(GetUtilityExpressionTimeout());
+ receipt_received = event_receipt_sp->WaitForEventReceived(
+ GetUtilityExpressionTimeout());
if (!receipt_received) {
// Check if the private state thread is still around. If it isn't
// then we are done waiting
@@ -4758,7 +4755,8 @@ HandleStoppedEvent(lldb::tid_t thread_id, const ThreadPlanSP &thread_plan_sp,
StopInfoSP stop_info_sp = thread_sp->GetStopInfo();
if (stop_info_sp && stop_info_sp->GetStopReason() == eStopReasonBreakpoint &&
stop_info_sp->ShouldNotify(event_sp.get())) {
- LLDB_LOG(log, "stopped for breakpoint: {0}.", stop_info_sp->GetDescription());
+ LLDB_LOG(log, "stopped for breakpoint: {0}.",
+ stop_info_sp->GetDescription());
if (!options.DoesIgnoreBreakpoints()) {
// Restore the plan state and then force Private to false. We are going
// to stop because of this plan so we need it to become a public plan or
@@ -5010,8 +5008,8 @@ Process::RunThreadPlan(ExecutionContext &exe_ctx,
// coalescing to cause us to lose OUR running event...
ForceNextEventDelivery();
-// This while loop must exit out the bottom, there's cleanup that we need to do
-// when we are done. So don't call return anywhere within it.
+ // This while loop must exit out the bottom, there's cleanup that we need to
+ // do when we are done. So don't call return anywhere within it.
#ifdef LLDB_RUN_THREAD_HALT_WITH_EVENT
// It's pretty much impossible to write test cases for things like: One
@@ -5235,12 +5233,14 @@ Process::RunThreadPlan(ExecutionContext &exe_ctx,
LLDB_LOG(log,
"Running function with one thread timeout timed out.");
} else
- LLDB_LOG(log, "Restarting function with all threads enabled and "
- "timeout: {0} timed out, abandoning execution.",
+ LLDB_LOG(log,
+ "Restarting function with all threads enabled and "
+ "timeout: {0} timed out, abandoning execution.",
timeout);
} else
- LLDB_LOG(log, "Running function with timeout: {0} timed out, "
- "abandoning execution.",
+ LLDB_LOG(log,
+ "Running function with timeout: {0} timed out, "
+ "abandoning execution.",
timeout);
}
@@ -5663,8 +5663,7 @@ size_t Process::GetThreadStatus(Stream &strm,
continue;
}
thread_sp->GetStatus(strm, start_frame, num_frames,
- num_frames_with_source,
- stop_format);
+ num_frames_with_source, stop_format);
++num_thread_infos_dumped;
} else {
Log *log = GetLog(LLDBLog::Process);
@@ -5703,14 +5702,14 @@ bool Process::RunPreResumeActions() {
void Process::ClearPreResumeActions() { m_pre_resume_actions.clear(); }
-void Process::ClearPreResumeAction(PreResumeActionCallback callback, void *baton)
-{
- PreResumeCallbackAndBaton element(callback, baton);
- auto found_iter = std::find(m_pre_resume_actions.begin(), m_pre_resume_actions.end(), element);
- if (found_iter != m_pre_resume_actions.end())
- {
- m_pre_resume_actions.erase(found_iter);
- }
+void Process::ClearPreResumeAction(PreResumeActionCallback callback,
+ void *baton) {
+ PreResumeCallbackAndBaton element(callback, baton);
+ auto found_iter = std::find(m_pre_resume_actions.begin(),
+ m_pre_resume_actions.end(), element);
+ if (found_iter != m_pre_resume_actions.end()) {
+ m_pre_resume_actions.erase(found_iter);
+ }
}
ProcessRunLock &Process::GetRunLock() {
@@ -5720,12 +5719,10 @@ ProcessRunLock &Process::GetRunLock() {
return m_public_run_lock;
}
-bool Process::CurrentThreadIsPrivateStateThread()
-{
+bool Process::CurrentThreadIsPrivateStateThread() {
return m_private_state_thread.EqualsThread(Host::GetCurrentThread());
}
-
void Process::Flush() {
m_thread_list.Flush();
m_extended_thread_list.Flush();
@@ -5924,7 +5921,9 @@ void Process::PrintWarningUnsupportedLanguage(const SymbolContext &sc) {
if (!sc.module_sp)
return;
LanguageType language = sc.GetLanguage();
- if (language == eLanguageTypeUnknown)
+ if (language == eLanguageTypeUnknown ||
+ language == lldb::eLanguageTypeAssembly ||
+ language == lldb::eLanguageTypeMipsAssembler)
return;
LanguageSet plugins =
PluginManager::GetAllTypeSystemSupportedLanguagesForTypes();
@@ -6429,7 +6428,7 @@ static void GetCoreFileSaveRangesFull(Process &process,
std::set<addr_t> &stack_ends) {
// Don't add only dirty pages, add full regions.
-const bool try_dirty_pages = false;
+ const bool try_dirty_pages = false;
for (const auto ®ion : regions)
if (stack_ends.count(region.GetRange().GetRangeEnd()) == 0)
AddRegion(region, try_dirty_pages, ranges);
diff --git a/lldb/test/Shell/Process/UnsupportedLanguage.test b/lldb/test/Shell/Process/UnsupportedLanguage.test
index 8cf0c048e366b..6490505033483 100644
--- a/lldb/test/Shell/Process/UnsupportedLanguage.test
+++ b/lldb/test/Shell/Process/UnsupportedLanguage.test
@@ -1,8 +1,17 @@
-Test warnings.
+Test unsupported language warning
+
REQUIRES: shell
+
RUN: %clang_host %S/Inputs/true.c -std=c99 -g -c -S -emit-llvm -o - \
RUN: | sed -e 's/DW_LANG_C99/DW_LANG_Mips_Assembler/g' >%t.ll
RUN: %clang_host %t.ll -g -o %t.exe
-RUN: %lldb -o "b main" -o r -o q -b %t.exe 2>&1 | FileCheck %s
+RUN: %lldb -o "b main" -o r -o q -b %t.exe 2>&1 | FileCheck %s --check-prefix ASM
+
+ASM-NOT: This version of LLDB has no plugin for the language "assembler"
+
+RUN: %clang_host %S/Inputs/true.c -std=c99 -g -c -S -emit-llvm -o - \
+RUN: | sed -e 's/DW_LANG_C99/DW_LANG_Cobol74/g' >%t.ll
+RUN: %clang_host %t.ll -g -o %t.exe
+RUN: %lldb -o "b main" -o r -o q -b %t.exe 2>&1 | FileCheck %s --check-prefix COBOL
-CHECK: This version of LLDB has no plugin for the language "assembler"
+COBOL-NOT: This version of LLDB has no plugin for the language "cobol"
``````````
</details>
https://github.com/llvm/llvm-project/pull/95871
More information about the lldb-commits
mailing list