Hi everyone, here is a patch, which should fix two problems in lldb.
The first problem is a segmentation fault on the 'process connect' command. The segfault occurs in lldb_private::Module::GetObjectFile in case no executable module was specified and/or loaded. There is a log to reproduce: freebsd1# ./lldb (lldb) platform select remote-freebsd Host: FreeBSD 9.0-RELEASE FreeBSD 9.0-RELEASE #0: Tue Jan 3 07:46:30 UTC 2012 [email protected]:/usr/obj/usr/src/sys/GENERIC<mailto:[email protected]:/usr/obj/usr/src/sys/GENERIC> Hostname: localhost (lldb) process connect localhost Segmentation fault (core dumped) This is a stack trace for this case: Program received signal SIGSEGV, Segmentation fault. 0x00000008042c5344 in pthread_mutex_lock () from /lib/libthr.so.3 (gdb) bt #0 0x00000008042c5344 in pthread_mutex_lock () from /lib/libthr.so.3 #1 0x000000080149c7c5 in lldb_private::Mutex::Lock (mutex_ptr=0x18) at /usr/home/projects/llvm-lldb/tools/lldb/source/Host/common/Mutex.cpp:212 #2 0x000000080149c791 in lldb_private::Mutex::Locker::Locker () at SmallPtrSet.h:159 #3 0x00000008013b0c40 in lldb_private::Module::GetObjectFile (this=0x0) at /usr/home/projects/llvm-lldb/tools/lldb/source/Core/Module.cpp:945 #4 0x00000008023b5b1c in ProcessPOSIX::ProcessPOSIX (this=0x805f4b800, target=@0x808b8d100<mailto:target=@0x808b8d100>, listener=@0x805c94d90<mailto:listener=@0x805c94d90>) at /usr/home/projects/llvm-lldb/tools/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp:76 #5 0x00000008023bd00a in ProcessFreeBSD::ProcessFreeBSD (this=0x805f4b800, target=@0x808b8d100<mailto:target=@0x808b8d100>, listener=@0x805c94d90<mailto:listener=@0x805c94d90>) at /usr/home/projects/llvm-lldb/tools/lldb/source/Plugins/Process/FreeBSD/ProcessFreeBSD.cpp:122 #6 0x00000008023bcdb1 in ProcessFreeBSD::CreateInstance (target=@0x808b8d100<mailto:target=@0x808b8d100>, listener=@0x805c94d90<mailto:listener=@0x805c94d90>, crash_file_path=0x0) at /usr/home/projects/llvm-lldb/tools/lldb/source/Plugins/Process/FreeBSD/ProcessFreeBSD.cpp:41 #7 0x0000000801702cb3 in lldb_private::Process::FindPlugin (target=@0x808b8d100<mailto:target=@0x808b8d100>, plugin_name=0x0, listener=@0x805c94d90<mailto:listener=@0x805c94d90>, crash_file_path=0x0) at /usr/home/projects/llvm-lldb/tools/lldb/source/Target/Process.cpp:735 #8 0x000000080172a27e in lldb_private::Target::CreateProcess (this=0x808b8d100, listener=@0x805c94d90<mailto:listener=@0x805c94d90>, plugin_name=0x0, crash_file=0x0) at /usr/home/projects/llvm-lldb/tools/lldb/source/Target/Target.cpp:154 #9 0x00000008012fde09 in CommandObjectProcessConnect::Execute (this=0x805c2fc00, command=@0x7fffffffbf10<mailto:command=@0x7fffffffbf10>, result=@0x805d48140<mailto:result=@0x805d48140>) at /usr/home/projects/llvm-lldb/tools/lldb/source/Commands/CommandObjectProcess.cpp:873 #10 0x00000008014bdf20 in lldb_private::CommandObject::ExecuteWithOptions (this=0x805c2fc00, args=@0x7fffffffbf10<mailto:args=@0x7fffffffbf10>, result=@0x805d48140<mailto:result=@0x805d48140>) at /usr/home/projects/llvm-lldb/tools/lldb/source/Interpreter/CommandObject.cpp:281 #11 0x00000008014b2263 in lldb_private::CommandInterpreter::HandleCommand (this=0x805ca4200, command_line=0x80a41f198 "process connect localhost", add_to_history=true, result=@0x805d48140<mailto:result=@0x805d48140>, override_context=0x0, repeat_on_empty_command=true, no_context_switching=false) at /usr/home/projects/llvm-lldb/tools/lldb/source/Interpreter/CommandInterpreter.cpp:1540 #12 0x000000080124a7b5 in lldb::SBCommandInterpreter::HandleCommand (this=0x7fffffffc2f0, command_line=0x80a41f198 "process connect localhost", result=@0x7fffffffc2f8<mailto:result=@0x7fffffffc2f8>, add_to_history=true) at /usr/home/projects/llvm-lldb/tools/lldb/source/API/SBCommandInterpreter.cpp:97 #13 0x000000000040b666 in Driver::HandleIOEvent (this=0x7fffffffd718, event=@0x7fffffffc560<mailto:event=@0x7fffffffc560>) at /usr/home/projects/llvm-lldb/tools/lldb/tools/driver/Driver.cpp:980 #14 0x000000000040cc3e in Driver::MainLoop (this=0x7fffffffd718) at /usr/home/projects/llvm-lldb/tools/lldb/tools/driver/Driver.cpp:1406 #15 0x000000000040d28b in main (argc=1, argv=0x7fffffffd888, envp=0x7fffffffd898) at /usr/home/projects/llvm-lldb/tools/lldb/tools/driver/Driver.cpp:1540 The second problem is a misbehavior after an unseccessful process connect commend has been involved. The process connect leaves an 'undefined' process object if the command has been finished with an error. There is a log to reproduce: freebsd1# ./lldb /bin/ls Current executable set to '/bin/ls' (x86_64). (lldb) platform select remote-freebsd Host: FreeBSD 9.0-RELEASE FreeBSD 9.0-RELEASE #0: Tue Jan 3 07:46:30 UTC 2012 [email protected]:/usr/obj/usr/src/sys/GENERIC<mailto:[email protected]:/usr/obj/usr/src/sys/GENERIC> (lldb) process connect localhost error: remote connections are not supported (lldb) process connect connect://localhost error: Process 0 is currently being debugged, kill the process before connecting. (lldb) exit The second error should not appear as far as I understood. This patch fixes it by deleting a process object. Would somebody review and apply this patch if it looks ok? Thanks. Viktor.
lldb-commandobjectprocess-crash.patch
Description: lldb-commandobjectprocess-crash.patch
_______________________________________________ lldb-dev mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
