summaryrefslogtreecommitdiffstats
path: root/lldb
diff options
context:
space:
mode:
Diffstat (limited to 'lldb')
-rw-r--r--lldb/lit/Minidump/Inputs/fb-dump-content.dmpbin0 -> 511 bytes
-rw-r--r--lldb/lit/Minidump/fb-dump.test105
-rw-r--r--lldb/source/Plugins/Process/minidump/MinidumpParser.cpp11
-rw-r--r--lldb/source/Plugins/Process/minidump/MinidumpTypes.h12
-rw-r--r--lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp141
5 files changed, 267 insertions, 2 deletions
diff --git a/lldb/lit/Minidump/Inputs/fb-dump-content.dmp b/lldb/lit/Minidump/Inputs/fb-dump-content.dmp
new file mode 100644
index 00000000000..43aaa24dd6b
--- /dev/null
+++ b/lldb/lit/Minidump/Inputs/fb-dump-content.dmp
Binary files differ
diff --git a/lldb/lit/Minidump/fb-dump.test b/lldb/lit/Minidump/fb-dump.test
new file mode 100644
index 00000000000..3681f8dbbd7
--- /dev/null
+++ b/lldb/lit/Minidump/fb-dump.test
@@ -0,0 +1,105 @@
+# RUN: %lldb -c %p/Inputs/fb-dump-content.dmp \
+# RUN: -o 'process plugin dump --all' | \
+# RUN: FileCheck --check-prefix=CHECK-DIR --check-prefix=CHECK-APPDATA \
+# RUN: --check-prefix=CHECK-BUILD --check-prefix=CHECK-VERSION \
+# RUN: --check-prefix=CHECK-JAVA --check-prefix=CHECK-DALVIK \
+# RUN: --check-prefix=CHECK-UNWIND --check-prefix=CHECK-ERROR \
+# RUN: --check-prefix=CHECK-APPSTATE --check-prefix=CHECK-ABORT \
+# RUN: --check-prefix=CHECK-THREAD --check-prefix=CHECK-LOGCAT %s
+# RUN: %lldb -c %p/Inputs/fb-dump-content.dmp \
+# RUN: -o 'process plugin dump -a' | \
+# RUN: FileCheck --check-prefix=CHECK-DIR --check-prefix=CHECK-APPDATA \
+# RUN: --check-prefix=CHECK-BUILD --check-prefix=CHECK-VERSION \
+# RUN: --check-prefix=CHECK-JAVA --check-prefix=CHECK-DALVIK \
+# RUN: --check-prefix=CHECK-UNWIND --check-prefix=CHECK-ERROR \
+# RUN: --check-prefix=CHECK-APPSTATE --check-prefix=CHECK-ABORT \
+# RUN: --check-prefix=CHECK-THREAD --check-prefix=CHECK-LOGCAT %s
+# RUN: %lldb -c %p/Inputs/fb-dump-content.dmp \
+# RUN: -o 'process plugin dump --facebook' | \
+# RUN: FileCheck --check-prefix=CHECK-APPDATA \
+# RUN: --check-prefix=CHECK-BUILD --check-prefix=CHECK-VERSION \
+# RUN: --check-prefix=CHECK-JAVA --check-prefix=CHECK-DALVIK \
+# RUN: --check-prefix=CHECK-UNWIND --check-prefix=CHECK-ERROR \
+# RUN: --check-prefix=CHECK-APPSTATE --check-prefix=CHECK-ABORT \
+# RUN: --check-prefix=CHECK-THREAD --check-prefix=CHECK-LOGCAT %s
+# RUN: %lldb -c %p/Inputs/fb-dump-content.dmp \
+# RUN: -o 'process plugin dump --fb-app-data' | \
+# RUN: FileCheck --check-prefix=CHECK-APPDATA %s
+# RUN: %lldb -c %p/Inputs/fb-dump-content.dmp \
+# RUN: -o 'process plugin dump --fb-build-id' | \
+# RUN: FileCheck --check-prefix=CHECK-BUILD %s
+# RUN: %lldb -c %p/Inputs/fb-dump-content.dmp \
+# RUN: -o 'process plugin dump --fb-version' | \
+# RUN: FileCheck --check-prefix=CHECK-VERSION %s
+# RUN: %lldb -c %p/Inputs/fb-dump-content.dmp \
+# RUN: -o 'process plugin dump --fb-java-stack' | \
+# RUN: FileCheck --check-prefix=CHECK-JAVA %s
+# RUN: %lldb -c %p/Inputs/fb-dump-content.dmp \
+# RUN: -o 'process plugin dump --fb-dalvik-info' | \
+# RUN: FileCheck --check-prefix=CHECK-DALVIK %s
+# RUN: %lldb -c %p/Inputs/fb-dump-content.dmp \
+# RUN: -o 'process plugin dump --fb-unwind-symbols' | \
+# RUN: FileCheck --check-prefix=CHECK-UNWIND %s
+# RUN: %lldb -c %p/Inputs/fb-dump-content.dmp \
+# RUN: -o 'process plugin dump --fb-error-log' | \
+# RUN: FileCheck --check-prefix=CHECK-ERROR %s
+# RUN: %lldb -c %p/Inputs/fb-dump-content.dmp \
+# RUN: -o 'process plugin dump --fb-app-state-log' | \
+# RUN: FileCheck --check-prefix=CHECK-APPSTATE %s
+# RUN: %lldb -c %p/Inputs/fb-dump-content.dmp \
+# RUN: -o 'process plugin dump --fb-abort-reason' | \
+# RUN: FileCheck --check-prefix=CHECK-ABORT %s
+# RUN: %lldb -c %p/Inputs/fb-dump-content.dmp \
+# RUN: -o 'process plugin dump --fb-thread-name' | \
+# RUN: FileCheck --check-prefix=CHECK-THREAD %s
+# RUN: %lldb -c %p/Inputs/fb-dump-content.dmp \
+# RUN: -o 'process plugin dump --fb-logcat' | \
+# RUN: FileCheck --check-prefix=CHECK-LOGCAT %s
+# CHECK-DIR: RVA SIZE TYPE MinidumpStreamType
+# CHECK-DIR-NEXT: ---------- ---------- ---------- --------------------------
+# CHECK-DIR-NEXT: 0x0000010c 0x00000013 0xfacecb00 FacebookDumpErrorLog
+# CHECK-DIR-NEXT: 0x0000011f 0x00000015 0xfacee000 FacebookThreadName
+# CHECK-DIR-NEXT: 0x0000015b 0x00000016 0xfacedead FacebookAbortReason
+# CHECK-DIR-NEXT: 0x000000bc 0x00000038 0x00000007 SystemInfo
+# CHECK-DIR-NEXT: 0x000001aa 0x00000005 0xfacecafb FacebookBuildID
+# CHECK-DIR-NEXT: 0x000001bc 0x00000019 0xfacecafd FacebookJavaStack
+# CHECK-DIR-NEXT: 0x000001ea 0x00000005 0xfacecaff FacebookUnwindSymbols
+# CHECK-DIR-NEXT: 0x00000171 0x00000039 0xfacecafa FacebookAppCustomData
+# CHECK-DIR-NEXT: 0x00000134 0x00000010 0xface1ca7 FacebookLogcat
+# CHECK-DIR-NEXT: 0x000000f4 0x00000018 0x0000000f MiscInfo
+# CHECK-DIR-NEXT: 0x000001af 0x0000000d 0xfacecafc FacebookAppVersionName
+# CHECK-DIR-NEXT: 0x000001d5 0x00000015 0xfacecafe FacebookDalvikInfo
+# CHECK-DIR-NEXT: 0x00000144 0x00000017 0xfacecccc FacebookAppStateLog
+
+# CHECK-APPDATA: Facebook App Data:
+# CHECK-APPDATA-NEXT: {"global": {"Fingerprint":"invalid device fingerprint"}}
+
+# CHECK-BUILD: Facebook Build ID:
+# CHECK-BUILD-NEXT: 16909060
+
+# CHECK-VERSION: Facebook Version String:
+# CHECK-VERSION-NEXT: 207.0.0.0.86
+
+# CHECK-JAVA: Facebook Java Stack:
+# CHECK-JAVA-NEXT: Facebook java stack info
+
+# CHECK-DALVIK: Facebook Dalvik Info:
+# CHECK-DALVIK-NEXT: Facebook dalvik info
+
+# CHECK-UNWIND: Facebook Unwind Symbols Bytes:
+# CHECK-UNWIND-NEXT: 0x00000000: 11 22 33 44 00
+
+# CHECK-ERROR: Facebook Error Log:
+# CHECK-ERROR-NEXT: Facebook error log
+
+# CHECK-APPSTATE: Faceook Application State Log:
+# CHECK-APPSTATE-NEXT: Facebook app state log
+
+# CHECK-ABORT: Facebook Abort Reason:
+# CHECK-ABORT-NEXT: Facebook abort reason
+
+# CHECK-THREAD: Facebook Thread Name:
+# CHECK-THREAD-NEXT: Facebook thread name
+
+# CHECK-LOGCAT: Facebook Logcat:
+# CHECK-LOGCAT-NEXT: Facebook logcat
diff --git a/lldb/source/Plugins/Process/minidump/MinidumpParser.cpp b/lldb/source/Plugins/Process/minidump/MinidumpParser.cpp
index 8de7f3ae98f..d2f3b87a4ae 100644
--- a/lldb/source/Plugins/Process/minidump/MinidumpParser.cpp
+++ b/lldb/source/Plugins/Process/minidump/MinidumpParser.cpp
@@ -710,6 +710,17 @@ MinidumpParser::GetStreamTypeAsString(uint32_t stream_type) {
ENUM_TO_CSTR(LinuxProcStat);
ENUM_TO_CSTR(LinuxProcUptime);
ENUM_TO_CSTR(LinuxProcFD);
+ ENUM_TO_CSTR(FacebookAppCustomData);
+ ENUM_TO_CSTR(FacebookBuildID);
+ ENUM_TO_CSTR(FacebookAppVersionName);
+ ENUM_TO_CSTR(FacebookJavaStack);
+ ENUM_TO_CSTR(FacebookDalvikInfo);
+ ENUM_TO_CSTR(FacebookUnwindSymbols);
+ ENUM_TO_CSTR(FacebookDumpErrorLog);
+ ENUM_TO_CSTR(FacebookAppStateLog);
+ ENUM_TO_CSTR(FacebookAbortReason);
+ ENUM_TO_CSTR(FacebookThreadName);
+ ENUM_TO_CSTR(FacebookLogcat);
}
return "unknown stream type";
}
diff --git a/lldb/source/Plugins/Process/minidump/MinidumpTypes.h b/lldb/source/Plugins/Process/minidump/MinidumpTypes.h
index b20f50cadd6..47197a31a56 100644
--- a/lldb/source/Plugins/Process/minidump/MinidumpTypes.h
+++ b/lldb/source/Plugins/Process/minidump/MinidumpTypes.h
@@ -99,6 +99,18 @@ enum class MinidumpStreamType : uint32_t {
LinuxProcStat = 0x4767000B, /* /proc/$x/stat */
LinuxProcUptime = 0x4767000C, /* uptime */
LinuxProcFD = 0x4767000D, /* /proc/$x/fb */
+ FacebookAppCustomData = 0xFACECAFA,
+ FacebookBuildID = 0xFACECAFB,
+ FacebookAppVersionName = 0xFACECAFC,
+ FacebookJavaStack = 0xFACECAFD,
+ FacebookDalvikInfo = 0xFACECAFE,
+ FacebookUnwindSymbols = 0xFACECAFF,
+ FacebookDumpErrorLog = 0xFACECB00,
+ FacebookAppStateLog = 0xFACECCCC,
+ FacebookAbortReason = 0xFACEDEAD,
+ FacebookThreadName = 0xFACEE000,
+ FacebookLogcat = 0xFACE1CA7,
+
};
// for MinidumpSystemInfo.processor_arch
diff --git a/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp b/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp
index c702d843809..c17001634f1 100644
--- a/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp
+++ b/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp
@@ -436,10 +436,23 @@ private:
OptionGroupBoolean m_dump_linux_proc_uptime;
OptionGroupBoolean m_dump_linux_proc_fd;
OptionGroupBoolean m_dump_linux_all;
+ OptionGroupBoolean m_fb_app_data;
+ OptionGroupBoolean m_fb_build_id;
+ OptionGroupBoolean m_fb_version;
+ OptionGroupBoolean m_fb_java_stack;
+ OptionGroupBoolean m_fb_dalvik;
+ OptionGroupBoolean m_fb_unwind;
+ OptionGroupBoolean m_fb_error_log;
+ OptionGroupBoolean m_fb_app_state;
+ OptionGroupBoolean m_fb_abort;
+ OptionGroupBoolean m_fb_thread;
+ OptionGroupBoolean m_fb_logcat;
+ OptionGroupBoolean m_fb_all;
void SetDefaultOptionsIfNoneAreSet() {
if (m_dump_all.GetOptionValue().GetCurrentValue() ||
m_dump_linux_all.GetOptionValue().GetCurrentValue() ||
+ m_fb_all.GetOptionValue().GetCurrentValue() ||
m_dump_directory.GetOptionValue().GetCurrentValue() ||
m_dump_linux_cpuinfo.GetOptionValue().GetCurrentValue() ||
m_dump_linux_proc_status.GetOptionValue().GetCurrentValue() ||
@@ -450,7 +463,18 @@ private:
m_dump_linux_maps.GetOptionValue().GetCurrentValue() ||
m_dump_linux_proc_stat.GetOptionValue().GetCurrentValue() ||
m_dump_linux_proc_uptime.GetOptionValue().GetCurrentValue() ||
- m_dump_linux_proc_fd.GetOptionValue().GetCurrentValue())
+ m_dump_linux_proc_fd.GetOptionValue().GetCurrentValue() ||
+ m_fb_app_data.GetOptionValue().GetCurrentValue() ||
+ m_fb_build_id.GetOptionValue().GetCurrentValue() ||
+ m_fb_version.GetOptionValue().GetCurrentValue() ||
+ m_fb_java_stack.GetOptionValue().GetCurrentValue() ||
+ m_fb_dalvik.GetOptionValue().GetCurrentValue() ||
+ m_fb_unwind.GetOptionValue().GetCurrentValue() ||
+ m_fb_error_log.GetOptionValue().GetCurrentValue() ||
+ m_fb_app_state.GetOptionValue().GetCurrentValue() ||
+ m_fb_abort.GetOptionValue().GetCurrentValue() ||
+ m_fb_thread.GetOptionValue().GetCurrentValue() ||
+ m_fb_logcat.GetOptionValue().GetCurrentValue())
return;
// If no options were set, then dump everything
m_dump_all.GetOptionValue().SetCurrentValue(true);
@@ -505,6 +529,42 @@ private:
return DumpLinux() ||
m_dump_linux_proc_fd.GetOptionValue().GetCurrentValue();
}
+ bool DumpFacebook() const {
+ return DumpAll() || m_fb_all.GetOptionValue().GetCurrentValue();
+ }
+ bool DumpFacebookAppData() const {
+ return DumpFacebook() || m_fb_app_data.GetOptionValue().GetCurrentValue();
+ }
+ bool DumpFacebookBuildID() const {
+ return DumpFacebook() || m_fb_build_id.GetOptionValue().GetCurrentValue();
+ }
+ bool DumpFacebookVersionName() const {
+ return DumpFacebook() || m_fb_version.GetOptionValue().GetCurrentValue();
+ }
+ bool DumpFacebookJavaStack() const {
+ return DumpFacebook() || m_fb_java_stack.GetOptionValue().GetCurrentValue();
+ }
+ bool DumpFacebookDalvikInfo() const {
+ return DumpFacebook() || m_fb_dalvik.GetOptionValue().GetCurrentValue();
+ }
+ bool DumpFacebookUnwindSymbols() const {
+ return DumpFacebook() || m_fb_unwind.GetOptionValue().GetCurrentValue();
+ }
+ bool DumpFacebookErrorLog() const {
+ return DumpFacebook() || m_fb_error_log.GetOptionValue().GetCurrentValue();
+ }
+ bool DumpFacebookAppStateLog() const {
+ return DumpFacebook() || m_fb_app_state.GetOptionValue().GetCurrentValue();
+ }
+ bool DumpFacebookAbortReason() const {
+ return DumpFacebook() || m_fb_abort.GetOptionValue().GetCurrentValue();
+ }
+ bool DumpFacebookThreadName() const {
+ return DumpFacebook() || m_fb_thread.GetOptionValue().GetCurrentValue();
+ }
+ bool DumpFacebookLogcat() const {
+ return DumpFacebook() || m_fb_logcat.GetOptionValue().GetCurrentValue();
+ }
public:
CommandObjectProcessMinidumpDump(CommandInterpreter &interpreter)
@@ -536,7 +596,30 @@ public:
INIT_BOOL(m_dump_linux_proc_fd, "fd", 'f',
"Dump linux /proc/<pid>/fd."),
INIT_BOOL(m_dump_linux_all, "linux", 'l',
- "Dump all linux streams.") {
+ "Dump all linux streams."),
+ INIT_BOOL(m_fb_app_data, "fb-app-data", 1,
+ "Dump Facebook application custom data."),
+ INIT_BOOL(m_fb_build_id, "fb-build-id", 2,
+ "Dump the Facebook build ID."),
+ INIT_BOOL(m_fb_version, "fb-version", 3,
+ "Dump Facebook application version string."),
+ INIT_BOOL(m_fb_java_stack, "fb-java-stack", 4,
+ "Dump Facebook java stack."),
+ INIT_BOOL(m_fb_dalvik, "fb-dalvik-info", 5,
+ "Dump Facebook Dalvik info."),
+ INIT_BOOL(m_fb_unwind, "fb-unwind-symbols", 6,
+ "Dump Facebook unwind symbols."),
+ INIT_BOOL(m_fb_error_log, "fb-error-log", 7,
+ "Dump Facebook error log."),
+ INIT_BOOL(m_fb_app_state, "fb-app-state-log", 8,
+ "Dump Facebook java stack."),
+ INIT_BOOL(m_fb_abort, "fb-abort-reason", 9,
+ "Dump Facebook abort reason."),
+ INIT_BOOL(m_fb_thread, "fb-thread-name", 10,
+ "Dump Facebook thread name."),
+ INIT_BOOL(m_fb_logcat, "fb-logcat", 11,
+ "Dump Facebook logcat."),
+ INIT_BOOL(m_fb_all, "facebook", 12, "Dump all Facebook streams.") {
APPEND_OPT(m_dump_all);
APPEND_OPT(m_dump_directory);
APPEND_OPT(m_dump_linux_cpuinfo);
@@ -550,6 +633,18 @@ public:
APPEND_OPT(m_dump_linux_proc_uptime);
APPEND_OPT(m_dump_linux_proc_fd);
APPEND_OPT(m_dump_linux_all);
+ APPEND_OPT(m_fb_app_data);
+ APPEND_OPT(m_fb_build_id);
+ APPEND_OPT(m_fb_version);
+ APPEND_OPT(m_fb_java_stack);
+ APPEND_OPT(m_fb_dalvik);
+ APPEND_OPT(m_fb_unwind);
+ APPEND_OPT(m_fb_error_log);
+ APPEND_OPT(m_fb_app_state);
+ APPEND_OPT(m_fb_abort);
+ APPEND_OPT(m_fb_thread);
+ APPEND_OPT(m_fb_logcat);
+ APPEND_OPT(m_fb_all);
m_option_group.Finalize();
}
@@ -625,6 +720,48 @@ public:
DumpTextStream(MinidumpStreamType::LinuxProcUptime, "uptime");
if (DumpLinuxProcFD())
DumpTextStream(MinidumpStreamType::LinuxProcFD, "/proc/PID/fd");
+ if (DumpFacebookAppData())
+ DumpTextStream(MinidumpStreamType::FacebookAppCustomData,
+ "Facebook App Data");
+ if (DumpFacebookBuildID()) {
+ auto bytes = minidump.GetStream(MinidumpStreamType::FacebookBuildID);
+ if (bytes.size() >= 4) {
+ DataExtractor data(bytes.data(), bytes.size(), eByteOrderLittle,
+ process->GetAddressByteSize());
+ lldb::offset_t offset = 0;
+ uint32_t build_id = data.GetU32(&offset);
+ s.Printf("Facebook Build ID:\n");
+ s.Printf("%u\n", build_id);
+ s.Printf("\n");
+ }
+ }
+ if (DumpFacebookVersionName())
+ DumpTextStream(MinidumpStreamType::FacebookAppVersionName,
+ "Facebook Version String");
+ if (DumpFacebookJavaStack())
+ DumpTextStream(MinidumpStreamType::FacebookJavaStack,
+ "Facebook Java Stack");
+ if (DumpFacebookDalvikInfo())
+ DumpTextStream(MinidumpStreamType::FacebookDalvikInfo,
+ "Facebook Dalvik Info");
+ if (DumpFacebookUnwindSymbols())
+ DumpBinaryStream(MinidumpStreamType::FacebookUnwindSymbols,
+ "Facebook Unwind Symbols Bytes");
+ if (DumpFacebookErrorLog())
+ DumpTextStream(MinidumpStreamType::FacebookDumpErrorLog,
+ "Facebook Error Log");
+ if (DumpFacebookAppStateLog())
+ DumpTextStream(MinidumpStreamType::FacebookAppStateLog,
+ "Faceook Application State Log");
+ if (DumpFacebookAbortReason())
+ DumpTextStream(MinidumpStreamType::FacebookAbortReason,
+ "Facebook Abort Reason");
+ if (DumpFacebookThreadName())
+ DumpTextStream(MinidumpStreamType::FacebookThreadName,
+ "Facebook Thread Name");
+ if (DumpFacebookLogcat())
+ DumpTextStream(MinidumpStreamType::FacebookLogcat,
+ "Facebook Logcat");
return true;
}
};
OpenPOWER on IntegriCloud