[Lldb-commits] [lldb] r187545 - Fix thread name updating in Linux. "thread list" should report correct names always now.
Michael Sartain
mikesart at valvesoftware.com
Thu Aug 1 11:54:55 PDT 2013
Committed as r187599.
Thread IDs on linux are now real thread IDs, so log enable --thread-name
now works.
Thanks Ashok.
On Thu, Aug 1, 2013 at 10:36 AM, Michael Sartain <mikesart at valvesoftware.com
> wrote:
> Well, it was me. My changes exposed a different bug: bad tids are being
> passed to GetThreadName().
>
> std::string thread_name (Host::GetThreadName (getpid(),
> Host::GetCurrentThreadID()));
>
> Host::GetCurrentThreadID() does this:
>
> return lldb::tid_t(pthread_self());
>
> That doesn't work on Linux though - pthread_self() and TIDs are completely
> different beasts. I'll fix this.
> -Mike
>
> On Thu, Aug 1, 2013 at 8:49 AM, Mike Sartain <mikesart at valvesoftware.com>wrote:
>
>> I think the test is failing because an extra space is showing up before
>> the log output for the "command alias bp breakpoint" command. I'll look,
>> but I'd be surprised if this is due to my checkin.
>>
>> (lldb) command alias bp breakpoint
>> Processing command: command alias bp breakpoint
>> HandleCommand, cmd_obj : 'command alias'
>> HandleCommand, revised_command_line: 'command alias bp breakpoint'
>> HandleCommand, wants_raw_input:'True'
>> HandleCommand, command line after removing command name(s): 'bp
>> breakpoint'
>> HandleCommand, command succeeded
>>
>> AssertionError: Expected 'Processing command: command alias bp breakpoint
>> '; Found ' Processing command: command alias bp breakpoint
>> '
>>
>> On Aug 1, 2013, at 8:05 AM, "Thirumurthi, Ashok" <
>> ashok.thirumurthi at intel.com> wrote:
>>
>> > FYI Mike,
>> >
>> > I'm guessing that one of the "thread list" commits introduced a minor
>> regression on both buildbots:
>> >
>> http://lab.llvm.org:8011/builders/lldb-x86_64-debian-clang/builds/5774/steps/test%20lldb/logs/stdio
>> >
>> http://lab.llvm.org:8011/builders/lldb-x86_64-linux/builds/5859/steps/test%20lldb/logs/stdio
>> >
>> >
>> > FAIL: LLDB (clang-x86_64) :: test_with_dwarf (TestLogging.LogTestCase)
>> > ======================================================================
>> > FAIL: test_with_dwarf (TestLogging.LogTestCase)
>> > ----------------------------------------------------------------------
>> > Traceback (most recent call last):
>> > File
>> "/home/llvmbb/llvm-build-dir/lldb-x86_64-clang/llvm/tools/lldb/test/lldbtest.py",
>> line 370, in wrapper
>> > return func(self, *args, **kwargs)
>> > File
>> "/home/llvmbb/llvm-build-dir/lldb-x86_64-clang/llvm/tools/lldb/test/logging/TestLogging.py",
>> line 23, in test_with_dwarf
>> > self.command_log_tests ("dwarf")
>> > File
>> "/home/llvmbb/llvm-build-dir/lldb-x86_64-clang/llvm/tools/lldb/test/logging/TestLogging.py",
>> line 90, in command_log_tests
>> > self.fail (err_msg)
>> > AssertionError: Expected 'Processing command: command alias bp
>> breakpoint
>> > '; Found ' Processing command: command alias bp breakpoint
>> > '
>> > Config=x86_64-clang
>> >
>> > - Ashok
>> >
>> > -----Original Message-----
>> > From: lldb-commits-bounces at cs.uiuc.edu [mailto:
>> lldb-commits-bounces at cs.uiuc.edu] On Behalf Of Michael Sartain
>> > Sent: Wednesday, July 31, 2013 7:28 PM
>> > To: lldb-commits at cs.uiuc.edu
>> > Subject: [Lldb-commits] [lldb] r187545 - Fix thread name updating in
>> Linux. "thread list" should report correct names always now.
>> >
>> > Author: mikesart
>> > Date: Wed Jul 31 18:27:46 2013
>> > New Revision: 187545
>> >
>> > URL: http://llvm.org/viewvc/llvm-project?rev=187545&view=rev
>> > Log:
>> > Fix thread name updating in Linux. "thread list" should report correct
>> names always now.
>> > Created new LinuxThread class inherited from POSIXThread and removed
>> linux / freebsd ifdefs Removed several un-needed set thread name calls
>> >
>> > CR (and multiple suggestions): mkopec
>> >
>> >
>> > Added:
>> > lldb/trunk/source/Plugins/Process/Linux/LinuxThread.cpp
>> > lldb/trunk/source/Plugins/Process/Linux/LinuxThread.h
>> > Modified:
>> > lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp
>> > lldb/trunk/source/Plugins/Process/Linux/CMakeLists.txt
>> > lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.cpp
>> > lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.h
>> > lldb/trunk/source/Plugins/Process/Linux/ProcessMonitor.cpp
>> > lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.cpp
>> > lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.h
>> > lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.cpp
>> > lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.h
>> > lldb/trunk/source/Target/TargetList.cpp
>> >
>> > Modified: lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp
>> > URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp?rev=187545&r1=187544&r2=187545&view=diff
>> >
>> ==============================================================================
>> > --- lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp
>> (original)
>> > +++ lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp Wed Jul
>> > +++ 31 18:27:46 2013
>> > @@ -1003,7 +1003,7 @@ ProcessMonitor::Launch(LaunchArgs *args)
>> > goto FINISH;
>> >
>> > // Update the process thread list with this new thread.
>> > - inferior.reset(new POSIXThread(*processSP, pid));
>> > + inferior.reset(process.CreateNewPOSIXThread(*processSP, pid));
>> > if (log)
>> > log->Printf ("ProcessMonitor::%s() adding pid = %" PRIu64,
>> __FUNCTION__, pid);
>> > process.GetThreadList().AddThread(inferior);
>> > @@ -1085,7 +1085,7 @@ ProcessMonitor::Attach(AttachArgs *args)
>> > }
>> >
>> > // Update the process thread list with the attached thread.
>> > - inferior.reset(new POSIXThread(*processSP, pid));
>> > + inferior.reset(process.CreateNewPOSIXThread(*processSP, pid));
>> > tl.AddThread(inferior);
>> >
>> > // Let our process instance know the thread has stopped.
>> >
>> > Modified: lldb/trunk/source/Plugins/Process/Linux/CMakeLists.txt
>> > URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/CMakeLists.txt?rev=187545&r1=187544&r2=187545&view=diff
>> >
>> ==============================================================================
>> > --- lldb/trunk/source/Plugins/Process/Linux/CMakeLists.txt (original)
>> > +++ lldb/trunk/source/Plugins/Process/Linux/CMakeLists.txt Wed Jul 31
>> > +++ 18:27:46 2013
>> > @@ -7,5 +7,6 @@ add_lldb_library(lldbPluginProcessLinux
>> > ProcessLinux.cpp
>> > ProcessMonitor.cpp
>> > LinuxSignals.cpp
>> > + LinuxThread.cpp
>> > )
>> >
>> >
>> > Added: lldb/trunk/source/Plugins/Process/Linux/LinuxThread.cpp
>> > URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/LinuxThread.cpp?rev=187545&view=auto
>> >
>> ==============================================================================
>> > --- lldb/trunk/source/Plugins/Process/Linux/LinuxThread.cpp (added)
>> > +++ lldb/trunk/source/Plugins/Process/Linux/LinuxThread.cpp Wed Jul 31
>> > +++ 18:27:46 2013
>> > @@ -0,0 +1,63 @@
>> > +//===-- LinuxThread.cpp -----------------------------------------*- C++
>> > +-*-===// //
>> > +// The LLVM Compiler Infrastructure
>> > +//
>> > +// This file is distributed under the University of Illinois Open
>> > +Source // License. See LICENSE.TXT for details.
>> > +//
>> > +//===------------------------------------------------------------------
>> > +----===//
>> > +
>> > +// C Includes
>> > +// C++ Includes
>> > +// Other libraries and framework includes // Project includes #include
>> > +"LinuxThread.h"
>> > +
>> > +using namespace lldb;
>> > +using namespace lldb_private;
>> > +
>> > +//---------------------------------------------------------------------
>> > +---------
>> > +// Constructors and destructors.
>> > +
>> > +LinuxThread::LinuxThread(Process &process, lldb::tid_t tid)
>> > + : POSIXThread(process, tid)
>> > +{
>> > +}
>> > +
>> > +LinuxThread::~LinuxThread()
>> > +{
>> > +}
>> > +
>> > +//---------------------------------------------------------------------
>> > +---------
>> > +// ProcessInterface protocol.
>> > +
>> > +void
>> > +LinuxThread::RefreshStateAfterStop()
>> > +{
>> > + // Invalidate the thread names every time we get a stop event on
>> Linux so we
>> > + // will re-read the procfs comm virtual file when folks ask for
>> the thread name.
>> > + m_thread_name_valid = false;
>> > +
>> > + POSIXThread::RefreshStateAfterStop();
>> > +}
>> > +
>> > +void
>> > +LinuxThread::TraceNotify(const ProcessMessage &message) {
>> > + RegisterContextPOSIX* reg_ctx = GetRegisterContextPOSIX();
>> > + if (reg_ctx)
>> > + {
>> > + uint32_t num_hw_wps =
>> reg_ctx->NumSupportedHardwareWatchpoints();
>> > + uint32_t wp_idx;
>> > + for (wp_idx = 0; wp_idx < num_hw_wps; wp_idx++)
>> > + {
>> > + if (reg_ctx->IsWatchpointHit(wp_idx))
>> > + {
>> > + WatchNotify(message);
>> > + return;
>> > + }
>> > + }
>> > + }
>> > +
>> > + POSIXThread::TraceNotify (message); }
>> > \ No newline at end of file
>> >
>> > Added: lldb/trunk/source/Plugins/Process/Linux/LinuxThread.h
>> > URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/LinuxThread.h?rev=187545&view=auto
>> >
>> ==============================================================================
>> > --- lldb/trunk/source/Plugins/Process/Linux/LinuxThread.h (added)
>> > +++ lldb/trunk/source/Plugins/Process/Linux/LinuxThread.h Wed Jul 31
>> 18:27:46 2013
>> > @@ -0,0 +1,43 @@
>> > +//===-- LinuxThread.h -------------------------------------------*-
>> C++ -*-===//
>> > +//
>> > +// The LLVM Compiler Infrastructure
>> > +//
>> > +// This file is distributed under the University of Illinois Open
>> Source
>> > +// License. See LICENSE.TXT for details.
>> > +//
>> >
>> +//===----------------------------------------------------------------------===//
>> > +
>> > +#ifndef liblldb_LinuxThread_H_
>> > +#define liblldb_LinuxThread_H_
>> > +
>> > +// Other libraries and framework includes
>> > +#include "POSIXThread.h"
>> > +
>> >
>> +//------------------------------------------------------------------------------
>> > +// @class LinuxThread
>> > +// @brief Abstraction of a Linux thread.
>> > +class LinuxThread
>> > + : public POSIXThread
>> > +{
>> > +public:
>> > +
>> > +
>> //------------------------------------------------------------------
>> > + // Constructors and destructors
>> > +
>> //------------------------------------------------------------------
>> > + LinuxThread(lldb_private::Process &process, lldb::tid_t tid);
>> > +
>> > + virtual ~LinuxThread();
>> > +
>> > +
>> //--------------------------------------------------------------------------
>> > + // LinuxThread internal API.
>> > +
>> > + // POSIXThread override
>> > + virtual void
>> > + RefreshStateAfterStop();
>> > +
>> > +protected:
>> > + virtual void
>> > + TraceNotify(const ProcessMessage &message);
>> > +};
>> > +
>> > +#endif // #ifndef liblldb_LinuxThread_H_
>> >
>> > Modified: lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.cpp
>> > URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.cpp?rev=187545&r1=187544&r2=187545&view=diff
>> >
>> ==============================================================================
>> > --- lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.cpp (original)
>> > +++ lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.cpp Wed Jul 31
>> 18:27:46 2013
>> > @@ -23,7 +23,7 @@
>> > #include "ProcessPOSIXLog.h"
>> > #include "Plugins/Process/Utility/InferiorCallPOSIX.h"
>> > #include "ProcessMonitor.h"
>> > -#include "POSIXThread.h"
>> > +#include "LinuxThread.h"
>> >
>> > using namespace lldb;
>> > using namespace lldb_private;
>> > @@ -64,7 +64,7 @@ ProcessLinux::Initialize()
>> > // Constructors and destructors.
>> >
>> > ProcessLinux::ProcessLinux(Target& target, Listener &listener, FileSpec
>> *core_file)
>> > - : ProcessPOSIX(target, listener), m_stopping_threads(false),
>> m_core_file(core_file)
>> > + : ProcessPOSIX(target, listener), m_core_file(core_file),
>> m_stopping_threads(false)
>> > {
>> > #if 0
>> > // FIXME: Putting this code in the ctor and saving the byte order
>> in a
>> > @@ -81,6 +81,7 @@ void
>> > ProcessLinux::Terminate()
>> > {
>> > }
>> > +
>> > lldb_private::ConstString
>> > ProcessLinux::GetPluginNameStatic()
>> > {
>> > @@ -171,6 +172,13 @@ ProcessLinux::StopAllThreads(lldb::tid_t
>> > log->Printf ("ProcessLinux::%s() finished", __FUNCTION__);
>> > }
>> >
>> > +// ProcessPOSIX override
>> > +POSIXThread *
>> > +ProcessLinux::CreateNewPOSIXThread(lldb_private::Process &process,
>> lldb::tid_t tid)
>> > +{
>> > + return new LinuxThread(process, tid);
>> > +}
>> > +
>> > bool
>> > ProcessLinux::CanDebug(Target &target, bool plugin_specified_by_name)
>> > {
>> >
>> > Modified: lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.h
>> > URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.h?rev=187545&r1=187544&r2=187545&view=diff
>> >
>> ==============================================================================
>> > --- lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.h (original)
>> > +++ lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.h Wed Jul 31
>> 18:27:46 2013
>> > @@ -56,6 +56,7 @@ public:
>> >
>> > virtual bool
>> > UpdateThreadList(lldb_private::ThreadList &old_thread_list,
>> lldb_private::ThreadList &new_thread_list);
>> > +
>> > //------------------------------------------------------------------
>> > // PluginInterface protocol
>> > //------------------------------------------------------------------
>> > @@ -94,6 +95,9 @@ public:
>> > virtual void
>> > StopAllThreads(lldb::tid_t stop_tid);
>> >
>> > + virtual POSIXThread *
>> > + CreateNewPOSIXThread(lldb_private::Process &process, lldb::tid_t
>> tid);
>> > +
>> > private:
>> >
>> > /// Linux-specific signal set.
>> >
>> > Modified: lldb/trunk/source/Plugins/Process/Linux/ProcessMonitor.cpp
>> > URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/ProcessMonitor.cpp?rev=187545&r1=187544&r2=187545&view=diff
>> >
>> ==============================================================================
>> > --- lldb/trunk/source/Plugins/Process/Linux/ProcessMonitor.cpp
>> (original)
>> > +++ lldb/trunk/source/Plugins/Process/Linux/ProcessMonitor.cpp Wed Jul
>> 31 18:27:46 2013
>> > @@ -1098,7 +1098,6 @@ ProcessMonitor::Launch(LaunchArgs *args)
>> > lldb::pid_t pid;
>> >
>> > lldb::ThreadSP inferior;
>> > - POSIXThread *thread;
>> > Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet
>> (POSIX_LOG_PROCESS));
>> >
>> > // Propagate the environment if one is not supplied.
>> > @@ -1232,10 +1231,7 @@ ProcessMonitor::Launch(LaunchArgs *args)
>> > // Update the process thread list with this new thread.
>> > // FIXME: should we be letting UpdateThreadList handle this?
>> > // FIXME: by using pids instead of tids, we can only support one
>> thread.
>> > - inferior.reset(new POSIXThread(process, pid));
>> > -
>> > - thread = static_cast<POSIXThread*>(inferior.get());
>> > - thread->SetName(Host::GetThreadName(pid, pid).c_str());
>> > + inferior.reset(process.CreateNewPOSIXThread(process, pid));
>> >
>> > if (log)
>> > log->Printf ("ProcessMonitor::%s() adding pid = %" PRIu64,
>> __FUNCTION__, pid);
>> > @@ -1297,7 +1293,6 @@ ProcessMonitor::Attach(AttachArgs *args)
>> > ProcessMonitor *monitor = args->m_monitor;
>> > ProcessLinux &process = monitor->GetProcess();
>> > lldb::ThreadSP inferior;
>> > - POSIXThread *thread;
>> > Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet
>> (POSIX_LOG_PROCESS));
>> >
>> > // Use a map to keep track of the threads which we have
>> attached/need to attach.
>> > @@ -1362,10 +1357,7 @@ ProcessMonitor::Attach(AttachArgs *args)
>> > }
>> >
>> > // Update the process thread list with the attached
>> thread.
>> > - inferior.reset(new POSIXThread(process, tid));
>> > -
>> > - thread = static_cast<POSIXThread*>(inferior.get());
>> > - thread->SetName(Host::GetThreadName(pid, tid).c_str());
>> > + inferior.reset(process.CreateNewPOSIXThread(process,
>> tid));
>> >
>> > if (log)
>> > log->Printf ("ProcessMonitor::%s() adding tid = %"
>> PRIu64, __FUNCTION__, tid);
>> >
>> > Modified: lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.cpp
>> > URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.cpp?rev=187545&r1=187544&r2=187545&view=diff
>> >
>> ==============================================================================
>> > --- lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.cpp (original)
>> > +++ lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.cpp Wed Jul 31
>> 18:27:46 2013
>> > @@ -45,6 +45,7 @@ POSIXThread::POSIXThread(Process &proces
>> > : Thread(process, tid),
>> > m_frame_ap (),
>> > m_breakpoint (),
>> > + m_thread_name_valid (false),
>> > m_thread_name ()
>> > {
>> > Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet
>> (POSIX_LOG_THREAD));
>> > @@ -111,7 +112,8 @@ POSIXThread::GetInfo()
>> > void
>> > POSIXThread::SetName (const char *name)
>> > {
>> > - if (name && name[0])
>> > + m_thread_name_valid = (name && name[0]);
>> > + if (m_thread_name_valid)
>> > m_thread_name.assign (name);
>> > else
>> > m_thread_name.clear();
>> > @@ -120,6 +122,12 @@ POSIXThread::SetName (const char *name)
>> > const char *
>> > POSIXThread::GetName ()
>> > {
>> > + if (!m_thread_name_valid)
>> > + {
>> > + SetName(Host::GetThreadName(GetProcess()->GetID(),
>> GetID()).c_str());
>> > + m_thread_name_valid = true;
>> > + }
>> > +
>> > if (m_thread_name.empty())
>> > return NULL;
>> > return m_thread_name.c_str();
>> > @@ -460,22 +468,6 @@ POSIXThread::WatchNotify(const ProcessMe
>> > void
>> > POSIXThread::TraceNotify(const ProcessMessage &message)
>> > {
>> > -#ifndef __FreeBSD__
>> > - RegisterContextPOSIX* reg_ctx = GetRegisterContextPOSIX();
>> > - if (reg_ctx)
>> > - {
>> > - uint32_t num_hw_wps =
>> reg_ctx->NumSupportedHardwareWatchpoints();
>> > - uint32_t wp_idx;
>> > - for (wp_idx = 0; wp_idx < num_hw_wps; wp_idx++)
>> > - {
>> > - if (reg_ctx->IsWatchpointHit(wp_idx))
>> > - {
>> > - WatchNotify(message);
>> > - return;
>> > - }
>> > - }
>> > - }
>> > -#endif
>> > SetStopInfo (StopInfo::CreateStopReasonToTrace(*this));
>> > }
>> >
>> >
>> > Modified: lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.h
>> > URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.h?rev=187545&r1=187544&r2=187545&view=diff
>> >
>> ==============================================================================
>> > --- lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.h (original)
>> > +++ lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.h Wed Jul 31
>> 18:27:46 2013
>> > @@ -91,7 +91,7 @@ public:
>> >
>> > uint32_t FindVacantWatchpointIndex();
>> >
>> > -private:
>> > +protected:
>> > RegisterContextPOSIX *
>> > GetRegisterContextPOSIX ()
>> > {
>> > @@ -107,6 +107,7 @@ private:
>> >
>> > lldb::BreakpointSiteSP m_breakpoint;
>> >
>> > + bool m_thread_name_valid;
>> > std::string m_thread_name;
>> >
>> > ProcessMonitor &
>> > @@ -117,7 +118,7 @@ private:
>> >
>> > void BreakNotify(const ProcessMessage &message);
>> > void WatchNotify(const ProcessMessage &message);
>> > - void TraceNotify(const ProcessMessage &message);
>> > + virtual void TraceNotify(const ProcessMessage &message);
>> > void LimboNotify(const ProcessMessage &message);
>> > void SignalNotify(const ProcessMessage &message);
>> > void SignalDeliveredNotify(const ProcessMessage &message);
>> >
>> > Modified: lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.cpp
>> > URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.cpp?rev=187545&r1=187544&r2=187545&view=diff
>> >
>> ==============================================================================
>> > --- lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.cpp (original)
>> > +++ lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.cpp Wed Jul 31
>> 18:27:46 2013
>> > @@ -479,6 +479,12 @@ ProcessPOSIX::AddThreadForInitialStopIfN
>> > return added_to_set;
>> > }
>> >
>> > +POSIXThread *
>> > +ProcessPOSIX::CreateNewPOSIXThread(lldb_private::Process &process,
>> lldb::tid_t tid)
>> > +{
>> > + return new POSIXThread(process, tid);
>> > +}
>> > +
>> > void
>> > ProcessPOSIX::RefreshStateAfterStop()
>> > {
>> > @@ -508,10 +514,7 @@ ProcessPOSIX::RefreshStateAfterStop()
>> > log->Printf ("ProcessPOSIX::%s() adding thread, tid =
>> %" PRIi64, __FUNCTION__, message.GetChildTID());
>> > lldb::tid_t child_tid = message.GetChildTID();
>> > ThreadSP thread_sp;
>> > - thread_sp.reset(new POSIXThread(*this, child_tid));
>> > -
>> > - POSIXThread *thread =
>> static_cast<POSIXThread*>(thread_sp.get());
>> > - thread->SetName(Host::GetThreadName(GetID(),
>> child_tid).c_str());
>> > + thread_sp.reset(CreateNewPOSIXThread(*this, child_tid));
>> >
>> > Mutex::Locker lock(m_thread_list.GetMutex());
>> >
>> > @@ -821,7 +824,7 @@ ProcessPOSIX::UpdateThreadList(ThreadLis
>> > assert(m_monitor);
>> > ThreadSP thread_sp (old_thread_list.FindThreadByID (GetID(),
>> false));
>> > if (!thread_sp) {
>> > - thread_sp.reset(new POSIXThread(*this, GetID()));
>> > + thread_sp.reset(CreateNewPOSIXThread(*this, GetID()));
>> > }
>> >
>> > if (log && log->GetMask().Test(POSIX_LOG_VERBOSE))
>> >
>> > Modified: lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.h
>> > URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.h?rev=187545&r1=187544&r2=187545&view=diff
>> >
>> ==============================================================================
>> > --- lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.h (original)
>> > +++ lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.h Wed Jul 31
>> 18:27:46 2013
>> > @@ -22,6 +22,7 @@
>> > #include "ProcessMessage.h"
>> >
>> > class ProcessMonitor;
>> > +class POSIXThread;
>> >
>> > class ProcessPOSIX :
>> > public lldb_private::Process
>> > @@ -166,6 +167,9 @@ public:
>> > bool
>> > AddThreadForInitialStopIfNeeded(lldb::tid_t stop_tid);
>> >
>> > + virtual POSIXThread *
>> > + CreateNewPOSIXThread(lldb_private::Process &process, lldb::tid_t
>> tid);
>> > +
>> > protected:
>> > /// Target byte order.
>> > lldb::ByteOrder m_byte_order;
>> >
>> > Modified: lldb/trunk/source/Target/TargetList.cpp
>> > URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/TargetList.cpp?rev=187545&r1=187544&r2=187545&view=diff
>> >
>> ==============================================================================
>> > --- lldb/trunk/source/Target/TargetList.cpp (original)
>> > +++ lldb/trunk/source/Target/TargetList.cpp Wed Jul 31 18:27:46 2013
>> > @@ -222,8 +222,19 @@ TargetList::CreateTarget (Debugger &debu
>> > FileSpec file (user_exe_path, false);
>> > if (!file.Exists() && user_exe_path && user_exe_path[0] == '~')
>> > {
>> > - file = FileSpec(user_exe_path, true);
>> > + // we want to expand the tilde but we don't want to resolve
>> any symbolic links
>> > + // so we can't use the FileSpec constructor's resolve flag
>> > + char unglobbed_path[PATH_MAX];
>> > + unglobbed_path[0] = '\0';
>> > +
>> > + size_t return_count = FileSpec::ResolveUsername(user_exe_path,
>> unglobbed_path, sizeof(unglobbed_path));
>> > +
>> > + if (return_count == 0 || return_count >=
>> sizeof(unglobbed_path))
>> > + ::snprintf (unglobbed_path, sizeof(unglobbed_path), "%s",
>> user_exe_path);
>> > +
>> > + file = FileSpec(unglobbed_path, false);
>> > }
>> > +
>> > bool user_exe_path_is_bundle = false;
>> > char resolved_bundle_exe_path[PATH_MAX];
>> > resolved_bundle_exe_path[0] = '\0';
>> > @@ -305,8 +316,8 @@ TargetList::CreateTarget (Debugger &debu
>> > }
>> > else
>> > {
>> > - // Just use what the user typed
>> > - target_sp->SetArg0 (user_exe_path);
>> > + // Use resolved path
>> > + target_sp->SetArg0 (file.GetPath().c_str());
>> > }
>> > }
>> > if (file.GetDirectory())
>> >
>> >
>> > _______________________________________________
>> > lldb-commits mailing list
>> > lldb-commits at cs.uiuc.edu
>> > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
>>
>> _______________________________________________
>> lldb-commits mailing list
>> lldb-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20130801/91c0199e/attachment.html>
More information about the lldb-commits
mailing list