diff options
author | wolfbeast <mcwerewolf@wolfbeast.com> | 2019-04-01 13:05:24 +0200 |
---|---|---|
committer | wolfbeast <mcwerewolf@wolfbeast.com> | 2019-04-01 13:05:24 +0200 |
commit | ff2f287f82630ab3887d7d5c1e64e5b888ea0beb (patch) | |
tree | 4e96cb32aa2320a327024942d247c6b56ef8c199 /toolkit/crashreporter/google-breakpad/src/client/mac/handler/dynamic_images.h | |
parent | bfc97728065cbbc7f6bbc281b654a2d1e079b48d (diff) | |
download | UXP-ff2f287f82630ab3887d7d5c1e64e5b888ea0beb.tar UXP-ff2f287f82630ab3887d7d5c1e64e5b888ea0beb.tar.gz UXP-ff2f287f82630ab3887d7d5c1e64e5b888ea0beb.tar.lz UXP-ff2f287f82630ab3887d7d5c1e64e5b888ea0beb.tar.xz UXP-ff2f287f82630ab3887d7d5c1e64e5b888ea0beb.zip |
Remove crashreporter toolkit files.
Resolves #20
Diffstat (limited to 'toolkit/crashreporter/google-breakpad/src/client/mac/handler/dynamic_images.h')
-rw-r--r-- | toolkit/crashreporter/google-breakpad/src/client/mac/handler/dynamic_images.h | 319 |
1 files changed, 0 insertions, 319 deletions
diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/dynamic_images.h b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/dynamic_images.h deleted file mode 100644 index 65147900b..000000000 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/dynamic_images.h +++ /dev/null @@ -1,319 +0,0 @@ -// Copyright (c) 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// dynamic_images.h -// -// Implements most of the function of the dyld API, but allowing an -// arbitrary task to be introspected, unlike the dyld API which -// only allows operation on the current task. The current implementation -// is limited to use by 32-bit tasks. - -#ifndef CLIENT_MAC_HANDLER_DYNAMIC_IMAGES_H__ -#define CLIENT_MAC_HANDLER_DYNAMIC_IMAGES_H__ - -#include <mach/mach.h> -#include <mach-o/dyld.h> -#include <mach-o/loader.h> -#include <sys/types.h> - -#include <string> -#include <vector> - -#include "mach_vm_compat.h" - -namespace google_breakpad { - -using std::string; -using std::vector; - -//============================================================================== -// The memory layout of this struct matches the dyld_image_info struct -// defined in "dyld_gdb.h" in the darwin source. -typedef struct dyld_image_info32 { - uint32_t load_address_; // struct mach_header* - uint32_t file_path_; // char* - uint32_t file_mod_date_; -} dyld_image_info32; - -typedef struct dyld_image_info64 { - uint64_t load_address_; // struct mach_header* - uint64_t file_path_; // char* - uint64_t file_mod_date_; -} dyld_image_info64; - -//============================================================================== -// This is as defined in "dyld_gdb.h" in the darwin source. -// _dyld_all_image_infos (in dyld) is a structure of this type -// which will be used to determine which dynamic code has been loaded. -typedef struct dyld_all_image_infos32 { - uint32_t version; // == 1 in Mac OS X 10.4 - uint32_t infoArrayCount; - uint32_t infoArray; // const struct dyld_image_info* - uint32_t notification; - bool processDetachedFromSharedRegion; -} dyld_all_image_infos32; - -typedef struct dyld_all_image_infos64 { - uint32_t version; // == 1 in Mac OS X 10.4 - uint32_t infoArrayCount; - uint64_t infoArray; // const struct dyld_image_info* - uint64_t notification; - bool processDetachedFromSharedRegion; -} dyld_all_image_infos64; - -// some typedefs to isolate 64/32 bit differences -#ifdef __LP64__ -typedef mach_header_64 breakpad_mach_header; -typedef segment_command_64 breakpad_mach_segment_command; -#else -typedef mach_header breakpad_mach_header; -typedef segment_command breakpad_mach_segment_command; -#endif - -// Helper functions to deal with 32-bit/64-bit Mach-O differences. -class DynamicImage; -template<typename MachBits> -bool FindTextSection(DynamicImage& image); - -template<typename MachBits> -uint32_t GetFileTypeFromHeader(DynamicImage& image); - -//============================================================================== -// Represents a single dynamically loaded mach-o image -class DynamicImage { - public: - DynamicImage(uint8_t *header, // data is copied - size_t header_size, // includes load commands - uint64_t load_address, - string file_path, - uintptr_t image_mod_date, - mach_port_t task, - cpu_type_t cpu_type) - : header_(header, header + header_size), - header_size_(header_size), - load_address_(load_address), - vmaddr_(0), - vmsize_(0), - slide_(0), - version_(0), - file_path_(file_path), - file_mod_date_(image_mod_date), - task_(task), - cpu_type_(cpu_type) { - CalculateMemoryAndVersionInfo(); - } - - // Size of mach_header plus load commands - size_t GetHeaderSize() const {return header_.size();} - - // Full path to mach-o binary - string GetFilePath() {return file_path_;} - - uint64_t GetModDate() const {return file_mod_date_;} - - // Actual address where the image was loaded - uint64_t GetLoadAddress() const {return load_address_;} - - // Address where the image should be loaded - mach_vm_address_t GetVMAddr() const {return vmaddr_;} - - // Difference between GetLoadAddress() and GetVMAddr() - ptrdiff_t GetVMAddrSlide() const {return slide_;} - - // Size of the image - mach_vm_size_t GetVMSize() const {return vmsize_;} - - // Task owning this loaded image - mach_port_t GetTask() {return task_;} - - // CPU type of the task - cpu_type_t GetCPUType() {return cpu_type_;} - - // filetype from the Mach-O header. - uint32_t GetFileType(); - - // Return true if the task is a 64-bit architecture. - bool Is64Bit() { return (GetCPUType() & CPU_ARCH_ABI64) == CPU_ARCH_ABI64; } - - uint32_t GetVersion() {return version_;} - // For sorting - bool operator<(const DynamicImage &inInfo) { - return GetLoadAddress() < inInfo.GetLoadAddress(); - } - - // Sanity checking - bool IsValid() {return GetVMSize() != 0;} - - private: - DynamicImage(const DynamicImage &); - DynamicImage &operator=(const DynamicImage &); - - friend class DynamicImages; - template<typename MachBits> - friend bool FindTextSection(DynamicImage& image); - template<typename MachBits> - friend uint32_t GetFileTypeFromHeader(DynamicImage& image); - - // Initializes vmaddr_, vmsize_, and slide_ - void CalculateMemoryAndVersionInfo(); - - const vector<uint8_t> header_; // our local copy of the header - size_t header_size_; // mach_header plus load commands - uint64_t load_address_; // base address image is mapped into - mach_vm_address_t vmaddr_; - mach_vm_size_t vmsize_; - ptrdiff_t slide_; - uint32_t version_; // Dylib version - string file_path_; // path dyld used to load the image - uintptr_t file_mod_date_; // time_t of image file - - mach_port_t task_; - cpu_type_t cpu_type_; // CPU type of task_ -}; - -//============================================================================== -// DynamicImageRef is just a simple wrapper for a pointer to -// DynamicImage. The reason we use it instead of a simple typedef is so -// that we can use stl::sort() on a vector of DynamicImageRefs -// and simple class pointers can't implement operator<(). -// -class DynamicImageRef { - public: - explicit DynamicImageRef(DynamicImage *inP) : p(inP) {} - // The copy constructor is required by STL - DynamicImageRef(const DynamicImageRef &inRef) : p(inRef.p) {} - - bool operator<(const DynamicImageRef &inRef) const { - return (*const_cast<DynamicImageRef*>(this)->p) - < (*const_cast<DynamicImageRef&>(inRef).p); - } - - bool operator==(const DynamicImageRef &inInfo) const { - return (*const_cast<DynamicImageRef*>(this)->p).GetLoadAddress() == - (*const_cast<DynamicImageRef&>(inInfo)).GetLoadAddress(); - } - - // Be just like DynamicImage* - DynamicImage *operator->() {return p;} - operator DynamicImage*() {return p;} - - private: - DynamicImage *p; -}; - -// Helper function to deal with 32-bit/64-bit Mach-O differences. -class DynamicImages; -template<typename MachBits> -void ReadImageInfo(DynamicImages& images, uint64_t image_list_address); - -//============================================================================== -// An object of type DynamicImages may be created to allow introspection of -// an arbitrary task's dynamically loaded mach-o binaries. This makes the -// assumption that the current task has send rights to the target task. -class DynamicImages { - public: - explicit DynamicImages(mach_port_t task); - - ~DynamicImages() { - for (int i = 0; i < GetImageCount(); ++i) { - delete image_list_[i]; - } - } - - // Returns the number of dynamically loaded mach-o images. - int GetImageCount() const {return static_cast<int>(image_list_.size());} - - // Returns an individual image. - DynamicImage *GetImage(int i) { - if (i < (int)image_list_.size()) { - return image_list_[i]; - } - return NULL; - } - - // Returns the image corresponding to the main executable. - DynamicImage *GetExecutableImage(); - int GetExecutableImageIndex(); - - // Returns the task which we're looking at. - mach_port_t GetTask() const {return task_;} - - // CPU type of the task - cpu_type_t GetCPUType() {return cpu_type_;} - - // Return true if the task is a 64-bit architecture. - bool Is64Bit() { return (GetCPUType() & CPU_ARCH_ABI64) == CPU_ARCH_ABI64; } - - // Determine the CPU type of the task being dumped. - static cpu_type_t DetermineTaskCPUType(task_t task); - - // Get the native CPU type of this task. - static cpu_type_t GetNativeCPUType() { -#if defined(__i386__) - return CPU_TYPE_I386; -#elif defined(__x86_64__) - return CPU_TYPE_X86_64; -#elif defined(__ppc__) - return CPU_TYPE_POWERPC; -#elif defined(__ppc64__) - return CPU_TYPE_POWERPC64; -#elif defined(__arm__) - return CPU_TYPE_ARM; -#elif defined(__aarch64__) - return CPU_TYPE_ARM64; -#else -#error "GetNativeCPUType not implemented for this architecture" -#endif - } - - private: - template<typename MachBits> - friend void ReadImageInfo(DynamicImages& images, uint64_t image_list_address); - - bool IsOurTask() {return task_ == mach_task_self();} - - // Initialization - void ReadImageInfoForTask(); - uint64_t GetDyldAllImageInfosPointer(); - - mach_port_t task_; - cpu_type_t cpu_type_; // CPU type of task_ - vector<DynamicImageRef> image_list_; -}; - -// Fill bytes with the contents of memory at a particular -// location in another task. -kern_return_t ReadTaskMemory(task_port_t target_task, - const uint64_t address, - size_t length, - vector<uint8_t> &bytes); - -} // namespace google_breakpad - -#endif // CLIENT_MAC_HANDLER_DYNAMIC_IMAGES_H__ |