karnajitw updated this revision to Diff 110438.
karnajitw added a comment.
Herald added a subscriber: krytarowski.

Updated the diff to include the changes that were required in the test part. 
Please verify.


Repository:
  rL LLVM

https://reviews.llvm.org/D35223

Files:
  
packages/Python/lldbsuite/test/functionalities/inferior-crashing/TestInferiorCrashing.py
  
packages/Python/lldbsuite/test/functionalities/inferior-crashing/recursive-inferior/TestRecursiveInferior.py
  
packages/Python/lldbsuite/test/functionalities/signal/handle-segv/TestHandleSegv.py
  source/Plugins/Process/FreeBSD/FreeBSDThread.cpp
  source/Plugins/Process/FreeBSD/POSIXStopInfo.cpp
  source/Plugins/Process/FreeBSD/POSIXStopInfo.h
  source/Plugins/Process/FreeBSD/ProcessMonitor.cpp

Index: source/Plugins/Process/FreeBSD/ProcessMonitor.cpp
===================================================================
--- source/Plugins/Process/FreeBSD/ProcessMonitor.cpp
+++ source/Plugins/Process/FreeBSD/ProcessMonitor.cpp
@@ -1204,7 +1204,9 @@
   case SIGBUS:
     lldb::addr_t fault_addr = reinterpret_cast<lldb::addr_t>(info->si_addr);
     const auto reason = GetCrashReason(*info);
-    return ProcessMessage::Crash(tid, reason, signo, fault_addr);
+    if (reason != CrashReason::eInvalidCrashReason) {
+      return ProcessMessage::Crash(tid, reason, signo, fault_addr);
+    } // else; Use atleast si_signo info for other si_code
   }

   // Everything else is "normal" and does not require any special action on
Index: source/Plugins/Process/FreeBSD/POSIXStopInfo.h
===================================================================
--- source/Plugins/Process/FreeBSD/POSIXStopInfo.h
+++ source/Plugins/Process/FreeBSD/POSIXStopInfo.h
@@ -45,19 +45,6 @@
 };

 //===----------------------------------------------------------------------===//
-/// @class POSIXCrashStopInfo
-/// @brief Represents the stop state of process that is ready to crash.
-///
-class POSIXCrashStopInfo : public POSIXStopInfo {
-public:
-  POSIXCrashStopInfo(FreeBSDThread &thread, uint32_t status, CrashReason reason,
-                     lldb::addr_t fault_addr);
-  ~POSIXCrashStopInfo();
-
-  lldb::StopReason GetStopReason() const;
-};
-
-//===----------------------------------------------------------------------===//
 /// @class POSIXNewThreadStopInfo
 /// @brief Represents the stop state of process when a new thread is spawned.
 ///
Index: source/Plugins/Process/FreeBSD/POSIXStopInfo.cpp
===================================================================
--- source/Plugins/Process/FreeBSD/POSIXStopInfo.cpp
+++ source/Plugins/Process/FreeBSD/POSIXStopInfo.cpp
@@ -28,22 +28,6 @@
 bool POSIXLimboStopInfo::ShouldNotify(Event *event_ptr) { return false; }

 //===----------------------------------------------------------------------===//
-// POSIXCrashStopInfo
-
-POSIXCrashStopInfo::POSIXCrashStopInfo(FreeBSDThread &thread, uint32_t status,
-                                       CrashReason reason,
-                                       lldb::addr_t fault_addr)
-    : POSIXStopInfo(thread, status) {
-  m_description = ::GetCrashReasonString(reason, fault_addr);
-}
-
-POSIXCrashStopInfo::~POSIXCrashStopInfo() {}
-
-lldb::StopReason POSIXCrashStopInfo::GetStopReason() const {
-  return lldb::eStopReasonException;
-}
-
-//===----------------------------------------------------------------------===//
 // POSIXNewThreadStopInfo

 POSIXNewThreadStopInfo::~POSIXNewThreadStopInfo() {}
Index: source/Plugins/Process/FreeBSD/FreeBSDThread.cpp
===================================================================
--- source/Plugins/Process/FreeBSD/FreeBSDThread.cpp
+++ source/Plugins/Process/FreeBSD/FreeBSDThread.cpp
@@ -375,6 +375,7 @@
     LimboNotify(message);
     break;

+  case ProcessMessage::eCrashMessage:
   case ProcessMessage::eSignalMessage:
     SignalNotify(message);
     break;
@@ -395,10 +396,6 @@
     WatchNotify(message);
     break;

-  case ProcessMessage::eCrashMessage:
-    CrashNotify(message);
-    break;
-
   case ProcessMessage::eExecMessage:
     ExecNotify(message);
     break;
@@ -577,7 +574,14 @@

 void FreeBSDThread::SignalNotify(const ProcessMessage &message) {
   int signo = message.GetSignal();
-  SetStopInfo(StopInfo::CreateStopReasonWithSignal(*this, signo));
+  if (message.GetKind() == ProcessMessage::eCrashMessage) {
+    std::string stop_description = GetCrashReasonString(
+        message.GetCrashReason(), message.GetFaultAddress());
+    SetStopInfo(StopInfo::CreateStopReasonWithSignal(
+        *this, signo, stop_description.c_str()));
+  } else {
+    SetStopInfo(StopInfo::CreateStopReasonWithSignal(*this, signo));
+  }
 }

 void FreeBSDThread::SignalDeliveredNotify(const ProcessMessage &message) {
@@ -585,21 +589,6 @@
   SetStopInfo(StopInfo::CreateStopReasonWithSignal(*this, signo));
 }

-void FreeBSDThread::CrashNotify(const ProcessMessage &message) {
-  // FIXME: Update stop reason as per bugzilla 14598
-  int signo = message.GetSignal();
-
-  assert(message.GetKind() == ProcessMessage::eCrashMessage);
-
-  Log *log(ProcessPOSIXLog::GetLogIfAllCategoriesSet(POSIX_LOG_THREAD));
-  if (log)
-    log->Printf("FreeBSDThread::%s () signo = %i, reason = '%s'", __FUNCTION__,
-                signo, message.PrintCrashReason());
-
-  SetStopInfo(lldb::StopInfoSP(new POSIXCrashStopInfo(
-      *this, signo, message.GetCrashReason(), message.GetFaultAddress())));
-}
-
 unsigned FreeBSDThread::GetRegisterIndexFromOffset(unsigned offset) {
   unsigned reg = LLDB_INVALID_REGNUM;
   ArchSpec arch = HostInfo::GetArchitecture();
Index: packages/Python/lldbsuite/test/functionalities/signal/handle-segv/TestHandleSegv.py
===================================================================
--- packages/Python/lldbsuite/test/functionalities/signal/handle-segv/TestHandleSegv.py
+++ packages/Python/lldbsuite/test/functionalities/signal/handle-segv/TestHandleSegv.py
@@ -18,9 +18,6 @@

     @skipIfWindows  # signals do not exist on Windows
     @skipIfDarwin
-    @expectedFailureAll(
-        oslist=['freebsd'],
-        bugnumber="llvm.org/pr23699 SIGSEGV is reported as exception, not signal")
     def test_inferior_handle_sigsegv(self):
         self.build()
         exe = os.path.join(os.getcwd(), "a.out")
Index: packages/Python/lldbsuite/test/functionalities/inferior-crashing/recursive-inferior/TestRecursiveInferior.py
===================================================================
--- packages/Python/lldbsuite/test/functionalities/inferior-crashing/recursive-inferior/TestRecursiveInferior.py
+++ packages/Python/lldbsuite/test/functionalities/inferior-crashing/recursive-inferior/TestRecursiveInferior.py
@@ -16,9 +16,6 @@

     mydir = TestBase.compute_mydir(__file__)

-    @expectedFailureAll(
-        oslist=['freebsd'],
-        bugnumber="llvm.org/pr23699 SIGSEGV is reported as exception, not signal")
     @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24778")
     def test_recursive_inferior_crashing(self):
         """Test that lldb reliably catches the inferior crashing (command)."""
@@ -50,7 +47,6 @@
         self.build()
         self.recursive_inferior_crashing_step()

-    @expectedFailureAll(oslist=['freebsd'], bugnumber='llvm.org/pr24939')
     @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24778")
     @skipIfTargetAndroid()  # debuggerd interferes with this test on Android
     def test_recursive_inferior_crashing_step_after_break(self):
@@ -61,6 +57,7 @@
     # Inferior exits after stepping after a segfault. This is working as
     # intended IMHO.
     @skipIfLinux
+    @skipIfFreeBSD
     @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24778")
     def test_recursive_inferior_crashing_expr_step_and_expr(self):
         """Test that lldb expressions work before and after stepping after a crash."""
@@ -94,7 +91,7 @@
         # The exact stop reason depends on the platform
         if self.platformIsDarwin():
             stop_reason = 'stop reason = EXC_BAD_ACCESS'
-        elif self.getPlatform() == "linux":
+        elif self.getPlatform() == "linux" or self.getPlatform() == "freebsd":
             stop_reason = 'stop reason = signal SIGSEGV'
         else:
             stop_reason = 'stop reason = invalid address'
Index: packages/Python/lldbsuite/test/functionalities/inferior-crashing/TestInferiorCrashing.py
===================================================================
--- packages/Python/lldbsuite/test/functionalities/inferior-crashing/TestInferiorCrashing.py
+++ packages/Python/lldbsuite/test/functionalities/inferior-crashing/TestInferiorCrashing.py
@@ -17,9 +17,6 @@
     mydir = TestBase.compute_mydir(__file__)

     @expectedFailureAll(
-        oslist=['freebsd'],
-        bugnumber="llvm.org/pr23699 SIGSEGV is reported as exception, not signal")
-    @expectedFailureAll(
         oslist=["windows"],
         bugnumber="llvm.org/pr24778, This actually works, but the test relies on the output format instead of the API")
     def test_inferior_crashing(self):
@@ -60,7 +57,6 @@
         self.build()
         self.inferior_crashing_step()

-    @expectedFailureAll(oslist=['freebsd'], bugnumber='llvm.org/pr24939')
     @expectedFailureAll(
         oslist=["windows"],
         bugnumber="llvm.org/pr24778, This actually works, but the test relies on the output format instead of the API")
@@ -76,6 +72,7 @@
     # Inferior exits after stepping after a segfault. This is working as
     # intended IMHO.
     @skipIfLinux
+    @skipIfFreeBSD
     def test_inferior_crashing_expr_step_and_expr(self):
         """Test that lldb expressions work before and after stepping after a crash."""
         self.build()
@@ -110,7 +107,7 @@
         # The exact stop reason depends on the platform
         if self.platformIsDarwin():
             stop_reason = 'stop reason = EXC_BAD_ACCESS'
-        elif self.getPlatform() == "linux":
+        elif self.getPlatform() == "linux" or self.getPlatform() == "freebsd":
             stop_reason = 'stop reason = signal SIGSEGV'
         else:
             stop_reason = 'stop reason = invalid address'
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to