Author: Michał Górny Date: 2020-11-10T20:20:44+01:00 New Revision: f21e704d4a2cc992faff46665b31daad290cc8b8
URL: https://github.com/llvm/llvm-project/commit/f21e704d4a2cc992faff46665b31daad290cc8b8 DIFF: https://github.com/llvm/llvm-project/commit/f21e704d4a2cc992faff46665b31daad290cc8b8.diff LOG: [lldb] [Process/NetBSD] Copy the recent improvements from FreeBSD Copy the recent improvements from the FreeBSDRemote plugin, notably: - moving event reporting setup into SetupTrace() helper - adding more debug info into SIGTRAP handling - handling user-generated (and unknown) SIGTRAP events - adding missing error handling to the generic signal handler - fixing attaching to processes - switching watchpoint helpers to use llvm::Error - minor style and formatting changes This fixes a number of tests, mostly related to fixed attaching. Differential Revision: https://reviews.llvm.org/D91167 Added: Modified: lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.cpp lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.h lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD.h lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.cpp lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.h lldb/source/Plugins/Process/NetBSD/NativeThreadNetBSD.cpp lldb/source/Plugins/Process/NetBSD/NativeThreadNetBSD.h lldb/test/API/commands/process/attach/TestProcessAttach.py lldb/test/API/commands/register/register/register_command/TestRegisters.py lldb/test/API/functionalities/deleted-executable/TestDeletedExecutable.py lldb/test/API/functionalities/thread/num_threads/TestNumThreads.py lldb/test/API/python_api/hello_world/TestHelloWorld.py lldb/test/API/tools/lldb-server/TestGdbRemoteAttach.py lldb/test/API/tools/lldb-server/TestGdbRemoteKill.py lldb/test/API/tools/lldb-server/TestGdbRemoteProcessInfo.py lldb/test/API/tools/lldb-server/TestLldbGdbServer.py Removed: ################################################################################ diff --git a/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.cpp b/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.cpp index be98a6386363..75d0d0a37fae 100644 --- a/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.cpp +++ b/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.cpp @@ -98,18 +98,7 @@ NativeProcessNetBSD::Factory::Launch(ProcessLaunchInfo &launch_info, pid, launch_info.GetPTY().ReleasePrimaryFileDescriptor(), native_delegate, Info.GetArchitecture(), mainloop)); - // Enable event reporting - ptrace_event_t events; - status = PtraceWrapper(PT_GET_EVENT_MASK, pid, &events, sizeof(events)); - if (status.Fail()) - return status.ToError(); - // TODO: PTRACE_FORK | PTRACE_VFORK | PTRACE_POSIX_SPAWN? - events.pe_set_event |= PTRACE_LWP_CREATE | PTRACE_LWP_EXIT; - status = PtraceWrapper(PT_SET_EVENT_MASK, pid, &events, sizeof(events)); - if (status.Fail()) - return status.ToError(); - - status = process_up->ReinitializeThreads(); + status = process_up->SetupTrace(); if (status.Fail()) return status.ToError(); @@ -218,10 +207,14 @@ void NativeProcessNetBSD::MonitorSIGTRAP(lldb::pid_t pid) { // Get details on the signal raised. if (siginfo_err.Fail()) { + LLDB_LOG(log, "PT_GET_SIGINFO failed {0}", siginfo_err); return; } + LLDB_LOG(log, "got SIGTRAP, pid = {0}, lwpid = {1}, si_code = {2}", pid, + info.psi_lwpid, info.psi_siginfo.si_code); NativeThreadNetBSD* thread = nullptr; + if (info.psi_lwpid > 0) { for (const auto &t : m_threads) { if (t->GetID() == static_cast<lldb::tid_t>(info.psi_lwpid)) { @@ -243,12 +236,12 @@ void NativeProcessNetBSD::MonitorSIGTRAP(lldb::pid_t pid) { FixupBreakpointPCAsNeeded(*thread); } SetState(StateType::eStateStopped, true); - break; + return; case TRAP_TRACE: if (thread) thread->SetStoppedByTrace(); SetState(StateType::eStateStopped, true); - break; + return; case TRAP_EXEC: { Status error = ReinitializeThreads(); if (error.Fail()) { @@ -262,7 +255,8 @@ void NativeProcessNetBSD::MonitorSIGTRAP(lldb::pid_t pid) { for (const auto &thread : m_threads) static_cast<NativeThreadNetBSD &>(*thread).SetStoppedByExec(); SetState(StateType::eStateStopped, true); - } break; + return; + } case TRAP_LWP: { ptrace_state_t pst; Status error = PtraceWrapper(PT_GET_PROCESS_STATE, pid, &pst, sizeof(pst)); @@ -296,11 +290,10 @@ void NativeProcessNetBSD::MonitorSIGTRAP(lldb::pid_t pid) { } error = PtraceWrapper(PT_CONTINUE, pid, reinterpret_cast<void*>(1), 0); - if (error.Fail()) { + if (error.Fail()) SetState(StateType::eStateInvalid); - return; - } - } break; + return; + } case TRAP_DBREG: { if (!thread) break; @@ -318,19 +311,31 @@ void NativeProcessNetBSD::MonitorSIGTRAP(lldb::pid_t pid) { thread->SetStoppedByWatchpoint(wp_index); regctx.ClearWatchpointHit(wp_index); SetState(StateType::eStateStopped, true); - break; + return; } thread->SetStoppedByTrace(); SetState(StateType::eStateStopped, true); - } break; + return; } + } + + // Either user-generated SIGTRAP or an unknown event that would + // otherwise leave the debugger hanging. + LLDB_LOG(log, "unknown SIGTRAP, passing to generic handler"); + MonitorSignal(pid, SIGTRAP); } void NativeProcessNetBSD::MonitorSignal(lldb::pid_t pid, int signal) { + Log *log(ProcessPOSIXLog::GetLogIfAllCategoriesSet(POSIX_LOG_PROCESS)); ptrace_siginfo_t info; + const auto siginfo_err = PtraceWrapper(PT_GET_SIGINFO, pid, &info, sizeof(info)); + if (siginfo_err.Fail()) { + LLDB_LOG(log, "PT_LWPINFO failed {0}", siginfo_err); + return; + } for (const auto &abs_thread : m_threads) { NativeThreadNetBSD &thread = static_cast<NativeThreadNetBSD &>(*abs_thread); @@ -801,8 +806,9 @@ Status NativeProcessNetBSD::Attach() { m_pid, nullptr, WALLSIG)) < 0) return Status(errno, eErrorTypePOSIX); - /* Initialize threads */ - status = ReinitializeThreads(); + // Initialize threads and tracing status + // NB: this needs to be called before we set thread state + status = SetupTrace(); if (status.Fail()) return status; @@ -810,7 +816,8 @@ Status NativeProcessNetBSD::Attach() { static_cast<NativeThreadNetBSD &>(*thread).SetStoppedBySignal(SIGSTOP); // Let our process instance know the thread has stopped. - SetState(StateType::eStateStopped); + SetCurrentThreadID(m_threads.front()->GetID()); + SetState(StateType::eStateStopped, false); return Status(); } @@ -855,7 +862,8 @@ Status NativeProcessNetBSD::WriteMemory(lldb::addr_t addr, const void *buf, io.piod_len = size; do { - io.piod_addr = const_cast<void *>(static_cast<const void *>(src + bytes_written)); + io.piod_addr = + const_cast<void *>(static_cast<const void *>(src + bytes_written)); io.piod_offs = (void *)(addr + bytes_written); Status error = NativeProcessNetBSD::PtraceWrapper(PT_IO, GetID(), &io); @@ -900,6 +908,21 @@ NativeProcessNetBSD::GetAuxvData() const { return std::move(buf); } +Status NativeProcessNetBSD::SetupTrace() { + // Enable event reporting + ptrace_event_t events; + Status status = PtraceWrapper(PT_GET_EVENT_MASK, GetID(), &events, sizeof(events)); + if (status.Fail()) + return status; + // TODO: PTRACE_FORK | PTRACE_VFORK | PTRACE_POSIX_SPAWN? + events.pe_set_event |= PTRACE_LWP_CREATE | PTRACE_LWP_EXIT; + status = PtraceWrapper(PT_SET_EVENT_MASK, GetID(), &events, sizeof(events)); + if (status.Fail()) + return status; + + return ReinitializeThreads(); +} + Status NativeProcessNetBSD::ReinitializeThreads() { // Clear old threads m_threads.clear(); diff --git a/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.h b/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.h index cd98a05fc459..bf35a6a23b9a 100644 --- a/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.h +++ b/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.h @@ -107,6 +107,7 @@ class NativeProcessNetBSD : public NativeProcessELF { void SigchldHandler(); Status Attach(); + Status SetupTrace(); Status ReinitializeThreads(); }; diff --git a/lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD.h b/lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD.h index 25b86c06f0d0..08490aad9e0b 100644 --- a/lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD.h +++ b/lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD.h @@ -29,7 +29,7 @@ class NativeRegisterContextNetBSD static NativeRegisterContextNetBSD * CreateHostNativeRegisterContextNetBSD(const ArchSpec &target_arch, NativeThreadProtocol &native_thread); - virtual Status + virtual llvm::Error CopyHardwareWatchpointsFrom(NativeRegisterContextNetBSD &source) = 0; protected: diff --git a/lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.cpp b/lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.cpp index f4bbaa4505e1..a2e896fbd002 100644 --- a/lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.cpp +++ b/lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.cpp @@ -1087,19 +1087,19 @@ int NativeRegisterContextNetBSD_x86_64::GetDR(int num) const { } } -Status NativeRegisterContextNetBSD_x86_64::CopyHardwareWatchpointsFrom( +llvm::Error NativeRegisterContextNetBSD_x86_64::CopyHardwareWatchpointsFrom( NativeRegisterContextNetBSD &source) { auto &r_source = static_cast<NativeRegisterContextNetBSD_x86_64&>(source); Status res = r_source.ReadRegisterSet(DBRegSet); if (!res.Fail()) { // copy dbregs only if any watchpoints were set if ((r_source.m_dbr.dr[7] & 0xFF) == 0) - return res; + return llvm::Error::success(); m_dbr = r_source.m_dbr; res = WriteRegisterSet(DBRegSet); } - return res; + return res.ToError(); } #endif // defined(__x86_64__) diff --git a/lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.h b/lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.h index e7fbeec97538..38edfa400c65 100644 --- a/lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.h +++ b/lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.h @@ -48,7 +48,7 @@ class NativeRegisterContextNetBSD_x86_64 Status WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override; - Status + llvm::Error CopyHardwareWatchpointsFrom(NativeRegisterContextNetBSD &source) override; private: diff --git a/lldb/source/Plugins/Process/NetBSD/NativeThreadNetBSD.cpp b/lldb/source/Plugins/Process/NetBSD/NativeThreadNetBSD.cpp index fe76fb40e0b3..1a3fd4d646ae 100644 --- a/lldb/source/Plugins/Process/NetBSD/NativeThreadNetBSD.cpp +++ b/lldb/source/Plugins/Process/NetBSD/NativeThreadNetBSD.cpp @@ -116,8 +116,6 @@ void NativeThreadNetBSD::SetStoppedByExec() { } void NativeThreadNetBSD::SetStoppedByWatchpoint(uint32_t wp_index) { - SetStopped(); - lldbassert(wp_index != LLDB_INVALID_INDEX32 && "wp_index cannot be invalid"); std::ostringstream ostr; @@ -126,8 +124,8 @@ void NativeThreadNetBSD::SetStoppedByWatchpoint(uint32_t wp_index) { ostr << " " << GetRegisterContext().GetWatchpointHitAddress(wp_index); + SetStopped(); m_stop_description = ostr.str(); - m_stop_info.reason = StopReason::eStopReasonWatchpoint; m_stop_info.details.signal.signo = SIGTRAP; } @@ -204,7 +202,6 @@ lldb::StateType NativeThreadNetBSD::GetState() { return m_state; } bool NativeThreadNetBSD::GetStopReason(ThreadStopInfo &stop_info, std::string &description) { Log *log(ProcessPOSIXLog::GetLogIfAllCategoriesSet(POSIX_LOG_THREAD)); - description.clear(); switch (m_state) { @@ -239,14 +236,14 @@ NativeRegisterContextNetBSD &NativeThreadNetBSD::GetRegisterContext() { Status NativeThreadNetBSD::SetWatchpoint(lldb::addr_t addr, size_t size, uint32_t watch_flags, bool hardware) { + assert(m_state == eStateStopped); if (!hardware) return Status("not implemented"); - if (m_state == eStateLaunching) - return Status(); Status error = RemoveWatchpoint(addr); if (error.Fail()) return error; - uint32_t wp_index = GetRegisterContext().SetHardwareWatchpoint(addr, size, watch_flags); + uint32_t wp_index = + GetRegisterContext().SetHardwareWatchpoint(addr, size, watch_flags); if (wp_index == LLDB_INVALID_INDEX32) return Status("Setting hardware watchpoint failed."); m_watchpoint_index_map.insert({addr, wp_index}); @@ -266,9 +263,7 @@ Status NativeThreadNetBSD::RemoveWatchpoint(lldb::addr_t addr) { Status NativeThreadNetBSD::SetHardwareBreakpoint(lldb::addr_t addr, size_t size) { - if (m_state == eStateLaunching) - return Status(); - + assert(m_state == eStateStopped); Status error = RemoveHardwareBreakpoint(addr); if (error.Fail()) return error; @@ -296,10 +291,11 @@ Status NativeThreadNetBSD::RemoveHardwareBreakpoint(lldb::addr_t addr) { return Status("Clearing hardware breakpoint failed."); } -Status NativeThreadNetBSD::CopyWatchpointsFrom(NativeThreadNetBSD &source) { - Status s = GetRegisterContext().CopyHardwareWatchpointsFrom( +llvm::Error +NativeThreadNetBSD::CopyWatchpointsFrom(NativeThreadNetBSD &source) { + llvm::Error s = GetRegisterContext().CopyHardwareWatchpointsFrom( source.GetRegisterContext()); - if (!s.Fail()) { + if (!s) { m_watchpoint_index_map = source.m_watchpoint_index_map; m_hw_break_index_map = source.m_hw_break_index_map; } diff --git a/lldb/source/Plugins/Process/NetBSD/NativeThreadNetBSD.h b/lldb/source/Plugins/Process/NetBSD/NativeThreadNetBSD.h index 89b61ef86722..d4e21bd2bdaa 100644 --- a/lldb/source/Plugins/Process/NetBSD/NativeThreadNetBSD.h +++ b/lldb/source/Plugins/Process/NetBSD/NativeThreadNetBSD.h @@ -64,7 +64,7 @@ class NativeThreadNetBSD : public NativeThreadProtocol { void SetRunning(); void SetStepping(); - Status CopyWatchpointsFrom(NativeThreadNetBSD& source); + llvm::Error CopyWatchpointsFrom(NativeThreadNetBSD& source); // Member Variables lldb::StateType m_state; diff --git a/lldb/test/API/commands/process/attach/TestProcessAttach.py b/lldb/test/API/commands/process/attach/TestProcessAttach.py index 4e61675c6fc5..5dfec5c76339 100644 --- a/lldb/test/API/commands/process/attach/TestProcessAttach.py +++ b/lldb/test/API/commands/process/attach/TestProcessAttach.py @@ -21,7 +21,6 @@ class ProcessAttachTestCase(TestBase): NO_DEBUG_INFO_TESTCASE = True @skipIfiOSSimulator - @expectedFailureNetBSD def test_attach_to_process_by_id(self): """Test attach by process id""" self.build() @@ -37,7 +36,6 @@ def test_attach_to_process_by_id(self): process = target.GetProcess() self.assertTrue(process, PROCESS_IS_VALID) - @expectedFailureNetBSD @skipIfReproducer # FIXME: Unexpected packet during (active) replay def test_attach_to_process_from_ diff erent_dir_by_id(self): """Test attach by process id""" @@ -64,7 +62,6 @@ def test_attach_to_process_from_ diff erent_dir_by_id(self): process = target.GetProcess() self.assertTrue(process, PROCESS_IS_VALID) - @expectedFailureNetBSD def test_attach_to_process_by_name(self): """Test attach by process name""" self.build() diff --git a/lldb/test/API/commands/register/register/register_command/TestRegisters.py b/lldb/test/API/commands/register/register/register_command/TestRegisters.py index 88312544250c..4c326912c89b 100644 --- a/lldb/test/API/commands/register/register/register_command/TestRegisters.py +++ b/lldb/test/API/commands/register/register/register_command/TestRegisters.py @@ -70,7 +70,6 @@ def test_fp_register_write(self): @skipIf(archs=no_match(['amd64', 'i386', 'x86_64'])) @skipIfOutOfTreeDebugserver @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr37995") - @expectedFailureNetBSD def test_fp_special_purpose_register_read(self): """Test commands that read fpu special purpose registers.""" self.build() @@ -116,7 +115,6 @@ def test_convenience_registers(self): @skipIfiOSSimulator @skipIf(archs=no_match(['amd64', 'x86_64'])) @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr37683") - @expectedFailureNetBSD def test_convenience_registers_with_process_attach(self): """Test convenience registers after a 'process attach'.""" self.build() @@ -125,7 +123,6 @@ def test_convenience_registers_with_process_attach(self): @skipIfiOSSimulator @skipIf(archs=no_match(['amd64', 'x86_64'])) @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr37683") - @expectedFailureNetBSD def test_convenience_registers_16bit_with_process_attach(self): """Test convenience registers after a 'process attach'.""" self.build() diff --git a/lldb/test/API/functionalities/deleted-executable/TestDeletedExecutable.py b/lldb/test/API/functionalities/deleted-executable/TestDeletedExecutable.py index 0aa9bca73851..4e96102bcda3 100644 --- a/lldb/test/API/functionalities/deleted-executable/TestDeletedExecutable.py +++ b/lldb/test/API/functionalities/deleted-executable/TestDeletedExecutable.py @@ -16,7 +16,7 @@ class TestDeletedExecutable(TestBase): NO_DEBUG_INFO_TESTCASE = True @skipIfWindows # cannot delete a running executable - @expectedFailureAll(oslist=["freebsd", "linux", "netbsd"], + @expectedFailureAll(oslist=["freebsd", "linux"], triple=no_match('aarch64-.*-android')) # determining the architecture of the process fails @skipIfReproducer # File synchronization is not supported during replay. diff --git a/lldb/test/API/functionalities/thread/num_threads/TestNumThreads.py b/lldb/test/API/functionalities/thread/num_threads/TestNumThreads.py index 7a4a6d05d3f2..ad476adeb718 100644 --- a/lldb/test/API/functionalities/thread/num_threads/TestNumThreads.py +++ b/lldb/test/API/functionalities/thread/num_threads/TestNumThreads.py @@ -62,7 +62,6 @@ def test_number_of_threads(self): @skipIfDarwin # rdar://33462362 @skipIfWindows # This is flakey on Windows: llvm.org/pr37658, llvm.org/pr38373 - @expectedFailureNetBSD def test_unique_stacks(self): """Test backtrace unique with multiple threads executing the same stack.""" self.build() diff --git a/lldb/test/API/python_api/hello_world/TestHelloWorld.py b/lldb/test/API/python_api/hello_world/TestHelloWorld.py index d52b0087a8e6..ea8b9a7e081a 100644 --- a/lldb/test/API/python_api/hello_world/TestHelloWorld.py +++ b/lldb/test/API/python_api/hello_world/TestHelloWorld.py @@ -74,7 +74,6 @@ def test_with_process_launch_api(self): @add_test_categories(['pyapi']) @skipIfiOSSimulator - @expectedFailureNetBSD @skipIfReproducer # File synchronization is not supported during replay. def test_with_attach_to_process_with_id_api(self): """Create target, spawn a process, and attach to it with process id.""" @@ -108,7 +107,6 @@ def test_with_attach_to_process_with_id_api(self): @add_test_categories(['pyapi']) @skipIfiOSSimulator @skipIfAsan # FIXME: Hangs indefinitely. - @expectedFailureNetBSD @skipIfReproducer # FIXME: Unexpected packet during (active) replay def test_with_attach_to_process_with_name_api(self): """Create target, spawn a process, and attach to it with process name.""" diff --git a/lldb/test/API/tools/lldb-server/TestGdbRemoteAttach.py b/lldb/test/API/tools/lldb-server/TestGdbRemoteAttach.py index dbb83d634806..c81944f547b2 100644 --- a/lldb/test/API/tools/lldb-server/TestGdbRemoteAttach.py +++ b/lldb/test/API/tools/lldb-server/TestGdbRemoteAttach.py @@ -58,7 +58,6 @@ def test_attach_with_vAttach_debugserver(self): self.set_inferior_startup_attach_manually() self.attach_with_vAttach() - @expectedFailureNetBSD @llgs_test def test_attach_with_vAttach_llgs(self): self.init_llgs_test() diff --git a/lldb/test/API/tools/lldb-server/TestGdbRemoteKill.py b/lldb/test/API/tools/lldb-server/TestGdbRemoteKill.py index bab02e7cfc1d..038ef1a21e0b 100644 --- a/lldb/test/API/tools/lldb-server/TestGdbRemoteKill.py +++ b/lldb/test/API/tools/lldb-server/TestGdbRemoteKill.py @@ -51,7 +51,6 @@ def test_attach_commandline_kill_after_initial_stop_debugserver(self): self.set_inferior_startup_attach() self.attach_commandline_kill_after_initial_stop() - @expectedFailureNetBSD @llgs_test def test_attach_commandline_kill_after_initial_stop_llgs(self): self.init_llgs_test() diff --git a/lldb/test/API/tools/lldb-server/TestGdbRemoteProcessInfo.py b/lldb/test/API/tools/lldb-server/TestGdbRemoteProcessInfo.py index 5ee32a5d18cc..3bfe212cc351 100644 --- a/lldb/test/API/tools/lldb-server/TestGdbRemoteProcessInfo.py +++ b/lldb/test/API/tools/lldb-server/TestGdbRemoteProcessInfo.py @@ -74,7 +74,6 @@ def test_attach_commandline_qProcessInfo_reports_correct_pid_debugserver( self.set_inferior_startup_attach() self.attach_commandline_qProcessInfo_reports_correct_pid() - @expectedFailureNetBSD @llgs_test def test_attach_commandline_qProcessInfo_reports_correct_pid_llgs(self): self.init_llgs_test() diff --git a/lldb/test/API/tools/lldb-server/TestLldbGdbServer.py b/lldb/test/API/tools/lldb-server/TestLldbGdbServer.py index b1077879841f..13fe9c3c0398 100644 --- a/lldb/test/API/tools/lldb-server/TestLldbGdbServer.py +++ b/lldb/test/API/tools/lldb-server/TestLldbGdbServer.py @@ -227,7 +227,6 @@ def test_attach_commandline_continue_app_exits_debugserver(self): self.set_inferior_startup_attach() self.attach_commandline_continue_app_exits() - @expectedFailureNetBSD @llgs_test def test_attach_commandline_continue_app_exits_llgs(self): self.init_llgs_test() @@ -480,7 +479,6 @@ def test_qThreadInfo_contains_thread_attach_debugserver(self): self.qThreadInfo_contains_thread() @expectedFailureAll(oslist=["windows"]) # expect one more thread stopped - @expectedFailureNetBSD @llgs_test def test_qThreadInfo_contains_thread_attach_llgs(self): self.init_llgs_test() @@ -540,7 +538,6 @@ def test_qThreadInfo_matches_qC_attach_debugserver(self): self.qThreadInfo_matches_qC() @expectedFailureAll(oslist=["windows"]) # expect one more thread stopped - @expectedFailureNetBSD @llgs_test def test_qThreadInfo_matches_qC_attach_llgs(self): self.init_llgs_test() @@ -688,7 +685,6 @@ def test_Hg_switches_to_3_threads_attach_debugserver(self): self.Hg_switches_to_3_threads() @expectedFailureAll(oslist=["windows"]) # expecting one more thread - @expectedFailureNetBSD @llgs_test def test_Hg_switches_to_3_threads_attach_llgs(self): self.init_llgs_test() _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits