[Lldb-commits] [lldb] r216564 - NativeThreadLinux: remove translation of some Linux signals to gdb signals.

Todd Fiala todd.fiala at gmail.com
Wed Aug 27 10:11:56 PDT 2014


Author: tfiala
Date: Wed Aug 27 12:11:56 2014
New Revision: 216564

URL: http://llvm.org/viewvc/llvm-project?rev=216564&view=rev
Log:
NativeThreadLinux: remove translation of some Linux signals to gdb signals.

I copied this originally based on what debugserver was doing.  This appears to
be incorrect and unncessary for Linux.  The LinuxSignals on the lldb side
don't look for these and therefore they get handled incorrectly.

Leaving the hook in place since I think darwin will continue to need to
translate those signal numbers.

Modified:
    lldb/trunk/source/Plugins/Process/Linux/NativeThreadLinux.cpp

Modified: lldb/trunk/source/Plugins/Process/Linux/NativeThreadLinux.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/NativeThreadLinux.cpp?rev=216564&r1=216563&r2=216564&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/Linux/NativeThreadLinux.cpp (original)
+++ lldb/trunk/source/Plugins/Process/Linux/NativeThreadLinux.cpp Wed Aug 27 12:11:56 2014
@@ -96,7 +96,6 @@ NativeThreadLinux::GetStopReason (Thread
     case eStateRunning:
     case eStateStepping:
     case eStateDetached:
-    default:
         if (log)
         {
             log->Printf ("NativeThreadLinux::%s tid %" PRIu64 " in state %s cannot answer stop reason",
@@ -324,39 +323,28 @@ NativeThreadLinux::MaybeLogStateChange (
     log->Printf ("NativeThreadLinux: thread (pid=%" PRIu64 ", tid=%" PRIu64 ") changing from state %s to %s", pid, GetID (), StateAsCString (old_state), StateAsCString (new_state));
 }
 
-static
-uint32_t MaybeTranslateHostSignoToGdbSigno (uint32_t host_signo)
-{
-    switch (host_signo)
-    {
-        case SIGSEGV: return eGdbSignalBadAccess;
-        case SIGILL:  return eGdbSignalBadInstruction;
-        case SIGFPE:  return eGdbSignalArithmetic;
-        // NOTE: debugserver sends SIGTRAP through unmodified.  Do the same here.
-        // case SIGTRAP: return eGdbSignalBreakpoint;
-
-        // Nothing for eGdbSignalSoftware (0x95).
-        // Nothing for eGdbSignalEmulation (0x94).
-
-        default:
-            // No translations.
-            return host_signo;
-    }
-}
-
 uint32_t
 NativeThreadLinux::TranslateStopInfoToGdbSignal (const ThreadStopInfo &stop_info) const
 {
     switch (stop_info.reason)
     {
         case eStopReasonSignal:
-            return MaybeTranslateHostSignoToGdbSigno (stop_info.details.signal.signo);
-            break;
+            // No translation.
+            return stop_info.details.signal.signo;
 
         case eStopReasonException:
-            // FIXME verify how we handle exception type.
-            return MaybeTranslateHostSignoToGdbSigno (static_cast<uint32_t> (stop_info.details.exception.type));
-            break;
+            {
+                Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_THREAD));
+                // FIXME I think the eStopReasonException is a xnu/Mach exception, which we
+                // shouldn't see on Linux.
+                // No translation.
+                if (log)
+                    log->Printf ("NativeThreadLinux::%s saw an exception stop type (signo %"
+                                 PRIu64 "), not expecting to see exceptions on Linux",
+                                 __FUNCTION__,
+                                 stop_info.details.exception.type);
+                return static_cast<uint32_t> (stop_info.details.exception.type);
+            }
 
         default:
             assert (0 && "unexpected stop_info.reason found");





More information about the lldb-commits mailing list