labath created this revision. labath added reviewers: zturner, lemo, clayborg, JDevlieghere, teemperor. Herald added subscribers: fedor.sergeev, dschuff, srhines. labath added a parent revision: D58973: Move the minidump parser into the Formats module.
The goal of this header is to reduce code duplication in code dealing with various minidump constants (and having that code break when new constants are added). It operates the same way as other llvm .def files: - a user defines an appropriate macro which specifies the set of constants he wants to work with, and what he wants to do with it - the user includes the .def file, which will invoke the user-defined macro for all known constants in the given set. Right now, this defines only three constant sets, which correspond to the ones I needed in followup patches, but others can (and probably will) be easily added. https://reviews.llvm.org/D58975 Files: include/lldb/Formats/MinidumpEnums.def include/lldb/Formats/MinidumpTypes.h include/lldb/module.modulemap source/Formats/MinidumpParser.cpp
Index: source/Formats/MinidumpParser.cpp =================================================================== --- source/Formats/MinidumpParser.cpp +++ source/Formats/MinidumpParser.cpp @@ -649,58 +649,14 @@ return m_regions; } -#define ENUM_TO_CSTR(ST) case (uint32_t)MinidumpStreamType::ST: return #ST - llvm::StringRef MinidumpParser::GetStreamTypeAsString(uint32_t stream_type) { - switch (stream_type) { - ENUM_TO_CSTR(Unused); - ENUM_TO_CSTR(Reserved0); - ENUM_TO_CSTR(Reserved1); - ENUM_TO_CSTR(ThreadList); - ENUM_TO_CSTR(ModuleList); - ENUM_TO_CSTR(MemoryList); - ENUM_TO_CSTR(Exception); - ENUM_TO_CSTR(SystemInfo); - ENUM_TO_CSTR(ThreadExList); - ENUM_TO_CSTR(Memory64List); - ENUM_TO_CSTR(CommentA); - ENUM_TO_CSTR(CommentW); - ENUM_TO_CSTR(HandleData); - ENUM_TO_CSTR(FunctionTable); - ENUM_TO_CSTR(UnloadedModuleList); - ENUM_TO_CSTR(MiscInfo); - ENUM_TO_CSTR(MemoryInfoList); - ENUM_TO_CSTR(ThreadInfoList); - ENUM_TO_CSTR(HandleOperationList); - ENUM_TO_CSTR(Token); - ENUM_TO_CSTR(JavascriptData); - ENUM_TO_CSTR(SystemMemoryInfo); - ENUM_TO_CSTR(ProcessVMCounters); - ENUM_TO_CSTR(BreakpadInfo); - ENUM_TO_CSTR(AssertionInfo); - ENUM_TO_CSTR(LinuxCPUInfo); - ENUM_TO_CSTR(LinuxProcStatus); - ENUM_TO_CSTR(LinuxLSBRelease); - ENUM_TO_CSTR(LinuxCMDLine); - ENUM_TO_CSTR(LinuxEnviron); - ENUM_TO_CSTR(LinuxAuxv); - ENUM_TO_CSTR(LinuxMaps); - ENUM_TO_CSTR(LinuxDSODebug); - 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); + switch (MinidumpStreamType(stream_type)) { +#define LLDB_HANDLE_STREAM_TYPE(CODE, NAME) \ + case MinidumpStreamType::NAME: \ + return #NAME; +#include "lldb/Formats/MinidumpEnums.def" + default: + return "unknown stream type"; } - return "unknown stream type"; } Index: include/lldb/module.modulemap =================================================================== --- include/lldb/module.modulemap +++ include/lldb/module.modulemap @@ -11,6 +11,9 @@ umbrella "Formats" module * { export * } + + // This header is intended for (repeated) textual inclusion. + textual header "Formats/MinidumpEnums.def" } module lldb_Host { Index: include/lldb/Formats/MinidumpTypes.h =================================================================== --- include/lldb/Formats/MinidumpTypes.h +++ include/lldb/Formats/MinidumpTypes.h @@ -53,99 +53,22 @@ // Reference: // https://msdn.microsoft.com/en-us/library/windows/desktop/ms680394.aspx enum class MinidumpStreamType : uint32_t { - Unused = 0, - Reserved0 = 1, - Reserved1 = 2, - ThreadList = 3, - ModuleList = 4, - MemoryList = 5, - Exception = 6, - SystemInfo = 7, - ThreadExList = 8, - Memory64List = 9, - CommentA = 10, - CommentW = 11, - HandleData = 12, - FunctionTable = 13, - UnloadedModuleList = 14, - MiscInfo = 15, - MemoryInfoList = 16, - ThreadInfoList = 17, - HandleOperationList = 18, - Token = 19, - JavascriptData = 20, - SystemMemoryInfo = 21, - ProcessVMCounters = 22, +#define LLDB_HANDLE_STREAM_TYPE(CODE, NAME) NAME = CODE, +#include "lldb/Formats/MinidumpEnums.def" LastReserved = 0x0000ffff, - - /* Breakpad extension types. 0x4767 = "Gg" */ - BreakpadInfo = 0x47670001, - AssertionInfo = 0x47670002, - /* These are additional minidump stream values which are specific to - * the linux breakpad implementation. */ - LinuxCPUInfo = 0x47670003, /* /proc/cpuinfo */ - LinuxProcStatus = 0x47670004, /* /proc/$x/status */ - LinuxLSBRelease = 0x47670005, /* /etc/lsb-release */ - LinuxCMDLine = 0x47670006, /* /proc/$x/cmdline */ - LinuxEnviron = 0x47670007, /* /proc/$x/environ */ - LinuxAuxv = 0x47670008, /* /proc/$x/auxv */ - LinuxMaps = 0x47670009, /* /proc/$x/maps */ - LinuxDSODebug = 0x4767000A, - 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 enum class MinidumpCPUArchitecture : uint16_t { - X86 = 0, /* PROCESSOR_ARCHITECTURE_INTEL */ - MIPS = 1, /* PROCESSOR_ARCHITECTURE_MIPS */ - Alpha = 2, /* PROCESSOR_ARCHITECTURE_ALPHA */ - PPC = 3, /* PROCESSOR_ARCHITECTURE_PPC */ - SHX = 4, /* PROCESSOR_ARCHITECTURE_SHX (Super-H) */ - ARM = 5, /* PROCESSOR_ARCHITECTURE_ARM */ - IA64 = 6, /* PROCESSOR_ARCHITECTURE_IA64 */ - Alpha64 = 7, /* PROCESSOR_ARCHITECTURE_ALPHA64 */ - MSIL = 8, /* PROCESSOR_ARCHITECTURE_MSIL - * (Microsoft Intermediate Language) */ - AMD64 = 9, /* PROCESSOR_ARCHITECTURE_AMD64 */ - X86Win64 = 10, /* PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 (WoW64) */ - SPARC = 0x8001, /* Breakpad-defined value for SPARC */ - PPC64 = 0x8002, /* Breakpad-defined value for PPC64 */ - ARM64 = 0x8003, /* Breakpad-defined value for ARM64 */ - MIPS64 = 0x8004, /* Breakpad-defined value for MIPS64 */ +#define LLDB_HANDLE_ARCH(CODE, NAME) NAME = CODE, +#include "lldb/Formats/MinidumpEnums.def" Unknown = 0xffff /* PROCESSOR_ARCHITECTURE_UNKNOWN */ }; // for MinidumpSystemInfo.platform_id enum class MinidumpOSPlatform : uint32_t { - Win32S = 0, /* VER_PLATFORM_WIN32s (Windows 3.1) */ - Win32Windows = 1, /* VER_PLATFORM_WIN32_WINDOWS (Windows 95-98-Me) */ - Win32NT = 2, /* VER_PLATFORM_WIN32_NT (Windows NT, 2000+) */ - Win32CE = 3, /* VER_PLATFORM_WIN32_CE, VER_PLATFORM_WIN32_HH - * (Windows CE, Windows Mobile, "Handheld") */ - - /* The following values are Breakpad-defined. */ - Unix = 0x8000, /* Generic Unix-ish */ - MacOSX = 0x8101, /* Mac OS X/Darwin */ - IOS = 0x8102, /* iOS */ - Linux = 0x8201, /* Linux */ - Solaris = 0x8202, /* Solaris */ - Android = 0x8203, /* Android */ - PS3 = 0x8204, /* PS3 */ - NaCl = 0x8205 /* Native Client (NaCl) */ +#define LLDB_HANDLE_PLATFORM(CODE, NAME) NAME = CODE, +#include "lldb/Formats/MinidumpEnums.def" }; // For MinidumpCPUInfo.arm_cpu_info.elf_hwcaps. Index: include/lldb/Formats/MinidumpEnums.def =================================================================== --- /dev/null +++ include/lldb/Formats/MinidumpEnums.def @@ -0,0 +1,107 @@ +//===-- MinidumpEnums.def ---------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#if !(defined LLDB_HANDLE_STREAM_TYPE || defined LLDB_HANDLE_ARCH || \ + defined LLDB_HANDLE_PLATFORM) +#error "Missing LLDB_HANDLE definition" +#endif + +#ifndef LLDB_HANDLE_STREAM_TYPE +#define LLDB_HANDLE_STREAM_TYPE(CODE, NAME) +#endif + +#ifndef LLDB_HANDLE_ARCH +#define LLDB_HANDLE_ARCH(CODE, NAME) +#endif + +#ifndef LLDB_HANDLE_PLATFORM +#define LLDB_HANDLE_PLATFORM(CODE, NAME) +#endif + +LLDB_HANDLE_STREAM_TYPE(0x0003, ThreadList) +LLDB_HANDLE_STREAM_TYPE(0x0004, ModuleList) +LLDB_HANDLE_STREAM_TYPE(0x0005, MemoryList) +LLDB_HANDLE_STREAM_TYPE(0x0006, Exception) +LLDB_HANDLE_STREAM_TYPE(0x0007, SystemInfo) +LLDB_HANDLE_STREAM_TYPE(0x0008, ThreadExList) +LLDB_HANDLE_STREAM_TYPE(0x0009, Memory64List) +LLDB_HANDLE_STREAM_TYPE(0x000a, CommentA) +LLDB_HANDLE_STREAM_TYPE(0x000b, CommentW) +LLDB_HANDLE_STREAM_TYPE(0x000c, HandleData) +LLDB_HANDLE_STREAM_TYPE(0x000d, FunctionTable) +LLDB_HANDLE_STREAM_TYPE(0x000e, UnloadedModuleList) +LLDB_HANDLE_STREAM_TYPE(0x000f, MiscInfo) +LLDB_HANDLE_STREAM_TYPE(0x0010, MemoryInfoList) +LLDB_HANDLE_STREAM_TYPE(0x0011, ThreadInfoList) +LLDB_HANDLE_STREAM_TYPE(0x0012, HandleOperationList) +LLDB_HANDLE_STREAM_TYPE(0x0013, Token) +LLDB_HANDLE_STREAM_TYPE(0x0014, JavascriptData) +LLDB_HANDLE_STREAM_TYPE(0x0015, SystemMemoryInfo) +LLDB_HANDLE_STREAM_TYPE(0x0016, ProcessVMCounters) +// Breakpad extension types. 0x4767 = "Gg" +LLDB_HANDLE_STREAM_TYPE(0x47670001, BreakpadInfo) +LLDB_HANDLE_STREAM_TYPE(0x47670002, AssertionInfo) +// These are additional minidump stream values which are specific to the linux +// breakpad implementation. +LLDB_HANDLE_STREAM_TYPE(0x47670003, LinuxCPUInfo) // /proc/cpuinfo +LLDB_HANDLE_STREAM_TYPE(0x47670004, LinuxProcStatus) // /proc/$x/status +LLDB_HANDLE_STREAM_TYPE(0x47670005, LinuxLSBRelease) // /etc/lsb-release +LLDB_HANDLE_STREAM_TYPE(0x47670006, LinuxCMDLine) // /proc/$x/cmdline +LLDB_HANDLE_STREAM_TYPE(0x47670007, LinuxEnviron) // /proc/$x/environ +LLDB_HANDLE_STREAM_TYPE(0x47670008, LinuxAuxv) // /proc/$x/auxv +LLDB_HANDLE_STREAM_TYPE(0x47670009, LinuxMaps) // /proc/$x/maps +LLDB_HANDLE_STREAM_TYPE(0x4767000A, LinuxDSODebug) +LLDB_HANDLE_STREAM_TYPE(0x4767000B, LinuxProcStat) // /proc/$x/stat +LLDB_HANDLE_STREAM_TYPE(0x4767000C, LinuxProcUptime) // uptime +LLDB_HANDLE_STREAM_TYPE(0x4767000D, LinuxProcFD) // /proc/$x/fd +// Facebook-defined stream types +LLDB_HANDLE_STREAM_TYPE(0xFACE1CA7, FacebookLogcat) +LLDB_HANDLE_STREAM_TYPE(0xFACECAFA, FacebookAppCustomData) +LLDB_HANDLE_STREAM_TYPE(0xFACECAFB, FacebookBuildID) +LLDB_HANDLE_STREAM_TYPE(0xFACECAFC, FacebookAppVersionName) +LLDB_HANDLE_STREAM_TYPE(0xFACECAFD, FacebookJavaStack) +LLDB_HANDLE_STREAM_TYPE(0xFACECAFE, FacebookDalvikInfo) +LLDB_HANDLE_STREAM_TYPE(0xFACECAFF, FacebookUnwindSymbols) +LLDB_HANDLE_STREAM_TYPE(0xFACECB00, FacebookDumpErrorLog) +LLDB_HANDLE_STREAM_TYPE(0xFACECCCC, FacebookAppStateLog) +LLDB_HANDLE_STREAM_TYPE(0xFACEDEAD, FacebookAbortReason) +LLDB_HANDLE_STREAM_TYPE(0xFACEE000, FacebookThreadName) + +LLDB_HANDLE_ARCH(0x0000, X86) // PROCESSOR_ARCHITECTURE_INTEL +LLDB_HANDLE_ARCH(0x0001, MIPS) // PROCESSOR_ARCHITECTURE_MIPS +LLDB_HANDLE_ARCH(0x0002, Alpha) // PROCESSOR_ARCHITECTURE_ALPHA +LLDB_HANDLE_ARCH(0x0003, PPC) // PROCESSOR_ARCHITECTURE_PPC +LLDB_HANDLE_ARCH(0x0004, SHX) // PROCESSOR_ARCHITECTURE_SHX (Super-H) +LLDB_HANDLE_ARCH(0x0005, ARM) // PROCESSOR_ARCHITECTURE_ARM +LLDB_HANDLE_ARCH(0x0006, IA64) // PROCESSOR_ARCHITECTURE_IA64 +LLDB_HANDLE_ARCH(0x0007, Alpha64) // PROCESSOR_ARCHITECTURE_ALPHA64 +LLDB_HANDLE_ARCH(0x0008, MSIL) // PROCESSOR_ARCHITECTURE_MSIL +LLDB_HANDLE_ARCH(0x0009, AMD64) // PROCESSOR_ARCHITECTURE_AMD64 +LLDB_HANDLE_ARCH(0x000a, X86Win64) // PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 +LLDB_HANDLE_ARCH(0x8001, SPARC) // Breakpad-defined value for SPARC +LLDB_HANDLE_ARCH(0x8002, PPC64) // Breakpad-defined value for PPC64 +LLDB_HANDLE_ARCH(0x8003, ARM64) // Breakpad-defined value for ARM64 +LLDB_HANDLE_ARCH(0x8004, MIPS64) // Breakpad-defined value for MIPS64 + +LLDB_HANDLE_PLATFORM(0x0000, Win32S) // Windows 3.1 +LLDB_HANDLE_PLATFORM(0x0001, Win32Windows) // Windows 95-98-Me +LLDB_HANDLE_PLATFORM(0x0002, Win32NT) // Windows NT, 2000+ +LLDB_HANDLE_PLATFORM(0x0003, Win32CE) // Windows CE, Windows Mobile, "Handheld" +// Breakpad-defined values. +LLDB_HANDLE_PLATFORM(0x8000, Unix) // Generic Unix-ish +LLDB_HANDLE_PLATFORM(0x8101, MacOSX) // Mac OS X/Darwin +LLDB_HANDLE_PLATFORM(0x8102, IOS) // iOS +LLDB_HANDLE_PLATFORM(0x8201, Linux) // Linux +LLDB_HANDLE_PLATFORM(0x8202, Solaris) // Solaris +LLDB_HANDLE_PLATFORM(0x8203, Android) // Android +LLDB_HANDLE_PLATFORM(0x8204, PS3) // PS3 +LLDB_HANDLE_PLATFORM(0x8205, NaCl) // Native Client (NaCl) + +#undef LLDB_HANDLE_STREAM_TYPE +#undef LLDB_HANDLE_ARCH +#undef LLDB_HANDLE_PLATFORM
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits