[Lldb-commits] Linux port
Greg Clayton
gclayton at apple.com
Tue Feb 21 10:45:00 PST 2012
Looks good, thanks Dmitry:
% svn commit
Sending source/Plugins/DynamicLoader/POSIX-DYLD/AuxVector.h
Sending source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp
Sending source/Plugins/Platform/Linux/PlatformLinux.cpp
Sending source/Plugins/Process/Linux/ProcessLinux.cpp
Sending source/Plugins/Process/Linux/ProcessLinux.h
Sending source/Plugins/Process/Linux/ProcessMonitor.cpp
Sending source/Plugins/Process/POSIX/POSIXThread.cpp
Sending source/Plugins/Process/POSIX/POSIXThread.h
Sending source/Plugins/Process/POSIX/ProcessPOSIX.cpp
Sending source/Plugins/Process/POSIX/ProcessPOSIXLog.cpp
Sending source/Plugins/Process/POSIX/ProcessPOSIXLog.h
Sending source/Plugins/Process/POSIX/RegisterContext_i386.cpp
Sending source/Plugins/Process/POSIX/RegisterContext_x86_64.cpp
Sending source/Plugins/Process/Utility/StopInfoMachException.cpp
Transmitting file data ..............
Committed revision 151072.
On Feb 21, 2012, at 1:46 AM, Dmitry Vyukov wrote:
> Hi,
>
> I would like to ask you to review and land the following patch.
> The patch contains fixes for Linux platform, it's somewhat huge, but all changes are merely adding missing arguments or changing parameter types. The list of affected files:
> Index: source/Plugins/Platform/Linux/PlatformLinux.cpp
> Index: source/Plugins/DynamicLoader/POSIX-DYLD/AuxVector.h
> Index: source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp
> Index: source/Plugins/Process/Linux/ProcessLinux.cpp
> Index: source/Plugins/Process/Linux/ProcessLinux.h
> Index: source/Plugins/Process/Linux/ProcessMonitor.cpp
> Index: source/Plugins/Process/POSIX/POSIXThread.h
> Index: source/Plugins/Process/POSIX/ProcessPOSIX.cpp
> Index: source/Plugins/Process/POSIX/RegisterContext_i386.cpp
> Index: source/Plugins/Process/POSIX/ProcessPOSIXLog.cpp
> Index: source/Plugins/Process/POSIX/RegisterContext_x86_64.cpp
> Index: source/Plugins/Process/POSIX/ProcessPOSIXLog.h
> Index: source/Plugins/Process/POSIX/POSIXThread.cpp
> Index: source/Plugins/Process/Utility/StopInfoMachException.cpp
>
>
>
>
> Index: source/Plugins/Platform/Linux/PlatformLinux.cpp
> ===================================================================
> --- source/Plugins/Platform/Linux/PlatformLinux.cpp (revision 151036)
> +++ source/Plugins/Platform/Linux/PlatformLinux.cpp (working copy)
> @@ -128,7 +128,8 @@
> {
> error = m_remote_platform_sp->ResolveExecutable (exe_file,
> exe_arch,
> - exe_module_sp);
> + exe_module_sp,
> + NULL);
> }
> else
> {
> @@ -152,6 +153,7 @@
> 0,
> exe_module_sp,
> NULL,
> + NULL,
> NULL);
>
> if (exe_module_sp->GetObjectFile() == NULL)
> @@ -180,6 +182,7 @@
> 0,
> exe_module_sp,
> NULL,
> + NULL,
> NULL);
> // Did we find an executable using one of the
> if (error.Success())
> @@ -367,7 +370,9 @@
> {
> debugger.GetTargetList().SetSelectedTarget(target);
>
> - process_sp = target->CreateProcess (listener, attach_info.GetProcessPluginName());
> + process_sp = target->CreateProcess (listener,
> + attach_info.GetProcessPluginName(),
> + NULL);
>
> if (process_sp)
> error = process_sp->Attach (attach_info);
> Index: source/Plugins/DynamicLoader/POSIX-DYLD/AuxVector.h
> ===================================================================
> --- source/Plugins/DynamicLoader/POSIX-DYLD/AuxVector.h (revision 151036)
> +++ source/Plugins/DynamicLoader/POSIX-DYLD/AuxVector.h (working copy)
> @@ -15,7 +15,7 @@
> #include <vector>
>
> // Other libraries and framework includes
> -#include "lldb/lldb-forward-rtti.h"
> +#include "lldb/lldb-forward.h"
>
> namespace lldb_private {
> class DataExtractor;
> Index: source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp
> ===================================================================
> --- source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp (revision 151036)
> +++ source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp (working copy)
> @@ -307,7 +307,7 @@
> return thread_plan_sp;
>
> SymbolContextList target_symbols;
> - Target &target = thread.GetProcess().GetTarget();
> + Target &target = thread.GetProcess()->GetTarget();
> ModuleList &images = target.GetImages();
>
> images.FindSymbolsWithNameAndType(sym_name, eSymbolTypeCode, target_symbols);
> Index: source/Plugins/Process/Linux/ProcessLinux.cpp
> ===================================================================
> --- source/Plugins/Process/Linux/ProcessLinux.cpp (revision 151036)
> +++ source/Plugins/Process/Linux/ProcessLinux.cpp (working copy)
> @@ -31,10 +31,10 @@
> //------------------------------------------------------------------------------
> // Static functions.
>
> -Process*
> -ProcessLinux::CreateInstance(Target& target, Listener &listener)
> +ProcessSP
> +ProcessLinux::CreateInstance(Target &target, Listener &listener, const FileSpec *)
> {
> - return new ProcessLinux(target, listener);
> + return ProcessSP(new ProcessLinux(target, listener));
> }
>
> void
> @@ -105,8 +105,10 @@
> // FIXME: We should be using tid, not pid.
> assert(m_monitor);
> ThreadSP thread_sp (old_thread_list.FindThreadByID (GetID(), false));
> - if (!thread_sp)
> - thread_sp.reset(new POSIXThread(*this, GetID()));
> + if (!thread_sp) {
> + ProcessSP me = this->shared_from_this();
> + thread_sp.reset(new POSIXThread(me, GetID()));
> + }
>
> if (log && log->GetMask().Test(POSIX_LOG_VERBOSE))
> log->Printf ("ProcessLinux::%s() updated pid = %i", __FUNCTION__, GetID());
> Index: source/Plugins/Process/Linux/ProcessLinux.h
> ===================================================================
> --- source/Plugins/Process/Linux/ProcessLinux.h (revision 151036)
> +++ source/Plugins/Process/Linux/ProcessLinux.h (working copy)
> @@ -30,9 +30,10 @@
> //------------------------------------------------------------------
> // Static functions.
> //------------------------------------------------------------------
> - static Process*
> + static lldb::ProcessSP
> CreateInstance(lldb_private::Target& target,
> - lldb_private::Listener &listener);
> + lldb_private::Listener &listener,
> + const lldb_private::FileSpec *);
>
> static void
> Initialize();
> Index: source/Plugins/Process/Linux/ProcessMonitor.cpp
> ===================================================================
> --- source/Plugins/Process/Linux/ProcessMonitor.cpp (revision 151036)
> +++ source/Plugins/Process/Linux/ProcessMonitor.cpp (working copy)
> @@ -966,6 +966,7 @@
> {
> ProcessMonitor *monitor = args->m_monitor;
> ProcessLinux &process = monitor->GetProcess();
> + lldb::ProcessSP processSP = process.shared_from_this();
> const char **argv = args->m_argv;
> const char **envp = args->m_envp;
> const char *stdin_path = args->m_stdin_path;
> @@ -1104,7 +1105,7 @@
> // 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));
> + inferior.reset(new POSIXThread(processSP, pid));
> if (log)
> log->Printf ("ProcessMonitor::%s() adding pid = %i", __FUNCTION__, pid);
> process.GetThreadList().AddThread(inferior);
> @@ -1166,6 +1167,7 @@
>
> ProcessMonitor *monitor = args->m_monitor;
> ProcessLinux &process = monitor->GetProcess();
> + lldb::ProcessSP processSP = process.shared_from_this();
> lldb::ThreadSP inferior;
> LogSP log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_PROCESS));
>
> @@ -1191,7 +1193,7 @@
> }
>
> // Update the process thread list with the attached thread.
> - inferior.reset(new POSIXThread(process, pid));
> + inferior.reset(new POSIXThread(processSP, pid));
> if (log)
> log->Printf ("ProcessMonitor::%s() adding tid = %i", __FUNCTION__, pid);
> process.GetThreadList().AddThread(inferior);
> Index: source/Plugins/Process/POSIX/POSIXThread.h
> ===================================================================
> --- source/Plugins/Process/POSIX/POSIXThread.h (revision 151036)
> +++ source/Plugins/Process/POSIX/POSIXThread.h (working copy)
> @@ -29,7 +29,7 @@
> : public lldb_private::Thread
> {
> public:
> - POSIXThread(lldb_private::Process &process, lldb::tid_t tid);
> + POSIXThread(lldb::ProcessSP &process, lldb::tid_t tid);
>
> virtual ~POSIXThread();
>
> Index: source/Plugins/Process/POSIX/ProcessPOSIX.cpp
> ===================================================================
> --- source/Plugins/Process/POSIX/ProcessPOSIX.cpp (revision 151036)
> +++ source/Plugins/Process/POSIX/ProcessPOSIX.cpp (working copy)
> @@ -500,8 +500,10 @@
> // FIXME: We should be using tid, not pid.
> assert(m_monitor);
> ThreadSP thread_sp (old_thread_list.FindThreadByID (GetID(), false));
> - if (!thread_sp)
> - thread_sp.reset(new POSIXThread(*this, GetID()));
> + if (!thread_sp) {
> + ProcessSP me = this->shared_from_this();
> + thread_sp.reset(new POSIXThread(me, GetID()));
> + }
>
> if (log && log->GetMask().Test(POSIX_LOG_VERBOSE))
> log->Printf ("ProcessPOSIX::%s() updated pid = %i", __FUNCTION__, GetID());
> Index: source/Plugins/Process/POSIX/RegisterContext_i386.cpp
> ===================================================================
> --- source/Plugins/Process/POSIX/RegisterContext_i386.cpp (revision 151036)
> +++ source/Plugins/Process/POSIX/RegisterContext_i386.cpp (working copy)
> @@ -364,7 +364,8 @@
> ProcessMonitor &
> RegisterContext_i386::GetMonitor()
> {
> - ProcessPOSIX *process = static_cast<ProcessPOSIX*>(CalculateProcess());
> + ProcessSP base = CalculateProcess();
> + ProcessPOSIX *process = static_cast<ProcessPOSIX*>(base.get());
> return process->GetMonitor();
> }
>
> Index: source/Plugins/Process/POSIX/ProcessPOSIXLog.cpp
> ===================================================================
> --- source/Plugins/Process/POSIX/ProcessPOSIXLog.cpp (revision 151036)
> +++ source/Plugins/Process/POSIX/ProcessPOSIXLog.cpp (working copy)
> @@ -44,44 +44,38 @@
> }
>
> void
> -ProcessPOSIXLog::DisableLog (Args &args, Stream *feedback_strm)
> +ProcessPOSIXLog::DisableLog (const char **args, Stream *feedback_strm)
> {
> LogSP log (GetLog ());
> if (log)
> {
> uint32_t flag_bits = 0;
>
> - const size_t argc = args.GetArgumentCount ();
> - if (argc > 0)
> + flag_bits = log->GetMask().Get();
> + for (; args[0]; args++)
> {
> - flag_bits = log->GetMask().Get();
> - for (size_t i = 0; i < argc; ++i)
> - {
> - const char *arg = args.GetArgumentAtIndex (i);
> -
> + const char *arg = args[0];
>
> - if (::strcasecmp (arg, "all") == 0 ) flag_bits &= ~POSIX_LOG_ALL;
> - else if (::strcasecmp (arg, "async") == 0 ) flag_bits &= ~POSIX_LOG_ASYNC;
> - else if (::strncasecmp (arg, "break", 5) == 0 ) flag_bits &= ~POSIX_LOG_BREAKPOINTS;
> - else if (::strncasecmp (arg, "comm", 4) == 0 ) flag_bits &= ~POSIX_LOG_COMM;
> - else if (::strcasecmp (arg, "default") == 0 ) flag_bits &= ~POSIX_LOG_DEFAULT;
> - else if (::strcasecmp (arg, "packets") == 0 ) flag_bits &= ~POSIX_LOG_PACKETS;
> - else if (::strcasecmp (arg, "memory") == 0 ) flag_bits &= ~POSIX_LOG_MEMORY;
> - else if (::strcasecmp (arg, "data-short") == 0 ) flag_bits &= ~POSIX_LOG_MEMORY_DATA_SHORT;
> - else if (::strcasecmp (arg, "data-long") == 0 ) flag_bits &= ~POSIX_LOG_MEMORY_DATA_LONG;
> - else if (::strcasecmp (arg, "process") == 0 ) flag_bits &= ~POSIX_LOG_PROCESS;
> - else if (::strcasecmp (arg, "ptrace") == 0 ) flag_bits &= ~POSIX_LOG_PTRACE;
> - else if (::strcasecmp (arg, "registers") == 0 ) flag_bits &= ~POSIX_LOG_REGISTERS;
> - else if (::strcasecmp (arg, "step") == 0 ) flag_bits &= ~POSIX_LOG_STEP;
> - else if (::strcasecmp (arg, "thread") == 0 ) flag_bits &= ~POSIX_LOG_THREAD;
> - else if (::strcasecmp (arg, "verbose") == 0 ) flag_bits &= ~POSIX_LOG_VERBOSE;
> - else if (::strncasecmp (arg, "watch", 5) == 0 ) flag_bits &= ~POSIX_LOG_WATCHPOINTS;
> - else
> - {
> - feedback_strm->Printf("error: unrecognized log category '%s'\n", arg);
> - ListLogCategories (feedback_strm);
> - }
> -
> + if (::strcasecmp (arg, "all") == 0 ) flag_bits &= ~POSIX_LOG_ALL;
> + else if (::strcasecmp (arg, "async") == 0 ) flag_bits &= ~POSIX_LOG_ASYNC;
> + else if (::strncasecmp (arg, "break", 5) == 0 ) flag_bits &= ~POSIX_LOG_BREAKPOINTS;
> + else if (::strncasecmp (arg, "comm", 4) == 0 ) flag_bits &= ~POSIX_LOG_COMM;
> + else if (::strcasecmp (arg, "default") == 0 ) flag_bits &= ~POSIX_LOG_DEFAULT;
> + else if (::strcasecmp (arg, "packets") == 0 ) flag_bits &= ~POSIX_LOG_PACKETS;
> + else if (::strcasecmp (arg, "memory") == 0 ) flag_bits &= ~POSIX_LOG_MEMORY;
> + else if (::strcasecmp (arg, "data-short") == 0 ) flag_bits &= ~POSIX_LOG_MEMORY_DATA_SHORT;
> + else if (::strcasecmp (arg, "data-long") == 0 ) flag_bits &= ~POSIX_LOG_MEMORY_DATA_LONG;
> + else if (::strcasecmp (arg, "process") == 0 ) flag_bits &= ~POSIX_LOG_PROCESS;
> + else if (::strcasecmp (arg, "ptrace") == 0 ) flag_bits &= ~POSIX_LOG_PTRACE;
> + else if (::strcasecmp (arg, "registers") == 0 ) flag_bits &= ~POSIX_LOG_REGISTERS;
> + else if (::strcasecmp (arg, "step") == 0 ) flag_bits &= ~POSIX_LOG_STEP;
> + else if (::strcasecmp (arg, "thread") == 0 ) flag_bits &= ~POSIX_LOG_THREAD;
> + else if (::strcasecmp (arg, "verbose") == 0 ) flag_bits &= ~POSIX_LOG_VERBOSE;
> + else if (::strncasecmp (arg, "watch", 5) == 0 ) flag_bits &= ~POSIX_LOG_WATCHPOINTS;
> + else
> + {
> + feedback_strm->Printf("error: unrecognized log category '%s'\n", arg);
> + ListLogCategories (feedback_strm);
> }
> }
>
> @@ -95,7 +89,7 @@
> }
>
> LogSP
> -ProcessPOSIXLog::EnableLog (StreamSP &log_stream_sp, uint32_t log_options, Args &args, Stream *feedback_strm)
> +ProcessPOSIXLog::EnableLog (StreamSP &log_stream_sp, uint32_t log_options, const char **args, Stream *feedback_strm)
> {
> // Try see if there already is a log - that way we can reuse its settings.
> // We could reuse the log in toto, but we don't know that the stream is the same.
> @@ -107,17 +101,16 @@
> // Now make a new log with this stream if one was provided
> if (log_stream_sp)
> {
> - log = make_shared<Log>(log_stream_sp);
> + log = LogSP(new Log(log_stream_sp));
> GetLog () = log;
> }
>
> if (log)
> {
> bool got_unknown_category = false;
> - const size_t argc = args.GetArgumentCount();
> - for (size_t i=0; i<argc; ++i)
> + for (; args[0]; args++)
> {
> - const char *arg = args.GetArgumentAtIndex(i);
> + const char *arg = args[0];
>
> if (::strcasecmp (arg, "all") == 0 ) flag_bits |= POSIX_LOG_ALL;
> else if (::strcasecmp (arg, "async") == 0 ) flag_bits |= POSIX_LOG_ASYNC;
> Index: source/Plugins/Process/POSIX/RegisterContext_x86_64.cpp
> ===================================================================
> --- source/Plugins/Process/POSIX/RegisterContext_x86_64.cpp (revision 151036)
> +++ source/Plugins/Process/POSIX/RegisterContext_x86_64.cpp (working copy)
> @@ -434,7 +434,8 @@
> ProcessMonitor &
> RegisterContext_x86_64::GetMonitor()
> {
> - ProcessPOSIX *process = static_cast<ProcessPOSIX*>(CalculateProcess());
> + ProcessSP base = CalculateProcess();
> + ProcessPOSIX *process = static_cast<ProcessPOSIX*>(base.get());
> return process->GetMonitor();
> }
>
> Index: source/Plugins/Process/POSIX/ProcessPOSIXLog.h
> ===================================================================
> --- source/Plugins/Process/POSIX/ProcessPOSIXLog.h (revision 151036)
> +++ source/Plugins/Process/POSIX/ProcessPOSIXLog.h (working copy)
> @@ -54,11 +54,11 @@
> GetLogIfAllCategoriesSet(uint32_t mask = 0);
>
> static void
> - DisableLog (lldb_private::Args &args, lldb_private::Stream *feedback_strm);
> + DisableLog (const char **args, lldb_private::Stream *feedback_strm);
>
> static lldb::LogSP
> EnableLog (lldb::StreamSP &log_stream_sp, uint32_t log_options,
> - lldb_private::Args &args, lldb_private::Stream *feedback_strm);
> + const char **args, lldb_private::Stream *feedback_strm);
>
> static void
> ListLogCategories (lldb_private::Stream *strm);
> Index: source/Plugins/Process/POSIX/POSIXThread.cpp
> ===================================================================
> --- source/Plugins/Process/POSIX/POSIXThread.cpp (revision 151036)
> +++ source/Plugins/Process/POSIX/POSIXThread.cpp (working copy)
> @@ -29,10 +29,11 @@
>
> #include "UnwindLLDB.h"
>
> +using namespace lldb;
> using namespace lldb_private;
>
>
> -POSIXThread::POSIXThread(Process &process, lldb::tid_t tid)
> +POSIXThread::POSIXThread(ProcessSP &process, lldb::tid_t tid)
> : Thread(process, tid),
> m_frame_ap(0)
> {
> @@ -49,7 +50,8 @@
> ProcessMonitor &
> POSIXThread::GetMonitor()
> {
> - ProcessPOSIX &process = static_cast<ProcessPOSIX&>(GetProcess());
> + ProcessSP base = GetProcess();
> + ProcessPOSIX &process = static_cast<ProcessPOSIX&>(*base);
> return process.GetMonitor();
> }
>
> @@ -62,7 +64,8 @@
>
> // Let all threads recover from stopping and do any clean up based
> // on the previous thread state (if any).
> - ProcessPOSIX &process = static_cast<ProcessPOSIX&>(GetProcess());
> + ProcessSP base = GetProcess();
> + ProcessPOSIX &process = static_cast<ProcessPOSIX&>(*base);
> process.GetThreadList().RefreshStateAfterStop();
> }
>
> @@ -237,7 +240,7 @@
> lldb::addr_t pc = GetRegisterContext()->GetPC();
> if (log)
> log->Printf ("POSIXThread::%s () PC=0x%8.8llx", __FUNCTION__, pc);
> - lldb::BreakpointSiteSP bp_site(GetProcess().GetBreakpointSiteList().FindByAddress(pc));
> + lldb::BreakpointSiteSP bp_site(GetProcess()->GetBreakpointSiteList().FindByAddress(pc));
> assert(bp_site);
> lldb::break_id_t bp_id = bp_site->GetID();
> assert(bp_site && bp_site->ValidForThisThread(this));
> Index: source/Plugins/Process/Utility/StopInfoMachException.cpp
> ===================================================================
> --- source/Plugins/Process/Utility/StopInfoMachException.cpp (revision 151036)
> +++ source/Plugins/Process/Utility/StopInfoMachException.cpp (working copy)
> @@ -34,7 +34,7 @@
> {
> ExecutionContext exe_ctx (m_thread.shared_from_this());
> Target *target = exe_ctx.GetTargetPtr();
> - const llvm::Triple::ArchType cpu = target ? target->GetArchitecture().GetMachine() : llvm::Triple::InvalidArch;
> + const llvm::Triple::ArchType cpu = target ? target->GetArchitecture().GetMachine() : llvm::Triple::UnknownArch;
>
> const char *exc_desc = NULL;
> const char *code_label = "code";
> @@ -257,7 +257,7 @@
> {
> ExecutionContext exe_ctx (thread.shared_from_this());
> Target *target = exe_ctx.GetTargetPtr();
> - const llvm::Triple::ArchType cpu = target ? target->GetArchitecture().GetMachine() : llvm::Triple::InvalidArch;
> + const llvm::Triple::ArchType cpu = target ? target->GetArchitecture().GetMachine() : llvm::Triple::UnknownArch;
>
> switch (exc_type)
> {
>
>
> <linux.diff>
More information about the lldb-commits
mailing list