aboutsummaryrefslogtreecommitdiff
path: root/src/processor/minidump.cc
diff options
context:
space:
mode:
authorted.mielczarek@gmail.com <ted.mielczarek@gmail.com@4c0a9323-5329-0410-9bdc-e9ce6186880e>2012-09-17 14:01:28 +0000
committerted.mielczarek@gmail.com <ted.mielczarek@gmail.com@4c0a9323-5329-0410-9bdc-e9ce6186880e>2012-09-17 14:01:28 +0000
commit52935b4e812f413beaf294b24e5677c0324f98b6 (patch)
tree69bafaa55473940b8568f001ea068fde445a5452 /src/processor/minidump.cc
parentMake my_str_len/my_itos take uintmax_t (diff)
downloadbreakpad-52935b4e812f413beaf294b24e5677c0324f98b6.tar.xz
Add a GetInstructionPointer method to MinidumpException
R=mark at https://breakpad.appspot.com/444003/ git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1039 4c0a9323-5329-0410-9bdc-e9ce6186880e
Diffstat (limited to 'src/processor/minidump.cc')
-rw-r--r--src/processor/minidump.cc35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/processor/minidump.cc b/src/processor/minidump.cc
index d88101f6..19ba0354 100644
--- a/src/processor/minidump.cc
+++ b/src/processor/minidump.cc
@@ -714,6 +714,41 @@ u_int32_t MinidumpContext::GetContextCPU() const {
return context_flags_ & MD_CONTEXT_CPU_MASK;
}
+bool MinidumpContext::GetInstructionPointer(u_int64_t* ip) const {
+ BPLOG_IF(ERROR, !ip) << "MinidumpContext::GetInstructionPointer "
+ "requires |ip|";
+ assert(ip);
+ *ip = 0;
+
+ if (!valid_) {
+ BPLOG(ERROR) << "Invalid MinidumpContext for GetInstructionPointer";
+ return false;
+ }
+
+ switch (context_flags_ & MD_CONTEXT_CPU_MASK) {
+ case MD_CONTEXT_AMD64:
+ *ip = context_.amd64->rip;
+ break;
+ case MD_CONTEXT_ARM:
+ *ip = context_.arm->iregs[MD_CONTEXT_ARM_REG_PC];
+ break;
+ case MD_CONTEXT_PPC:
+ *ip = context_.ppc->srr0;
+ break;
+ case MD_CONTEXT_SPARC:
+ *ip = context_.ctx_sparc->pc;
+ break;
+ case MD_CONTEXT_X86:
+ *ip = context_.x86->eip;
+ break;
+ default:
+ // This should never happen.
+ BPLOG(ERROR) << "Unknown CPU architecture in GetInstructionPointer";
+ return false;
+ }
+ return true;
+}
+
const MDRawContextX86* MinidumpContext::GetContextX86() const {
if (GetContextCPU() != MD_CONTEXT_X86) {