nitesh.jain retitled this revision from "[LLDB][MIPS] To handle SI_KERENEL 
generated for invalid 64 bit address" to "[LLDB][MIPS] To handle SI_KERNEL 
generated for invalid 64 bit address".
nitesh.jain updated the summary for this revision.
nitesh.jain updated this revision to Diff 30678.
nitesh.jain added a comment.

This patch handle checking for SI_KERNEL in NativeThreadLinux.cpp.


Repository:
  rL LLVM

http://reviews.llvm.org/D11176

Files:
  source/Plugins/Process/Linux/NativeThreadLinux.cpp

Index: source/Plugins/Process/Linux/NativeThreadLinux.cpp
===================================================================
--- source/Plugins/Process/Linux/NativeThreadLinux.cpp
+++ source/Plugins/Process/Linux/NativeThreadLinux.cpp
@@ -256,17 +256,27 @@
     m_stop_info.details.signal.signo = signo;
 
     m_stop_description.clear();
-    switch (signo)
+    if (info)
     {
-    case SIGSEGV:
-    case SIGBUS:
-    case SIGFPE:
-    case SIGILL:
-        if (! info)
-            break;
-        const auto reason = GetCrashReason(*info);
-        m_stop_description = GetCrashReasonString(reason, 
reinterpret_cast<uintptr_t>(info->si_addr));
-        break;
+        switch (signo)
+        {
+        case SIGSEGV:
+        case SIGBUS:
+        case SIGFPE:
+        case SIGILL:
+             //In case of MIPS64 target, SI_KERENEL is generated for invalid 
64bit address.
+             if (info->si_signo == SIGBUS && info->si_code == SI_KERNEL)
+             {
+                 m_stop_description = GetCrashReasonString((const 
CrashReason)CrashReason::eInvalidAddress, 
+                                                            
reinterpret_cast<uintptr_t>(info->si_addr));
+             }
+             else
+             {  
+                const auto reason = GetCrashReason(*info);
+                m_stop_description = GetCrashReasonString(reason, 
reinterpret_cast<uintptr_t>(info->si_addr));
+             }
+             break;
+        }
     }
 }
 


Index: source/Plugins/Process/Linux/NativeThreadLinux.cpp
===================================================================
--- source/Plugins/Process/Linux/NativeThreadLinux.cpp
+++ source/Plugins/Process/Linux/NativeThreadLinux.cpp
@@ -256,17 +256,27 @@
     m_stop_info.details.signal.signo = signo;
 
     m_stop_description.clear();
-    switch (signo)
+    if (info)
     {
-    case SIGSEGV:
-    case SIGBUS:
-    case SIGFPE:
-    case SIGILL:
-        if (! info)
-            break;
-        const auto reason = GetCrashReason(*info);
-        m_stop_description = GetCrashReasonString(reason, reinterpret_cast<uintptr_t>(info->si_addr));
-        break;
+        switch (signo)
+        {
+        case SIGSEGV:
+        case SIGBUS:
+        case SIGFPE:
+        case SIGILL:
+             //In case of MIPS64 target, SI_KERENEL is generated for invalid 64bit address.
+             if (info->si_signo == SIGBUS && info->si_code == SI_KERNEL)
+             {
+                 m_stop_description = GetCrashReasonString((const CrashReason)CrashReason::eInvalidAddress, 
+                                                            reinterpret_cast<uintptr_t>(info->si_addr));
+             }
+             else
+             {  
+                const auto reason = GetCrashReason(*info);
+                m_stop_description = GetCrashReasonString(reason, reinterpret_cast<uintptr_t>(info->si_addr));
+             }
+             break;
+        }
     }
 }
 
_______________________________________________
lldb-commits mailing list
lldb-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

Reply via email to