<div dir="ltr">Committed as r187599.<div><br></div><div>Thread IDs on linux are now real thread IDs, so log enable --thread-name now works.</div><div><br></div><div>Thanks Ashok.</div><div><br></div><div>On Thu, Aug 1, 2013 at 10:36 AM, Michael Sartain <span dir="ltr"><<a href="mailto:mikesart@valvesoftware.com" target="_blank">mikesart@valvesoftware.com</a>></span> wrote:<br>

<div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">

Well, it was me. My changes exposed a different bug: bad tids are being passed to GetThreadName().<div><br></div><div>    std::string thread_name (Host::GetThreadName (getpid(), Host::GetCurrentThreadID()));<br>
</div><div><br></div><div>Host::GetCurrentThreadID() does this:<div><br></div><div>    return lldb::tid_t(pthread_self());<br><div class="gmail_extra"><div><br></div><div>That doesn't work on Linux though - pthread_self() and TIDs are completely different beasts. I'll fix this.<br>


</div><div class="gmail_extra"> -Mike</div><div><div class="h5"><br><div class="gmail_quote">On Thu, Aug 1, 2013 at 8:49 AM, Mike Sartain <span dir="ltr"><<a href="mailto:mikesart@valvesoftware.com" target="_blank">mikesart@valvesoftware.com</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">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.<br>



<br>
(lldb) command alias bp breakpoint<br>
Processing command: command alias bp breakpoint<br>
HandleCommand, cmd_obj : 'command alias'<br>
HandleCommand, revised_command_line: 'command alias bp breakpoint'<br>
HandleCommand, wants_raw_input:'True'<br>
HandleCommand, command line after removing command name(s): 'bp breakpoint'<br>
HandleCommand, command succeeded<br>
<br>
AssertionError: Expected 'Processing command: command alias bp breakpoint<br>
'; Found ' Processing command: command alias bp breakpoint<br>
'<br>
<br>
On Aug 1, 2013, at 8:05 AM, "Thirumurthi, Ashok" <<a href="mailto:ashok.thirumurthi@intel.com" target="_blank">ashok.thirumurthi@intel.com</a>> wrote:<br>
<br>
> FYI Mike,<br>
><br>
> I'm guessing that one of the "thread list" commits introduced a minor regression on both buildbots:<br>
>  <a href="http://lab.llvm.org:8011/builders/lldb-x86_64-debian-clang/builds/5774/steps/test%20lldb/logs/stdio" target="_blank">http://lab.llvm.org:8011/builders/lldb-x86_64-debian-clang/builds/5774/steps/test%20lldb/logs/stdio</a><br>



>  <a href="http://lab.llvm.org:8011/builders/lldb-x86_64-linux/builds/5859/steps/test%20lldb/logs/stdio" target="_blank">http://lab.llvm.org:8011/builders/lldb-x86_64-linux/builds/5859/steps/test%20lldb/logs/stdio</a><br>



><br>
><br>
> FAIL: LLDB (clang-x86_64) :: test_with_dwarf (TestLogging.LogTestCase)<br>
> ======================================================================<br>
> FAIL: test_with_dwarf (TestLogging.LogTestCase)<br>
> ----------------------------------------------------------------------<br>
> Traceback (most recent call last):<br>
>  File "/home/llvmbb/llvm-build-dir/lldb-x86_64-clang/llvm/tools/lldb/test/lldbtest.py", line 370, in wrapper<br>
>    return func(self, *args, **kwargs)<br>
>  File "/home/llvmbb/llvm-build-dir/lldb-x86_64-clang/llvm/tools/lldb/test/logging/TestLogging.py", line 23, in test_with_dwarf<br>
>    self.command_log_tests ("dwarf")<br>
>  File "/home/llvmbb/llvm-build-dir/lldb-x86_64-clang/llvm/tools/lldb/test/logging/TestLogging.py", line 90, in command_log_tests<br>
>    self.fail (err_msg)<br>
> AssertionError: Expected 'Processing command: command alias bp breakpoint<br>
> '; Found ' Processing command: command alias bp breakpoint<br>
> '<br>
> Config=x86_64-clang<br>
><br>
> - Ashok<br>
<div><div>><br>
> -----Original Message-----<br>
> From: <a href="mailto:lldb-commits-bounces@cs.uiuc.edu" target="_blank">lldb-commits-bounces@cs.uiuc.edu</a> [mailto:<a href="mailto:lldb-commits-bounces@cs.uiuc.edu" target="_blank">lldb-commits-bounces@cs.uiuc.edu</a>] On Behalf Of Michael Sartain<br>



> Sent: Wednesday, July 31, 2013 7:28 PM<br>
> To: <a href="mailto:lldb-commits@cs.uiuc.edu" target="_blank">lldb-commits@cs.uiuc.edu</a><br>
> Subject: [Lldb-commits] [lldb] r187545 - Fix thread name updating in Linux. "thread list" should report correct names always now.<br>
><br>
> Author: mikesart<br>
> Date: Wed Jul 31 18:27:46 2013<br>
> New Revision: 187545<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=187545&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=187545&view=rev</a><br>
> Log:<br>
> Fix thread name updating in Linux. "thread list" should report correct names always now.<br>
> Created new LinuxThread class inherited from POSIXThread and removed linux / freebsd ifdefs Removed several un-needed set thread name calls<br>
><br>
> CR (and multiple suggestions): mkopec<br>
><br>
><br>
> Added:<br>
>    lldb/trunk/source/Plugins/Process/Linux/LinuxThread.cpp<br>
>    lldb/trunk/source/Plugins/Process/Linux/LinuxThread.h<br>
> Modified:<br>
>    lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp<br>
>    lldb/trunk/source/Plugins/Process/Linux/CMakeLists.txt<br>
>    lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.cpp<br>
>    lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.h<br>
>    lldb/trunk/source/Plugins/Process/Linux/ProcessMonitor.cpp<br>
>    lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.cpp<br>
>    lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.h<br>
>    lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.cpp<br>
>    lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.h<br>
>    lldb/trunk/source/Target/TargetList.cpp<br>
><br>
> Modified: lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp?rev=187545&r1=187544&r2=187545&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp?rev=187545&r1=187544&r2=187545&view=diff</a><br>



> ==============================================================================<br>
> --- lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp (original)<br>
> +++ lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp Wed Jul<br>
</div></div>> +++ 31 18:27:46 2013<br>
<div>> @@ -1003,7 +1003,7 @@ ProcessMonitor::Launch(LaunchArgs *args)<br>
>         goto FINISH;<br>
><br>
>     // Update the process thread list with this new thread.<br>
> -    inferior.reset(new POSIXThread(*processSP, pid));<br>
> +    inferior.reset(process.CreateNewPOSIXThread(*processSP, pid));<br>
>     if (log)<br>
>         log->Printf ("ProcessMonitor::%s() adding pid = %" PRIu64, __FUNCTION__, pid);<br>
>     process.GetThreadList().AddThread(inferior);<br>
> @@ -1085,7 +1085,7 @@ ProcessMonitor::Attach(AttachArgs *args)<br>
>     }<br>
><br>
>     // Update the process thread list with the attached thread.<br>
> -    inferior.reset(new POSIXThread(*processSP, pid));<br>
> +    inferior.reset(process.CreateNewPOSIXThread(*processSP, pid));<br>
>     tl.AddThread(inferior);<br>
><br>
>     // Let our process instance know the thread has stopped.<br>
><br>
> Modified: lldb/trunk/source/Plugins/Process/Linux/CMakeLists.txt<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/CMakeLists.txt?rev=187545&r1=187544&r2=187545&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/CMakeLists.txt?rev=187545&r1=187544&r2=187545&view=diff</a><br>



> ==============================================================================<br>
> --- lldb/trunk/source/Plugins/Process/Linux/CMakeLists.txt (original)<br>
> +++ lldb/trunk/source/Plugins/Process/Linux/CMakeLists.txt Wed Jul 31<br>
</div>> +++ 18:27:46 2013<br>
<div>> @@ -7,5 +7,6 @@ add_lldb_library(lldbPluginProcessLinux<br>
>   ProcessLinux.cpp<br>
>   ProcessMonitor.cpp<br>
>   LinuxSignals.cpp<br>
> +  LinuxThread.cpp<br>
>   )<br>
><br>
><br>
> Added: lldb/trunk/source/Plugins/Process/Linux/LinuxThread.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/LinuxThread.cpp?rev=187545&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/LinuxThread.cpp?rev=187545&view=auto</a><br>



> ==============================================================================<br>
> --- lldb/trunk/source/Plugins/Process/Linux/LinuxThread.cpp (added)<br>
> +++ lldb/trunk/source/Plugins/Process/Linux/LinuxThread.cpp Wed Jul 31<br>
</div>> +++ 18:27:46 2013<br>
<div>> @@ -0,0 +1,63 @@<br>
> +//===-- LinuxThread.cpp -----------------------------------------*- C++<br>
</div>> +-*-===// //<br>
<div>> +//                     The LLVM Compiler Infrastructure<br>
> +//<br>
> +// This file is distributed under the University of Illinois Open<br>
</div>> +Source // License. See LICENSE.TXT for details.<br>
<div>> +//<br>
> +//===------------------------------------------------------------------<br>
> +----===//<br>
> +<br>
> +// C Includes<br>
> +// C++ Includes<br>
</div>> +// Other libraries and framework includes // Project includes #include<br>
> +"LinuxThread.h"<br>
<div><div>> +<br>
> +using namespace lldb;<br>
> +using namespace lldb_private;<br>
> +<br>
> +//---------------------------------------------------------------------<br>
> +---------<br>
> +// Constructors and destructors.<br>
> +<br>
> +LinuxThread::LinuxThread(Process &process, lldb::tid_t tid)<br>
> +    : POSIXThread(process, tid)<br>
> +{<br>
> +}<br>
> +<br>
> +LinuxThread::~LinuxThread()<br>
> +{<br>
> +}<br>
> +<br>
> +//---------------------------------------------------------------------<br>
> +---------<br>
> +// ProcessInterface protocol.<br>
> +<br>
> +void<br>
> +LinuxThread::RefreshStateAfterStop()<br>
> +{<br>
> +    // Invalidate the thread names every time we get a stop event on Linux so we<br>
> +    // will re-read the procfs comm virtual file when folks ask for the thread name.<br>
> +    m_thread_name_valid = false;<br>
> +<br>
> +    POSIXThread::RefreshStateAfterStop();<br>
> +}<br>
> +<br>
> +void<br>
> +LinuxThread::TraceNotify(const ProcessMessage &message) {<br>
</div></div><div>> +    RegisterContextPOSIX* reg_ctx = GetRegisterContextPOSIX();<br>
> +    if (reg_ctx)<br>
> +    {<br>
> +        uint32_t num_hw_wps = reg_ctx->NumSupportedHardwareWatchpoints();<br>
> +        uint32_t wp_idx;<br>
> +        for (wp_idx = 0; wp_idx < num_hw_wps; wp_idx++)<br>
> +        {<br>
> +            if (reg_ctx->IsWatchpointHit(wp_idx))<br>
> +            {<br>
> +                WatchNotify(message);<br>
> +                return;<br>
> +            }<br>
> +        }<br>
> +    }<br>
> +<br>
> +    POSIXThread::TraceNotify (message); }<br>
</div><div><div>> \ No newline at end of file<br>
><br>
> Added: lldb/trunk/source/Plugins/Process/Linux/LinuxThread.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/LinuxThread.h?rev=187545&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/LinuxThread.h?rev=187545&view=auto</a><br>



> ==============================================================================<br>
> --- lldb/trunk/source/Plugins/Process/Linux/LinuxThread.h (added)<br>
> +++ lldb/trunk/source/Plugins/Process/Linux/LinuxThread.h Wed Jul 31 18:27:46 2013<br>
> @@ -0,0 +1,43 @@<br>
> +//===-- LinuxThread.h -------------------------------------------*- C++ -*-===//<br>
> +//<br>
> +//                     The LLVM Compiler Infrastructure<br>
> +//<br>
> +// This file is distributed under the University of Illinois Open Source<br>
> +// License. See LICENSE.TXT for details.<br>
> +//<br>
> +//===----------------------------------------------------------------------===//<br>
> +<br>
> +#ifndef liblldb_LinuxThread_H_<br>
> +#define liblldb_LinuxThread_H_<br>
> +<br>
> +// Other libraries and framework includes<br>
> +#include "POSIXThread.h"<br>
> +<br>
> +//------------------------------------------------------------------------------<br>
> +// @class LinuxThread<br>
> +// @brief Abstraction of a Linux thread.<br>
> +class LinuxThread<br>
> +    : public POSIXThread<br>
> +{<br>
> +public:<br>
> +<br>
> +    //------------------------------------------------------------------<br>
> +    // Constructors and destructors<br>
> +    //------------------------------------------------------------------<br>
> +    LinuxThread(lldb_private::Process &process, lldb::tid_t tid);<br>
> +<br>
> +    virtual ~LinuxThread();<br>
> +<br>
> +    //--------------------------------------------------------------------------<br>
> +    // LinuxThread internal API.<br>
> +<br>
> +    // POSIXThread override<br>
> +    virtual void<br>
> +    RefreshStateAfterStop();<br>
> +<br>
> +protected:<br>
> +    virtual void<br>
> +    TraceNotify(const ProcessMessage &message);<br>
> +};<br>
> +<br>
> +#endif // #ifndef liblldb_LinuxThread_H_<br>
><br>
> Modified: lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.cpp?rev=187545&r1=187544&r2=187545&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.cpp?rev=187545&r1=187544&r2=187545&view=diff</a><br>



> ==============================================================================<br>
> --- lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.cpp (original)<br>
> +++ lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.cpp Wed Jul 31 18:27:46 2013<br>
> @@ -23,7 +23,7 @@<br>
> #include "ProcessPOSIXLog.h"<br>
> #include "Plugins/Process/Utility/InferiorCallPOSIX.h"<br>
> #include "ProcessMonitor.h"<br>
> -#include "POSIXThread.h"<br>
> +#include "LinuxThread.h"<br>
><br>
> using namespace lldb;<br>
> using namespace lldb_private;<br>
> @@ -64,7 +64,7 @@ ProcessLinux::Initialize()<br>
> // Constructors and destructors.<br>
><br>
> ProcessLinux::ProcessLinux(Target& target, Listener &listener, FileSpec *core_file)<br>
> -    : ProcessPOSIX(target, listener), m_stopping_threads(false), m_core_file(core_file)<br>
> +    : ProcessPOSIX(target, listener), m_core_file(core_file), m_stopping_threads(false)<br>
> {<br>
> #if 0<br>
>     // FIXME: Putting this code in the ctor and saving the byte order in a<br>
> @@ -81,6 +81,7 @@ void<br>
> ProcessLinux::Terminate()<br>
> {<br>
> }<br>
> +<br>
> lldb_private::ConstString<br>
> ProcessLinux::GetPluginNameStatic()<br>
> {<br>
> @@ -171,6 +172,13 @@ ProcessLinux::StopAllThreads(lldb::tid_t<br>
>         log->Printf ("ProcessLinux::%s() finished", __FUNCTION__);<br>
> }<br>
><br>
> +// ProcessPOSIX override<br>
> +POSIXThread *<br>
> +ProcessLinux::CreateNewPOSIXThread(lldb_private::Process &process, lldb::tid_t tid)<br>
> +{<br>
> +    return new LinuxThread(process, tid);<br>
> +}<br>
> +<br>
> bool<br>
> ProcessLinux::CanDebug(Target &target, bool plugin_specified_by_name)<br>
> {<br>
><br>
> Modified: lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.h?rev=187545&r1=187544&r2=187545&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.h?rev=187545&r1=187544&r2=187545&view=diff</a><br>



> ==============================================================================<br>
> --- lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.h (original)<br>
> +++ lldb/trunk/source/Plugins/Process/Linux/ProcessLinux.h Wed Jul 31 18:27:46 2013<br>
> @@ -56,6 +56,7 @@ public:<br>
><br>
>     virtual bool<br>
>     UpdateThreadList(lldb_private::ThreadList &old_thread_list, lldb_private::ThreadList &new_thread_list);<br>
> +<br>
>     //------------------------------------------------------------------<br>
>     // PluginInterface protocol<br>
>     //------------------------------------------------------------------<br>
> @@ -94,6 +95,9 @@ public:<br>
>     virtual void<br>
>     StopAllThreads(lldb::tid_t stop_tid);<br>
><br>
> +    virtual POSIXThread *<br>
> +    CreateNewPOSIXThread(lldb_private::Process &process, lldb::tid_t tid);<br>
> +<br>
> private:<br>
><br>
>     /// Linux-specific signal set.<br>
><br>
> Modified: lldb/trunk/source/Plugins/Process/Linux/ProcessMonitor.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/ProcessMonitor.cpp?rev=187545&r1=187544&r2=187545&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/ProcessMonitor.cpp?rev=187545&r1=187544&r2=187545&view=diff</a><br>



> ==============================================================================<br>
> --- lldb/trunk/source/Plugins/Process/Linux/ProcessMonitor.cpp (original)<br>
> +++ lldb/trunk/source/Plugins/Process/Linux/ProcessMonitor.cpp Wed Jul 31 18:27:46 2013<br>
> @@ -1098,7 +1098,6 @@ ProcessMonitor::Launch(LaunchArgs *args)<br>
>     lldb::pid_t pid;<br>
><br>
>     lldb::ThreadSP inferior;<br>
> -    POSIXThread *thread;<br>
>     Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_PROCESS));<br>
><br>
>     // Propagate the environment if one is not supplied.<br>
> @@ -1232,10 +1231,7 @@ ProcessMonitor::Launch(LaunchArgs *args)<br>
>     // Update the process thread list with this new thread.<br>
>     // FIXME: should we be letting UpdateThreadList handle this?<br>
>     // FIXME: by using pids instead of tids, we can only support one thread.<br>
> -    inferior.reset(new POSIXThread(process, pid));<br>
> -<br>
> -    thread = static_cast<POSIXThread*>(inferior.get());<br>
> -    thread->SetName(Host::GetThreadName(pid, pid).c_str());<br>
> +    inferior.reset(process.CreateNewPOSIXThread(process, pid));<br>
><br>
>     if (log)<br>
>         log->Printf ("ProcessMonitor::%s() adding pid = %" PRIu64, __FUNCTION__, pid);<br>
> @@ -1297,7 +1293,6 @@ ProcessMonitor::Attach(AttachArgs *args)<br>
>     ProcessMonitor *monitor = args->m_monitor;<br>
>     ProcessLinux &process = monitor->GetProcess();<br>
>     lldb::ThreadSP inferior;<br>
> -    POSIXThread *thread;<br>
>     Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_PROCESS));<br>
><br>
>     // Use a map to keep track of the threads which we have attached/need to attach.<br>
> @@ -1362,10 +1357,7 @@ ProcessMonitor::Attach(AttachArgs *args)<br>
>                 }<br>
><br>
>                 // Update the process thread list with the attached thread.<br>
> -                inferior.reset(new POSIXThread(process, tid));<br>
> -<br>
> -                thread = static_cast<POSIXThread*>(inferior.get());<br>
> -                thread->SetName(Host::GetThreadName(pid, tid).c_str());<br>
> +                inferior.reset(process.CreateNewPOSIXThread(process, tid));<br>
><br>
>                 if (log)<br>
>                     log->Printf ("ProcessMonitor::%s() adding tid = %" PRIu64, __FUNCTION__, tid);<br>
><br>
> Modified: lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.cpp?rev=187545&r1=187544&r2=187545&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.cpp?rev=187545&r1=187544&r2=187545&view=diff</a><br>



> ==============================================================================<br>
> --- lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.cpp (original)<br>
> +++ lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.cpp Wed Jul 31 18:27:46 2013<br>
> @@ -45,6 +45,7 @@ POSIXThread::POSIXThread(Process &proces<br>
>     : Thread(process, tid),<br>
>       m_frame_ap (),<br>
>       m_breakpoint (),<br>
> +      m_thread_name_valid (false),<br>
>       m_thread_name ()<br>
> {<br>
>     Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_THREAD));<br>
> @@ -111,7 +112,8 @@ POSIXThread::GetInfo()<br>
> void<br>
> POSIXThread::SetName (const char *name)<br>
> {<br>
> -    if (name && name[0])<br>
> +    m_thread_name_valid = (name && name[0]);<br>
> +    if (m_thread_name_valid)<br>
>         m_thread_name.assign (name);<br>
>     else<br>
>         m_thread_name.clear();<br>
> @@ -120,6 +122,12 @@ POSIXThread::SetName (const char *name)<br>
> const char *<br>
> POSIXThread::GetName ()<br>
> {<br>
> +    if (!m_thread_name_valid)<br>
> +    {<br>
> +        SetName(Host::GetThreadName(GetProcess()->GetID(), GetID()).c_str());<br>
> +        m_thread_name_valid = true;<br>
> +    }<br>
> +<br>
>     if (m_thread_name.empty())<br>
>         return NULL;<br>
>     return m_thread_name.c_str();<br>
> @@ -460,22 +468,6 @@ POSIXThread::WatchNotify(const ProcessMe<br>
> void<br>
> POSIXThread::TraceNotify(const ProcessMessage &message)<br>
> {<br>
> -#ifndef __FreeBSD__<br>
> -    RegisterContextPOSIX* reg_ctx = GetRegisterContextPOSIX();<br>
> -    if (reg_ctx)<br>
> -    {<br>
> -        uint32_t num_hw_wps = reg_ctx->NumSupportedHardwareWatchpoints();<br>
> -        uint32_t wp_idx;<br>
> -        for (wp_idx = 0; wp_idx < num_hw_wps; wp_idx++)<br>
> -        {<br>
> -            if (reg_ctx->IsWatchpointHit(wp_idx))<br>
> -            {<br>
> -                WatchNotify(message);<br>
> -                return;<br>
> -            }<br>
> -        }<br>
> -    }<br>
> -#endif<br>
>     SetStopInfo (StopInfo::CreateStopReasonToTrace(*this));<br>
> }<br>
><br>
><br>
> Modified: lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.h?rev=187545&r1=187544&r2=187545&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.h?rev=187545&r1=187544&r2=187545&view=diff</a><br>



> ==============================================================================<br>
> --- lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.h (original)<br>
> +++ lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.h Wed Jul 31 18:27:46 2013<br>
> @@ -91,7 +91,7 @@ public:<br>
><br>
>     uint32_t FindVacantWatchpointIndex();<br>
><br>
> -private:<br>
> +protected:<br>
>     RegisterContextPOSIX *<br>
>     GetRegisterContextPOSIX ()<br>
>     {<br>
> @@ -107,6 +107,7 @@ private:<br>
><br>
>     lldb::BreakpointSiteSP m_breakpoint;<br>
><br>
> +    bool m_thread_name_valid;<br>
>     std::string m_thread_name;<br>
><br>
>     ProcessMonitor &<br>
> @@ -117,7 +118,7 @@ private:<br>
><br>
>     void BreakNotify(const ProcessMessage &message);<br>
>     void WatchNotify(const ProcessMessage &message);<br>
> -    void TraceNotify(const ProcessMessage &message);<br>
> +    virtual void TraceNotify(const ProcessMessage &message);<br>
>     void LimboNotify(const ProcessMessage &message);<br>
>     void SignalNotify(const ProcessMessage &message);<br>
>     void SignalDeliveredNotify(const ProcessMessage &message);<br>
><br>
> Modified: lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.cpp?rev=187545&r1=187544&r2=187545&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.cpp?rev=187545&r1=187544&r2=187545&view=diff</a><br>



> ==============================================================================<br>
> --- lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.cpp (original)<br>
> +++ lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.cpp Wed Jul 31 18:27:46 2013<br>
> @@ -479,6 +479,12 @@ ProcessPOSIX::AddThreadForInitialStopIfN<br>
>     return added_to_set;<br>
> }<br>
><br>
> +POSIXThread *<br>
> +ProcessPOSIX::CreateNewPOSIXThread(lldb_private::Process &process, lldb::tid_t tid)<br>
> +{<br>
> +    return new POSIXThread(process, tid);<br>
> +}<br>
> +<br>
> void<br>
> ProcessPOSIX::RefreshStateAfterStop()<br>
> {<br>
> @@ -508,10 +514,7 @@ ProcessPOSIX::RefreshStateAfterStop()<br>
>                 log->Printf ("ProcessPOSIX::%s() adding thread, tid = %" PRIi64, __FUNCTION__, message.GetChildTID());<br>
>             lldb::tid_t child_tid = message.GetChildTID();<br>
>             ThreadSP thread_sp;<br>
> -            thread_sp.reset(new POSIXThread(*this, child_tid));<br>
> -<br>
> -            POSIXThread *thread = static_cast<POSIXThread*>(thread_sp.get());<br>
> -            thread->SetName(Host::GetThreadName(GetID(), child_tid).c_str());<br>
> +            thread_sp.reset(CreateNewPOSIXThread(*this, child_tid));<br>
><br>
>             Mutex::Locker lock(m_thread_list.GetMutex());<br>
><br>
> @@ -821,7 +824,7 @@ ProcessPOSIX::UpdateThreadList(ThreadLis<br>
>     assert(m_monitor);<br>
>     ThreadSP thread_sp (old_thread_list.FindThreadByID (GetID(), false));<br>
>     if (!thread_sp) {<br>
> -        thread_sp.reset(new POSIXThread(*this, GetID()));<br>
> +        thread_sp.reset(CreateNewPOSIXThread(*this, GetID()));<br>
>     }<br>
><br>
>     if (log && log->GetMask().Test(POSIX_LOG_VERBOSE))<br>
><br>
> Modified: lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.h?rev=187545&r1=187544&r2=187545&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.h?rev=187545&r1=187544&r2=187545&view=diff</a><br>



> ==============================================================================<br>
> --- lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.h (original)<br>
> +++ lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.h Wed Jul 31 18:27:46 2013<br>
> @@ -22,6 +22,7 @@<br>
> #include "ProcessMessage.h"<br>
><br>
> class ProcessMonitor;<br>
> +class POSIXThread;<br>
><br>
> class ProcessPOSIX :<br>
>     public lldb_private::Process<br>
> @@ -166,6 +167,9 @@ public:<br>
>     bool<br>
>     AddThreadForInitialStopIfNeeded(lldb::tid_t stop_tid);<br>
><br>
> +    virtual POSIXThread *<br>
> +    CreateNewPOSIXThread(lldb_private::Process &process, lldb::tid_t tid);<br>
> +<br>
> protected:<br>
>     /// Target byte order.<br>
>     lldb::ByteOrder m_byte_order;<br>
><br>
> Modified: lldb/trunk/source/Target/TargetList.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/TargetList.cpp?rev=187545&r1=187544&r2=187545&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/TargetList.cpp?rev=187545&r1=187544&r2=187545&view=diff</a><br>



> ==============================================================================<br>
> --- lldb/trunk/source/Target/TargetList.cpp (original)<br>
> +++ lldb/trunk/source/Target/TargetList.cpp Wed Jul 31 18:27:46 2013<br>
> @@ -222,8 +222,19 @@ TargetList::CreateTarget (Debugger &debu<br>
>     FileSpec file (user_exe_path, false);<br>
>     if (!file.Exists() && user_exe_path && user_exe_path[0] == '~')<br>
>     {<br>
> -        file = FileSpec(user_exe_path, true);<br>
> +        // we want to expand the tilde but we don't want to resolve any symbolic links<br>
> +        // so we can't use the FileSpec constructor's resolve flag<br>
> +        char unglobbed_path[PATH_MAX];<br>
> +        unglobbed_path[0] = '\0';<br>
> +<br>
> +        size_t return_count = FileSpec::ResolveUsername(user_exe_path, unglobbed_path, sizeof(unglobbed_path));<br>
> +<br>
> +        if (return_count == 0 || return_count >= sizeof(unglobbed_path))<br>
> +            ::snprintf (unglobbed_path, sizeof(unglobbed_path), "%s", user_exe_path);<br>
> +<br>
> +        file = FileSpec(unglobbed_path, false);<br>
>     }<br>
> +<br>
>     bool user_exe_path_is_bundle = false;<br>
>     char resolved_bundle_exe_path[PATH_MAX];<br>
>     resolved_bundle_exe_path[0] = '\0';<br>
> @@ -305,8 +316,8 @@ TargetList::CreateTarget (Debugger &debu<br>
>             }<br>
>             else<br>
>             {<br>
> -                // Just use what the user typed<br>
> -                target_sp->SetArg0 (user_exe_path);<br>
> +                // Use resolved path<br>
> +                target_sp->SetArg0 (file.GetPath().c_str());<br>
>             }<br>
>         }<br>
>         if (file.GetDirectory())<br>
><br>
><br>
> _______________________________________________<br>
> lldb-commits mailing list<br>
> <a href="mailto:lldb-commits@cs.uiuc.edu" target="_blank">lldb-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits</a><br>
<br>
_______________________________________________<br>
lldb-commits mailing list<br>
<a href="mailto:lldb-commits@cs.uiuc.edu" target="_blank">lldb-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits</a><br>
</div></div></blockquote></div><br></div></div></div></div></div></div>
</blockquote></div><br></div></div></div>