[Lldb-commits] [lldb] r245681 - [NativeProcessLinux] Reduce the number of casts
Pavel Labath via lldb-commits
lldb-commits at lists.llvm.org
Fri Aug 21 02:13:53 PDT 2015
Author: labath
Date: Fri Aug 21 04:13:53 2015
New Revision: 245681
URL: http://llvm.org/viewvc/llvm-project?rev=245681&view=rev
Log:
[NativeProcessLinux] Reduce the number of casts
Summary:
NPL used to be peppered with casts of the NativeThreadProtocol objects into NativeThreadLinux. I
move these closer to the source where we obtain these objects. This way, the rest of the code can
assume we are working with the correct type of objects.
Reviewers: ovyalov, tberghammer
Subscribers: lldb-commits
Differential Revision: http://reviews.llvm.org/D12187
Modified:
lldb/trunk/source/Plugins/Process/Linux/NativeProcessLinux.cpp
lldb/trunk/source/Plugins/Process/Linux/NativeProcessLinux.h
Modified: lldb/trunk/source/Plugins/Process/Linux/NativeProcessLinux.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/NativeProcessLinux.cpp?rev=245681&r1=245680&r2=245681&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/Linux/NativeProcessLinux.cpp (original)
+++ lldb/trunk/source/Plugins/Process/Linux/NativeProcessLinux.cpp Fri Aug 21 04:13:53 2015
@@ -532,9 +532,6 @@ NativeProcessLinux::Launch(LaunchArgs *a
const size_t err_len = 1024;
char err_str[err_len];
lldb::pid_t pid;
- NativeThreadProtocolSP thread_sp;
-
- lldb::ThreadSP inferior;
// Propagate the environment if one is not supplied.
if (envp == NULL || envp[0] == NULL)
@@ -763,10 +760,10 @@ NativeProcessLinux::Launch(LaunchArgs *a
if (log)
log->Printf ("NativeProcessLinux::%s() adding pid = %" PRIu64, __FUNCTION__, pid);
- thread_sp = AddThread (pid);
+ NativeThreadLinuxSP thread_sp = AddThread(pid);
assert (thread_sp && "AddThread() returned a nullptr thread");
- std::static_pointer_cast<NativeThreadLinux> (thread_sp)->SetStoppedBySignal (SIGSTOP);
- ThreadWasCreated(pid);
+ thread_sp->SetStoppedBySignal(SIGSTOP);
+ ThreadWasCreated(*thread_sp);
// Let our process instance know the thread has stopped.
SetCurrentThreadID (thread_sp->GetID ());
@@ -791,7 +788,6 @@ NativeProcessLinux::Launch(LaunchArgs *a
::pid_t
NativeProcessLinux::Attach(lldb::pid_t pid, Error &error)
{
- lldb::ThreadSP inferior;
Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
// Use a map to keep track of the threads which we have attached/need to attach.
@@ -857,12 +853,12 @@ NativeProcessLinux::Attach(lldb::pid_t p
it->second = true;
// Create the thread, mark it as stopped.
- NativeThreadProtocolSP thread_sp (AddThread (static_cast<lldb::tid_t> (tid)));
+ NativeThreadLinuxSP thread_sp (AddThread(static_cast<lldb::tid_t>(tid)));
assert (thread_sp && "AddThread() returned a nullptr");
// This will notify this is a new thread and tell the system it is stopped.
- std::static_pointer_cast<NativeThreadLinux> (thread_sp)->SetStoppedBySignal (SIGSTOP);
- ThreadWasCreated(tid);
+ thread_sp->SetStoppedBySignal(SIGSTOP);
+ ThreadWasCreated(*thread_sp);
SetCurrentThreadID (thread_sp->GetID ());
}
@@ -1056,7 +1052,7 @@ NativeProcessLinux::WaitForNewThread(::p
{
Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
- NativeThreadLinuxSP new_thread_sp = std::static_pointer_cast<NativeThreadLinux>(GetThreadByID(tid));
+ NativeThreadLinuxSP new_thread_sp = GetThreadByID(tid);
if (new_thread_sp)
{
@@ -1114,9 +1110,9 @@ NativeProcessLinux::WaitForNewThread(::p
log->Printf ("NativeProcessLinux::%s() pid = %" PRIu64 ": tracking new thread tid %" PRIu32,
__FUNCTION__, GetID (), tid);
- new_thread_sp = std::static_pointer_cast<NativeThreadLinux>(AddThread(tid));
+ new_thread_sp = AddThread(tid);
ResumeThread(new_thread_sp, eStateRunning, LLDB_INVALID_SIGNAL_NUMBER);
- ThreadWasCreated(tid);
+ ThreadWasCreated(*new_thread_sp);
}
void
@@ -1132,7 +1128,7 @@ NativeProcessLinux::MonitorSIGTRAP(const
Mutex::Locker locker (m_threads_mutex);
// See if we can find a thread for this signal.
- NativeThreadLinuxSP thread_sp = std::static_pointer_cast<NativeThreadLinux>(GetThreadByID(pid));
+ NativeThreadLinuxSP thread_sp = GetThreadByID(pid);
if (!thread_sp)
{
if (log)
@@ -1167,7 +1163,7 @@ NativeProcessLinux::MonitorSIGTRAP(const
case (SIGTRAP | (PTRACE_EVENT_EXEC << 8)):
{
- NativeThreadProtocolSP main_thread_sp;
+ NativeThreadLinuxSP main_thread_sp;
if (log)
log->Printf ("NativeProcessLinux::%s() received exec event, code = %d", __FUNCTION__, info->si_code ^ SIGTRAP);
@@ -1183,13 +1179,12 @@ NativeProcessLinux::MonitorSIGTRAP(const
const bool is_main_thread = thread_sp && thread_sp->GetID () == GetID ();
if (is_main_thread)
{
- main_thread_sp = thread_sp;
+ main_thread_sp = std::static_pointer_cast<NativeThreadLinux>(thread_sp);
if (log)
log->Printf ("NativeProcessLinux::%s found main thread with tid %" PRIu64 ", keeping", __FUNCTION__, main_thread_sp->GetID ());
}
else
{
- // Tell thread coordinator this thread is dead.
if (log)
log->Printf ("NativeProcessLinux::%s discarding non-main-thread tid %" PRIu64 " due to exec", __FUNCTION__, thread_sp->GetID ());
}
@@ -1201,7 +1196,7 @@ NativeProcessLinux::MonitorSIGTRAP(const
{
m_threads.push_back (main_thread_sp);
SetCurrentThreadID (main_thread_sp->GetID ());
- std::static_pointer_cast<NativeThreadLinux> (main_thread_sp)->SetStoppedByExec ();
+ main_thread_sp->SetStoppedByExec();
}
else
{
@@ -1211,8 +1206,7 @@ NativeProcessLinux::MonitorSIGTRAP(const
}
// Tell coordinator about about the "new" (since exec) stopped main thread.
- const lldb::tid_t main_thread_tid = GetID ();
- ThreadWasCreated(main_thread_tid);
+ ThreadWasCreated(*main_thread_sp);
// NOTE: ideally these next statements would execute at the same time as the coordinator thread create was executed.
// Consider a handler that can execute when that happens.
@@ -1273,7 +1267,7 @@ NativeProcessLinux::MonitorSIGTRAP(const
__FUNCTION__, pid, error.AsCString());
if (wp_index != LLDB_INVALID_INDEX32)
{
- MonitorWatchpoint(pid, thread_sp, wp_index);
+ MonitorWatchpoint(*thread_sp, wp_index);
break;
}
}
@@ -1297,7 +1291,7 @@ NativeProcessLinux::MonitorSIGTRAP(const
__FUNCTION__, pid, error.AsCString());
if (wp_index != LLDB_INVALID_INDEX32)
{
- MonitorWatchpoint(pid, thread_sp, wp_index);
+ MonitorWatchpoint(*thread_sp, wp_index);
break;
}
}
@@ -1327,7 +1321,7 @@ NativeProcessLinux::MonitorSIGTRAP(const
}
void
-NativeProcessLinux::MonitorTrace(lldb::pid_t pid, NativeThreadProtocolSP thread_sp)
+NativeProcessLinux::MonitorTrace(lldb::pid_t pid, const NativeThreadLinuxSP &thread_sp)
{
Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_PROCESS));
if (log)
@@ -1336,7 +1330,7 @@ NativeProcessLinux::MonitorTrace(lldb::p
// This thread is currently stopped.
if (thread_sp)
- std::static_pointer_cast<NativeThreadLinux>(thread_sp)->SetStoppedByTrace();
+ thread_sp->SetStoppedByTrace();
// Here we don't have to request the rest of the threads to stop or request a deferred stop.
// This would have already happened at the time the Resume() with step operation was signaled.
@@ -1348,7 +1342,7 @@ NativeProcessLinux::MonitorTrace(lldb::p
}
void
-NativeProcessLinux::MonitorBreakpoint(lldb::pid_t pid, NativeThreadProtocolSP thread_sp)
+NativeProcessLinux::MonitorBreakpoint(lldb::pid_t pid, const NativeThreadLinuxSP &thread_sp)
{
Log *log(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_PROCESS | LIBLLDB_LOG_BREAKPOINTS));
if (log)
@@ -1358,7 +1352,7 @@ NativeProcessLinux::MonitorBreakpoint(ll
// Mark the thread as stopped at breakpoint.
if (thread_sp)
{
- std::static_pointer_cast<NativeThreadLinux>(thread_sp)->SetStoppedByBreakpoint();
+ thread_sp->SetStoppedByBreakpoint();
Error error = FixupBreakpointPCAsNeeded(thread_sp);
if (error.Fail())
if (log)
@@ -1366,7 +1360,7 @@ NativeProcessLinux::MonitorBreakpoint(ll
__FUNCTION__, pid, error.AsCString());
if (m_threads_stepping_with_breakpoint.find(pid) != m_threads_stepping_with_breakpoint.end())
- std::static_pointer_cast<NativeThreadLinux>(thread_sp)->SetStoppedByTrace();
+ thread_sp->SetStoppedByTrace();
}
else
if (log)
@@ -1380,21 +1374,20 @@ NativeProcessLinux::MonitorBreakpoint(ll
}
void
-NativeProcessLinux::MonitorWatchpoint(lldb::pid_t pid, NativeThreadProtocolSP thread_sp, uint32_t wp_index)
+NativeProcessLinux::MonitorWatchpoint(NativeThreadLinux &thread, uint32_t wp_index)
{
Log *log(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_PROCESS | LIBLLDB_LOG_WATCHPOINTS));
if (log)
log->Printf("NativeProcessLinux::%s() received watchpoint event, "
"pid = %" PRIu64 ", wp_index = %" PRIu32,
- __FUNCTION__, pid, wp_index);
+ __FUNCTION__, thread.GetID(), wp_index);
// Mark the thread as stopped at watchpoint.
// The address is at (lldb::addr_t)info->si_addr if we need it.
- lldbassert(thread_sp && "thread_sp cannot be NULL");
- std::static_pointer_cast<NativeThreadLinux>(thread_sp)->SetStoppedByWatchpoint(wp_index);
+ thread.SetStoppedByWatchpoint(wp_index);
// We need to tell all other running threads before we notify the delegate about this stop.
- StopRunningThreads(pid);
+ StopRunningThreads(thread.GetID());
}
void
@@ -1421,7 +1414,7 @@ NativeProcessLinux::MonitorSignal(const
Mutex::Locker locker (m_threads_mutex);
// See if we can find a thread for this signal.
- NativeThreadLinuxSP thread_sp = std::static_pointer_cast<NativeThreadLinux>(GetThreadByID(pid));
+ NativeThreadLinuxSP thread_sp = GetThreadByID(pid);
if (!thread_sp)
{
if (log)
@@ -1453,11 +1446,11 @@ NativeProcessLinux::MonitorSignal(const
log->Printf ("NativeProcessLinux::%s() pid = %" PRIu64 " tid %" PRIu64 ": new thread notification",
__FUNCTION__, GetID (), pid);
- thread_sp = std::static_pointer_cast<NativeThreadLinux>(AddThread(pid));
+ thread_sp = AddThread(pid);
assert (thread_sp.get() && "failed to create the tracking data for newly created inferior thread");
// We can now resume the newly created thread.
ResumeThread(thread_sp, eStateRunning, LLDB_INVALID_SIGNAL_NUMBER);
- ThreadWasCreated(pid);
+ ThreadWasCreated(*thread_sp);
// Done handling.
return;
}
@@ -1480,10 +1473,7 @@ NativeProcessLinux::MonitorSignal(const
// and that, without an intervening resume, we received another stop. It is more likely
// that we are missing the marking of a run state somewhere if we find that the thread was
// marked as stopped.
- std::shared_ptr<NativeThreadLinux> linux_thread_sp = std::static_pointer_cast<NativeThreadLinux> (thread_sp);
- assert (linux_thread_sp && "linux_thread_sp is null!");
-
- const StateType thread_state = linux_thread_sp->GetState ();
+ const StateType thread_state = thread_sp->GetState();
if (!StateIsStoppedState (thread_state, false))
{
// An inferior thread has stopped because of a SIGSTOP we have sent it.
@@ -1496,9 +1486,9 @@ NativeProcessLinux::MonitorSignal(const
if (m_pending_notification_tid != LLDB_INVALID_THREAD_ID)
{
if (m_pending_notification_tid == pid)
- linux_thread_sp->SetStoppedBySignal(SIGSTOP, info);
+ thread_sp->SetStoppedBySignal(SIGSTOP, info);
else
- linux_thread_sp->SetStoppedWithNoReason();
+ thread_sp->SetStoppedWithNoReason();
SetCurrentThreadID (thread_sp->GetID ());
SignalIfAllThreadsStopped();
@@ -1507,11 +1497,11 @@ NativeProcessLinux::MonitorSignal(const
{
// We can end up here if stop was initiated by LLGS but by this time a
// thread stop has occurred - maybe initiated by another event.
- Error error = ResumeThread(linux_thread_sp, linux_thread_sp->GetState(), 0);
+ Error error = ResumeThread(thread_sp, thread_sp->GetState(), 0);
if (error.Fail() && log)
{
log->Printf("NativeProcessLinux::%s failed to resume thread tid %" PRIu64 ": %s",
- __FUNCTION__, linux_thread_sp->GetID(), error.AsCString ());
+ __FUNCTION__, thread_sp->GetID(), error.AsCString());
}
}
}
@@ -1521,7 +1511,7 @@ NativeProcessLinux::MonitorSignal(const
{
// Retrieve the signal name if the thread was stopped by a signal.
int stop_signo = 0;
- const bool stopped_by_signal = linux_thread_sp->IsStopped (&stop_signo);
+ const bool stopped_by_signal = thread_sp->IsStopped(&stop_signo);
const char *signal_name = stopped_by_signal ? Host::GetSignalAsCString(stop_signo) : "<not stopped by signal>";
if (!signal_name)
signal_name = "<no-signal-name>";
@@ -1529,7 +1519,7 @@ NativeProcessLinux::MonitorSignal(const
log->Printf ("NativeProcessLinux::%s() pid %" PRIu64 " tid %" PRIu64 ", thread was already marked as a stopped state (state=%s, signal=%d (%s)), leaving stop signal as is",
__FUNCTION__,
GetID (),
- linux_thread_sp->GetID (),
+ thread_sp->GetID(),
StateAsCString (thread_state),
stop_signo,
signal_name);
@@ -1547,7 +1537,7 @@ NativeProcessLinux::MonitorSignal(const
// This thread is stopped.
if (thread_sp)
- std::static_pointer_cast<NativeThreadLinux> (thread_sp)->SetStoppedBySignal(signo, info);
+ thread_sp->SetStoppedBySignal(signo, info);
// Send a stop to the debugger after we get all other threads to stop.
StopRunningThreads (pid);
@@ -2820,7 +2810,7 @@ NativeProcessLinux::StopTrackingThread (
return found;
}
-NativeThreadProtocolSP
+NativeThreadLinuxSP
NativeProcessLinux::AddThread (lldb::tid_t thread_id)
{
Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_THREAD));
@@ -2841,20 +2831,18 @@ NativeProcessLinux::AddThread (lldb::tid
if (m_threads.empty ())
SetCurrentThreadID (thread_id);
- NativeThreadProtocolSP thread_sp (new NativeThreadLinux (this, thread_id));
+ auto thread_sp = std::make_shared<NativeThreadLinux>(this, thread_id);
m_threads.push_back (thread_sp);
-
return thread_sp;
}
Error
-NativeProcessLinux::FixupBreakpointPCAsNeeded (NativeThreadProtocolSP &thread_sp)
+NativeProcessLinux::FixupBreakpointPCAsNeeded(const NativeThreadLinuxSP &thread_sp)
{
Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_BREAKPOINTS));
Error error;
- // Get a linux thread pointer.
if (!thread_sp)
{
error.SetErrorString ("null thread_sp");
@@ -2862,10 +2850,9 @@ NativeProcessLinux::FixupBreakpointPCAsN
log->Printf ("NativeProcessLinux::%s failed: %s", __FUNCTION__, error.AsCString ());
return error;
}
- std::shared_ptr<NativeThreadLinux> linux_thread_sp = std::static_pointer_cast<NativeThreadLinux> (thread_sp);
// Find out the size of a breakpoint (might depend on where we are in the code).
- NativeRegisterContextSP context_sp = linux_thread_sp->GetRegisterContext ();
+ NativeRegisterContextSP context_sp = thread_sp->GetRegisterContext();
if (!context_sp)
{
error.SetErrorString ("cannot get a NativeRegisterContext for the thread");
@@ -2932,13 +2919,13 @@ NativeProcessLinux::FixupBreakpointPCAsN
// Change the program counter.
if (log)
- log->Printf ("NativeProcessLinux::%s pid %" PRIu64 " tid %" PRIu64 ": changing PC from 0x%" PRIx64 " to 0x%" PRIx64, __FUNCTION__, GetID (), linux_thread_sp->GetID (), initial_pc_addr, breakpoint_addr);
+ log->Printf ("NativeProcessLinux::%s pid %" PRIu64 " tid %" PRIu64 ": changing PC from 0x%" PRIx64 " to 0x%" PRIx64, __FUNCTION__, GetID(), thread_sp->GetID(), initial_pc_addr, breakpoint_addr);
error = context_sp->SetPC (breakpoint_addr);
if (error.Fail ())
{
if (log)
- log->Printf ("NativeProcessLinux::%s pid %" PRIu64 " tid %" PRIu64 ": failed to set PC: %s", __FUNCTION__, GetID (), linux_thread_sp->GetID (), error.AsCString ());
+ log->Printf ("NativeProcessLinux::%s pid %" PRIu64 " tid %" PRIu64 ": failed to set PC: %s", __FUNCTION__, GetID(), thread_sp->GetID(), error.AsCString ());
return error;
}
@@ -3009,6 +2996,12 @@ NativeProcessLinux::GetFileLoadAddress(c
return error;
}
+NativeThreadLinuxSP
+NativeProcessLinux::GetThreadByID(lldb::tid_t tid)
+{
+ return std::static_pointer_cast<NativeThreadLinux>(NativeProcessProtocol::GetThreadByID(tid));
+}
+
Error
NativeProcessLinux::ResumeThread(const NativeThreadLinuxSP &thread_sp, lldb::StateType state, int signo)
{
@@ -3121,21 +3114,18 @@ NativeProcessLinux::SignalIfAllThreadsSt
}
void
-NativeProcessLinux::ThreadWasCreated (lldb::tid_t tid)
+NativeProcessLinux::ThreadWasCreated(NativeThreadLinux &thread)
{
Log *const log = GetLogIfAllCategoriesSet (LIBLLDB_LOG_THREAD);
if (log)
- log->Printf("NativeProcessLinux::%s (tid: %" PRIu64 ")", __FUNCTION__, tid);
-
- auto thread_sp = std::static_pointer_cast<NativeThreadLinux>(GetThreadByID(tid));
- lldbassert(thread_sp != nullptr);
+ log->Printf("NativeProcessLinux::%s (tid: %" PRIu64 ")", __FUNCTION__, thread.GetID());
- if (m_pending_notification_tid != LLDB_INVALID_THREAD_ID && StateIsRunningState(thread_sp->GetState()))
+ if (m_pending_notification_tid != LLDB_INVALID_THREAD_ID && StateIsRunningState(thread.GetState()))
{
// We will need to wait for this new thread to stop as well before firing the
// notification.
- thread_sp->RequestStop();
+ thread.RequestStop();
}
}
Modified: lldb/trunk/source/Plugins/Process/Linux/NativeProcessLinux.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/NativeProcessLinux.h?rev=245681&r1=245680&r2=245681&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/Linux/NativeProcessLinux.h (original)
+++ lldb/trunk/source/Plugins/Process/Linux/NativeProcessLinux.h Fri Aug 21 04:13:53 2015
@@ -113,6 +113,9 @@ namespace process_linux {
Error
GetFileLoadAddress(const llvm::StringRef& file_name, lldb::addr_t& load_addr) override;
+ NativeThreadLinuxSP
+ GetThreadByID(lldb::tid_t id);
+
// ---------------------------------------------------------------------
// Interface used by NativeRegisterContext-derived classes.
// ---------------------------------------------------------------------
@@ -225,13 +228,13 @@ namespace process_linux {
MonitorSIGTRAP(const siginfo_t *info, lldb::pid_t pid);
void
- MonitorTrace(lldb::pid_t pid, NativeThreadProtocolSP thread_sp);
+ MonitorTrace(lldb::pid_t pid, const NativeThreadLinuxSP &thread_sp);
void
- MonitorBreakpoint(lldb::pid_t pid, NativeThreadProtocolSP thread_sp);
+ MonitorBreakpoint(lldb::pid_t pid, const NativeThreadLinuxSP &thread_sp);
void
- MonitorWatchpoint(lldb::pid_t pid, NativeThreadProtocolSP thread_sp, uint32_t wp_index);
+ MonitorWatchpoint(NativeThreadLinux &thread, uint32_t wp_index);
void
MonitorSignal(const siginfo_t *info, lldb::pid_t pid, bool exited);
@@ -265,14 +268,14 @@ namespace process_linux {
bool
StopTrackingThread (lldb::tid_t thread_id);
- NativeThreadProtocolSP
+ NativeThreadLinuxSP
AddThread (lldb::tid_t thread_id);
Error
GetSoftwareBreakpointPCOffset (NativeRegisterContextSP context_sp, uint32_t &actual_opcode_size);
Error
- FixupBreakpointPCAsNeeded (NativeThreadProtocolSP &thread_sp);
+ FixupBreakpointPCAsNeeded(const NativeThreadLinuxSP &thread_sp);
/// Writes a siginfo_t structure corresponding to the given thread ID to the
/// memory region pointed to by @p siginfo.
@@ -317,7 +320,7 @@ namespace process_linux {
ResumeThread(const NativeThreadLinuxSP &thread_sp, lldb::StateType state, int signo);
void
- ThreadWasCreated (lldb::tid_t tid);
+ ThreadWasCreated(NativeThreadLinux &thread);
void
SigchldHandler();
More information about the lldb-commits
mailing list