diff options
Diffstat (limited to 'src/google_breakpad')
-rw-r--r-- | src/google_breakpad/common/minidump_cpu_amd64.h | 2 | ||||
-rw-r--r-- | src/google_breakpad/common/minidump_cpu_riscv.h | 38 | ||||
-rw-r--r-- | src/google_breakpad/common/minidump_exception_linux.h | 5 | ||||
-rw-r--r-- | src/google_breakpad/common/minidump_format.h | 4 | ||||
-rw-r--r-- | src/google_breakpad/processor/minidump.h | 191 | ||||
-rw-r--r-- | src/google_breakpad/processor/minidump_processor.h | 20 |
6 files changed, 138 insertions, 122 deletions
diff --git a/src/google_breakpad/common/minidump_cpu_amd64.h b/src/google_breakpad/common/minidump_cpu_amd64.h index 308f21ec..be209801 100644 --- a/src/google_breakpad/common/minidump_cpu_amd64.h +++ b/src/google_breakpad/common/minidump_cpu_amd64.h @@ -227,7 +227,7 @@ typedef struct { #define MD_CONTEXT_AMD64_ALL (MD_CONTEXT_AMD64_FULL | \ MD_CONTEXT_AMD64_SEGMENTS | \ - MD_CONTEXT_X86_DEBUG_REGISTERS) + MD_CONTEXT_AMD64_DEBUG_REGISTERS) /* CONTEXT_ALL */ diff --git a/src/google_breakpad/common/minidump_cpu_riscv.h b/src/google_breakpad/common/minidump_cpu_riscv.h index 94d06117..812cf5fd 100644 --- a/src/google_breakpad/common/minidump_cpu_riscv.h +++ b/src/google_breakpad/common/minidump_cpu_riscv.h @@ -39,28 +39,8 @@ #include "google_breakpad/common/breakpad_types.h" -#define MD_FLOATINGSAVEAREA_RISCV_FPR_COUNT 32 -#if defined(__riscv) -# if __riscv_flen == 32 -typedef uint32_t riscv_fpr_size; -# elif __riscv_flen == 64 -typedef uint64_t riscv_fpr_size; -# elif __riscv_flen == 128 -typedef uint128_struct riscv_fpr_size; -# else -# error "Unexpected __riscv_flen" -# endif -#else -typedef uint32_t riscv_fpr_size; -#endif - #define MD_CONTEXT_RISCV_GPR_COUNT 32 - -typedef struct { - /* 32 floating point registers, f0 .. f31. */ - riscv_fpr_size regs[MD_FLOATINGSAVEAREA_RISCV_FPR_COUNT]; - uint32_t fpcsr; -} MDFloatingSaveAreaRISCV; +#define MD_CONTEXT_RISCV_FPR_COUNT 32 enum MDRISCVRegisterNumbers { MD_CONTEXT_RISCV_REG_PC = 0, @@ -72,13 +52,14 @@ enum MDRISCVRegisterNumbers { * context stored in the structure. */ #define MD_CONTEXT_RISCV 0x00800000 #define MD_CONTEXT_RISCV_INTEGER (MD_CONTEXT_RISCV | 0x00000001) -#define MD_CONTEXT_RISCV_FLOATING_POINT (MD_CONTEXT_RISCV | 0x00000004) +#define MD_CONTEXT_RISCV_FLOATING_POINT (MD_CONTEXT_RISCV | 0x00000002) #define MD_CONTEXT_RISCV_FULL (MD_CONTEXT_RISCV_INTEGER | \ MD_CONTEXT_RISCV_FLOATING_POINT) typedef struct { /* Determines which fields of this struct are populated */ uint32_t context_flags; + uint32_t version; uint32_t pc; uint32_t ra; @@ -113,20 +94,24 @@ typedef struct { uint32_t t5; uint32_t t6; - MDFloatingSaveAreaRISCV float_save; + /* 32 floating point registers, f0 .. f31. Breakpad only supports RISCV32 + * with 32 bit floating point. */ + uint32_t fpregs[MD_CONTEXT_RISCV_FPR_COUNT]; + uint32_t fcsr; } MDRawContextRISCV; /* For (MDRawContextRISCV64).context_flags. These values indicate the type of * context stored in the structure. */ #define MD_CONTEXT_RISCV64 0x08000000 #define MD_CONTEXT_RISCV64_INTEGER (MD_CONTEXT_RISCV64 | 0x00000001) -#define MD_CONTEXT_RISCV64_FLOATING_POINT (MD_CONTEXT_RISCV64 | 0x00000004) +#define MD_CONTEXT_RISCV64_FLOATING_POINT (MD_CONTEXT_RISCV64 | 0x00000002) #define MD_CONTEXT_RISCV64_FULL (MD_CONTEXT_RISCV64_INTEGER | \ MD_CONTEXT_RISCV64_FLOATING_POINT) typedef struct { /* Determines which fields of this struct are populated */ uint32_t context_flags; + uint32_t version; uint64_t pc; uint64_t ra; @@ -161,7 +146,10 @@ typedef struct { uint64_t t5; uint64_t t6; - MDFloatingSaveAreaRISCV float_save; + /* 32 floating point registers, f0 .. f31. Breakpad only supports RISCV64 with + * 64 bit floating point. */ + uint64_t fpregs[MD_CONTEXT_RISCV_FPR_COUNT]; + uint32_t fcsr; } MDRawContextRISCV64; diff --git a/src/google_breakpad/common/minidump_exception_linux.h b/src/google_breakpad/common/minidump_exception_linux.h index 354cdd6b..2135244f 100644 --- a/src/google_breakpad/common/minidump_exception_linux.h +++ b/src/google_breakpad/common/minidump_exception_linux.h @@ -112,6 +112,11 @@ typedef enum { MD_EXCEPTION_FLAG_LIN_SEGV_ACCERR = 2, MD_EXCEPTION_FLAG_LIN_SEGV_BNDERR = 3, MD_EXCEPTION_FLAG_LIN_SEGV_PKUERR = 4, + MD_EXCEPTION_FLAG_LIN_SEGV_ACCADI = 5, + MD_EXCEPTION_FLAG_LIN_SEGV_ADIDERR = 6, + MD_EXCEPTION_FLAG_LIN_SEGV_ADIPERR = 7, + MD_EXCEPTION_FLAG_LIN_SEGV_MTEAERR = 8, + MD_EXCEPTION_FLAG_LIN_SEGV_MTESERR = 9, /* SIGBUS */ MD_EXCEPTION_FLAG_LIN_BUS_ADRALN = 1, diff --git a/src/google_breakpad/common/minidump_format.h b/src/google_breakpad/common/minidump_format.h index 1526afce..959d15ba 100644 --- a/src/google_breakpad/common/minidump_format.h +++ b/src/google_breakpad/common/minidump_format.h @@ -1105,7 +1105,7 @@ typedef struct { typedef struct { uint32_t count; - MDLocationDescriptor objects[0]; /* MDRawCrashpadAnnotation */ + MDRawCrashpadAnnotation objects[0]; } MDRawCrashpadAnnotationList; typedef struct { @@ -1122,7 +1122,7 @@ typedef struct { typedef struct { uint32_t count; - MDLocationDescriptor modules[0]; /* MDRawModuleCrashpadInfoLink */ + MDRawModuleCrashpadInfoLink modules[0]; } MDRawModuleCrashpadInfoList; typedef struct { diff --git a/src/google_breakpad/processor/minidump.h b/src/google_breakpad/processor/minidump.h index 934a0e3e..e523ab36 100644 --- a/src/google_breakpad/processor/minidump.h +++ b/src/google_breakpad/processor/minidump.h @@ -89,7 +89,6 @@ #include <string> #include <vector> -#include "common/basictypes.h" #include "common/using_std_string.h" #include "google_breakpad/processor/code_module.h" #include "google_breakpad/processor/code_modules.h" @@ -114,7 +113,7 @@ template<typename AddressType, typename EntryType> class RangeMap; // itself. class MinidumpObject : public DumpObject { public: - virtual ~MinidumpObject() {} + virtual ~MinidumpObject() = default; protected: explicit MinidumpObject(Minidump* minidump); @@ -136,7 +135,9 @@ class MinidumpObject : public DumpObject { // same interface, and may be derived from this class. class MinidumpStream : public MinidumpObject { public: - virtual ~MinidumpStream() {} + MinidumpStream(const MinidumpStream&) = delete; + void operator=(const MinidumpStream&) = delete; + ~MinidumpStream() override = default; protected: explicit MinidumpStream(Minidump* minidump); @@ -150,8 +151,6 @@ class MinidumpStream : public MinidumpObject { // that implements MinidumpStream can compare expected_size to a // known size as an integrity check. virtual bool Read(uint32_t expected_size) = 0; - - DISALLOW_COPY_AND_ASSIGN(MinidumpStream); }; @@ -167,7 +166,9 @@ class MinidumpStream : public MinidumpObject { // user wants). class MinidumpContext : public DumpContext { public: - virtual ~MinidumpContext(); + MinidumpContext(const MinidumpContext&) = delete; + void operator=(const MinidumpContext&) = delete; + ~MinidumpContext() override; protected: explicit MinidumpContext(Minidump* minidump); @@ -192,8 +193,6 @@ class MinidumpContext : public DumpContext { // for access to data about the minidump file itself, such as whether // it should be byte-swapped. Minidump* minidump_; - - DISALLOW_COPY_AND_ASSIGN(MinidumpContext); }; @@ -208,7 +207,7 @@ class MinidumpContext : public DumpContext { class MinidumpMemoryRegion : public MinidumpObject, public MemoryRegion { public: - virtual ~MinidumpMemoryRegion(); + ~MinidumpMemoryRegion() override; static void set_max_bytes(uint32_t max_bytes) { max_bytes_ = max_bytes; } static uint32_t max_bytes() { return max_bytes_; } @@ -219,22 +218,22 @@ class MinidumpMemoryRegion : public MinidumpObject, const uint8_t* GetMemory() const; // The address of the base of the memory region. - uint64_t GetBase() const; + uint64_t GetBase() const override; // The size, in bytes, of the memory region. - uint32_t GetSize() const; + uint32_t GetSize() const override; // Frees the cached memory region, if cached. void FreeMemory(); // Obtains the value of memory at the pointer specified by address. - bool GetMemoryAtAddress(uint64_t address, uint8_t* value) const; - bool GetMemoryAtAddress(uint64_t address, uint16_t* value) const; - bool GetMemoryAtAddress(uint64_t address, uint32_t* value) const; - bool GetMemoryAtAddress(uint64_t address, uint64_t* value) const; + bool GetMemoryAtAddress(uint64_t address, uint8_t* value) const override; + bool GetMemoryAtAddress(uint64_t address, uint16_t* value) const override; + bool GetMemoryAtAddress(uint64_t address, uint32_t* value) const override; + bool GetMemoryAtAddress(uint64_t address, uint64_t* value) const override; // Print a human-readable representation of the object to stdout. - void Print() const; + void Print() const override; void SetPrintMode(bool hexdump, unsigned int width); protected: @@ -277,9 +276,9 @@ class MinidumpMemoryRegion : public MinidumpObject, // contain a memory region or context. class MinidumpThread : public MinidumpObject { public: - virtual ~MinidumpThread(); + ~MinidumpThread() override; - const MDRawThread* thread() const { return valid_ ? &thread_ : NULL; } + const MDRawThread* thread() const { return valid_ ? &thread_ : nullptr; } // GetMemory may return NULL even if the MinidumpThread is valid, // if the thread memory cannot be read. virtual MinidumpMemoryRegion* GetMemory(); @@ -322,7 +321,9 @@ class MinidumpThread : public MinidumpObject { // a process. class MinidumpThreadList : public MinidumpStream { public: - virtual ~MinidumpThreadList(); + MinidumpThreadList(const MinidumpThreadList&) = delete; + void operator=(const MinidumpThreadList&) = delete; + ~MinidumpThreadList() override; static void set_max_threads(uint32_t max_threads) { max_threads_ = max_threads; @@ -364,18 +365,16 @@ class MinidumpThreadList : public MinidumpStream { // The list of threads. MinidumpThreads* threads_; - uint32_t thread_count_; - - DISALLOW_COPY_AND_ASSIGN(MinidumpThreadList); + uint32_t thread_count_; }; // MinidumpThreadName contains the name of a thread. class MinidumpThreadName : public MinidumpObject { public: - virtual ~MinidumpThreadName(); + ~MinidumpThreadName() override; const MDRawThreadName* thread_name() const { - return valid_ ? &thread_name_ : NULL; + return valid_ ? &thread_name_ : nullptr; } // Gets the thread ID. @@ -419,7 +418,9 @@ class MinidumpThreadName : public MinidumpObject { // MinidumpThreadNames) in a process. class MinidumpThreadNameList : public MinidumpStream { public: - virtual ~MinidumpThreadNameList(); + MinidumpThreadNameList(const MinidumpThreadNameList&) = delete; + void operator=(const MinidumpThreadNameList&) = delete; + ~MinidumpThreadNameList() override; virtual unsigned int thread_name_count() const { return valid_ ? thread_name_count_ : 0; @@ -446,8 +447,6 @@ class MinidumpThreadNameList : public MinidumpStream { // The list of thread names. MinidumpThreadNames* thread_names_; uint32_t thread_name_count_; - - DISALLOW_COPY_AND_ASSIGN(MinidumpThreadNameList); }; // MinidumpModule wraps MDRawModule, which contains information about loaded @@ -457,7 +456,7 @@ class MinidumpThreadNameList : public MinidumpStream { class MinidumpModule : public MinidumpObject, public CodeModule { public: - virtual ~MinidumpModule(); + ~MinidumpModule() override; static void set_max_cv_bytes(uint32_t max_cv_bytes) { max_cv_bytes_ = max_cv_bytes; @@ -469,27 +468,27 @@ class MinidumpModule : public MinidumpObject, } static uint32_t max_misc_bytes() { return max_misc_bytes_; } - const MDRawModule* module() const { return valid_ ? &module_ : NULL; } + const MDRawModule* module() const { return valid_ ? &module_ : nullptr; } // CodeModule implementation - virtual uint64_t base_address() const { + uint64_t base_address() const override { return valid_ ? module_.base_of_image : static_cast<uint64_t>(-1); } - virtual uint64_t size() const { return valid_ ? module_.size_of_image : 0; } - virtual string code_file() const; - virtual string code_identifier() const; - virtual string debug_file() const; - virtual string debug_identifier() const; - virtual string version() const; - virtual CodeModule* Copy() const; - virtual bool is_unloaded() const { return false; } + uint64_t size() const override { return valid_ ? module_.size_of_image : 0; } + string code_file() const override; + string code_identifier() const override; + string debug_file() const override; + string debug_identifier() const override; + string version() const override; + CodeModule* Copy() const override; + bool is_unloaded() const override { return false; } // Getter and setter for shrink_down_delta. This is used when the address // range for a module is shrunk down due to address range conflicts with // other modules. The base_address and size fields are not updated and they // should always reflect the original values (reported in the minidump). - virtual uint64_t shrink_down_delta() const; - virtual void SetShrinkDownDelta(uint64_t shrink_down_delta); + uint64_t shrink_down_delta() const override; + void SetShrinkDownDelta(uint64_t shrink_down_delta) override; // The CodeView record, which contains information to locate the module's // debugging information (pdb). This is returned as uint8_t* because @@ -580,7 +579,9 @@ class MinidumpModule : public MinidumpObject, class MinidumpModuleList : public MinidumpStream, public CodeModules { public: - virtual ~MinidumpModuleList(); + MinidumpModuleList(const MinidumpModuleList&) = delete; + void operator=(const MinidumpModuleList&) = delete; + ~MinidumpModuleList() override; static void set_max_modules(uint32_t max_modules) { max_modules_ = max_modules; @@ -588,19 +589,19 @@ class MinidumpModuleList : public MinidumpStream, static uint32_t max_modules() { return max_modules_; } // CodeModules implementation. - virtual unsigned int module_count() const { + unsigned int module_count() const override { return valid_ ? module_count_ : 0; } - virtual const MinidumpModule* GetModuleForAddress(uint64_t address) const; - virtual const MinidumpModule* GetMainModule() const; - virtual const MinidumpModule* GetModuleAtSequence( - unsigned int sequence) const; - virtual const MinidumpModule* GetModuleAtIndex(unsigned int index) const; - virtual const CodeModules* Copy() const; + const MinidumpModule* GetModuleForAddress(uint64_t address) const override; + const MinidumpModule* GetMainModule() const override; + const MinidumpModule* GetModuleAtSequence( + unsigned int sequence) const override; + const MinidumpModule* GetModuleAtIndex(unsigned int index) const override; + const CodeModules* Copy() const override; // Returns a vector of all modules which address ranges needed to be shrunk // down due to address range conflicts with other modules. - virtual vector<linked_ptr<const CodeModule> > GetShrunkRangeModules() const; + vector<linked_ptr<const CodeModule>> GetShrunkRangeModules() const override; // Print a human-readable representation of the object to stdout. void Print(); @@ -615,7 +616,7 @@ class MinidumpModuleList : public MinidumpStream, static const uint32_t kStreamType = MD_MODULE_LIST_STREAM; - bool Read(uint32_t expected_size); + bool Read(uint32_t expected_size) override; bool StoreRange(const MinidumpModule& module, uint64_t base_address, @@ -632,8 +633,6 @@ class MinidumpModuleList : public MinidumpStream, MinidumpModules* modules_; uint32_t module_count_; - - DISALLOW_COPY_AND_ASSIGN(MinidumpModuleList); }; @@ -648,7 +647,9 @@ class MinidumpModuleList : public MinidumpStream, // memory minidumps contain all of a process' mapped memory. class MinidumpMemoryList : public MinidumpStream { public: - virtual ~MinidumpMemoryList(); + MinidumpMemoryList(const MinidumpMemoryList&) = delete; + void operator=(const MinidumpMemoryList&) = delete; + ~MinidumpMemoryList() override; static void set_max_regions(uint32_t max_regions) { max_regions_ = max_regions; @@ -696,8 +697,6 @@ class MinidumpMemoryList : public MinidumpStream { // The list of regions. MemoryRegions* regions_; uint32_t region_count_; - - DISALLOW_COPY_AND_ASSIGN(MinidumpMemoryList); }; @@ -709,10 +708,12 @@ class MinidumpMemoryList : public MinidumpStream { // occurred. class MinidumpException : public MinidumpStream { public: - virtual ~MinidumpException(); + MinidumpException(const MinidumpException&) = delete; + void operator=(const MinidumpException&) = delete; + ~MinidumpException() override; const MDRawExceptionStream* exception() const { - return valid_ ? &exception_ : NULL; + return valid_ ? &exception_ : nullptr; } // The thread ID is used to determine if a thread is the exception thread, @@ -736,19 +737,19 @@ class MinidumpException : public MinidumpStream { bool Read(uint32_t expected_size) override; MDRawExceptionStream exception_; - MinidumpContext* context_; - - DISALLOW_COPY_AND_ASSIGN(MinidumpException); + MinidumpContext* context_; }; // MinidumpAssertion wraps MDRawAssertionInfo, which contains information // about an assertion that caused the minidump to be generated. class MinidumpAssertion : public MinidumpStream { public: - virtual ~MinidumpAssertion(); + MinidumpAssertion(const MinidumpAssertion&) = delete; + void operator=(const MinidumpAssertion&) = delete; + ~MinidumpAssertion() override; const MDRawAssertionInfo* assertion() const { - return valid_ ? &assertion_ : NULL; + return valid_ ? &assertion_ : nullptr; } string expression() const { @@ -779,8 +780,6 @@ class MinidumpAssertion : public MinidumpStream { string expression_; string function_; string file_; - - DISALLOW_COPY_AND_ASSIGN(MinidumpAssertion); }; @@ -788,10 +787,12 @@ class MinidumpAssertion : public MinidumpStream { // the system on which the minidump was generated. See also MinidumpMiscInfo. class MinidumpSystemInfo : public MinidumpStream { public: - virtual ~MinidumpSystemInfo(); + MinidumpSystemInfo(const MinidumpSystemInfo&) = delete; + void operator=(const MinidumpSystemInfo&) = delete; + ~MinidumpSystemInfo() override; const MDRawSystemInfo* system_info() const { - return valid_ ? &system_info_ : NULL; + return valid_ ? &system_info_ : nullptr; } // GetOS and GetCPU return textual representations of the operating system @@ -834,8 +835,6 @@ class MinidumpSystemInfo : public MinidumpStream { // A string identifying the CPU vendor, if known. const string* cpu_vendor_; - - DISALLOW_COPY_AND_ASSIGN(MinidumpSystemInfo); }; @@ -846,7 +845,7 @@ class MinidumpUnloadedModule : public MinidumpObject, ~MinidumpUnloadedModule() override; const MDRawUnloadedModule* module() const { - return valid_ ? &unloaded_module_ : NULL; + return valid_ ? &unloaded_module_ : nullptr; } // CodeModule implementation @@ -903,6 +902,8 @@ class MinidumpUnloadedModule : public MinidumpObject, class MinidumpUnloadedModuleList : public MinidumpStream, public CodeModules { public: + MinidumpUnloadedModuleList(const MinidumpUnloadedModuleList&) = delete; + void operator=(const MinidumpUnloadedModuleList&) = delete; ~MinidumpUnloadedModuleList() override; static void set_max_modules(uint32_t max_modules) { @@ -945,8 +946,6 @@ class MinidumpUnloadedModuleList : public MinidumpStream, MinidumpUnloadedModules* unloaded_modules_; uint32_t module_count_; - - DISALLOW_COPY_AND_ASSIGN(MinidumpUnloadedModuleList); }; @@ -955,8 +954,11 @@ class MinidumpUnloadedModuleList : public MinidumpStream, // information. See also MinidumpSystemInfo. class MinidumpMiscInfo : public MinidumpStream { public: + MinidumpMiscInfo(const MinidumpMiscInfo&) = delete; + void operator=(const MinidumpMiscInfo&) = delete; + const MDRawMiscInfo* misc_info() const { - return valid_ ? &misc_info_ : NULL; + return valid_ ? &misc_info_ : nullptr; } // Print a human-readable representation of the object to stdout. @@ -980,8 +982,6 @@ class MinidumpMiscInfo : public MinidumpStream { string daylight_name_; string build_string_; string dbg_bld_str_; - - DISALLOW_COPY_AND_ASSIGN(MinidumpMiscInfo); }; @@ -990,8 +990,11 @@ class MinidumpMiscInfo : public MinidumpStream { // at the time the minidump was generated. class MinidumpBreakpadInfo : public MinidumpStream { public: + MinidumpBreakpadInfo(const MinidumpBreakpadInfo&) = delete; + void operator=(const MinidumpBreakpadInfo&) = delete; + const MDRawBreakpadInfo* breakpad_info() const { - return valid_ ? &breakpad_info_ : NULL; + return valid_ ? &breakpad_info_ : nullptr; } // These thread IDs are used to determine if threads deserve special @@ -1014,8 +1017,6 @@ class MinidumpBreakpadInfo : public MinidumpStream { bool Read(uint32_t expected_size_) override; MDRawBreakpadInfo breakpad_info_; - - DISALLOW_COPY_AND_ASSIGN(MinidumpBreakpadInfo); }; // MinidumpMemoryInfo wraps MDRawMemoryInfo, which provides information @@ -1023,7 +1024,9 @@ class MinidumpBreakpadInfo : public MinidumpStream { // and protection. class MinidumpMemoryInfo : public MinidumpObject { public: - const MDRawMemoryInfo* info() const { return valid_ ? &memory_info_ : NULL; } + const MDRawMemoryInfo* info() const { + return valid_ ? &memory_info_ : nullptr; + } // The address of the base of the memory region. uint64_t GetBase() const { return valid_ ? memory_info_.base_address : 0; } @@ -1060,7 +1063,9 @@ class MinidumpMemoryInfo : public MinidumpObject { // info corresponding to a specific address. class MinidumpMemoryInfoList : public MinidumpStream { public: - virtual ~MinidumpMemoryInfoList(); + MinidumpMemoryInfoList(const MinidumpMemoryInfoList&) = delete; + void operator=(const MinidumpMemoryInfoList&) = delete; + ~MinidumpMemoryInfoList() override; unsigned int info_count() const { return valid_ ? info_count_ : 0; } @@ -1086,14 +1091,15 @@ class MinidumpMemoryInfoList : public MinidumpStream { MinidumpMemoryInfos* infos_; uint32_t info_count_; - - DISALLOW_COPY_AND_ASSIGN(MinidumpMemoryInfoList); }; // MinidumpLinuxMaps wraps information about a single mapped memory region // from /proc/self/maps. class MinidumpLinuxMaps : public MinidumpObject { public: + MinidumpLinuxMaps(const MinidumpLinuxMaps&) = delete; + void operator=(const MinidumpLinuxMaps&) = delete; + // The memory address of the base of the mapped region. uint64_t GetBase() const { return valid_ ? region_.start : 0; } // The size of the mapped region. @@ -1139,8 +1145,6 @@ class MinidumpLinuxMaps : public MinidumpObject { // The memory region struct that this class wraps. MappedMemoryRegion region_; - - DISALLOW_COPY_AND_ASSIGN(MinidumpLinuxMaps); }; // MinidumpLinuxMapsList corresponds to the Linux-exclusive MD_LINUX_MAPS @@ -1148,7 +1152,9 @@ class MinidumpLinuxMaps : public MinidumpObject { // the mapped memory regions and their access permissions. class MinidumpLinuxMapsList : public MinidumpStream { public: - virtual ~MinidumpLinuxMapsList(); + MinidumpLinuxMapsList(const MinidumpLinuxMapsList&) = delete; + void operator=(const MinidumpLinuxMapsList&) = delete; + ~MinidumpLinuxMapsList() override; // Get number of mappings. unsigned int get_maps_count() const { return valid_ ? maps_count_ : 0; } @@ -1180,8 +1186,6 @@ class MinidumpLinuxMapsList : public MinidumpStream { MinidumpLinuxMappings* maps_; // The number of mappings. uint32_t maps_count_; - - DISALLOW_COPY_AND_ASSIGN(MinidumpLinuxMapsList); }; // MinidumpCrashpadInfo wraps MDRawCrashpadInfo, which is an optional stream in @@ -1196,12 +1200,12 @@ class MinidumpCrashpadInfo : public MinidumpStream { }; const MDRawCrashpadInfo* crashpad_info() const { - return valid_ ? &crashpad_info_ : NULL; + return valid_ ? &crashpad_info_ : nullptr; } const std::vector<std::vector<AnnotationObject>>* GetModuleCrashpadInfoAnnotationObjects() const { - return valid_ ? &module_crashpad_info_annotation_objects_ : NULL; + return valid_ ? &module_crashpad_info_annotation_objects_ : nullptr; } // Print a human-readable representation of the object to stdout. @@ -1242,6 +1246,9 @@ class Minidump { // is valid as long as the Minidump object is. explicit Minidump(std::istream& input); + Minidump(const Minidump&) = delete; + void operator=(const Minidump&) = delete; + virtual ~Minidump(); // path may be empty if the minidump was not opened from a file @@ -1258,7 +1265,9 @@ class Minidump { } static uint32_t max_string_length() { return max_string_length_; } - virtual const MDRawHeader* header() const { return valid_ ? &header_ : NULL; } + virtual const MDRawHeader* header() const { + return valid_ ? &header_ : nullptr; + } // Reads the CPU information from the system info stream and generates the // appropriate CPU flags. The returned context_cpu_flags are the same as @@ -1374,7 +1383,7 @@ class Minidump { // the Minidump object locate interesting streams quickly, and // provides a convenient place to stash MinidumpStream objects. struct MinidumpStreamInfo { - MinidumpStreamInfo() : stream_index(0), stream(NULL) {} + MinidumpStreamInfo() : stream_index(0), stream(nullptr) {} ~MinidumpStreamInfo() { delete stream; } // Index into the MinidumpDirectoryEntries vector @@ -1436,8 +1445,6 @@ class Minidump { // Knobs for controlling display of memory printing. bool hexdump_; unsigned int hexdump_width_; - - DISALLOW_COPY_AND_ASSIGN(Minidump); }; diff --git a/src/google_breakpad/processor/minidump_processor.h b/src/google_breakpad/processor/minidump_processor.h index 137ef444..8475407e 100644 --- a/src/google_breakpad/processor/minidump_processor.h +++ b/src/google_breakpad/processor/minidump_processor.h @@ -126,8 +126,18 @@ class MinidumpProcessor { // does not exist or cannot be determined. static string GetAssertion(Minidump* dump); + // Sets the flag to enable/disable use of objdump during normal crash + // processing. This is independent from the flag for use of objdump during + // exploitability analysis. void set_enable_objdump(bool enabled) { enable_objdump_ = enabled; } + // Sets the flag to enable/disable use of objdump during exploitability + // analysis. This is independent from the flag for use of objdump during + // normal crash processing. + void set_enable_objdump_for_exploitability(bool enabled) { + enable_objdump_for_exploitability_ = enabled; + } + private: StackFrameSymbolizer* frame_symbolizer_; // Indicate whether resolver_helper_ is owned by this instance. @@ -138,9 +148,15 @@ class MinidumpProcessor { // memory corruption issue. bool enable_exploitability_; - // This flag permits the exploitability scanner to shell out to objdump - // for purposes of disassembly. + // This flag permits the processor to shell out to objdump for purposes of + // disassembly during normal crash processing, but not during exploitability + // analysis. bool enable_objdump_; + + // This flag permits the exploitability scanner to shell out to objdump for + // purposes of disassembly. This results in significantly more overhead than + // the enable_objdump_ flag. + bool enable_objdump_for_exploitability_; }; } // namespace google_breakpad |