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