What happens if you export LD_LIBRARY_PATH = wherever the tsan runtime stuff is installed?
On Thu, May 14, 2015 at 8:35 PM Ryan Brown <rib...@google.com> wrote: > This is on linux. The tests all seem to fail with errors like this: > > ImportError: > /home/ribrdb/llldb/build-tsan/lib/python2.7/site-packages/lldb/_lldb.so: > undefined symbol: __tsan_init > Traceback (most recent call last): > File "/home/ribrdb/llldb/tools/lldb/test/dotest.py", line 1366, in > <module> > import lldb > File > "/home/ribrdb/llldb/build-tsan/lib/python2.7/site-packages/lldb/__init__.py", > line 52, in <module> > _lldb = swig_import_helper() > File > "/home/ribrdb/llldb/build-tsan/lib/python2.7/site-packages/lldb/__init__.py", > line 48, in swig_import_helper > _mod = imp.load_module('_lldb', fp, pathname, description) > > > On Thu, May 14, 2015 at 5:38 PM Zachary Turner <ztur...@google.com> wrote: > >> Great results! I'm especially interested in these IOHandler issues, since >> we know for sure there are problems here. >> >> When you say Python can't find tsan, can you elaborate? I'm not sure how >> tsan works or the process used to run lldb under tsan, but i bet it's >> something we can figure out with more information. >> >> Also, what os is this on? >> On Thu, May 14, 2015 at 5:01 PM Ryan Brown <rib...@google.com> wrote: >> >>> I just built lldb with tsan. The tests don't seem to work because python >>> can't find tsan, but a quick debugging session found a few issues: >>> >>> WARNING: ThreadSanitizer: data race (pid=64299) >>> Write of size 1 at 0x7d4400004bb0 by thread T6: >>> #0 lldb_private::IOHandler::SetIsDone(bool) >>> tools/lldb/include/lldb/Core/IOHandler.h:107 >>> #1 lldb_private::Process::PushProcessIOHandler() >>> tools/lldb/source/Target/Process.cpp:5279 >>> #2 >>> lldb_private::Process::HandlePrivateEvent(std::shared_ptr<lldb_private::Event>&) >>> tools/lldb/source/Target/Process.cpp:4443 >>> #3 lldb_private::Process::RunPrivateStateThread() >>> tools/lldb/source/Target/Process.cpp:4581 >>> #4 lldb_private::Process::PrivateStateThread(void*) >>> tools/lldb/source/Target/Process.cpp:4505 >>> #5 lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*) >>> tools/lldb/source/Host/common/HostNativeThreadBase.cpp:81 >>> >>> Previous write of size 1 at 0x7d4400004bb0 by main thread: >>> #0 lldb_private::IOHandler::SetIsDone(bool) >>> tools/lldb/include/lldb/Core/IOHandler.h:107 >>> #1 IOHandlerProcessSTDIO::Run() >>> tools/lldb/source/Target/Process.cpp:5096 >>> #2 lldb_private::Debugger::ExecuteIOHandlers() >>> tools/lldb/source/Core/Debugger.cpp:907 >>> #3 lldb_private::CommandInterpreter::RunCommandInterpreter(bool, >>> bool, lldb_private::CommandInterpreterRunOptions&) >>> tools/lldb/source/Interpreter/CommandInterpreter.cpp:3234 >>> #4 lldb::SBDebugger::RunCommandInterpreter(bool, bool) >>> tools/lldb/source/API/SBDebugger.cpp:980 >>> #5 Driver::MainLoop() tools/lldb/tools/driver/Driver.cpp:1152 >>> #6 main tools/lldb/tools/driver/Driver.cpp:1252 >>> >>> ================== >>> WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) >>> (pid=64299) >>> Cycle in lock order graph: M31728 (0x7d1000019e58) => M564 >>> (0x7d680001d0f8) => M31728 >>> >>> Mutex M564 acquired here while holding mutex M31728 in main thread: >>> #3 Locker tools/lldb/source/Host/common/Mutex.cpp:114 >>> #4 >>> lldb_private::ModuleList::FindSymbolsWithNameAndType(lldb_private::ConstString >>> const&, lldb::SymbolType, lldb_private::SymbolContextList&, bool) const >>> tools/lldb/source/Core/ModuleList.cpp:565 >>> #5 JITLoaderGDB::GetSymbolAddress(lldb_private::ModuleList&, >>> lldb_private::ConstString const&, lldb::SymbolType) const >>> tools/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp:432 >>> #6 JITLoaderGDB::SetJITBreakpoint(lldb_private::ModuleList&) >>> tools/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp:109 >>> #7 JITLoaderGDB::DidLaunch() >>> tools/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp:84 >>> #8 lldb_private::JITLoaderList::DidLaunch() >>> tools/lldb/source/Target/JITLoaderList.cpp:60 >>> #9 lldb_private::Process::Launch(lldb_private::ProcessLaunchInfo&) >>> tools/lldb/source/Target/Process.cpp:3177 >>> #10 >>> lldb_private::platform_linux::PlatformLinux::DebugProcess(lldb_private::ProcessLaunchInfo&, >>> lldb_private::Debugger&, lldb_private::Target*, lldb_private::Error&) >>> tools/lldb/source/Plugins/Platform/Linux/PlatformLinux.cpp:805 >>> #11 lldb_private::Target::Launch(lldb_private::ProcessLaunchInfo&, >>> lldb_private::Stream*) tools/lldb/source/Target/Target.cpp:2602 >>> #12 CommandObjectProcessLaunch::DoExecute(lldb_private::Args&, >>> lldb_private::CommandReturnObject&) >>> tools/lldb/source/Commands/CommandObjectProcess.cpp:263 >>> #13 lldb_private::CommandObjectParsed::Execute(char const*, >>> lldb_private::CommandReturnObject&) >>> tools/lldb/source/Interpreter/CommandObject.cpp:1075 >>> #14 lldb_private::CommandInterpreter::HandleCommand(char const*, >>> lldb_private::LazyBool, lldb_private::CommandReturnObject&, >>> lldb_private::ExecutionContext*, bool, bool) >>> tools/lldb/source/Interpreter/CommandInterpreter.cpp:1812 >>> #15 >>> lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&, >>> std::string&) tools/lldb/source/Interpreter/CommandInterpreter.cpp:2997 >>> #16 non-virtual thunk to >>> lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&, >>> std::string&) tools/lldb/source/Interpreter/CommandInterpreter.cpp:3076 >>> #17 lldb_private::IOHandlerEditline::Run() >>> tools/lldb/source/Core/IOHandler.cpp:729 >>> #18 lldb_private::Debugger::ExecuteIOHandlers() >>> tools/lldb/source/Core/Debugger.cpp:907 >>> #19 lldb_private::CommandInterpreter::RunCommandInterpreter(bool, >>> bool, lldb_private::CommandInterpreterRunOptions&) >>> tools/lldb/source/Interpreter/CommandInterpreter.cpp:3234 >>> #20 lldb::SBDebugger::RunCommandInterpreter(bool, bool) >>> tools/lldb/source/API/SBDebugger.cpp:980 >>> #21 Driver::MainLoop() tools/lldb/tools/driver/Driver.cpp:1152 >>> #22 main tools/lldb/tools/driver/Driver.cpp:1252 >>> >>> Mutex M31728 previously acquired by the same thread here: >>> #3 Locker tools/lldb/source/Host/common/Mutex.cpp:114 >>> #4 lldb_private::JITLoaderList::DidLaunch() >>> tools/lldb/source/Target/JITLoaderList.cpp:58 >>> #5 lldb_private::Process::Launch(lldb_private::ProcessLaunchInfo&) >>> tools/lldb/source/Target/Process.cpp:3177 >>> #6 >>> lldb_private::platform_linux::PlatformLinux::DebugProcess(lldb_private::ProcessLaunchInfo&, >>> lldb_private::Debugger&, lldb_private::Target*, lldb_private::Error&) >>> tools/lldb/source/Plugins/Platform/Linux/PlatformLinux.cpp:805 >>> #7 lldb_private::Target::Launch(lldb_private::ProcessLaunchInfo&, >>> lldb_private::Stream*) tools/lldb/source/Target/Target.cpp:2602 >>> #8 CommandObjectProcessLaunch::DoExecute(lldb_private::Args&, >>> lldb_private::CommandReturnObject&) >>> tools/lldb/source/Commands/CommandObjectProcess.cpp:263 >>> #9 lldb_private::CommandObjectParsed::Execute(char const*, >>> lldb_private::CommandReturnObject&) >>> tools/lldb/source/Interpreter/CommandObject.cpp:1075 >>> #10 lldb_private::CommandInterpreter::HandleCommand(char const*, >>> lldb_private::LazyBool, lldb_private::CommandReturnObject&, >>> lldb_private::ExecutionContext*, bool, bool) >>> tools/lldb/source/Interpreter/CommandInterpreter.cpp:1812 >>> #11 >>> lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&, >>> std::string&) tools/lldb/source/Interpreter/CommandInterpreter.cpp:2997 >>> #12 non-virtual thunk to >>> lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&, >>> std::string&) tools/lldb/source/Interpreter/CommandInterpreter.cpp:3076 >>> #13 lldb_private::IOHandlerEditline::Run() >>> tools/lldb/source/Core/IOHandler.cpp:729 >>> #14 lldb_private::Debugger::ExecuteIOHandlers() >>> tools/lldb/source/Core/Debugger.cpp:907 >>> #15 lldb_private::CommandInterpreter::RunCommandInterpreter(bool, >>> bool, lldb_private::CommandInterpreterRunOptions&) >>> tools/lldb/source/Interpreter/CommandInterpreter.cpp:3234 >>> #16 lldb::SBDebugger::RunCommandInterpreter(bool, bool) >>> tools/lldb/source/API/SBDebugger.cpp:980 >>> #17 Driver::MainLoop() tools/lldb/tools/driver/Driver.cpp:1152 >>> #18 main tools/lldb/tools/driver/Driver.cpp:1252 >>> >>> Mutex M31728 acquired here while holding mutex M564 in thread T6: >>> #3 Locker tools/lldb/source/Host/common/Mutex.cpp:114 >>> #4 >>> lldb_private::JITLoaderList::ModulesDidLoad(lldb_private::ModuleList&) >>> tools/lldb/source/Target/JITLoaderList.cpp:74 >>> #5 lldb_private::Process::ModulesDidLoad(lldb_private::ModuleList&) >>> tools/lldb/source/Target/Process.cpp:6466 >>> #6 lldb_private::Target::ModulesDidLoad(lldb_private::ModuleList&) >>> tools/lldb/source/Target/Target.cpp:1286 >>> #7 lldb_private::Target::ModuleAdded(lldb_private::ModuleList >>> const&, std::shared_ptr<lldb_private::Module> const&) >>> tools/lldb/source/Target/Target.cpp:1254 >>> #8 non-virtual thunk to >>> lldb_private::Target::ModuleAdded(lldb_private::ModuleList const&, >>> std::shared_ptr<lldb_private::Module> const&) >>> tools/lldb/source/Target/Target.cpp:1256 >>> #9 >>> lldb_private::ModuleList::AppendImpl(std::shared_ptr<lldb_private::Module> >>> const&, bool) tools/lldb/source/Core/ModuleList.cpp:111 >>> #10 >>> lldb_private::ModuleList::Append(std::shared_ptr<lldb_private::Module> >>> const&) tools/lldb/source/Core/ModuleList.cpp:118 >>> #11 lldb_private::Target::GetSharedModule(lldb_private::ModuleSpec >>> const&, lldb_private::Error*) tools/lldb/source/Target/Target.cpp:1810 >>> #12 >>> lldb_private::DynamicLoader::LoadModuleAtAddress(lldb_private::FileSpec >>> const&, unsigned long, unsigned long) >>> tools/lldb/source/Core/DynamicLoader.cpp:185 >>> #13 DynamicLoaderPOSIXDYLD::LoadAllCurrentModules() >>> tools/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp:530 >>> #14 DynamicLoaderPOSIXDYLD::EntryBreakpointHit(void*, >>> lldb_private::StoppointCallbackContext*, unsigned long, unsigned long) >>> tools/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp:343 >>> #15 >>> lldb_private::BreakpointOptions::InvokeCallback(lldb_private::StoppointCallbackContext*, >>> unsigned long, unsigned long) >>> tools/lldb/source/Breakpoint/BreakpointOptions.cpp:147 >>> #16 >>> lldb_private::Breakpoint::InvokeCallback(lldb_private::StoppointCallbackContext*, >>> int) tools/lldb/source/Breakpoint/Breakpoint.cpp:345 >>> #17 >>> lldb_private::BreakpointLocation::InvokeCallback(lldb_private::StoppointCallbackContext*) >>> tools/lldb/source/Breakpoint/BreakpointLocation.cpp:222 >>> #18 >>> lldb_private::BreakpointLocation::ShouldStop(lldb_private::StoppointCallbackContext*) >>> tools/lldb/source/Breakpoint/BreakpointLocation.cpp:465 >>> #19 >>> lldb_private::BreakpointLocationCollection::ShouldStop(lldb_private::StoppointCallbackContext*) >>> tools/lldb/source/Breakpoint/BreakpointLocationCollection.cpp:144 >>> #20 >>> lldb_private::BreakpointSite::ShouldStop(lldb_private::StoppointCallbackContext*) >>> tools/lldb/source/Breakpoint/BreakpointSite.cpp:69 >>> #21 >>> lldb_private::StopInfoBreakpoint::ShouldStopSynchronous(lldb_private::Event*) >>> tools/lldb/source/Target/StopInfo.cpp:200 >>> #22 lldb_private::Thread::ShouldStop(lldb_private::Event*) >>> tools/lldb/source/Target/Thread.cpp:845 >>> #23 lldb_private::ThreadList::ShouldStop(lldb_private::Event*) >>> tools/lldb/source/Target/ThreadList.cpp:318 >>> #24 >>> lldb_private::Process::ShouldBroadcastEvent(lldb_private::Event*) >>> tools/lldb/source/Target/Process.cpp:4181 >>> #25 >>> lldb_private::Process::HandlePrivateEvent(std::shared_ptr<lldb_private::Event>&) >>> tools/lldb/source/Target/Process.cpp:4422 >>> #26 lldb_private::Process::RunPrivateStateThread() >>> tools/lldb/source/Target/Process.cpp:4581 >>> #27 lldb_private::Process::PrivateStateThread(void*) >>> tools/lldb/source/Target/Process.cpp:4505 >>> #28 >>> lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*) >>> tools/lldb/source/Host/common/HostNativeThreadBase.cpp:81 >>> >>> Mutex M564 previously acquired by the same thread here: >>> #3 Locker tools/lldb/source/Host/common/Mutex.cpp:114 >>> #4 >>> lldb_private::ModuleList::AppendImpl(std::shared_ptr<lldb_private::Module> >>> const&, bool) tools/lldb/source/Core/ModuleList.cpp:108 >>> #5 >>> lldb_private::ModuleList::Append(std::shared_ptr<lldb_private::Module> >>> const&) tools/lldb/source/Core/ModuleList.cpp:118 >>> #6 lldb_private::Target::GetSharedModule(lldb_private::ModuleSpec >>> const&, lldb_private::Error*) tools/lldb/source/Target/Target.cpp:1810 >>> #7 >>> lldb_private::DynamicLoader::LoadModuleAtAddress(lldb_private::FileSpec >>> const&, unsigned long, unsigned long) >>> tools/lldb/source/Core/DynamicLoader.cpp:185 >>> #8 DynamicLoaderPOSIXDYLD::LoadAllCurrentModules() >>> tools/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp:530 >>> #9 DynamicLoaderPOSIXDYLD::EntryBreakpointHit(void*, >>> lldb_private::StoppointCallbackContext*, unsigned long, unsigned long) >>> tools/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp:343 >>> #10 >>> lldb_private::BreakpointOptions::InvokeCallback(lldb_private::StoppointCallbackContext*, >>> unsigned long, unsigned long) >>> tools/lldb/source/Breakpoint/BreakpointOptions.cpp:147 >>> #11 >>> lldb_private::Breakpoint::InvokeCallback(lldb_private::StoppointCallbackContext*, >>> int) tools/lldb/source/Breakpoint/Breakpoint.cpp:345 >>> #12 >>> lldb_private::BreakpointLocation::InvokeCallback(lldb_private::StoppointCallbackContext*) >>> tools/lldb/source/Breakpoint/BreakpointLocation.cpp:222 >>> #13 >>> lldb_private::BreakpointLocation::ShouldStop(lldb_private::StoppointCallbackContext*) >>> tools/lldb/source/Breakpoint/BreakpointLocation.cpp:465 >>> #14 >>> lldb_private::BreakpointLocationCollection::ShouldStop(lldb_private::StoppointCallbackContext*) >>> tools/lldb/source/Breakpoint/BreakpointLocationCollection.cpp:144 >>> #15 >>> lldb_private::BreakpointSite::ShouldStop(lldb_private::StoppointCallbackContext*) >>> tools/lldb/source/Breakpoint/BreakpointSite.cpp:69 >>> #16 >>> lldb_private::StopInfoBreakpoint::ShouldStopSynchronous(lldb_private::Event*) >>> tools/lldb/source/Target/StopInfo.cpp:200 >>> #17 lldb_private::Thread::ShouldStop(lldb_private::Event*) >>> tools/lldb/source/Target/Thread.cpp:845 >>> #18 lldb_private::ThreadList::ShouldStop(lldb_private::Event*) >>> tools/lldb/source/Target/ThreadList.cpp:318 >>> #19 >>> lldb_private::Process::ShouldBroadcastEvent(lldb_private::Event*) >>> tools/lldb/source/Target/Process.cpp:4181 >>> #20 >>> lldb_private::Process::HandlePrivateEvent(std::shared_ptr<lldb_private::Event>&) >>> tools/lldb/source/Target/Process.cpp:4422 >>> #21 lldb_private::Process::RunPrivateStateThread() >>> tools/lldb/source/Target/Process.cpp:4581 >>> #22 lldb_private::Process::PrivateStateThread(void*) >>> tools/lldb/source/Target/Process.cpp:4505 >>> #23 >>> lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*) >>> tools/lldb/source/Host/common/HostNativeThreadBase.cpp:81 >>> >>> ================== >>> WARNING: ThreadSanitizer: data race (pid=64299) >>> Write of size 1 at 0x7d4400004bb1 by thread T2 (mutexes: write M168): >>> #0 lldb_private::IOHandler::Deactivate() >>> tools/lldb/include/lldb/Core/IOHandler.h:131 >>> #1 >>> lldb_private::Debugger::PopIOHandler(std::shared_ptr<lldb_private::IOHandler> >>> const&) tools/lldb/source/Core/Debugger.cpp:1064 >>> #2 lldb_private::Process::PopProcessIOHandler() >>> tools/lldb/source/Target/Process.cpp:5291 >>> #3 >>> lldb_private::Debugger::HandleProcessEvent(std::shared_ptr<lldb_private::Event> >>> const&) tools/lldb/source/Core/Debugger.cpp:1544 >>> #4 lldb_private::Debugger::DefaultEventHandler() >>> tools/lldb/source/Core/Debugger.cpp:1634 >>> #5 lldb_private::Debugger::EventHandlerThread(void*) >>> tools/lldb/source/Core/Debugger.cpp:1696 >>> #6 lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*) >>> tools/lldb/source/Host/common/HostNativeThreadBase.cpp:81 >>> >>> Previous write of size 1 at 0x7d4400004bb1 by main thread: >>> #0 lldb_private::IOHandler::Activate() >>> tools/lldb/include/lldb/Core/IOHandler.h:125 >>> #1 lldb_private::Debugger::ExecuteIOHandlers() >>> tools/lldb/source/Core/Debugger.cpp:906 >>> #2 lldb_private::CommandInterpreter::RunCommandInterpreter(bool, >>> bool, lldb_private::CommandInterpreterRunOptions&) >>> tools/lldb/source/Interpreter/CommandInterpreter.cpp:3234 >>> #3 lldb::SBDebugger::RunCommandInterpreter(bool, bool) >>> tools/lldb/source/API/SBDebugger.cpp:980 >>> #4 Driver::MainLoop() tools/lldb/tools/driver/Driver.cpp:1152 >>> #5 main tools/lldb/tools/driver/Driver.cpp:1252 >>> >>> ================== >>> WARNING: ThreadSanitizer: data race (pid=64299) >>> Read of size 8 at 0x7da0000080c0 by thread T2 (mutexes: write M168): >>> #0 write <null>:0 >>> #1 operator() tools/lldb/source/Host/posix/PipePosix.cpp:416 >>> #2 std::_Function_handler<lldb_private::Error (bool&), >>> lldb_private::PipePosix::Write(void const*, unsigned long, unsigned >>> long&)::$_1>::_M_invoke(std::_Any_data const&, bool&) >>> /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/functional:2056 >>> #3 std::function<lldb_private::Error (bool&)>::operator()(bool&) >>> const >>> /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/functional:2464 >>> #4 (anonymous namespace)::SelectIO(int, bool, >>> std::function<lldb_private::Error (bool&)> const&, >>> std::chrono::duration<long, std::ratio<1l, 1000000l> > const&) >>> tools/lldb/source/Host/posix/PipePosix.cpp:118 >>> #5 lldb_private::PipePosix::Write(void const*, unsigned long, >>> unsigned long&) tools/lldb/source/Host/posix/PipePosix.cpp:411 >>> #6 IOHandlerProcessSTDIO::Cancel() >>> tools/lldb/source/Target/Process.cpp:5192 >>> #7 >>> lldb_private::Debugger::PopIOHandler(std::shared_ptr<lldb_private::IOHandler> >>> const&) tools/lldb/source/Core/Debugger.cpp:1065 >>> #8 lldb_private::Process::PopProcessIOHandler() >>> tools/lldb/source/Target/Process.cpp:5291 >>> #9 >>> lldb_private::Debugger::HandleProcessEvent(std::shared_ptr<lldb_private::Event> >>> const&) tools/lldb/source/Core/Debugger.cpp:1544 >>> #10 lldb_private::Debugger::DefaultEventHandler() >>> tools/lldb/source/Core/Debugger.cpp:1634 >>> #11 lldb_private::Debugger::EventHandlerThread(void*) >>> tools/lldb/source/Core/Debugger.cpp:1696 >>> #12 >>> lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*) >>> tools/lldb/source/Host/common/HostNativeThreadBase.cpp:81 >>> >>> Previous write of size 8 at 0x7da0000080c0 by main thread: >>> #0 pipe2 <null>:0 >>> #1 lldb_private::PipePosix::CreateNew(bool) >>> tools/lldb/source/Host/posix/PipePosix.cpp:168 >>> #2 IOHandlerProcessSTDIO::OpenPipes() >>> tools/lldb/source/Target/Process.cpp:5078 >>> #3 IOHandlerProcessSTDIO::Run() >>> tools/lldb/source/Target/Process.cpp:5097 >>> #4 lldb_private::Debugger::ExecuteIOHandlers() >>> tools/lldb/source/Core/Debugger.cpp:907 >>> #5 lldb_private::CommandInterpreter::RunCommandInterpreter(bool, >>> bool, lldb_private::CommandInterpreterRunOptions&) >>> tools/lldb/source/Interpreter/CommandInterpreter.cpp:3234 >>> #6 lldb::SBDebugger::RunCommandInterpreter(bool, bool) >>> tools/lldb/source/API/SBDebugger.cpp:980 >>> #7 Driver::MainLoop() tools/lldb/tools/driver/Driver.cpp:1152 >>> #8 main tools/lldb/tools/driver/Driver.cpp:1252 >>> >>> Location is file descriptor 12 created by main thread at: >>> #0 pipe2 <null>:0 >>> #1 lldb_private::PipePosix::CreateNew(bool) >>> tools/lldb/source/Host/posix/PipePosix.cpp:168 >>> #2 IOHandlerProcessSTDIO::OpenPipes() >>> tools/lldb/source/Target/Process.cpp:5078 >>> #3 IOHandlerProcessSTDIO::Run() >>> tools/lldb/source/Target/Process.cpp:5097 >>> #4 lldb_private::Debugger::ExecuteIOHandlers() >>> tools/lldb/source/Core/Debugger.cpp:907 >>> #5 lldb_private::CommandInterpreter::RunCommandInterpreter(bool, >>> bool, lldb_private::CommandInterpreterRunOptions&) >>> tools/lldb/source/Interpreter/CommandInterpreter.cpp:3234 >>> #6 lldb::SBDebugger::RunCommandInterpreter(bool, bool) >>> tools/lldb/source/API/SBDebugger.cpp:980 >>> #7 Driver::MainLoop() tools/lldb/tools/driver/Driver.cpp:1152 >>> #8 main tools/lldb/tools/driver/Driver.cpp:1252 >>> >>> ================== >>> WARNING: ThreadSanitizer: data race (pid=64299) >>> Read of size 8 at 0x7d080001a5c8 by main thread: >>> #0 lldb_private::HostNativeThreadBase::GetSystemHandle() const >>> tools/lldb/source/Host/common/HostNativeThreadBase.cpp:35 >>> #1 lldb_private::HostThread::EqualsThread(unsigned long) const >>> tools/lldb/source/Host/common/HostThread.cpp:77 >>> #2 lldb_private::Process::GetRunLock() >>> tools/lldb/source/Target/Process.cpp:6373 >>> #3 >>> lldb_private::ExecutionContextRef::SetTargetPtr(lldb_private::Target*, >>> bool) tools/lldb/source/Target/ExecutionContext.cpp:723 >>> #4 >>> lldb_private::CommandInterpreter::UpdateExecutionContext(lldb_private::ExecutionContext*) >>> tools/lldb/source/Interpreter/CommandInterpreter.cpp:2940 >>> #5 lldb_private::CommandInterpreter::HandleCommand(char const*, >>> lldb_private::LazyBool, lldb_private::CommandReturnObject&, >>> lldb_private::ExecutionContext*, bool, bool) >>> tools/lldb/source/Interpreter/CommandInterpreter.cpp:1668 >>> #6 >>> lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&, >>> std::string&) tools/lldb/source/Interpreter/CommandInterpreter.cpp:2997 >>> #7 non-virtual thunk to >>> lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&, >>> std::string&) tools/lldb/source/Interpreter/CommandInterpreter.cpp:3076 >>> #8 lldb_private::IOHandlerEditline::Run() >>> tools/lldb/source/Core/IOHandler.cpp:729 >>> #9 lldb_private::Debugger::ExecuteIOHandlers() >>> tools/lldb/source/Core/Debugger.cpp:907 >>> #10 lldb_private::CommandInterpreter::RunCommandInterpreter(bool, >>> bool, lldb_private::CommandInterpreterRunOptions&) >>> tools/lldb/source/Interpreter/CommandInterpreter.cpp:3234 >>> #11 lldb::SBDebugger::RunCommandInterpreter(bool, bool) >>> tools/lldb/source/API/SBDebugger.cpp:980 >>> #12 Driver::MainLoop() tools/lldb/tools/driver/Driver.cpp:1152 >>> #13 main tools/lldb/tools/driver/Driver.cpp:1252 >>> >>> Previous write of size 8 at 0x7d080001a5c8 by thread T6: >>> #0 memset <null>:0 >>> #1 lldb_private::HostNativeThreadBase::Reset() >>> tools/lldb/source/Host/common/HostNativeThreadBase.cpp:54 >>> #2 lldb_private::HostThread::Reset() >>> tools/lldb/source/Host/common/HostThread.cpp:41 >>> #3 lldb_private::Process::RunPrivateStateThread() >>> tools/lldb/source/Target/Process.cpp:4604 >>> #4 lldb_private::Process::PrivateStateThread(void*) >>> tools/lldb/source/Target/Process.cpp:4505 >>> #5 lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*) >>> tools/lldb/source/Host/common/HostNativeThreadBase.cpp:81 >>> >>> ================== >>> WARNING: ThreadSanitizer: data race (pid=64299) >>> Write of size 4 at 0x7d680001c8e8 by main thread: >>> #0 lldb_private::Terminal::SetFileDescriptor(int) >>> tools/lldb/include/lldb/Host/Terminal.h:46 >>> #1 lldb_private::TerminalState::Save(int, bool) >>> tools/lldb/source/Host/common/Terminal.cpp:144 >>> #2 lldb_private::Debugger::SaveInputTerminalState() >>> tools/lldb/source/Core/Debugger.cpp:825 >>> #3 lldb::SBDebugger::SaveInputTerminalState() >>> tools/lldb/source/API/SBDebugger.cpp:395 >>> #4 sigtstp_handler(int) tools/lldb/tools/driver/Driver.cpp:1203 >>> #5 __tsan::CallUserSignalHandler(__tsan::ThreadState*, bool, bool, >>> int, my_siginfo_t*, void*) tsan_interceptors.o:0 >>> #6 std::string::_Rep::_M_dispose(std::allocator<char> const&) >>> /build/buildd/gcc-4.8-4.8.2/build/x86_64-linux-gnu/libstdc++-v3/include/bits/basic_string.h:538 >>> #7 >>> lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&, >>> std::string&) tools/lldb/source/Interpreter/CommandInterpreter.cpp:2997 >>> #8 non-virtual thunk to >>> lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&, >>> std::string&) tools/lldb/source/Interpreter/CommandInterpreter.cpp:3076 >>> #9 lldb_private::IOHandlerEditline::Run() >>> tools/lldb/source/Core/IOHandler.cpp:729 >>> #10 lldb_private::Debugger::ExecuteIOHandlers() >>> tools/lldb/source/Core/Debugger.cpp:907 >>> #11 lldb_private::CommandInterpreter::RunCommandInterpreter(bool, >>> bool, lldb_private::CommandInterpreterRunOptions&) >>> tools/lldb/source/Interpreter/CommandInterpreter.cpp:3234 >>> #12 lldb::SBDebugger::RunCommandInterpreter(bool, bool) >>> tools/lldb/source/API/SBDebugger.cpp:980 >>> #13 Driver::MainLoop() tools/lldb/tools/driver/Driver.cpp:1152 >>> #14 main tools/lldb/tools/driver/Driver.cpp:1252 >>> >>> Previous write of size 4 at 0x7d680001c8e8 by thread T2 (mutexes: >>> write M159): >>> #0 lldb_private::Terminal::SetFileDescriptor(int) >>> tools/lldb/include/lldb/Host/Terminal.h:46 >>> #1 lldb_private::TerminalState::Save(int, bool) >>> tools/lldb/source/Host/common/Terminal.cpp:144 >>> #2 lldb_private::Debugger::SaveInputTerminalState() >>> tools/lldb/source/Core/Debugger.cpp:825 >>> #3 lldb::SBDebugger::SaveInputTerminalState() >>> tools/lldb/source/API/SBDebugger.cpp:395 >>> #4 sigtstp_handler(int) tools/lldb/tools/driver/Driver.cpp:1203 >>> #5 __tsan::CallUserSignalHandler(__tsan::ThreadState*, bool, bool, >>> int, my_siginfo_t*, void*) tsan_interceptors.o:0 >>> #6 lldb_private::Condition::Wait(lldb_private::Mutex&, >>> lldb_private::TimeValue const*, bool*) >>> tools/lldb/source/Host/common/Condition.cpp:85 >>> #7 lldb_private::Predicate<bool>::WaitForValueEqualTo(bool, >>> lldb_private::TimeValue const*, bool*) >>> tools/lldb/include/lldb/Host/Predicate.h:339 >>> #8 >>> lldb_private::Listener::WaitForEventsInternal(lldb_private::TimeValue >>> const*, lldb_private::Broadcaster*, lldb_private::ConstString const*, >>> unsigned int, unsigned int, std::shared_ptr<lldb_private::Event>&) >>> tools/lldb/source/Core/Listener.cpp:442 >>> #9 lldb_private::Listener::WaitForEvent(lldb_private::TimeValue >>> const*, std::shared_ptr<lldb_private::Event>&) >>> tools/lldb/source/Core/Listener.cpp:492 >>> #10 lldb_private::Debugger::DefaultEventHandler() >>> tools/lldb/source/Core/Debugger.cpp:1623 >>> #11 lldb_private::Debugger::EventHandlerThread(void*) >>> tools/lldb/source/Core/Debugger.cpp:1696 >>> #12 >>> lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*) >>> tools/lldb/source/Host/common/HostNativeThreadBase.cpp:81 >>> >>> ================== >>> WARNING: ThreadSanitizer: data race (pid=64299) >>> Write of size 4 at 0x7d680001c8ec by main thread: >>> #0 lldb_private::TerminalState::Save(int, bool) >>> tools/lldb/source/Host/common/Terminal.cpp:148 >>> #1 lldb_private::Debugger::SaveInputTerminalState() >>> tools/lldb/source/Core/Debugger.cpp:825 >>> #2 lldb::SBDebugger::SaveInputTerminalState() >>> tools/lldb/source/API/SBDebugger.cpp:395 >>> #3 sigtstp_handler(int) tools/lldb/tools/driver/Driver.cpp:1203 >>> #4 __tsan::CallUserSignalHandler(__tsan::ThreadState*, bool, bool, >>> int, my_siginfo_t*, void*) tsan_interceptors.o:0 >>> #5 std::string::_Rep::_M_dispose(std::allocator<char> const&) >>> /build/buildd/gcc-4.8-4.8.2/build/x86_64-linux-gnu/libstdc++-v3/include/bits/basic_string.h:538 >>> #6 >>> lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&, >>> std::string&) tools/lldb/source/Interpreter/CommandInterpreter.cpp:2997 >>> #7 non-virtual thunk to >>> lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&, >>> std::string&) tools/lldb/source/Interpreter/CommandInterpreter.cpp:3076 >>> #8 lldb_private::IOHandlerEditline::Run() >>> tools/lldb/source/Core/IOHandler.cpp:729 >>> #9 lldb_private::Debugger::ExecuteIOHandlers() >>> tools/lldb/source/Core/Debugger.cpp:907 >>> #10 lldb_private::CommandInterpreter::RunCommandInterpreter(bool, >>> bool, lldb_private::CommandInterpreterRunOptions&) >>> tools/lldb/source/Interpreter/CommandInterpreter.cpp:3234 >>> #11 lldb::SBDebugger::RunCommandInterpreter(bool, bool) >>> tools/lldb/source/API/SBDebugger.cpp:980 >>> #12 Driver::MainLoop() tools/lldb/tools/driver/Driver.cpp:1152 >>> #13 main tools/lldb/tools/driver/Driver.cpp:1252 >>> >>> Previous write of size 4 at 0x7d680001c8ec by thread T2 (mutexes: >>> write M159): >>> #0 lldb_private::TerminalState::Save(int, bool) >>> tools/lldb/source/Host/common/Terminal.cpp:148 >>> #1 lldb_private::Debugger::SaveInputTerminalState() >>> tools/lldb/source/Core/Debugger.cpp:825 >>> #2 lldb::SBDebugger::SaveInputTerminalState() >>> tools/lldb/source/API/SBDebugger.cpp:395 >>> #3 sigtstp_handler(int) tools/lldb/tools/driver/Driver.cpp:1203 >>> #4 __tsan::CallUserSignalHandler(__tsan::ThreadState*, bool, bool, >>> int, my_siginfo_t*, void*) tsan_interceptors.o:0 >>> #5 lldb_private::Condition::Wait(lldb_private::Mutex&, >>> lldb_private::TimeValue const*, bool*) >>> tools/lldb/source/Host/common/Condition.cpp:85 >>> #6 lldb_private::Predicate<bool>::WaitForValueEqualTo(bool, >>> lldb_private::TimeValue const*, bool*) >>> tools/lldb/include/lldb/Host/Predicate.h:339 >>> #7 >>> lldb_private::Listener::WaitForEventsInternal(lldb_private::TimeValue >>> const*, lldb_private::Broadcaster*, lldb_private::ConstString const*, >>> unsigned int, unsigned int, std::shared_ptr<lldb_private::Event>&) >>> tools/lldb/source/Core/Listener.cpp:442 >>> #8 lldb_private::Listener::WaitForEvent(lldb_private::TimeValue >>> const*, std::shared_ptr<lldb_private::Event>&) >>> tools/lldb/source/Core/Listener.cpp:492 >>> #9 lldb_private::Debugger::DefaultEventHandler() >>> tools/lldb/source/Core/Debugger.cpp:1623 >>> #10 lldb_private::Debugger::EventHandlerThread(void*) >>> tools/lldb/source/Core/Debugger.cpp:1696 >>> #11 >>> lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*) >>> tools/lldb/source/Host/common/HostNativeThreadBase.cpp:81 >>> >>> >>> -- Ryan Brown >>> >>> On Mon, May 11, 2015 at 8:20 AM, Ed Maste <ema...@freebsd.org> wrote: >>> >>>> On 11 May 2015 at 10:21, Pavel Labath <lab...@google.com> wrote: >>>> > >>>> > BTW, I've noticed that PushIOHandler does not lock >>>> > m_input_reader_stack.GetMutex(), unlike PopIOHandler, and all other >>>> > functions which deal with handlers. Is that intentional? I think it >>>> > should lock the mutex as well. >>>> >>>> A slight tangent here, but there's a lot of dubious thread behaviour >>>> like this. One example I've run into is PR22611 - I see that if we set >>>> a prompt that fits in libc++'s short string optimization (that is, no >>>> more than 22 characters) it works fine, but as soon as the prompt is >>>> 23 characters long we end up pointing at uninitialized memory; >>>> presumably the race window is much larger in that case. >>>> >>>> Unfortunately TSan isn't fully functional on FreeBSD at the moment, so >>>> it's not that easy for me to find other cases like this with a >>>> systematic approach. I recall there was an effort to run LLDB under >>>> TSan on Linux some time ago, and that found a number of issues. Is >>>> anyone on the Linux side interested in picking that up again? >>>> _______________________________________________ >>>> lldb-dev mailing list >>>> lldb-dev@cs.uiuc.edu >>>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev >>>> >>> >>> _______________________________________________ >>> lldb-dev mailing list >>> lldb-dev@cs.uiuc.edu >>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev >>> >>
_______________________________________________ lldb-dev mailing list lldb-dev@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev