From 25779d371c571e4f51792af3e3c5588b3186e934 Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Sat, 30 Mar 2019 19:10:17 +0100 Subject: Issue #187: Remove solaris conditional code. --- accessible/tests/mochitest/common.js | 1 - .../tests/mochitest/elm/test_nsApplicationAcc.html | 2 +- .../mochitest/treeupdate/test_contextmenu.xul | 6 +- .../tests/mochitest/treeupdate/test_menu.xul | 4 +- application/basilisk/installer/package-manifest.in | 7 -- application/palemoon/installer/package-manifest.in | 7 -- dom/base/nsContentUtils.h | 4 - dom/plugins/base/nsPluginsDirUnix.cpp | 6 +- gfx/thebes/gfxFontconfigFonts.cpp | 7 -- js/src/builtin/TestingFunctions.cpp | 4 - js/src/ctypes/CTypes.cpp | 4 - js/src/gc/Memory.cpp | 85 ---------------------- js/src/jsapi-tests/testGCAllocator.cpp | 12 +-- js/src/jsnativestack.cpp | 14 ---- js/src/vm/Time.cpp | 11 --- js/src/wasm/WasmSignalHandlers.cpp | 2 +- js/xpconnect/src/XPCShellImpl.cpp | 2 - layout/style/nsRuleNode.cpp | 3 - memory/mozjemalloc/jemalloc.c | 27 +------ toolkit/mozapps/update/common/updatedefines.h | 4 - toolkit/mozapps/update/updater/updater.cpp | 82 --------------------- toolkit/xre/nsSigHandlers.cpp | 55 -------------- xpcom/base/nsDebugImpl.cpp | 8 -- xpcom/base/nsMemoryReporterManager.cpp | 83 --------------------- xpcom/ds/nsMathUtils.h | 4 - xpcom/io/nsLocalFileUnix.cpp | 16 ---- 26 files changed, 12 insertions(+), 448 deletions(-) diff --git a/accessible/tests/mochitest/common.js b/accessible/tests/mochitest/common.js index 1e48fa067..b3f83ea84 100644 --- a/accessible/tests/mochitest/common.js +++ b/accessible/tests/mochitest/common.js @@ -59,7 +59,6 @@ const nsIPropertyElement = Components.interfaces.nsIPropertyElement; const MAC = (navigator.platform.indexOf("Mac") != -1); const LINUX = (navigator.platform.indexOf("Linux") != -1); -const SOLARIS = (navigator.platform.indexOf("SunOS") != -1); const WIN = (navigator.platform.indexOf("Win") != -1); //////////////////////////////////////////////////////////////////////////////// diff --git a/accessible/tests/mochitest/elm/test_nsApplicationAcc.html b/accessible/tests/mochitest/elm/test_nsApplicationAcc.html index 58763e437..e23eb37bc 100644 --- a/accessible/tests/mochitest/elm/test_nsApplicationAcc.html +++ b/accessible/tests/mochitest/elm/test_nsApplicationAcc.html @@ -32,7 +32,7 @@ // nsIAccessible::name var applicationName = ""; - if (LINUX || SOLARIS) { + if (LINUX) { applicationName = appInfo.name; } else { try { diff --git a/accessible/tests/mochitest/treeupdate/test_contextmenu.xul b/accessible/tests/mochitest/treeupdate/test_contextmenu.xul index 5b31e0136..916b815eb 100644 --- a/accessible/tests/mochitest/treeupdate/test_contextmenu.xul +++ b/accessible/tests/mochitest/treeupdate/test_contextmenu.xul @@ -130,7 +130,7 @@ */ function getMenuTree1() { - if (LINUX || SOLARIS) { + if (LINUX) { var tree = { role: ROLE_MENUPOPUP, children: [ @@ -190,7 +190,7 @@ function getMenuTree2() { var tree = getMenuTree1(); - if (LINUX || SOLARIS) { + if (LINUX) { var submenuTree = { name: "item2.0", @@ -232,7 +232,7 @@ children: [] }; - if (LINUX || SOLARIS) + if (LINUX) tree.children[2].children[0].children.push(subsubmenuTree); else tree.children[2].children[0].children[0].children[0].children.push(subsubmenuTree); diff --git a/accessible/tests/mochitest/treeupdate/test_menu.xul b/accessible/tests/mochitest/treeupdate/test_menu.xul index abdea217e..d62ac8c5d 100644 --- a/accessible/tests/mochitest/treeupdate/test_menu.xul +++ b/accessible/tests/mochitest/treeupdate/test_menu.xul @@ -32,7 +32,7 @@ this.invoke = function openMenu_invoke() { var tree; - if (LINUX || SOLARIS) { + if (LINUX) { tree = { PARENT_MENUITEM: [ ] }; @@ -51,7 +51,7 @@ this.finalCheck = function openMenu_finalCheck() { var tree; - if (LINUX || SOLARIS) { + if (LINUX) { tree = { PARENT_MENUITEM: [ { MENUITEM: [ ] }, diff --git a/application/basilisk/installer/package-manifest.in b/application/basilisk/installer/package-manifest.in index 7e12e3af2..4ea50408a 100644 --- a/application/basilisk/installer/package-manifest.in +++ b/application/basilisk/installer/package-manifest.in @@ -709,13 +709,6 @@ @RESPATH@/components/pipnss.xpt @RESPATH@/components/pippki.xpt -; for Solaris SPARC -#ifdef SOLARIS -bin/libfreebl_32fpu_3.so -bin/libfreebl_32int_3.so -bin/libfreebl_32int64_3.so -#endif - ; [Updater] ; #ifdef MOZ_UPDATER diff --git a/application/palemoon/installer/package-manifest.in b/application/palemoon/installer/package-manifest.in index 1247d3171..d8722bf08 100644 --- a/application/palemoon/installer/package-manifest.in +++ b/application/palemoon/installer/package-manifest.in @@ -318,13 +318,6 @@ @RESPATH@/chrome/pippki@JAREXT@ @RESPATH@/chrome/pippki.manifest -; for Solaris SPARC -#ifdef SOLARIS -bin/libfreebl_32fpu_3.so -bin/libfreebl_32int_3.so -bin/libfreebl_32int64_3.so -#endif - ; [Updater] ; #ifdef MOZ_UPDATER diff --git a/dom/base/nsContentUtils.h b/dom/base/nsContentUtils.h index 98df92efb..299a8e859 100644 --- a/dom/base/nsContentUtils.h +++ b/dom/base/nsContentUtils.h @@ -13,10 +13,6 @@ #include #endif -#if defined(SOLARIS) -#include -#endif - #include "js/TypeDecls.h" #include "js/Value.h" #include "js/RootingAPI.h" diff --git a/dom/plugins/base/nsPluginsDirUnix.cpp b/dom/plugins/base/nsPluginsDirUnix.cpp index 6d112b4fe..1c7a635d3 100644 --- a/dom/plugins/base/nsPluginsDirUnix.cpp +++ b/dom/plugins/base/nsPluginsDirUnix.cpp @@ -27,8 +27,6 @@ #elif defined(_AIX) #define DEFAULT_X11_PATH "/usr/lib" #define LOCAL_PLUGIN_DLL_ALT_SUFFIX ".a" -#elif defined(SOLARIS) -#define DEFAULT_X11_PATH "/usr/openwin/lib/" #elif defined(LINUX) #define DEFAULT_X11_PATH "/usr/X11R6/lib/" #elif defined(__APPLE__) @@ -102,7 +100,7 @@ static bool LoadExtraSharedLib(const char *name, char **soname, bool tryToGetSon #define PLUGIN_MAX_NUMBER_OF_EXTRA_LIBS 32 #define PREF_PLUGINS_SONAME "plugin.soname.list" -#if defined(SOLARIS) || defined(HPUX) +#if defined(HPUX) #define DEFAULT_EXTRA_LIBS_LIST "libXt" LOCAL_PLUGIN_DLL_SUFFIX ":libXext" LOCAL_PLUGIN_DLL_SUFFIX ":libXm" LOCAL_PLUGIN_DLL_SUFFIX #else #define DEFAULT_EXTRA_LIBS_LIST "libXt" LOCAL_PLUGIN_DLL_SUFFIX ":libXext" LOCAL_PLUGIN_DLL_SUFFIX @@ -280,7 +278,7 @@ nsresult nsPluginFile::LoadPlugin(PRLibrary **outLibrary) // work fine. -#if defined(SOLARIS) || defined(HPUX) +#if defined(HPUX) // Acrobat/libXm: Lazy resolving might cause crash later (bug 211587) *outLibrary = PR_LoadLibraryWithFlags(libSpec, PR_LD_NOW); pLibrary = *outLibrary; diff --git a/gfx/thebes/gfxFontconfigFonts.cpp b/gfx/thebes/gfxFontconfigFonts.cpp index bbcbbabf9..9caecc4c0 100644 --- a/gfx/thebes/gfxFontconfigFonts.cpp +++ b/gfx/thebes/gfxFontconfigFonts.cpp @@ -1096,15 +1096,8 @@ gfxFcFontSet::SortPreferredFonts(bool &aWaitForUserFont) FcFontSet *sets[1] = { fontSet }; FcResult result; -#ifdef SOLARIS - // Get around a crash of FcFontSetSort when FcConfig is nullptr - // Solaris's FcFontSetSort needs an FcConfig (bug 474758) - fontSet.own(FcFontSetSort(FcConfigGetCurrent(), sets, 1, mSortPattern, - FcFalse, nullptr, &result)); -#else fontSet.own(FcFontSetSort(nullptr, sets, 1, mSortPattern, FcFalse, nullptr, &result)); -#endif if (truncateMarker != nullptr && fontSet) { nsAutoRef truncatedSet(FcFontSetCreate()); diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctions.cpp index 373b6c9ed..c896ce5d1 100644 --- a/js/src/builtin/TestingFunctions.cpp +++ b/js/src/builtin/TestingFunctions.cpp @@ -240,11 +240,7 @@ GetBuildConfiguration(JSContext* cx, unsigned argc, Value* vp) if (!JS_SetProperty(cx, info, "intl-api", value)) return false; -#if defined(SOLARIS) - value = BooleanValue(false); -#else value = BooleanValue(true); -#endif if (!JS_SetProperty(cx, info, "mapped-array-buffer", value)) return false; diff --git a/js/src/ctypes/CTypes.cpp b/js/src/ctypes/CTypes.cpp index 0facd0009..d6adfac2c 100644 --- a/js/src/ctypes/CTypes.cpp +++ b/js/src/ctypes/CTypes.cpp @@ -20,10 +20,6 @@ #include #endif -#if defined(SOLARIS) -#include -#endif - #ifdef HAVE_SSIZE_T #include #endif diff --git a/js/src/gc/Memory.cpp b/js/src/gc/Memory.cpp index 26da75469..268e1e489 100644 --- a/js/src/gc/Memory.cpp +++ b/js/src/gc/Memory.cpp @@ -17,11 +17,6 @@ #include "jswin.h" #include -#elif defined(SOLARIS) - -#include -#include - #elif defined(XP_UNIX) #include @@ -408,86 +403,6 @@ DeallocateMappedContent(void* p, size_t length) # endif -#elif defined(SOLARIS) - -#ifndef MAP_NOSYNC -# define MAP_NOSYNC 0 -#endif - -void -InitMemorySubsystem() -{ - if (pageSize == 0) - pageSize = allocGranularity = size_t(sysconf(_SC_PAGESIZE)); -} - -void* -MapAlignedPages(size_t size, size_t alignment) -{ - MOZ_ASSERT(size >= alignment); - MOZ_ASSERT(size >= allocGranularity); - MOZ_ASSERT(size % alignment == 0); - MOZ_ASSERT(size % pageSize == 0); - MOZ_ASSERT_IF(alignment < allocGranularity, allocGranularity % alignment == 0); - MOZ_ASSERT_IF(alignment > allocGranularity, alignment % allocGranularity == 0); - - int prot = PROT_READ | PROT_WRITE; - int flags = MAP_PRIVATE | MAP_ANON | MAP_ALIGN | MAP_NOSYNC; - - void* p = mmap((caddr_t)alignment, size, prot, flags, -1, 0); - if (p == MAP_FAILED) - return nullptr; - return p; -} - -static void* -MapAlignedPagesLastDitch(size_t size, size_t alignment) -{ - return nullptr; -} - -void -UnmapPages(void* p, size_t size) -{ - MOZ_ALWAYS_TRUE(0 == munmap((caddr_t)p, size)); -} - -bool -MarkPagesUnused(void* p, size_t size) -{ - MOZ_ASSERT(OffsetFromAligned(p, pageSize) == 0); - return true; -} - -bool -MarkPagesInUse(void* p, size_t size) -{ - if (!DecommitEnabled()) - return; - - MOZ_ASSERT(OffsetFromAligned(p, pageSize) == 0); -} - -size_t -GetPageFaultCount() -{ - return 0; -} - -void* -AllocateMappedContent(int fd, size_t offset, size_t length, size_t alignment) -{ - // Not implemented. - return nullptr; -} - -// Deallocate mapped memory for object. -void -DeallocateMappedContent(void* p, size_t length) -{ - // Not implemented. -} - #elif defined(XP_UNIX) void diff --git a/js/src/jsapi-tests/testGCAllocator.cpp b/js/src/jsapi-tests/testGCAllocator.cpp index 2c5c58a29..d203019ec 100644 --- a/js/src/jsapi-tests/testGCAllocator.cpp +++ b/js/src/jsapi-tests/testGCAllocator.cpp @@ -14,8 +14,6 @@ #if defined(XP_WIN) #include "jswin.h" #include -#elif defined(SOLARIS) -// This test doesn't apply to Solaris. #elif defined(XP_UNIX) #include #include @@ -39,8 +37,6 @@ BEGIN_TEST(testGCAllocator) # else // Various APIs are unavailable. This test is disabled. return true; # endif -#elif defined(SOLARIS) - return true; #elif defined(XP_UNIX) PageSize = size_t(sysconf(_SC_PAGESIZE)); #else @@ -301,12 +297,6 @@ void* mapMemory(size_t length) { return nullptr; } void unmapPages(void* p, size_t size) { } # endif -#elif defined(SOLARIS) // This test doesn't apply to Solaris. - -void* mapMemoryAt(void* desired, size_t length) { return nullptr; } -void* mapMemory(size_t length) { return nullptr; } -void unmapPages(void* p, size_t size) { } - #elif defined(XP_UNIX) void* @@ -377,7 +367,7 @@ unmapPages(void* p, size_t size) MOZ_RELEASE_ASSERT(errno == ENOMEM); } -#else // !defined(XP_WIN) && !defined(SOLARIS) && !defined(XP_UNIX) +#else // !defined(XP_WIN) && !defined(XP_UNIX) #error "Memory mapping functions are not defined for your OS." #endif END_TEST(testGCAllocator) diff --git a/js/src/jsnativestack.cpp b/js/src/jsnativestack.cpp index 166a5a4f7..95e0f8da7 100644 --- a/js/src/jsnativestack.cpp +++ b/js/src/jsnativestack.cpp @@ -71,20 +71,6 @@ js::GetNativeStackBaseImpl() # endif } -#elif defined(SOLARIS) - -#include - -JS_STATIC_ASSERT(JS_STACK_GROWTH_DIRECTION < 0); - -void* -js::GetNativeStackBaseImpl() -{ - stack_t st; - stack_getbounds(&st); - return static_cast(st.ss_sp) + st.ss_size; -} - #elif defined(AIX) #include diff --git a/js/src/vm/Time.cpp b/js/src/vm/Time.cpp index 69e2cc41d..87531c148 100644 --- a/js/src/vm/Time.cpp +++ b/js/src/vm/Time.cpp @@ -11,9 +11,6 @@ #include "mozilla/DebugOnly.h" #include "mozilla/MathAlgorithms.h" -#ifdef SOLARIS -#define _REENTRANT 1 -#endif #include #include @@ -33,10 +30,6 @@ #ifdef XP_UNIX -#ifdef _SVID_GETTOD /* Defined only on Solaris, see Solaris */ -extern int gettimeofday(struct timeval* tv); -#endif - #include #endif /* XP_UNIX */ @@ -49,11 +42,7 @@ PRMJ_Now() { struct timeval tv; -#ifdef _SVID_GETTOD /* Defined only on Solaris, see Solaris */ - gettimeofday(&tv); -#else gettimeofday(&tv, 0); -#endif /* _SVID_GETTOD */ return int64_t(tv.tv_sec) * PRMJ_USEC_PER_SEC + int64_t(tv.tv_usec); } diff --git a/js/src/wasm/WasmSignalHandlers.cpp b/js/src/wasm/WasmSignalHandlers.cpp index 78d21369d..c4733cc96 100644 --- a/js/src/wasm/WasmSignalHandlers.cpp +++ b/js/src/wasm/WasmSignalHandlers.cpp @@ -130,7 +130,7 @@ class AutoSetHandlingSegFault # define EPC_sig(p) ((p)->sc_pc) # define RFP_sig(p) ((p)->sc_regs[30]) # endif -#elif defined(__linux__) || defined(SOLARIS) +#elif defined(__linux__) # if defined(__linux__) # define XMM_sig(p,i) ((p)->uc_mcontext.fpregs->_xmm[i]) # define EIP_sig(p) ((p)->uc_mcontext.gregs[REG_EIP]) diff --git a/js/xpconnect/src/XPCShellImpl.cpp b/js/xpconnect/src/XPCShellImpl.cpp index a6432856d..a44c143ea 100644 --- a/js/xpconnect/src/XPCShellImpl.cpp +++ b/js/xpconnect/src/XPCShellImpl.cpp @@ -644,7 +644,6 @@ env_setProperty(JSContext* cx, HandleObject obj, HandleId id, MutableHandleValue ObjectOpResult& result) { /* XXX porting may be easy, but these don't seem to supply setenv by default */ -#if !defined SOLARIS RootedString valstr(cx); RootedString idstr(cx); int rv; @@ -696,7 +695,6 @@ env_setProperty(JSContext* cx, HandleObject obj, HandleId id, MutableHandleValue return false; } vp.setString(valstr); -#endif /* !defined SOLARIS */ return result.succeed(); } diff --git a/layout/style/nsRuleNode.cpp b/layout/style/nsRuleNode.cpp index 6bcef02a0..08400635b 100644 --- a/layout/style/nsRuleNode.cpp +++ b/layout/style/nsRuleNode.cpp @@ -67,9 +67,6 @@ #define alloca _alloca #endif #endif -#ifdef SOLARIS -#include -#endif using std::max; using std::min; diff --git a/memory/mozjemalloc/jemalloc.c b/memory/mozjemalloc/jemalloc.c index c0c189abf..9a97bbb09 100644 --- a/memory/mozjemalloc/jemalloc.c +++ b/memory/mozjemalloc/jemalloc.c @@ -280,9 +280,7 @@ typedef long ssize_t; #define JEMALLOC_RECYCLE #ifndef MOZ_MEMORY_WINDOWS -#ifndef MOZ_MEMORY_SOLARIS #include -#endif #ifndef __DECONST # define __DECONST(type, var) ((type)(uintptr_t)(const void *)(var)) #endif @@ -308,7 +306,7 @@ __FBSDID("$FreeBSD: head/lib/libc/stdlib/malloc.c 180599 2008-07-18 19:35:44Z ja #endif #include #include -#if !defined(MOZ_MEMORY_SOLARIS) && !defined(MOZ_MEMORY_ANDROID) +#if !defined(MOZ_MEMORY_ANDROID) #include #endif #include @@ -410,10 +408,6 @@ void *_mmap(void *addr, size_t length, int prot, int flags, #endif #endif -#if defined(MOZ_MEMORY_SOLARIS) && defined(MAP_ALIGN) && !defined(JEMALLOC_NEVER_USES_MAP_ALIGN) -#define JEMALLOC_USES_MAP_ALIGN /* Required on Solaris 10. Might improve performance elsewhere. */ -#endif - #ifndef __DECONST #define __DECONST(type, var) ((type)(uintptr_t)(const void *)(var)) #endif @@ -1040,7 +1034,7 @@ static const bool config_recycle = false; * will abort. * Platform specific page size conditions copied from js/public/HeapAPI.h */ -#if (defined(SOLARIS) || defined(__FreeBSD__)) && \ +#if (defined(__FreeBSD__)) && \ (defined(__sparc) || defined(__sparcv9) || defined(__ia64)) #define pagesize_2pow ((size_t) 13) #elif defined(__powerpc64__) @@ -5126,13 +5120,6 @@ malloc_ncpus(void) else return (n); } -#elif (defined(MOZ_MEMORY_SOLARIS)) - -static inline unsigned -malloc_ncpus(void) -{ - return sysconf(_SC_NPROCESSORS_ONLN); -} #elif (defined(MOZ_MEMORY_WINDOWS)) static inline unsigned malloc_ncpus(void) @@ -5929,19 +5916,9 @@ RETURN: #define MOZ_MEMORY_ELF #endif -#ifdef MOZ_MEMORY_SOLARIS -# ifdef __SUNPRO_C -void * -memalign_impl(size_t alignment, size_t size); -#pragma no_inline(memalign_impl) -# elif (defined(__GNUC__)) -__attribute__((noinline)) -# endif -#else #if (defined(MOZ_MEMORY_ELF)) __attribute__((visibility ("hidden"))) #endif -#endif #endif /* MOZ_REPLACE_MALLOC */ #ifdef MOZ_MEMORY_ELF diff --git a/toolkit/mozapps/update/common/updatedefines.h b/toolkit/mozapps/update/common/updatedefines.h index 760d2c4c4..5790cf996 100644 --- a/toolkit/mozapps/update/common/updatedefines.h +++ b/toolkit/mozapps/update/common/updatedefines.h @@ -96,11 +96,7 @@ static inline int mywcsprintf(WCHAR* dest, size_t count, const WCHAR* fmt, ...) # include # include -#ifdef SOLARIS -# include -#else # include -#endif # include #ifdef XP_MACOSX diff --git a/toolkit/mozapps/update/updater/updater.cpp b/toolkit/mozapps/update/updater/updater.cpp index c0b01bfbc..8025deaaf 100644 --- a/toolkit/mozapps/update/updater/updater.cpp +++ b/toolkit/mozapps/update/updater/updater.cpp @@ -3648,88 +3648,6 @@ int add_dir_entries(const NS_tchar *dirpath, ActionList *list) return rv; } -#elif defined(SOLARIS) -int add_dir_entries(const NS_tchar *dirpath, ActionList *list) -{ - int rv = OK; - NS_tchar foundpath[MAXPATHLEN]; - struct { - dirent dent_buffer; - char chars[MAXNAMLEN]; - } ent_buf; - struct dirent* ent; - mozilla::UniquePtr searchpath(get_full_path(dirpath)); - - DIR* dir = opendir(searchpath.get()); - if (!dir) { - LOG(("add_dir_entries error on opendir: " LOG_S ", err: %d", searchpath.get(), - errno)); - return UNEXPECTED_FILE_OPERATION_ERROR; - } - - while (readdir_r(dir, (dirent *)&ent_buf, &ent) == 0 && ent) { - if ((strcmp(ent->d_name, ".") == 0) || - (strcmp(ent->d_name, "..") == 0)) - continue; - - NS_tsnprintf(foundpath, sizeof(foundpath)/sizeof(foundpath[0]), - NS_T("%s%s"), searchpath.get(), ent->d_name); - struct stat64 st_buf; - int test = stat64(foundpath, &st_buf); - if (test) { - closedir(dir); - return UNEXPECTED_FILE_OPERATION_ERROR; - } - if (S_ISDIR(st_buf.st_mode)) { - NS_tsnprintf(foundpath, sizeof(foundpath)/sizeof(foundpath[0]), - NS_T("%s/"), foundpath); - // Recurse into the directory. - rv = add_dir_entries(foundpath, list); - if (rv) { - LOG(("add_dir_entries error: " LOG_S ", err: %d", foundpath, rv)); - closedir(dir); - return rv; - } - } else { - // Add the file to be removed to the ActionList. - NS_tchar *quotedpath = get_quoted_path(get_relative_path(foundpath)); - if (!quotedpath) { - closedir(dir); - return PARSE_ERROR; - } - - Action *action = new RemoveFile(); - rv = action->Parse(quotedpath); - if (rv) { - LOG(("add_dir_entries Parse error on recurse: " LOG_S ", err: %d", - quotedpath, rv)); - closedir(dir); - return rv; - } - - list->Append(action); - } - } - closedir(dir); - - // Add the directory to be removed to the ActionList. - NS_tchar *quotedpath = get_quoted_path(get_relative_path(dirpath)); - if (!quotedpath) - return PARSE_ERROR; - - Action *action = new RemoveDir(); - rv = action->Parse(quotedpath); - if (rv) { - LOG(("add_dir_entries Parse error on close: " LOG_S ", err: %d", - quotedpath, rv)); - } - else { - list->Append(action); - } - - return rv; -} - #else int add_dir_entries(const NS_tchar *dirpath, ActionList *list) diff --git a/toolkit/xre/nsSigHandlers.cpp b/toolkit/xre/nsSigHandlers.cpp index 098d9ae7e..454882c1b 100644 --- a/toolkit/xre/nsSigHandlers.cpp +++ b/toolkit/xre/nsSigHandlers.cpp @@ -32,11 +32,6 @@ #endif #endif -#if defined(SOLARIS) -#include -#include -#endif - static const char* gProgname = "huh?"; // Note: some tests manipulate this value. @@ -198,32 +193,6 @@ static void fpehandler(int signum, siginfo_t *si, void *context) *mxcsr &= ~SSE_STATUS_FLAGS; /* clear all pending SSE exceptions */ #endif #endif -#ifdef SOLARIS - ucontext_t *uc = (ucontext_t *)context; - -#if defined(__i386) - uint32_t *cw = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state.state[0]; - *cw |= FPU_EXCEPTION_MASK; - - uint32_t *sw = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state.state[1]; - *sw &= ~FPU_STATUS_FLAGS; - - /* address of the instruction that caused the exception */ - uint32_t *ip = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state.state[3]; - uc->uc_mcontext.gregs[REG_PC] = *ip; -#endif -#if defined(__amd64__) - uint16_t *cw = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state.cw; - *cw |= FPU_EXCEPTION_MASK; - - uint16_t *sw = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state.sw; - *sw &= ~FPU_STATUS_FLAGS; - - uint32_t *mxcsr = &uc->uc_mcontext.fpregs.fp_reg_set.fpchip_state.mxcsr; - *mxcsr |= SSE_EXCEPTION_MASK; /* disable all SSE exceptions */ - *mxcsr &= ~SSE_STATUS_FLAGS; /* clear all pending SSE exceptions */ -#endif -#endif } #endif @@ -286,30 +255,6 @@ void InstallSignalHandlers(const char *aProgname) } #endif -#if defined(SOLARIS) -#define NOFILES 512 - - // Boost Solaris file descriptors - { - struct rlimit rl; - - if (getrlimit(RLIMIT_NOFILE, &rl) == 0) - - if (rl.rlim_cur < NOFILES) { - rl.rlim_cur = NOFILES; - - if (setrlimit(RLIMIT_NOFILE, &rl) < 0) { - perror("setrlimit(RLIMIT_NOFILE)"); - fprintf(stderr, "Cannot exceed hard limit for open files"); - } -#if defined(DEBUG) - if (getrlimit(RLIMIT_NOFILE, &rl) == 0) - printf("File descriptors set to %d\n", rl.rlim_cur); -#endif //DEBUG - } - } -#endif //SOLARIS - #if defined(MOZ_WIDGET_GTK) && (GLIB_MAJOR_VERSION > 2 || (GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION >= 6)) const char *assertString = PR_GetEnv("XPCOM_DEBUG_BREAK"); if (assertString && diff --git a/xpcom/base/nsDebugImpl.cpp b/xpcom/base/nsDebugImpl.cpp index 96487acda..a81eb3d71 100644 --- a/xpcom/base/nsDebugImpl.cpp +++ b/xpcom/base/nsDebugImpl.cpp @@ -450,12 +450,6 @@ RealBreak() ".object_arch armv4t\n" #endif "BKPT #0"); -#elif defined(SOLARIS) -#if defined(__i386__) || defined(__i386) || defined(__x86_64__) - asm("int $3"); -#else - raise(SIGTRAP); -#endif #else #warning do not know how to break on this platform #endif @@ -530,8 +524,6 @@ Break(const char* aMsg) RealBreak(); #elif defined(__arm__) RealBreak(); -#elif defined(SOLARIS) - RealBreak(); #else #warning do not know how to break on this platform #endif diff --git a/xpcom/base/nsMemoryReporterManager.cpp b/xpcom/base/nsMemoryReporterManager.cpp index bfeda063b..88964f9b5 100644 --- a/xpcom/base/nsMemoryReporterManager.cpp +++ b/xpcom/base/nsMemoryReporterManager.cpp @@ -317,85 +317,6 @@ VsizeMaxContiguousDistinguishedAmount(int64_t* aN) } #endif // FreeBSD -#elif defined(SOLARIS) - -#include -#include -#include - -static void -XMappingIter(int64_t& aVsize, int64_t& aResident) -{ - aVsize = -1; - aResident = -1; - int mapfd = open("/proc/self/xmap", O_RDONLY); - struct stat st; - prxmap_t* prmapp = nullptr; - if (mapfd >= 0) { - if (!fstat(mapfd, &st)) { - int nmap = st.st_size / sizeof(prxmap_t); - while (1) { - // stat(2) on /proc//xmap returns an incorrect value, - // prior to the release of Solaris 11. - // Here is a workaround for it. - nmap *= 2; - prmapp = (prxmap_t*)malloc((nmap + 1) * sizeof(prxmap_t)); - if (!prmapp) { - // out of memory - break; - } - int n = pread(mapfd, prmapp, (nmap + 1) * sizeof(prxmap_t), 0); - if (n < 0) { - break; - } - if (nmap >= n / sizeof(prxmap_t)) { - aVsize = 0; - aResident = 0; - for (int i = 0; i < n / sizeof(prxmap_t); i++) { - aVsize += prmapp[i].pr_size; - aResident += prmapp[i].pr_rss * prmapp[i].pr_pagesize; - } - break; - } - free(prmapp); - } - free(prmapp); - } - close(mapfd); - } -} - -#define HAVE_VSIZE_AND_RESIDENT_REPORTERS 1 -static MOZ_MUST_USE nsresult -VsizeDistinguishedAmount(int64_t* aN) -{ - int64_t vsize, resident; - XMappingIter(vsize, resident); - if (vsize == -1) { - return NS_ERROR_FAILURE; - } - *aN = vsize; - return NS_OK; -} - -static MOZ_MUST_USE nsresult -ResidentDistinguishedAmount(int64_t* aN) -{ - int64_t vsize, resident; - XMappingIter(vsize, resident); - if (resident == -1) { - return NS_ERROR_FAILURE; - } - *aN = resident; - return NS_OK; -} - -static MOZ_MUST_USE nsresult -ResidentFastDistinguishedAmount(int64_t* aN) -{ - return ResidentDistinguishedAmount(aN); -} - #elif defined(XP_MACOSX) #include @@ -1145,13 +1066,9 @@ ResidentPeakDistinguishedAmount(int64_t* aN) if (0 == getrusage(RUSAGE_SELF, &usage)) { // The units for ru_maxrrs: // - Mac: bytes - // - Solaris: pages? But some sources it actually always returns 0, so - // check for that // - Linux, {Net/Open/Free}BSD, DragonFly: KiB #ifdef XP_MACOSX *aN = usage.ru_maxrss; -#elif defined(SOLARIS) - *aN = usage.ru_maxrss * getpagesize(); #else *aN = usage.ru_maxrss * 1024; #endif diff --git a/xpcom/ds/nsMathUtils.h b/xpcom/ds/nsMathUtils.h index b10b8144e..cbbd38611 100644 --- a/xpcom/ds/nsMathUtils.h +++ b/xpcom/ds/nsMathUtils.h @@ -11,10 +11,6 @@ #include #include -#ifdef SOLARIS -#include -#endif - /* * round */ diff --git a/xpcom/io/nsLocalFileUnix.cpp b/xpcom/io/nsLocalFileUnix.cpp index 194e5835e..272153bba 100644 --- a/xpcom/io/nsLocalFileUnix.cpp +++ b/xpcom/io/nsLocalFileUnix.cpp @@ -1591,22 +1591,6 @@ nsLocalFile::IsExecutable(bool* aResult) // Then check the execute bit. *aResult = (access(mPath.get(), X_OK) == 0); -#ifdef SOLARIS - // On Solaris, access will always return 0 for root user, however - // the file is only executable if S_IXUSR | S_IXGRP | S_IXOTH is set. - // See bug 351950, https://bugzilla.mozilla.org/show_bug.cgi?id=351950 - if (*aResult) { - struct STAT buf; - - *aResult = (STAT(mPath.get(), &buf) == 0); - if (*aResult || errno == EACCES) { - *aResult = *aResult && (buf.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)); - return NS_OK; - } - - return NSRESULT_FOR_ERRNO(); - } -#endif if (*aResult || errno == EACCES) { return NS_OK; } -- cgit v1.2.3 From 6b968b13d9cab02d8634facc87ae39e51dee4020 Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Sat, 30 Mar 2019 20:03:33 +0100 Subject: Issue #187: Remove solaris 1st party code OS checks. --- Makefile.in | 2 +- build/gyp.mozbuild | 1 - config/external/nss/Makefile.in | 19 --- dom/plugins/base/nptypes.h | 2 +- .../tests/test_htmleditor_keyevent_handling.html | 2 +- editor/reftests/xul/platform.js | 2 - js/src/Makefile.in | 10 -- .../ctypes/libffi/testsuite/libffi.call/float2.c | 10 -- js/src/moz.build | 8 -- memory/mozjemalloc/moz.build | 5 - .../components/osfile/modules/osfile_unix_back.jsm | 15 +-- toolkit/library/moz.build | 9 -- xpcom/reflect/xptcall/md/unix/Makefile.in | 12 -- xpcom/reflect/xptcall/md/unix/moz.build | 59 -------- .../md/unix/xptcinvoke_asm_sparc_solaris_GCC3.s | 52 ------- .../md/unix/xptcinvoke_asm_sparc_solaris_SUNW.s | 56 -------- .../md/unix/xptcinvoke_asm_sparcv9_solaris_SUNW.s | 85 ------------ .../md/unix/xptcinvoke_asm_x86_solaris_SUNW.s | 55 -------- .../xptcall/md/unix/xptcinvoke_sparc_solaris.cpp | 131 ------------------ .../xptcall/md/unix/xptcinvoke_sparcv9_solaris.cpp | 73 ---------- .../xptcall/md/unix/xptcinvoke_x86_64_solaris.cpp | 149 --------------------- .../xptcall/md/unix/xptcinvoke_x86_solaris.cpp | 67 --------- .../xptcall/md/unix/xptcstubs_asm_sparc_solaris.s | 49 ------- .../md/unix/xptcstubs_asm_sparcv9_solaris.s | 50 ------- .../md/unix/xptcstubs_asm_x86_64_solaris_SUNW.s | 63 --------- .../md/unix/xptcstubs_asm_x86_solaris_SUNW.s | 78 ----------- .../xptcall/md/unix/xptcstubs_sparc_solaris.cpp | 112 ---------------- .../xptcall/md/unix/xptcstubs_sparcv9_solaris.cpp | 101 -------------- .../xptcall/md/unix/xptcstubs_x86_64_solaris.cpp | 139 ------------------- .../xptcall/md/unix/xptcstubs_x86_solaris.cpp | 77 ----------- xpcom/reflect/xptcall/status.html | 14 -- 31 files changed, 7 insertions(+), 1500 deletions(-) delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_sparc_solaris_GCC3.s delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_sparc_solaris_SUNW.s delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_sparcv9_solaris_SUNW.s delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_x86_solaris_SUNW.s delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcinvoke_sparc_solaris.cpp delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcinvoke_sparcv9_solaris.cpp delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcinvoke_x86_64_solaris.cpp delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcinvoke_x86_solaris.cpp delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcstubs_asm_sparc_solaris.s delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcstubs_asm_sparcv9_solaris.s delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcstubs_asm_x86_64_solaris_SUNW.s delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcstubs_asm_x86_solaris_SUNW.s delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcstubs_sparc_solaris.cpp delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcstubs_sparcv9_solaris.cpp delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcstubs_x86_64_solaris.cpp delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcstubs_x86_solaris.cpp diff --git a/Makefile.in b/Makefile.in index 26cd688d4..4adf3ac9a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -290,7 +290,7 @@ MAKE_SYM_STORE_PATH := $(DIST)/bin endif DUMP_SYMS_BIN ?= $(DIST)/host/bin/dump_syms endif -ifeq (,$(filter-out Linux SunOS,$(OS_ARCH))) +ifeq (,$(filter-out Linux,$(OS_ARCH))) MAKE_SYM_STORE_ARGS := -c --vcs-info DUMP_SYMS_BIN ?= $(DIST)/host/bin/dump_syms MAKE_SYM_STORE_PATH := $(DIST)/bin diff --git a/build/gyp.mozbuild b/build/gyp.mozbuild index fd8714ecf..545b888bd 100644 --- a/build/gyp.mozbuild +++ b/build/gyp.mozbuild @@ -89,7 +89,6 @@ flavors = { 'Android': 'android', 'Linux': 'linux', 'Darwin': 'mac' if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa' else 'ios', - 'SunOS': 'solaris', 'GNU/kFreeBSD': 'freebsd', 'DragonFly': 'dragonfly', 'FreeBSD': 'freebsd', diff --git a/config/external/nss/Makefile.in b/config/external/nss/Makefile.in index 861b7d07d..2c266eb20 100644 --- a/config/external/nss/Makefile.in +++ b/config/external/nss/Makefile.in @@ -43,20 +43,6 @@ endif # Default HAVE_FREEBL_LIBS = 1 -# SunOS SPARC -ifeq ($(OS_ARCH), SunOS) -ifneq (86,$(findstring 86,$(OS_TEST))) -ifdef HAVE_64BIT_BUILD -HAVE_FREEBL_LIBS = -HAVE_FREEBL_LIBS_64 = 1 -else -HAVE_FREEBL_LIBS = -HAVE_FREEBL_LIBS_32FPU = 1 -HAVE_FREEBL_LIBS_32INT64 = 1 -endif -endif -endif - ifeq ($(OS_TARGET),Linux) HAVE_FREEBL_LIBS = HAVE_FREEBL_LIBS_PRIV = 1 @@ -331,11 +317,6 @@ NSS_DIST_DLL_DEST := $(DIST)/bin NSS_DIST_DLL_TARGET := target INSTALL_TARGETS += NSS_DIST_DLL -ifeq ($(OS_ARCH)_$(1), SunOS_softokn3) -# has to use copy mode on Solaris, see #665509 -$(DIST)/bin/$(DLL_PREFIX)softokn3$(DLL_SUFFIX): INSTALL := $(INSTALL) -t -endif - NSS_SDK_LIB_FILES := \ $(addprefix $(DIST)/lib/$(LIB_PREFIX),$(addsuffix .$(LIB_SUFFIX),$(SDK_LIBS))) \ $(addprefix $(DIST)/bin/$(DLL_PREFIX),$(addsuffix $(DLL_SUFFIX),$(NSS_DLLS))) \ diff --git a/dom/plugins/base/nptypes.h b/dom/plugins/base/nptypes.h index 12a5fb78e..a0762abe8 100644 --- a/dom/plugins/base/nptypes.h +++ b/dom/plugins/base/nptypes.h @@ -24,7 +24,7 @@ typedef unsigned long long uint64_t; #elif defined(_AIX) || defined(__sun) || defined(__osf__) || defined(IRIX) || defined(HPUX) /* - * AIX and SunOS ship a inttypes.h header that defines [u]int32_t, + * AIX ships an inttypes.h header that defines [u]int32_t, * but not bool for C. */ #include diff --git a/editor/libeditor/tests/test_htmleditor_keyevent_handling.html b/editor/libeditor/tests/test_htmleditor_keyevent_handling.html index bfec290a5..414045ac0 100644 --- a/editor/libeditor/tests/test_htmleditor_keyevent_handling.html +++ b/editor/libeditor/tests/test_htmleditor_keyevent_handling.html @@ -27,7 +27,7 @@ var htmlEditor = document.getElementById("htmlEditor"); const kIsMac = navigator.platform.indexOf("Mac") == 0; const kIsWin = navigator.platform.indexOf("Win") == 0; -const kIsLinux = navigator.platform.indexOf("Linux") == 0 || navigator.platform.indexOf("SunOS") == 0 ; +const kIsLinux = navigator.platform.indexOf("Linux") == 0; function runTests() { diff --git a/editor/reftests/xul/platform.js b/editor/reftests/xul/platform.js index f45e6d1f5..a8633fb09 100644 --- a/editor/reftests/xul/platform.js +++ b/editor/reftests/xul/platform.js @@ -13,8 +13,6 @@ if (/Windows/.test(ua)) { } else if (/Linux/.test(ua)) id = "linux"; -else if (/SunOS/.test(ua)) - id = "linux"; else if (/Mac OS X/.test(ua)) id = "mac"; diff --git a/js/src/Makefile.in b/js/src/Makefile.in index b007954b1..7f49a3718 100644 --- a/js/src/Makefile.in +++ b/js/src/Makefile.in @@ -146,16 +146,6 @@ ifeq ($(OS_ARCH),AIX) # 1540-1608: anonymous unions using static data members CFLAGS += -qsuppress=1540-1281 -qsuppress=1540-1608 CXXFLAGS += -qsuppress=1540-1281 -qsuppress=1540-1608 -endif -endif -ifeq ($(OS_ARCH),SunOS) -ifeq ($(TARGET_CPU),sparc) - -ifdef GNU_CC -CFLAGS += -mcpu=v9 -CXXFLAGS += -mcpu=v9 -endif # GNU_CC - endif endif diff --git a/js/src/ctypes/libffi/testsuite/libffi.call/float2.c b/js/src/ctypes/libffi/testsuite/libffi.call/float2.c index a0b296cf4..dfdef0598 100644 --- a/js/src/ctypes/libffi/testsuite/libffi.call/float2.c +++ b/js/src/ctypes/libffi/testsuite/libffi.call/float2.c @@ -32,21 +32,11 @@ int main (void) f = 3.14159; -#if 1 - /* This is ifdef'd out for now. long double support under SunOS/gcc - is pretty much non-existent. You'll get the odd bus error in library - routines like printf(). */ printf ("%Lf\n", ldblit(f)); -#endif ld = 666; ffi_call(&cif, FFI_FN(ldblit), &ld, values); -#if 1 - /* This is ifdef'd out for now. long double support under SunOS/gcc - is pretty much non-existent. You'll get the odd bus error in library - routines like printf(). */ printf ("%Lf, %Lf, %Lf, %Lf\n", ld, ldblit(f), ld - ldblit(f), LDBL_EPSILON); -#endif /* These are not always the same!! Check for a reasonable delta */ if (ld - ldblit(f) < LDBL_EPSILON) diff --git a/js/src/moz.build b/js/src/moz.build index a3283b5d6..888741138 100644 --- a/js/src/moz.build +++ b/js/src/moz.build @@ -722,14 +722,6 @@ if CONFIG['OS_ARCH'] == 'Linux': 'dl', ] -if CONFIG['OS_ARCH'] == 'SunOS': - OS_LIBS += [ - 'posix4', - 'dl', - 'nsl', - 'socket', - ] - OS_LIBS += CONFIG['REALTIME_LIBS'] CFLAGS += CONFIG['MOZ_ICU_CFLAGS'] diff --git a/memory/mozjemalloc/moz.build b/memory/mozjemalloc/moz.build index a7c1e5f2a..6408aac8c 100644 --- a/memory/mozjemalloc/moz.build +++ b/memory/mozjemalloc/moz.build @@ -13,11 +13,6 @@ SOURCES += [ ] FINAL_LIBRARY = 'memory' -# See bug 422055. -if CONFIG['OS_ARCH'] == 'SunOS' and not CONFIG['GNU_CC'] \ - and CONFIG['MOZ_OPTIMIZE']: - CFLAGS += ['-xO5'] - # For non release/esr builds, enable (some) fatal jemalloc assertions. This # helps us catch memory errors. if CONFIG['MOZ_UPDATE_CHANNEL'] not in ('release', 'esr'): diff --git a/toolkit/components/osfile/modules/osfile_unix_back.jsm b/toolkit/components/osfile/modules/osfile_unix_back.jsm index a028dda7d..bf5c66b8d 100644 --- a/toolkit/components/osfile/modules/osfile_unix_back.jsm +++ b/toolkit/components/osfile/modules/osfile_unix_back.jsm @@ -585,17 +585,10 @@ } else if (Const._STAT_VER != undefined) { const ver = Const._STAT_VER; let xstat_name, lxstat_name, fxstat_name; - if (OS.Constants.Sys.Name == "SunOS") { - // Solaris - xstat_name = "_xstat"; - lxstat_name = "_lxstat"; - fxstat_name = "_fxstat"; - } else { - // Linux, all widths - xstat_name = "__xstat"; - lxstat_name = "__lxstat"; - fxstat_name = "__fxstat"; - } + // Linux, all widths + xstat_name = "__xstat"; + lxstat_name = "__lxstat"; + fxstat_name = "__fxstat"; let Stat = {}; libc.declareLazyFFI(Stat, "xstat", diff --git a/toolkit/library/moz.build b/toolkit/library/moz.build index 5191b5a21..ba7fb5032 100644 --- a/toolkit/library/moz.build +++ b/toolkit/library/moz.build @@ -270,15 +270,6 @@ if CONFIG['MOZ_ENABLE_STARTUP_NOTIFICATION']: if CONFIG['MOZ_ENABLE_LIBPROXY']: OS_LIBS += CONFIG['MOZ_LIBPROXY_LIBS'] -if CONFIG['OS_ARCH'] == 'SunOS': - OS_LIBS += [ - 'elf', - ] - if CONFIG['GNU_CC']: - OS_LIBS += [ - 'demangle', - ] - if CONFIG['OS_ARCH'] == 'FreeBSD': OS_LIBS += [ 'util', diff --git a/xpcom/reflect/xptcall/md/unix/Makefile.in b/xpcom/reflect/xptcall/md/unix/Makefile.in index 716d79623..a023253cc 100644 --- a/xpcom/reflect/xptcall/md/unix/Makefile.in +++ b/xpcom/reflect/xptcall/md/unix/Makefile.in @@ -54,15 +54,3 @@ xptcstubs_asm_ppc_aix.s: xptcstubs_asm_ppc_aix.s.m4 $(DIST)/include/xptcstubsdef endif endif -ifeq ($(OS_ARCH),SunOS) -ifeq (86,$(findstring 86,$(OS_TEST))) -ifndef GNU_CC -xptcstubsdef_asm.solx86: $(DIST)/include/xptcstubsdef.inc - sed \ - -e 's/^\(STUB_ENTRY\)(\([0-9]\))/\11\(\2\)/' \ - -e 's/^\(STUB_ENTRY\)(\([0-9][0-9]\))/\12\(\2\)/' \ - -e 's/^\(STUB_ENTRY\)(\([0-9][0-9][0-9]\))/\13\(\2\)/' \ - $(DIST)/include/xptcstubsdef.inc > $@ -endif -endif -endif diff --git a/xpcom/reflect/xptcall/md/unix/moz.build b/xpcom/reflect/xptcall/md/unix/moz.build index 148d3bf35..49c09a7d4 100644 --- a/xpcom/reflect/xptcall/md/unix/moz.build +++ b/xpcom/reflect/xptcall/md/unix/moz.build @@ -46,36 +46,6 @@ if CONFIG['OS_ARCH'] in ('Linux', 'FreeBSD'): 'xptcstubs_ipf64.cpp' ] -if CONFIG['OS_ARCH'] == 'SunOS' and '86' in CONFIG['OS_TEST']: - GENERATED_FILES = [ - 'xptcstubsdef_asm.solx86', - ] - if CONFIG['OS_TEST'] == 'x86_64': - if CONFIG['GNU_CC']: - SOURCES += [ - 'xptcinvoke_x86_64_unix.cpp', - 'xptcstubs_x86_64_linux.cpp' - ] - else: - ASFLAGS += ['-xarch=amd64'] - SOURCES += [ - 'xptcinvoke_x86_64_solaris.cpp', - 'xptcstubs_asm_x86_64_solaris_SUNW.s', - 'xptcstubs_x86_64_solaris.cpp', - ] - else: - if CONFIG['GNU_CC']: - SOURCES += [ - 'xptcinvoke_gcc_x86_unix.cpp', - 'xptcstubs_gcc_x86_unix.cpp' - ] - else: - SOURCES += [ - 'xptcinvoke_asm_x86_solaris_SUNW.s', - 'xptcinvoke_x86_solaris.cpp', - 'xptcstubs_asm_x86_solaris_SUNW.s', - 'xptcstubs_x86_solaris.cpp' - ] if CONFIG['OS_TEST'] == 'alpha': if CONFIG['OS_ARCH'] in ('Linux', 'FreeBSD', 'NetBSD'): @@ -247,35 +217,6 @@ if CONFIG['OS_ARCH'] in ('OpenBSD', 'FreeBSD') and CONFIG['OS_TEST'] == 'sparc64 'xptcstubs_sparc64_openbsd.cpp', ] -if CONFIG['OS_ARCH'] == 'SunOS' and '86' not in CONFIG['OS_TEST']: - if CONFIG['HAVE_64BIT_BUILD']: - ASFLAGS += ['-xarch=v9'] - SOURCES += [ - 'xptcinvoke_sparcv9_solaris.cpp', - 'xptcstubs_sparcv9_solaris.cpp', - ] - else: - SOURCES += [ - 'xptcinvoke_sparc_solaris.cpp', - 'xptcstubs_sparc_solaris.cpp', - ] - if CONFIG['GNU_CC']: - SOURCES += [ - 'xptcinvoke_asm_sparc_solaris_GCC3.s', - 'xptcstubs_asm_sparc_solaris.s', - ] - else: - if CONFIG['HAVE_64BIT_BUILD']: - SOURCES += [ - 'xptcinvoke_asm_sparcv9_solaris_SUNW.s', - 'xptcstubs_asm_sparcv9_solaris.s', - ] - else: - SOURCES += [ - 'xptcinvoke_asm_sparc_solaris_SUNW.s', - 'xptcstubs_asm_sparc_solaris.s', - ] - if CONFIG['OS_ARCH'] == 'Linux': if CONFIG['OS_TEST'] == 's390': SOURCES += [ diff --git a/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_sparc_solaris_GCC3.s b/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_sparc_solaris_GCC3.s deleted file mode 100644 index 54adcd147..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_sparc_solaris_GCC3.s +++ /dev/null @@ -1,52 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/* - * Platform specific code to invoke XPCOM methods on native objects for - * solaris/sparc with gcc 3 ABI. - */ - .global NS_InvokeByIndex -/* - * NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex, - * uint32_t paramCount, nsXPTCVariant* params); - */ -NS_InvokeByIndex: - save %sp,-(64 + 32),%sp ! room for the register window and - ! struct pointer, rounded up to 0 % 32 - mov %i2,%o0 ! paramCount - call invoke_count_words ! returns the required stack size in %o0 - mov %i3,%o1 ! params - - sll %o0,2,%l0 ! number of bytes - sub %sp,%l0,%sp ! create the additional stack space - - mov %sp,%o0 ! pointer for copied args - add %o0,72,%o0 ! step past the register window, the - ! struct result pointer and the 'this' slot - mov %i2,%o1 ! paramCount - call invoke_copy_to_stack - mov %i3,%o2 ! params -! -! calculate the target address from the vtable -! - ld [%i0],%l1 ! *that --> vTable - sll %i1,2,%i1 ! multiply index by 4 - add %i1,%l1,%l1 ! l1 now points to vTable entry - ld [%l1],%l0 ! target address - -.L5: ld [%sp + 88],%o5 -.L4: ld [%sp + 84],%o4 -.L3: ld [%sp + 80],%o3 -.L2: ld [%sp + 76],%o2 -.L1: ld [%sp + 72],%o1 -.L0: - jmpl %l0,%o7 ! call the routine -! always have a 'this', from the incoming 'that' - mov %i0,%o0 - - mov %o0,%i0 ! propagate return value - ret - restore diff --git a/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_sparc_solaris_SUNW.s b/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_sparc_solaris_SUNW.s deleted file mode 100644 index 013770392..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_sparc_solaris_SUNW.s +++ /dev/null @@ -1,56 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/* Platform specific code to invoke XPCOM methods on native objects */ - - .global NS_InvokeByIndex - .type NS_InvokeByIndex, #function -/* - NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex, - uint32_t paramCount, nsXPTCVariant* params); - -*/ -NS_InvokeByIndex: - save %sp,-(64 + 32),%sp ! room for the register window and - ! struct pointer, rounded up to 0 % 32 - sll %i2,3,%l0 ! assume the worst case - ! paramCount * 2 * 4 bytes - cmp %l0, 0 ! are there any args? If not, - be .invoke ! no need to copy args to stack - - sub %sp,%l0,%sp ! create the additional stack space - add %sp,72,%o0 ! step past the register window, the - ! struct result pointer and the 'this' slot - mov %i2,%o1 ! paramCount - call invoke_copy_to_stack - mov %i3,%o2 ! params - -! -! load arguments from stack into the outgoing registers -! - ld [%sp + 72],%o1 - ld [%sp + 76],%o2 - ld [%sp + 80],%o3 - ld [%sp + 84],%o4 - ld [%sp + 88],%o5 - -! -! calculate the target address from the vtable -! -.invoke: - sll %i1,2,%l0 ! index *= 4 - add %l0,8,%l0 ! there are 2 extra entries in the vTable - ld [%i0],%l1 ! *that --> address of vtable - ld [%l0 + %l1],%l0 ! that->vtable[index * 4 + 8] --> address - - jmpl %l0,%o7 ! call the routine - mov %i0,%o0 ! move 'this' pointer to out register - - mov %o0,%i0 ! propagate return value - ret - restore - - .size NS_InvokeByIndex, .-NS_InvokeByIndex diff --git a/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_sparcv9_solaris_SUNW.s b/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_sparcv9_solaris_SUNW.s deleted file mode 100644 index 34861abc0..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_sparcv9_solaris_SUNW.s +++ /dev/null @@ -1,85 +0,0 @@ -/* -*- Mode: asm; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/* - Platform specific code to invoke XPCOM methods on native objects - for sparcv9 Solaris. - - See the SPARC Compliance Definition (SCD) Chapter 3 - for more information about what is going on here, including - the use of BIAS (0x7ff). - The SCD is available from http://www.sparc.com/. -*/ - - .global NS_InvokeByIndex - .type NS_InvokeByIndex, #function - -/* - NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex, - uint32_t paramCount, nsXPTCVariant* params); - -*/ -NS_InvokeByIndex: - save %sp,-(128 + 64),%sp ! room for the register window and - ! struct pointer, rounded up to 0 % 64 - sll %i2,4,%l0 ! assume the worst case - ! paramCount * 2 * 8 bytes - cmp %l0, 0 ! are there any args? If not, - be .invoke ! no need to copy args to stack - - sub %sp,%l0,%sp ! create the additional stack space - add %sp,0x7ff+136,%o0 ! step past the register window, the - ! struct result pointer and the 'this' slot - mov %i2,%o1 ! paramCount - call invoke_copy_to_stack - mov %i3,%o2 ! params - -! -! load arguments from stack into the outgoing registers -! BIAS is 0x7ff (2047) -! - -! load the %o1..5 64bit (extended word) output registers registers - ldx [%sp + 0x7ff + 136],%o1 ! %i1 - ldx [%sp + 0x7ff + 144],%o2 ! %i2 - ldx [%sp + 0x7ff + 152],%o3 ! %i3 - ldx [%sp + 0x7ff + 160],%o4 ! %i4 - ldx [%sp + 0x7ff + 168],%o5 ! %i5 - -! load the even number double registers starting with %d2 - ldd [%sp + 0x7ff + 136],%d2 - ldd [%sp + 0x7ff + 144],%d4 - ldd [%sp + 0x7ff + 152],%d6 - ldd [%sp + 0x7ff + 160],%d8 - ldd [%sp + 0x7ff + 168],%d10 - ldd [%sp + 0x7ff + 176],%d12 - ldd [%sp + 0x7ff + 184],%d14 - ldd [%sp + 0x7ff + 192],%d16 - ldd [%sp + 0x7ff + 200],%d18 - ldd [%sp + 0x7ff + 208],%d20 - ldd [%sp + 0x7ff + 216],%d22 - ldd [%sp + 0x7ff + 224],%d24 - ldd [%sp + 0x7ff + 232],%d26 - ldd [%sp + 0x7ff + 240],%d28 - ldd [%sp + 0x7ff + 248],%d30 - -! -! calculate the target address from the vtable -! -.invoke: - sll %i1,3,%l0 ! index *= 8 - add %l0,16,%l0 ! there are 2 extra entries in the vTable (16bytes) - ldx [%i0],%l1 ! *that --> address of vtable - ldx [%l0 + %l1],%l0 ! that->vtable[index * 8 + 16] --> address - - jmpl %l0,%o7 ! call the routine - mov %i0,%o0 ! move 'this' pointer to out register - - mov %o0,%i0 ! propagate return value - ret - restore - - .size NS_InvokeByIndex, .-NS_InvokeByIndex diff --git a/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_x86_solaris_SUNW.s b/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_x86_solaris_SUNW.s deleted file mode 100644 index af665a162..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_x86_solaris_SUNW.s +++ /dev/null @@ -1,55 +0,0 @@ - .globl NS_InvokeByIndex - .type NS_InvokeByIndex, @function -NS_InvokeByIndex: - push %ebp - movl %esp,%ebp - push %ebx - call .CG0.66 -.CG0.66: - pop %ebx - addl $_GLOBAL_OFFSET_TABLE_+0x1,%ebx - push 20(%ebp) - push 16(%ebp) - push 12(%ebp) - push 8(%ebp) - / INLINE: invoke_by_index - - - - pushl %ebx - pushl %esi - movl %esp, %ebx - - pushl 0x14(%ebp) - pushl 0x10(%ebp) - call invoke_count_words - mov %ebx, %esp - - sall $0x2 , %eax - subl %eax, %esp - movl %esp, %esi - - pushl %esp - pushl 0x14(%ebp) - pushl 0x10(%ebp) - call invoke_copy_to_stack - movl %esi, %esp - - movl 0x8(%ebp), %ecx - pushl %ecx - movl (%ecx), %edx - movl 0xc(%ebp), %eax - movl 0x8(%edx, %eax, 4), %edx - - call *%edx - mov %ebx, %esp - popl %esi - popl %ebx - / INLINE_END - addl $16,%esp - pop %ebx - movl %ebp,%esp - pop %ebp - ret - .size NS_InvokeByIndex, . - NS_InvokeByIndex - diff --git a/xpcom/reflect/xptcall/md/unix/xptcinvoke_sparc_solaris.cpp b/xpcom/reflect/xptcall/md/unix/xptcinvoke_sparc_solaris.cpp deleted file mode 100644 index 126ef1dad..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcinvoke_sparc_solaris.cpp +++ /dev/null @@ -1,131 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/* Platform specific code to invoke XPCOM methods on native objects */ - -#include "xptcprivate.h" - -/* solaris defines __sparc for workshop compilers and - linux defines __sparc__ */ - -#if !defined(__sparc) && !defined(__sparc__) -#error "This code is for Sparc only" -#endif - -typedef unsigned nsXPCVariant; - -extern "C" uint32_t -invoke_count_words(uint32_t paramCount, nsXPTCVariant* s) -{ - uint32_t result = 0; - for(uint32_t i = 0; i < paramCount; i++, s++) - { - if(s->IsPtrData()) - { - result++; - continue; - } - switch(s->type) - { - case nsXPTType::T_I8 : - case nsXPTType::T_I16 : - case nsXPTType::T_I32 : - result++; - break; - case nsXPTType::T_I64 : - result+=2; - break; - case nsXPTType::T_U8 : - case nsXPTType::T_U16 : - case nsXPTType::T_U32 : - result++; - break; - case nsXPTType::T_U64 : - result+=2; - break; - case nsXPTType::T_FLOAT : - result++; - break; - case nsXPTType::T_DOUBLE : - result+=2; - break; - case nsXPTType::T_BOOL : - case nsXPTType::T_CHAR : - case nsXPTType::T_WCHAR : - result++; - break; - default: - // all the others are plain pointer types - result++; - break; - } - } - // nuts, I know there's a cooler way of doing this, but it's late - // now and it'll probably come to me in the morning. - if (result & 0x3) result += 4 - (result & 0x3); // ensure q-word alignment - return result; -} - -extern "C" uint32_t -invoke_copy_to_stack(uint32_t* d, uint32_t paramCount, nsXPTCVariant* s) -{ -/* - We need to copy the parameters for this function to locals and use them - from there since the parameters occupy the same stack space as the stack - we're trying to populate. -*/ - uint32_t *l_d = d; - nsXPTCVariant *l_s = s; - uint32_t l_paramCount = paramCount; - uint32_t regCount = 0; // return the number of registers to load from the stack - - typedef struct { - uint32_t hi; - uint32_t lo; - } DU; // have to move 64 bit entities as 32 bit halves since - // stack slots are not guaranteed 16 byte aligned - - for(uint32_t i = 0; i < l_paramCount; i++, l_d++, l_s++) - { - if (regCount < 5) regCount++; - if(l_s->IsPtrData()) - { - if(l_s->type == nsXPTType::T_JSVAL) - { - // On SPARC, we need to pass a pointer to HandleValue - *((void**)l_d) = &l_s->ptr; - } else - { - *((void**)l_d) = l_s->ptr; - } - continue; - } - switch(l_s->type) - { - case nsXPTType::T_I8 : *((int32_t*) l_d) = l_s->val.i8; break; - case nsXPTType::T_I16 : *((int32_t*) l_d) = l_s->val.i16; break; - case nsXPTType::T_I32 : *((int32_t*) l_d) = l_s->val.i32; break; - case nsXPTType::T_I64 : - case nsXPTType::T_U64 : - case nsXPTType::T_DOUBLE : *((uint32_t*) l_d++) = ((DU *)l_s)->hi; - if (regCount < 5) regCount++; - *((uint32_t*) l_d) = ((DU *)l_s)->lo; - break; - case nsXPTType::T_U8 : *((uint32_t*) l_d) = l_s->val.u8; break; - case nsXPTType::T_U16 : *((uint32_t*) l_d) = l_s->val.u16; break; - case nsXPTType::T_U32 : *((uint32_t*) l_d) = l_s->val.u32; break; - case nsXPTType::T_FLOAT : *((float*) l_d) = l_s->val.f; break; - case nsXPTType::T_BOOL : *((uint32_t*) l_d) = l_s->val.b; break; - case nsXPTType::T_CHAR : *((uint32_t*) l_d) = l_s->val.c; break; - case nsXPTType::T_WCHAR : *((int32_t*) l_d) = l_s->val.wc; break; - default: - // all the others are plain pointer types - *((void**)l_d) = l_s->val.p; - break; - } - } - return regCount; -} - diff --git a/xpcom/reflect/xptcall/md/unix/xptcinvoke_sparcv9_solaris.cpp b/xpcom/reflect/xptcall/md/unix/xptcinvoke_sparcv9_solaris.cpp deleted file mode 100644 index 0d2d6b0a8..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcinvoke_sparcv9_solaris.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - - -/* Platform specific code to invoke XPCOM methods on native objects */ - -#include "xptcprivate.h" - -#if !defined(__sparc) && !defined(__sparc__) -#error "This code is for Sparc only" -#endif - -/* Prototype specifies unmangled function name */ -extern "C" uint64_t -invoke_copy_to_stack(uint64_t* d, uint32_t paramCount, nsXPTCVariant* s); - -extern "C" uint64_t -invoke_copy_to_stack(uint64_t* d, uint32_t paramCount, nsXPTCVariant* s) -{ - /* - We need to copy the parameters for this function to locals and use them - from there since the parameters occupy the same stack space as the stack - we're trying to populate. - */ - uint64_t *l_d = d; - nsXPTCVariant *l_s = s; - uint64_t l_paramCount = paramCount; - uint64_t regCount = 0; // return the number of registers to load from the stack - - for(uint64_t i = 0; i < l_paramCount; i++, l_d++, l_s++) - { - if (regCount < 5) regCount++; - - if (l_s->IsPtrData()) - { - *l_d = (uint64_t)l_s->ptr; - continue; - } - switch (l_s->type) - { - case nsXPTType::T_I8 : *((int64_t*)l_d) = l_s->val.i8; break; - case nsXPTType::T_I16 : *((int64_t*)l_d) = l_s->val.i16; break; - case nsXPTType::T_I32 : *((int64_t*)l_d) = l_s->val.i32; break; - case nsXPTType::T_I64 : *((int64_t*)l_d) = l_s->val.i64; break; - - case nsXPTType::T_U8 : *((uint64_t*)l_d) = l_s->val.u8; break; - case nsXPTType::T_U16 : *((uint64_t*)l_d) = l_s->val.u16; break; - case nsXPTType::T_U32 : *((uint64_t*)l_d) = l_s->val.u32; break; - case nsXPTType::T_U64 : *((uint64_t*)l_d) = l_s->val.u64; break; - - /* in the case of floats, we want to put the bits in to the - 64bit space right justified... floats in the parameter array on - sparcv9 use odd numbered registers.. %f1, %f3, so we have to skip - the space that would be occupied by %f0, %f2, etc. - */ - case nsXPTType::T_FLOAT : *(((float*)l_d) + 1) = l_s->val.f; break; - case nsXPTType::T_DOUBLE: *((double*)l_d) = l_s->val.d; break; - case nsXPTType::T_BOOL : *((uint64_t*)l_d) = l_s->val.b; break; - case nsXPTType::T_CHAR : *((uint64_t*)l_d) = l_s->val.c; break; - case nsXPTType::T_WCHAR : *((int64_t*)l_d) = l_s->val.wc; break; - - default: - // all the others are plain pointer types - *((void**)l_d) = l_s->val.p; - break; - } - } - - return regCount; -} diff --git a/xpcom/reflect/xptcall/md/unix/xptcinvoke_x86_64_solaris.cpp b/xpcom/reflect/xptcall/md/unix/xptcinvoke_x86_64_solaris.cpp deleted file mode 100644 index 0d3424366..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcinvoke_x86_64_solaris.cpp +++ /dev/null @@ -1,149 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -// Platform specific code to invoke XPCOM methods on native objects - -#include "xptcprivate.h" -#include "alloca.h" - -// 6 integral parameters are passed in registers -const uint32_t GPR_COUNT = 6; - -// 8 floating point parameters are passed in SSE registers -const uint32_t FPR_COUNT = 8; - -// Remember that these 'words' are 64-bit long -static inline void -invoke_count_words(uint32_t paramCount, nsXPTCVariant * s, - uint32_t & nr_gpr, uint32_t & nr_fpr, uint32_t & nr_stack) -{ - nr_gpr = 1; // skip one GP register for 'that' - nr_fpr = 0; - nr_stack = 0; - - /* Compute number of eightbytes of class MEMORY. */ - for (uint32_t i = 0; i < paramCount; i++, s++) { - if (!s->IsPtrData() - && (s->type == nsXPTType::T_FLOAT || s->type == nsXPTType::T_DOUBLE)) { - if (nr_fpr < FPR_COUNT) - nr_fpr++; - else - nr_stack++; - } - else { - if (nr_gpr < GPR_COUNT) - nr_gpr++; - else - nr_stack++; - } - } -} - -static void -invoke_copy_to_stack(uint64_t * d, uint32_t paramCount, nsXPTCVariant * s, - uint64_t * gpregs, double * fpregs) -{ - uint32_t nr_gpr = 1; // skip one GP register for 'that' - uint32_t nr_fpr = 0; - uint64_t value; - - for (uint32_t i = 0; i < paramCount; i++, s++) { - if (s->IsPtrData()) - value = (uint64_t) s->ptr; - else { - switch (s->type) { - case nsXPTType::T_FLOAT: break; - case nsXPTType::T_DOUBLE: break; - case nsXPTType::T_I8: value = s->val.i8; break; - case nsXPTType::T_I16: value = s->val.i16; break; - case nsXPTType::T_I32: value = s->val.i32; break; - case nsXPTType::T_I64: value = s->val.i64; break; - case nsXPTType::T_U8: value = s->val.u8; break; - case nsXPTType::T_U16: value = s->val.u16; break; - case nsXPTType::T_U32: value = s->val.u32; break; - case nsXPTType::T_U64: value = s->val.u64; break; - case nsXPTType::T_BOOL: value = s->val.b; break; - case nsXPTType::T_CHAR: value = s->val.c; break; - case nsXPTType::T_WCHAR: value = s->val.wc; break; - default: value = (uint64_t) s->val.p; break; - } - } - - if (!s->IsPtrData() && s->type == nsXPTType::T_DOUBLE) { - if (nr_fpr < FPR_COUNT) - fpregs[nr_fpr++] = s->val.d; - else { - *((double *)d) = s->val.d; - d++; - } - } - else if (!s->IsPtrData() && s->type == nsXPTType::T_FLOAT) { - if (nr_fpr < FPR_COUNT) - // The value in %xmm register is already prepared to - // be retrieved as a float. Therefore, we pass the - // value verbatim, as a double without conversion. - fpregs[nr_fpr++] = s->val.d; - else { - *((float *)d) = s->val.f; - d++; - } - } - else { - if (nr_gpr < GPR_COUNT) - gpregs[nr_gpr++] = value; - else - *d++ = value; - } - } -} - -// Avoid AddressSanitizer instrumentation for the next function because it -// depends on __builtin_alloca behavior and alignment that cannot be relied on -// once the function is compiled with a version of ASan that has dynamic-alloca -// instrumentation enabled. - -MOZ_ASAN_BLACKLIST -EXPORT_XPCOM_API(nsresult) -NS_InvokeByIndex(nsISupports * that, uint32_t methodIndex, - uint32_t paramCount, nsXPTCVariant * params) -{ - uint32_t nr_gpr, nr_fpr, nr_stack; - invoke_count_words(paramCount, params, nr_gpr, nr_fpr, nr_stack); - - // Stack, if used, must be 16-bytes aligned - if (nr_stack) - nr_stack = (nr_stack + 1) & ~1; - - // Load parameters to stack, if necessary - uint64_t *stack = (uint64_t *) __builtin_alloca(nr_stack * 8); - uint64_t gpregs[GPR_COUNT]; - double fpregs[FPR_COUNT]; - invoke_copy_to_stack(stack, paramCount, params, gpregs, fpregs); - - switch (nr_fpr) { - case 8: asm("movupd %0, %xmm7" : : "xmm7" (fpregs[7])); - case 7: asm("movupd %0, %xmm6" : : "xmm6" (fpregs[6])); - case 6: asm("movupd %0, %xmm5" : : "xmm5" (fpregs[5])); - case 5: asm("movupd %0, %xmm4" : : "xmm4" (fpregs[4])); - case 4: asm("movupd %0, %xmm3" : : "xmm3" (fpregs[3])); - case 3: asm("movupd %0, %xmm2" : : "xmm2" (fpregs[2])); - case 2: asm("movupd %0, %xmm1" : : "xmm1" (fpregs[1])); - case 1: asm("movupd %0, %xmm0" : : "xmm0" (fpregs[0])); - case 0:; - } - - // Ensure that assignments to SSE registers won't be optimized away - asm("" ::: "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7"); - - // Get pointer to method - uint64_t methodAddress = *((uint64_t *)that); - methodAddress += 16 + 8 * methodIndex; - methodAddress = *((uint64_t *)methodAddress); - - typedef uint32_t (*Method)(uint64_t, uint64_t, uint64_t, uint64_t, uint64_t, uint64_t); - uint32_t result = ((Method)methodAddress)((uint64_t)that, gpregs[1], gpregs[2], gpregs[3], gpregs[4], gpregs[5]); - return result; -} diff --git a/xpcom/reflect/xptcall/md/unix/xptcinvoke_x86_solaris.cpp b/xpcom/reflect/xptcall/md/unix/xptcinvoke_x86_solaris.cpp deleted file mode 100644 index f545fcc99..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcinvoke_x86_solaris.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/* Platform specific code to invoke XPCOM methods on native objects */ - -#include "xptcprivate.h" - -extern "C" { - -// Remember that these 'words' are 32bit DWORDS - -uint32_t -invoke_count_words(uint32_t paramCount, nsXPTCVariant* s) -{ - uint32_t result = 0; - for(uint32_t i = 0; i < paramCount; i++, s++) - { - if(s->IsPtrData()) - { - result++; - continue; - } - result++; - switch(s->type) - { - case nsXPTType::T_I64 : - case nsXPTType::T_U64 : - case nsXPTType::T_DOUBLE : - result++; - break; - } - } - return result; -} - -void -invoke_copy_to_stack(uint32_t paramCount, nsXPTCVariant* s, uint32_t* d) -{ - for(uint32_t i = 0; i < paramCount; i++, d++, s++) - { - if(s->IsPtrData()) - { - *((void**)d) = s->ptr; - continue; - } - -/* XXX: the following line is here (rather than as the default clause in - * the following switch statement) so that the Sun native compiler - * will generate the correct assembly code on the Solaris Intel - * platform. See the comments in bug #28817 for more details. - */ - - *((void**)d) = s->val.p; - - switch(s->type) - { - case nsXPTType::T_I64 : *((int64_t*) d) = s->val.i64; d++; break; - case nsXPTType::T_U64 : *((uint64_t*)d) = s->val.u64; d++; break; - case nsXPTType::T_DOUBLE : *((double*) d) = s->val.d; d++; break; - } - } -} - -} diff --git a/xpcom/reflect/xptcall/md/unix/xptcstubs_asm_sparc_solaris.s b/xpcom/reflect/xptcall/md/unix/xptcstubs_asm_sparc_solaris.s deleted file mode 100644 index 9b448d7c7..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcstubs_asm_sparc_solaris.s +++ /dev/null @@ -1,49 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - - .global SharedStub - -/* - in the frame for the function that called SharedStub are the - rest of the parameters we need - -*/ - -SharedStub: -! we don't create a new frame yet, but work within the frame of the calling -! function to give ourselves the other parameters we want - - mov %o0, %o1 ! shuffle the index up to 2nd place - mov %i0, %o0 ! the original 'this' - add %fp, 72, %o2 ! previous stack top adjusted to the first argument slot (beyond 'this') -! save off the original incoming parameters that arrived in -! registers, the ABI guarantees the space for us to do this - st %i1, [%fp + 72] - st %i2, [%fp + 76] - st %i3, [%fp + 80] - st %i4, [%fp + 84] - st %i5, [%fp + 88] -! now we can build our own stack frame - save %sp,-(64 + 32),%sp ! room for the register window and - ! struct pointer, rounded up to 0 % 32 -! our function now appears to have been called -! as SharedStub(nsISupports* that, uint32_t index, uint32_t* args) -! so we can just copy these through - - mov %i0, %o0 - mov %i1, %o1 - mov %i2, %o2 - call PrepareAndDispatch - nop - mov %o0,%i0 ! propagate return value - b .LL1 - nop -.LL1: - ret - restore - - .size SharedStub, .-SharedStub - .type SharedStub, #function diff --git a/xpcom/reflect/xptcall/md/unix/xptcstubs_asm_sparcv9_solaris.s b/xpcom/reflect/xptcall/md/unix/xptcstubs_asm_sparcv9_solaris.s deleted file mode 100644 index ab97a890c..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcstubs_asm_sparcv9_solaris.s +++ /dev/null @@ -1,50 +0,0 @@ -/* -*- Mode: asm; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - - .global SharedStub - -/* - in the frame for the function that called SharedStub are the - rest of the parameters we need - -*/ - -SharedStub: -! we don't create a new frame yet, but work within the frame of the calling -! function to give ourselves the other parameters we want - - mov %o0, %o1 ! shuffle the index up to 2nd place - mov %i0, %o0 ! the original 'this' - add %fp, 0x7ff + 136, %o2 ! previous stack top adjusted to the first argument slot (beyond 'this') - -! save off the original incoming parameters that arrived in -! registers, the ABI guarantees the space for us to do this - stx %i1, [%fp + 0x7ff + 136] - stx %i2, [%fp + 0x7ff + 144] - stx %i3, [%fp + 0x7ff + 152] - stx %i4, [%fp + 0x7ff + 160] - stx %i5, [%fp + 0x7ff + 168] -! now we can build our own stack frame - save %sp,-(128 + 64),%sp ! room for the register window and - ! struct pointer, rounded up to 0 % 64 -! our function now appears to have been called -! as SharedStub(nsISupports* that, uint32_t index, uint32_t* args) -! so we can just copy these through - - mov %i0, %o0 - mov %i1, %o1 - mov %i2, %o2 - call PrepareAndDispatch - nop - mov %o0,%i0 ! propagate return value - b .LL1 - nop -.LL1: - ret - restore - - .size SharedStub, .-SharedStub - .type SharedStub, #function diff --git a/xpcom/reflect/xptcall/md/unix/xptcstubs_asm_x86_64_solaris_SUNW.s b/xpcom/reflect/xptcall/md/unix/xptcstubs_asm_x86_64_solaris_SUNW.s deleted file mode 100644 index aa6d84434..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcstubs_asm_x86_64_solaris_SUNW.s +++ /dev/null @@ -1,63 +0,0 @@ -#define STUB_ENTRY1(nn) \ - .globl __1cOnsXPTCStubBaseFStub/**/nn/**/6M_I_; \ - .hidden __1cOnsXPTCStubBaseFStub/**/nn/**/6M_I_; \ - .type __1cOnsXPTCStubBaseFStub/**/nn/**/6M_I_, @function; \ -__1cOnsXPTCStubBaseFStub/**/nn/**/6M_I_: \ - movl $/**/nn/**/, %eax; \ - jmp SharedStub; \ - .size __1cOnsXPTCStubBaseFStub/**/nn/**/6M_I_, . - __1cOnsXPTCStubBaseFStub/**/nn/**/6M_I_ \ - -#define STUB_ENTRY2(nn) \ - .globl __1cOnsXPTCStubBaseGStub/**/nn/**/6M_I_; \ - .hidden __1cOnsXPTCStubBaseGStub/**/nn/**/6M_I_; \ - .type __1cOnsXPTCStubBaseGStub/**/nn/**/6M_I_, @function; \ -__1cOnsXPTCStubBaseGStub/**/nn/**/6M_I_: \ - movl $/**/nn/**/, %eax; \ - jmp SharedStub; \ - .size __1cOnsXPTCStubBaseGStub/**/nn/**/6M_I_, . - __1cOnsXPTCStubBaseGStub/**/nn/**/6M_I_ \ - -#define STUB_ENTRY3(nn) \ - .globl __1cOnsXPTCStubBaseHStub/**/nn/**/6M_I_; \ - .hidden __1cOnsXPTCStubBaseHStub/**/nn/**/6M_I_; \ - .type __1cOnsXPTCStubBaseHStub/**/nn/**/6M_I_, @function; \ -__1cOnsXPTCStubBaseHStub/**/nn/**/6M_I_: \ - movl $/**/nn/**/, %eax; \ - jmp SharedStub; \ - .size __1cOnsXPTCStubBaseHStub/**/nn/**/6M_I_, . - __1cOnsXPTCStubBaseHStub/**/nn/**/6M_I_ \ - -// static nsresult SharedStub(uint32_t methodIndex) - .type SharedStub, @function; - SharedStub: - // make room for gpregs (48), fpregs (64) - pushq %rbp; - movq %rsp,%rbp; - subq $112,%rsp; - // save GP registers - movq %rdi,-112(%rbp); - movq %rsi,-104(%rbp); - movq %rdx, -96(%rbp); - movq %rcx, -88(%rbp); - movq %r8 , -80(%rbp); - movq %r9 , -72(%rbp); - leaq -112(%rbp),%rcx; - // save FP registers - movsd %xmm0,-64(%rbp); - movsd %xmm1,-56(%rbp); - movsd %xmm2,-48(%rbp); - movsd %xmm3,-40(%rbp); - movsd %xmm4,-32(%rbp); - movsd %xmm5,-24(%rbp); - movsd %xmm6,-16(%rbp); - movsd %xmm7, -8(%rbp); - leaq -64(%rbp),%r8; - // rdi has the 'self' pointer already - movl %eax,%esi; - leaq 16(%rbp),%rdx; - call PrepareAndDispatch@plt; - leave; - ret; - .size SharedStub, . - SharedStub - -#define SENTINEL_ENTRY(nn) - -#include "xptcstubsdef_asm.solx86" diff --git a/xpcom/reflect/xptcall/md/unix/xptcstubs_asm_x86_solaris_SUNW.s b/xpcom/reflect/xptcall/md/unix/xptcstubs_asm_x86_solaris_SUNW.s deleted file mode 100644 index 76bdcf925..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcstubs_asm_x86_solaris_SUNW.s +++ /dev/null @@ -1,78 +0,0 @@ -#define STUB_ENTRY1(nn) \ - .globl __1cOnsXPTCStubBaseFStub/**/nn/**/6M_I_; \ - .type __1cOnsXPTCStubBaseFStub/**/nn/**/6M_I_, @function; \ -__1cOnsXPTCStubBaseFStub/**/nn/**/6M_I_: \ - push %ebp; \ - movl %esp,%ebp; \ - andl $-16,%esp; \ - push %ebx; \ - call .CG4./**/nn/**/; \ -.CG4./**/nn/**/: \ - pop %ebx; \ - addl $_GLOBAL_OFFSET_TABLE_+0x1,%ebx; \ - leal 0xc(%ebp), %ecx; \ - pushl %ecx; \ - pushl $/**/nn/**/; \ - movl 0x8(%ebp), %ecx; \ - pushl %ecx; \ - call __1cSPrepareAndDispatch6FpnOnsXPTCStubBase_IpI_I_; \ - addl $0xc , %esp; \ - pop %ebx; \ - movl %ebp,%esp; \ - pop %ebp; \ - ret ; \ - .size __1cOnsXPTCStubBaseFStub/**/nn/**/6M_I_, . - __1cOnsXPTCStubBaseFStub/**/nn/**/6M_I_ \ - -#define STUB_ENTRY2(nn) \ - .globl __1cOnsXPTCStubBaseGStub/**/nn/**/6M_I_; \ - .type __1cOnsXPTCStubBaseGStub/**/nn/**/6M_I_, @function; \ -__1cOnsXPTCStubBaseGStub/**/nn/**/6M_I_: \ - push %ebp; \ - movl %esp,%ebp; \ - andl $-16,%esp; \ - push %ebx; \ - call .CG4./**/nn/**/; \ -.CG4./**/nn/**/: \ - pop %ebx; \ - addl $_GLOBAL_OFFSET_TABLE_+0x1,%ebx; \ - leal 0xc(%ebp), %ecx; \ - pushl %ecx; \ - pushl $/**/nn/**/; \ - movl 0x8(%ebp), %ecx; \ - pushl %ecx; \ - call __1cSPrepareAndDispatch6FpnOnsXPTCStubBase_IpI_I_; \ - addl $0xc , %esp; \ - pop %ebx; \ - movl %ebp,%esp; \ - pop %ebp; \ - ret ; \ - .size __1cOnsXPTCStubBaseGStub/**/nn/**/6M_I_, . - __1cOnsXPTCStubBaseGStub/**/nn/**/6M_I_ \ - -#define STUB_ENTRY3(nn) \ - .globl __1cOnsXPTCStubBaseHStub/**/nn/**/6M_I_; \ - .type __1cOnsXPTCStubBaseHStub/**/nn/**/6M_I_, @function; \ -__1cOnsXPTCStubBaseHStub/**/nn/**/6M_I_: \ - push %ebp; \ - movl %esp,%ebp; \ - andl $-16,%esp; \ - push %ebx; \ - call .CG4./**/nn/**/; \ -.CG4./**/nn/**/: \ - pop %ebx; \ - addl $_GLOBAL_OFFSET_TABLE_+0x1,%ebx; \ - leal 0xc(%ebp), %ecx; \ - pushl %ecx; \ - pushl $/**/nn/**/; \ - movl 0x8(%ebp), %ecx; \ - pushl %ecx; \ - call __1cSPrepareAndDispatch6FpnOnsXPTCStubBase_IpI_I_; \ - addl $0xc , %esp; \ - pop %ebx; \ - movl %ebp,%esp; \ - pop %ebp; \ - ret ; \ - .size __1cOnsXPTCStubBaseHStub/**/nn/**/6M_I_, . - __1cOnsXPTCStubBaseHStub/**/nn/**/6M_I_ \ - -#define SENTINEL_ENTRY(nn) - -#include "xptcstubsdef_asm.solx86" diff --git a/xpcom/reflect/xptcall/md/unix/xptcstubs_sparc_solaris.cpp b/xpcom/reflect/xptcall/md/unix/xptcstubs_sparc_solaris.cpp deleted file mode 100644 index 61f3df4ff..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcstubs_sparc_solaris.cpp +++ /dev/null @@ -1,112 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/* Implement shared vtbl methods. */ - -#include "xptcprivate.h" -#include "xptiprivate.h" - -#if defined(sparc) || defined(__sparc__) - -extern "C" nsresult ATTRIBUTE_USED -PrepareAndDispatch(nsXPTCStubBase* self, uint32_t methodIndex, uint32_t* args) -{ - - typedef struct { - uint32_t hi; - uint32_t lo; - } DU; // have to move 64 bit entities as 32 bit halves since - // stack slots are not guaranteed 16 byte aligned - -#define PARAM_BUFFER_COUNT 16 - - nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT]; - nsXPTCMiniVariant* dispatchParams = nullptr; - const nsXPTMethodInfo* info; - uint8_t paramCount; - uint8_t i; - nsresult result = NS_ERROR_FAILURE; - - NS_ASSERTION(self,"no self"); - - self->mEntry->GetMethodInfo(uint16_t(methodIndex), &info); - NS_ASSERTION(info,"no interface info"); - - paramCount = info->GetParamCount(); - - // setup variant array pointer - if(paramCount > PARAM_BUFFER_COUNT) - dispatchParams = new nsXPTCMiniVariant[paramCount]; - else - dispatchParams = paramBuffer; - NS_ASSERTION(dispatchParams,"no place for params"); - - uint32_t* ap = args; - for(i = 0; i < paramCount; i++, ap++) - { - const nsXPTParamInfo& param = info->GetParam(i); - const nsXPTType& type = param.GetType(); - nsXPTCMiniVariant* dp = &dispatchParams[i]; - - if(param.IsOut() || !type.IsArithmetic()) - { - if (type == nsXPTType::T_JSVAL) - dp->val.p = *((void**) *ap); - else - dp->val.p = (void*) *ap; - continue; - } - // else - switch(type) - { - case nsXPTType::T_I8 : dp->val.i8 = *((int32_t*) ap); break; - case nsXPTType::T_I16 : dp->val.i16 = *((int32_t*) ap); break; - case nsXPTType::T_I32 : dp->val.i32 = *((int32_t*) ap); break; - case nsXPTType::T_DOUBLE : - case nsXPTType::T_U64 : - case nsXPTType::T_I64 : ((DU *)dp)->hi = ((DU *)ap)->hi; - ((DU *)dp)->lo = ((DU *)ap)->lo; - ap++; - break; - case nsXPTType::T_U8 : dp->val.u8 = *((uint32_t*)ap); break; - case nsXPTType::T_U16 : dp->val.u16 = *((uint32_t*)ap); break; - case nsXPTType::T_U32 : dp->val.u32 = *((uint32_t*)ap); break; - case nsXPTType::T_FLOAT : dp->val.f = *((float*) ap); break; - case nsXPTType::T_BOOL : dp->val.b = *((uint32_t*)ap); break; - case nsXPTType::T_CHAR : dp->val.c = *((uint32_t*)ap); break; - case nsXPTType::T_WCHAR : dp->val.wc = *((int32_t*) ap); break; - default: - NS_ERROR("bad type"); - break; - } - } - - result = self->mOuter->CallMethod((uint16_t)methodIndex, info, dispatchParams); - - if(dispatchParams != paramBuffer) - delete [] dispatchParams; - - return result; -} - -extern "C" nsresult SharedStub(int, int*); - -#define STUB_ENTRY(n) \ -nsresult nsXPTCStubBase::Stub##n() \ -{ \ - int dummy; /* defeat tail-call optimization */ \ - return SharedStub(n, &dummy); \ -} - -#define SENTINEL_ENTRY(n) \ -nsresult nsXPTCStubBase::Sentinel##n() \ -{ \ - NS_ERROR("nsXPTCStubBase::Sentinel called"); \ - return NS_ERROR_NOT_IMPLEMENTED; \ -} - -#include "xptcstubsdef.inc" - -#endif /* sparc || __sparc__ */ diff --git a/xpcom/reflect/xptcall/md/unix/xptcstubs_sparcv9_solaris.cpp b/xpcom/reflect/xptcall/md/unix/xptcstubs_sparcv9_solaris.cpp deleted file mode 100644 index 583ce9864..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcstubs_sparcv9_solaris.cpp +++ /dev/null @@ -1,101 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/* Implement shared vtbl methods. */ - -#include "xptcprivate.h" -#include "xptiprivate.h" - -#if defined(sparc) || defined(__sparc__) - -extern "C" nsresult ATTRIBUTE_USED -PrepareAndDispatch(nsXPTCStubBase* self, uint64_t methodIndex, uint64_t* args) -{ - -#define PARAM_BUFFER_COUNT 16 - - nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT]; - nsXPTCMiniVariant* dispatchParams = nullptr; - const nsXPTMethodInfo* info; - uint8_t paramCount; - uint8_t i; - nsresult result = NS_ERROR_FAILURE; - - NS_ASSERTION(self,"no self"); - - self->mEntry->GetMethodInfo(uint16_t(methodIndex), &info); - NS_ASSERTION(info,"no interface info"); - - paramCount = info->GetParamCount(); - - // setup variant array pointer - if(paramCount > PARAM_BUFFER_COUNT) - dispatchParams = new nsXPTCMiniVariant[paramCount]; - else - dispatchParams = paramBuffer; - NS_ASSERTION(dispatchParams,"no place for params"); - - uint64_t* ap = args; - for(i = 0; i < paramCount; i++, ap++) - { - const nsXPTParamInfo& param = info->GetParam(i); - const nsXPTType& type = param.GetType(); - nsXPTCMiniVariant* dp = &dispatchParams[i]; - - if(param.IsOut() || !type.IsArithmetic()) - { - dp->val.p = (void*) *ap; - continue; - } - // else - switch(type) - { - case nsXPTType::T_I8 : dp->val.i8 = *((int64_t*) ap); break; - case nsXPTType::T_I16 : dp->val.i16 = *((int64_t*) ap); break; - case nsXPTType::T_I32 : dp->val.i32 = *((int64_t*) ap); break; - case nsXPTType::T_DOUBLE : dp->val.d = *((double*) ap); break; - case nsXPTType::T_U64 : dp->val.u64 = *((uint64_t*)ap); break; - case nsXPTType::T_I64 : dp->val.i64 = *((int64_t*) ap); break; - case nsXPTType::T_U8 : dp->val.u8 = *((uint64_t*)ap); break; - case nsXPTType::T_U16 : dp->val.u16 = *((uint64_t*)ap); break; - case nsXPTType::T_U32 : dp->val.u32 = *((uint64_t*)ap); break; - case nsXPTType::T_FLOAT : dp->val.f = ((float*) ap)[1]; break; - case nsXPTType::T_BOOL : dp->val.b = *((uint64_t*)ap); break; - case nsXPTType::T_CHAR : dp->val.c = *((uint64_t*)ap); break; - case nsXPTType::T_WCHAR : dp->val.wc = *((int64_t*) ap); break; - default: - NS_ERROR("bad type"); - break; - } - } - - result = self->mOuter->CallMethod((uint16_t)methodIndex, info, dispatchParams); - - if(dispatchParams != paramBuffer) - delete [] dispatchParams; - - return result; -} - -extern "C" nsresult SharedStub(int, int*); - -#define STUB_ENTRY(n) \ -nsresult nsXPTCStubBase::Stub##n() \ -{ \ - int dummy; /* defeat tail-call optimization */ \ - return SharedStub(n, &dummy); \ -} - -#define SENTINEL_ENTRY(n) \ -nsresult nsXPTCStubBase::Sentinel##n() \ -{ \ - NS_ERROR("nsXPTCStubBase::Sentinel called"); \ - return NS_ERROR_NOT_IMPLEMENTED; \ -} - -#include "xptcstubsdef.inc" - -#endif /* sparc || __sparc__ */ diff --git a/xpcom/reflect/xptcall/md/unix/xptcstubs_x86_64_solaris.cpp b/xpcom/reflect/xptcall/md/unix/xptcstubs_x86_64_solaris.cpp deleted file mode 100644 index 677fa9960..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcstubs_x86_64_solaris.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -// Implement shared vtbl methods. - -// Keep this in sync with the darwin version. - -#include "xptcprivate.h" -#include "xptiprivate.h" - -// The Linux/x86-64 ABI passes the first 6 integer parameters and the -// first 8 floating point parameters in registers (rdi, rsi, rdx, rcx, -// r8, r9 and xmm0-xmm7), no stack space is allocated for these by the -// caller. The rest of the parameters are passed in the callers stack -// area. - -const uint32_t PARAM_BUFFER_COUNT = 16; -const uint32_t GPR_COUNT = 6; -const uint32_t FPR_COUNT = 8; - -// PrepareAndDispatch() is called by SharedStub() and calls the actual method. -// -// - 'args[]' contains the arguments passed on stack -// - 'gpregs[]' contains the arguments passed in integer registers -// - 'fpregs[]' contains the arguments passed in floating point registers -// -// The parameters are mapped into an array of type 'nsXPTCMiniVariant' -// and then the method gets called. - -extern "C" nsresult ATTRIBUTE_USED -PrepareAndDispatch(nsXPTCStubBase * self, uint32_t methodIndex, - uint64_t * args, uint64_t * gpregs, double *fpregs) -{ - nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT]; - nsXPTCMiniVariant* dispatchParams = nullptr; - const nsXPTMethodInfo* info; - uint32_t paramCount; - uint32_t i; - nsresult result = NS_ERROR_FAILURE; - - NS_ASSERTION(self,"no self"); - - self->mEntry->GetMethodInfo(uint16_t(methodIndex), &info); - NS_ASSERTION(info,"no method info"); - if (!info) - return NS_ERROR_UNEXPECTED; - - paramCount = info->GetParamCount(); - - // setup variant array pointer - if (paramCount > PARAM_BUFFER_COUNT) - dispatchParams = new nsXPTCMiniVariant[paramCount]; - else - dispatchParams = paramBuffer; - - NS_ASSERTION(dispatchParams,"no place for params"); - if (!dispatchParams) - return NS_ERROR_OUT_OF_MEMORY; - - uint64_t* ap = args; - uint32_t nr_gpr = 1; // skip one GPR register for 'that' - uint32_t nr_fpr = 0; - uint64_t value; - - for (i = 0; i < paramCount; i++) { - const nsXPTParamInfo& param = info->GetParam(i); - const nsXPTType& type = param.GetType(); - nsXPTCMiniVariant* dp = &dispatchParams[i]; - - if (!param.IsOut() && type == nsXPTType::T_DOUBLE) { - if (nr_fpr < FPR_COUNT) - dp->val.d = fpregs[nr_fpr++]; - else - dp->val.d = *(double*) ap++; - continue; - } - else if (!param.IsOut() && type == nsXPTType::T_FLOAT) { - if (nr_fpr < FPR_COUNT) - // The value in %xmm register is already prepared to - // be retrieved as a float. Therefore, we pass the - // value verbatim, as a double without conversion. - dp->val.d = fpregs[nr_fpr++]; - else - dp->val.f = *(float*) ap++; - continue; - } - else { - if (nr_gpr < GPR_COUNT) - value = gpregs[nr_gpr++]; - else - value = *ap++; - } - - if (param.IsOut() || !type.IsArithmetic()) { - dp->val.p = (void*) value; - continue; - } - - switch (type) { - case nsXPTType::T_I8: dp->val.i8 = (int8_t) value; break; - case nsXPTType::T_I16: dp->val.i16 = (int16_t) value; break; - case nsXPTType::T_I32: dp->val.i32 = (int32_t) value; break; - case nsXPTType::T_I64: dp->val.i64 = (int64_t) value; break; - case nsXPTType::T_U8: dp->val.u8 = (uint8_t) value; break; - case nsXPTType::T_U16: dp->val.u16 = (uint16_t) value; break; - case nsXPTType::T_U32: dp->val.u32 = (uint32_t) value; break; - case nsXPTType::T_U64: dp->val.u64 = (uint64_t) value; break; - // Cast to uint8_t first, to remove garbage on upper 56 bits. - case nsXPTType::T_BOOL: dp->val.b = (bool)(uint8_t) value; break; - case nsXPTType::T_CHAR: dp->val.c = (char) value; break; - case nsXPTType::T_WCHAR: dp->val.wc = (wchar_t) value; break; - - default: - NS_ERROR("bad type"); - break; - } - } - - result = self->mOuter->CallMethod((uint16_t) methodIndex, info, dispatchParams); - - if (dispatchParams != paramBuffer) - delete [] dispatchParams; - - return result; -} - -#define STUB_ENTRY(n) - -#define SENTINEL_ENTRY(n) \ -nsresult nsXPTCStubBase::Sentinel##n() \ -{ \ - NS_ERROR("nsXPTCStubBase::Sentinel called"); \ - return NS_ERROR_NOT_IMPLEMENTED; \ -} - -#include "xptcstubsdef.inc" diff --git a/xpcom/reflect/xptcall/md/unix/xptcstubs_x86_solaris.cpp b/xpcom/reflect/xptcall/md/unix/xptcstubs_x86_solaris.cpp deleted file mode 100644 index 39eec5e54..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcstubs_x86_solaris.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/* Implement shared vtbl methods. */ - -#include "xptcprivate.h" -#include "xptiprivate.h" - -nsresult ATTRIBUTE_USED -PrepareAndDispatch(nsXPTCStubBase* self, uint32_t methodIndex, uint32_t* args) -{ -#define PARAM_BUFFER_COUNT 16 - - nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT]; - nsXPTCMiniVariant* dispatchParams = nullptr; - const nsXPTMethodInfo* info; - uint8_t paramCount; - uint8_t i; - nsresult result = NS_ERROR_FAILURE; - - NS_ASSERTION(self,"no self"); - - self->mEntry->GetMethodInfo(uint16_t(methodIndex), &info); - NS_ASSERTION(info,"no interface info"); - - paramCount = info->GetParamCount(); - - // setup variant array pointer - if(paramCount > PARAM_BUFFER_COUNT) - dispatchParams = new nsXPTCMiniVariant[paramCount]; - else - dispatchParams = paramBuffer; - NS_ASSERTION(dispatchParams,"no place for params"); - - uint32_t* ap = args; - for(i = 0; i < paramCount; i++, ap++) - { - const nsXPTParamInfo& param = info->GetParam(i); - const nsXPTType& type = param.GetType(); - nsXPTCMiniVariant* dp = &dispatchParams[i]; - - if(param.IsOut() || !type.IsArithmetic()) - { - dp->val.p = (void*) *ap; - continue; - } - // else - dp->val.p = (void*) *ap; - switch(type) - { - case nsXPTType::T_I64 : dp->val.i64 = *((int64_t*) ap); ap++; break; - case nsXPTType::T_U64 : dp->val.u64 = *((uint64_t*)ap); ap++; break; - case nsXPTType::T_DOUBLE : dp->val.d = *((double*) ap); ap++; break; - } - } - - result = self->mOuter->CallMethod((uint16_t)methodIndex, info, dispatchParams); - - if(dispatchParams != paramBuffer) - delete [] dispatchParams; - - return result; -} - -#define STUB_ENTRY(n) - -#define SENTINEL_ENTRY(n) \ -nsresult nsXPTCStubBase::Sentinel##n() \ -{ \ - NS_ERROR("nsXPTCStubBase::Sentinel called"); \ - return NS_ERROR_NOT_IMPLEMENTED; \ -} - -#include "xptcstubsdef.inc" diff --git a/xpcom/reflect/xptcall/status.html b/xpcom/reflect/xptcall/status.html index 7f8e54a0c..4e18bba35 100644 --- a/xpcom/reflect/xptcall/status.html +++ b/xpcom/reflect/xptcall/status.html @@ -239,20 +239,6 @@ a port. - -Done -SunOS x86 - -Contributed code! -Arthur Jones <aljones@lbl.gov>
-? -Philip Pokorny <ppokorny@mindspring.com>
- - -The word I hear is that this is working and done - - - Done AIX PPC -- cgit v1.2.3 From 1bf6a5c7da242bef3e68f95c47173a1db12da7c4 Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Sun, 31 Mar 2019 15:27:49 +0200 Subject: Remove 18 yo OS/2 and AIX bustage workaround. Tag #186 --- layout/generic/nsLineBox.h | 92 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 73 insertions(+), 19 deletions(-) diff --git a/layout/generic/nsLineBox.h b/layout/generic/nsLineBox.h index 8f42b9e93..962279df6 100644 --- a/layout/generic/nsLineBox.h +++ b/layout/generic/nsLineBox.h @@ -857,29 +857,47 @@ class nsLineList_iterator { return --copy; } - // Passing by value rather than by reference and reference to const - // to keep AIX happy. - bool operator==(const iterator_self_type aOther) const + bool operator==(const iterator_self_type& aOther) const { MOZ_ASSERT(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent == aOther.mCurrent; } - bool operator!=(const iterator_self_type aOther) const + bool operator!=(const iterator_self_type& aOther) const { MOZ_ASSERT(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent != aOther.mCurrent; } - bool operator==(const iterator_self_type aOther) + bool operator==(const iterator_self_type& aOther) { MOZ_ASSERT(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent == aOther.mCurrent; } - bool operator!=(const iterator_self_type aOther) + bool operator!=(const iterator_self_type& aOther) { MOZ_ASSERT(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent != aOther.mCurrent; } - + bool operator==(iterator_self_type& aOther) const + { + MOZ_ASSERT(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent == aOther.mCurrent; + } + bool operator!=(iterator_self_type& aOther) const + { + MOZ_ASSERT(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent != aOther.mCurrent; + } + bool operator==(iterator_self_type& aOther) + { + MOZ_ASSERT(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent == aOther.mCurrent; + } + bool operator!=(iterator_self_type& aOther) + { + MOZ_ASSERT(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent != aOther.mCurrent; + } + private: link_type *mCurrent; #ifdef DEBUG @@ -992,24 +1010,42 @@ class nsLineList_reverse_iterator { } #endif /* !__MWERKS__ */ - // Passing by value rather than by reference and reference to const - // to keep AIX happy. - bool operator==(const iterator_self_type aOther) const + bool operator==(const iterator_self_type& aOther) const { NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent == aOther.mCurrent; } - bool operator!=(const iterator_self_type aOther) const + bool operator!=(const iterator_self_type& aOther) const { NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent != aOther.mCurrent; } - bool operator==(const iterator_self_type aOther) + bool operator==(const iterator_self_type& aOther) { NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent == aOther.mCurrent; } - bool operator!=(const iterator_self_type aOther) + bool operator!=(const iterator_self_type& aOther) + { + NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent != aOther.mCurrent; + } + bool operator==(iterator_self_type& aOther) const + { + NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent == aOther.mCurrent; + } + bool operator!=(iterator_self_type& aOther) const + { + NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent != aOther.mCurrent; + } + bool operator==(iterator_self_type& aOther) + { + NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent == aOther.mCurrent; + } + bool operator!=(iterator_self_type& aOther) { NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent != aOther.mCurrent; @@ -1126,24 +1162,42 @@ class nsLineList_const_iterator { return --copy; } - // Passing by value rather than by reference and reference to const - // to keep AIX happy. - bool operator==(const iterator_self_type aOther) const + bool operator==(const iterator_self_type& aOther) const { NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent == aOther.mCurrent; } - bool operator!=(const iterator_self_type aOther) const + bool operator!=(const iterator_self_type& aOther) const { NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent != aOther.mCurrent; } - bool operator==(const iterator_self_type aOther) + bool operator==(const iterator_self_type& aOther) { NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent == aOther.mCurrent; } - bool operator!=(const iterator_self_type aOther) + bool operator!=(const iterator_self_type& aOther) + { + NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent != aOther.mCurrent; + } + bool operator==(iterator_self_type& aOther) const + { + NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent == aOther.mCurrent; + } + bool operator!=(iterator_self_type& aOther) const + { + NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent != aOther.mCurrent; + } + bool operator==(iterator_self_type& aOther) + { + NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent == aOther.mCurrent; + } + bool operator!=(iterator_self_type& aOther) { NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent != aOther.mCurrent; -- cgit v1.2.3 From 49a3f5a53793d75cd243936e22f99b798e84c84b Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Sun, 31 Mar 2019 18:20:08 +0200 Subject: Remove AIX VisualAge C++ compiler bug workaround. Tag #186 --- dom/base/nsAttrAndChildArray.cpp | 9 +-------- dom/base/nsMappedAttributes.h | 11 ++--------- 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/dom/base/nsAttrAndChildArray.cpp b/dom/base/nsAttrAndChildArray.cpp index b285ee003..9fd27262b 100644 --- a/dom/base/nsAttrAndChildArray.cpp +++ b/dom/base/nsAttrAndChildArray.cpp @@ -78,15 +78,8 @@ GetIndexFromCache(const nsAttrAndChildArray* aArray) } -/** - * Due to a compiler bug in VisualAge C++ for AIX, we need to return the - * address of the first index into mBuffer here, instead of simply returning - * mBuffer itself. - * - * See Bug 231104 for more information. - */ #define ATTRS(_impl) \ - reinterpret_cast(&((_impl)->mBuffer[0])) + reinterpret_cast((_impl)->mBuffer) #define NS_IMPL_EXTRA_SIZE \ diff --git a/dom/base/nsMappedAttributes.h b/dom/base/nsMappedAttributes.h index 9fa7572dd..f00b888b9 100644 --- a/dom/base/nsMappedAttributes.h +++ b/dom/base/nsMappedAttributes.h @@ -93,20 +93,13 @@ private: nsAttrValue mValue; }; - /** - * Due to a compiler bug in VisualAge C++ for AIX, we need to return the - * address of the first index into mAttrs here, instead of simply - * returning mAttrs itself. - * - * See Bug 231104 for more information. - */ const InternalAttr* Attrs() const { - return reinterpret_cast(&(mAttrs[0])); + return reinterpret_cast(mAttrs); } InternalAttr* Attrs() { - return reinterpret_cast(&(mAttrs[0])); + return reinterpret_cast(mAttrs); } uint16_t mAttrCount; -- cgit v1.2.3 From 5d409fdca92e085dad2f9c80b42f33afe4f10800 Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Sun, 31 Mar 2019 18:43:10 +0200 Subject: Remove AIX 1st party code OS checks, part 1 Issue #186 --- accessible/atk/Platform.cpp | 4 - config/rules.mk | 9 - dom/plugins/base/nptypes.h | 12 -- dom/plugins/base/nsPluginsDirUnix.cpp | 3 - js/public/LegacyIntTypes.h | 10 -- js/src/Makefile.in | 11 -- js/src/jsnativestack.cpp | 15 -- xpcom/build/nsXPCOMPrivate.h | 4 - xpcom/io/nsLocalFile.h | 7 - xpcom/io/nsLocalFileUnix.h | 5 - xpcom/reflect/xptcall/md/unix/Makefile.in | 18 -- xpcom/reflect/xptcall/md/unix/moz.build | 23 --- .../xptcall/md/unix/xptcinvoke_asm_ppc_aix.s | 129 -------------- .../xptcall/md/unix/xptcinvoke_asm_ppc_aix64.s | 128 -------------- .../md/unix/xptcinvoke_asm_ppc_ibmobj_aix.s | 124 -------------- .../reflect/xptcall/md/unix/xptcinvoke_ppc_aix.cpp | 74 --------- .../xptcall/md/unix/xptcinvoke_ppc_aix64.cpp | 63 ------- .../xptcall/md/unix/xptcstubs_asm_ppc_aix.s.m4 | 119 ------------- .../xptcall/md/unix/xptcstubs_asm_ppc_aix64.s.m4 | 97 ----------- .../reflect/xptcall/md/unix/xptcstubs_ppc_aix.cpp | 185 --------------------- .../xptcall/md/unix/xptcstubs_ppc_aix64.cpp | 172 ------------------- xpcom/reflect/xptcall/status.html | 11 -- xpcom/threads/nsThread.cpp | 4 +- 23 files changed, 1 insertion(+), 1226 deletions(-) delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_ppc_aix.s delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_ppc_aix64.s delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_ppc_ibmobj_aix.s delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcinvoke_ppc_aix.cpp delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcinvoke_ppc_aix64.cpp delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcstubs_asm_ppc_aix.s.m4 delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcstubs_asm_ppc_aix64.s.m4 delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcstubs_ppc_aix.cpp delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcstubs_ppc_aix64.cpp diff --git a/accessible/atk/Platform.cpp b/accessible/atk/Platform.cpp index e64084f5a..0ee3a3d97 100644 --- a/accessible/atk/Platform.cpp +++ b/accessible/atk/Platform.cpp @@ -60,11 +60,7 @@ struct GnomeAccessibilityModule }; static GnomeAccessibilityModule sAtkBridge = { -#ifdef AIX - "libatk-bridge.a(libatk-bridge.so.0)", nullptr, -#else "libatk-bridge.so", nullptr, -#endif "gnome_accessibility_module_init", nullptr, "gnome_accessibility_module_shutdown", nullptr }; diff --git a/config/rules.mk b/config/rules.mk index 9a8f61c2d..567971b19 100644 --- a/config/rules.mk +++ b/config/rules.mk @@ -386,15 +386,6 @@ endif endif endif -ifeq ($(OS_ARCH),AIX) -ifdef IS_COMPONENT -ifneq ($(HAS_EXTRAEXPORTS),1) -MKSHLIB += -bE:$(MOZILLA_DIR)/build/unix/aix.exp -bnoexpall -MKCSHLIB += -bE:$(MOZILLA_DIR)/build/unix/aix.exp -bnoexpall -endif # HAS_EXTRAEXPORTS -endif # IS_COMPONENT -endif # AIX - # # Linux: add -Bsymbolic flag for components # diff --git a/dom/plugins/base/nptypes.h b/dom/plugins/base/nptypes.h index a0762abe8..c36532472 100644 --- a/dom/plugins/base/nptypes.h +++ b/dom/plugins/base/nptypes.h @@ -22,18 +22,6 @@ typedef unsigned int uint32_t; typedef long long int64_t; typedef unsigned long long uint64_t; -#elif defined(_AIX) || defined(__sun) || defined(__osf__) || defined(IRIX) || defined(HPUX) - /* - * AIX ships an inttypes.h header that defines [u]int32_t, - * but not bool for C. - */ - #include - - #ifndef __cplusplus - typedef int bool; - #define true 1 - #define false 0 - #endif #elif defined(bsdi) || defined(FREEBSD) || defined(OPENBSD) /* * BSD/OS, FreeBSD, and OpenBSD ship sys/types.h that define int32_t and diff --git a/dom/plugins/base/nsPluginsDirUnix.cpp b/dom/plugins/base/nsPluginsDirUnix.cpp index 1c7a635d3..2ca703baa 100644 --- a/dom/plugins/base/nsPluginsDirUnix.cpp +++ b/dom/plugins/base/nsPluginsDirUnix.cpp @@ -24,9 +24,6 @@ #undef LOCAL_PLUGIN_DLL_SUFFIX #define LOCAL_PLUGIN_DLL_SUFFIX ".sl" #define LOCAL_PLUGIN_DLL_ALT_SUFFIX ".so" -#elif defined(_AIX) -#define DEFAULT_X11_PATH "/usr/lib" -#define LOCAL_PLUGIN_DLL_ALT_SUFFIX ".a" #elif defined(LINUX) #define DEFAULT_X11_PATH "/usr/X11R6/lib/" #elif defined(__APPLE__) diff --git a/js/public/LegacyIntTypes.h b/js/public/LegacyIntTypes.h index 2c8498c89..cdfd98726 100644 --- a/js/public/LegacyIntTypes.h +++ b/js/public/LegacyIntTypes.h @@ -31,20 +31,10 @@ typedef uint16_t uint16; typedef uint32_t uint32; typedef uint64_t uint64; -/* - * On AIX 4.3, sys/inttypes.h (which is included by sys/types.h, a very - * common header file) defines the types int8, int16, int32, and int64. - * So we don't define these four types here to avoid conflicts in case - * the code also includes sys/types.h. - */ -#if defined(AIX) && defined(HAVE_SYS_INTTYPES_H) -#include -#else typedef int8_t int8; typedef int16_t int16; typedef int32_t int32; typedef int64_t int64; -#endif /* AIX && HAVE_SYS_INTTYPES_H */ typedef uint8_t JSUint8; typedef uint16_t JSUint16; diff --git a/js/src/Makefile.in b/js/src/Makefile.in index 7f49a3718..20678c68c 100644 --- a/js/src/Makefile.in +++ b/js/src/Makefile.in @@ -138,17 +138,6 @@ distclean:: CFLAGS += $(MOZ_ZLIB_CFLAGS) -# Silence warnings on AIX/HP-UX from non-GNU compilers -ifndef GNU_CC -ifeq ($(OS_ARCH),AIX) -# Suppress warnings from xlC -# 1540-1281: offsetof() on null non-POD types -# 1540-1608: anonymous unions using static data members -CFLAGS += -qsuppress=1540-1281 -qsuppress=1540-1608 -CXXFLAGS += -qsuppress=1540-1281 -qsuppress=1540-1608 -endif -endif - $(LIBRARY_NAME).pc: js.pc cp $^ $@ diff --git a/js/src/jsnativestack.cpp b/js/src/jsnativestack.cpp index 95e0f8da7..98f8fc741 100644 --- a/js/src/jsnativestack.cpp +++ b/js/src/jsnativestack.cpp @@ -71,21 +71,6 @@ js::GetNativeStackBaseImpl() # endif } -#elif defined(AIX) - -#include - -JS_STATIC_ASSERT(JS_STACK_GROWTH_DIRECTION < 0); - -void* -js::GetNativeStackBaseImpl() -{ - ucontext_t context; - getcontext(&context); - return static_cast(context.uc_stack.ss_sp) + - context.uc_stack.ss_size; -} - #elif defined(XP_LINUX) && !defined(ANDROID) && defined(__GLIBC__) void* js::GetNativeStackBaseImpl() diff --git a/xpcom/build/nsXPCOMPrivate.h b/xpcom/build/nsXPCOMPrivate.h index 99a994013..143ed034e 100644 --- a/xpcom/build/nsXPCOMPrivate.h +++ b/xpcom/build/nsXPCOMPrivate.h @@ -281,10 +281,6 @@ void LogTerm(); #error need_to_define_your_file_path_separator_and_illegal_characters #endif -#ifdef AIX -#include -#endif - #ifndef MAXPATHLEN #ifdef PATH_MAX #define MAXPATHLEN PATH_MAX diff --git a/xpcom/io/nsLocalFile.h b/xpcom/io/nsLocalFile.h index f7bdb86f7..a8e0a1279 100644 --- a/xpcom/io/nsLocalFile.h +++ b/xpcom/io/nsLocalFile.h @@ -91,15 +91,8 @@ nsresultForErrno(int aErr) case EROFS: /* Read-only file system. */ return NS_ERROR_FILE_READ_ONLY; #endif - /* - * On AIX 4.3, ENOTEMPTY is defined as EEXIST, - * so there can't be cases for both without - * preprocessing. - */ -#if ENOTEMPTY != EEXIST case ENOTEMPTY: return NS_ERROR_FILE_DIR_NOT_EMPTY; -#endif /* ENOTEMPTY != EEXIST */ /* Note that nsIFile.createUnique() returns NS_ERROR_FILE_TOO_BIG when it cannot create a temporary file with a unique filename. diff --git a/xpcom/io/nsLocalFileUnix.h b/xpcom/io/nsLocalFileUnix.h index 9a3e7d6af..5ef581ed1 100644 --- a/xpcom/io/nsLocalFileUnix.h +++ b/xpcom/io/nsLocalFileUnix.h @@ -65,11 +65,6 @@ // stat64 and lstat64 are deprecated on OS X. Normal stat and lstat are // 64-bit by default on OS X 10.6+. #if defined(HAVE_STAT64) && defined(HAVE_LSTAT64) && !defined(XP_DARWIN) - #if defined (AIX) - #if defined STAT - #undef STAT - #endif - #endif #define STAT stat64 #define LSTAT lstat64 #define HAVE_STATS64 1 diff --git a/xpcom/reflect/xptcall/md/unix/Makefile.in b/xpcom/reflect/xptcall/md/unix/Makefile.in index a023253cc..4a5bc6f02 100644 --- a/xpcom/reflect/xptcall/md/unix/Makefile.in +++ b/xpcom/reflect/xptcall/md/unix/Makefile.in @@ -24,13 +24,6 @@ endif # PowerPC ###################################################################### # -# AIX/PPC -# -ifeq ($(OS_ARCH),AIX) -# #24617 Building the CPP's (CXX) optimized causes a crash -CXXFLAGS := $(filter-out $(MOZ_OPTIMIZE_FLAGS), $(CXXFLAGS)) -endif - include $(topsrcdir)/config/rules.mk ifeq ($(OS_ARCH),Linux) @@ -43,14 +36,3 @@ ifeq ($(OS_ARCH),Darwin) xptcstubs_asm_ppc_darwin.s: xptcstubs_asm_ppc_darwin.s.m4 $(DIST)/include/xptcstubsdef.inc Makefile gm4 $(INCLUDES) $< > $@ endif - -ifeq ($(OS_ARCH),AIX) -ifdef HAVE_64BIT_BUILD -xptcstubs_asm_ppc_aix64.s: xptcstubs_asm_ppc_aix64.s.m4 $(DIST)/include/xptcstubsdef.inc Makefile - m4 -DAIX_OBJMODEL=$(AIX_OBJMODEL) $(INCLUDES) -I. $< > $@ -else -xptcstubs_asm_ppc_aix.s: xptcstubs_asm_ppc_aix.s.m4 $(DIST)/include/xptcstubsdef.inc Makefile - m4 -DAIX_OBJMODEL=$(AIX_OBJMODEL) $(INCLUDES) -I. $< > $@ -endif -endif - diff --git a/xpcom/reflect/xptcall/md/unix/moz.build b/xpcom/reflect/xptcall/md/unix/moz.build index 49c09a7d4..d455ed854 100644 --- a/xpcom/reflect/xptcall/md/unix/moz.build +++ b/xpcom/reflect/xptcall/md/unix/moz.build @@ -127,29 +127,6 @@ if CONFIG['OS_ARCH'] in ('Linux', 'FreeBSD', 'NetBSD', 'OpenBSD'): 'xptcstubs_mips.cpp', ] -if CONFIG['OS_ARCH'] == 'AIX': - if CONFIG['HAVE_64BIT_BUILD']: - SOURCES += [ - '!xptcstubs_asm_ppc_aix64.s', - 'xptcinvoke_asm_ppc_aix64.s', - 'xptcinvoke_ppc_aix64.cpp', - 'xptcstubs_ppc_aix64.cpp', - ] - else: - SOURCES += [ - '!xptcstubs_asm_ppc_aix.s', - 'xptcinvoke_ppc_aix.cpp', - 'xptcstubs_ppc_aix.cpp', - ] - if CONFIG['AIX_OBJMODEL'] == 'ibm': - SOURCES += [ - 'xptcinvoke_asm_ppc_ibmobj_aix.s', - ] - else: - SOURCES += [ - 'xptcinvoke_asm_ppc_aix.s', - ] - if CONFIG['OS_TEST'] == 'powerpc': if CONFIG['OS_ARCH'] in ('Linux', 'FreeBSD'): SOURCES += [ diff --git a/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_ppc_aix.s b/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_ppc_aix.s deleted file mode 100644 index eb6b6661d..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_ppc_aix.s +++ /dev/null @@ -1,129 +0,0 @@ -# -# -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -.set r0,0; .set sp,1; .set RTOC,2; .set r3,3; .set r4,4 -.set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9 -.set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14 -.set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19 -.set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24 -.set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29 -.set r30,30; .set r31,31 -.set f0,0; .set f1,1; .set f2,2; .set f3,3; .set f4,4 -.set f5,5; .set f6,6; .set f7,7; .set f8,8; .set f9,9 -.set f10,10; .set f11,11; .set f12,12; .set f13,13; .set f14,14 -.set f15,15; .set f16,16; .set f17,17; .set f18,18; .set f19,19 -.set f20,20; .set f21,21; .set f22,22; .set f23,23; .set f24,24 -.set f25,25; .set f26,26; .set f27,27; .set f28,28; .set f29,29 -.set f30,30; .set f31,31 -.set BO_IF,12 -.set CR0_EQ,2 - - - - .rename H.10.NO_SYMBOL{PR},"" - .rename H.18.NS_InvokeByIndex{TC},"NS_InvokeByIndex" - - -# .text section - - .csect H.10.NO_SYMBOL{PR} - .globl .NS_InvokeByIndex - .globl NS_InvokeByIndex{DS} - .extern .invoke_copy_to_stack - .extern ._ptrgl{PR} - - -# -# NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex, -# uint32_t paramCount, nsXPTCVariant* params) -# - -.NS_InvokeByIndex: - mflr r0 - stw r31,-4(sp) -# -# save off the incoming values in the caller's parameter area -# - stw r3,24(sp) # that - stw r4,28(sp) # methodIndex - stw r5,32(sp) # paramCount - stw r6,36(sp) # params - stw r0,8(sp) - stwu sp,-136(sp) # = 24 for linkage area, 8 * 13 for fprData area, 8 for saved registers - -# prepare args for 'invoke_copy_to_stack' call -# - lwz r4,168(sp) # paramCount - lwz r5,172(sp) # params - mr r6,sp # fprData - slwi r3,r4,3 # number of bytes of stack required - # at most 8*paramCount - addi r3,r3,28 # linkage area - mr r31,sp # save original stack top - subfc sp,r3,sp # bump the stack - addi r3,sp,28 # parameter pointer excludes linkage area size + 'this' - - bl .invoke_copy_to_stack - nop - - lfd f1,0(r31) # Restore floating point registers - lfd f2,8(r31) - lfd f3,16(r31) - lfd f4,24(r31) - lfd f5,32(r31) - lfd f6,40(r31) - lfd f7,48(r31) - lfd f8,56(r31) - lfd f9,64(r31) - lfd f10,72(r31) - lfd f11,80(r31) - lfd f12,88(r31) - lfd f13,96(r31) - - lwz r3,160(r31) # that - lwz r4,0(r3) # get vTable from 'that' - lwz r5,164(r31) # methodIndex - slwi r5,r5,3 # methodIndex * 8 - addi r5,r5,8 # step over junk at start of vTable ! - lwzx r11,r5,r4 # get function pointer - - addi r5,r5,4 # We need to manually adjust the 'that' pointer, this is CFRONT based - lwzx r5,r4,r5 # offset = r4(vtable) + r5(methodIndex offset) - 4 - add r3,r5,r3 # adjust 'that' r3 = r3 + r5 - - lwz r4,28(sp) - lwz r5,32(sp) - lwz r6,36(sp) - lwz r7,40(sp) - lwz r8,44(sp) - lwz r9,48(sp) - lwz r10,52(sp) - - bl ._ptrgl{PR} - nop - - mr sp,r31 - lwz r0,144(sp) - addi sp,sp,136 - mtlr r0 - lwz r31,-4(sp) - blr - - -# .data section - - .toc # 0x00000038 -T.18.NS_InvokeByIndex: - .tc H.18.NS_InvokeByIndex{TC},NS_InvokeByIndex{DS} - - .csect NS_InvokeByIndex{DS} - .long .NS_InvokeByIndex # "\0\0\0\0" - .long TOC{TC0} # "\0\0\0008" - .long 0x00000000 # "\0\0\0\0" -# End csect NS_InvokeByIndex{DS} - -# .bss section diff --git a/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_ppc_aix64.s b/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_ppc_aix64.s deleted file mode 100644 index 722583de5..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_ppc_aix64.s +++ /dev/null @@ -1,128 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -.set r0,0; .set sp,1; .set RTOC,2; .set r3,3; .set r4,4 -.set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9 -.set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14 -.set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19 -.set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24 -.set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29 -.set r30,30; .set r31,31 -.set f0,0; .set f1,1; .set f2,2; .set f3,3; .set f4,4 -.set f5,5; .set f6,6; .set f7,7; .set f8,8; .set f9,9 -.set f10,10; .set f11,11; .set f12,12; .set f13,13; .set f14,14 -.set f15,15; .set f16,16; .set f17,17; .set f18,18; .set f19,19 -.set f20,20; .set f21,21; .set f22,22; .set f23,23; .set f24,24 -.set f25,25; .set f26,26; .set f27,27; .set f28,28; .set f29,29 -.set f30,30; .set f31,31 -.set BO_IF,12 -.set CR0_EQ,2 - - .rename H.10.NO_SYMBOL{PR},"" - .rename H.18.NS_InvokeByIndex{TC},"NS_InvokeByIndex" - - -# .text section - - .csect H.10.NO_SYMBOL{PR} - .globl .NS_InvokeByIndex - .globl NS_InvokeByIndex{DS} - .extern .invoke_copy_to_stack - .extern ._ptrgl{PR} - -# -# NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex, -# uint32_t paramCount, nsXPTCVariant* params) -# - -.NS_InvokeByIndex: - mflr r0 - std r31,-8(sp) -# -# save off the incoming values in the caller's parameter area -# - std r3,48(sp) # that - std r4,56(sp) # methodIndex - std r5,64(sp) # paramCount - std r6,72(sp) # params - std r0,16(sp) - stdu sp,-168(sp) # 2*24=48 for linkage area, - # 8*13=104 for fprData area - # 16 for saved registers - -# prepare args for 'invoke_copy_to_stack' call -# - ld r4,232(sp) # paramCount (168+8+56) - ld r5,240(sp) # params - mr r6,sp # fprData - sldi r3,r4,3 # number of bytes of stack required - # is at most numParams*8 - addi r3,r3,56 # linkage area (48) + this (8) - mr r31,sp # save original stack top - subfc sp,r3,sp # bump the stack - addi r3,sp,56 # parameter pointer excludes linkage area - # size + 'this' - - bl .invoke_copy_to_stack - nop - - lfd f1,0(r31) # Restore floating point registers - lfd f2,8(r31) - lfd f3,16(r31) - lfd f4,24(r31) - lfd f5,32(r31) - lfd f6,40(r31) - lfd f7,48(r31) - lfd f8,56(r31) - lfd f9,64(r31) - lfd f10,72(r31) - lfd f11,80(r31) - lfd f12,88(r31) - lfd f13,96(r31) - - ld r3,216(r31) # that (168+48) - ld r4,0(r3) # get vTable from 'that' - ld r5,224(r31) # methodIndex (168+56) - sldi r5,r5,3 # methodIndex * 8 - # No junk at the start of 64bit vtable !!! - ldx r11,r5,r4 # get function pointer (this jumps - # either to the function if no adjustment - # is needed (displacement = 0), or it - # jumps to the thunk code, which will jump - # to the function at the end) - - # No adjustment of the that pointer in 64bit mode, this is done - # by the thunk code - - ld r4,56(sp) - ld r5,64(sp) - ld r6,72(sp) - ld r7,80(sp) - ld r8,88(sp) - ld r9,96(sp) - ld r10,104(sp) - - bl ._ptrgl{PR} - nop - - mr sp,r31 - ld r0,184(sp) # 168+16 - addi sp,sp,168 - mtlr r0 - ld r31,-8(sp) - blr - -# .data section - - .toc # 0x00000038 -T.18.NS_InvokeByIndex: - .tc H.18.NS_InvokeByIndex{TC},NS_InvokeByIndex{DS} - - .csect NS_InvokeByIndex{DS} - .llong .NS_InvokeByIndex # "\0\0\0\0" - .llong TOC{TC0} # "\0\0\0008" - .llong 0x00000000 # "\0\0\0\0" -# End csect NS_InvokeByIndex{DS} - -# .bss section diff --git a/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_ppc_ibmobj_aix.s b/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_ppc_ibmobj_aix.s deleted file mode 100644 index 414a6536f..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_ppc_ibmobj_aix.s +++ /dev/null @@ -1,124 +0,0 @@ -# -# -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -.set r0,0; .set sp,1; .set RTOC,2; .set r3,3; .set r4,4 -.set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9 -.set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14 -.set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19 -.set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24 -.set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29 -.set r30,30; .set r31,31 -.set f0,0; .set f1,1; .set f2,2; .set f3,3; .set f4,4 -.set f5,5; .set f6,6; .set f7,7; .set f8,8; .set f9,9 -.set f10,10; .set f11,11; .set f12,12; .set f13,13; .set f14,14 -.set f15,15; .set f16,16; .set f17,17; .set f18,18; .set f19,19 -.set f20,20; .set f21,21; .set f22,22; .set f23,23; .set f24,24 -.set f25,25; .set f26,26; .set f27,27; .set f28,28; .set f29,29 -.set f30,30; .set f31,31 -.set BO_IF,12 -.set CR0_EQ,2 - - - - .rename H.10.NO_SYMBOL{PR},"" - .rename H.18.NS_InvokeByIndex{TC},"NS_InvokeByIndex" - - -# .text section - - .csect H.10.NO_SYMBOL{PR} - .globl .NS_InvokeByIndex - .globl NS_InvokeByIndex{DS} - .extern .invoke_copy_to_stack - .extern ._ptrgl{PR} - - -# -# NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex, -# uint32_t paramCount, nsXPTCVariant* params) -# - -.NS_InvokeByIndex: - mflr r0 - stw r31,-4(sp) -# -# save off the incoming values in the caller's parameter area -# - stw r3,24(sp) # that - stw r4,28(sp) # methodIndex - stw r5,32(sp) # paramCount - stw r6,36(sp) # params - stw r0,8(sp) - stwu sp,-136(sp) # = 24 for linkage area, 8 * 13 for fprData area, 8 for saved registers - -# prepare args for 'invoke_copy_to_stack' call -# - lwz r4,168(sp) # paramCount - lwz r5,172(sp) # params - mr r6,sp # fprData - slwi r3,r4,3 # number of bytes of stack required - # at most 8*paramCount - addi r3,r3,28 # linkage area - mr r31,sp # save original stack top - subfc sp,r3,sp # bump the stack - addi r3,sp,28 # parameter pointer excludes linkage area size + 'this' - - bl .invoke_copy_to_stack - nop - - lfd f1,0(r31) # Restore floating point registers - lfd f2,8(r31) - lfd f3,16(r31) - lfd f4,24(r31) - lfd f5,32(r31) - lfd f6,40(r31) - lfd f7,48(r31) - lfd f8,56(r31) - lfd f9,64(r31) - lfd f10,72(r31) - lfd f11,80(r31) - lfd f12,88(r31) - lfd f13,96(r31) - - lwz r3,160(r31) # that - lwz r4,0(r3) # get vTable from 'that' - lwz r5,164(r31) # methodIndex - slwi r5,r5,2 # methodIndex * 4 - lwzx r11,r5,r4 # get function pointer - - lwz r4,28(sp) - lwz r5,32(sp) - lwz r6,36(sp) - lwz r7,40(sp) - lwz r8,44(sp) - lwz r9,48(sp) - lwz r10,52(sp) - - bl ._ptrgl{PR} - nop - - mr sp,r31 - lwz r0,144(sp) - addi sp,sp,136 - mtlr r0 - lwz r31,-4(sp) - blr - - -# .data section - - .toc # 0x00000038 -T.18.NS_InvokeByIndex: - .tc H.18.NS_InvokeByIndex{TC},NS_InvokeByIndex{DS} - - .csect NS_InvokeByIndex{DS} - .long .NS_InvokeByIndex # "\0\0\0\0" - .long TOC{TC0} # "\0\0\0008" - .long 0x00000000 # "\0\0\0\0" -# End csect NS_InvokeByIndex{DS} - -# .bss section diff --git a/xpcom/reflect/xptcall/md/unix/xptcinvoke_ppc_aix.cpp b/xpcom/reflect/xptcall/md/unix/xptcinvoke_ppc_aix.cpp deleted file mode 100644 index ba2a5dab0..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcinvoke_ppc_aix.cpp +++ /dev/null @@ -1,74 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/* Platform specific code to invoke XPCOM methods on native objects */ - -#include "xptcprivate.h" - -#ifndef AIX -#error "This code is for PowerPC only" -#endif - -extern "C" void -invoke_copy_to_stack(uint32_t* d, uint32_t paramCount, nsXPTCVariant* s, double *fprData) -{ -/* - We need to copy the parameters for this function to locals and use them - from there since the parameters occupy the same stack space as the stack - we're trying to populate. -*/ - uint32_t *l_d = d; - nsXPTCVariant *l_s = s; - uint32_t l_paramCount = paramCount, fpCount = 0; - double *l_fprData = fprData; - - typedef struct { - uint32_t hi; - uint32_t lo; - } DU; // have to move 64 bit entities as 32 bit halves since - // stack slots are not guaranteed 16 byte aligned - - for(uint32_t i = 0; i < l_paramCount; i++, l_d++, l_s++) - { - if(l_s->IsPtrData()) - { - *((void**)l_d) = l_s->ptr; - continue; - } - switch(l_s->type) - { - case nsXPTType::T_I8 : *((int32_t*) l_d) = l_s->val.i8; break; - case nsXPTType::T_I16 : *((int32_t*) l_d) = l_s->val.i16; break; - case nsXPTType::T_I32 : *((int32_t*) l_d) = l_s->val.i32; break; - case nsXPTType::T_I64 : - case nsXPTType::T_U64 : - *((uint32_t*) l_d++) = ((DU *)l_s)->hi; - *((uint32_t*) l_d) = ((DU *)l_s)->lo; - break; - case nsXPTType::T_DOUBLE : - *((uint32_t*) l_d++) = ((DU *)l_s)->hi; - *((uint32_t*) l_d) = ((DU *)l_s)->lo; - if(fpCount < 13) - l_fprData[fpCount++] = l_s->val.d; - break; - case nsXPTType::T_U8 : *((uint32_t*) l_d) = l_s->val.u8; break; - case nsXPTType::T_U16 : *((uint32_t*) l_d) = l_s->val.u16; break; - case nsXPTType::T_U32 : *((uint32_t*) l_d) = l_s->val.u32; break; - case nsXPTType::T_FLOAT : - *((float*) l_d) = l_s->val.f; - if(fpCount < 13) - l_fprData[fpCount++] = l_s->val.f; - break; - case nsXPTType::T_BOOL : *((uint32_t*) l_d) = l_s->val.b; break; - case nsXPTType::T_CHAR : *((uint32_t*) l_d) = l_s->val.c; break; - case nsXPTType::T_WCHAR : *((int32_t*) l_d) = l_s->val.wc; break; - default: - // all the others are plain pointer types - *((void**)l_d) = l_s->val.p; - break; - } - } -} - diff --git a/xpcom/reflect/xptcall/md/unix/xptcinvoke_ppc_aix64.cpp b/xpcom/reflect/xptcall/md/unix/xptcinvoke_ppc_aix64.cpp deleted file mode 100644 index 616c2f687..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcinvoke_ppc_aix64.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/* Platform specific code to invoke XPCOM methods on native objects */ - -#include "xptcprivate.h" - -#ifdef _AIX - -extern "C" void -invoke_copy_to_stack(uint64_t* d, uint32_t paramCount, nsXPTCVariant* s, double *fprData) -{ -/* - We need to copy the parameters for this function to locals and use them - from there since the parameters occupy the same stack space as the stack - we're trying to populate. -*/ - uint64_t *l_d = d; - nsXPTCVariant *l_s = s; - uint32_t l_paramCount = paramCount, fpCount = 0; - double *l_fprData = fprData; - - for(uint32_t i = 0; i < l_paramCount; i++, l_d++, l_s++) - { - if(l_s->IsPtrData()) - { - *l_d = (uint64_t)l_s->ptr; - continue; - } - switch(l_s->type) - { - case nsXPTType::T_I8: *l_d = (uint64_t)l_s->val.i8; break; - case nsXPTType::T_I16: *l_d = (uint64_t)l_s->val.i16; break; - case nsXPTType::T_I32: *l_d = (uint64_t)l_s->val.i32; break; - case nsXPTType::T_I64: *l_d = (uint64_t)l_s->val.i64; break; - case nsXPTType::T_U8: *l_d = (uint64_t)l_s->val.u8; break; - case nsXPTType::T_U16: *l_d = (uint64_t)l_s->val.u16; break; - case nsXPTType::T_U32: *l_d = (uint64_t)l_s->val.u32; break; - case nsXPTType::T_U64: *l_d = (uint64_t)l_s->val.u64; break; - case nsXPTType::T_BOOL: *l_d = (uint64_t)l_s->val.b; break; - case nsXPTType::T_CHAR: *l_d = (uint64_t)l_s->val.c; break; - case nsXPTType::T_WCHAR: *l_d = (uint64_t)l_s->val.wc; break; - - case nsXPTType::T_DOUBLE: - *((double*)l_d) = l_s->val.d; - if(fpCount < 13) - l_fprData[fpCount++] = l_s->val.d; - break; - case nsXPTType::T_FLOAT: - *((float*)l_d) = l_s->val.f; - if(fpCount < 13) - l_fprData[fpCount++] = l_s->val.f; - break; - default: - // all the others are plain pointer types - *l_d = (uint64_t)l_s->val.p; - break; - } - } -} -#endif - diff --git a/xpcom/reflect/xptcall/md/unix/xptcstubs_asm_ppc_aix.s.m4 b/xpcom/reflect/xptcall/md/unix/xptcstubs_asm_ppc_aix.s.m4 deleted file mode 100644 index 6dabf334d..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcstubs_asm_ppc_aix.s.m4 +++ /dev/null @@ -1,119 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -.set r0,0; .set sp,1; .set RTOC,2; .set r3,3; .set r4,4 -.set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9 -.set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14 -.set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19 -.set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24 -.set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29 -.set r30,30; .set r31,31 -.set f0,0; .set f1,1; .set f2,2; .set f3,3; .set f4,4 -.set f5,5; .set f6,6; .set f7,7; .set f8,8; .set f9,9 -.set f10,10; .set f11,11; .set f12,12; .set f13,13; .set f14,14 -.set f15,15; .set f16,16; .set f17,17; .set f18,18; .set f19,19 -.set f20,20; .set f21,21; .set f22,22; .set f23,23; .set f24,24 -.set f25,25; .set f26,26; .set f27,27; .set f28,28; .set f29,29 -.set f30,30; .set f31,31 - -# Define the correct name of the stub function based on the object model - -define(STUB_NAME, - ifelse(AIX_OBJMODEL, ibm, - `Stub'$1`__EI14nsXPTCStubBaseFv', - `Stub'$1`__14nsXPTCStubBaseFv')) - -define(STUB_ENTRY, ` - .rename H.10.NO_SYMBOL{PR},"" - .rename H.18.'STUB_NAME($1)`{TC},"'STUB_NAME($1)`" - .csect H.10.NO_SYMBOL{PR} - .globl .'STUB_NAME($1)` - .globl 'STUB_NAME($1)`{DS} - -.'STUB_NAME($1)`: - li r12, '$1` - b .SharedStub - nop - - - .toc -T.18.'STUB_NAME($1)`: - .tc H.18.'STUB_NAME($1)`{TC},'STUB_NAME($1)`{DS} - .csect 'STUB_NAME($1)`{DS} - .long .'STUB_NAME($1)` - .long TOC{TC0} - .long 0x00000000 -') - -define(SENTINEL_ENTRY, `') - -include(xptcstubsdef.inc) - - .rename H.10.NO_SYMBOL{PR},"" - .rename H.18.SharedStub{TC},"SharedStub" - -# .text section - .csect H.10.NO_SYMBOL{PR} - .globl .SharedStub - .globl SharedStub{DS} - .extern .PrepareAndDispatch - -.SharedStub: - mflr r0 - stw r0,8(sp) - - stwu sp,-176(sp) # room for linkage (24), fprData (104), gprData(28) - # outgoing params to PrepareAndDispatch (20) - - stw r4,44(sp) # link area (24) + PrepareAndDispatch params (20) - stw r5,48(sp) - stw r6,52(sp) - stw r7,56(sp) - stw r8,60(sp) - stw r9,64(sp) - stw r10,68(sp) - stfd f1,72(sp) - stfd f2,80(sp) - stfd f3,88(sp) - stfd f4,96(sp) - stfd f5,104(sp) - stfd f6,112(sp) - stfd f7,120(sp) - stfd f8,128(sp) - stfd f9,136(sp) - stfd f10,144(sp) - stfd f11,152(sp) - stfd f12,156(sp) - stfd f13,164(sp) - - addi r6,sp,44 # gprData - - addi r7,sp,72 # fprData - # r3 has the 'self' pointer already - mr r4,r12 # methodIndex selector (it is now LATER) - addi r5,sp,232 # pointer to callers args area, beyond r3-r10 - # mapped range - - bl .PrepareAndDispatch - nop - - - lwz r0,184(sp) - addi sp,sp,176 - mtlr r0 - blr - -# .data section - - .toc # 0x00000038 -T.18.SharedStub: - .tc H.18.SharedStub{TC},SharedStub{DS} - - .csect SharedStub{DS} - .long .SharedStub # "\0\0\0\0" - .long TOC{TC0} # "\0\0\0008" - .long 0x00000000 # "\0\0\0\0" -# End csect SharedStub{DS} - -# .bss section diff --git a/xpcom/reflect/xptcall/md/unix/xptcstubs_asm_ppc_aix64.s.m4 b/xpcom/reflect/xptcall/md/unix/xptcstubs_asm_ppc_aix64.s.m4 deleted file mode 100644 index 24d713cc9..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcstubs_asm_ppc_aix64.s.m4 +++ /dev/null @@ -1,97 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -.set r0,0; .set sp,1; .set RTOC,2; .set r3,3; .set r4,4 -.set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9 -.set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14 -.set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19 -.set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24 -.set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29 -.set r30,30; .set r31,31 -.set f0,0; .set f1,1; .set f2,2; .set f3,3; .set f4,4 -.set f5,5; .set f6,6; .set f7,7; .set f8,8; .set f9,9 -.set f10,10; .set f11,11; .set f12,12; .set f13,13; .set f14,14 -.set f15,15; .set f16,16; .set f17,17; .set f18,18; .set f19,19 -.set f20,20; .set f21,21; .set f22,22; .set f23,23; .set f24,24 -.set f25,25; .set f26,26; .set f27,27; .set f28,28; .set f29,29 -.set f30,30; .set f31,31 -# Define the correct name of the stub function based on the object model -define(STUB_NAME, - ifelse(AIX_OBJMODEL, ibm, - `Stub'$1`__EI14nsXPTCStubBaseFv', - `Stub'$1`__14nsXPTCStubBaseFv')) -define(STUB_ENTRY, ` - .rename H.10.NO_SYMBOL{PR},"" - .rename H.18.'STUB_NAME($1)`{TC},"'STUB_NAME($1)`" - .csect H.10.NO_SYMBOL{PR} - .globl .'STUB_NAME($1)` - .globl 'STUB_NAME($1)`{DS} -.'STUB_NAME($1)`: - li r12, '$1` - b .SharedStub - nop - .toc -T.18.'STUB_NAME($1)`: - .tc H.18.'STUB_NAME($1)`{TC},'STUB_NAME($1)`{DS} - .csect 'STUB_NAME($1)`{DS} - .llong .'STUB_NAME($1)` - .llong TOC{TC0} - .llong 0x00000000 -') -define(SENTINEL_ENTRY, `') -include(xptcstubsdef.inc) - .rename H.10.NO_SYMBOL{PR},"" - .rename H.18.SharedStub{TC},"SharedStub" -# .text section - .csect H.10.NO_SYMBOL{PR} - .globl .SharedStub - .globl SharedStub{DS} - .extern .PrepareAndDispatch -.SharedStub: - mflr r0 - std r0,16(sp) - stdu sp,-248(sp) # room for linkage (24*2), fprData (104), gprData(28*2) - # outgoing params to PrepareAndDispatch (40) - std r4,88(sp) # link area (48) + PrepareAndDispatch params (20) - std r5,96(sp) - std r6,104(sp) - std r7,112(sp) - std r8,120(sp) - std r9,128(sp) - std r10,136(sp) - stfd f1,144(sp) - stfd f2,152(sp) - stfd f3,160(sp) - stfd f4,168(sp) - stfd f5,176(sp) - stfd f6,184(sp) - stfd f7,192(sp) - stfd f8,200(sp) - stfd f9,208(sp) - stfd f10,216(sp) - stfd f11,224(sp) - stfd f12,232(sp) - stfd f13,240(sp) - addi r6,sp,88 # gprData - addi r7,sp,144 # fprData - # r3 has the 'self' pointer already - mr r4,r12 # methodIndex selector (it is now LATER) - addi r5,sp,360 # pointer to callers args area, beyond r3-r10 - # mapped range - bl .PrepareAndDispatch - nop - ld r0,264(sp) - addi sp,sp,248 - mtlr r0 - blr -# .data section - .toc # 0x00000038 -T.18.SharedStub: - .tc H.18.SharedStub{TC},SharedStub{DS} - .csect SharedStub{DS} - .llong .SharedStub # "\0\0\0\0" - .llong TOC{TC0} # "\0\0\0008" - .llong 0x00000000 # "\0\0\0\0" -# End csect SharedStub{DS} -# .bss section diff --git a/xpcom/reflect/xptcall/md/unix/xptcstubs_ppc_aix.cpp b/xpcom/reflect/xptcall/md/unix/xptcstubs_ppc_aix.cpp deleted file mode 100644 index 0463c21c5..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcstubs_ppc_aix.cpp +++ /dev/null @@ -1,185 +0,0 @@ -/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/* Implement shared vtbl methods. */ - -#include "xptcprivate.h" -#include "xptiprivate.h" - -#if defined(AIX) - -/* - For PPC (AIX & MAC), the first 8 integral and the first 13 f.p. parameters - arrive in a separate chunk of data that has been loaded from the registers. - The args pointer has been set to the start of the parameters BEYOND the ones - arriving in registers -*/ -extern "C" nsresult ATTRIBUTE_USED -PrepareAndDispatch(nsXPTCStubBase* self, uint32_t methodIndex, uint32_t* args, uint32_t *gprData, double *fprData) -{ - typedef struct { - uint32_t hi; - uint32_t lo; // have to move 64 bit entities as 32 bit halves since - } DU; // stack slots are not guaranteed 16 byte aligned - -#define PARAM_BUFFER_COUNT 16 -#define PARAM_GPR_COUNT 7 - - nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT]; - nsXPTCMiniVariant* dispatchParams = nullptr; - const nsXPTMethodInfo* info = nullptr; - uint8_t paramCount; - uint8_t i; - nsresult result = NS_ERROR_FAILURE; - - NS_ASSERTION(self,"no self"); - - self->mEntry->GetMethodInfo(uint16_t(methodIndex), &info); - NS_ASSERTION(info,"no method info"); - - paramCount = info->GetParamCount(); - - // setup variant array pointer - if(paramCount > PARAM_BUFFER_COUNT) - dispatchParams = new nsXPTCMiniVariant[paramCount]; - else - dispatchParams = paramBuffer; - NS_ASSERTION(dispatchParams,"no place for params"); - - uint32_t* ap = args; - uint32_t iCount = 0; - uint32_t fpCount = 0; - for(i = 0; i < paramCount; i++) - { - const nsXPTParamInfo& param = info->GetParam(i); - const nsXPTType& type = param.GetType(); - nsXPTCMiniVariant* dp = &dispatchParams[i]; - - if(param.IsOut() || !type.IsArithmetic()) - { - if (iCount < PARAM_GPR_COUNT) - dp->val.p = (void*) gprData[iCount++]; - else - dp->val.p = (void*) *ap++; - continue; - } - // else - switch(type) - { - case nsXPTType::T_I8 : if (iCount < PARAM_GPR_COUNT) - dp->val.i8 = (int8_t) gprData[iCount++]; - else - dp->val.i8 = (int8_t) *ap++; - break; - case nsXPTType::T_I16 : if (iCount < PARAM_GPR_COUNT) - dp->val.i16 = (int16_t) gprData[iCount++]; - else - dp->val.i16 = (int16_t) *ap++; - break; - case nsXPTType::T_I32 : if (iCount < PARAM_GPR_COUNT) - dp->val.i32 = (int32_t) gprData[iCount++]; - else - dp->val.i32 = (int32_t) *ap++; - break; - case nsXPTType::T_I64 : if (iCount < PARAM_GPR_COUNT) - ((DU *)dp)->hi = (int32_t) gprData[iCount++]; - else - ((DU *)dp)->hi = (int32_t) *ap++; - if (iCount < PARAM_GPR_COUNT) - ((DU *)dp)->lo = (uint32_t) gprData[iCount++]; - else - ((DU *)dp)->lo = (uint32_t) *ap++; - break; - case nsXPTType::T_U8 : if (iCount < PARAM_GPR_COUNT) - dp->val.u8 = (uint8_t) gprData[iCount++]; - else - dp->val.u8 = (uint8_t) *ap++; - break; - case nsXPTType::T_U16 : if (iCount < PARAM_GPR_COUNT) - dp->val.u16 = (uint16_t) gprData[iCount++]; - else - dp->val.u16 = (uint16_t) *ap++; - break; - case nsXPTType::T_U32 : if (iCount < PARAM_GPR_COUNT) - dp->val.u32 = (uint32_t) gprData[iCount++]; - else - dp->val.u32 = (uint32_t) *ap++; - break; - case nsXPTType::T_U64 : if (iCount < PARAM_GPR_COUNT) - ((DU *)dp)->hi = (uint32_t) gprData[iCount++]; - else - ((DU *)dp)->hi = (uint32_t) *ap++; - if (iCount < PARAM_GPR_COUNT) - ((DU *)dp)->lo = (uint32_t) gprData[iCount++]; - else - ((DU *)dp)->lo = (uint32_t) *ap++; - break; - case nsXPTType::T_FLOAT : if (fpCount < 13) { - dp->val.f = (float) fprData[fpCount++]; - if (iCount < PARAM_GPR_COUNT) - ++iCount; - else - ++ap; - } - else - dp->val.f = *((float*) ap++); - break; - case nsXPTType::T_DOUBLE : if (fpCount < 13) { - dp->val.d = (double) fprData[fpCount++]; - if (iCount < PARAM_GPR_COUNT) - ++iCount; - else - ++ap; - if (iCount < PARAM_GPR_COUNT) - ++iCount; - else - ++ap; - } - else { - dp->val.f = *((double*) ap); - ap += 2; - } - break; - case nsXPTType::T_BOOL : if (iCount < PARAM_GPR_COUNT) - dp->val.b = (bool) gprData[iCount++]; - else - dp->val.b = (bool) *ap++; - break; - case nsXPTType::T_CHAR : if (iCount < PARAM_GPR_COUNT) - dp->val.c = (char) gprData[iCount++]; - else - dp->val.c = (char) *ap++; - break; - case nsXPTType::T_WCHAR : if (iCount < PARAM_GPR_COUNT) - dp->val.wc = (wchar_t) gprData[iCount++]; - else - dp->val.wc = (wchar_t) *ap++; - break; - default: - NS_ERROR("bad type"); - break; - } - } - - result = self->mOuter->CallMethod((uint16_t)methodIndex,info,dispatchParams); - - if(dispatchParams != paramBuffer) - delete [] dispatchParams; - - return result; -} - -#define STUB_ENTRY(n) - -#define SENTINEL_ENTRY(n) \ -nsresult nsXPTCStubBase::Sentinel##n() \ -{ \ - NS_ERROR("nsXPTCStubBase::Sentinel called"); \ - return NS_ERROR_NOT_IMPLEMENTED; \ -} - -#include "xptcstubsdef.inc" - -#endif /* AIX */ diff --git a/xpcom/reflect/xptcall/md/unix/xptcstubs_ppc_aix64.cpp b/xpcom/reflect/xptcall/md/unix/xptcstubs_ppc_aix64.cpp deleted file mode 100644 index 08eb557ab..000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcstubs_ppc_aix64.cpp +++ /dev/null @@ -1,172 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/* Implement shared vtbl methods. */ - -#include "xptcprivate.h" -#include "xptiprivate.h" - -#if defined(AIX) - -/* - For PPC (AIX & MAC), the first 8 integral and the first 13 f.p. parameters - arrive in a separate chunk of data that has been loaded from the registers. - The args pointer has been set to the start of the parameters BEYOND the ones - arriving in registers -*/ -extern "C" nsresult ATTRIBUTE_USED -PrepareAndDispatch(nsXPTCStubBase* self, uint64_t methodIndex, uint64_t* args, uint64_t *gprData, double *fprData) -{ - -#define PARAM_BUFFER_COUNT 16 -#define PARAM_GPR_COUNT 7 - - nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT]; - nsXPTCMiniVariant* dispatchParams = nullptr; - const nsXPTMethodInfo* info = nullptr; - uint8_t paramCount; - uint8_t i; - nsresult result = NS_ERROR_FAILURE; - - NS_ASSERTION(self,"no self"); - - self->mEntry->GetMethodInfo(uint16_t(methodIndex), &info); - NS_ASSERTION(info,"no method info"); - - paramCount = info->GetParamCount(); - - // setup variant array pointer - if(paramCount > PARAM_BUFFER_COUNT) - dispatchParams = new nsXPTCMiniVariant[paramCount]; - else - dispatchParams = paramBuffer; - NS_ASSERTION(dispatchParams,"no place for params"); - - uint64_t* ap = args; - uint32_t iCount = 0; - uint32_t fpCount = 0; - for(i = 0; i < paramCount; i++) - { - const nsXPTParamInfo& param = info->GetParam(i); - const nsXPTType& type = param.GetType(); - nsXPTCMiniVariant* dp = &dispatchParams[i]; - - if(param.IsOut() || !type.IsArithmetic()) - { - if (iCount < PARAM_GPR_COUNT) - dp->val.p = (void*) gprData[iCount++]; - else - dp->val.p = (void*) *ap++; - continue; - } - // else - switch(type) - { - case nsXPTType::T_I8 : if (iCount < PARAM_GPR_COUNT) - dp->val.i8 = (int8_t) gprData[iCount++]; - else - dp->val.i8 = (int8_t) *ap++; - break; - case nsXPTType::T_I16 : if (iCount < PARAM_GPR_COUNT) - dp->val.i16 = (int16_t) gprData[iCount++]; - else - dp->val.i16 = (int16_t) *ap++; - break; - case nsXPTType::T_I32 : if (iCount < PARAM_GPR_COUNT) - dp->val.i32 = (int32_t) gprData[iCount++]; - else - dp->val.i32 = (int32_t) *ap++; - break; - case nsXPTType::T_I64 : if (iCount < PARAM_GPR_COUNT) - dp->val.i64 = (int64_t) gprData[iCount++]; - else - dp->val.i64 = (int64_t) *ap++; - break; - case nsXPTType::T_U8 : if (iCount < PARAM_GPR_COUNT) - dp->val.u8 = (uint8_t) gprData[iCount++]; - else - dp->val.u8 = (uint8_t) *ap++; - break; - case nsXPTType::T_U16 : if (iCount < PARAM_GPR_COUNT) - dp->val.u16 = (uint16_t) gprData[iCount++]; - else - dp->val.u16 = (uint16_t) *ap++; - break; - case nsXPTType::T_U32 : if (iCount < PARAM_GPR_COUNT) - dp->val.u32 = (uint32_t) gprData[iCount++]; - else - dp->val.u32 = (uint32_t) *ap++; - break; - case nsXPTType::T_U64 : if (iCount < PARAM_GPR_COUNT) - dp->val.u64 = (uint64_t) gprData[iCount++]; - else - dp->val.u64 = (uint64_t) *ap++; - break; - case nsXPTType::T_FLOAT : if (fpCount < 13) { - dp->val.f = (float) fprData[fpCount++]; - if (iCount < PARAM_GPR_COUNT) - ++iCount; - else - ++ap; - } - else - dp->val.f = *((float*) ap++); - break; - case nsXPTType::T_DOUBLE : if (fpCount < 13) { - dp->val.d = (double) fprData[fpCount++]; - if (iCount < PARAM_GPR_COUNT) - ++iCount; - else - ++ap; - if (iCount < PARAM_GPR_COUNT) - ++iCount; - else - ++ap; - } - else { - dp->val.f = *((double*) ap); - ap += 2; - } - break; - case nsXPTType::T_BOOL : if (iCount < PARAM_GPR_COUNT) - dp->val.b = (bool) gprData[iCount++]; - else - dp->val.b = (bool) *ap++; - break; - case nsXPTType::T_CHAR : if (iCount < PARAM_GPR_COUNT) - dp->val.c = (char) gprData[iCount++]; - else - dp->val.c = (char) *ap++; - break; - case nsXPTType::T_WCHAR : if (iCount < PARAM_GPR_COUNT) - dp->val.wc = (wchar_t) gprData[iCount++]; - else - dp->val.wc = (wchar_t) *ap++; - break; - default: - NS_ERROR("bad type"); - break; - } - } - - result = self->mOuter->CallMethod((uint16_t)methodIndex,info,dispatchParams); - - if(dispatchParams != paramBuffer) - delete [] dispatchParams; - - return result; -} - -#define STUB_ENTRY(n) - -#define SENTINEL_ENTRY(n) \ -nsresult nsXPTCStubBase::Sentinel##n() \ -{ \ - NS_ERROR("nsXPTCStubBase::Sentinel called"); \ - return NS_ERROR_NOT_IMPLEMENTED; \ -} - -#include "xptcstubsdef.inc" - -#endif /* AIX */ diff --git a/xpcom/reflect/xptcall/status.html b/xpcom/reflect/xptcall/status.html index 4e18bba35..deb4da92e 100644 --- a/xpcom/reflect/xptcall/status.html +++ b/xpcom/reflect/xptcall/status.html @@ -239,17 +239,6 @@ a port. - -Done -AIX PPC -Contributed code! -Jim Dunn <jdunn@netscape.com> -Philip K. Warren writes:
- -We have gone through several releases of AIX without any problems. - - - Done Irix diff --git a/xpcom/threads/nsThread.cpp b/xpcom/threads/nsThread.cpp index 7c1af08f4..19464f2f0 100644 --- a/xpcom/threads/nsThread.cpp +++ b/xpcom/threads/nsThread.cpp @@ -203,11 +203,9 @@ public: } } - // This method needs to be public to support older compilers (xlC_r on AIX). - // It should be called directly as this class type is reference counted. +private: virtual ~nsThreadStartupEvent() {} -private: NS_IMETHOD Run() override { ReentrantMonitorAutoEnter mon(mMon); -- cgit v1.2.3 From b9a8bca64d7a9ae1f950a953ac2985bf7dcc4eff Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Mon, 1 Apr 2019 00:09:12 +0200 Subject: Remove some HPUX leftovers. Resolves #185 --- dom/plugins/base/nsPluginsDirUnix.cpp | 17 +---------------- dom/xslt/xpath/txUnaryExpr.cpp | 9 --------- js/xpconnect/src/XPCShellImpl.cpp | 11 +---------- netwerk/base/nsStandardURL.h | 1 - 4 files changed, 2 insertions(+), 36 deletions(-) diff --git a/dom/plugins/base/nsPluginsDirUnix.cpp b/dom/plugins/base/nsPluginsDirUnix.cpp index 2ca703baa..e6956c34c 100644 --- a/dom/plugins/base/nsPluginsDirUnix.cpp +++ b/dom/plugins/base/nsPluginsDirUnix.cpp @@ -19,12 +19,7 @@ #include "nsIPrefService.h" #define LOCAL_PLUGIN_DLL_SUFFIX ".so" -#if defined(__hpux) -#define DEFAULT_X11_PATH "/usr/lib/X11R6/" -#undef LOCAL_PLUGIN_DLL_SUFFIX -#define LOCAL_PLUGIN_DLL_SUFFIX ".sl" -#define LOCAL_PLUGIN_DLL_ALT_SUFFIX ".so" -#elif defined(LINUX) +#if defined(LINUX) #define DEFAULT_X11_PATH "/usr/X11R6/lib/" #elif defined(__APPLE__) #define DEFAULT_X11_PATH "/usr/X11R6/lib" @@ -97,11 +92,7 @@ static bool LoadExtraSharedLib(const char *name, char **soname, bool tryToGetSon #define PLUGIN_MAX_NUMBER_OF_EXTRA_LIBS 32 #define PREF_PLUGINS_SONAME "plugin.soname.list" -#if defined(HPUX) -#define DEFAULT_EXTRA_LIBS_LIST "libXt" LOCAL_PLUGIN_DLL_SUFFIX ":libXext" LOCAL_PLUGIN_DLL_SUFFIX ":libXm" LOCAL_PLUGIN_DLL_SUFFIX -#else #define DEFAULT_EXTRA_LIBS_LIST "libXt" LOCAL_PLUGIN_DLL_SUFFIX ":libXext" LOCAL_PLUGIN_DLL_SUFFIX -#endif /* this function looks for user_pref("plugin.soname.list", "/usr/X11R6/lib/libXt.so.6:libXext.so"); @@ -275,15 +266,9 @@ nsresult nsPluginFile::LoadPlugin(PRLibrary **outLibrary) // work fine. -#if defined(HPUX) - // Acrobat/libXm: Lazy resolving might cause crash later (bug 211587) - *outLibrary = PR_LoadLibraryWithFlags(libSpec, PR_LD_NOW); - pLibrary = *outLibrary; -#else // Some dlopen() doesn't recover from a failed PR_LD_NOW (bug 223744) *outLibrary = PR_LoadLibraryWithFlags(libSpec, 0); pLibrary = *outLibrary; -#endif if (!pLibrary) { LoadExtraSharedLibs(); // try reload plugin once more diff --git a/dom/xslt/xpath/txUnaryExpr.cpp b/dom/xslt/xpath/txUnaryExpr.cpp index 95682b5b2..ae20fda46 100644 --- a/dom/xslt/xpath/txUnaryExpr.cpp +++ b/dom/xslt/xpath/txUnaryExpr.cpp @@ -23,16 +23,7 @@ UnaryExpr::evaluate(txIEvalContext* aContext, txAExprResult** aResult) NS_ENSURE_SUCCESS(rv, rv); double value = exprRes->numberValue(); -#ifdef HPUX - /* - * Negation of a zero doesn't produce a negative - * zero on HPUX. Perform the operation by multiplying with - * -1. - */ - return aContext->recycler()->getNumberResult(-1 * value, aResult); -#else return aContext->recycler()->getNumberResult(-value, aResult); -#endif } TX_IMPL_EXPR_STUBS_1(UnaryExpr, NODESET_RESULT, expr) diff --git a/js/xpconnect/src/XPCShellImpl.cpp b/js/xpconnect/src/XPCShellImpl.cpp index a44c143ea..4ddc8deb3 100644 --- a/js/xpconnect/src/XPCShellImpl.cpp +++ b/js/xpconnect/src/XPCShellImpl.cpp @@ -662,7 +662,7 @@ env_setProperty(JSContext* cx, HandleObject obj, HandleId id, MutableHandleValue JSAutoByteString value(cx, valstr); if (!value) return false; -#if defined XP_WIN || defined HPUX || defined OSF1 || defined SCO +#if defined XP_WIN || defined SCO { char* waste = JS_smprintf("%s=%s", name.ptr(), value.ptr()); if (!waste) { @@ -670,16 +670,7 @@ env_setProperty(JSContext* cx, HandleObject obj, HandleId id, MutableHandleValue return false; } rv = putenv(waste); -#ifdef XP_WIN - /* - * HPUX9 at least still has the bad old non-copying putenv. - * - * Per mail from , OSF1 also has a putenv - * that will crash if you pass it an auto char array (so it must place - * its argument directly in the char* environ[] array). - */ free(waste); -#endif } #else rv = setenv(name.ptr(), value.ptr(), 1); diff --git a/netwerk/base/nsStandardURL.h b/netwerk/base/nsStandardURL.h index 0ca345572..eba85528c 100644 --- a/netwerk/base/nsStandardURL.h +++ b/netwerk/base/nsStandardURL.h @@ -72,7 +72,6 @@ public: static void InitGlobalObjects(); static void ShutdownGlobalObjects(); -public: /* internal -- HPUX compiler can't handle this being private */ // // location and length of an url segment relative to mSpec // -- cgit v1.2.3 From a2786c051173286c9d7ccee2c3c6a19c15966322 Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Mon, 1 Apr 2019 00:11:06 +0200 Subject: Remove AIX 1st party code OS checks, part 2 Issue #186 --- gfx/cairo/libpixman/src/pixman.h | 2 -- gfx/qcms/qcmstypes.h | 2 -- js/src/jstypes.h | 8 +------- modules/libpref/Preferences.cpp | 3 --- 4 files changed, 1 insertion(+), 14 deletions(-) diff --git a/gfx/cairo/libpixman/src/pixman.h b/gfx/cairo/libpixman/src/pixman.h index 1cbf62e21..23408b028 100644 --- a/gfx/cairo/libpixman/src/pixman.h +++ b/gfx/cairo/libpixman/src/pixman.h @@ -104,8 +104,6 @@ typedef __int32 int32_t; typedef unsigned __int32 uint32_t; typedef __int64 int64_t; typedef unsigned __int64 uint64_t; -#elif defined (_AIX) -# include #else # include #endif diff --git a/gfx/qcms/qcmstypes.h b/gfx/qcms/qcmstypes.h index d36779183..d5f843f79 100644 --- a/gfx/qcms/qcmstypes.h +++ b/gfx/qcms/qcmstypes.h @@ -38,8 +38,6 @@ typedef unsigned __int64 uintptr_t; typedef unsigned long uintptr_t; #endif -#elif defined (_AIX) -# include #else # include #endif diff --git a/js/src/jstypes.h b/js/src/jstypes.h index 75774e5b8..6cfb3d4ad 100644 --- a/js/src/jstypes.h +++ b/js/src/jstypes.h @@ -147,13 +147,7 @@ # define JS_64BIT # endif #elif defined(__GNUC__) -/* Additional GCC defines are when running on Solaris, AIX, and HPUX */ -# if defined(__x86_64__) || defined(__sparcv9) || \ - defined(__64BIT__) || defined(__LP64__) -# define JS_64BIT -# endif -#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* Sun Studio C/C++ */ -# if defined(__x86_64) || defined(__sparcv9) +# if defined(__x86_64__) || defined(__64BIT__) # define JS_64BIT # endif #elif defined(__xlc__) || defined(__xlC__) /* IBM XL C/C++ */ diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp index 31867ca0a..c56cad98d 100644 --- a/modules/libpref/Preferences.cpp +++ b/modules/libpref/Preferences.cpp @@ -1306,9 +1306,6 @@ static nsresult pref_InitInitialObjects() "winpref.js" #elif defined(XP_UNIX) "unix.js" -#if defined(_AIX) - , "aix.js" -#endif #elif defined(XP_BEOS) "beos.js" #endif -- cgit v1.2.3 From bfc97728065cbbc7f6bbc281b654a2d1e079b48d Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Mon, 1 Apr 2019 13:04:33 +0200 Subject: Unhook CR exception handler. Tag #20 --- gfx/ipc/GPUParent.cpp | 1 - ipc/glue/GeckoChildProcessHost.cpp | 2 - toolkit/xre/nsAndroidStartup.cpp | 1 - toolkit/xre/nsEmbedFunctions.cpp | 1 - toolkit/xre/nsX11ErrorHandler.cpp | 1 - xpcom/base/nsObjCExceptions.h | 78 -------------------------------------- 6 files changed, 84 deletions(-) diff --git a/gfx/ipc/GPUParent.cpp b/gfx/ipc/GPUParent.cpp index 9ff6cba9e..6833f5690 100644 --- a/gfx/ipc/GPUParent.cpp +++ b/gfx/ipc/GPUParent.cpp @@ -24,7 +24,6 @@ #include "mozilla/dom/VideoDecoderManagerChild.h" #include "mozilla/layers/LayerTreeOwnerTracker.h" #include "nsDebugImpl.h" -#include "nsExceptionHandler.h" #include "nsThreadManager.h" #include "prenv.h" #include "ProcessUtils.h" diff --git a/ipc/glue/GeckoChildProcessHost.cpp b/ipc/glue/GeckoChildProcessHost.cpp index 8147e87dc..fee429238 100644 --- a/ipc/glue/GeckoChildProcessHost.cpp +++ b/ipc/glue/GeckoChildProcessHost.cpp @@ -23,8 +23,6 @@ #include "prenv.h" #include "nsXPCOMPrivate.h" -#include "nsExceptionHandler.h" - #include "nsDirectoryServiceDefs.h" #include "nsIFile.h" #include "nsPrintfCString.h" diff --git a/toolkit/xre/nsAndroidStartup.cpp b/toolkit/xre/nsAndroidStartup.cpp index 47b9ec6e5..68ad75c01 100644 --- a/toolkit/xre/nsAndroidStartup.cpp +++ b/toolkit/xre/nsAndroidStartup.cpp @@ -17,7 +17,6 @@ #include "nsIFile.h" #include "nsAppRunner.h" #include "APKOpen.h" -#include "nsExceptionHandler.h" #define LOG(args...) __android_log_print(ANDROID_LOG_INFO, MOZ_APP_NAME, args) diff --git a/toolkit/xre/nsEmbedFunctions.cpp b/toolkit/xre/nsEmbedFunctions.cpp index 3757dec2f..52b443770 100644 --- a/toolkit/xre/nsEmbedFunctions.cpp +++ b/toolkit/xre/nsEmbedFunctions.cpp @@ -32,7 +32,6 @@ #include "nsAppRunner.h" #include "nsAutoRef.h" #include "nsDirectoryServiceDefs.h" -#include "nsExceptionHandler.h" #include "nsString.h" #include "nsThreadUtils.h" #include "nsJSUtils.h" diff --git a/toolkit/xre/nsX11ErrorHandler.cpp b/toolkit/xre/nsX11ErrorHandler.cpp index 0fb0d29c5..9a6888adf 100644 --- a/toolkit/xre/nsX11ErrorHandler.cpp +++ b/toolkit/xre/nsX11ErrorHandler.cpp @@ -7,7 +7,6 @@ #include "prenv.h" #include "nsXULAppAPI.h" -#include "nsExceptionHandler.h" #include "nsDebug.h" #include "mozilla/X11Util.h" diff --git a/xpcom/base/nsObjCExceptions.h b/xpcom/base/nsObjCExceptions.h index b3ed532ec..e542a22f8 100644 --- a/xpcom/base/nsObjCExceptions.h +++ b/xpcom/base/nsObjCExceptions.h @@ -13,10 +13,6 @@ #import -#ifdef DEBUG -#import -#endif - #include #include #include "nsError.h" @@ -40,80 +36,6 @@ nsObjCExceptionLog(NSException* aException) { NSLog(@"Mozilla has caught an Obj-C exception [%@: %@]", [aException name], [aException reason]); - -#ifdef DEBUG - @try { - // Try to get stack information out of the exception. 10.5 returns the stack - // info with the callStackReturnAddresses selector. - NSArray* stackTrace = nil; - if ([aException respondsToSelector:@selector(callStackReturnAddresses)]) { - NSArray* addresses = (NSArray*) - [aException performSelector:@selector(callStackReturnAddresses)]; - if ([addresses count]) { - stackTrace = addresses; - } - } - - // 10.4 doesn't respond to callStackReturnAddresses so we'll try to pull the - // stack info out of the userInfo. It might not be there, sadly :( - if (!stackTrace) { - stackTrace = [[aException userInfo] objectForKey:NSStackTraceKey]; - } - - if (stackTrace) { - // The command line should look like this: - // /usr/bin/atos -p -printHeader - NSMutableArray* args = - [NSMutableArray arrayWithCapacity:[stackTrace count] + 3]; - - [args addObject:@"-p"]; - int pid = [[NSProcessInfo processInfo] processIdentifier]; - [args addObject:[NSString stringWithFormat:@"%d", pid]]; - - [args addObject:@"-printHeader"]; - - unsigned int stackCount = [stackTrace count]; - unsigned int stackIndex = 0; - for (; stackIndex < stackCount; stackIndex++) { - unsigned long address = - [[stackTrace objectAtIndex:stackIndex] unsignedLongValue]; - [args addObject:[NSString stringWithFormat:@"0x%lx", address]]; - } - - NSPipe* outPipe = [NSPipe pipe]; - - NSTask* task = [[NSTask alloc] init]; - [task setLaunchPath:@"/usr/bin/atos"]; - [task setArguments:args]; - [task setStandardOutput:outPipe]; - [task setStandardError:outPipe]; - - NSLog(@"Generating stack trace for Obj-C exception..."); - - // This will throw an exception if the atos tool cannot be found, and in - // that case we'll just hit our @catch block below. - [task launch]; - - [task waitUntilExit]; - [task release]; - - NSData* outData = - [[outPipe fileHandleForReading] readDataToEndOfFile]; - NSString* outString = - [[NSString alloc] initWithData:outData encoding:NSUTF8StringEncoding]; - - NSLog(@"Stack trace:\n%@", outString); - - [outString release]; - } else { - NSLog(@""); - } - } - @catch (NSException* exn) { - NSLog(@"Failed to generate stack trace for Obj-C exception [%@: %@]", - [exn name], [exn reason]); - } -#endif } __attribute__((unused)) -- cgit v1.2.3 From ff2f287f82630ab3887d7d5c1e64e5b888ea0beb Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Mon, 1 Apr 2019 13:05:24 +0200 Subject: Remove crashreporter toolkit files. Resolves #20 --- gfx/ipc/moz.build | 1 - ipc/glue/moz.build | 1 - toolkit/crashreporter/CrashReports.jsm | 91 - toolkit/crashreporter/CrashSubmit.jsm | 570 -- toolkit/crashreporter/InjectCrashReporter.cpp | 84 - toolkit/crashreporter/InjectCrashReporter.h | 28 - toolkit/crashreporter/KeyValueParser.jsm | 54 - toolkit/crashreporter/LoadLibraryRemote.cpp | 454 - toolkit/crashreporter/LoadLibraryRemote.h | 24 - .../breakpad-patches/00-arm-exidx-rollup.patch | 1347 --- toolkit/crashreporter/breakpad-patches/README | 4 - .../breakpad-windows-libxul/moz.build | 32 - .../breakpad-windows-standalone/moz.build | 26 - toolkit/crashreporter/client/Makefile.in | 20 - toolkit/crashreporter/client/Throbber-small.avi | Bin 3584 -> 0 bytes toolkit/crashreporter/client/crashreporter.cpp | 759 -- .../client/crashreporter.exe.manifest | 37 - toolkit/crashreporter/client/crashreporter.h | 158 - toolkit/crashreporter/client/crashreporter.ico | Bin 25214 -> 0 bytes toolkit/crashreporter/client/crashreporter.rc | 148 - .../client/crashreporter_gtk_common.cpp | 453 - .../client/crashreporter_gtk_common.h | 50 - .../crashreporter/client/crashreporter_linux.cpp | 576 -- toolkit/crashreporter/client/crashreporter_osx.h | 107 - toolkit/crashreporter/client/crashreporter_osx.mm | 922 -- .../client/crashreporter_unix_common.cpp | 85 - toolkit/crashreporter/client/crashreporter_win.cpp | 1568 ---- .../client/macbuild/Contents/Info.plist | 32 - .../crashreporter/client/macbuild/Contents/PkgInfo | 2 - .../Resources/English.lproj/InfoPlist.strings.in | 8 - .../English.lproj/MainMenu.nib/classes.nib | 102 - .../Resources/English.lproj/MainMenu.nib/info.nib | 18 - .../English.lproj/MainMenu.nib/keyedobjects.nib | Bin 25518 -> 0 bytes .../English.lproj/MainMenuRTL.nib/classes.nib | 102 - .../English.lproj/MainMenuRTL.nib/info.nib | 18 - .../English.lproj/MainMenuRTL.nib/keyedobjects.nib | Bin 27032 -> 0 bytes .../macbuild/Contents/Resources/crashreporter.icns | Bin 61743 -> 0 bytes toolkit/crashreporter/client/moz.build | 78 - toolkit/crashreporter/client/resource.h | 37 - toolkit/crashreporter/content/crashes.js | 179 - toolkit/crashreporter/content/crashes.xhtml | 123 - toolkit/crashreporter/crashreporter.mozbuild | 24 - toolkit/crashreporter/docs/index.rst | 195 - toolkit/crashreporter/google-breakpad/.gitignore | 82 - toolkit/crashreporter/google-breakpad/AUTHORS | 1 - toolkit/crashreporter/google-breakpad/ChangeLog | 0 toolkit/crashreporter/google-breakpad/DEPS | 75 - toolkit/crashreporter/google-breakpad/GIT-INFO | 1 - toolkit/crashreporter/google-breakpad/INSTALL | 370 - toolkit/crashreporter/google-breakpad/LICENSE | 50 - toolkit/crashreporter/google-breakpad/Makefile.am | 1510 ---- toolkit/crashreporter/google-breakpad/Makefile.in | 8221 ----------------- toolkit/crashreporter/google-breakpad/NEWS | 0 .../crashreporter/google-breakpad/README.ANDROID | 139 - toolkit/crashreporter/google-breakpad/README.md | 82 - toolkit/crashreporter/google-breakpad/aclocal.m4 | 1297 --- .../google-breakpad/android/common-functions.sh | 372 - .../android/google_breakpad/Android.mk | 103 - .../google-breakpad/android/run-checks.sh | 555 -- .../google-breakpad/android/sample_app/README | 32 - .../android/sample_app/jni/Android.mk | 44 - .../android/sample_app/jni/Application.mk | 32 - .../android/sample_app/jni/test_breakpad.cpp | 57 - .../google-breakpad/android/test-driver | 131 - .../google-breakpad/android/test-shell.sh | 131 - .../google-breakpad/autotools/compile | 347 - .../google-breakpad/autotools/config.guess | 1447 --- .../google-breakpad/autotools/config.sub | 1813 ---- .../google-breakpad/autotools/depcomp | 791 -- .../google-breakpad/autotools/install-sh | 501 -- .../google-breakpad/autotools/ltmain.sh | 8406 ------------------ .../google-breakpad/autotools/missing | 215 - .../google-breakpad/autotools/test-driver | 148 - .../google-breakpad/breakpad-client.pc.in | 10 - .../crashreporter/google-breakpad/breakpad.pc.in | 10 - .../google-breakpad/codereview.settings | 4 - toolkit/crashreporter/google-breakpad/configure | 9255 -------------------- toolkit/crashreporter/google-breakpad/configure.ac | 204 - .../crashreporter/google-breakpad/m4/ax_pthread.m4 | 283 - .../crashreporter/google-breakpad/m4/libtool.m4 | 7377 ---------------- .../crashreporter/google-breakpad/m4/ltoptions.m4 | 368 - .../crashreporter/google-breakpad/m4/ltsugar.m4 | 123 - .../crashreporter/google-breakpad/m4/ltversion.m4 | 23 - .../google-breakpad/m4/lt~obsolete.m4 | 92 - .../src/breakpad_googletest_includes.h | 57 - .../google-breakpad/src/build/all.gyp | 41 - .../google-breakpad/src/build/common.gypi | 1045 --- .../google-breakpad/src/build/filename_rules.gypi | 57 - .../google-breakpad/src/build/gyp_breakpad | 67 - .../google-breakpad/src/build/testing.gypi | 90 - .../src/client/apple/Framework/BreakpadDefines.h | 73 - .../google-breakpad/src/client/ios/Breakpad.h | 246 - .../google-breakpad/src/client/ios/Breakpad.mm | 916 -- .../client/ios/Breakpad.xcodeproj/project.pbxproj | 578 -- .../src/client/ios/BreakpadController.h | 141 - .../src/client/ios/BreakpadController.mm | 354 - .../src/client/ios/Breakpad_Prefix.pch | 7 - .../ios/handler/ios_exception_minidump_generator.h | 74 - .../handler/ios_exception_minidump_generator.mm | 210 - .../client/linux/crash_generation/client_info.h | 53 - .../crash_generation/crash_generation_client.cc | 105 - .../crash_generation/crash_generation_client.h | 65 - .../crash_generation/crash_generation_server.cc | 333 - .../crash_generation/crash_generation_server.h | 135 - .../src/client/linux/data/linux-gate-amd.sym | 3 - .../src/client/linux/data/linux-gate-intel.sym | 3 - .../client/linux/dump_writer_common/mapping_info.h | 61 - .../linux/dump_writer_common/raw_context_cpu.h | 53 - .../client/linux/dump_writer_common/thread_info.cc | 305 - .../client/linux/dump_writer_common/thread_info.h | 91 - .../linux/dump_writer_common/ucontext_reader.cc | 259 - .../linux/dump_writer_common/ucontext_reader.h | 64 - .../src/client/linux/handler/exception_handler.cc | 789 -- .../src/client/linux/handler/exception_handler.h | 278 - .../linux/handler/exception_handler_unittest.cc | 1179 --- .../client/linux/handler/microdump_extra_info.h | 52 - .../client/linux/handler/minidump_descriptor.cc | 87 - .../src/client/linux/handler/minidump_descriptor.h | 149 - .../google-breakpad/src/client/linux/log/log.cc | 84 - .../google-breakpad/src/client/linux/log/log.h | 55 - .../linux/microdump_writer/microdump_writer.cc | 609 -- .../linux/microdump_writer/microdump_writer.h | 65 - .../microdump_writer/microdump_writer_unittest.cc | 257 - .../src/client/linux/minidump_writer/cpu_set.h | 144 - .../linux/minidump_writer/cpu_set_unittest.cc | 164 - .../linux/minidump_writer/directory_reader.h | 106 - .../minidump_writer/directory_reader_unittest.cc | 78 - .../src/client/linux/minidump_writer/line_reader.h | 131 - .../linux/minidump_writer/line_reader_unittest.cc | 169 - .../linux/minidump_writer/linux_core_dumper.cc | 258 - .../linux/minidump_writer/linux_core_dumper.h | 125 - .../minidump_writer/linux_core_dumper_unittest.cc | 128 - .../client/linux/minidump_writer/linux_dumper.cc | 776 -- .../client/linux/minidump_writer/linux_dumper.h | 265 - .../linux_dumper_unittest_helper.cc | 94 - .../linux/minidump_writer/linux_ptrace_dumper.cc | 355 - .../linux/minidump_writer/linux_ptrace_dumper.h | 92 - .../linux_ptrace_dumper_unittest.cc | 470 - .../linux/minidump_writer/minidump_writer.cc | 1376 --- .../client/linux/minidump_writer/minidump_writer.h | 124 - .../minidump_writer/minidump_writer_unittest.cc | 775 -- .../minidump_writer_unittest_utils.cc | 66 - .../minidump_writer_unittest_utils.h | 49 - .../linux/minidump_writer/proc_cpuinfo_reader.h | 130 - .../proc_cpuinfo_reader_unittest.cc | 199 - .../google-breakpad/src/client/linux/moz.build | 35 - .../linux/sender/google_crash_report_sender.cc | 104 - .../client/mac/Breakpad.xcodeproj/project.pbxproj | 2788 ------ .../src/client/mac/Framework/Breakpad.h | 285 - .../src/client/mac/Framework/Breakpad.mm | 1043 --- .../src/client/mac/Framework/Breakpad_Prefix.pch | 8 - .../src/client/mac/Framework/Info.plist | 26 - .../src/client/mac/Framework/OnDemandServer.h | 145 - .../src/client/mac/Framework/OnDemandServer.mm | 189 - .../src/client/mac/UnitTests-Info.plist | 20 - .../src/client/mac/crash_generation/ConfigFile.h | 83 - .../src/client/mac/crash_generation/ConfigFile.mm | 167 - .../src/client/mac/crash_generation/Inspector.h | 162 - .../src/client/mac/crash_generation/Inspector.mm | 362 - .../client/mac/crash_generation/InspectorMain.mm | 65 - .../src/client/mac/crash_generation/client_info.h | 47 - .../crash_generation/crash_generation_client.cc | 72 - .../mac/crash_generation/crash_generation_client.h | 65 - .../crash_generation/crash_generation_server.cc | 166 - .../mac/crash_generation/crash_generation_server.h | 150 - .../src/client/mac/crash_generation/moz.build | 19 - .../src/client/mac/handler/breakpad_nlist_64.cc | 402 - .../src/client/mac/handler/breakpad_nlist_64.h | 47 - .../src/client/mac/handler/dynamic_images.cc | 573 -- .../src/client/mac/handler/dynamic_images.h | 319 - .../src/client/mac/handler/exception_handler.cc | 854 -- .../src/client/mac/handler/exception_handler.h | 281 - .../src/client/mac/handler/mach_vm_compat.h | 48 - .../src/client/mac/handler/minidump_generator.cc | 1604 ---- .../src/client/mac/handler/minidump_generator.h | 236 - .../minidump_test.xcodeproj/project.pbxproj | 841 -- .../client/mac/handler/minidump_tests32-Info.plist | 20 - .../client/mac/handler/minidump_tests64-Info.plist | 22 - .../src/client/mac/handler/moz.build | 22 - .../client/mac/handler/obj-cTestCases-Info.plist | 20 - .../mac/handler/protected_memory_allocator.cc | 92 - .../mac/handler/protected_memory_allocator.h | 85 - .../mac/handler/testcases/DynamicImagesTests.cc | 79 - .../mac/handler/testcases/DynamicImagesTests.h | 52 - .../mac/handler/testcases/breakpad_nlist_test.cc | 106 - .../mac/handler/testcases/breakpad_nlist_test.h | 62 - .../src/client/mac/handler/testcases/dwarftests.h | 46 - .../src/client/mac/handler/testcases/dwarftests.mm | 60 - .../testcases/testdata/dump_syms_dwarf_data | Bin 702795 -> 0 bytes .../testcases/testdata/dump_syms_i386_breakpad.sym | 5300 ----------- .../src/client/mac/handler/ucontext_compat.h | 47 - .../src/client/mac/sender/Breakpad.xib | 1140 --- .../mac/sender/English.lproj/InfoPlist.strings | Bin 156 -> 0 bytes .../mac/sender/English.lproj/Localizable.strings | Bin 2428 -> 0 bytes .../src/client/mac/sender/ReporterIcon.graffle | 2489 ------ .../mac/sender/crash_report_sender-Info.plist | 32 - .../src/client/mac/sender/crash_report_sender.h | 117 - .../src/client/mac/sender/crash_report_sender.icns | Bin 170816 -> 0 bytes .../src/client/mac/sender/crash_report_sender.m | 755 -- .../client/mac/sender/da.lproj/InfoPlist.strings | Bin 156 -> 0 bytes .../client/mac/sender/da.lproj/Localizable.strings | Bin 2428 -> 0 bytes .../client/mac/sender/de.lproj/InfoPlist.strings | Bin 192 -> 0 bytes .../client/mac/sender/de.lproj/Localizable.strings | Bin 2746 -> 0 bytes .../client/mac/sender/es.lproj/InfoPlist.strings | Bin 184 -> 0 bytes .../client/mac/sender/es.lproj/Localizable.strings | Bin 2578 -> 0 bytes .../client/mac/sender/fr.lproj/InfoPlist.strings | Bin 156 -> 0 bytes .../client/mac/sender/fr.lproj/Localizable.strings | Bin 2694 -> 0 bytes .../src/client/mac/sender/goArrow.png | Bin 3591 -> 0 bytes .../client/mac/sender/it.lproj/InfoPlist.strings | Bin 156 -> 0 bytes .../client/mac/sender/it.lproj/Localizable.strings | Bin 2590 -> 0 bytes .../client/mac/sender/ja.lproj/InfoPlist.strings | Bin 156 -> 0 bytes .../client/mac/sender/ja.lproj/Localizable.strings | Bin 1792 -> 0 bytes .../client/mac/sender/nl.lproj/InfoPlist.strings | Bin 156 -> 0 bytes .../client/mac/sender/nl.lproj/Localizable.strings | Bin 2546 -> 0 bytes .../client/mac/sender/no.lproj/InfoPlist.strings | Bin 156 -> 0 bytes .../client/mac/sender/no.lproj/Localizable.strings | Bin 2484 -> 0 bytes .../client/mac/sender/sl.lproj/InfoPlist.strings | Bin 184 -> 0 bytes .../client/mac/sender/sl.lproj/Localizable.strings | Bin 2632 -> 0 bytes .../client/mac/sender/sv.lproj/InfoPlist.strings | Bin 156 -> 0 bytes .../client/mac/sender/sv.lproj/Localizable.strings | Bin 2588 -> 0 bytes .../client/mac/sender/tr.lproj/InfoPlist.strings | Bin 168 -> 0 bytes .../client/mac/sender/tr.lproj/Localizable.strings | Bin 2430 -> 0 bytes .../src/client/mac/sender/uploader.h | 89 - .../src/client/mac/sender/uploader.mm | 636 -- .../src/client/mac/testapp/Controller.h | 65 - .../src/client/mac/testapp/Controller.m | 261 - .../mac/testapp/English.lproj/InfoPlist.strings | Bin 192 -> 0 bytes .../client/mac/testapp/English.lproj/MainMenu.xib | 3748 -------- .../src/client/mac/testapp/Info.plist | 55 - .../src/client/mac/testapp/TestClass.h | 37 - .../src/client/mac/testapp/TestClass.mm | 95 - .../src/client/mac/testapp/bomb.icns | Bin 23659 -> 0 bytes .../src/client/mac/testapp/crashInMain | Bin 12588 -> 0 bytes .../src/client/mac/testapp/crashduringload | Bin 12588 -> 0 bytes .../google-breakpad/src/client/mac/testapp/main.m | 34 - .../src/client/mac/tests/BreakpadFramework_Test.mm | 217 - .../mac/tests/crash_generation_server_test.cc | 398 - .../src/client/mac/tests/exception_handler_test.cc | 713 -- .../client/mac/tests/minidump_generator_test.cc | 319 - .../mac/tests/minidump_generator_test_helper.cc | 74 - .../src/client/mac/tests/spawn_child_process.h | 149 - .../src/client/mac/tests/testlogging.h | 9 - .../src/client/minidump_file_writer-inl.h | 97 - .../src/client/minidump_file_writer.cc | 350 - .../src/client/minidump_file_writer.h | 272 - .../src/client/minidump_file_writer_unittest.cc | 179 - .../google-breakpad/src/client/moz.build | 18 - .../src/client/solaris/handler/Makefile | 78 - .../client/solaris/handler/exception_handler.cc | 258 - .../src/client/solaris/handler/exception_handler.h | 201 - .../solaris/handler/exception_handler_test.cc | 119 - .../client/solaris/handler/minidump_generator.cc | 786 -- .../client/solaris/handler/minidump_generator.h | 70 - .../src/client/solaris/handler/minidump_test.cc | 75 - .../src/client/solaris/handler/moz.build | 18 - .../src/client/solaris/handler/solaris_lwp.cc | 436 - .../src/client/solaris/handler/solaris_lwp.h | 160 - .../src/client/windows/breakpad_client.gyp | 66 - .../client/windows/common/auto_critical_section.h | 81 - .../src/client/windows/common/ipc_protocol.h | 181 - .../src/client/windows/crash_generation/ReadMe.txt | 58 - .../client/windows/crash_generation/client_info.cc | 223 - .../client/windows/crash_generation/client_info.h | 177 - .../windows/crash_generation/crash_generation.gyp | 63 - .../crash_generation/crash_generation_client.cc | 405 - .../crash_generation/crash_generation_client.h | 182 - .../crash_generation/crash_generation_server.cc | 931 -- .../crash_generation/crash_generation_server.h | 299 - .../windows/crash_generation/minidump_generator.cc | 579 -- .../windows/crash_generation/minidump_generator.h | 199 - .../client/windows/crash_generation/objs.mozbuild | 17 - .../client/windows/handler/exception_handler.cc | 1073 --- .../client/windows/handler/exception_handler.gyp | 47 - .../src/client/windows/handler/exception_handler.h | 524 -- .../src/client/windows/handler/objs.mozbuild | 14 - .../client/windows/sender/crash_report_sender.cc | 142 - .../client/windows/sender/crash_report_sender.gyp | 46 - .../client/windows/sender/crash_report_sender.h | 125 - .../src/client/windows/sender/objs.mozbuild | 14 - .../tests/crash_generation_app/abstract_class.cc | 53 - .../tests/crash_generation_app/abstract_class.h | 57 - .../crash_generation_app/crash_generation_app.cc | 522 -- .../crash_generation_app/crash_generation_app.gyp | 63 - .../crash_generation_app/crash_generation_app.h | 35 - .../crash_generation_app/crash_generation_app.ico | Bin 23558 -> 0 bytes .../crash_generation_app/crash_generation_app.rc | 144 - .../windows/tests/crash_generation_app/resource.h | 73 - .../windows/tests/crash_generation_app/small.ico | Bin 23558 -> 0 bytes .../src/client/windows/unittests/client_tests.gyp | 80 - .../unittests/crash_generation_server_test.cc | 305 - .../src/client/windows/unittests/dump_analysis.cc | 184 - .../src/client/windows/unittests/dump_analysis.h | 102 - .../unittests/exception_handler_death_test.cc | 582 -- .../unittests/exception_handler_nesting_test.cc | 327 - .../windows/unittests/exception_handler_test.cc | 501 -- .../windows/unittests/exception_handler_test.h | 61 - .../src/client/windows/unittests/minidump_test.cc | 333 - .../src/client/windows/unittests/testing.gyp | 83 - .../google-breakpad/src/common/Makefile.in | 9 - .../src/common/android/breakpad_getcontext.S | 489 -- .../common/android/breakpad_getcontext_unittest.cc | 186 - .../src/common/android/include/elf.h | 168 - .../src/common/android/include/link.h | 73 - .../src/common/android/include/sgidefs.h | 41 - .../src/common/android/include/stab.h | 100 - .../src/common/android/include/sys/procfs.h | 124 - .../src/common/android/include/sys/signal.h | 35 - .../src/common/android/include/sys/user.h | 85 - .../src/common/android/include/ucontext.h | 56 - .../src/common/android/testing/include/wchar.h | 76 - .../src/common/android/testing/mkdtemp.h | 110 - .../src/common/android/testing/pthread_fixes.h | 99 - .../src/common/android/ucontext_constants.h | 144 - .../google-breakpad/src/common/arm_ex_reader.cc | 487 - .../google-breakpad/src/common/arm_ex_reader.h | 114 - .../google-breakpad/src/common/arm_ex_to_module.cc | 209 - .../google-breakpad/src/common/arm_ex_to_module.h | 119 - .../google-breakpad/src/common/basictypes.h | 58 - .../google-breakpad/src/common/byte_cursor.h | 265 - .../src/common/byte_cursor_unittest.cc | 776 -- .../google-breakpad/src/common/common.gyp | 250 - .../google-breakpad/src/common/convert_UTF.c | 554 -- .../google-breakpad/src/common/convert_UTF.h | 164 - .../src/common/dwarf/bytereader-inl.h | 170 - .../google-breakpad/src/common/dwarf/bytereader.cc | 250 - .../google-breakpad/src/common/dwarf/bytereader.h | 315 - .../src/common/dwarf/bytereader_unittest.cc | 707 -- .../src/common/dwarf/cfi_assembler.cc | 198 - .../src/common/dwarf/cfi_assembler.h | 269 - .../src/common/dwarf/dwarf2diehandler.cc | 199 - .../src/common/dwarf/dwarf2diehandler.h | 365 - .../src/common/dwarf/dwarf2diehandler_unittest.cc | 527 -- .../google-breakpad/src/common/dwarf/dwarf2enums.h | 675 -- .../src/common/dwarf/dwarf2reader.cc | 2734 ------ .../src/common/dwarf/dwarf2reader.h | 1288 --- .../src/common/dwarf/dwarf2reader_cfi_unittest.cc | 2468 ------ .../src/common/dwarf/dwarf2reader_die_unittest.cc | 487 - .../src/common/dwarf/dwarf2reader_test_common.h | 149 - .../google-breakpad/src/common/dwarf/elf_reader.cc | 1273 --- .../google-breakpad/src/common/dwarf/elf_reader.h | 166 - .../src/common/dwarf/functioninfo.cc | 231 - .../src/common/dwarf/functioninfo.h | 188 - .../src/common/dwarf/line_state_machine.h | 61 - .../google-breakpad/src/common/dwarf/moz.build | 35 - .../google-breakpad/src/common/dwarf/types.h | 51 - .../src/common/dwarf_cfi_to_module.cc | 295 - .../src/common/dwarf_cfi_to_module.h | 202 - .../src/common/dwarf_cfi_to_module_unittest.cc | 306 - .../src/common/dwarf_cu_to_module.cc | 1075 --- .../src/common/dwarf_cu_to_module.h | 320 - .../src/common/dwarf_cu_to_module_unittest.cc | 1804 ---- .../src/common/dwarf_line_to_module.cc | 143 - .../src/common/dwarf_line_to_module.h | 188 - .../src/common/dwarf_line_to_module_unittest.cc | 391 - .../google-breakpad/src/common/language.cc | 83 - .../google-breakpad/src/common/language.h | 88 - .../google-breakpad/src/common/linux/crc32.cc | 70 - .../google-breakpad/src/common/linux/crc32.h | 53 - .../src/common/linux/dump_symbols.cc | 1159 --- .../src/common/linux/dump_symbols.h | 86 - .../src/common/linux/dump_symbols_unittest.cc | 204 - .../src/common/linux/eintr_wrapper.h | 58 - .../src/common/linux/elf_core_dump.cc | 179 - .../src/common/linux/elf_core_dump.h | 148 - .../src/common/linux/elf_core_dump_unittest.cc | 256 - .../src/common/linux/elf_gnu_compat.h | 46 - .../src/common/linux/elf_symbols_to_module.cc | 178 - .../src/common/linux/elf_symbols_to_module.h | 58 - .../common/linux/elf_symbols_to_module_unittest.cc | 370 - .../src/common/linux/elfutils-inl.h | 74 - .../google-breakpad/src/common/linux/elfutils.cc | 194 - .../google-breakpad/src/common/linux/elfutils.h | 126 - .../google-breakpad/src/common/linux/file_id.cc | 202 - .../google-breakpad/src/common/linux/file_id.h | 87 - .../src/common/linux/file_id_unittest.cc | 338 - .../src/common/linux/google_crashdump_uploader.cc | 202 - .../src/common/linux/google_crashdump_uploader.h | 107 - .../common/linux/google_crashdump_uploader_test.cc | 170 - .../src/common/linux/guid_creator.cc | 104 - .../src/common/linux/guid_creator.h | 48 - .../src/common/linux/http_upload.cc | 230 - .../google-breakpad/src/common/linux/http_upload.h | 90 - .../google-breakpad/src/common/linux/ignore_ret.h | 40 - .../src/common/linux/libcurl_wrapper.cc | 241 - .../src/common/linux/libcurl_wrapper.h | 93 - .../src/common/linux/linux_libc_support.cc | 237 - .../src/common/linux/linux_libc_support.h | 96 - .../common/linux/linux_libc_support_unittest.cc | 213 - .../src/common/linux/memory_mapped_file.cc | 107 - .../src/common/linux/memory_mapped_file.h | 87 - .../common/linux/memory_mapped_file_unittest.cc | 208 - .../google-breakpad/src/common/linux/moz.build | 56 - .../src/common/linux/safe_readlink.cc | 53 - .../src/common/linux/safe_readlink.h | 65 - .../src/common/linux/safe_readlink_unittest.cc | 89 - .../src/common/linux/symbol_upload.cc | 155 - .../src/common/linux/symbol_upload.h | 59 - .../google-breakpad/src/common/linux/synth_elf.cc | 263 - .../google-breakpad/src/common/linux/synth_elf.h | 197 - .../src/common/linux/synth_elf_unittest.cc | 413 - .../src/common/linux/tests/auto_testfile.h | 124 - .../src/common/linux/tests/crash_generator.cc | 322 - .../src/common/linux/tests/crash_generator.h | 117 - .../src/common/mac/Breakpad.xcconfig | 52 - .../src/common/mac/BreakpadDebug.xcconfig | 32 - .../src/common/mac/BreakpadRelease.xcconfig | 34 - .../google-breakpad/src/common/mac/GTMDefines.h | 456 - .../google-breakpad/src/common/mac/GTMLogger.h | 504 -- .../google-breakpad/src/common/mac/GTMLogger.m | 611 -- .../src/common/mac/HTTPMultipartUpload.h | 61 - .../src/common/mac/HTTPMultipartUpload.m | 269 - .../google-breakpad/src/common/mac/MachIPC.h | 301 - .../google-breakpad/src/common/mac/MachIPC.mm | 306 - .../src/common/mac/arch_utilities.cc | 211 - .../src/common/mac/arch_utilities.h | 47 - .../src/common/mac/bootstrap_compat.cc | 42 - .../src/common/mac/bootstrap_compat.h | 54 - .../google-breakpad/src/common/mac/byteswap.h | 73 - .../google-breakpad/src/common/mac/dump_syms.cc | 646 -- .../google-breakpad/src/common/mac/dump_syms.h | 196 - .../google-breakpad/src/common/mac/file_id.cc | 106 - .../google-breakpad/src/common/mac/file_id.h | 81 - .../src/common/mac/launch_reporter.cc | 84 - .../src/common/mac/launch_reporter.h | 43 - .../google-breakpad/src/common/mac/macho_id.cc | 369 - .../google-breakpad/src/common/mac/macho_id.h | 131 - .../google-breakpad/src/common/mac/macho_reader.cc | 539 -- .../google-breakpad/src/common/mac/macho_reader.h | 460 - .../src/common/mac/macho_reader_unittest.cc | 1902 ---- .../src/common/mac/macho_utilities.cc | 155 - .../src/common/mac/macho_utilities.h | 95 - .../google-breakpad/src/common/mac/macho_walker.cc | 268 - .../google-breakpad/src/common/mac/macho_walker.h | 119 - .../google-breakpad/src/common/mac/moz.build | 52 - .../src/common/mac/scoped_task_suspend-inl.h | 56 - .../src/common/mac/string_utilities.cc | 84 - .../src/common/mac/string_utilities.h | 52 - .../src/common/mac/super_fat_arch.h | 88 - .../src/common/mac/testing/GTMSenTestCase.h | 1110 --- .../src/common/mac/testing/GTMSenTestCase.m | 428 - .../google-breakpad/src/common/md5.cc | 251 - .../crashreporter/google-breakpad/src/common/md5.h | 27 - .../google-breakpad/src/common/memory.h | 249 - .../google-breakpad/src/common/memory_range.h | 145 - .../src/common/memory_range_unittest.cc | 193 - .../google-breakpad/src/common/memory_unittest.cc | 124 - .../src/common/minidump_type_helper.h | 56 - .../google-breakpad/src/common/module.cc | 348 - .../google-breakpad/src/common/module.h | 351 - .../google-breakpad/src/common/module_unittest.cc | 616 -- .../google-breakpad/src/common/moz.build | 72 - .../google-breakpad/src/common/scoped_ptr.h | 404 - .../src/common/simple_string_dictionary.cc | 45 - .../src/common/simple_string_dictionary.h | 260 - .../common/simple_string_dictionary_unittest.cc | 308 - .../src/common/solaris/dump_symbols.cc | 681 -- .../src/common/solaris/dump_symbols.h | 49 - .../google-breakpad/src/common/solaris/file_id.cc | 197 - .../google-breakpad/src/common/solaris/file_id.h | 66 - .../src/common/solaris/guid_creator.cc | 84 - .../src/common/solaris/guid_creator.h | 50 - .../src/common/solaris/message_output.h | 54 - .../google-breakpad/src/common/solaris/moz.build | 34 - .../google-breakpad/src/common/stabs_reader.cc | 315 - .../google-breakpad/src/common/stabs_reader.h | 325 - .../src/common/stabs_reader_unittest.cc | 611 -- .../google-breakpad/src/common/stabs_to_module.cc | 197 - .../google-breakpad/src/common/stabs_to_module.h | 143 - .../src/common/stabs_to_module_unittest.cc | 258 - .../google-breakpad/src/common/stdio_wrapper.h | 43 - .../src/common/string_conversion.cc | 155 - .../google-breakpad/src/common/string_conversion.h | 68 - .../google-breakpad/src/common/symbol_data.h | 42 - .../google-breakpad/src/common/test_assembler.cc | 359 - .../google-breakpad/src/common/test_assembler.h | 484 - .../src/common/test_assembler_unittest.cc | 1662 ---- .../src/common/testdata/func-line-pairing.h | 676 -- .../src/common/tests/auto_tempdir.h | 100 - .../google-breakpad/src/common/tests/file_utils.cc | 153 - .../google-breakpad/src/common/tests/file_utils.h | 52 - .../google-breakpad/src/common/unordered.h | 62 - .../google-breakpad/src/common/using_std_string.h | 65 - .../src/common/windows/common_windows.gyp | 105 - .../google-breakpad/src/common/windows/dia_util.cc | 92 - .../google-breakpad/src/common/windows/dia_util.h | 64 - .../src/common/windows/guid_string.cc | 76 - .../src/common/windows/guid_string.h | 58 - .../src/common/windows/http_upload.cc | 420 - .../src/common/windows/http_upload.h | 129 - .../src/common/windows/objs.mozbuild | 15 - .../google-breakpad/src/common/windows/omap.cc | 694 -- .../google-breakpad/src/common/windows/omap.h | 72 - .../src/common/windows/omap_internal.h | 137 - .../src/common/windows/omap_unittest.cc | 330 - .../src/common/windows/pdb_source_line_writer.cc | 1369 --- .../src/common/windows/pdb_source_line_writer.h | 257 - .../src/common/windows/string_utils-inl.h | 142 - .../src/common/windows/string_utils.cc | 133 - .../crashreporter/google-breakpad/src/config.h.in | 79 - .../src/google_breakpad/common/breakpad_types.h | 68 - .../google_breakpad/common/minidump_cpu_amd64.h | 235 - .../src/google_breakpad/common/minidump_cpu_arm.h | 151 - .../google_breakpad/common/minidump_cpu_arm64.h | 140 - .../src/google_breakpad/common/minidump_cpu_mips.h | 176 - .../src/google_breakpad/common/minidump_cpu_ppc.h | 168 - .../google_breakpad/common/minidump_cpu_ppc64.h | 134 - .../google_breakpad/common/minidump_cpu_sparc.h | 163 - .../src/google_breakpad/common/minidump_cpu_x86.h | 174 - .../common/minidump_exception_linux.h | 87 - .../common/minidump_exception_mac.h | 205 - .../common/minidump_exception_ps3.h | 67 - .../common/minidump_exception_solaris.h | 94 - .../common/minidump_exception_win32.h | 2264 ----- .../src/google_breakpad/common/minidump_format.h | 1045 --- .../src/google_breakpad/common/minidump_size.h | 113 - .../processor/basic_source_line_resolver.h | 144 - .../src/google_breakpad/processor/call_stack.h | 87 - .../src/google_breakpad/processor/code_module.h | 101 - .../src/google_breakpad/processor/code_modules.h | 111 - .../src/google_breakpad/processor/dump_context.h | 116 - .../src/google_breakpad/processor/dump_object.h | 53 - .../src/google_breakpad/processor/exploitability.h | 82 - .../processor/fast_source_line_resolver.h | 100 - .../src/google_breakpad/processor/memory_region.h | 79 - .../src/google_breakpad/processor/microdump.h | 132 - .../processor/microdump_processor.h | 63 - .../src/google_breakpad/processor/minidump.h | 1171 --- .../google_breakpad/processor/minidump_processor.h | 147 - .../google_breakpad/processor/proc_maps_linux.h | 60 - .../src/google_breakpad/processor/process_result.h | 66 - .../src/google_breakpad/processor/process_state.h | 198 - .../processor/source_line_resolver_base.h | 128 - .../processor/source_line_resolver_interface.h | 117 - .../src/google_breakpad/processor/stack_frame.h | 144 - .../google_breakpad/processor/stack_frame_cpu.h | 405 - .../processor/stack_frame_symbolizer.h | 108 - .../src/google_breakpad/processor/stackwalker.h | 235 - .../google_breakpad/processor/symbol_supplier.h | 99 - .../src/google_breakpad/processor/system_info.h | 106 - .../src/processor/address_map-inl.h | 93 - .../google-breakpad/src/processor/address_map.h | 85 - .../src/processor/address_map_unittest.cc | 196 - .../src/processor/basic_code_module.h | 116 - .../src/processor/basic_code_modules.cc | 155 - .../src/processor/basic_code_modules.h | 98 - .../src/processor/basic_source_line_resolver.cc | 612 -- .../processor/basic_source_line_resolver_types.h | 177 - .../basic_source_line_resolver_unittest.cc | 682 -- .../google-breakpad/src/processor/call_stack.cc | 54 - .../src/processor/cfi_frame_info-inl.h | 119 - .../src/processor/cfi_frame_info.cc | 186 - .../google-breakpad/src/processor/cfi_frame_info.h | 275 - .../src/processor/cfi_frame_info_unittest.cc | 546 -- .../src/processor/contained_range_map-inl.h | 197 - .../src/processor/contained_range_map.h | 150 - .../src/processor/contained_range_map_unittest.cc | 263 - .../src/processor/disassembler_x86.cc | 240 - .../src/processor/disassembler_x86.h | 127 - .../src/processor/disassembler_x86_unittest.cc | 233 - .../google-breakpad/src/processor/dump_context.cc | 659 -- .../google-breakpad/src/processor/dump_object.cc | 39 - .../src/processor/exploitability.cc | 119 - .../src/processor/exploitability_linux.cc | 625 -- .../src/processor/exploitability_linux.h | 129 - .../src/processor/exploitability_unittest.cc | 306 - .../src/processor/exploitability_win.cc | 283 - .../src/processor/exploitability_win.h | 55 - .../src/processor/fast_source_line_resolver.cc | 275 - .../processor/fast_source_line_resolver_types.h | 185 - .../fast_source_line_resolver_unittest.cc | 491 -- .../google-breakpad/src/processor/linked_ptr.h | 193 - .../google-breakpad/src/processor/logging.cc | 111 - .../google-breakpad/src/processor/logging.h | 186 - .../src/processor/map_serializers-inl.h | 266 - .../src/processor/map_serializers.h | 168 - .../src/processor/map_serializers_unittest.cc | 386 - .../google-breakpad/src/processor/microdump.cc | 385 - .../src/processor/microdump_processor.cc | 100 - .../src/processor/microdump_processor_unittest.cc | 273 - .../src/processor/microdump_stackwalk.cc | 151 - .../microdump_stackwalk_machine_readable_test | 43 - .../src/processor/microdump_stackwalk_test | 43 - .../src/processor/microdump_stackwalk_test_vars | 1 - .../google-breakpad/src/processor/minidump.cc | 4989 ----------- .../google-breakpad/src/processor/minidump_dump.cc | 213 - .../src/processor/minidump_dump_test | 36 - .../src/processor/minidump_processor.cc | 1577 ---- .../src/processor/minidump_processor_unittest.cc | 645 -- .../src/processor/minidump_stackwalk.cc | 162 - .../minidump_stackwalk_machine_readable_test | 37 - .../src/processor/minidump_stackwalk_test | 37 - .../src/processor/minidump_unittest.cc | 1521 ---- .../src/processor/module_comparer.cc | 302 - .../src/processor/module_comparer.h | 98 - .../google-breakpad/src/processor/module_factory.h | 72 - .../src/processor/module_serializer.cc | 207 - .../src/processor/module_serializer.h | 127 - .../google-breakpad/src/processor/moz.build | 66 - .../src/processor/pathname_stripper.cc | 56 - .../src/processor/pathname_stripper.h | 53 - .../src/processor/pathname_stripper_unittest.cc | 87 - .../src/processor/postfix_evaluator-inl.h | 363 - .../src/processor/postfix_evaluator.h | 179 - .../src/processor/postfix_evaluator_unittest.cc | 403 - .../src/processor/proc_maps_linux.cc | 106 - .../src/processor/proc_maps_linux_unittest.cc | 251 - .../google-breakpad/src/processor/process_state.cc | 69 - .../google-breakpad/src/processor/processor.gyp | 184 - .../src/processor/processor_tools.gypi | 57 - .../google-breakpad/src/processor/proto/README | 20 - .../src/processor/proto/process_state.proto | 210 - .../google-breakpad/src/processor/range_map-inl.h | 272 - .../google-breakpad/src/processor/range_map.h | 161 - .../processor/range_map_shrink_down_unittest.cc | 355 - .../src/processor/range_map_unittest.cc | 559 -- .../src/processor/simple_serializer-inl.h | 260 - .../src/processor/simple_serializer.h | 63 - .../src/processor/simple_symbol_supplier.cc | 204 - .../src/processor/simple_symbol_supplier.h | 140 - .../src/processor/source_line_resolver_base.cc | 341 - .../processor/source_line_resolver_base_types.h | 158 - .../src/processor/stack_frame_cpu.cc | 79 - .../src/processor/stack_frame_symbolizer.cc | 138 - .../src/processor/stackwalk_common.cc | 950 -- .../src/processor/stackwalk_common.h | 49 - .../google-breakpad/src/processor/stackwalker.cc | 296 - .../src/processor/stackwalker_address_list.cc | 92 - .../src/processor/stackwalker_address_list.h | 72 - .../processor/stackwalker_address_list_unittest.cc | 197 - .../src/processor/stackwalker_amd64.cc | 340 - .../src/processor/stackwalker_amd64.h | 116 - .../src/processor/stackwalker_amd64_unittest.cc | 932 -- .../src/processor/stackwalker_arm.cc | 296 - .../src/processor/stackwalker_arm.h | 107 - .../src/processor/stackwalker_arm64.cc | 278 - .../src/processor/stackwalker_arm64.h | 104 - .../src/processor/stackwalker_arm64_unittest.cc | 880 -- .../src/processor/stackwalker_arm_unittest.cc | 974 -- .../src/processor/stackwalker_mips.cc | 448 - .../src/processor/stackwalker_mips.h | 85 - .../src/processor/stackwalker_mips_unittest.cc | 707 -- .../src/processor/stackwalker_ppc.cc | 146 - .../src/processor/stackwalker_ppc.h | 79 - .../src/processor/stackwalker_ppc64.cc | 137 - .../src/processor/stackwalker_ppc64.h | 77 - .../src/processor/stackwalker_selftest.cc | 433 - .../src/processor/stackwalker_selftest_sol.s | 111 - .../src/processor/stackwalker_sparc.cc | 139 - .../src/processor/stackwalker_sparc.h | 78 - .../src/processor/stackwalker_unittest_utils.h | 224 - .../src/processor/stackwalker_x86.cc | 672 -- .../src/processor/stackwalker_x86.h | 117 - .../src/processor/stackwalker_x86_unittest.cc | 2128 ----- .../src/processor/static_address_map-inl.h | 71 - .../src/processor/static_address_map.h | 78 - .../src/processor/static_address_map_unittest.cc | 236 - .../src/processor/static_contained_range_map-inl.h | 92 - .../src/processor/static_contained_range_map.h | 96 - .../static_contained_range_map_unittest.cc | 320 - .../google-breakpad/src/processor/static_map-inl.h | 176 - .../google-breakpad/src/processor/static_map.h | 144 - .../src/processor/static_map_iterator-inl.h | 147 - .../src/processor/static_map_iterator.h | 112 - .../src/processor/static_map_unittest.cc | 386 - .../src/processor/static_range_map-inl.h | 130 - .../src/processor/static_range_map.h | 106 - .../src/processor/static_range_map_unittest.cc | 421 - .../src/processor/symbolic_constants_win.cc | 6418 -------------- .../src/processor/symbolic_constants_win.h | 50 - .../src/processor/synth_minidump.cc | 391 - .../google-breakpad/src/processor/synth_minidump.h | 372 - .../src/processor/synth_minidump_unittest.cc | 336 - .../src/processor/synth_minidump_unittest_data.h | 418 - .../google-breakpad/src/processor/tokenize.cc | 79 - .../google-breakpad/src/processor/tokenize.h | 63 - .../src/processor/windows_frame_info.h | 209 - .../google-breakpad/src/third_party/curl/COPYING | 22 - .../google-breakpad/src/third_party/curl/curl.h | 1936 ---- .../src/third_party/curl/curlbuild.h | 202 - .../src/third_party/curl/curlrules.h | 249 - .../google-breakpad/src/third_party/curl/curlver.h | 70 - .../google-breakpad/src/third_party/curl/easy.h | 103 - .../google-breakpad/src/third_party/curl/mprintf.h | 82 - .../google-breakpad/src/third_party/curl/multi.h | 346 - .../src/third_party/curl/stdcheaders.h | 34 - .../src/third_party/curl/typecheck-gcc.h | 551 -- .../google-breakpad/src/third_party/curl/types.h | 1 - .../src/third_party/libdisasm/Makefile.am | 43 - .../google-breakpad/src/third_party/libdisasm/TODO | 43 - .../src/third_party/libdisasm/ia32_implicit.c | 422 - .../src/third_party/libdisasm/ia32_implicit.h | 13 - .../src/third_party/libdisasm/ia32_insn.c | 623 -- .../src/third_party/libdisasm/ia32_insn.h | 506 -- .../src/third_party/libdisasm/ia32_invariant.c | 313 - .../src/third_party/libdisasm/ia32_invariant.h | 11 - .../src/third_party/libdisasm/ia32_modrm.c | 310 - .../src/third_party/libdisasm/ia32_modrm.h | 13 - .../src/third_party/libdisasm/ia32_opcode_tables.c | 2939 ------- .../src/third_party/libdisasm/ia32_opcode_tables.h | 57 - .../src/third_party/libdisasm/ia32_operand.c | 425 - .../src/third_party/libdisasm/ia32_operand.h | 11 - .../src/third_party/libdisasm/ia32_reg.c | 234 - .../src/third_party/libdisasm/ia32_reg.h | 41 - .../src/third_party/libdisasm/ia32_settings.c | 13 - .../src/third_party/libdisasm/ia32_settings.h | 27 - .../src/third_party/libdisasm/libdis.h | 832 -- .../src/third_party/libdisasm/libdisasm.gyp | 67 - .../src/third_party/libdisasm/qword.h | 14 - .../src/third_party/libdisasm/swig/Makefile | 70 - .../src/third_party/libdisasm/swig/README | 128 - .../src/third_party/libdisasm/swig/libdisasm.i | 508 -- .../src/third_party/libdisasm/swig/libdisasm_oop.i | 1114 --- .../third_party/libdisasm/swig/perl/Makefile-swig | 65 - .../third_party/libdisasm/swig/perl/Makefile.PL | 7 - .../libdisasm/swig/python/Makefile-swig | 64 - .../third_party/libdisasm/swig/ruby/Makefile-swig | 68 - .../src/third_party/libdisasm/swig/ruby/extconf.rb | 4 - .../third_party/libdisasm/swig/tcl/Makefile-swig | 63 - .../src/third_party/libdisasm/x86_disasm.c | 210 - .../src/third_party/libdisasm/x86_format.c | 1430 --- .../src/third_party/libdisasm/x86_imm.c | 70 - .../src/third_party/libdisasm/x86_imm.h | 18 - .../src/third_party/libdisasm/x86_insn.c | 182 - .../src/third_party/libdisasm/x86_misc.c | 71 - .../src/third_party/libdisasm/x86_operand_list.c | 191 - .../src/third_party/libdisasm/x86_operand_list.h | 8 - .../src/third_party/linux/include/gflags/gflags.h | 533 -- .../linux/include/gflags/gflags_completions.h | 121 - .../src/third_party/lss/codereview.settings | 5 - .../src/third_party/lss/linux_syscall_support.h | 4496 ---------- .../src/third_party/mac_headers/README | 2 - .../mac_headers/architecture/byte_order.h | 45 - .../src/third_party/mac_headers/i386/_types.h | 34 - .../src/third_party/mac_headers/mach-o/arch.h | 105 - .../src/third_party/mac_headers/mach-o/fat.h | 64 - .../src/third_party/mac_headers/mach-o/loader.h | 1402 --- .../src/third_party/mac_headers/mach-o/nlist.h | 312 - .../src/third_party/mac_headers/mach/boolean.h | 88 - .../third_party/mac_headers/mach/i386/boolean.h | 74 - .../third_party/mac_headers/mach/i386/vm_param.h | 157 - .../third_party/mac_headers/mach/i386/vm_types.h | 140 - .../src/third_party/mac_headers/mach/machine.h | 346 - .../third_party/mac_headers/mach/machine/boolean.h | 40 - .../mac_headers/mach/machine/thread_state.h | 9 - .../mac_headers/mach/machine/thread_status.h | 1 - .../mac_headers/mach/machine/vm_types.h | 40 - .../third_party/mac_headers/mach/thread_status.h | 94 - .../src/third_party/mac_headers/mach/vm_prot.h | 140 - .../google-breakpad/src/third_party/musl/COPYRIGHT | 163 - .../google-breakpad/src/third_party/musl/README | 23 - .../src/third_party/musl/README.breakpad | 3 - .../google-breakpad/src/third_party/musl/VERSION | 1 - .../src/third_party/musl/include/elf.h | 2827 ------ .../src/tools/linux/core2md/core2md.cc | 72 - .../src/tools/linux/dump_syms/dump_syms.cc | 113 - .../src/tools/linux/dump_syms/moz.build | 33 - .../src/tools/linux/md2core/minidump-2-core.cc | 1276 --- .../tools/linux/md2core/minidump_memory_range.h | 89 - .../md2core/minidump_memory_range_unittest.cc | 258 - .../src/tools/linux/symupload/minidump_upload.cc | 153 - .../src/tools/linux/symupload/sym_upload.cc | 112 - .../src/tools/linux/tools_linux.gypi | 83 - .../src/tools/mac/crash_report/crash_report.mm | 408 - .../crash_report.xcodeproj/project.pbxproj | 587 -- .../mac/crash_report/on_demand_symbol_supplier.h | 111 - .../mac/crash_report/on_demand_symbol_supplier.mm | 316 - .../dump_syms/dump_syms.xcodeproj/project.pbxproj | 1839 ---- .../src/tools/mac/dump_syms/dump_syms_tool.cc | 264 - .../src/tools/mac/dump_syms/macho_dump.cc | 203 - .../src/tools/mac/dump_syms/moz.build | 40 - .../src/tools/mac/symupload/minidump_upload.m | 135 - .../src/tools/mac/symupload/symupload.m | 204 - .../symupload/symupload.xcodeproj/project.pbxproj | 254 - .../google-breakpad/src/tools/mac/tools_mac.gypi | 116 - .../mac/upload_system_symbols/arch_constants.h | 61 - .../tools/mac/upload_system_symbols/arch_reader.go | 65 - .../upload_system_symbols/upload_system_symbols.go | 420 - .../src/tools/python/filter_syms.py | 204 - .../src/tools/python/tests/filter_syms_unittest.py | 138 - .../src/tools/solaris/dump_syms/Makefile | 64 - .../src/tools/solaris/dump_syms/Makefile.in | 5 - .../src/tools/solaris/dump_syms/dump_syms.cc | 54 - .../src/tools/solaris/dump_syms/moz.build | 29 - .../src/tools/solaris/dump_syms/run_regtest.sh | 51 - .../dump_syms/testdata/dump_syms_regtest.cc | 64 - .../dump_syms/testdata/dump_syms_regtest.stabs | 129 - .../dump_syms/testdata/dump_syms_regtest.sym | 33 - .../google-breakpad/src/tools/tools.gyp | 38 - .../src/tools/windows/binaries/dump_syms.exe | Bin 130048 -> 0 bytes .../src/tools/windows/binaries/symupload.exe | Bin 195072 -> 0 bytes .../converter/ms_symbol_server_converter.cc | 576 -- .../converter/ms_symbol_server_converter.gyp | 46 - .../windows/converter/ms_symbol_server_converter.h | 219 - .../src/tools/windows/dump_syms/dump_syms.cc | 61 - .../src/tools/windows/dump_syms/dump_syms.gyp | 64 - .../tools/windows/dump_syms/dump_syms_unittest.cc | 204 - .../src/tools/windows/dump_syms/moz.build | 31 - .../src/tools/windows/dump_syms/run_regtest.sh | 53 - .../src/tools/windows/refresh_binaries.bat | 27 - .../src/tools/windows/symupload/symupload.cc | 259 - .../src/tools/windows/symupload/symupload.gyp | 45 - toolkit/crashreporter/injector/injector.cpp | 40 - toolkit/crashreporter/injector/moz.build | 26 - toolkit/crashreporter/jar.mn | 7 - toolkit/crashreporter/jsoncpp/AUTHORS | 1 - toolkit/crashreporter/jsoncpp/GIT-INFO | 1 - toolkit/crashreporter/jsoncpp/LICENSE | 55 - toolkit/crashreporter/jsoncpp/NEWS.txt | 175 - toolkit/crashreporter/jsoncpp/README.md | 214 - .../crashreporter/jsoncpp/include/json/allocator.h | 94 - .../jsoncpp/include/json/assertions.h | 54 - .../crashreporter/jsoncpp/include/json/autolink.h | 25 - .../crashreporter/jsoncpp/include/json/config.h | 178 - .../crashreporter/jsoncpp/include/json/features.h | 57 - .../crashreporter/jsoncpp/include/json/forwards.h | 37 - toolkit/crashreporter/jsoncpp/include/json/json.h | 15 - .../crashreporter/jsoncpp/include/json/reader.h | 404 - toolkit/crashreporter/jsoncpp/include/json/value.h | 867 -- .../crashreporter/jsoncpp/include/json/version.h | 20 - .../crashreporter/jsoncpp/include/json/writer.h | 331 - .../jsoncpp/src/lib_json/json_reader.cpp | 2039 ----- .../crashreporter/jsoncpp/src/lib_json/json_tool.h | 111 - .../jsoncpp/src/lib_json/json_value.cpp | 1604 ---- .../jsoncpp/src/lib_json/json_valueiterator.inl | 167 - .../jsoncpp/src/lib_json/json_writer.cpp | 1218 --- .../crashreporter/jsoncpp/src/lib_json/moz.build | 39 - toolkit/crashreporter/mac_utils.h | 14 - toolkit/crashreporter/mac_utils.mm | 41 - .../minidump-analyzer/minidump-analyzer.cpp | 437 - toolkit/crashreporter/minidump-analyzer/moz.build | 34 - toolkit/crashreporter/moz.build | 122 - toolkit/crashreporter/nsExceptionHandler.cpp | 4101 --------- toolkit/crashreporter/nsExceptionHandler.h | 279 - toolkit/crashreporter/test/CrashTestUtils.jsm | 72 - toolkit/crashreporter/test/browser/.eslintrc.js | 7 - toolkit/crashreporter/test/browser/browser.ini | 8 - .../test/browser/browser_aboutCrashes.js | 27 - .../test/browser/browser_aboutCrashesResubmit.js | 152 - .../test/browser/browser_bug471404.js | 41 - .../test/browser/browser_clearReports.js | 124 - toolkit/crashreporter/test/browser/crashreport.sjs | 180 - toolkit/crashreporter/test/browser/head.js | 139 - toolkit/crashreporter/test/dumputils.cpp | 99 - toolkit/crashreporter/test/moz.build | 40 - toolkit/crashreporter/test/nsTestCrasher.cpp | 126 - toolkit/crashreporter/test/unit/.eslintrc.js | 7 - .../test/unit/crasher_subprocess_head.js | 33 - .../test/unit/crasher_subprocess_tail.js | 15 - .../crashreporter/test/unit/head_crashreporter.js | 173 - .../test/unit/test_crash_AsyncShutdown.js | 102 - .../crashreporter/test/unit/test_crash_abort.js | 16 - ...test_crash_after_js_large_allocation_failure.js | 21 - ..._after_js_large_allocation_failure_reporting.js | 27 - .../test/unit/test_crash_after_js_oom_recovered.js | 20 - .../test/unit/test_crash_after_js_oom_reported.js | 34 - .../unit/test_crash_after_js_oom_reported_2.js | 26 - .../test/unit/test_crash_moz_crash.js | 16 - toolkit/crashreporter/test/unit/test_crash_oom.js | 19 - .../test/unit/test_crash_purevirtual.js | 24 - .../test/unit/test_crash_runtimeabort.js | 21 - .../test/unit/test_crash_terminator.js | 40 - .../test/unit/test_crash_with_memory_report.js | 55 - .../crashreporter/test/unit/test_crashreporter.js | 85 - .../test/unit/test_crashreporter_appmem.js | 12 - .../test/unit/test_crashreporter_crash.js | 51 - .../unit/test_crashreporter_crash_profile_lock.js | 26 - .../crashreporter/test/unit/test_event_files.js | 56 - .../test/unit/test_oom_annotation_windows.js | 27 - .../test/unit/test_override_exception_handler.js | 12 - toolkit/crashreporter/test/unit/xpcshell.ini | 37 - toolkit/crashreporter/test/unit_ipc/.eslintrc.js | 7 - .../test/unit_ipc/test_content_annotation.js | 22 - .../test_content_exception_time_annotation.js | 17 - .../test/unit_ipc/test_content_memory_list.js | 23 - .../test_content_oom_annotation_windows.js | 23 - toolkit/crashreporter/test/unit_ipc/xpcshell.ini | 15 - toolkit/crashreporter/tools/symbolstore.py | 1078 --- toolkit/crashreporter/tools/unit-symbolstore.py | 583 -- toolkit/crashreporter/tools/upload_symbols.py | 102 - .../crashreporter/tools/win32/dump_syms_vc1600.exe | Bin 55296 -> 0 bytes .../crashreporter/tools/win32/dump_syms_vc1700.exe | Bin 52736 -> 0 bytes .../crashreporter/tools/win32/dump_syms_vc1800.exe | Bin 51200 -> 0 bytes toolkit/crashreporter/update-breakpad.sh | 65 - toolkit/crashreporter/update-jsoncpp.sh | 62 - toolkit/moz.build | 4 - toolkit/xre/moz.build | 1 - 886 files changed, 273247 deletions(-) delete mode 100644 toolkit/crashreporter/CrashReports.jsm delete mode 100644 toolkit/crashreporter/CrashSubmit.jsm delete mode 100644 toolkit/crashreporter/InjectCrashReporter.cpp delete mode 100644 toolkit/crashreporter/InjectCrashReporter.h delete mode 100644 toolkit/crashreporter/KeyValueParser.jsm delete mode 100644 toolkit/crashreporter/LoadLibraryRemote.cpp delete mode 100644 toolkit/crashreporter/LoadLibraryRemote.h delete mode 100644 toolkit/crashreporter/breakpad-patches/00-arm-exidx-rollup.patch delete mode 100644 toolkit/crashreporter/breakpad-patches/README delete mode 100644 toolkit/crashreporter/breakpad-windows-libxul/moz.build delete mode 100644 toolkit/crashreporter/breakpad-windows-standalone/moz.build delete mode 100644 toolkit/crashreporter/client/Makefile.in delete mode 100644 toolkit/crashreporter/client/Throbber-small.avi delete mode 100644 toolkit/crashreporter/client/crashreporter.cpp delete mode 100644 toolkit/crashreporter/client/crashreporter.exe.manifest delete mode 100644 toolkit/crashreporter/client/crashreporter.h delete mode 100644 toolkit/crashreporter/client/crashreporter.ico delete mode 100755 toolkit/crashreporter/client/crashreporter.rc delete mode 100644 toolkit/crashreporter/client/crashreporter_gtk_common.cpp delete mode 100644 toolkit/crashreporter/client/crashreporter_gtk_common.h delete mode 100644 toolkit/crashreporter/client/crashreporter_linux.cpp delete mode 100644 toolkit/crashreporter/client/crashreporter_osx.h delete mode 100644 toolkit/crashreporter/client/crashreporter_osx.mm delete mode 100644 toolkit/crashreporter/client/crashreporter_unix_common.cpp delete mode 100644 toolkit/crashreporter/client/crashreporter_win.cpp delete mode 100644 toolkit/crashreporter/client/macbuild/Contents/Info.plist delete mode 100644 toolkit/crashreporter/client/macbuild/Contents/PkgInfo delete mode 100644 toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/InfoPlist.strings.in delete mode 100644 toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenu.nib/classes.nib delete mode 100644 toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenu.nib/info.nib delete mode 100644 toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenu.nib/keyedobjects.nib delete mode 100644 toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenuRTL.nib/classes.nib delete mode 100644 toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenuRTL.nib/info.nib delete mode 100644 toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenuRTL.nib/keyedobjects.nib delete mode 100644 toolkit/crashreporter/client/macbuild/Contents/Resources/crashreporter.icns delete mode 100644 toolkit/crashreporter/client/moz.build delete mode 100644 toolkit/crashreporter/client/resource.h delete mode 100644 toolkit/crashreporter/content/crashes.js delete mode 100644 toolkit/crashreporter/content/crashes.xhtml delete mode 100644 toolkit/crashreporter/crashreporter.mozbuild delete mode 100644 toolkit/crashreporter/docs/index.rst delete mode 100644 toolkit/crashreporter/google-breakpad/.gitignore delete mode 100644 toolkit/crashreporter/google-breakpad/AUTHORS delete mode 100644 toolkit/crashreporter/google-breakpad/ChangeLog delete mode 100644 toolkit/crashreporter/google-breakpad/DEPS delete mode 100644 toolkit/crashreporter/google-breakpad/GIT-INFO delete mode 100644 toolkit/crashreporter/google-breakpad/INSTALL delete mode 100644 toolkit/crashreporter/google-breakpad/LICENSE delete mode 100644 toolkit/crashreporter/google-breakpad/Makefile.am delete mode 100644 toolkit/crashreporter/google-breakpad/Makefile.in delete mode 100644 toolkit/crashreporter/google-breakpad/NEWS delete mode 100644 toolkit/crashreporter/google-breakpad/README.ANDROID delete mode 100644 toolkit/crashreporter/google-breakpad/README.md delete mode 100644 toolkit/crashreporter/google-breakpad/aclocal.m4 delete mode 100755 toolkit/crashreporter/google-breakpad/android/common-functions.sh delete mode 100644 toolkit/crashreporter/google-breakpad/android/google_breakpad/Android.mk delete mode 100755 toolkit/crashreporter/google-breakpad/android/run-checks.sh delete mode 100644 toolkit/crashreporter/google-breakpad/android/sample_app/README delete mode 100644 toolkit/crashreporter/google-breakpad/android/sample_app/jni/Android.mk delete mode 100644 toolkit/crashreporter/google-breakpad/android/sample_app/jni/Application.mk delete mode 100644 toolkit/crashreporter/google-breakpad/android/sample_app/jni/test_breakpad.cpp delete mode 100755 toolkit/crashreporter/google-breakpad/android/test-driver delete mode 100755 toolkit/crashreporter/google-breakpad/android/test-shell.sh delete mode 100755 toolkit/crashreporter/google-breakpad/autotools/compile delete mode 100755 toolkit/crashreporter/google-breakpad/autotools/config.guess delete mode 100755 toolkit/crashreporter/google-breakpad/autotools/config.sub delete mode 100755 toolkit/crashreporter/google-breakpad/autotools/depcomp delete mode 100755 toolkit/crashreporter/google-breakpad/autotools/install-sh delete mode 100755 toolkit/crashreporter/google-breakpad/autotools/ltmain.sh delete mode 100755 toolkit/crashreporter/google-breakpad/autotools/missing delete mode 100755 toolkit/crashreporter/google-breakpad/autotools/test-driver delete mode 100644 toolkit/crashreporter/google-breakpad/breakpad-client.pc.in delete mode 100644 toolkit/crashreporter/google-breakpad/breakpad.pc.in delete mode 100644 toolkit/crashreporter/google-breakpad/codereview.settings delete mode 100755 toolkit/crashreporter/google-breakpad/configure delete mode 100644 toolkit/crashreporter/google-breakpad/configure.ac delete mode 100644 toolkit/crashreporter/google-breakpad/m4/ax_pthread.m4 delete mode 100644 toolkit/crashreporter/google-breakpad/m4/libtool.m4 delete mode 100644 toolkit/crashreporter/google-breakpad/m4/ltoptions.m4 delete mode 100644 toolkit/crashreporter/google-breakpad/m4/ltsugar.m4 delete mode 100644 toolkit/crashreporter/google-breakpad/m4/ltversion.m4 delete mode 100644 toolkit/crashreporter/google-breakpad/m4/lt~obsolete.m4 delete mode 100644 toolkit/crashreporter/google-breakpad/src/breakpad_googletest_includes.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/build/all.gyp delete mode 100644 toolkit/crashreporter/google-breakpad/src/build/common.gypi delete mode 100644 toolkit/crashreporter/google-breakpad/src/build/filename_rules.gypi delete mode 100755 toolkit/crashreporter/google-breakpad/src/build/gyp_breakpad delete mode 100644 toolkit/crashreporter/google-breakpad/src/build/testing.gypi delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/apple/Framework/BreakpadDefines.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/ios/Breakpad.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/ios/Breakpad.mm delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/ios/Breakpad.xcodeproj/project.pbxproj delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/ios/BreakpadController.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/ios/BreakpadController.mm delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/ios/Breakpad_Prefix.pch delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/ios/handler/ios_exception_minidump_generator.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/ios/handler/ios_exception_minidump_generator.mm delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/client_info.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_client.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_client.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_server.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_server.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/data/linux-gate-amd.sym delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/data/linux-gate-intel.sym delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/mapping_info.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/raw_context_cpu.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/thread_info.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/thread_info.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/ucontext_reader.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/handler/microdump_extra_info.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/handler/minidump_descriptor.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/handler/minidump_descriptor.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/log/log.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/log/log.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/microdump_writer/microdump_writer.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/microdump_writer/microdump_writer.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/microdump_writer/microdump_writer_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/cpu_set.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/cpu_set_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/directory_reader.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/directory_reader_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/line_reader.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/line_reader_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_core_dumper.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_core_dumper.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_core_dumper_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_dumper.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_dumper.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/minidump_writer.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/minidump_writer.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/minidump_writer_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/minidump_writer_unittest_utils.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/minidump_writer_unittest_utils.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/proc_cpuinfo_reader.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/proc_cpuinfo_reader_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/moz.build delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/linux/sender/google_crash_report_sender.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/Breakpad.xcodeproj/project.pbxproj delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/Framework/Breakpad.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/Framework/Breakpad.mm delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/Framework/Breakpad_Prefix.pch delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/Framework/Info.plist delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/Framework/OnDemandServer.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/Framework/OnDemandServer.mm delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/UnitTests-Info.plist delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/ConfigFile.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/ConfigFile.mm delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/Inspector.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/Inspector.mm delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/InspectorMain.mm delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/client_info.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/crash_generation_client.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/crash_generation_client.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/crash_generation_server.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/crash_generation_server.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/moz.build delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/breakpad_nlist_64.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/breakpad_nlist_64.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/dynamic_images.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/dynamic_images.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/exception_handler.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/exception_handler.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/mach_vm_compat.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_generator.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_generator.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_test.xcodeproj/project.pbxproj delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_tests32-Info.plist delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_tests64-Info.plist delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/moz.build delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/obj-cTestCases-Info.plist delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/protected_memory_allocator.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/protected_memory_allocator.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/testcases/DynamicImagesTests.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/testcases/DynamicImagesTests.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/testcases/breakpad_nlist_test.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/testcases/breakpad_nlist_test.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/testcases/dwarftests.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/testcases/dwarftests.mm delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/testcases/testdata/dump_syms_dwarf_data delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/testcases/testdata/dump_syms_i386_breakpad.sym delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/handler/ucontext_compat.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/Breakpad.xib delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/English.lproj/InfoPlist.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/English.lproj/Localizable.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/ReporterIcon.graffle delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/crash_report_sender-Info.plist delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/crash_report_sender.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/crash_report_sender.icns delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/crash_report_sender.m delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/da.lproj/InfoPlist.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/da.lproj/Localizable.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/de.lproj/InfoPlist.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/de.lproj/Localizable.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/es.lproj/InfoPlist.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/es.lproj/Localizable.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/fr.lproj/InfoPlist.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/fr.lproj/Localizable.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/goArrow.png delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/it.lproj/InfoPlist.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/it.lproj/Localizable.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/ja.lproj/InfoPlist.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/ja.lproj/Localizable.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/nl.lproj/InfoPlist.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/nl.lproj/Localizable.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/no.lproj/InfoPlist.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/no.lproj/Localizable.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/sl.lproj/InfoPlist.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/sl.lproj/Localizable.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/sv.lproj/InfoPlist.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/sv.lproj/Localizable.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/tr.lproj/InfoPlist.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/tr.lproj/Localizable.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/uploader.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/sender/uploader.mm delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/testapp/Controller.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/testapp/Controller.m delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/testapp/English.lproj/InfoPlist.strings delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/testapp/English.lproj/MainMenu.xib delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/testapp/Info.plist delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/testapp/TestClass.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/testapp/TestClass.mm delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/testapp/bomb.icns delete mode 100755 toolkit/crashreporter/google-breakpad/src/client/mac/testapp/crashInMain delete mode 100755 toolkit/crashreporter/google-breakpad/src/client/mac/testapp/crashduringload delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/testapp/main.m delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/tests/BreakpadFramework_Test.mm delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/tests/crash_generation_server_test.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/tests/exception_handler_test.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/tests/minidump_generator_test.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/tests/minidump_generator_test_helper.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/tests/spawn_child_process.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/mac/tests/testlogging.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/minidump_file_writer-inl.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/minidump_file_writer.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/minidump_file_writer.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/minidump_file_writer_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/moz.build delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/solaris/handler/Makefile delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/solaris/handler/exception_handler.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/solaris/handler/exception_handler.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/solaris/handler/exception_handler_test.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/solaris/handler/minidump_generator.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/solaris/handler/minidump_generator.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/solaris/handler/minidump_test.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/solaris/handler/moz.build delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/solaris/handler/solaris_lwp.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/solaris/handler/solaris_lwp.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/breakpad_client.gyp delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/common/auto_critical_section.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/common/ipc_protocol.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/ReadMe.txt delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/client_info.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/client_info.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation.gyp delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation_client.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation_client.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation_server.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation_server.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/minidump_generator.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/minidump_generator.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/objs.mozbuild delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.gyp delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/handler/objs.mozbuild delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/sender/crash_report_sender.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/sender/crash_report_sender.gyp delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/sender/crash_report_sender.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/sender/objs.mozbuild delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/tests/crash_generation_app/abstract_class.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/tests/crash_generation_app/abstract_class.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/tests/crash_generation_app/crash_generation_app.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/tests/crash_generation_app/crash_generation_app.gyp delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/tests/crash_generation_app/crash_generation_app.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/tests/crash_generation_app/crash_generation_app.ico delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/tests/crash_generation_app/crash_generation_app.rc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/tests/crash_generation_app/resource.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/tests/crash_generation_app/small.ico delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/unittests/client_tests.gyp delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/unittests/crash_generation_server_test.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/unittests/dump_analysis.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/unittests/dump_analysis.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_death_test.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_nesting_test.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_test.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_test.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/unittests/minidump_test.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/client/windows/unittests/testing.gyp delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/Makefile.in delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/android/breakpad_getcontext.S delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/android/breakpad_getcontext_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/android/include/elf.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/android/include/link.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/android/include/sgidefs.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/android/include/stab.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/android/include/sys/procfs.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/android/include/sys/signal.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/android/include/sys/user.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/android/include/ucontext.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/android/testing/include/wchar.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/android/testing/mkdtemp.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/android/testing/pthread_fixes.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/android/ucontext_constants.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/arm_ex_reader.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/arm_ex_reader.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/arm_ex_to_module.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/arm_ex_to_module.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/basictypes.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/byte_cursor.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/byte_cursor_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/common.gyp delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/convert_UTF.c delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/convert_UTF.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/bytereader-inl.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/bytereader.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/bytereader.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/bytereader_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/cfi_assembler.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/cfi_assembler.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/dwarf2diehandler.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/dwarf2diehandler.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/dwarf2diehandler_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/dwarf2enums.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/dwarf2reader.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/dwarf2reader.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/dwarf2reader_cfi_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/dwarf2reader_die_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/dwarf2reader_test_common.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/elf_reader.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/elf_reader.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/functioninfo.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/functioninfo.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/line_state_machine.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/moz.build delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf/types.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf_cu_to_module.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf_cu_to_module.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf_cu_to_module_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf_line_to_module.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf_line_to_module.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/dwarf_line_to_module_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/language.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/language.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/crc32.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/crc32.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/eintr_wrapper.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/elf_core_dump.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/elf_core_dump.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/elf_core_dump_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/elf_gnu_compat.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/elf_symbols_to_module.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/elf_symbols_to_module.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/elf_symbols_to_module_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/elfutils-inl.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/elfutils.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/elfutils.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/file_id.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/file_id.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/file_id_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/google_crashdump_uploader.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/google_crashdump_uploader.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/google_crashdump_uploader_test.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/guid_creator.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/guid_creator.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/http_upload.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/http_upload.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/ignore_ret.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/libcurl_wrapper.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/libcurl_wrapper.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/linux_libc_support.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/linux_libc_support.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/linux_libc_support_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/memory_mapped_file.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/memory_mapped_file.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/memory_mapped_file_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/moz.build delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/safe_readlink.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/safe_readlink.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/safe_readlink_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/symbol_upload.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/symbol_upload.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/synth_elf.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/synth_elf.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/synth_elf_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/tests/auto_testfile.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/tests/crash_generator.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/linux/tests/crash_generator.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/Breakpad.xcconfig delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/BreakpadDebug.xcconfig delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/BreakpadRelease.xcconfig delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/GTMDefines.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/GTMLogger.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/GTMLogger.m delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/HTTPMultipartUpload.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/HTTPMultipartUpload.m delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/MachIPC.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/MachIPC.mm delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/arch_utilities.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/arch_utilities.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/bootstrap_compat.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/bootstrap_compat.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/byteswap.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/dump_syms.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/dump_syms.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/file_id.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/file_id.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/launch_reporter.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/launch_reporter.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/macho_id.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/macho_id.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/macho_reader.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/macho_reader.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/macho_reader_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/macho_utilities.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/macho_utilities.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/macho_walker.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/macho_walker.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/moz.build delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/scoped_task_suspend-inl.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/string_utilities.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/string_utilities.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/super_fat_arch.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/testing/GTMSenTestCase.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/mac/testing/GTMSenTestCase.m delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/md5.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/md5.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/memory.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/memory_range.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/memory_range_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/memory_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/minidump_type_helper.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/module.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/module.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/module_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/moz.build delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/scoped_ptr.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/simple_string_dictionary.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/simple_string_dictionary.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/simple_string_dictionary_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/solaris/dump_symbols.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/solaris/dump_symbols.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/solaris/file_id.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/solaris/file_id.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/solaris/guid_creator.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/solaris/guid_creator.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/solaris/message_output.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/solaris/moz.build delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/stabs_reader.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/stabs_reader.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/stabs_reader_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/stabs_to_module.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/stabs_to_module.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/stabs_to_module_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/stdio_wrapper.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/string_conversion.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/string_conversion.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/symbol_data.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/test_assembler.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/test_assembler.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/test_assembler_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/testdata/func-line-pairing.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/tests/auto_tempdir.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/tests/file_utils.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/tests/file_utils.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/unordered.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/using_std_string.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/windows/common_windows.gyp delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/windows/dia_util.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/windows/dia_util.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/windows/guid_string.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/windows/guid_string.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/windows/http_upload.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/windows/http_upload.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/windows/objs.mozbuild delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/windows/omap.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/windows/omap.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/windows/omap_internal.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/windows/omap_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/windows/pdb_source_line_writer.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/windows/pdb_source_line_writer.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/windows/string_utils-inl.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/common/windows/string_utils.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/config.h.in delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/common/breakpad_types.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_amd64.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_arm.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_arm64.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_mips.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_ppc.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_ppc64.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_sparc.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_x86.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_exception_linux.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_exception_mac.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_exception_ps3.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_exception_solaris.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_exception_win32.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_format.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_size.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/basic_source_line_resolver.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/call_stack.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/code_module.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/code_modules.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/dump_context.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/dump_object.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/exploitability.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/fast_source_line_resolver.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/memory_region.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/microdump.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/microdump_processor.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/minidump.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/minidump_processor.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/proc_maps_linux.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/process_result.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/process_state.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/source_line_resolver_base.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/source_line_resolver_interface.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame_cpu.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame_symbolizer.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stackwalker.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/symbol_supplier.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/system_info.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/address_map-inl.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/address_map.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/address_map_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/basic_code_module.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/basic_code_modules.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/basic_code_modules.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/basic_source_line_resolver.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/basic_source_line_resolver_types.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/basic_source_line_resolver_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/call_stack.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info-inl.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/contained_range_map-inl.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/contained_range_map.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/contained_range_map_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/disassembler_x86.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/disassembler_x86.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/disassembler_x86_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/dump_context.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/dump_object.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/exploitability.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/exploitability_linux.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/exploitability_linux.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/exploitability_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/exploitability_win.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/exploitability_win.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/fast_source_line_resolver.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/fast_source_line_resolver_types.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/fast_source_line_resolver_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/linked_ptr.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/logging.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/logging.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/map_serializers-inl.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/map_serializers.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/map_serializers_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/microdump.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/microdump_processor.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/microdump_processor_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/microdump_stackwalk.cc delete mode 100755 toolkit/crashreporter/google-breakpad/src/processor/microdump_stackwalk_machine_readable_test delete mode 100755 toolkit/crashreporter/google-breakpad/src/processor/microdump_stackwalk_test delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/microdump_stackwalk_test_vars delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/minidump.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/minidump_dump.cc delete mode 100755 toolkit/crashreporter/google-breakpad/src/processor/minidump_dump_test delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/minidump_processor.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/minidump_processor_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/minidump_stackwalk.cc delete mode 100755 toolkit/crashreporter/google-breakpad/src/processor/minidump_stackwalk_machine_readable_test delete mode 100755 toolkit/crashreporter/google-breakpad/src/processor/minidump_stackwalk_test delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/minidump_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/module_comparer.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/module_comparer.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/module_factory.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/module_serializer.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/module_serializer.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/moz.build delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/pathname_stripper.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/pathname_stripper.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/pathname_stripper_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator-inl.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/proc_maps_linux.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/proc_maps_linux_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/process_state.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/processor.gyp delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/processor_tools.gypi delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/proto/README delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/proto/process_state.proto delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/range_map-inl.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/range_map.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/range_map_shrink_down_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/range_map_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/simple_serializer-inl.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/simple_serializer.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/simple_symbol_supplier.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/simple_symbol_supplier.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/source_line_resolver_base.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/source_line_resolver_base_types.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stack_frame_cpu.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stack_frame_symbolizer.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalk_common.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalk_common.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_address_list.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_address_list.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_address_list_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_amd64.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_amd64.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_amd64_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm64.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm64.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm64_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_mips.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_mips.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_mips_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_ppc.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_ppc.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_ppc64.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_ppc64.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_selftest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_selftest_sol.s delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_sparc.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_sparc.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_unittest_utils.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_x86.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_x86.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/stackwalker_x86_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/static_address_map-inl.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/static_address_map.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/static_address_map_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/static_contained_range_map-inl.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/static_contained_range_map.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/static_contained_range_map_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/static_map-inl.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/static_map.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/static_map_iterator-inl.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/static_map_iterator.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/static_map_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/static_range_map-inl.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/static_range_map.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/static_range_map_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/symbolic_constants_win.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/symbolic_constants_win.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/synth_minidump.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/synth_minidump.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/synth_minidump_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/synth_minidump_unittest_data.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/tokenize.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/tokenize.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/processor/windows_frame_info.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/curl/COPYING delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/curl/curl.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/curl/curlbuild.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/curl/curlrules.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/curl/curlver.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/curl/easy.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/curl/mprintf.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/curl/multi.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/curl/stdcheaders.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/curl/typecheck-gcc.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/curl/types.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/Makefile.am delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/TODO delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/ia32_implicit.c delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/ia32_implicit.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/ia32_insn.c delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/ia32_insn.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/ia32_invariant.c delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/ia32_invariant.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/ia32_modrm.c delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/ia32_modrm.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/ia32_opcode_tables.c delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/ia32_opcode_tables.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/ia32_operand.c delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/ia32_operand.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/ia32_reg.c delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/ia32_reg.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/ia32_settings.c delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/ia32_settings.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/libdis.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/libdisasm.gyp delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/qword.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/swig/Makefile delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/swig/README delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/swig/libdisasm.i delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/swig/libdisasm_oop.i delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/swig/perl/Makefile-swig delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/swig/perl/Makefile.PL delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/swig/python/Makefile-swig delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/swig/ruby/Makefile-swig delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/swig/ruby/extconf.rb delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/swig/tcl/Makefile-swig delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_disasm.c delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_format.c delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_imm.c delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_imm.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_insn.c delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_misc.c delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_operand_list.c delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_operand_list.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/linux/include/gflags/gflags.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/linux/include/gflags/gflags_completions.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/lss/codereview.settings delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/lss/linux_syscall_support.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/mac_headers/README delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/mac_headers/architecture/byte_order.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/mac_headers/i386/_types.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/mac_headers/mach-o/arch.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/mac_headers/mach-o/fat.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/mac_headers/mach-o/loader.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/mac_headers/mach-o/nlist.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/mac_headers/mach/boolean.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/mac_headers/mach/i386/boolean.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/mac_headers/mach/i386/vm_param.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/mac_headers/mach/i386/vm_types.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/mac_headers/mach/machine.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/mac_headers/mach/machine/boolean.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/mac_headers/mach/machine/thread_state.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/mac_headers/mach/machine/thread_status.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/mac_headers/mach/machine/vm_types.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/mac_headers/mach/thread_status.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/mac_headers/mach/vm_prot.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/musl/COPYRIGHT delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/musl/README delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/musl/README.breakpad delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/musl/VERSION delete mode 100644 toolkit/crashreporter/google-breakpad/src/third_party/musl/include/elf.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/linux/core2md/core2md.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/linux/dump_syms/dump_syms.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/linux/dump_syms/moz.build delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/linux/md2core/minidump-2-core.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/linux/md2core/minidump_memory_range.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/linux/md2core/minidump_memory_range_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/linux/symupload/minidump_upload.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/linux/symupload/sym_upload.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/linux/tools_linux.gypi delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/crash_report.mm delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/crash_report.xcodeproj/project.pbxproj delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/on_demand_symbol_supplier.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/on_demand_symbol_supplier.mm delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms_tool.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/macho_dump.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/moz.build delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/mac/symupload/minidump_upload.m delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/mac/symupload/symupload.m delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/mac/symupload/symupload.xcodeproj/project.pbxproj delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/mac/tools_mac.gypi delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/arch_constants.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/arch_reader.go delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/upload_system_symbols.go delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/python/filter_syms.py delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/python/tests/filter_syms_unittest.py delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/solaris/dump_syms/Makefile delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/solaris/dump_syms/Makefile.in delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/solaris/dump_syms/dump_syms.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/solaris/dump_syms/moz.build delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/solaris/dump_syms/run_regtest.sh delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/solaris/dump_syms/testdata/dump_syms_regtest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/solaris/dump_syms/testdata/dump_syms_regtest.stabs delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/solaris/dump_syms/testdata/dump_syms_regtest.sym delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/tools.gyp delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/windows/binaries/dump_syms.exe delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/windows/binaries/symupload.exe delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.gyp delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.h delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/dump_syms.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/dump_syms.gyp delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/dump_syms_unittest.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/moz.build delete mode 100755 toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/run_regtest.sh delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/windows/refresh_binaries.bat delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/windows/symupload/symupload.cc delete mode 100644 toolkit/crashreporter/google-breakpad/src/tools/windows/symupload/symupload.gyp delete mode 100644 toolkit/crashreporter/injector/injector.cpp delete mode 100644 toolkit/crashreporter/injector/moz.build delete mode 100644 toolkit/crashreporter/jar.mn delete mode 100644 toolkit/crashreporter/jsoncpp/AUTHORS delete mode 100644 toolkit/crashreporter/jsoncpp/GIT-INFO delete mode 100644 toolkit/crashreporter/jsoncpp/LICENSE delete mode 100644 toolkit/crashreporter/jsoncpp/NEWS.txt delete mode 100644 toolkit/crashreporter/jsoncpp/README.md delete mode 100644 toolkit/crashreporter/jsoncpp/include/json/allocator.h delete mode 100644 toolkit/crashreporter/jsoncpp/include/json/assertions.h delete mode 100644 toolkit/crashreporter/jsoncpp/include/json/autolink.h delete mode 100644 toolkit/crashreporter/jsoncpp/include/json/config.h delete mode 100644 toolkit/crashreporter/jsoncpp/include/json/features.h delete mode 100644 toolkit/crashreporter/jsoncpp/include/json/forwards.h delete mode 100644 toolkit/crashreporter/jsoncpp/include/json/json.h delete mode 100644 toolkit/crashreporter/jsoncpp/include/json/reader.h delete mode 100644 toolkit/crashreporter/jsoncpp/include/json/value.h delete mode 100644 toolkit/crashreporter/jsoncpp/include/json/version.h delete mode 100644 toolkit/crashreporter/jsoncpp/include/json/writer.h delete mode 100644 toolkit/crashreporter/jsoncpp/src/lib_json/json_reader.cpp delete mode 100644 toolkit/crashreporter/jsoncpp/src/lib_json/json_tool.h delete mode 100644 toolkit/crashreporter/jsoncpp/src/lib_json/json_value.cpp delete mode 100644 toolkit/crashreporter/jsoncpp/src/lib_json/json_valueiterator.inl delete mode 100644 toolkit/crashreporter/jsoncpp/src/lib_json/json_writer.cpp delete mode 100644 toolkit/crashreporter/jsoncpp/src/lib_json/moz.build delete mode 100644 toolkit/crashreporter/mac_utils.h delete mode 100644 toolkit/crashreporter/mac_utils.mm delete mode 100644 toolkit/crashreporter/minidump-analyzer/minidump-analyzer.cpp delete mode 100644 toolkit/crashreporter/minidump-analyzer/moz.build delete mode 100644 toolkit/crashreporter/moz.build delete mode 100644 toolkit/crashreporter/nsExceptionHandler.cpp delete mode 100644 toolkit/crashreporter/nsExceptionHandler.h delete mode 100644 toolkit/crashreporter/test/CrashTestUtils.jsm delete mode 100644 toolkit/crashreporter/test/browser/.eslintrc.js delete mode 100644 toolkit/crashreporter/test/browser/browser.ini delete mode 100644 toolkit/crashreporter/test/browser/browser_aboutCrashes.js delete mode 100644 toolkit/crashreporter/test/browser/browser_aboutCrashesResubmit.js delete mode 100644 toolkit/crashreporter/test/browser/browser_bug471404.js delete mode 100644 toolkit/crashreporter/test/browser/browser_clearReports.js delete mode 100644 toolkit/crashreporter/test/browser/crashreport.sjs delete mode 100644 toolkit/crashreporter/test/browser/head.js delete mode 100644 toolkit/crashreporter/test/dumputils.cpp delete mode 100644 toolkit/crashreporter/test/moz.build delete mode 100644 toolkit/crashreporter/test/nsTestCrasher.cpp delete mode 100644 toolkit/crashreporter/test/unit/.eslintrc.js delete mode 100644 toolkit/crashreporter/test/unit/crasher_subprocess_head.js delete mode 100644 toolkit/crashreporter/test/unit/crasher_subprocess_tail.js delete mode 100644 toolkit/crashreporter/test/unit/head_crashreporter.js delete mode 100644 toolkit/crashreporter/test/unit/test_crash_AsyncShutdown.js delete mode 100644 toolkit/crashreporter/test/unit/test_crash_abort.js delete mode 100644 toolkit/crashreporter/test/unit/test_crash_after_js_large_allocation_failure.js delete mode 100644 toolkit/crashreporter/test/unit/test_crash_after_js_large_allocation_failure_reporting.js delete mode 100644 toolkit/crashreporter/test/unit/test_crash_after_js_oom_recovered.js delete mode 100644 toolkit/crashreporter/test/unit/test_crash_after_js_oom_reported.js delete mode 100644 toolkit/crashreporter/test/unit/test_crash_after_js_oom_reported_2.js delete mode 100644 toolkit/crashreporter/test/unit/test_crash_moz_crash.js delete mode 100644 toolkit/crashreporter/test/unit/test_crash_oom.js delete mode 100644 toolkit/crashreporter/test/unit/test_crash_purevirtual.js delete mode 100644 toolkit/crashreporter/test/unit/test_crash_runtimeabort.js delete mode 100644 toolkit/crashreporter/test/unit/test_crash_terminator.js delete mode 100644 toolkit/crashreporter/test/unit/test_crash_with_memory_report.js delete mode 100644 toolkit/crashreporter/test/unit/test_crashreporter.js delete mode 100644 toolkit/crashreporter/test/unit/test_crashreporter_appmem.js delete mode 100644 toolkit/crashreporter/test/unit/test_crashreporter_crash.js delete mode 100644 toolkit/crashreporter/test/unit/test_crashreporter_crash_profile_lock.js delete mode 100644 toolkit/crashreporter/test/unit/test_event_files.js delete mode 100644 toolkit/crashreporter/test/unit/test_oom_annotation_windows.js delete mode 100644 toolkit/crashreporter/test/unit/test_override_exception_handler.js delete mode 100644 toolkit/crashreporter/test/unit/xpcshell.ini delete mode 100644 toolkit/crashreporter/test/unit_ipc/.eslintrc.js delete mode 100644 toolkit/crashreporter/test/unit_ipc/test_content_annotation.js delete mode 100644 toolkit/crashreporter/test/unit_ipc/test_content_exception_time_annotation.js delete mode 100644 toolkit/crashreporter/test/unit_ipc/test_content_memory_list.js delete mode 100644 toolkit/crashreporter/test/unit_ipc/test_content_oom_annotation_windows.js delete mode 100644 toolkit/crashreporter/test/unit_ipc/xpcshell.ini delete mode 100755 toolkit/crashreporter/tools/symbolstore.py delete mode 100644 toolkit/crashreporter/tools/unit-symbolstore.py delete mode 100644 toolkit/crashreporter/tools/upload_symbols.py delete mode 100755 toolkit/crashreporter/tools/win32/dump_syms_vc1600.exe delete mode 100644 toolkit/crashreporter/tools/win32/dump_syms_vc1700.exe delete mode 100644 toolkit/crashreporter/tools/win32/dump_syms_vc1800.exe delete mode 100755 toolkit/crashreporter/update-breakpad.sh delete mode 100644 toolkit/crashreporter/update-jsoncpp.sh diff --git a/gfx/ipc/moz.build b/gfx/ipc/moz.build index ff3a81228..309681444 100644 --- a/gfx/ipc/moz.build +++ b/gfx/ipc/moz.build @@ -70,7 +70,6 @@ IPDL_SOURCES = [ LOCAL_INCLUDES += [ '/dom/ipc', - '/toolkit/crashreporter', '/xpcom/threads', ] diff --git a/ipc/glue/moz.build b/ipc/glue/moz.build index d0d9f9937..85d7f8fa0 100644 --- a/ipc/glue/moz.build +++ b/ipc/glue/moz.build @@ -177,7 +177,6 @@ IPDL_SOURCES = [ LOCAL_INCLUDES += [ '/dom/ipc', - '/toolkit/crashreporter', '/toolkit/xre', '/xpcom/threads', ] diff --git a/toolkit/crashreporter/CrashReports.jsm b/toolkit/crashreporter/CrashReports.jsm deleted file mode 100644 index d34d6795e..000000000 --- a/toolkit/crashreporter/CrashReports.jsm +++ /dev/null @@ -1,91 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -Components.utils.import("resource://gre/modules/Services.jsm"); - -this.EXPORTED_SYMBOLS = [ - "CrashReports" -]; - -this.CrashReports = { - pendingDir: null, - reportsDir: null, - submittedDir: null, - getReports: function CrashReports_getReports() - { - let reports = []; - - try { - // Ignore any non http/https urls - if (!/^https?:/i.test(Services.prefs.getCharPref("breakpad.reportURL"))) - return reports; - } - catch (e) { } - - if (this.submittedDir.exists() && this.submittedDir.isDirectory()) { - let entries = this.submittedDir.directoryEntries; - while (entries.hasMoreElements()) { - let file = entries.getNext().QueryInterface(Components.interfaces.nsIFile); - let leaf = file.leafName; - if (leaf.startsWith("bp-") && - leaf.endsWith(".txt")) { - let entry = { - id: leaf.slice(0, -4), - date: file.lastModifiedTime, - pending: false - }; - reports.push(entry); - } - } - } - - if (this.pendingDir.exists() && this.pendingDir.isDirectory()) { - let uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; - let entries = this.pendingDir.directoryEntries; - while (entries.hasMoreElements()) { - let file = entries.getNext().QueryInterface(Components.interfaces.nsIFile); - let leaf = file.leafName; - let id = leaf.slice(0, -4); - if (leaf.endsWith(".dmp") && uuidRegex.test(id)) { - let entry = { - id: id, - date: file.lastModifiedTime, - pending: true - }; - reports.push(entry); - } - } - } - - // Sort reports descending by date - return reports.sort( (a, b) => b.date - a.date); - } -} - -function CrashReports_pendingDir() -{ - let pendingDir = Services.dirsvc.get("UAppData", Components.interfaces.nsIFile); - pendingDir.append("Crash Reports"); - pendingDir.append("pending"); - return pendingDir; -} - -function CrashReports_reportsDir() -{ - let reportsDir = Services.dirsvc.get("UAppData", Components.interfaces.nsIFile); - reportsDir.append("Crash Reports"); - return reportsDir; -} - -function CrashReports_submittedDir() -{ - let submittedDir = Services.dirsvc.get("UAppData", Components.interfaces.nsIFile); - submittedDir.append("Crash Reports"); - submittedDir.append("submitted"); - return submittedDir; -} - -this.CrashReports.pendingDir = CrashReports_pendingDir(); -this.CrashReports.reportsDir = CrashReports_reportsDir(); -this.CrashReports.submittedDir = CrashReports_submittedDir(); diff --git a/toolkit/crashreporter/CrashSubmit.jsm b/toolkit/crashreporter/CrashSubmit.jsm deleted file mode 100644 index 76eafbdad..000000000 --- a/toolkit/crashreporter/CrashSubmit.jsm +++ /dev/null @@ -1,570 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -const {classes: Cc, interfaces: Ci, utils: Cu} = Components; - -Cu.import("resource://gre/modules/Services.jsm"); -Cu.import("resource://gre/modules/KeyValueParser.jsm"); -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.importGlobalProperties(['File']); - -XPCOMUtils.defineLazyModuleGetter(this, "PromiseUtils", - "resource://gre/modules/PromiseUtils.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "OS", - "resource://gre/modules/osfile.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "Task", - "resource://gre/modules/Task.jsm"); - -this.EXPORTED_SYMBOLS = [ - "CrashSubmit" -]; - -const STATE_START = Ci.nsIWebProgressListener.STATE_START; -const STATE_STOP = Ci.nsIWebProgressListener.STATE_STOP; - -const SUCCESS = "success"; -const FAILED = "failed"; -const SUBMITTING = "submitting"; - -const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; - -function parseINIStrings(file) { - var factory = Cc["@mozilla.org/xpcom/ini-parser-factory;1"]. - getService(Ci.nsIINIParserFactory); - var parser = factory.createINIParser(file); - var obj = {}; - var en = parser.getKeys("Strings"); - while (en.hasMore()) { - var key = en.getNext(); - obj[key] = parser.getString("Strings", key); - } - return obj; -} - -// Since we're basically re-implementing part of the crashreporter -// client here, we'll just steal the strings we need from crashreporter.ini -function getL10nStrings() { - let dirSvc = Cc["@mozilla.org/file/directory_service;1"]. - getService(Ci.nsIProperties); - let path = dirSvc.get("GreD", Ci.nsIFile); - path.append("crashreporter.ini"); - if (!path.exists()) { - // see if we're on a mac - path = path.parent; - path = path.parent; - path.append("MacOS"); - path.append("crashreporter.app"); - path.append("Contents"); - path.append("Resources"); - path.append("crashreporter.ini"); - if (!path.exists()) { - // very bad, but I don't know how to recover - return null; - } - } - let crstrings = parseINIStrings(path); - let strings = { - 'crashid': crstrings.CrashID, - 'reporturl': crstrings.CrashDetailsURL - }; - - path = dirSvc.get("XCurProcD", Ci.nsIFile); - path.append("crashreporter-override.ini"); - if (path.exists()) { - crstrings = parseINIStrings(path); - if ('CrashID' in crstrings) - strings['crashid'] = crstrings.CrashID; - if ('CrashDetailsURL' in crstrings) - strings['reporturl'] = crstrings.CrashDetailsURL; - } - return strings; -} - -XPCOMUtils.defineLazyGetter(this, "strings", getL10nStrings); - -function getDir(name) { - let directoryService = Cc["@mozilla.org/file/directory_service;1"]. - getService(Ci.nsIProperties); - let dir = directoryService.get("UAppData", Ci.nsIFile); - dir.append("Crash Reports"); - dir.append(name); - return dir; -} - -function writeFile(dirName, fileName, data) { - let path = getDir(dirName); - if (!path.exists()) - path.create(Ci.nsIFile.DIRECTORY_TYPE, parseInt('0700', 8)); - path.append(fileName); - var fs = Cc["@mozilla.org/network/file-output-stream;1"]. - createInstance(Ci.nsIFileOutputStream); - // open, write, truncate - fs.init(path, -1, -1, 0); - var os = Cc["@mozilla.org/intl/converter-output-stream;1"]. - createInstance(Ci.nsIConverterOutputStream); - os.init(fs, "UTF-8", 0, 0x0000); - os.writeString(data); - os.close(); - fs.close(); -} - -function getPendingMinidump(id) { - let pendingDir = getDir("pending"); - let dump = pendingDir.clone(); - let extra = pendingDir.clone(); - let memory = pendingDir.clone(); - dump.append(id + ".dmp"); - extra.append(id + ".extra"); - memory.append(id + ".memory.json.gz"); - return [dump, extra, memory]; -} - -function getAllPendingMinidumpsIDs() { - let minidumps = []; - let pendingDir = getDir("pending"); - - if (!(pendingDir.exists() && pendingDir.isDirectory())) - return []; - let entries = pendingDir.directoryEntries; - - while (entries.hasMoreElements()) { - let entry = entries.getNext().QueryInterface(Ci.nsIFile); - if (entry.isFile()) { - let matches = entry.leafName.match(/(.+)\.extra$/); - if (matches) - minidumps.push(matches[1]); - } - } - - return minidumps; -} - -function pruneSavedDumps() { - const KEEP = 10; - - let pendingDir = getDir("pending"); - if (!(pendingDir.exists() && pendingDir.isDirectory())) - return; - let entries = pendingDir.directoryEntries; - let entriesArray = []; - - while (entries.hasMoreElements()) { - let entry = entries.getNext().QueryInterface(Ci.nsIFile); - if (entry.isFile()) { - let matches = entry.leafName.match(/(.+)\.extra$/); - if (matches) - entriesArray.push(entry); - } - } - - entriesArray.sort(function(a, b) { - let dateA = a.lastModifiedTime; - let dateB = b.lastModifiedTime; - if (dateA < dateB) - return -1; - if (dateB < dateA) - return 1; - return 0; - }); - - if (entriesArray.length > KEEP) { - for (let i = 0; i < entriesArray.length - KEEP; ++i) { - let extra = entriesArray[i]; - let matches = extra.leafName.match(/(.+)\.extra$/); - if (matches) { - let dump = extra.clone(); - dump.leafName = matches[1] + '.dmp'; - dump.remove(false); - - let memory = extra.clone(); - memory.leafName = matches[1] + '.memory.json.gz'; - if (memory.exists()) { - memory.remove(false); - } - - extra.remove(false); - } - } - } -} - -function addFormEntry(doc, form, name, value) { - var input = doc.createElement("input"); - input.type = "hidden"; - input.name = name; - input.value = value; - form.appendChild(input); -} - -function writeSubmittedReport(crashID, viewURL) { - var data = strings.crashid.replace("%s", crashID); - if (viewURL) - data += "\n" + strings.reporturl.replace("%s", viewURL); - - writeFile("submitted", crashID + ".txt", data); -} - -// the Submitter class represents an individual submission. -function Submitter(id, recordSubmission, noThrottle, extraExtraKeyVals) { - this.id = id; - this.recordSubmission = recordSubmission; - this.noThrottle = noThrottle; - this.additionalDumps = []; - this.extraKeyVals = extraExtraKeyVals || {}; - this.deferredSubmit = PromiseUtils.defer(); -} - -Submitter.prototype = { - submitSuccess: function Submitter_submitSuccess(ret) - { - // Write out the details file to submitted/ - writeSubmittedReport(ret.CrashID, ret.ViewURL); - - // Delete from pending dir - try { - this.dump.remove(false); - this.extra.remove(false); - - if (this.memory) { - this.memory.remove(false); - } - - for (let i of this.additionalDumps) { - i.dump.remove(false); - } - } - catch (ex) { - // report an error? not much the user can do here. - } - - this.notifyStatus(SUCCESS, ret); - this.cleanup(); - }, - - cleanup: function Submitter_cleanup() { - // drop some references just to be nice - this.iframe = null; - this.dump = null; - this.extra = null; - this.memory = null; - this.additionalDumps = null; - // remove this object from the list of active submissions - let idx = CrashSubmit._activeSubmissions.indexOf(this); - if (idx != -1) - CrashSubmit._activeSubmissions.splice(idx, 1); - }, - - submitForm: function Submitter_submitForm() - { - if (!('ServerURL' in this.extraKeyVals)) { - return false; - } - let serverURL = this.extraKeyVals.ServerURL; - - // Override the submission URL from the environment - - var envOverride = Cc['@mozilla.org/process/environment;1']. - getService(Ci.nsIEnvironment).get("MOZ_CRASHREPORTER_URL"); - if (envOverride != '') { - serverURL = envOverride; - } - - let xhr = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"] - .createInstance(Ci.nsIXMLHttpRequest); - xhr.open("POST", serverURL, true); - - let formData = Cc["@mozilla.org/files/formdata;1"] - .createInstance(Ci.nsIDOMFormData); - // add the data - for (let [name, value] of Object.entries(this.extraKeyVals)) { - if (name != "ServerURL") { - formData.append(name, value); - } - } - if (this.noThrottle) { - // tell the server not to throttle this, since it was manually submitted - formData.append("Throttleable", "0"); - } - // add the minidumps - formData.append("upload_file_minidump", File.createFromFileName(this.dump.path)); - if (this.memory) { - formData.append("memory_report", File.createFromFileName(this.memory.path)); - } - if (this.additionalDumps.length > 0) { - let names = []; - for (let i of this.additionalDumps) { - names.push(i.name); - formData.append("upload_file_minidump_"+i.name, - File.createFromFileName(i.dump.path)); - } - } - - let manager = Services.crashmanager; - let submissionID = manager.generateSubmissionID(); - - xhr.addEventListener("readystatechange", (evt) => { - if (xhr.readyState == 4) { - let ret = - xhr.status == 200 ? parseKeyValuePairs(xhr.responseText) : {}; - let submitted = !!ret.CrashID; - - if (this.recordSubmission) { - let result = submitted ? manager.SUBMISSION_RESULT_OK : - manager.SUBMISSION_RESULT_FAILED; - manager.addSubmissionResult(this.id, submissionID, new Date(), - result); - if (submitted) { - manager.setRemoteCrashID(this.id, ret.CrashID); - } - } - - if (submitted) { - this.submitSuccess(ret); - } - else { - this.notifyStatus(FAILED); - this.cleanup(); - } - } - }, false); - - if (this.recordSubmission) { - manager.addSubmissionAttempt(this.id, submissionID, new Date()); - } - xhr.send(formData); - return true; - }, - - notifyStatus: function Submitter_notify(status, ret) - { - let propBag = Cc["@mozilla.org/hash-property-bag;1"]. - createInstance(Ci.nsIWritablePropertyBag2); - propBag.setPropertyAsAString("minidumpID", this.id); - if (status == SUCCESS) { - propBag.setPropertyAsAString("serverCrashID", ret.CrashID); - } - - let extraKeyValsBag = Cc["@mozilla.org/hash-property-bag;1"]. - createInstance(Ci.nsIWritablePropertyBag2); - for (let key in this.extraKeyVals) { - extraKeyValsBag.setPropertyAsAString(key, this.extraKeyVals[key]); - } - propBag.setPropertyAsInterface("extra", extraKeyValsBag); - - Services.obs.notifyObservers(propBag, "crash-report-status", status); - - switch (status) { - case SUCCESS: - this.deferredSubmit.resolve(ret.CrashID); - break; - case FAILED: - this.deferredSubmit.reject(); - break; - default: - // no callbacks invoked. - } - }, - - submit: function Submitter_submit() - { - let [dump, extra, memory] = getPendingMinidump(this.id); - - if (!dump.exists() || !extra.exists()) { - this.notifyStatus(FAILED); - this.cleanup(); - return this.deferredSubmit.promise; - } - this.dump = dump; - this.extra = extra; - - // The memory file may or may not exist - if (memory.exists()) { - this.memory = memory; - } - - let extraKeyVals = parseKeyValuePairsFromFile(extra); - for (let key in extraKeyVals) { - if (!(key in this.extraKeyVals)) { - this.extraKeyVals[key] = extraKeyVals[key]; - } - } - - let additionalDumps = []; - if ("additional_minidumps" in this.extraKeyVals) { - let names = this.extraKeyVals.additional_minidumps.split(','); - for (let name of names) { - let [dump, extra, memory] = getPendingMinidump(this.id + "-" + name); - if (!dump.exists()) { - this.notifyStatus(FAILED); - this.cleanup(); - return this.deferredSubmit.promise; - } - additionalDumps.push({'name': name, 'dump': dump}); - } - } - - this.notifyStatus(SUBMITTING); - - this.additionalDumps = additionalDumps; - - if (!this.submitForm()) { - this.notifyStatus(FAILED); - this.cleanup(); - } - return this.deferredSubmit.promise; - } -}; - -// =================================== -// External API goes here -this.CrashSubmit = { - /** - * Submit the crash report named id.dmp from the "pending" directory. - * - * @param id - * Filename (minus .dmp extension) of the minidump to submit. - * @param params - * An object containing any of the following optional parameters: - * - recordSubmission - * If true, a submission event is recorded in CrashManager. - * - noThrottle - * If true, this crash report should be submitted with - * an extra parameter of "Throttleable=0" indicating that - * it should be processed right away. This should be set - * when the report is being submitted and the user expects - * to see the results immediately. Defaults to false. - * - extraExtraKeyVals - * An object whose key-value pairs will be merged with the data from - * the ".extra" file submitted with the report. The properties of - * this object will override properties of the same name in the - * .extra file. - * - * @return a Promise that is fulfilled with the server crash ID when the - * submission succeeds and rejected otherwise. - */ - submit: function CrashSubmit_submit(id, params) - { - params = params || {}; - let recordSubmission = false; - let submitSuccess = null; - let submitError = null; - let noThrottle = false; - let extraExtraKeyVals = null; - - if ('recordSubmission' in params) - recordSubmission = params.recordSubmission; - if ('noThrottle' in params) - noThrottle = params.noThrottle; - if ('extraExtraKeyVals' in params) - extraExtraKeyVals = params.extraExtraKeyVals; - - let submitter = new Submitter(id, recordSubmission, - noThrottle, extraExtraKeyVals); - CrashSubmit._activeSubmissions.push(submitter); - return submitter.submit(); - }, - - /** - * Delete the minidup from the "pending" directory. - * - * @param id - * Filename (minus .dmp extension) of the minidump to delete. - */ - delete: function CrashSubmit_delete(id) { - let [dump, extra, memory] = getPendingMinidump(id); - dump.remove(false); - extra.remove(false); - if (memory.exists()) { - memory.remove(false); - } - }, - - /** - * Add a .dmg.ignore file along side the .dmp file to indicate that the user - * shouldn't be prompted to submit this crash report again. - * - * @param id - * Filename (minus .dmp extension) of the report to ignore - */ - - ignore: function CrashSubmit_ignore(id) { - let [dump, extra, mem] = getPendingMinidump(id); - return OS.File.open(dump.path + ".ignore", {create: true}, - {unixFlags: OS.Constants.libc.O_CREAT}) - .then((file) => { file.close(); }); - }, - - /** - * Get the list of pending crash IDs. - * - * @return an array of string, each being an ID as - * expected to be passed to submit() - */ - pendingIDs: function CrashSubmit_pendingIDs() { - return getAllPendingMinidumpsIDs(); - }, - - /** - * Get the list of pending crash IDs, excluding those marked to be ignored - * @param maxFileDate - * A Date object. Any files last modified before that date will be ignored - * - * @return a Promise that is fulfilled with an array of string, each - * being an ID as expected to be passed to submit() or ignore() - */ - pendingIDsAsync: Task.async(function* CrashSubmit_pendingIDsAsync(maxFileDate) { - let ids = []; - let info = null; - try { - info = yield OS.File.stat(getDir("pending").path) - } catch (ex) { - /* pending dir doesn't exist, ignore */ - return ids; - } - - if (info.isDir) { - let iterator = new OS.File.DirectoryIterator(getDir("pending").path); - try { - yield iterator.forEach( - function onEntry(file) { - if (file.name.endsWith(".dmp")) { - return OS.File.exists(file.path + ".ignore") - .then(ignoreExists => { - if (!ignoreExists) { - let id = file.name.slice(0, -4); - if (UUID_REGEX.test(id)) { - return OS.File.stat(file.path) - .then(info => { - if (info.lastAccessDate.valueOf() > - maxFileDate.valueOf()) { - ids.push(id); - } - }); - } - } - return null; - }); - } - return null; - } - ); - } catch (ex) { - Cu.reportError(ex); - } finally { - iterator.close(); - } - } - return ids; - }), - - /** - * Prune the saved dumps. - */ - pruneSavedDumps: function CrashSubmit_pruneSavedDumps() { - pruneSavedDumps(); - }, - - // List of currently active submit objects - _activeSubmissions: [] -}; diff --git a/toolkit/crashreporter/InjectCrashReporter.cpp b/toolkit/crashreporter/InjectCrashReporter.cpp deleted file mode 100644 index 1b79f2cd1..000000000 --- a/toolkit/crashreporter/InjectCrashReporter.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "InjectCrashReporter.h" -#include "nsDirectoryServiceUtils.h" -#include "nsDirectoryServiceDefs.h" -#include "client/windows/crash_generation/crash_generation_client.h" -#include "nsExceptionHandler.h" -#include "LoadLibraryRemote.h" -#include "nsWindowsHelpers.h" - -using google_breakpad::CrashGenerationClient; -using CrashReporter::GetChildNotificationPipe; - -namespace mozilla { - -InjectCrashRunnable::InjectCrashRunnable(DWORD pid) - : mPID(pid) -{ - nsCOMPtr dll; - nsresult rv = NS_GetSpecialDirectory(NS_GRE_DIR, getter_AddRefs(dll)); - if (NS_SUCCEEDED(rv)) { - dll->Append(NS_LITERAL_STRING("breakpadinjector.dll")); - dll->GetPath(mInjectorPath); - } -} - -NS_IMETHODIMP -InjectCrashRunnable::Run() -{ - if (mInjectorPath.IsEmpty()) - return NS_OK; - - nsAutoHandle hProcess( - OpenProcess(PROCESS_CREATE_THREAD | - PROCESS_QUERY_INFORMATION | - PROCESS_DUP_HANDLE | - PROCESS_VM_OPERATION | - PROCESS_VM_WRITE | - PROCESS_VM_READ, FALSE, mPID)); - if (!hProcess) { - NS_WARNING("Unable to open remote process handle for crashreporter injection."); - return NS_OK; - } - - void* proc = LoadRemoteLibraryAndGetAddress(hProcess, mInjectorPath.get(), - "Start"); - if (!proc) { - NS_WARNING("Unable to inject crashreporter DLL."); - return NS_OK; - } - - HANDLE hRemotePipe = - CrashGenerationClient::DuplicatePipeToClientProcess( - NS_ConvertASCIItoUTF16(GetChildNotificationPipe()).get(), - hProcess); - if (INVALID_HANDLE_VALUE == hRemotePipe) { - NS_WARNING("Unable to duplicate crash reporter pipe to process."); - return NS_OK; - } - - nsAutoHandle hThread(CreateRemoteThread(hProcess, nullptr, 0, - (LPTHREAD_START_ROUTINE) proc, - (void*) hRemotePipe, 0, nullptr)); - if (!hThread) { - NS_WARNING("Unable to CreateRemoteThread"); - - // We have to close the remote pipe or else our crash generation client - // will be stuck unable to accept other remote requests. - HANDLE toClose = INVALID_HANDLE_VALUE; - if (DuplicateHandle(hProcess, hRemotePipe, ::GetCurrentProcess(), - &toClose, 0, FALSE, - DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS)) { - CloseHandle(toClose); - return NS_OK; - } - } - - return NS_OK; -} - -} // namespace mozilla diff --git a/toolkit/crashreporter/InjectCrashReporter.h b/toolkit/crashreporter/InjectCrashReporter.h deleted file mode 100644 index 5b40b49e3..000000000 --- a/toolkit/crashreporter/InjectCrashReporter.h +++ /dev/null @@ -1,28 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef InjectCrashReporter_h -#define InjectCrashReporter_h - -#include "nsThreadUtils.h" -#include - -namespace mozilla { - -class InjectCrashRunnable : public Runnable -{ -public: - InjectCrashRunnable(DWORD pid); - - NS_IMETHOD Run(); - -private: - DWORD mPID; - nsString mInjectorPath; -}; - -} // Namespace mozilla - -#endif diff --git a/toolkit/crashreporter/KeyValueParser.jsm b/toolkit/crashreporter/KeyValueParser.jsm deleted file mode 100644 index ec45354f3..000000000 --- a/toolkit/crashreporter/KeyValueParser.jsm +++ /dev/null @@ -1,54 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -Components.utils.import("resource://gre/modules/Services.jsm"); - -this.EXPORTED_SYMBOLS = [ - "parseKeyValuePairsFromLines", - "parseKeyValuePairs", - "parseKeyValuePairsFromFile" -]; - -const Cc = Components.classes; -const Ci = Components.interfaces; - -this.parseKeyValuePairsFromLines = function(lines) { - let data = {}; - for (let line of lines) { - if (line == '') - continue; - - // can't just .split() because the value might contain = characters - let eq = line.indexOf('='); - if (eq != -1) { - let [key, value] = [line.substring(0, eq), - line.substring(eq + 1)]; - if (key && value) - data[key] = value.replace(/\\n/g, "\n").replace(/\\\\/g, "\\"); - } - } - return data; -} - -this.parseKeyValuePairs = function parseKeyValuePairs(text) { - let lines = text.split('\n'); - return parseKeyValuePairsFromLines(lines); -}; - -this.parseKeyValuePairsFromFile = function parseKeyValuePairsFromFile(file) { - let fstream = Cc["@mozilla.org/network/file-input-stream;1"]. - createInstance(Ci.nsIFileInputStream); - fstream.init(file, -1, 0, 0); - let is = Cc["@mozilla.org/intl/converter-input-stream;1"]. - createInstance(Ci.nsIConverterInputStream); - is.init(fstream, "UTF-8", 1024, Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); - let str = {}; - let contents = ''; - while (is.readString(4096, str) != 0) { - contents += str.value; - } - is.close(); - fstream.close(); - return parseKeyValuePairs(contents); -} diff --git a/toolkit/crashreporter/LoadLibraryRemote.cpp b/toolkit/crashreporter/LoadLibraryRemote.cpp deleted file mode 100644 index f22a6220f..000000000 --- a/toolkit/crashreporter/LoadLibraryRemote.cpp +++ /dev/null @@ -1,454 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef __GNUC__ -// disable warnings about pointer <-> DWORD conversions -#pragma warning( disable : 4311 4312 ) -#endif - -#ifdef _WIN64 -#define POINTER_TYPE ULONGLONG -#else -#define POINTER_TYPE DWORD -#endif - -#include -#include -#include -#ifdef DEBUG_OUTPUT -#include -#endif - -#include "nsWindowsHelpers.h" - -typedef const unsigned char* FileView; - -template<> -class nsAutoRefTraits -{ -public: - typedef FileView RawRef; - static FileView Void() - { - return nullptr; - } - - static void Release(RawRef aView) - { - if (nullptr != aView) - UnmapViewOfFile(aView); - } -}; - -#ifndef IMAGE_SIZEOF_BASE_RELOCATION -// Vista SDKs no longer define IMAGE_SIZEOF_BASE_RELOCATION!? -#define IMAGE_SIZEOF_BASE_RELOCATION (sizeof(IMAGE_BASE_RELOCATION)) -#endif - -#include "LoadLibraryRemote.h" - -typedef struct { - PIMAGE_NT_HEADERS headers; - unsigned char *localCodeBase; - unsigned char *remoteCodeBase; - HMODULE *modules; - int numModules; -} MEMORYMODULE, *PMEMORYMODULE; - -typedef BOOL (WINAPI *DllEntryProc)(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved); - -#define GET_HEADER_DICTIONARY(module, idx) &(module)->headers->OptionalHeader.DataDirectory[idx] - -#ifdef DEBUG_OUTPUT -static void -OutputLastError(const char *msg) -{ - char* tmp; - char *tmpmsg; - FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - nullptr, GetLastError(), - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPSTR) &tmp, 0, nullptr); - tmpmsg = (char *)LocalAlloc(LPTR, strlen(msg) + strlen(tmp) + 3); - sprintf(tmpmsg, "%s: %s", msg, tmp); - OutputDebugStringA(tmpmsg); - LocalFree(tmpmsg); - LocalFree(tmp); -} -#endif - -static void -CopySections(const unsigned char *data, PIMAGE_NT_HEADERS old_headers, PMEMORYMODULE module) -{ - int i; - unsigned char *codeBase = module->localCodeBase; - unsigned char *dest; - PIMAGE_SECTION_HEADER section = IMAGE_FIRST_SECTION(module->headers); - for (i=0; iheaders->FileHeader.NumberOfSections; i++, section++) { - dest = codeBase + section->VirtualAddress; - memset(dest, 0, section->Misc.VirtualSize); - if (section->SizeOfRawData) { - memcpy(dest, data + section->PointerToRawData, section->SizeOfRawData); - } - // section->Misc.PhysicalAddress = (POINTER_TYPE) module->remoteCodeBase + section->VirtualAddress; - } -} - -static bool -CopyRegion(HANDLE hRemoteProcess, void* remoteAddress, void* localAddress, DWORD size, DWORD protect) -{ - if (size > 0) { - // Copy the data from local->remote and set the memory protection - if (!VirtualAllocEx(hRemoteProcess, remoteAddress, size, MEM_COMMIT, PAGE_READWRITE)) - return false; - - if (!WriteProcessMemory(hRemoteProcess, - remoteAddress, - localAddress, - size, - nullptr)) { -#ifdef DEBUG_OUTPUT - OutputLastError("Error writing remote memory.\n"); -#endif - return false; - } - - DWORD oldProtect; - if (VirtualProtectEx(hRemoteProcess, remoteAddress, size, protect, &oldProtect) == 0) { -#ifdef DEBUG_OUTPUT - OutputLastError("Error protecting memory page"); -#endif - return false; - } - } - return true; -} -// Protection flags for memory pages (Executable, Readable, Writeable) -static int ProtectionFlags[2][2][2] = { - { - // not executable - {PAGE_NOACCESS, PAGE_WRITECOPY}, - {PAGE_READONLY, PAGE_READWRITE}, - }, { - // executable - {PAGE_EXECUTE, PAGE_EXECUTE_WRITECOPY}, - {PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE}, - }, -}; - -static bool -FinalizeSections(PMEMORYMODULE module, HANDLE hRemoteProcess) -{ -#ifdef DEBUG_OUTPUT - fprintf(stderr, "Finalizing sections: local base %p, remote base %p\n", - module->localCodeBase, module->remoteCodeBase); -#endif - - int i; - int numSections = module->headers->FileHeader.NumberOfSections; - - if (numSections < 1) - return false; - - PIMAGE_SECTION_HEADER section = IMAGE_FIRST_SECTION(module->headers); - - // Copy any data before the first section (i.e. the image header) - if (!CopyRegion(hRemoteProcess, module->remoteCodeBase, module->localCodeBase, section->VirtualAddress, PAGE_READONLY)) - return false; - - // loop through all sections and change access flags - for (i=0; iCharacteristics & IMAGE_SCN_MEM_EXECUTE) != 0; - int readable = (section->Characteristics & IMAGE_SCN_MEM_READ) != 0; - int writeable = (section->Characteristics & IMAGE_SCN_MEM_WRITE) != 0; - - // determine protection flags based on characteristics - protect = ProtectionFlags[executable][readable][writeable]; - if (section->Characteristics & IMAGE_SCN_MEM_NOT_CACHED) { - protect |= PAGE_NOCACHE; - } - - void* remoteAddress = module->remoteCodeBase + section->VirtualAddress; - void* localAddress = module->localCodeBase + section->VirtualAddress; - - // determine size of region - size = section->Misc.VirtualSize; -#ifdef DEBUG_OUTPUT - fprintf(stderr, "Copying section %s to %p, size %x, executable %i readable %i writeable %i\n", - section->Name, remoteAddress, size, executable, readable, writeable); -#endif - if (!CopyRegion(hRemoteProcess, remoteAddress, localAddress, size, protect)) - return false; - } - return true; -} - -static void -PerformBaseRelocation(PMEMORYMODULE module, SIZE_T delta) -{ - DWORD i; - unsigned char *codeBase = module->localCodeBase; - - PIMAGE_DATA_DIRECTORY directory = GET_HEADER_DICTIONARY(module, IMAGE_DIRECTORY_ENTRY_BASERELOC); - if (directory->Size > 0) { - PIMAGE_BASE_RELOCATION relocation = (PIMAGE_BASE_RELOCATION) (codeBase + directory->VirtualAddress); - for (; relocation->VirtualAddress > 0; ) { - unsigned char *dest = codeBase + relocation->VirtualAddress; - unsigned short *relInfo = (unsigned short *)((unsigned char *)relocation + IMAGE_SIZEOF_BASE_RELOCATION); - for (i=0; i<((relocation->SizeOfBlock-IMAGE_SIZEOF_BASE_RELOCATION) / 2); i++, relInfo++) { - DWORD *patchAddrHL; -#ifdef _WIN64 - ULONGLONG *patchAddr64; -#endif - int type, offset; - - // the upper 4 bits define the type of relocation - type = *relInfo >> 12; - // the lower 12 bits define the offset - offset = *relInfo & 0xfff; - - switch (type) - { - case IMAGE_REL_BASED_ABSOLUTE: - // skip relocation - break; - - case IMAGE_REL_BASED_HIGHLOW: - // change complete 32 bit address - patchAddrHL = (DWORD *) (dest + offset); - *patchAddrHL += delta; - break; - -#ifdef _WIN64 - case IMAGE_REL_BASED_DIR64: - patchAddr64 = (ULONGLONG *) (dest + offset); - *patchAddr64 += delta; - break; -#endif - - default: - //printf("Unknown relocation: %d\n", type); - break; - } - } - - // advance to next relocation block - relocation = (PIMAGE_BASE_RELOCATION) (((char *) relocation) + relocation->SizeOfBlock); - } - } -} - -static int -BuildImportTable(PMEMORYMODULE module) -{ - int result=1; - unsigned char *codeBase = module->localCodeBase; - - PIMAGE_DATA_DIRECTORY directory = GET_HEADER_DICTIONARY(module, IMAGE_DIRECTORY_ENTRY_IMPORT); - if (directory->Size > 0) { - PIMAGE_IMPORT_DESCRIPTOR importDesc = (PIMAGE_IMPORT_DESCRIPTOR) (codeBase + directory->VirtualAddress); - PIMAGE_IMPORT_DESCRIPTOR importEnd = (PIMAGE_IMPORT_DESCRIPTOR) (codeBase + directory->VirtualAddress + directory->Size); - - for (; importDesc < importEnd && importDesc->Name; importDesc++) { - POINTER_TYPE *thunkRef; - FARPROC *funcRef; - HMODULE handle = GetModuleHandleA((LPCSTR) (codeBase + importDesc->Name)); - if (handle == nullptr) { -#if DEBUG_OUTPUT - OutputLastError("Can't load library"); -#endif - result = 0; - break; - } - - module->modules = (HMODULE *)realloc(module->modules, (module->numModules+1)*(sizeof(HMODULE))); - if (module->modules == nullptr) { - result = 0; - break; - } - - module->modules[module->numModules++] = handle; - if (importDesc->OriginalFirstThunk) { - thunkRef = (POINTER_TYPE *) (codeBase + importDesc->OriginalFirstThunk); - funcRef = (FARPROC *) (codeBase + importDesc->FirstThunk); - } else { - // no hint table - thunkRef = (POINTER_TYPE *) (codeBase + importDesc->FirstThunk); - funcRef = (FARPROC *) (codeBase + importDesc->FirstThunk); - } - for (; *thunkRef; thunkRef++, funcRef++) { - if (IMAGE_SNAP_BY_ORDINAL(*thunkRef)) { - *funcRef = (FARPROC)GetProcAddress(handle, (LPCSTR)IMAGE_ORDINAL(*thunkRef)); - } else { - PIMAGE_IMPORT_BY_NAME thunkData = (PIMAGE_IMPORT_BY_NAME) (codeBase + (*thunkRef)); - *funcRef = (FARPROC)GetProcAddress(handle, (LPCSTR)&thunkData->Name); - } - if (*funcRef == 0) { - result = 0; - break; - } - } - - if (!result) { - break; - } - } - } - - return result; -} - -static void* MemoryGetProcAddress(PMEMORYMODULE module, const char *name); - -void* LoadRemoteLibraryAndGetAddress(HANDLE hRemoteProcess, - const WCHAR* library, - const char* symbol) -{ - // Map the DLL into memory - nsAutoHandle hLibrary( - CreateFile(library, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, nullptr)); - if (INVALID_HANDLE_VALUE == hLibrary) { -#if DEBUG_OUTPUT - OutputLastError("Couldn't CreateFile the library.\n"); -#endif - return nullptr; - } - - nsAutoHandle hMapping( - CreateFileMapping(hLibrary, nullptr, PAGE_READONLY, 0, 0, nullptr)); - if (!hMapping) { -#if DEBUG_OUTPUT - OutputLastError("Couldn't CreateFileMapping.\n"); -#endif - return nullptr; - } - - nsAutoRef data( - (const unsigned char*) MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0)); - if (!data) { -#if DEBUG_OUTPUT - OutputLastError("Couldn't MapViewOfFile.\n"); -#endif - return nullptr; - } - - SIZE_T locationDelta; - - PIMAGE_DOS_HEADER dos_header = (PIMAGE_DOS_HEADER)data.get(); - if (dos_header->e_magic != IMAGE_DOS_SIGNATURE) { -#if DEBUG_OUTPUT - OutputDebugStringA("Not a valid executable file.\n"); -#endif - return nullptr; - } - - PIMAGE_NT_HEADERS old_header = (PIMAGE_NT_HEADERS)(data + dos_header->e_lfanew); - if (old_header->Signature != IMAGE_NT_SIGNATURE) { -#if DEBUG_OUTPUT - OutputDebugStringA("No PE header found.\n"); -#endif - return nullptr; - } - - // reserve memory for image of library in this process and the target process - unsigned char* localCode = (unsigned char*) VirtualAlloc(nullptr, - old_header->OptionalHeader.SizeOfImage, - MEM_RESERVE | MEM_COMMIT, - PAGE_READWRITE); - if (!localCode) { -#if DEBUG_OUTPUT - OutputLastError("Can't reserve local memory."); -#endif - } - - unsigned char* remoteCode = (unsigned char*) VirtualAllocEx(hRemoteProcess, nullptr, - old_header->OptionalHeader.SizeOfImage, - MEM_RESERVE, - PAGE_EXECUTE_READ); - if (!remoteCode) { -#if DEBUG_OUTPUT - OutputLastError("Can't reserve remote memory."); -#endif - } - - MEMORYMODULE result; - result.localCodeBase = localCode; - result.remoteCodeBase = remoteCode; - result.numModules = 0; - result.modules = nullptr; - - // copy PE header to code - memcpy(localCode, dos_header, dos_header->e_lfanew + old_header->OptionalHeader.SizeOfHeaders); - result.headers = reinterpret_cast(localCode + dos_header->e_lfanew); - - // update position - result.headers->OptionalHeader.ImageBase = (POINTER_TYPE)remoteCode; - - // copy sections from DLL file block to new memory location - CopySections(data, old_header, &result); - - // adjust base address of imported data - locationDelta = (SIZE_T)(remoteCode - old_header->OptionalHeader.ImageBase); - if (locationDelta != 0) { - PerformBaseRelocation(&result, locationDelta); - } - - // load required dlls and adjust function table of imports - if (!BuildImportTable(&result)) { - return nullptr; - } - - // mark memory pages depending on section headers and release - // sections that are marked as "discardable" - if (!FinalizeSections(&result, hRemoteProcess)) { - return nullptr; - } - - return MemoryGetProcAddress(&result, symbol); -} - -static void* MemoryGetProcAddress(PMEMORYMODULE module, const char *name) -{ - unsigned char *localCodeBase = module->localCodeBase; - int idx=-1; - DWORD i, *nameRef; - WORD *ordinal; - PIMAGE_EXPORT_DIRECTORY exports; - PIMAGE_DATA_DIRECTORY directory = GET_HEADER_DICTIONARY(module, IMAGE_DIRECTORY_ENTRY_EXPORT); - if (directory->Size == 0) { - // no export table found - return nullptr; - } - - exports = (PIMAGE_EXPORT_DIRECTORY) (localCodeBase + directory->VirtualAddress); - if (exports->NumberOfNames == 0 || exports->NumberOfFunctions == 0) { - // DLL doesn't export anything - return nullptr; - } - - // search function name in list of exported names - nameRef = (DWORD *) (localCodeBase + exports->AddressOfNames); - ordinal = (WORD *) (localCodeBase + exports->AddressOfNameOrdinals); - for (i=0; iNumberOfNames; i++, nameRef++, ordinal++) { - if (stricmp(name, (const char *) (localCodeBase + (*nameRef))) == 0) { - idx = *ordinal; - break; - } - } - - if (idx == -1) { - // exported symbol not found - return nullptr; - } - - if ((DWORD)idx > exports->NumberOfFunctions) { - // name <-> ordinal number don't match - return nullptr; - } - - // AddressOfFunctions contains the RVAs to the "real" functions - return module->remoteCodeBase + (*(DWORD *) (localCodeBase + exports->AddressOfFunctions + (idx*4))); -} diff --git a/toolkit/crashreporter/LoadLibraryRemote.h b/toolkit/crashreporter/LoadLibraryRemote.h deleted file mode 100644 index 7beeaf4a5..000000000 --- a/toolkit/crashreporter/LoadLibraryRemote.h +++ /dev/null @@ -1,24 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef LoadLibraryRemote_h -#define LoadLibraryRemote_h - -#include - -/** - * Inject a library into a remote process. This injection has the following - * restrictions: - * - * - The DLL being injected must only depend on kernel32 and user32. - * - The entry point of the DLL is not run. If the DLL uses the CRT, it is - * the responsibility of the caller to make sure that _CRT_INIT is called. - * - There is no support for unloading a library once it has been loaded. - * - The symbol must be a named symbol and not an ordinal. - */ -void* LoadRemoteLibraryAndGetAddress(HANDLE hRemoteProcess, - const WCHAR* library, - const char* symbol); - -#endif // LoadLibraryRemote_h diff --git a/toolkit/crashreporter/breakpad-patches/00-arm-exidx-rollup.patch b/toolkit/crashreporter/breakpad-patches/00-arm-exidx-rollup.patch deleted file mode 100644 index 3ca5815d1..000000000 --- a/toolkit/crashreporter/breakpad-patches/00-arm-exidx-rollup.patch +++ /dev/null @@ -1,1347 +0,0 @@ -diff --git a/Makefile.am b/Makefile.am -index 42386be..e8f7402 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -524,6 +524,8 @@ src_tools_linux_dump_syms_dump_syms_SOURCES = \ - src/common/dwarf/bytereader.cc \ - src/common/dwarf/dwarf2diehandler.cc \ - src/common/dwarf/dwarf2reader.cc \ -+ src/common/arm_ex_reader.cc \ -+ src/common/arm_ex_to_module.cc \ - src/common/linux/crc32.cc \ - src/common/linux/dump_symbols.cc \ - src/common/linux/elf_symbols_to_module.cc \ -@@ -573,6 +575,8 @@ src_tools_mac_dump_syms_dump_syms_CXXFLAGS= \ - -DHAVE_MACH_O_NLIST_H - - src_common_dumper_unittest_SOURCES = \ -+ src/common/arm_ex_reader.cc \ -+ src/common/arm_ex_to_module.cc \ - src/common/byte_cursor_unittest.cc \ - src/common/dwarf_cfi_to_module.cc \ - src/common/dwarf_cfi_to_module_unittest.cc \ -@@ -1336,6 +1340,10 @@ EXTRA_DIST = \ - src/common/linux/crc32.cc \ - src/common/linux/dump_symbols.cc \ - src/common/linux/dump_symbols.h \ -+ src/common/arm_ex_reader.cc \ -+ src/common/arm_ex_reader.h \ -+ src/common/arm_ex_to_module.cc \ -+ src/common/arm_ex_to_module.h \ - src/common/linux/elf_symbols_to_module.cc \ - src/common/linux/elf_symbols_to_module.h \ - src/common/linux/elfutils.cc \ -diff --git a/src/common/arm_ex_reader.cc b/src/common/arm_ex_reader.cc -new file mode 100644 -index 0000000..2d1ed98 ---- /dev/null -+++ b/src/common/arm_ex_reader.cc -@@ -0,0 +1,487 @@ -+ -+/* libunwind - a platform-independent unwind library -+ Copyright 2011 Linaro Limited -+ -+This file is part of libunwind. -+ -+Permission is hereby granted, free of charge, to any person obtaining -+a copy of this software and associated documentation files (the -+"Software"), to deal in the Software without restriction, including -+without limitation the rights to use, copy, modify, merge, publish, -+distribute, sublicense, and/or sell copies of the Software, and to -+permit persons to whom the Software is furnished to do so, subject to -+the following conditions: -+ -+The above copyright notice and this permission notice shall be -+included in all copies or substantial portions of the Software. -+ -+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+// Copyright (c) 2010 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. -+ -+ -+// Derived from libunwind, with extensive modifications. -+ -+ -+#include "common/arm_ex_reader.h" -+ -+#include -+#include -+ -+// This file, in conjunction with arm_ex_to_module.cc, translates -+// EXIDX unwind information into the same format that Breakpad uses -+// for CFI information. Hence Breakpad's CFI unwinding abilities -+// also become usable for EXIDX. -+// -+// See: "Exception Handling ABI for the ARM Architecture", ARM IHI 0038A -+// http://infocenter.arm.com/help/topic/com.arm.doc.ihi0038a/IHI0038A_ehabi.pdf -+ -+// EXIDX data is presented in two parts: -+// -+// * an index table. This contains two words per routine, -+// the first of which identifies the routine, and the second -+// of which is a reference to the unwind bytecode. If the -+// bytecode is very compact -- 3 bytes or less -- it can be -+// stored directly in the second word. -+// -+// * an area containing the unwind bytecodes. -+ -+// General flow is: ExceptionTableInfo::Start iterates over all -+// of the index table entries (pairs). For each entry, it: -+// -+// * calls ExceptionTableInfo::ExtabEntryExtract to copy the bytecode -+// out into an intermediate buffer. -+ -+// * uses ExceptionTableInfo::ExtabEntryDecode to parse the intermediate -+// buffer. Each bytecode instruction is bundled into a -+// arm_ex_to_module::extab_data structure, and handed to .. -+// -+// * .. ARMExToModule::ImproveStackFrame, which in turn hands it to -+// ARMExToModule::TranslateCmd, and that generates the pseudo-CFI -+// records that Breakpad stores. -+ -+#define ARM_EXIDX_CANT_UNWIND 0x00000001 -+#define ARM_EXIDX_COMPACT 0x80000000 -+#define ARM_EXTBL_OP_FINISH 0xb0 -+#define ARM_EXIDX_TABLE_LIMIT (255*4) -+ -+namespace arm_ex_reader { -+ -+using arm_ex_to_module::ARM_EXIDX_CMD_FINISH; -+using arm_ex_to_module::ARM_EXIDX_CMD_SUB_FROM_VSP; -+using arm_ex_to_module::ARM_EXIDX_CMD_ADD_TO_VSP; -+using arm_ex_to_module::ARM_EXIDX_CMD_REG_POP; -+using arm_ex_to_module::ARM_EXIDX_CMD_REG_TO_SP; -+using arm_ex_to_module::ARM_EXIDX_CMD_VFP_POP; -+using arm_ex_to_module::ARM_EXIDX_CMD_WREG_POP; -+using arm_ex_to_module::ARM_EXIDX_CMD_WCGR_POP; -+using arm_ex_to_module::ARM_EXIDX_CMD_RESERVED; -+using arm_ex_to_module::ARM_EXIDX_CMD_REFUSED; -+using arm_ex_to_module::exidx_entry; -+using arm_ex_to_module::ARM_EXIDX_VFP_SHIFT_16; -+using arm_ex_to_module::ARM_EXIDX_VFP_FSTMD; -+using google_breakpad::MemoryRange; -+ -+ -+static void* Prel31ToAddr(const void* addr) { -+ uint32_t offset32 = *reinterpret_cast(addr); -+ // sign extend offset32[30:0] to 64 bits -- copy bit 30 to positions -+ // 63:31 inclusive. -+ uint64_t offset64 = offset32; -+ if (offset64 & (1ULL << 30)) -+ offset64 |= 0xFFFFFFFF80000000ULL; -+ else -+ offset64 &= 0x000000007FFFFFFFULL; -+ return ((char*)addr) + (uintptr_t)offset64; -+} -+ -+ -+// Extract unwind bytecode for the function denoted by |entry| into |buf|, -+// and return the number of bytes of |buf| written, along with a code -+// indicating the outcome. -+ -+ExceptionTableInfo::ExExtractResult ExceptionTableInfo::ExtabEntryExtract( -+ const struct exidx_entry* entry, -+ uint8_t* buf, size_t buf_size, -+ size_t* buf_used) { -+ MemoryRange mr_out(buf, buf_size); -+ -+ *buf_used = 0; -+ -+# define PUT_BUF_U8(_byte) \ -+ do { if (!mr_out.Covers(*buf_used, 1)) return ExOutBufOverflow; \ -+ buf[(*buf_used)++] = (_byte); } while (0) -+ -+# define GET_EX_U32(_lval, _addr, _sec_mr) \ -+ do { if (!(_sec_mr).Covers(reinterpret_cast(_addr) \ -+ - (_sec_mr).data(), 4)) \ -+ return ExInBufOverflow; \ -+ (_lval) = *(reinterpret_cast(_addr)); } while (0) -+ -+# define GET_EXIDX_U32(_lval, _addr) \ -+ GET_EX_U32(_lval, _addr, mr_exidx_) -+# define GET_EXTAB_U32(_lval, _addr) \ -+ GET_EX_U32(_lval, _addr, mr_extab_) -+ -+ uint32_t data; -+ GET_EXIDX_U32(data, &entry->data); -+ -+ // A function can be marked CANT_UNWIND if (eg) it is known to be -+ // at the bottom of the stack. -+ if (data == ARM_EXIDX_CANT_UNWIND) -+ return ExCantUnwind; -+ -+ uint32_t pers; // personality number -+ uint32_t extra; // number of extra data words required -+ uint32_t extra_allowed; // number of extra data words allowed -+ uint32_t* extbl_data; // the handler entry, if not inlined -+ -+ if (data & ARM_EXIDX_COMPACT) { -+ // The handler table entry has been inlined into the index table entry. -+ // In this case it can only be an ARM-defined compact model, since -+ // bit 31 is 1. Only personalities 0, 1 and 2 are defined for the -+ // ARM compact model, but 1 and 2 are "Long format" and may require -+ // extra data words. Hence the allowable personalities here are: -+ // personality 0, in which case 'extra' has no meaning -+ // personality 1, with zero extra words -+ // personality 2, with zero extra words -+ extbl_data = NULL; -+ pers = (data >> 24) & 0x0F; -+ extra = (data >> 16) & 0xFF; -+ extra_allowed = 0; -+ } -+ else { -+ // The index table entry is a pointer to the handler entry. Note -+ // that Prel31ToAddr will read the given address, but we already -+ // range-checked above. -+ extbl_data = reinterpret_cast(Prel31ToAddr(&entry->data)); -+ GET_EXTAB_U32(data, extbl_data); -+ if (!(data & ARM_EXIDX_COMPACT)) { -+ // This denotes a "generic model" handler. That will involve -+ // executing arbitary machine code, which is something we -+ // can't represent here; hence reject it. -+ return ExCantRepresent; -+ } -+ // So we have a compact model representation. Again, 3 possible -+ // personalities, but this time up to 255 allowable extra words. -+ pers = (data >> 24) & 0x0F; -+ extra = (data >> 16) & 0xFF; -+ extra_allowed = 255; -+ extbl_data++; -+ } -+ -+ // Now look at the the handler table entry. The first word is -+ // |data| and subsequent words start at |*extbl_data|. The number -+ // of extra words to use is |extra|, provided that the personality -+ // allows extra words. Even if it does, none may be available -- -+ // extra_allowed is the maximum number of extra words allowed. */ -+ if (pers == 0) { -+ // "Su16" in the documentation -- 3 unwinding insn bytes -+ // |extra| has no meaning here; instead that byte is an unwind-info byte -+ PUT_BUF_U8(data >> 16); -+ PUT_BUF_U8(data >> 8); -+ PUT_BUF_U8(data); -+ } -+ else if ((pers == 1 || pers == 2) && extra <= extra_allowed) { -+ // "Lu16" or "Lu32" respectively -- 2 unwinding insn bytes, -+ // and up to 255 extra words. -+ PUT_BUF_U8(data >> 8); -+ PUT_BUF_U8(data); -+ for (uint32_t j = 0; j < extra; j++) { -+ GET_EXTAB_U32(data, extbl_data); -+ extbl_data++; -+ PUT_BUF_U8(data >> 24); -+ PUT_BUF_U8(data >> 16); -+ PUT_BUF_U8(data >> 8); -+ PUT_BUF_U8(data >> 0); -+ } -+ } -+ else { -+ // The entry is invalid. -+ return ExInvalid; -+ } -+ -+ // Make sure the entry is terminated with "FINISH" -+ if (*buf_used > 0 && buf[(*buf_used) - 1] != ARM_EXTBL_OP_FINISH) -+ PUT_BUF_U8(ARM_EXTBL_OP_FINISH); -+ -+ return ExSuccess; -+ -+# undef GET_EXTAB_U32 -+# undef GET_EXIDX_U32 -+# undef GET_U32 -+# undef PUT_BUF_U8 -+} -+ -+ -+// Take the unwind information extracted by ExtabEntryExtract -+// and parse it into frame-unwind instructions. These are as -+// specified in "Table 4, ARM-defined frame-unwinding instructions" -+// in the specification document detailed in comments at the top -+// of this file. -+// -+// This reads from |buf[0, +data_size)|. It checks for overruns of -+// the input buffer and returns a negative value if that happens, or -+// for any other failure cases. It returns zero in case of success. -+int ExceptionTableInfo::ExtabEntryDecode(const uint8_t* buf, size_t buf_size) { -+ if (buf == NULL || buf_size == 0) -+ return -1; -+ -+ MemoryRange mr_in(buf, buf_size); -+ const uint8_t* buf_initially = buf; -+ -+# define GET_BUF_U8(_lval) \ -+ do { if (!mr_in.Covers(buf - buf_initially, 1)) return -1; \ -+ (_lval) = *(buf++); } while (0) -+ -+ const uint8_t* end = buf + buf_size; -+ -+ while (buf < end) { -+ struct arm_ex_to_module::extab_data edata; -+ memset(&edata, 0, sizeof(edata)); -+ -+ uint8_t op; -+ GET_BUF_U8(op); -+ if ((op & 0xc0) == 0x00) { -+ // vsp = vsp + (xxxxxx << 2) + 4 -+ edata.cmd = ARM_EXIDX_CMD_ADD_TO_VSP; -+ edata.data = (((int)op & 0x3f) << 2) + 4; -+ } else if ((op & 0xc0) == 0x40) { -+ // vsp = vsp - (xxxxxx << 2) - 4 -+ edata.cmd = ARM_EXIDX_CMD_SUB_FROM_VSP; -+ edata.data = (((int)op & 0x3f) << 2) + 4; -+ } else if ((op & 0xf0) == 0x80) { -+ uint8_t op2; -+ GET_BUF_U8(op2); -+ if (op == 0x80 && op2 == 0x00) { -+ // Refuse to unwind -+ edata.cmd = ARM_EXIDX_CMD_REFUSED; -+ } else { -+ // Pop up to 12 integer registers under masks {r15-r12},{r11-r4} -+ edata.cmd = ARM_EXIDX_CMD_REG_POP; -+ edata.data = ((op & 0xf) << 8) | op2; -+ edata.data = edata.data << 4; -+ } -+ } else if ((op & 0xf0) == 0x90) { -+ if (op == 0x9d || op == 0x9f) { -+ // 9d: Reserved as prefix for ARM register to register moves -+ // 9f: Reserved as perfix for Intel Wireless MMX reg to reg moves -+ edata.cmd = ARM_EXIDX_CMD_RESERVED; -+ } else { -+ // Set vsp = r[nnnn] -+ edata.cmd = ARM_EXIDX_CMD_REG_TO_SP; -+ edata.data = op & 0x0f; -+ } -+ } else if ((op & 0xf0) == 0xa0) { -+ // Pop r4 to r[4+nnn], or -+ // Pop r4 to r[4+nnn] and r14 or -+ unsigned end = (op & 0x07); -+ edata.data = (1 << (end + 1)) - 1; -+ edata.data = edata.data << 4; -+ if (op & 0x08) edata.data |= 1 << 14; -+ edata.cmd = ARM_EXIDX_CMD_REG_POP; -+ } else if (op == ARM_EXTBL_OP_FINISH) { -+ // Finish -+ edata.cmd = ARM_EXIDX_CMD_FINISH; -+ buf = end; -+ } else if (op == 0xb1) { -+ uint8_t op2; -+ GET_BUF_U8(op2); -+ if (op2 == 0 || (op2 & 0xf0)) { -+ // Spare -+ edata.cmd = ARM_EXIDX_CMD_RESERVED; -+ } else { -+ // Pop integer registers under mask {r3,r2,r1,r0} -+ edata.cmd = ARM_EXIDX_CMD_REG_POP; -+ edata.data = op2 & 0x0f; -+ } -+ } else if (op == 0xb2) { -+ // vsp = vsp + 0x204 + (uleb128 << 2) -+ uint64_t offset = 0; -+ uint8_t byte, shift = 0; -+ do { -+ GET_BUF_U8(byte); -+ offset |= (byte & 0x7f) << shift; -+ shift += 7; -+ } while ((byte & 0x80) && buf < end); -+ edata.data = offset * 4 + 0x204; -+ edata.cmd = ARM_EXIDX_CMD_ADD_TO_VSP; -+ } else if (op == 0xb3 || op == 0xc8 || op == 0xc9) { -+ // b3: Pop VFP regs D[ssss] to D[ssss+cccc], FSTMFDX-ishly -+ // c8: Pop VFP regs D[16+ssss] to D[16+ssss+cccc], FSTMFDD-ishly -+ // c9: Pop VFP regs D[ssss] to D[ssss+cccc], FSTMFDD-ishly -+ edata.cmd = ARM_EXIDX_CMD_VFP_POP; -+ GET_BUF_U8(edata.data); -+ if (op == 0xc8) edata.data |= ARM_EXIDX_VFP_SHIFT_16; -+ if (op != 0xb3) edata.data |= ARM_EXIDX_VFP_FSTMD; -+ } else if ((op & 0xf8) == 0xb8 || (op & 0xf8) == 0xd0) { -+ // b8: Pop VFP regs D[8] to D[8+nnn], FSTMFDX-ishly -+ // d0: Pop VFP regs D[8] to D[8+nnn], FSTMFDD-ishly -+ edata.cmd = ARM_EXIDX_CMD_VFP_POP; -+ edata.data = 0x80 | (op & 0x07); -+ if ((op & 0xf8) == 0xd0) edata.data |= ARM_EXIDX_VFP_FSTMD; -+ } else if (op >= 0xc0 && op <= 0xc5) { -+ // Intel Wireless MMX pop wR[10]-wr[10+nnn], nnn != 6,7 -+ edata.cmd = ARM_EXIDX_CMD_WREG_POP; -+ edata.data = 0xa0 | (op & 0x07); -+ } else if (op == 0xc6) { -+ // Intel Wireless MMX pop wR[ssss] to wR[ssss+cccc] -+ edata.cmd = ARM_EXIDX_CMD_WREG_POP; -+ GET_BUF_U8(edata.data); -+ } else if (op == 0xc7) { -+ uint8_t op2; -+ GET_BUF_U8(op2); -+ if (op2 == 0 || (op2 & 0xf0)) { -+ // Spare -+ edata.cmd = ARM_EXIDX_CMD_RESERVED; -+ } else { -+ // Intel Wireless MMX pop wCGR registers under mask {wCGR3,2,1,0} -+ edata.cmd = ARM_EXIDX_CMD_WCGR_POP; -+ edata.data = op2 & 0x0f; -+ } -+ } else { -+ // Spare -+ edata.cmd = ARM_EXIDX_CMD_RESERVED; -+ } -+ -+ int ret = handler_->ImproveStackFrame(&edata); -+ if (ret < 0) -+ return ret; -+ } -+ return 0; -+ -+# undef GET_BUF_U8 -+} -+ -+void ExceptionTableInfo::Start() { -+ const struct exidx_entry* start -+ = reinterpret_cast(mr_exidx_.data()); -+ const struct exidx_entry* end -+ = reinterpret_cast(mr_exidx_.data() -+ + mr_exidx_.length()); -+ -+ // Iterate over each of the EXIDX entries (pairs of 32-bit words). -+ // These occupy the entire .exidx section. -+ for (const struct exidx_entry* entry = start; entry < end; ++entry) { -+ // Figure out the code address range that this table entry is -+ // associated with. -+ uint32_t addr = (reinterpret_cast(Prel31ToAddr(&entry->addr)) -+ - mapping_addr_ + loading_addr_) & 0x7fffffff; -+ uint32_t next_addr; -+ if (entry < end - 1) { -+ next_addr = (reinterpret_cast(Prel31ToAddr(&((entry + 1)->addr))) -+ - mapping_addr_ + loading_addr_) & 0x7fffffff; -+ } else { -+ // This is the last EXIDX entry in the sequence, so we don't -+ // have an address for the start of the next function, to limit -+ // this one. Instead use the address of the last byte of the -+ // text section associated with this .exidx section, that we -+ // have been given. So as to avoid junking up the CFI unwind -+ // tables with absurdly large address ranges in the case where -+ // text_last_svma_ is wrong, only use the value if it is nonzero -+ // and within one page of |addr|. Otherwise assume a length of 1. -+ // -+ // In some cases, gcc has been observed to finish the exidx -+ // section with an entry of length 1 marked CANT_UNWIND, -+ // presumably exactly for the purpose of giving a definite -+ // length for the last real entry, without having to look at -+ // text segment boundaries. -+ bool plausible = false; -+ next_addr = addr + 1; -+ if (text_last_svma_ != 0) { -+ uint32_t maybe_next_addr = text_last_svma_ + 1; -+ if (maybe_next_addr > addr && maybe_next_addr - addr <= 4096) { -+ next_addr = maybe_next_addr; -+ plausible = true; -+ } -+ } -+ if (!plausible) { -+ fprintf(stderr, "ExceptionTableInfo: implausible EXIDX last entry size " -+ "%d, using 1 instead.", (int32_t)(text_last_svma_ - addr)); -+ } -+ } -+ -+ // Extract the unwind info into |buf|. This might fail for -+ // various reasons. It involves reading both the .exidx and -+ // .extab sections. All accesses to those sections are -+ // bounds-checked. -+ uint8_t buf[ARM_EXIDX_TABLE_LIMIT]; -+ size_t buf_used = 0; -+ ExExtractResult res = ExtabEntryExtract(entry, buf, sizeof(buf), &buf_used); -+ if (res != ExSuccess) { -+ // Couldn't extract the unwind info, for some reason. Move on. -+ switch (res) { -+ case ExInBufOverflow: -+ fprintf(stderr, "ExtabEntryExtract: .exidx/.extab section overrun"); -+ break; -+ case ExOutBufOverflow: -+ fprintf(stderr, "ExtabEntryExtract: bytecode buffer overflow"); -+ break; -+ case ExCantUnwind: -+ fprintf(stderr, "ExtabEntryExtract: function is marked CANT_UNWIND"); -+ break; -+ case ExCantRepresent: -+ fprintf(stderr, "ExtabEntryExtract: bytecode can't be represented"); -+ break; -+ case ExInvalid: -+ fprintf(stderr, "ExtabEntryExtract: index table entry is invalid"); -+ break; -+ default: -+ fprintf(stderr, "ExtabEntryExtract: unknown error: %d", (int)res); -+ break; -+ } -+ continue; -+ } -+ -+ // Finally, work through the unwind instructions in |buf| and -+ // create CFI entries that Breakpad can use. This can also fail. -+ // First, add a new stack frame entry, into which ExtabEntryDecode -+ // will write the CFI entries. -+ if (!handler_->HasStackFrame(addr, next_addr - addr)) { -+ handler_->AddStackFrame(addr, next_addr - addr); -+ int ret = ExtabEntryDecode(buf, buf_used); -+ if (ret < 0) { -+ handler_->DeleteStackFrame(); -+ fprintf(stderr, "ExtabEntryDecode: failed with error code: %d", ret); -+ continue; -+ } -+ handler_->SubmitStackFrame(); -+ } -+ -+ } /* iterating over .exidx */ -+} -+ -+} // namespace arm_ex_reader -diff --git a/src/common/arm_ex_reader.h b/src/common/arm_ex_reader.h -new file mode 100644 -index 0000000..9b54e8a ---- /dev/null -+++ b/src/common/arm_ex_reader.h -@@ -0,0 +1,114 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright 2011 Linaro Limited -+ -+This file is part of libunwind. -+ -+Permission is hereby granted, free of charge, to any person obtaining -+a copy of this software and associated documentation files (the -+"Software"), to deal in the Software without restriction, including -+without limitation the rights to use, copy, modify, merge, publish, -+distribute, sublicense, and/or sell copies of the Software, and to -+permit persons to whom the Software is furnished to do so, subject to -+the following conditions: -+ -+The above copyright notice and this permission notice shall be -+included in all copies or substantial portions of the Software. -+ -+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+// Copyright (c) 2010 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. -+ -+ -+// Derived from libunwind, with extensive modifications. -+ -+#ifndef COMMON_ARM_EX_READER_H__ -+#define COMMON_ARM_EX_READER_H__ -+ -+#include "common/arm_ex_to_module.h" -+#include "common/memory_range.h" -+ -+namespace arm_ex_reader { -+ -+// This class is a reader for ARM unwind information -+// from .ARM.exidx and .ARM.extab sections. -+class ExceptionTableInfo { -+ public: -+ ExceptionTableInfo(const char* exidx, size_t exidx_size, -+ const char* extab, size_t extab_size, -+ uint32_t text_last_svma, -+ arm_ex_to_module::ARMExToModule* handler, -+ const char* mapping_addr, -+ uint32_t loading_addr) -+ : mr_exidx_(google_breakpad::MemoryRange(exidx, exidx_size)), -+ mr_extab_(google_breakpad::MemoryRange(extab, extab_size)), -+ text_last_svma_(text_last_svma), -+ handler_(handler), mapping_addr_(mapping_addr), -+ loading_addr_(loading_addr) { } -+ -+ ~ExceptionTableInfo() { } -+ -+ // Parses the entries in .ARM.exidx and possibly -+ // in .ARM.extab tables, reports what we find to -+ // arm_ex_to_module::ARMExToModule. -+ void Start(); -+ -+ private: -+ google_breakpad::MemoryRange mr_exidx_; -+ google_breakpad::MemoryRange mr_extab_; -+ uint32_t text_last_svma_; -+ arm_ex_to_module::ARMExToModule* handler_; -+ const char* mapping_addr_; -+ uint32_t loading_addr_; -+ -+ enum ExExtractResult { -+ ExSuccess, // success -+ ExInBufOverflow, // out-of-range while reading .exidx -+ ExOutBufOverflow, // output buffer is too small -+ ExCantUnwind, // this function is marked CANT_UNWIND -+ ExCantRepresent, // entry valid, but we can't represent it -+ ExInvalid // entry is invalid -+ }; -+ ExExtractResult -+ ExtabEntryExtract(const struct arm_ex_to_module::exidx_entry* entry, -+ uint8_t* buf, size_t buf_size, -+ size_t* buf_used); -+ -+ int ExtabEntryDecode(const uint8_t* buf, size_t buf_size); -+}; -+ -+} // namespace arm_ex_reader -+ -+#endif // COMMON_ARM_EX_READER_H__ -diff --git a/src/common/arm_ex_to_module.cc b/src/common/arm_ex_to_module.cc -new file mode 100644 -index 0000000..c326744 ---- /dev/null -+++ b/src/common/arm_ex_to_module.cc -@@ -0,0 +1,209 @@ -+ -+/* libunwind - a platform-independent unwind library -+ Copyright 2011 Linaro Limited -+ -+This file is part of libunwind. -+ -+Permission is hereby granted, free of charge, to any person obtaining -+a copy of this software and associated documentation files (the -+"Software"), to deal in the Software without restriction, including -+without limitation the rights to use, copy, modify, merge, publish, -+distribute, sublicense, and/or sell copies of the Software, and to -+permit persons to whom the Software is furnished to do so, subject to -+the following conditions: -+ -+The above copyright notice and this permission notice shall be -+included in all copies or substantial portions of the Software. -+ -+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+// Copyright (c) 2010 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. -+ -+ -+// Derived from libunwind, with extensive modifications. -+ -+#include "common/arm_ex_to_module.h" -+ -+#include -+#include -+ -+// For big-picture comments on how the EXIDX reader works, -+// see arm_ex_reader.cc. -+ -+#define ARM_EXBUF_START(x) (((x) >> 4) & 0x0f) -+#define ARM_EXBUF_COUNT(x) ((x) & 0x0f) -+#define ARM_EXBUF_END(x) (ARM_EXBUF_START(x) + ARM_EXBUF_COUNT(x)) -+ -+using google_breakpad::Module; -+ -+namespace arm_ex_to_module { -+ -+static const char* const regnames[] = { -+ "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", -+ "r8", "r9", "r10", "r11", "r12", "sp", "lr", "pc", -+ "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", -+ "fps", "cpsr" -+}; -+ -+// Translate command from extab_data to command for Module. -+int ARMExToModule::TranslateCmd(const struct extab_data* edata, -+ Module::StackFrameEntry* entry, string& vsp) { -+ int ret = 0; -+ switch (edata->cmd) { -+ case ARM_EXIDX_CMD_FINISH: -+ /* Copy LR to PC if there isn't currently a rule for PC in force. */ -+ if (entry->initial_rules.find("pc") -+ == entry->initial_rules.end()) { -+ if (entry->initial_rules.find("lr") -+ == entry->initial_rules.end()) { -+ entry->initial_rules["pc"] = "lr"; -+ } else { -+ entry->initial_rules["pc"] = entry->initial_rules["lr"]; -+ } -+ } -+ break; -+ case ARM_EXIDX_CMD_SUB_FROM_VSP: -+ { -+ char c[16]; -+ sprintf(c, " %d -", edata->data); -+ vsp += c; -+ } -+ break; -+ case ARM_EXIDX_CMD_ADD_TO_VSP: -+ { -+ char c[16]; -+ sprintf(c, " %d +", edata->data); -+ vsp += c; -+ } -+ break; -+ case ARM_EXIDX_CMD_REG_POP: -+ for (unsigned int i = 0; i < 16; i++) { -+ if (edata->data & (1 << i)) { -+ entry->initial_rules[regnames[i]] -+ = vsp + " ^"; -+ vsp += " 4 +"; -+ } -+ } -+ /* Set cfa in case the SP got popped. */ -+ if (edata->data & (1 << 13)) { -+ vsp = entry->initial_rules["sp"]; -+ } -+ break; -+ case ARM_EXIDX_CMD_REG_TO_SP: { -+ assert (edata->data < 16); -+ const char* const regname = regnames[edata->data]; -+ if (entry->initial_rules.find(regname) == entry->initial_rules.end()) { -+ entry->initial_rules["sp"] = regname; -+ } else { -+ entry->initial_rules["sp"] = entry->initial_rules[regname]; -+ } -+ vsp = entry->initial_rules["sp"]; -+ break; -+ } -+ case ARM_EXIDX_CMD_VFP_POP: -+ /* Don't recover VFP registers, but be sure to adjust the stack -+ pointer. */ -+ for (unsigned int i = ARM_EXBUF_START(edata->data); -+ i <= ARM_EXBUF_END(edata->data); i++) { -+ vsp += " 8 +"; -+ } -+ if (!(edata->data & ARM_EXIDX_VFP_FSTMD)) { -+ vsp += " 4 +"; -+ } -+ break; -+ case ARM_EXIDX_CMD_WREG_POP: -+ for (unsigned int i = ARM_EXBUF_START(edata->data); -+ i <= ARM_EXBUF_END(edata->data); i++) { -+ vsp += " 8 +"; -+ } -+ break; -+ case ARM_EXIDX_CMD_WCGR_POP: -+ // Pop wCGR registers under mask {wCGR3,2,1,0}, hence "i < 4" -+ for (unsigned int i = 0; i < 4; i++) { -+ if (edata->data & (1 << i)) { -+ vsp += " 4 +"; -+ } -+ } -+ break; -+ case ARM_EXIDX_CMD_REFUSED: -+ case ARM_EXIDX_CMD_RESERVED: -+ ret = -1; -+ break; -+ } -+ return ret; -+} -+ -+bool ARMExToModule::HasStackFrame(uintptr_t addr, size_t size) { -+ // Invariant: the range [addr,covered) is covered by existing stack -+ // frame entries. -+ uintptr_t covered = addr; -+ while (covered < addr + size) { -+ const Module::StackFrameEntry *old_entry = -+ module_->FindStackFrameEntryByAddress(covered); -+ if (!old_entry) { -+ return false; -+ } -+ covered = old_entry->address + old_entry->size; -+ } -+ return true; -+} -+ -+void ARMExToModule::AddStackFrame(uintptr_t addr, size_t size) { -+ stack_frame_entry_ = new Module::StackFrameEntry; -+ stack_frame_entry_->address = addr; -+ stack_frame_entry_->size = size; -+ stack_frame_entry_->initial_rules[".cfa"] = "sp"; -+ vsp_ = "sp"; -+} -+ -+int ARMExToModule::ImproveStackFrame(const struct extab_data* edata) { -+ return TranslateCmd(edata, stack_frame_entry_, vsp_) ; -+} -+ -+void ARMExToModule::DeleteStackFrame() { -+ delete stack_frame_entry_; -+} -+ -+void ARMExToModule::SubmitStackFrame() { -+ // return address always winds up in pc -+ stack_frame_entry_->initial_rules[".ra"] -+ = stack_frame_entry_->initial_rules["pc"]; -+ // the final value of vsp is the new value of sp -+ stack_frame_entry_->initial_rules["sp"] = vsp_; -+ module_->AddStackFrameEntry(stack_frame_entry_); -+} -+ -+} // namespace arm_ex_to_module -diff --git a/src/common/arm_ex_to_module.h b/src/common/arm_ex_to_module.h -new file mode 100644 -index 0000000..f413a16 ---- /dev/null -+++ b/src/common/arm_ex_to_module.h -@@ -0,0 +1,119 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright 2011 Linaro Limited -+ -+This file is part of libunwind. -+ -+Permission is hereby granted, free of charge, to any person obtaining -+a copy of this software and associated documentation files (the -+"Software"), to deal in the Software without restriction, including -+without limitation the rights to use, copy, modify, merge, publish, -+distribute, sublicense, and/or sell copies of the Software, and to -+permit persons to whom the Software is furnished to do so, subject to -+the following conditions: -+ -+The above copyright notice and this permission notice shall be -+included in all copies or substantial portions of the Software. -+ -+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+// Copyright (c) 2010 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. -+ -+ -+// Derived from libunwind, with extensive modifications. -+ -+#ifndef COMMON_ARM_EX_TO_MODULE__ -+#define COMMON_ARM_EX_TO_MODULE__ -+ -+#include "common/module.h" -+ -+#include -+ -+namespace arm_ex_to_module { -+ -+using google_breakpad::Module; -+ -+typedef enum extab_cmd { -+ ARM_EXIDX_CMD_FINISH, -+ ARM_EXIDX_CMD_SUB_FROM_VSP, -+ ARM_EXIDX_CMD_ADD_TO_VSP, -+ ARM_EXIDX_CMD_REG_POP, -+ ARM_EXIDX_CMD_REG_TO_SP, -+ ARM_EXIDX_CMD_VFP_POP, -+ ARM_EXIDX_CMD_WREG_POP, -+ ARM_EXIDX_CMD_WCGR_POP, -+ ARM_EXIDX_CMD_RESERVED, -+ ARM_EXIDX_CMD_REFUSED, -+} extab_cmd_t; -+ -+struct exidx_entry { -+ uint32_t addr; -+ uint32_t data; -+}; -+ -+struct extab_data { -+ extab_cmd_t cmd; -+ uint32_t data; -+}; -+ -+enum extab_cmd_flags { -+ ARM_EXIDX_VFP_SHIFT_16 = 1 << 16, -+ ARM_EXIDX_VFP_FSTMD = 1 << 17, // distinguishes FSTMxxD from FSTMxxX -+}; -+ -+// Receives information from arm_ex_reader::ExceptionTableInfo -+// and adds it to the Module object -+class ARMExToModule { -+ public: -+ ARMExToModule(Module* module) -+ : module_(module) { } -+ ~ARMExToModule() { } -+ bool HasStackFrame(uintptr_t addr, size_t size); -+ void AddStackFrame(uintptr_t addr, size_t size); -+ int ImproveStackFrame(const struct extab_data* edata); -+ void DeleteStackFrame(); -+ void SubmitStackFrame(); -+ private: -+ Module* module_; -+ Module::StackFrameEntry* stack_frame_entry_; -+ string vsp_; -+ int TranslateCmd(const struct extab_data* edata, -+ Module::StackFrameEntry* entry, -+ string& vsp); -+}; -+ -+} // namespace arm_ex_to_module -+ -+#endif // COMMON_ARM_EX_TO_MODULE__ -diff --git a/src/common/linux/dump_symbols.cc b/src/common/linux/dump_symbols.cc -index 1e96ca6..4222ce3 100644 ---- a/src/common/linux/dump_symbols.cc -+++ b/src/common/linux/dump_symbols.cc -@@ -52,6 +52,7 @@ - #include - #include - -+#include "common/arm_ex_reader.h" - #include "common/dwarf/bytereader-inl.h" - #include "common/dwarf/dwarf2diehandler.h" - #include "common/dwarf_cfi_to_module.h" -@@ -71,6 +72,11 @@ - #endif - #include "common/using_std_string.h" - -+#ifndef SHT_ARM_EXIDX -+// bionic and older glibc don't define this -+# define SHT_ARM_EXIDX (SHT_LOPROC + 1) -+#endif -+ - // This namespace contains helper functions. - namespace { - -@@ -373,6 +379,52 @@ bool LoadDwarfCFI(const string& dwarf_filename, - return true; - } - -+template -+bool LoadARMexidx(const typename ElfClass::Ehdr* elf_header, -+ const typename ElfClass::Shdr* exidx_section, -+ const typename ElfClass::Shdr* extab_section, -+ uint32_t loading_addr, -+ Module* module) { -+ // To do this properly we need to know: -+ // * the bounds of the .ARM.exidx section in the mapped image -+ // * the bounds of the .ARM.extab section in the mapped image -+ // * the vma of the last byte in the text section associated with the .exidx -+ // The first two are easy. The third is a bit tricky. If we can't -+ // figure out what it is, just pass in zero. -+ const char *exidx_img -+ = GetOffset(elf_header, exidx_section->sh_offset); -+ size_t exidx_size = exidx_section->sh_size; -+ const char *extab_img -+ = GetOffset(elf_header, extab_section->sh_offset); -+ size_t extab_size = extab_section->sh_size; -+ -+ // The sh_link field of the exidx section gives the section number -+ // for the associated text section. -+ uint32_t exidx_text_last_svma = 0; -+ int exidx_text_sno = exidx_section->sh_link; -+ typedef typename ElfClass::Shdr Shdr; -+ // |sections| points to the section header table -+ const Shdr* sections -+ = GetOffset(elf_header, elf_header->e_shoff); -+ const int num_sections = elf_header->e_shnum; -+ if (exidx_text_sno >= 0 && exidx_text_sno < num_sections) { -+ const Shdr* exidx_text_shdr = §ions[exidx_text_sno]; -+ if (exidx_text_shdr->sh_size > 0) { -+ exidx_text_last_svma -+ = exidx_text_shdr->sh_addr + exidx_text_shdr->sh_size - 1; -+ } -+ } -+ -+ arm_ex_to_module::ARMExToModule handler(module); -+ arm_ex_reader::ExceptionTableInfo -+ parser(exidx_img, exidx_size, extab_img, extab_size, exidx_text_last_svma, -+ &handler, -+ reinterpret_cast(elf_header), -+ loading_addr); -+ parser.Start(); -+ return true; -+} -+ - bool LoadELF(const string& obj_file, MmapWrapper* map_wrapper, - void** elf_header) { - int obj_fd = open(obj_file.c_str(), O_RDONLY); -@@ -756,6 +808,29 @@ bool LoadSymbols(const string& obj_file, - } - } - -+ // ARM has special unwind tables that can be used. -+ const Shdr* arm_exidx_section = -+ FindElfSectionByName(".ARM.exidx", SHT_ARM_EXIDX, -+ sections, names, names_end, -+ elf_header->e_shnum); -+ const Shdr* arm_extab_section = -+ FindElfSectionByName(".ARM.extab", SHT_PROGBITS, -+ sections, names, names_end, -+ elf_header->e_shnum); -+ // Load information from these sections even if there is -+ // .debug_info, because some functions (e.g., hand-written or -+ // script-generated assembly) could have exidx entries but no DWARF. -+ // (For functions with both, the DWARF info that has already been -+ // parsed will take precedence.) -+ if (arm_exidx_section && arm_extab_section && options.symbol_data != NO_CFI) { -+ info->LoadedSection(".ARM.exidx"); -+ info->LoadedSection(".ARM.extab"); -+ bool result = LoadARMexidx(elf_header, -+ arm_exidx_section, arm_extab_section, -+ loading_addr, module); -+ found_usable_info = found_usable_info || result; -+ } -+ - if (!found_debug_info_section) { - fprintf(stderr, "%s: file contains no debugging information" - " (no \".stab\" or \".debug_info\" sections)\n", -diff --git a/src/common/module.cc b/src/common/module.cc -index fa798f4..ca52f9f 100644 ---- a/src/common/module.cc -+++ b/src/common/module.cc -@@ -63,7 +63,7 @@ Module::~Module() { - it != functions_.end(); ++it) { - delete *it; - } -- for (vector::iterator it = stack_frame_entries_.begin(); -+ for (StackFrameEntrySet::iterator it = stack_frame_entries_.begin(); - it != stack_frame_entries_.end(); ++it) { - delete *it; - } -@@ -119,8 +119,14 @@ void Module::AddFunctions(vector::iterator begin, - AddFunction(*it); - } - --void Module::AddStackFrameEntry(StackFrameEntry *stack_frame_entry) { -- stack_frame_entries_.push_back(stack_frame_entry); -+void Module::AddStackFrameEntry(StackFrameEntry* stack_frame_entry) { -+ std::pair ret = -+ stack_frame_entries_.insert(stack_frame_entry); -+ if (!ret.second) { -+ // Free the duplicate that was not inserted because this Module -+ // now owns it. -+ delete stack_frame_entry; -+ } - } - - void Module::AddExtern(Extern *ext) { -@@ -180,8 +186,25 @@ void Module::GetFiles(vector *vec) { - vec->push_back(it->second); - } - --void Module::GetStackFrameEntries(vector *vec) const { -- *vec = stack_frame_entries_; -+void Module::GetStackFrameEntries(vector* vec) const { -+ vec->clear(); -+ vec->insert(vec->begin(), stack_frame_entries_.begin(), -+ stack_frame_entries_.end()); -+} -+ -+Module::StackFrameEntry* Module::FindStackFrameEntryByAddress(Address address) { -+ StackFrameEntry search; -+ search.address = address; -+ StackFrameEntrySet::iterator it = stack_frame_entries_.upper_bound(&search); -+ -+ if (it == stack_frame_entries_.begin()) -+ return NULL; -+ -+ it--; -+ if ((*it)->address <= address && address < (*it)->address + (*it)->size) -+ return *it; -+ -+ return NULL; - } - - void Module::AssignSourceIds() { -@@ -286,7 +309,7 @@ bool Module::Write(std::ostream &stream, SymbolData symbol_data) { - - if (symbol_data != NO_CFI) { - // Write out 'STACK CFI INIT' and 'STACK CFI' records. -- vector::const_iterator frame_it; -+ StackFrameEntrySet::const_iterator frame_it; - for (frame_it = stack_frame_entries_.begin(); - frame_it != stack_frame_entries_.end(); ++frame_it) { - StackFrameEntry *entry = *frame_it; -diff --git a/src/common/module.h b/src/common/module.h -index 65b5595..299bc38 100644 ---- a/src/common/module.h -+++ b/src/common/module.h -@@ -176,6 +176,13 @@ class Module { - } - }; - -+ struct StackFrameEntryCompare { -+ bool operator() (const StackFrameEntry* lhs, -+ const StackFrameEntry* rhs) const { -+ return lhs->address < rhs->address; -+ } -+ }; -+ - // Create a new module with the given name, operating system, - // architecture, and ID string. - Module(const string &name, const string &os, const string &architecture, -@@ -256,6 +263,10 @@ class Module { - // a more appropriate interface.) - void GetStackFrameEntries(vector *vec) const; - -+ // If this module has a StackFrameEntry whose address range covers -+ // ADDRESS, return it. Otherwise return NULL. -+ StackFrameEntry* FindStackFrameEntryByAddress(Address address); -+ - // Find those files in this module that are actually referred to by - // functions' line number data, and assign them source id numbers. - // Set the source id numbers for all other files --- unused by the -@@ -316,6 +327,9 @@ class Module { - // A set containing Extern structures, sorted by address. - typedef set ExternSet; - -+ // A set containing StackFrameEntry structures, sorted by address. -+ typedef set StackFrameEntrySet; -+ - // The module owns all the files and functions that have been added - // to it; destroying the module frees the Files and Functions these - // point to. -@@ -324,7 +338,7 @@ class Module { - - // The module owns all the call frame info entries that have been - // added to it. -- vector stack_frame_entries_; -+ StackFrameEntrySet stack_frame_entries_; - - // The module owns all the externs that have been added to it; - // destroying the module frees the Externs these point to. -diff --git a/src/common/module_unittest.cc b/src/common/module_unittest.cc -index 0b64327..bf72736 100644 ---- a/src/common/module_unittest.cc -+++ b/src/common/module_unittest.cc -@@ -326,11 +326,6 @@ TEST(Construct, AddFrames) { - m.Write(s, ALL_SYMBOL_DATA); - string contents = s.str(); - EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n" -- "STACK CFI INIT ddb5f41285aa7757 1486493370dc5073 \n" -- "STACK CFI INIT 8064f3af5e067e38 de2a5ee55509407" -- " .cfa: I think that I shall never see" -- " cannoli: a tree whose hungry mouth is prest" -- " stromboli: a poem lovely as a tree\n" - "STACK CFI INIT 5e8d0db0a7075c6c 1c7edb12a7aea229" - " .cfa: Whose woods are these\n" - "STACK CFI 36682fad3763ffff" -@@ -338,7 +333,12 @@ TEST(Construct, AddFrames) { - " stromboli: his house is in\n" - "STACK CFI 47ceb0f63c269d7f" - " calzone: the village though" -- " cannoli: he will not see me stopping here\n", -+ " cannoli: he will not see me stopping here\n" -+ "STACK CFI INIT 8064f3af5e067e38 de2a5ee55509407" -+ " .cfa: I think that I shall never see" -+ " cannoli: a tree whose hungry mouth is prest" -+ " stromboli: a poem lovely as a tree\n" -+ "STACK CFI INIT ddb5f41285aa7757 1486493370dc5073 \n", - contents.c_str()); - - // Check that GetStackFrameEntries works. -@@ -346,10 +346,18 @@ TEST(Construct, AddFrames) { - m.GetStackFrameEntries(&entries); - ASSERT_EQ(3U, entries.size()); - // Check first entry. -- EXPECT_EQ(0xddb5f41285aa7757ULL, entries[0]->address); -- EXPECT_EQ(0x1486493370dc5073ULL, entries[0]->size); -- ASSERT_EQ(0U, entries[0]->initial_rules.size()); -- ASSERT_EQ(0U, entries[0]->rule_changes.size()); -+ EXPECT_EQ(0x5e8d0db0a7075c6cULL, entries[0]->address); -+ EXPECT_EQ(0x1c7edb12a7aea229ULL, entries[0]->size); -+ Module::RuleMap entry1_initial; -+ entry1_initial[".cfa"] = "Whose woods are these"; -+ EXPECT_THAT(entries[0]->initial_rules, ContainerEq(entry1_initial)); -+ Module::RuleChangeMap entry1_changes; -+ entry1_changes[0x36682fad3763ffffULL][".cfa"] = "I think I know"; -+ entry1_changes[0x36682fad3763ffffULL]["stromboli"] = "his house is in"; -+ entry1_changes[0x47ceb0f63c269d7fULL]["calzone"] = "the village though"; -+ entry1_changes[0x47ceb0f63c269d7fULL]["cannoli"] = -+ "he will not see me stopping here"; -+ EXPECT_THAT(entries[0]->rule_changes, ContainerEq(entry1_changes)); - // Check second entry. - EXPECT_EQ(0x8064f3af5e067e38ULL, entries[1]->address); - EXPECT_EQ(0x0de2a5ee55509407ULL, entries[1]->size); -@@ -361,18 +369,10 @@ TEST(Construct, AddFrames) { - EXPECT_THAT(entries[1]->initial_rules, ContainerEq(entry2_initial)); - ASSERT_EQ(0U, entries[1]->rule_changes.size()); - // Check third entry. -- EXPECT_EQ(0x5e8d0db0a7075c6cULL, entries[2]->address); -- EXPECT_EQ(0x1c7edb12a7aea229ULL, entries[2]->size); -- Module::RuleMap entry3_initial; -- entry3_initial[".cfa"] = "Whose woods are these"; -- EXPECT_THAT(entries[2]->initial_rules, ContainerEq(entry3_initial)); -- Module::RuleChangeMap entry3_changes; -- entry3_changes[0x36682fad3763ffffULL][".cfa"] = "I think I know"; -- entry3_changes[0x36682fad3763ffffULL]["stromboli"] = "his house is in"; -- entry3_changes[0x47ceb0f63c269d7fULL]["calzone"] = "the village though"; -- entry3_changes[0x47ceb0f63c269d7fULL]["cannoli"] = -- "he will not see me stopping here"; -- EXPECT_THAT(entries[2]->rule_changes, ContainerEq(entry3_changes)); -+ EXPECT_EQ(0xddb5f41285aa7757ULL, entries[2]->address); -+ EXPECT_EQ(0x1486493370dc5073ULL, entries[2]->size); -+ ASSERT_EQ(0U, entries[2]->initial_rules.size()); -+ ASSERT_EQ(0U, entries[2]->rule_changes.size()); - } - - TEST(Construct, UniqueFiles) { -@@ -544,3 +544,62 @@ TEST(Construct, FunctionsAndThumbExternsWithSameAddress) { - "PUBLIC cc00 0 arm_func\n", - contents.c_str()); - } -+ -+TEST(Lookup, StackFrameEntries) { -+ Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID); -+ -+ // First STACK CFI entry, with no initial rules or deltas. -+ Module::StackFrameEntry *entry1 = new Module::StackFrameEntry(); -+ entry1->address = 0x2000; -+ entry1->size = 0x900; -+ m.AddStackFrameEntry(entry1); -+ -+ // Second STACK CFI entry, with initial rules but no deltas. -+ Module::StackFrameEntry *entry2 = new Module::StackFrameEntry(); -+ entry2->address = 0x3000; -+ entry2->size = 0x900; -+ entry2->initial_rules[".cfa"] = "I think that I shall never see"; -+ entry2->initial_rules["stromboli"] = "a poem lovely as a tree"; -+ entry2->initial_rules["cannoli"] = "a tree whose hungry mouth is prest"; -+ m.AddStackFrameEntry(entry2); -+ -+ // Third STACK CFI entry, with initial rules and deltas. -+ Module::StackFrameEntry *entry3 = new Module::StackFrameEntry(); -+ entry3->address = 0x1000; -+ entry3->size = 0x900; -+ entry3->initial_rules[".cfa"] = "Whose woods are these"; -+ entry3->rule_changes[0x47ceb0f63c269d7fULL]["calzone"] = -+ "the village though"; -+ entry3->rule_changes[0x47ceb0f63c269d7fULL]["cannoli"] = -+ "he will not see me stopping here"; -+ entry3->rule_changes[0x36682fad3763ffffULL]["stromboli"] = -+ "his house is in"; -+ entry3->rule_changes[0x36682fad3763ffffULL][".cfa"] = -+ "I think I know"; -+ m.AddStackFrameEntry(entry3); -+ -+ Module::StackFrameEntry* s = m.FindStackFrameEntryByAddress(0x1000); -+ EXPECT_EQ(entry3, s); -+ s = m.FindStackFrameEntryByAddress(0x18FF); -+ EXPECT_EQ(entry3, s); -+ -+ s = m.FindStackFrameEntryByAddress(0x1900); -+ EXPECT_EQ((Module::StackFrameEntry*)NULL, s); -+ s = m.FindStackFrameEntryByAddress(0x1A00); -+ EXPECT_EQ((Module::StackFrameEntry*)NULL, s); -+ -+ s = m.FindStackFrameEntryByAddress(0x2000); -+ EXPECT_EQ(entry1, s); -+ s = m.FindStackFrameEntryByAddress(0x28FF); -+ EXPECT_EQ(entry1, s); -+ -+ s = m.FindStackFrameEntryByAddress(0x3000); -+ EXPECT_EQ(entry2, s); -+ s = m.FindStackFrameEntryByAddress(0x38FF); -+ EXPECT_EQ(entry2, s); -+ -+ s = m.FindStackFrameEntryByAddress(0x3900); -+ EXPECT_EQ((Module::StackFrameEntry*)NULL, s); -+ s = m.FindStackFrameEntryByAddress(0x3A00); -+ EXPECT_EQ((Module::StackFrameEntry*)NULL, s); -+} diff --git a/toolkit/crashreporter/breakpad-patches/README b/toolkit/crashreporter/breakpad-patches/README deleted file mode 100644 index b3f23b255..000000000 --- a/toolkit/crashreporter/breakpad-patches/README +++ /dev/null @@ -1,4 +0,0 @@ -Do not land local patches to Breakpad without the approval of -Ted Mielczarek - -All local patches must be in the process of being upstreamed. \ No newline at end of file diff --git a/toolkit/crashreporter/breakpad-windows-libxul/moz.build b/toolkit/crashreporter/breakpad-windows-libxul/moz.build deleted file mode 100644 index 347ad36ae..000000000 --- a/toolkit/crashreporter/breakpad-windows-libxul/moz.build +++ /dev/null @@ -1,32 +0,0 @@ -# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -SOURCES += [ - '../google-breakpad/src/common/windows/http_upload.cc', -] - -Library('google_breakpad_libxul_s') - -FINAL_LIBRARY = 'xul' - -for var in ('UNICODE', 'UNICODE_', 'BREAKPAD_NO_TERMINATE_THREAD'): - DEFINES[var] = True - -LOCAL_INCLUDES += [ - '/toolkit/crashreporter/google-breakpad/src', -] - -include('/toolkit/crashreporter/google-breakpad/src/common/windows/objs.mozbuild') -include('/toolkit/crashreporter/google-breakpad/src/client/windows/handler/objs.mozbuild') -include('/toolkit/crashreporter/google-breakpad/src/client/windows/sender/objs.mozbuild') -include('/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/objs.mozbuild') - -SOURCES += objs_common -SOURCES += objs_crash_generation -SOURCES += objs_handler -SOURCES += objs_sender - -DISABLE_STL_WRAPPING = True diff --git a/toolkit/crashreporter/breakpad-windows-standalone/moz.build b/toolkit/crashreporter/breakpad-windows-standalone/moz.build deleted file mode 100644 index a732ff99f..000000000 --- a/toolkit/crashreporter/breakpad-windows-standalone/moz.build +++ /dev/null @@ -1,26 +0,0 @@ -# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -FINAL_LIBRARY = 'breakpadinjector' - -for var in ('UNICODE', 'UNICODE_', 'BREAKPAD_NO_TERMINATE_THREAD'): - DEFINES[var] = True - -LOCAL_INCLUDES += [ - '/toolkit/crashreporter/google-breakpad/src', -] - -include('/toolkit/crashreporter/google-breakpad/src/common/windows/objs.mozbuild') -include('/toolkit/crashreporter/google-breakpad/src/client/windows/handler/objs.mozbuild') -include('/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/objs.mozbuild') - -SOURCES += objs_common -SOURCES += objs_crash_generation -SOURCES += objs_handler - -USE_STATIC_LIBS = True - -DISABLE_STL_WRAPPING = True diff --git a/toolkit/crashreporter/client/Makefile.in b/toolkit/crashreporter/client/Makefile.in deleted file mode 100644 index 88be52dff..000000000 --- a/toolkit/crashreporter/client/Makefile.in +++ /dev/null @@ -1,20 +0,0 @@ -# vim:set ts=8 sw=8 sts=8 noet: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -ifeq ($(OS_ARCH),WINNT) -MOZ_WINCONSOLE = 0 -endif - -include $(topsrcdir)/config/rules.mk - -ifeq ($(OS_ARCH),Darwin) -libs:: - $(NSINSTALL) -D $(DIST)/bin/crashreporter.app - rsync -a -C --exclude '*.in' $(srcdir)/macbuild/Contents $(DIST)/bin/crashreporter.app - sed -e 's/%APP_NAME%/$(MOZ_APP_DISPLAYNAME)/' $(srcdir)/macbuild/Contents/Resources/English.lproj/InfoPlist.strings.in | \ - iconv -f UTF-8 -t UTF-16 > $(DIST)/bin/crashreporter.app/Contents/Resources/English.lproj/InfoPlist.strings - $(NSINSTALL) -D $(DIST)/bin/crashreporter.app/Contents/MacOS - $(NSINSTALL) $(DIST)/bin/crashreporter $(DIST)/bin/crashreporter.app/Contents/MacOS -endif diff --git a/toolkit/crashreporter/client/Throbber-small.avi b/toolkit/crashreporter/client/Throbber-small.avi deleted file mode 100644 index 640ea62c0..000000000 Binary files a/toolkit/crashreporter/client/Throbber-small.avi and /dev/null differ diff --git a/toolkit/crashreporter/client/crashreporter.cpp b/toolkit/crashreporter/client/crashreporter.cpp deleted file mode 100644 index 10aa65dd2..000000000 --- a/toolkit/crashreporter/client/crashreporter.cpp +++ /dev/null @@ -1,759 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "crashreporter.h" - -#ifdef _MSC_VER -// Disable exception handler warnings. -# pragma warning( disable : 4530 ) -#endif - -#include -#include -#include -#include -#include -#include - -using std::string; -using std::istream; -using std::ifstream; -using std::istringstream; -using std::ostringstream; -using std::ostream; -using std::ofstream; -using std::vector; -using std::auto_ptr; - -namespace CrashReporter { - -StringTable gStrings; -string gSettingsPath; -string gEventsPath; -int gArgc; -char** gArgv; - -enum SubmissionResult {Succeeded, Failed}; - -static auto_ptr gLogStream(nullptr); -static string gReporterDumpFile; -static string gExtraFile; -static string gMemoryFile; - -static const char kExtraDataExtension[] = ".extra"; -static const char kMemoryReportExtension[] = ".memory.json.gz"; - -void UIError(const string& message) -{ - string errorMessage; - if (!gStrings[ST_CRASHREPORTERERROR].empty()) { - char buf[2048]; - UI_SNPRINTF(buf, 2048, - gStrings[ST_CRASHREPORTERERROR].c_str(), - message.c_str()); - errorMessage = buf; - } else { - errorMessage = message; - } - - UIError_impl(errorMessage); -} - -static string Unescape(const string& str) -{ - string ret; - for (string::const_iterator iter = str.begin(); - iter != str.end(); - iter++) { - if (*iter == '\\') { - iter++; - if (*iter == '\\'){ - ret.push_back('\\'); - } else if (*iter == 'n') { - ret.push_back('\n'); - } else if (*iter == 't') { - ret.push_back('\t'); - } - } else { - ret.push_back(*iter); - } - } - - return ret; -} - -static string Escape(const string& str) -{ - string ret; - for (string::const_iterator iter = str.begin(); - iter != str.end(); - iter++) { - if (*iter == '\\') { - ret += "\\\\"; - } else if (*iter == '\n') { - ret += "\\n"; - } else if (*iter == '\t') { - ret += "\\t"; - } else { - ret.push_back(*iter); - } - } - - return ret; -} - -bool ReadStrings(istream& in, StringTable& strings, bool unescape) -{ - string currentSection; - while (!in.eof()) { - string line; - std::getline(in, line); - int sep = line.find('='); - if (sep >= 0) { - string key, value; - key = line.substr(0, sep); - value = line.substr(sep + 1); - if (unescape) - value = Unescape(value); - strings[key] = value; - } - } - - return true; -} - -bool ReadStringsFromFile(const string& path, - StringTable& strings, - bool unescape) -{ - ifstream* f = UIOpenRead(path); - bool success = false; - if (f->is_open()) { - success = ReadStrings(*f, strings, unescape); - f->close(); - } - - delete f; - return success; -} - -bool WriteStrings(ostream& out, - const string& header, - StringTable& strings, - bool escape) -{ - out << "[" << header << "]" << std::endl; - for (StringTable::iterator iter = strings.begin(); - iter != strings.end(); - iter++) { - out << iter->first << "="; - if (escape) - out << Escape(iter->second); - else - out << iter->second; - - out << std::endl; - } - - return true; -} - -bool WriteStringsToFile(const string& path, - const string& header, - StringTable& strings, - bool escape) -{ - ofstream* f = UIOpenWrite(path.c_str()); - bool success = false; - if (f->is_open()) { - success = WriteStrings(*f, header, strings, escape); - f->close(); - } - - delete f; - return success; -} - -static string Basename(const string& file) -{ - string::size_type slashIndex = file.rfind(UI_DIR_SEPARATOR); - if (slashIndex != string::npos) - return file.substr(slashIndex + 1); - else - return file; -} - -static string GetDumpLocalID() -{ - string localId = Basename(gReporterDumpFile); - string::size_type dot = localId.rfind('.'); - - if (dot == string::npos) - return ""; - - return localId.substr(0, dot); -} - -// This appends the StackTraces entry generated by the minidump analyzer to the -// main crash event so that it can be picked up by Firefox once it restarts -static void AppendStackTracesToEventFile(const string& aStackTraces) -{ - if (gEventsPath.empty()) { - // If there is no path for finding the crash event, skip this step. - return; - } - - string localId = GetDumpLocalID(); - string path = gEventsPath + UI_DIR_SEPARATOR + localId; - ofstream* f = UIOpenWrite(path.c_str(), true); - - if (f->is_open()) { - *f << "StackTraces=" << aStackTraces; - f->close(); - } - - delete f; -} - -static void WriteSubmissionEvent(SubmissionResult result, - const string& remoteId) -{ - if (gEventsPath.empty()) { - // If there is no path for writing the submission event, skip it. - return; - } - - string localId = GetDumpLocalID(); - string fpath = gEventsPath + UI_DIR_SEPARATOR + localId + "-submission"; - ofstream* f = UIOpenWrite(fpath.c_str(), false, true); - time_t tm; - time(&tm); - - if (f->is_open()) { - *f << "crash.submission.1\n"; - *f << tm << "\n"; - *f << localId << "\n"; - *f << (result == Succeeded ? "true" : "false") << "\n"; - *f << remoteId; - - f->close(); - } - - delete f; -} - -void LogMessage(const std::string& message) -{ - if (gLogStream.get()) { - char date[64]; - time_t tm; - time(&tm); - if (strftime(date, sizeof(date) - 1, "%c", localtime(&tm)) == 0) - date[0] = '\0'; - (*gLogStream) << "[" << date << "] " << message << std::endl; - } -} - -static void OpenLogFile() -{ - string logPath = gSettingsPath + UI_DIR_SEPARATOR + "submit.log"; - gLogStream.reset(UIOpenWrite(logPath.c_str(), true)); -} - -static bool ReadConfig() -{ - string iniPath; - if (!UIGetIniPath(iniPath)) - return false; - - if (!ReadStringsFromFile(iniPath, gStrings, true)) - return false; - - // See if we have a string override file, if so process it - char* overrideEnv = getenv("MOZ_CRASHREPORTER_STRINGS_OVERRIDE"); - if (overrideEnv && *overrideEnv && UIFileExists(overrideEnv)) - ReadStringsFromFile(overrideEnv, gStrings, true); - - return true; -} - -static string -GetAdditionalFilename(const string& dumpfile, const char* extension) -{ - string filename(dumpfile); - int dot = filename.rfind('.'); - if (dot < 0) - return ""; - - filename.replace(dot, filename.length() - dot, extension); - return filename; -} - -static bool MoveCrashData(const string& toDir, - string& dumpfile, - string& extrafile, - string& memoryfile) -{ - if (!UIEnsurePathExists(toDir)) { - UIError(gStrings[ST_ERROR_CREATEDUMPDIR]); - return false; - } - - string newDump = toDir + UI_DIR_SEPARATOR + Basename(dumpfile); - string newExtra = toDir + UI_DIR_SEPARATOR + Basename(extrafile); - string newMemory = toDir + UI_DIR_SEPARATOR + Basename(memoryfile); - - if (!UIMoveFile(dumpfile, newDump)) { - UIError(gStrings[ST_ERROR_DUMPFILEMOVE]); - return false; - } - - if (!UIMoveFile(extrafile, newExtra)) { - UIError(gStrings[ST_ERROR_EXTRAFILEMOVE]); - return false; - } - - if (!memoryfile.empty()) { - // Ignore errors from moving the memory file - if (!UIMoveFile(memoryfile, newMemory)) { - UIDeleteFile(memoryfile); - newMemory.erase(); - } - memoryfile = newMemory; - } - - dumpfile = newDump; - extrafile = newExtra; - - return true; -} - -static bool AddSubmittedReport(const string& serverResponse) -{ - StringTable responseItems; - istringstream in(serverResponse); - ReadStrings(in, responseItems, false); - - if (responseItems.find("StopSendingReportsFor") != responseItems.end()) { - // server wants to tell us to stop sending reports for a certain version - string reportPath = - gSettingsPath + UI_DIR_SEPARATOR + "EndOfLife" + - responseItems["StopSendingReportsFor"]; - - ofstream* reportFile = UIOpenWrite(reportPath); - if (reportFile->is_open()) { - // don't really care about the contents - *reportFile << 1 << "\n"; - reportFile->close(); - } - delete reportFile; - } - - if (responseItems.find("Discarded") != responseItems.end()) { - // server discarded this report... save it so the user can resubmit it - // manually - return false; - } - - if (responseItems.find("CrashID") == responseItems.end()) - return false; - - string submittedDir = - gSettingsPath + UI_DIR_SEPARATOR + "submitted"; - if (!UIEnsurePathExists(submittedDir)) { - return false; - } - - string path = submittedDir + UI_DIR_SEPARATOR + - responseItems["CrashID"] + ".txt"; - - ofstream* file = UIOpenWrite(path); - if (!file->is_open()) { - delete file; - return false; - } - - char buf[1024]; - UI_SNPRINTF(buf, 1024, - gStrings["CrashID"].c_str(), - responseItems["CrashID"].c_str()); - *file << buf << "\n"; - - if (responseItems.find("ViewURL") != responseItems.end()) { - UI_SNPRINTF(buf, 1024, - gStrings["CrashDetailsURL"].c_str(), - responseItems["ViewURL"].c_str()); - *file << buf << "\n"; - } - - file->close(); - delete file; - - WriteSubmissionEvent(Succeeded, responseItems["CrashID"]); - return true; -} - -void DeleteDump() -{ - const char* noDelete = getenv("MOZ_CRASHREPORTER_NO_DELETE_DUMP"); - if (!noDelete || *noDelete == '\0') { - if (!gReporterDumpFile.empty()) - UIDeleteFile(gReporterDumpFile); - if (!gExtraFile.empty()) - UIDeleteFile(gExtraFile); - if (!gMemoryFile.empty()) - UIDeleteFile(gMemoryFile); - } -} - -void SendCompleted(bool success, const string& serverResponse) -{ - if (success) { - if (AddSubmittedReport(serverResponse)) { - DeleteDump(); - } - else { - string directory = gReporterDumpFile; - int slashpos = directory.find_last_of("/\\"); - if (slashpos < 2) - return; - directory.resize(slashpos); - UIPruneSavedDumps(directory); - WriteSubmissionEvent(Failed, ""); - } - } else { - WriteSubmissionEvent(Failed, ""); - } -} - -bool ShouldEnableSending() -{ - srand(time(0)); - return ((rand() % 100) < MOZ_CRASHREPORTER_ENABLE_PERCENT); -} - -} // namespace CrashReporter - -using namespace CrashReporter; - -void RewriteStrings(StringTable& queryParameters) -{ - // rewrite some UI strings with the values from the query parameters - string product = queryParameters["ProductName"]; - string vendor = queryParameters["Vendor"]; - if (vendor.empty()) { - // Assume Mozilla if no vendor is specified - vendor = "Mozilla"; - } - - char buf[4096]; - UI_SNPRINTF(buf, sizeof(buf), - gStrings[ST_CRASHREPORTERVENDORTITLE].c_str(), - vendor.c_str()); - gStrings[ST_CRASHREPORTERTITLE] = buf; - - - string str = gStrings[ST_CRASHREPORTERPRODUCTERROR]; - // Only do the replacement here if the string has two - // format specifiers to start. Otherwise - // we assume it has the product name hardcoded. - string::size_type pos = str.find("%s"); - if (pos != string::npos) - pos = str.find("%s", pos+2); - if (pos != string::npos) { - // Leave a format specifier for UIError to fill in - UI_SNPRINTF(buf, sizeof(buf), - gStrings[ST_CRASHREPORTERPRODUCTERROR].c_str(), - product.c_str(), - "%s"); - gStrings[ST_CRASHREPORTERERROR] = buf; - } - else { - // product name is hardcoded - gStrings[ST_CRASHREPORTERERROR] = str; - } - - UI_SNPRINTF(buf, sizeof(buf), - gStrings[ST_CRASHREPORTERDESCRIPTION].c_str(), - product.c_str()); - gStrings[ST_CRASHREPORTERDESCRIPTION] = buf; - - UI_SNPRINTF(buf, sizeof(buf), - gStrings[ST_CHECKSUBMIT].c_str(), - vendor.c_str()); - gStrings[ST_CHECKSUBMIT] = buf; - - UI_SNPRINTF(buf, sizeof(buf), - gStrings[ST_CHECKEMAIL].c_str(), - vendor.c_str()); - gStrings[ST_CHECKEMAIL] = buf; - - UI_SNPRINTF(buf, sizeof(buf), - gStrings[ST_RESTART].c_str(), - product.c_str()); - gStrings[ST_RESTART] = buf; - - UI_SNPRINTF(buf, sizeof(buf), - gStrings[ST_QUIT].c_str(), - product.c_str()); - gStrings[ST_QUIT] = buf; - - UI_SNPRINTF(buf, sizeof(buf), - gStrings[ST_ERROR_ENDOFLIFE].c_str(), - product.c_str()); - gStrings[ST_ERROR_ENDOFLIFE] = buf; -} - -bool CheckEndOfLifed(string version) -{ - string reportPath = - gSettingsPath + UI_DIR_SEPARATOR + "EndOfLife" + version; - return UIFileExists(reportPath); -} - -#ifndef RELEASE_OR_BETA - -static string -GetMinidumpAnalyzerPath() -{ - string path = gArgv[0]; - size_t pos = path.rfind(UI_CRASH_REPORTER_FILENAME BIN_SUFFIX); - path.erase(pos); - path.append(UI_MINIDUMP_ANALYZER_FILENAME BIN_SUFFIX); - - return path; -} - -#endif - -int main(int argc, char** argv) -{ - gArgc = argc; - gArgv = argv; - - if (!ReadConfig()) { - UIError("Couldn't read configuration."); - return 0; - } - - if (!UIInit()) - return 0; - - if (argc > 1) { - gReporterDumpFile = argv[1]; - } - - if (gReporterDumpFile.empty()) { - // no dump file specified, run the default UI - UIShowDefaultUI(); - } else { -#ifndef RELEASE_OR_BETA - // start by running minidump analyzer, this is currently enabled only in - // nightly and aurora - UIRunMinidumpAnalyzer(GetMinidumpAnalyzerPath(), gReporterDumpFile); -#endif - - // go ahead with the crash reporter - gExtraFile = GetAdditionalFilename(gReporterDumpFile, kExtraDataExtension); - if (gExtraFile.empty()) { - UIError(gStrings[ST_ERROR_BADARGUMENTS]); - return 0; - } - - if (!UIFileExists(gExtraFile)) { - UIError(gStrings[ST_ERROR_EXTRAFILEEXISTS]); - return 0; - } - - gMemoryFile = GetAdditionalFilename(gReporterDumpFile, - kMemoryReportExtension); - if (!UIFileExists(gMemoryFile)) { - gMemoryFile.erase(); - } - - StringTable queryParameters; - if (!ReadStringsFromFile(gExtraFile, queryParameters, true)) { - UIError(gStrings[ST_ERROR_EXTRAFILEREAD]); - return 0; - } - - if (queryParameters.find("ProductName") == queryParameters.end()) { - UIError(gStrings[ST_ERROR_NOPRODUCTNAME]); - return 0; - } - - // There is enough information in the extra file to rewrite strings - // to be product specific - RewriteStrings(queryParameters); - - if (queryParameters.find("ServerURL") == queryParameters.end()) { - UIError(gStrings[ST_ERROR_NOSERVERURL]); - return 0; - } - - // Hopefully the settings path exists in the environment. Try that before - // asking the platform-specific code to guess. -#ifdef XP_WIN32 - static const wchar_t kDataDirKey[] = L"MOZ_CRASHREPORTER_DATA_DIRECTORY"; - const wchar_t *settingsPath = _wgetenv(kDataDirKey); - if (settingsPath && *settingsPath) { - gSettingsPath = WideToUTF8(settingsPath); - } -#else - static const char kDataDirKey[] = "MOZ_CRASHREPORTER_DATA_DIRECTORY"; - const char *settingsPath = getenv(kDataDirKey); - if (settingsPath && *settingsPath) { - gSettingsPath = settingsPath; - } -#endif - else { - string product = queryParameters["ProductName"]; - string vendor = queryParameters["Vendor"]; - if (!UIGetSettingsPath(vendor, product, gSettingsPath)) { - gSettingsPath.clear(); - } - } - - if (gSettingsPath.empty() || !UIEnsurePathExists(gSettingsPath)) { - UIError(gStrings[ST_ERROR_NOSETTINGSPATH]); - return 0; - } - - OpenLogFile(); - -#ifdef XP_WIN32 - static const wchar_t kEventsDirKey[] = L"MOZ_CRASHREPORTER_EVENTS_DIRECTORY"; - const wchar_t *eventsPath = _wgetenv(kEventsDirKey); - if (eventsPath && *eventsPath) { - gEventsPath = WideToUTF8(eventsPath); - } -#else - static const char kEventsDirKey[] = "MOZ_CRASHREPORTER_EVENTS_DIRECTORY"; - const char *eventsPath = getenv(kEventsDirKey); - if (eventsPath && *eventsPath) { - gEventsPath = eventsPath; - } -#endif - else { - gEventsPath.clear(); - } - - // Update the crash event with stacks if they are present - auto stackTracesItr = queryParameters.find("StackTraces"); - if (stackTracesItr != queryParameters.end()) { - AppendStackTracesToEventFile(stackTracesItr->second); - } - - if (!UIFileExists(gReporterDumpFile)) { - UIError(gStrings[ST_ERROR_DUMPFILEEXISTS]); - return 0; - } - - string pendingDir = gSettingsPath + UI_DIR_SEPARATOR + "pending"; - if (!MoveCrashData(pendingDir, gReporterDumpFile, gExtraFile, - gMemoryFile)) { - return 0; - } - - string sendURL = queryParameters["ServerURL"]; - // we don't need to actually send this - queryParameters.erase("ServerURL"); - - queryParameters["Throttleable"] = "1"; - - // re-set XUL_APP_FILE for xulrunner wrapped apps - const char *appfile = getenv("MOZ_CRASHREPORTER_RESTART_XUL_APP_FILE"); - if (appfile && *appfile) { - const char prefix[] = "XUL_APP_FILE="; - char *env = (char*) malloc(strlen(appfile) + strlen(prefix) + 1); - if (!env) { - UIError("Out of memory"); - return 0; - } - strcpy(env, prefix); - strcat(env, appfile); - putenv(env); - free(env); - } - - vector restartArgs; - - ostringstream paramName; - int i = 0; - paramName << "MOZ_CRASHREPORTER_RESTART_ARG_" << i++; - const char *param = getenv(paramName.str().c_str()); - while (param && *param) { - restartArgs.push_back(param); - - paramName.str(""); - paramName << "MOZ_CRASHREPORTER_RESTART_ARG_" << i++; - param = getenv(paramName.str().c_str()); - } - - // allow override of the server url via environment variable - //XXX: remove this in the far future when our robot - // masters force everyone to use XULRunner - char* urlEnv = getenv("MOZ_CRASHREPORTER_URL"); - if (urlEnv && *urlEnv) { - sendURL = urlEnv; - } - - // see if this version has been end-of-lifed - if (queryParameters.find("Version") != queryParameters.end() && - CheckEndOfLifed(queryParameters["Version"])) { - UIError(gStrings[ST_ERROR_ENDOFLIFE]); - DeleteDump(); - return 0; - } - - StringTable files; - files["upload_file_minidump"] = gReporterDumpFile; - if (!gMemoryFile.empty()) { - files["memory_report"] = gMemoryFile; - } - - if (!UIShowCrashUI(files, queryParameters, sendURL, restartArgs)) - DeleteDump(); - } - - UIShutdown(); - - return 0; -} - -#if defined(XP_WIN) && !defined(__GNUC__) -#include - -// We need WinMain in order to not be a console app. This function is unused -// if we are a console application. -int WINAPI wWinMain( HINSTANCE, HINSTANCE, LPWSTR args, int ) -{ - // Remove everything except close window from the context menu - { - HKEY hkApp; - RegCreateKeyExW(HKEY_CURRENT_USER, L"Software\\Classes\\Applications", 0, - nullptr, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, nullptr, - &hkApp, nullptr); - RegCloseKey(hkApp); - if (RegCreateKeyExW(HKEY_CURRENT_USER, - L"Software\\Classes\\Applications\\crashreporter.exe", - 0, nullptr, REG_OPTION_VOLATILE, KEY_SET_VALUE, - nullptr, &hkApp, nullptr) == ERROR_SUCCESS) { - RegSetValueExW(hkApp, L"IsHostApp", 0, REG_NONE, 0, 0); - RegSetValueExW(hkApp, L"NoOpenWith", 0, REG_NONE, 0, 0); - RegSetValueExW(hkApp, L"NoStartPage", 0, REG_NONE, 0, 0); - RegCloseKey(hkApp); - } - } - - char** argv = static_cast(malloc(__argc * sizeof(char*))); - for (int i = 0; i < __argc; i++) { - argv[i] = strdup(WideToUTF8(__wargv[i]).c_str()); - } - - // Do the real work. - return main(__argc, argv); -} -#endif diff --git a/toolkit/crashreporter/client/crashreporter.exe.manifest b/toolkit/crashreporter/client/crashreporter.exe.manifest deleted file mode 100644 index e6b2ceefb..000000000 --- a/toolkit/crashreporter/client/crashreporter.exe.manifest +++ /dev/null @@ -1,37 +0,0 @@ - - - -Crash Reporter - - - - - - - - - - - - - - - - - - - - - diff --git a/toolkit/crashreporter/client/crashreporter.h b/toolkit/crashreporter/client/crashreporter.h deleted file mode 100644 index 8c5ca3613..000000000 --- a/toolkit/crashreporter/client/crashreporter.h +++ /dev/null @@ -1,158 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef CRASHREPORTER_H__ -#define CRASHREPORTER_H__ - -#ifdef _MSC_VER -# pragma warning( push ) -// Disable exception handler warnings. -# pragma warning( disable : 4530 ) -#endif - -#include -#include -#include -#include -#include -#include -#include - -#define MAX_COMMENT_LENGTH 500 - -#if defined(XP_WIN32) - -#include - -#define UI_SNPRINTF _snprintf -#define UI_DIR_SEPARATOR "\\" - -std::string WideToUTF8(const std::wstring& wide, bool* success = 0); - -#else - -#define UI_SNPRINTF snprintf -#define UI_DIR_SEPARATOR "/" - -#endif - -#define UI_CRASH_REPORTER_FILENAME "crashreporter" -#define UI_MINIDUMP_ANALYZER_FILENAME "minidump-analyzer" - -typedef std::map StringTable; - -#define ST_CRASHREPORTERTITLE "CrashReporterTitle" -#define ST_CRASHREPORTERVENDORTITLE "CrashReporterVendorTitle" -#define ST_CRASHREPORTERERROR "CrashReporterErrorText" -#define ST_CRASHREPORTERPRODUCTERROR "CrashReporterProductErrorText2" -#define ST_CRASHREPORTERHEADER "CrashReporterSorry" -#define ST_CRASHREPORTERDESCRIPTION "CrashReporterDescriptionText2" -#define ST_CRASHREPORTERDEFAULT "CrashReporterDefault" -#define ST_VIEWREPORT "Details" -#define ST_VIEWREPORTTITLE "ViewReportTitle" -#define ST_COMMENTGRAYTEXT "CommentGrayText" -#define ST_EXTRAREPORTINFO "ExtraReportInfo" -#define ST_CHECKSUBMIT "CheckSendReport" -#define ST_CHECKURL "CheckIncludeURL" -#define ST_CHECKEMAIL "CheckAllowEmail" -#define ST_EMAILGRAYTEXT "EmailGrayText" -#define ST_REPORTPRESUBMIT "ReportPreSubmit2" -#define ST_REPORTDURINGSUBMIT "ReportDuringSubmit2" -#define ST_REPORTSUBMITSUCCESS "ReportSubmitSuccess" -#define ST_SUBMITFAILED "ReportSubmitFailed" -#define ST_QUIT "Quit2" -#define ST_RESTART "Restart" -#define ST_OK "Ok" -#define ST_CLOSE "Close" - -#define ST_ERROR_BADARGUMENTS "ErrorBadArguments" -#define ST_ERROR_EXTRAFILEEXISTS "ErrorExtraFileExists" -#define ST_ERROR_EXTRAFILEREAD "ErrorExtraFileRead" -#define ST_ERROR_EXTRAFILEMOVE "ErrorExtraFileMove" -#define ST_ERROR_DUMPFILEEXISTS "ErrorDumpFileExists" -#define ST_ERROR_DUMPFILEMOVE "ErrorDumpFileMove" -#define ST_ERROR_NOPRODUCTNAME "ErrorNoProductName" -#define ST_ERROR_NOSERVERURL "ErrorNoServerURL" -#define ST_ERROR_NOSETTINGSPATH "ErrorNoSettingsPath" -#define ST_ERROR_CREATEDUMPDIR "ErrorCreateDumpDir" -#define ST_ERROR_ENDOFLIFE "ErrorEndOfLife" - -//============================================================================= -// implemented in crashreporter.cpp -//============================================================================= - -namespace CrashReporter { - extern StringTable gStrings; - extern std::string gSettingsPath; - extern std::string gEventsPath; - extern int gArgc; - extern char** gArgv; - - void UIError(const std::string& message); - - // The UI finished sending the report - void SendCompleted(bool success, const std::string& serverResponse); - - bool ReadStrings(std::istream& in, - StringTable& strings, - bool unescape); - bool ReadStringsFromFile(const std::string& path, - StringTable& strings, - bool unescape); - bool WriteStrings(std::ostream& out, - const std::string& header, - StringTable& strings, - bool escape); - bool WriteStringsToFile(const std::string& path, - const std::string& header, - StringTable& strings, - bool escape); - void LogMessage(const std::string& message); - void DeleteDump(); - bool ShouldEnableSending(); - - static const unsigned int kSaveCount = 10; -} - -//============================================================================= -// implemented in the platform-specific files -//============================================================================= - -bool UIInit(); -void UIShutdown(); - -// Run the UI for when the app was launched without a dump file -void UIShowDefaultUI(); - -// Run the UI for when the app was launched with a dump file -// Return true if the user sent (or tried to send) the crash report, -// false if they chose not to, and it should be deleted. -bool UIShowCrashUI(const StringTable& files, - const StringTable& queryParameters, - const std::string& sendURL, - const std::vector& restartArgs); - -void UIError_impl(const std::string& message); - -bool UIGetIniPath(std::string& path); -bool UIGetSettingsPath(const std::string& vendor, - const std::string& product, - std::string& settingsPath); -bool UIEnsurePathExists(const std::string& path); -bool UIFileExists(const std::string& path); -bool UIMoveFile(const std::string& oldfile, const std::string& newfile); -bool UIDeleteFile(const std::string& oldfile); -std::ifstream* UIOpenRead(const std::string& filename); -std::ofstream* UIOpenWrite(const std::string& filename, - bool append=false, - bool binary=false); -void UIPruneSavedDumps(const std::string& directory); -void UIRunMinidumpAnalyzer(const std::string& exename, - const std::string& filename); - -#ifdef _MSC_VER -# pragma warning( pop ) -#endif - -#endif diff --git a/toolkit/crashreporter/client/crashreporter.ico b/toolkit/crashreporter/client/crashreporter.ico deleted file mode 100644 index 29ac3c618..000000000 Binary files a/toolkit/crashreporter/client/crashreporter.ico and /dev/null differ diff --git a/toolkit/crashreporter/client/crashreporter.rc b/toolkit/crashreporter/client/crashreporter.rc deleted file mode 100755 index 0ccd0757f..000000000 --- a/toolkit/crashreporter/client/crashreporter.rc +++ /dev/null @@ -1,148 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -// Microsoft Visual C++ generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "winresrc.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif //_WIN32 - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""winresrc.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - -1 24 "crashreporter.exe.manifest" - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_MAINICON ICON "crashreporter.ico" - -///////////////////////////////////////////////////////////////////////////// -// -// AVI -// - -IDR_THROBBER AVI "Throbber-small.avi" - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_SENDDIALOG DIALOGEX 0, 0, 241, 187 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_APPWINDOW -CAPTION "Sending Crash Report..." -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - CONTROL "",IDC_DESCRIPTIONTEXT,"RICHEDIT50W",ES_MULTILINE | ES_READONLY,8,7,226,12,WS_EX_TRANSPARENT - CONTROL "tell mozilla about this crash so they can fix it",IDC_SUBMITREPORTCHECK, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,25,222,10 - CHECKBOX "details...",IDC_VIEWREPORTBUTTON,24,40,54,14,BS_PUSHLIKE - EDITTEXT IDC_COMMENTTEXT,24,59,210,43,ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL - CONTROL "include the address of the page i was on",IDC_INCLUDEURLCHECK, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,24,107,210,10 - CONTROL "tell mozilla to email me with more information",IDC_EMAILMECHECK, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,24,120,210,10 - EDITTEXT IDC_EMAILTEXT,36,133,198,14,ES_AUTOHSCROLL - CONTROL "",IDC_THROBBER,"SysAnimate32",ACS_TRANSPARENT | NOT WS_VISIBLE | WS_TABSTOP,4,152,16,16 - LTEXT "your crash report will be submitted when you restart",IDC_PROGRESSTEXT,24,152,210,10,SS_NOPREFIX - DEFPUSHBUTTON "restart firefox",IDC_RESTARTBUTTON,84,166,68,14 - PUSHBUTTON "quit without sending",IDC_CLOSEBUTTON,157,166,77,14 -END - -IDD_VIEWREPORTDIALOG DIALOGEX 0, 0, 208, 126 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION -CAPTION "view report" -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - CONTROL "",IDC_VIEWREPORTTEXT,"RICHEDIT50W",ES_MULTILINE | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_TABSTOP,7,7,194,92 - DEFPUSHBUTTON "OK",IDOK,151,105,50,14 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_SENDDIALOG, DIALOG - BEGIN - LEFTMARGIN, 8 - RIGHTMARGIN, 234 - TOPMARGIN, 7 - BOTTOMMARGIN, 180 - END - - IDD_VIEWREPORTDIALOG, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 201 - TOPMARGIN, 7 - BOTTOMMARGIN, 119 - END -END -#endif // APSTUDIO_INVOKED - -#endif // English (U.S.) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/toolkit/crashreporter/client/crashreporter_gtk_common.cpp b/toolkit/crashreporter/client/crashreporter_gtk_common.cpp deleted file mode 100644 index 395a339bf..000000000 --- a/toolkit/crashreporter/client/crashreporter_gtk_common.cpp +++ /dev/null @@ -1,453 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "crashreporter.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "common/linux/http_upload.h" -#include "crashreporter.h" -#include "crashreporter_gtk_common.h" - -#ifndef GDK_KEY_Escape -#define GDK_KEY_Escape GDK_Escape -#endif - -using std::string; -using std::vector; - -using namespace CrashReporter; - -GtkWidget* gWindow = 0; -GtkWidget* gSubmitReportCheck = 0; -GtkWidget* gIncludeURLCheck = 0; -GtkWidget* gThrobber = 0; -GtkWidget* gProgressLabel = 0; -GtkWidget* gCloseButton = 0; -GtkWidget* gRestartButton = 0; - -bool gInitialized = false; -bool gDidTrySend = false; -StringTable gFiles; -StringTable gQueryParameters; -string gHttpProxy; -string gAuth; -string gCACertificateFile; -string gSendURL; -string gURLParameter; -vector gRestartArgs; -GThread* gSendThreadID; - -// From crashreporter_linux.cpp -void SaveSettings(); -void SendReport(); -void TryInitGnome(); -void UpdateSubmit(); - -static bool RestartApplication() -{ - char** argv = reinterpret_cast( - malloc(sizeof(char*) * (gRestartArgs.size() + 1))); - - if (!argv) return false; - - unsigned int i; - for (i = 0; i < gRestartArgs.size(); i++) { - argv[i] = (char*)gRestartArgs[i].c_str(); - } - argv[i] = 0; - - pid_t pid = fork(); - if (pid == -1) - return false; - else if (pid == 0) { - (void)execv(argv[0], argv); - _exit(1); - } - - free(argv); - - return true; -} - -// Quit the app, used as a timeout callback -static gboolean CloseApp(gpointer data) -{ - gtk_main_quit(); - g_thread_join(gSendThreadID); - return FALSE; -} - -static gboolean ReportCompleted(gpointer success) -{ - gtk_widget_hide(gThrobber); - string str = success ? gStrings[ST_REPORTSUBMITSUCCESS] - : gStrings[ST_SUBMITFAILED]; - gtk_label_set_text(GTK_LABEL(gProgressLabel), str.c_str()); - g_timeout_add(5000, CloseApp, 0); - return FALSE; -} - -#ifdef MOZ_ENABLE_GCONF -#define HTTP_PROXY_DIR "/system/http_proxy" - -void LoadProxyinfo() -{ - class GConfClient; - typedef GConfClient * (*_gconf_default_fn)(); - typedef gboolean (*_gconf_bool_fn)(GConfClient *, const gchar *, GError **); - typedef gint (*_gconf_int_fn)(GConfClient *, const gchar *, GError **); - typedef gchar * (*_gconf_string_fn)(GConfClient *, const gchar *, GError **); - - if (getenv ("http_proxy")) - return; // libcurl can use the value from the environment - - static void* gconfLib = dlopen("libgconf-2.so.4", RTLD_LAZY); - if (!gconfLib) - return; - - _gconf_default_fn gconf_client_get_default = - (_gconf_default_fn)dlsym(gconfLib, "gconf_client_get_default"); - _gconf_bool_fn gconf_client_get_bool = - (_gconf_bool_fn)dlsym(gconfLib, "gconf_client_get_bool"); - _gconf_int_fn gconf_client_get_int = - (_gconf_int_fn)dlsym(gconfLib, "gconf_client_get_int"); - _gconf_string_fn gconf_client_get_string = - (_gconf_string_fn)dlsym(gconfLib, "gconf_client_get_string"); - - if(!(gconf_client_get_default && - gconf_client_get_bool && - gconf_client_get_int && - gconf_client_get_string)) { - dlclose(gconfLib); - return; - } - - GConfClient *conf = gconf_client_get_default(); - - if (gconf_client_get_bool(conf, HTTP_PROXY_DIR "/use_http_proxy", nullptr)) { - gint port; - gchar *host = nullptr, *httpproxy = nullptr; - - host = gconf_client_get_string(conf, HTTP_PROXY_DIR "/host", nullptr); - port = gconf_client_get_int(conf, HTTP_PROXY_DIR "/port", nullptr); - - if (port && host && *host != '\0') { - httpproxy = g_strdup_printf("http://%s:%d/", host, port); - gHttpProxy = httpproxy; - } - - g_free(host); - g_free(httpproxy); - - if (gconf_client_get_bool(conf, HTTP_PROXY_DIR "/use_authentication", - nullptr)) { - gchar *user, *password, *auth = nullptr; - - user = gconf_client_get_string(conf, - HTTP_PROXY_DIR "/authentication_user", - nullptr); - password = gconf_client_get_string(conf, - HTTP_PROXY_DIR - "/authentication_password", - nullptr); - - if (user && password) { - auth = g_strdup_printf("%s:%s", user, password); - gAuth = auth; - } - - g_free(user); - g_free(password); - g_free(auth); - } - } - - g_object_unref(conf); - - // Don't dlclose gconfLib as libORBit-2 uses atexit(). -} -#endif - -gpointer SendThread(gpointer args) -{ - string response, error; - long response_code; - - bool success = google_breakpad::HTTPUpload::SendRequest - (gSendURL, - gQueryParameters, - gFiles, - gHttpProxy, gAuth, - gCACertificateFile, - &response, - &response_code, - &error); - if (success) { - LogMessage("Crash report submitted successfully"); - } - else { - LogMessage("Crash report submission failed: " + error); - } - - SendCompleted(success, response); - // Apparently glib is threadsafe, and will schedule this - // on the main thread, see: - // http://library.gnome.org/devel/gtk-faq/stable/x499.html - g_idle_add(ReportCompleted, (gpointer)success); - - return nullptr; -} - -gboolean WindowDeleted(GtkWidget* window, - GdkEvent* event, - gpointer userData) -{ - SaveSettings(); - gtk_main_quit(); - return TRUE; -} - -gboolean check_escape(GtkWidget* window, - GdkEventKey* event, - gpointer userData) -{ - if (event->keyval == GDK_KEY_Escape) { - gtk_main_quit(); - return TRUE; - } - return FALSE; -} - -static void MaybeSubmitReport() -{ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gSubmitReportCheck))) { - gDidTrySend = true; - SendReport(); - } else { - gtk_main_quit(); - } -} - -void CloseClicked(GtkButton* button, - gpointer userData) -{ - SaveSettings(); - MaybeSubmitReport(); -} - -void RestartClicked(GtkButton* button, - gpointer userData) -{ - SaveSettings(); - RestartApplication(); - MaybeSubmitReport(); -} - -static void UpdateURL() -{ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gIncludeURLCheck))) { - gQueryParameters["URL"] = gURLParameter; - } else { - gQueryParameters.erase("URL"); - } -} - -void SubmitReportChecked(GtkButton* sender, gpointer userData) -{ - UpdateSubmit(); -} - -void IncludeURLClicked(GtkButton* sender, gpointer userData) -{ - UpdateURL(); -} - -/* === Crashreporter UI Functions === */ - -bool UIInit() -{ - // breakpad probably left us with blocked signals, unblock them here - sigset_t signals, old; - sigfillset(&signals); - sigprocmask(SIG_UNBLOCK, &signals, &old); - - // tell glib we're going to use threads - g_thread_init(nullptr); - - if (gtk_init_check(&gArgc, &gArgv)) { - gInitialized = true; - - if (gStrings.find("isRTL") != gStrings.end() && - gStrings["isRTL"] == "yes") - gtk_widget_set_default_direction(GTK_TEXT_DIR_RTL); - - return true; - } - - return false; -} - -void UIShowDefaultUI() -{ - GtkWidget* errorDialog = - gtk_message_dialog_new(nullptr, GTK_DIALOG_MODAL, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_CLOSE, - "%s", gStrings[ST_CRASHREPORTERDEFAULT].c_str()); - - gtk_window_set_title(GTK_WINDOW(errorDialog), - gStrings[ST_CRASHREPORTERTITLE].c_str()); - gtk_dialog_run(GTK_DIALOG(errorDialog)); -} - -void UIError_impl(const string& message) -{ - if (!gInitialized) { - // Didn't initialize, this is the best we can do - printf("Error: %s\n", message.c_str()); - return; - } - - GtkWidget* errorDialog = - gtk_message_dialog_new(nullptr, GTK_DIALOG_MODAL, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_CLOSE, - "%s", message.c_str()); - - gtk_window_set_title(GTK_WINDOW(errorDialog), - gStrings[ST_CRASHREPORTERTITLE].c_str()); - gtk_dialog_run(GTK_DIALOG(errorDialog)); -} - -bool UIGetIniPath(string& path) -{ - path = gArgv[0]; - path.append(".ini"); - - return true; -} - -/* - * Settings are stored in ~/.vendor/product, or - * ~/.product if vendor is empty. - */ -bool UIGetSettingsPath(const string& vendor, - const string& product, - string& settingsPath) -{ - char* home = getenv("HOME"); - - if (!home) - return false; - - settingsPath = home; - settingsPath += "/."; - if (!vendor.empty()) { - string lc_vendor; - std::transform(vendor.begin(), vendor.end(), back_inserter(lc_vendor), - (int(*)(int)) std::tolower); - settingsPath += lc_vendor + "/"; - } - string lc_product; - std::transform(product.begin(), product.end(), back_inserter(lc_product), - (int(*)(int)) std::tolower); - settingsPath += lc_product + "/Crash Reports"; - return true; -} - -bool UIEnsurePathExists(const string& path) -{ - int ret = mkdir(path.c_str(), S_IRWXU); - int e = errno; - if (ret == -1 && e != EEXIST) - return false; - - return true; -} - -bool UIFileExists(const string& path) -{ - struct stat sb; - int ret = stat(path.c_str(), &sb); - if (ret == -1 || !(sb.st_mode & S_IFREG)) - return false; - - return true; -} - -bool UIMoveFile(const string& file, const string& newfile) -{ - if (!rename(file.c_str(), newfile.c_str())) - return true; - if (errno != EXDEV) - return false; - - // use system /bin/mv instead, time to fork - pid_t pID = vfork(); - if (pID < 0) { - // Failed to fork - return false; - } - if (pID == 0) { - char* const args[4] = { - const_cast("mv"), - strdup(file.c_str()), - strdup(newfile.c_str()), - 0 - }; - if (args[1] && args[2]) - execve("/bin/mv", args, 0); - free(args[1]); - free(args[2]); - exit(-1); - } - int status; - waitpid(pID, &status, 0); - return UIFileExists(newfile); -} - -bool UIDeleteFile(const string& file) -{ - return (unlink(file.c_str()) != -1); -} - -std::ifstream* UIOpenRead(const string& filename) -{ - return new std::ifstream(filename.c_str(), std::ios::in); -} - -std::ofstream* UIOpenWrite(const string& filename, - bool append, // append=false - bool binary) // binary=false -{ - std::ios_base::openmode mode = std::ios::out; - - if (append) { - mode = mode | std::ios::app; - } - - if (binary) { - mode = mode | std::ios::binary; - } - - return new std::ofstream(filename.c_str(), mode); -} diff --git a/toolkit/crashreporter/client/crashreporter_gtk_common.h b/toolkit/crashreporter/client/crashreporter_gtk_common.h deleted file mode 100644 index 3a6350c5b..000000000 --- a/toolkit/crashreporter/client/crashreporter_gtk_common.h +++ /dev/null @@ -1,50 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef CRASHREPORTER_GTK_COMMON_H__ -#define CRASHREPORTER_GTK_COMMON_H__ - -#include -#include - -#include -#include - -const char kIniFile[] = "crashreporter.ini"; - -extern GtkWidget* gWindow; -extern GtkWidget* gSubmitReportCheck; -extern GtkWidget* gIncludeURLCheck; -extern GtkWidget* gThrobber; -extern GtkWidget* gProgressLabel; -extern GtkWidget* gCloseButton; -extern GtkWidget* gRestartButton; - -extern std::vector gRestartArgs; -extern GThread* gSendThreadID; - -extern bool gInitialized; -extern bool gDidTrySend; -extern StringTable gFiles; -extern StringTable gQueryParameters; -extern std::string gHttpProxy; -extern std::string gAuth; -extern std::string gCACertificateFile; -extern std::string gSendURL; -extern std::string gURLParameter; - -void LoadProxyinfo(); -gpointer SendThread(gpointer args); -gboolean WindowDeleted(GtkWidget* window, - GdkEvent* event, - gpointer userData); -gboolean check_escape(GtkWidget* window, GdkEventKey* event, gpointer data); -void SubmitReportChecked(GtkButton* sender, gpointer userData); -void IncludeURLClicked(GtkButton* sender, gpointer userData); -void CloseClicked(GtkButton* button, - gpointer userData); -void RestartClicked(GtkButton* button, - gpointer userData); - -#endif // CRASHREPORTER_GTK_COMMON_H__ diff --git a/toolkit/crashreporter/client/crashreporter_linux.cpp b/toolkit/crashreporter/client/crashreporter_linux.cpp deleted file mode 100644 index 6e7ccce40..000000000 --- a/toolkit/crashreporter/client/crashreporter_linux.cpp +++ /dev/null @@ -1,576 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include -#include -#include -#include -#include - -#include - -#include "crashreporter.h" -#include "crashreporter_gtk_common.h" - -#define LABEL_MAX_CHAR_WIDTH 48 - -using std::string; -using std::vector; - -using namespace CrashReporter; - -static GtkWidget* gViewReportButton = 0; -static GtkWidget* gCommentTextLabel = 0; -static GtkWidget* gCommentText = 0; -static GtkWidget* gEmailMeCheck = 0; -static GtkWidget* gEmailEntryLabel = 0; -static GtkWidget* gEmailEntry = 0; - -static bool gEmailFieldHint = true; -static bool gCommentFieldHint = true; - -// handle from dlopen'ing libgnome -static void* gnomeLib = nullptr; -// handle from dlopen'ing libgnomeui -static void* gnomeuiLib = nullptr; - -static void LoadSettings() -{ - /* - * NOTE! This code needs to stay in sync with the preference checking - * code in in nsExceptionHandler.cpp. - */ - - StringTable settings; - if (ReadStringsFromFile(gSettingsPath + "/" + kIniFile, settings, true)) { - if (settings.find("Email") != settings.end()) { - gtk_entry_set_text(GTK_ENTRY(gEmailEntry), settings["Email"].c_str()); - gEmailFieldHint = false; - } - if (settings.find("EmailMe") != settings.end()) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gEmailMeCheck), - settings["EmailMe"][0] != '0'); - } - if (settings.find("IncludeURL") != settings.end() && - gIncludeURLCheck != 0) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gIncludeURLCheck), - settings["IncludeURL"][0] != '0'); - } - bool enabled; - if (settings.find("SubmitReport") != settings.end()) - enabled = settings["SubmitReport"][0] != '0'; - else - enabled = ShouldEnableSending(); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gSubmitReportCheck), - enabled); - } -} - -void SaveSettings() -{ - /* - * NOTE! This code needs to stay in sync with the preference setting - * code in in nsExceptionHandler.cpp. - */ - - StringTable settings; - - ReadStringsFromFile(gSettingsPath + "/" + kIniFile, settings, true); - if (!gEmailFieldHint) - settings["Email"] = gtk_entry_get_text(GTK_ENTRY(gEmailEntry)); - else - settings.erase("Email"); - - settings["EmailMe"] = - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gEmailMeCheck)) ? "1" : "0"; - if (gIncludeURLCheck != 0) - settings["IncludeURL"] = - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gIncludeURLCheck)) - ? "1" : "0"; - settings["SubmitReport"] = - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gSubmitReportCheck)) - ? "1" : "0"; - - WriteStringsToFile(gSettingsPath + "/" + kIniFile, - "Crash Reporter", settings, true); -} - -void SendReport() -{ - // disable all our gui controls, show the throbber + change the progress text - gtk_widget_set_sensitive(gSubmitReportCheck, FALSE); - gtk_widget_set_sensitive(gViewReportButton, FALSE); - gtk_widget_set_sensitive(gCommentText, FALSE); - if (gIncludeURLCheck) - gtk_widget_set_sensitive(gIncludeURLCheck, FALSE); - gtk_widget_set_sensitive(gEmailMeCheck, FALSE); - gtk_widget_set_sensitive(gEmailEntry, FALSE); - gtk_widget_set_sensitive(gCloseButton, FALSE); - if (gRestartButton) - gtk_widget_set_sensitive(gRestartButton, FALSE); - gtk_widget_show_all(gThrobber); - gtk_label_set_text(GTK_LABEL(gProgressLabel), - gStrings[ST_REPORTDURINGSUBMIT].c_str()); - -#ifdef MOZ_ENABLE_GCONF - LoadProxyinfo(); -#endif - - // and spawn a thread to do the sending - GError* err; - gSendThreadID = g_thread_create(SendThread, nullptr, TRUE, &err); -} - -static void ShowReportInfo(GtkTextView* viewReportTextView) -{ - GtkTextBuffer* buffer = - gtk_text_view_get_buffer(viewReportTextView); - - GtkTextIter start, end; - gtk_text_buffer_get_start_iter(buffer, &start); - gtk_text_buffer_get_end_iter(buffer, &end); - - gtk_text_buffer_delete(buffer, &start, &end); - - for (StringTable::iterator iter = gQueryParameters.begin(); - iter != gQueryParameters.end(); - iter++) { - gtk_text_buffer_insert(buffer, &end, iter->first.c_str(), -1); - gtk_text_buffer_insert(buffer, &end, ": ", -1); - gtk_text_buffer_insert(buffer, &end, iter->second.c_str(), -1); - gtk_text_buffer_insert(buffer, &end, "\n", -1); - } - - gtk_text_buffer_insert(buffer, &end, "\n", -1); - gtk_text_buffer_insert(buffer, &end, - gStrings[ST_EXTRAREPORTINFO].c_str(), -1); -} - -void UpdateSubmit() -{ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gSubmitReportCheck))) { - gtk_widget_set_sensitive(gViewReportButton, TRUE); - gtk_widget_set_sensitive(gCommentText, TRUE); - if (gIncludeURLCheck) - gtk_widget_set_sensitive(gIncludeURLCheck, TRUE); - gtk_widget_set_sensitive(gEmailMeCheck, TRUE); - gtk_widget_set_sensitive(gEmailEntry, - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gEmailMeCheck))); - gtk_label_set_text(GTK_LABEL(gProgressLabel), - gStrings[ST_REPORTPRESUBMIT].c_str()); - } else { - gtk_widget_set_sensitive(gViewReportButton, FALSE); - gtk_widget_set_sensitive(gCommentText, FALSE); - if (gIncludeURLCheck) - gtk_widget_set_sensitive(gIncludeURLCheck, FALSE); - gtk_widget_set_sensitive(gEmailMeCheck, FALSE); - gtk_widget_set_sensitive(gEmailEntry, FALSE); - gtk_label_set_text(GTK_LABEL(gProgressLabel), ""); - } -} - -static void ViewReportClicked(GtkButton* button, - gpointer userData) -{ - GtkDialog* dialog = - GTK_DIALOG(gtk_dialog_new_with_buttons(gStrings[ST_VIEWREPORTTITLE].c_str(), - GTK_WINDOW(gWindow), - GTK_DIALOG_MODAL, - GTK_STOCK_OK, - GTK_RESPONSE_OK, - nullptr)); - - GtkWidget* scrolled = gtk_scrolled_window_new(0, 0); - gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(dialog)), scrolled); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), - GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); - gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), - GTK_SHADOW_IN); -#if (MOZ_WIDGET_GTK >= 3) - gtk_widget_set_vexpand(scrolled, TRUE); -#endif - - GtkWidget* viewReportTextView = gtk_text_view_new(); - gtk_container_add(GTK_CONTAINER(scrolled), viewReportTextView); - gtk_text_view_set_editable(GTK_TEXT_VIEW(viewReportTextView), FALSE); - gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(viewReportTextView), - GTK_WRAP_WORD); - gtk_widget_set_size_request(GTK_WIDGET(viewReportTextView), -1, 100); - - ShowReportInfo(GTK_TEXT_VIEW(viewReportTextView)); - - gtk_dialog_set_default_response(dialog, GTK_RESPONSE_OK); - gtk_widget_set_size_request(GTK_WIDGET(dialog), 400, 200); - gtk_widget_show_all(GTK_WIDGET(dialog)); - gtk_dialog_run(dialog); - gtk_widget_destroy(GTK_WIDGET(dialog)); -} - -static void CommentChanged(GtkTextBuffer* buffer, gpointer userData) -{ - GtkTextIter start, end; - gtk_text_buffer_get_start_iter(buffer, &start); - gtk_text_buffer_get_end_iter(buffer, &end); - const char* comment = gtk_text_buffer_get_text(buffer, &start, &end, TRUE); - if (comment[0] == '\0' || gCommentFieldHint) - gQueryParameters.erase("Comments"); - else - gQueryParameters["Comments"] = comment; -} - -static void CommentInsert(GtkTextBuffer* buffer, - GtkTextIter* location, - gchar* text, - gint len, - gpointer userData) -{ - GtkTextIter start, end; - gtk_text_buffer_get_start_iter(buffer, &start); - gtk_text_buffer_get_end_iter(buffer, &end); - const char* comment = gtk_text_buffer_get_text(buffer, &start, &end, TRUE); - - // limit to 500 bytes in utf-8 - if (strlen(comment) + len > MAX_COMMENT_LENGTH) { - g_signal_stop_emission_by_name(buffer, "insert-text"); - } -} - -static void UpdateHintText(GtkWidget* widget, gboolean gainedFocus, - bool* hintShowing, const char* hintText) -{ - GtkTextBuffer* buffer = nullptr; - if (GTK_IS_TEXT_VIEW(widget)) - buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget)); - - if (gainedFocus) { - if (*hintShowing) { - if (buffer == nullptr) { // sort of cheating - gtk_entry_set_text(GTK_ENTRY(widget), ""); - } - else { // GtkTextView - gtk_text_buffer_set_text(buffer, "", 0); - } - gtk_widget_modify_text(widget, GTK_STATE_NORMAL, nullptr); - *hintShowing = false; - } - } - else { - // lost focus - const char* text = nullptr; - if (buffer == nullptr) { - text = gtk_entry_get_text(GTK_ENTRY(widget)); - } - else { - GtkTextIter start, end; - gtk_text_buffer_get_start_iter(buffer, &start); - gtk_text_buffer_get_end_iter(buffer, &end); - text = gtk_text_buffer_get_text(buffer, &start, &end, TRUE); - } - - if (text == nullptr || text[0] == '\0') { - *hintShowing = true; - - if (buffer == nullptr) { - gtk_entry_set_text(GTK_ENTRY(widget), hintText); - } - else { - gtk_text_buffer_set_text(buffer, hintText, -1); - } - - gtk_widget_modify_text(widget, GTK_STATE_NORMAL, - >k_widget_get_style(widget)->text[GTK_STATE_INSENSITIVE]); - } - } -} - -static gboolean CommentFocusChange(GtkWidget* widget, GdkEventFocus* event, - gpointer userData) -{ - UpdateHintText(widget, event->in, &gCommentFieldHint, - gStrings[ST_COMMENTGRAYTEXT].c_str()); - - return FALSE; -} - -static void UpdateEmail() -{ - const char* email = gtk_entry_get_text(GTK_ENTRY(gEmailEntry)); - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gEmailMeCheck))) { - gtk_widget_set_sensitive(gEmailEntry, TRUE); - } else { - email = ""; - gtk_widget_set_sensitive(gEmailEntry, FALSE); - } - if (email[0] == '\0' || gEmailFieldHint) - gQueryParameters.erase("Email"); - else - gQueryParameters["Email"] = email; -} - -static void EmailMeClicked(GtkButton* sender, gpointer userData) -{ - UpdateEmail(); -} - -static void EmailChanged(GtkEditable* editable, gpointer userData) -{ - UpdateEmail(); -} - -static gboolean EmailFocusChange(GtkWidget* widget, GdkEventFocus* event, - gpointer userData) -{ - UpdateHintText(widget, event->in, &gEmailFieldHint, - gStrings[ST_EMAILGRAYTEXT].c_str()); - - return FALSE; -} - -typedef struct _GnomeProgram GnomeProgram; -typedef struct _GnomeModuleInfo GnomeModuleInfo; -typedef GnomeProgram * (*_gnome_program_init_fn)(const char *, const char *, - const GnomeModuleInfo *, int, - char **, const char *, ...); -typedef const GnomeModuleInfo * (*_libgnomeui_module_info_get_fn)(); - -void TryInitGnome() -{ - gnomeLib = dlopen("libgnome-2.so.0", RTLD_LAZY); - if (!gnomeLib) - return; - - gnomeuiLib = dlopen("libgnomeui-2.so.0", RTLD_LAZY); - if (!gnomeuiLib) - return; - - _gnome_program_init_fn gnome_program_init = - (_gnome_program_init_fn)(dlsym(gnomeLib, "gnome_program_init")); - _libgnomeui_module_info_get_fn libgnomeui_module_info_get = - (_libgnomeui_module_info_get_fn)(dlsym(gnomeuiLib, "libgnomeui_module_info_get")); - - if (gnome_program_init && libgnomeui_module_info_get) { - gnome_program_init("crashreporter", "1.0", libgnomeui_module_info_get(), - gArgc, gArgv, nullptr); - } - -} - -/* === Crashreporter UI Functions === */ - -/* - * Anything not listed here is in crashreporter_gtk_common.cpp: - * UIInit - * UIShowDefaultUI - * UIError_impl - * UIGetIniPath - * UIGetSettingsPath - * UIEnsurePathExists - * UIFileExists - * UIMoveFile - * UIDeleteFile - * UIOpenRead - * UIOpenWrite - */ - -void UIShutdown() -{ - if (gnomeuiLib) - dlclose(gnomeuiLib); - // Don't dlclose gnomeLib as libgnomevfs and libORBit-2 use atexit(). -} - -bool UIShowCrashUI(const StringTable& files, - const StringTable& queryParameters, - const string& sendURL, - const vector& restartArgs) -{ - gFiles = files; - gQueryParameters = queryParameters; - gSendURL = sendURL; - gRestartArgs = restartArgs; - if (gQueryParameters.find("URL") != gQueryParameters.end()) - gURLParameter = gQueryParameters["URL"]; - - gWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(gWindow), - gStrings[ST_CRASHREPORTERTITLE].c_str()); - gtk_window_set_resizable(GTK_WINDOW(gWindow), FALSE); - gtk_window_set_position(GTK_WINDOW(gWindow), GTK_WIN_POS_CENTER); - gtk_container_set_border_width(GTK_CONTAINER(gWindow), 12); - g_signal_connect(gWindow, "delete-event", G_CALLBACK(WindowDeleted), 0); - g_signal_connect(gWindow, "key_press_event", G_CALLBACK(check_escape), nullptr); - - GtkWidget* vbox = gtk_vbox_new(FALSE, 6); - gtk_container_add(GTK_CONTAINER(gWindow), vbox); - - GtkWidget* titleLabel = gtk_label_new(""); - gtk_box_pack_start(GTK_BOX(vbox), titleLabel, FALSE, FALSE, 0); - gtk_misc_set_alignment(GTK_MISC(titleLabel), 0, 0.5); - char* markup = g_strdup_printf("%s", - gStrings[ST_CRASHREPORTERHEADER].c_str()); - gtk_label_set_markup(GTK_LABEL(titleLabel), markup); - g_free(markup); - - GtkWidget* descriptionLabel = - gtk_label_new(gStrings[ST_CRASHREPORTERDESCRIPTION].c_str()); - gtk_box_pack_start(GTK_BOX(vbox), descriptionLabel, TRUE, TRUE, 0); - // force the label to line wrap -#if (MOZ_WIDGET_GTK == 2) - gtk_widget_set_size_request(descriptionLabel, 400, -1); -#else - gtk_label_set_max_width_chars(GTK_LABEL(descriptionLabel), LABEL_MAX_CHAR_WIDTH); -#endif - gtk_label_set_line_wrap(GTK_LABEL(descriptionLabel), TRUE); - gtk_label_set_selectable(GTK_LABEL(descriptionLabel), TRUE); - gtk_misc_set_alignment(GTK_MISC(descriptionLabel), 0, 0.5); - - // this is honestly how they suggest you indent a section - GtkWidget* indentBox = gtk_hbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox), indentBox, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(indentBox), gtk_label_new(""), FALSE, FALSE, 6); - - GtkWidget* innerVBox1 = gtk_vbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(indentBox), innerVBox1, TRUE, TRUE, 0); - - gSubmitReportCheck = - gtk_check_button_new_with_label(gStrings[ST_CHECKSUBMIT].c_str()); - gtk_box_pack_start(GTK_BOX(innerVBox1), gSubmitReportCheck, FALSE, FALSE, 0); - g_signal_connect(gSubmitReportCheck, "clicked", - G_CALLBACK(SubmitReportChecked), 0); - - // indent again, below the "submit report" checkbox - GtkWidget* indentBox2 = gtk_hbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(innerVBox1), indentBox2, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(indentBox2), gtk_label_new(""), FALSE, FALSE, 6); - - GtkWidget* innerVBox = gtk_vbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(indentBox2), innerVBox, TRUE, TRUE, 0); - gtk_box_set_spacing(GTK_BOX(innerVBox), 6); - - GtkWidget* viewReportButtonBox = gtk_hbutton_box_new(); - gtk_box_pack_start(GTK_BOX(innerVBox), viewReportButtonBox, FALSE, FALSE, 0); - gtk_box_set_spacing(GTK_BOX(viewReportButtonBox), 6); - gtk_button_box_set_layout(GTK_BUTTON_BOX(viewReportButtonBox), GTK_BUTTONBOX_START); - - gViewReportButton = - gtk_button_new_with_label(gStrings[ST_VIEWREPORT].c_str()); - gtk_box_pack_start(GTK_BOX(viewReportButtonBox), gViewReportButton, FALSE, FALSE, 0); - g_signal_connect(gViewReportButton, "clicked", G_CALLBACK(ViewReportClicked), 0); - - GtkWidget* scrolled = gtk_scrolled_window_new(0, 0); - gtk_container_add(GTK_CONTAINER(innerVBox), scrolled); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), - GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); - gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), - GTK_SHADOW_IN); -#if (MOZ_WIDGET_GTK >= 3) - gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(scrolled), 100); -#endif - - gCommentTextLabel = gtk_label_new(gStrings[ST_COMMENTGRAYTEXT].c_str()); - gCommentText = gtk_text_view_new(); - gtk_label_set_mnemonic_widget(GTK_LABEL(gCommentTextLabel), gCommentText); - gtk_text_view_set_accepts_tab(GTK_TEXT_VIEW(gCommentText), FALSE); - g_signal_connect(gCommentText, "focus-in-event", G_CALLBACK(CommentFocusChange), 0); - g_signal_connect(gCommentText, "focus-out-event", G_CALLBACK(CommentFocusChange), 0); - - GtkTextBuffer* commentBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(gCommentText)); - g_signal_connect(commentBuffer, "changed", G_CALLBACK(CommentChanged), 0); - g_signal_connect(commentBuffer, "insert-text", G_CALLBACK(CommentInsert), 0); - - gtk_container_add(GTK_CONTAINER(scrolled), gCommentText); - gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(gCommentText), - GTK_WRAP_WORD); - gtk_widget_set_size_request(GTK_WIDGET(gCommentText), -1, 100); - - if (gQueryParameters.find("URL") != gQueryParameters.end()) { - gIncludeURLCheck = - gtk_check_button_new_with_label(gStrings[ST_CHECKURL].c_str()); - gtk_box_pack_start(GTK_BOX(innerVBox), gIncludeURLCheck, FALSE, FALSE, 0); - g_signal_connect(gIncludeURLCheck, "clicked", G_CALLBACK(IncludeURLClicked), 0); - // on by default - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gIncludeURLCheck), TRUE); - } - - gEmailMeCheck = - gtk_check_button_new_with_label(gStrings[ST_CHECKEMAIL].c_str()); - gtk_box_pack_start(GTK_BOX(innerVBox), gEmailMeCheck, FALSE, FALSE, 0); - g_signal_connect(gEmailMeCheck, "clicked", G_CALLBACK(EmailMeClicked), 0); - - GtkWidget* emailIndentBox = gtk_hbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(innerVBox), emailIndentBox, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(emailIndentBox), gtk_label_new(""), - FALSE, FALSE, 9); - - gEmailEntryLabel = gtk_label_new(gStrings[ST_EMAILGRAYTEXT].c_str()); - gEmailEntry = gtk_entry_new(); - gtk_label_set_mnemonic_widget(GTK_LABEL(gEmailEntryLabel), gEmailEntry); - gtk_box_pack_start(GTK_BOX(emailIndentBox), gEmailEntry, TRUE, TRUE, 0); - g_signal_connect(gEmailEntry, "changed", G_CALLBACK(EmailChanged), 0); - g_signal_connect(gEmailEntry, "focus-in-event", G_CALLBACK(EmailFocusChange), 0); - g_signal_connect(gEmailEntry, "focus-out-event", G_CALLBACK(EmailFocusChange), 0); - - GtkWidget* progressBox = gtk_hbox_new(FALSE, 6); - gtk_box_pack_start(GTK_BOX(vbox), progressBox, TRUE, TRUE, 0); - - // Get the throbber image from alongside the executable - char* dir = g_path_get_dirname(gArgv[0]); - char* path = g_build_filename(dir, "Throbber-small.gif", nullptr); - g_free(dir); - gThrobber = gtk_image_new_from_file(path); - gtk_box_pack_start(GTK_BOX(progressBox), gThrobber, FALSE, FALSE, 0); - - gProgressLabel = - gtk_label_new(gStrings[ST_REPORTPRESUBMIT].c_str()); - gtk_box_pack_start(GTK_BOX(progressBox), gProgressLabel, TRUE, TRUE, 0); - // force the label to line wrap -#if (MOZ_WIDGET_GTK == 2) - gtk_widget_set_size_request(gProgressLabel, 400, -1); -#else - gtk_label_set_max_width_chars(GTK_LABEL(gProgressLabel), LABEL_MAX_CHAR_WIDTH); -#endif - gtk_label_set_line_wrap(GTK_LABEL(gProgressLabel), TRUE); - - GtkWidget* buttonBox = gtk_hbutton_box_new(); - gtk_box_pack_end(GTK_BOX(vbox), buttonBox, FALSE, FALSE, 0); - gtk_box_set_spacing(GTK_BOX(buttonBox), 6); - gtk_button_box_set_layout(GTK_BUTTON_BOX(buttonBox), GTK_BUTTONBOX_END); - - gCloseButton = - gtk_button_new_with_label(gStrings[ST_QUIT].c_str()); - gtk_box_pack_start(GTK_BOX(buttonBox), gCloseButton, FALSE, FALSE, 0); - gtk_widget_set_can_default(gCloseButton, TRUE); - g_signal_connect(gCloseButton, "clicked", G_CALLBACK(CloseClicked), 0); - - gRestartButton = 0; - if (restartArgs.size() > 0) { - gRestartButton = gtk_button_new_with_label(gStrings[ST_RESTART].c_str()); - gtk_box_pack_start(GTK_BOX(buttonBox), gRestartButton, FALSE, FALSE, 0); - gtk_widget_set_can_default(gRestartButton, TRUE); - g_signal_connect(gRestartButton, "clicked", G_CALLBACK(RestartClicked), 0); - } - - gtk_widget_grab_focus(gSubmitReportCheck); - - gtk_widget_grab_default(gRestartButton ? gRestartButton : gCloseButton); - - LoadSettings(); - - UpdateEmail(); - UpdateSubmit(); - - UpdateHintText(gCommentText, FALSE, &gCommentFieldHint, - gStrings[ST_COMMENTGRAYTEXT].c_str()); - UpdateHintText(gEmailEntry, FALSE, &gEmailFieldHint, - gStrings[ST_EMAILGRAYTEXT].c_str()); - - gtk_widget_show_all(gWindow); - // stick this here to avoid the show_all above... - gtk_widget_hide(gThrobber); - - gtk_main(); - - return gDidTrySend; -} diff --git a/toolkit/crashreporter/client/crashreporter_osx.h b/toolkit/crashreporter/client/crashreporter_osx.h deleted file mode 100644 index e274de0de..000000000 --- a/toolkit/crashreporter/client/crashreporter_osx.h +++ /dev/null @@ -1,107 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef CRASHREPORTER_OSX_H__ -#define CRASHREPORTER_OSX_H__ - -#include -#include "HTTPMultipartUpload.h" -#include "crashreporter.h" - -// Defined below -@class TextViewWithPlaceHolder; - -@interface CrashReporterUI : NSObject -{ - IBOutlet NSWindow* mWindow; - - /* Crash reporter view */ - IBOutlet NSTextField* mHeaderLabel; - IBOutlet NSTextField* mDescriptionLabel; - IBOutlet NSButton* mViewReportButton; - IBOutlet NSScrollView* mCommentScrollView; - IBOutlet TextViewWithPlaceHolder* mCommentText; - IBOutlet NSButton* mSubmitReportButton; - IBOutlet NSButton* mIncludeURLButton; - IBOutlet NSButton* mEmailMeButton; - IBOutlet NSTextField* mEmailText; - IBOutlet NSButton* mCloseButton; - IBOutlet NSButton* mRestartButton; - IBOutlet NSProgressIndicator* mProgressIndicator; - IBOutlet NSTextField* mProgressText; - - /* Error view */ - IBOutlet NSView* mErrorView; - IBOutlet NSTextField* mErrorHeaderLabel; - IBOutlet NSTextField* mErrorLabel; - IBOutlet NSButton* mErrorCloseButton; - - /* For "show info" alert */ - IBOutlet NSWindow* mViewReportWindow; - IBOutlet NSTextView* mViewReportTextView; - IBOutlet NSButton* mViewReportOkButton; - - HTTPMultipartUpload* mPost; -} - -- (void)showCrashUI:(const StringTable&)files - queryParameters:(const StringTable&)queryParameters - sendURL:(const std::string&)sendURL; -- (void)showErrorUI:(const std::string&)message; -- (void)showReportInfo; -- (void)maybeSubmitReport; -- (void)closeMeDown:(id)unused; - -- (IBAction)submitReportClicked:(id)sender; -- (IBAction)viewReportClicked:(id)sender; -- (IBAction)viewReportOkClicked:(id)sender; -- (IBAction)closeClicked:(id)sender; -- (IBAction)restartClicked:(id)sender; -- (IBAction)includeURLClicked:(id)sender; -- (IBAction)emailMeClicked:(id)sender; - -- (void)controlTextDidChange:(NSNotification *)note; -- (void)textDidChange:(NSNotification *)aNotification; -- (BOOL)textView:(NSTextView *)aTextView shouldChangeTextInRange:(NSRange)affectedCharRange replacementString:(NSString *)replacementString; - -- (void)doInitialResizing; -- (float)setStringFitVertically:(NSControl*)control - string:(NSString*)str - resizeWindow:(BOOL)resizeWindow; -- (void)setView:(NSView*)v animate: (BOOL) animate; -- (void)enableControls:(BOOL)enabled; -- (void)updateSubmit; -- (void)updateURL; -- (void)updateEmail; -- (void)sendReport; -- (bool)setupPost; -- (void)uploadThread:(HTTPMultipartUpload*)post; -- (void)uploadComplete:(NSData*)data; - --(BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication*)theApplication; --(void)applicationWillTerminate:(NSNotification *)aNotification; - -@end - -/* - * Subclass NSTextView to provide a text view with placeholder text. - * Also provide a setEnabled implementation. - */ -@interface TextViewWithPlaceHolder : NSTextView { - NSMutableAttributedString *mPlaceHolderString; -} - -- (BOOL)becomeFirstResponder; -- (void)drawRect:(NSRect)rect; -- (BOOL)resignFirstResponder; -- (void)setPlaceholder:(NSString*)placeholder; -- (void)insertTab:(id)sender; -- (void)insertBacktab:(id)sender; -- (void)setEnabled:(BOOL)enabled; -- (void)dealloc; - -@end - -#endif diff --git a/toolkit/crashreporter/client/crashreporter_osx.mm b/toolkit/crashreporter/client/crashreporter_osx.mm deleted file mode 100644 index 0768d6da3..000000000 --- a/toolkit/crashreporter/client/crashreporter_osx.mm +++ /dev/null @@ -1,922 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#import -#import -#include "crashreporter.h" -#include "crashreporter_osx.h" -#include -#include -#include -#include -#include -#include - -using std::string; -using std::vector; -using std::ostringstream; - -using namespace CrashReporter; - -static NSAutoreleasePool* gMainPool; -static CrashReporterUI* gUI = 0; -static StringTable gFiles; -static StringTable gQueryParameters; -static string gURLParameter; -static string gSendURL; -static vector gRestartArgs; -static bool gDidTrySend = false; -static bool gRTLlayout = false; - -static cpu_type_t pref_cpu_types[2] = { -#if defined(__i386__) - CPU_TYPE_X86, -#elif defined(__x86_64__) - CPU_TYPE_X86_64, -#elif defined(__ppc__) - CPU_TYPE_POWERPC, -#endif - CPU_TYPE_ANY }; - -#define NSSTR(s) [NSString stringWithUTF8String:(s).c_str()] - -static NSString* Str(const char* aName) -{ - string str = gStrings[aName]; - if (str.empty()) str = "?"; - return NSSTR(str); -} - -static bool RestartApplication() -{ - vector argv(gRestartArgs.size() + 1); - - posix_spawnattr_t spawnattr; - if (posix_spawnattr_init(&spawnattr) != 0) { - return false; - } - - // Set spawn attributes. - size_t attr_count = sizeof(pref_cpu_types) / sizeof(pref_cpu_types[0]); - size_t attr_ocount = 0; - if (posix_spawnattr_setbinpref_np(&spawnattr, - attr_count, - pref_cpu_types, - &attr_ocount) != 0 || - attr_ocount != attr_count) { - posix_spawnattr_destroy(&spawnattr); - return false; - } - - unsigned int i; - for (i = 0; i < gRestartArgs.size(); i++) { - argv[i] = (char*)gRestartArgs[i].c_str(); - } - argv[i] = 0; - - char **env = NULL; - char ***nsEnv = _NSGetEnviron(); - if (nsEnv) - env = *nsEnv; - int result = posix_spawnp(NULL, - argv[0], - NULL, - &spawnattr, - &argv[0], - env); - - posix_spawnattr_destroy(&spawnattr); - - return result == 0; -} - -@implementation CrashReporterUI - --(void)awakeFromNib -{ - gUI = self; - [mWindow center]; - - [mWindow setTitle:[[NSBundle mainBundle] - objectForInfoDictionaryKey:@"CFBundleName"]]; -} - --(void)showCrashUI:(const StringTable&)files - queryParameters:(const StringTable&)queryParameters - sendURL:(const string&)sendURL -{ - gFiles = files; - gQueryParameters = queryParameters; - gSendURL = sendURL; - - [mWindow setTitle:Str(ST_CRASHREPORTERTITLE)]; - [mHeaderLabel setStringValue:Str(ST_CRASHREPORTERHEADER)]; - - NSRect viewReportFrame = [mViewReportButton frame]; - [mViewReportButton setTitle:Str(ST_VIEWREPORT)]; - [mViewReportButton sizeToFit]; - if (gRTLlayout) { - // sizeToFit will keep the left side fixed, so realign - float oldWidth = viewReportFrame.size.width; - viewReportFrame = [mViewReportButton frame]; - viewReportFrame.origin.x += oldWidth - viewReportFrame.size.width; - [mViewReportButton setFrame: viewReportFrame]; - } - - [mSubmitReportButton setTitle:Str(ST_CHECKSUBMIT)]; - [mIncludeURLButton setTitle:Str(ST_CHECKURL)]; - [mEmailMeButton setTitle:Str(ST_CHECKEMAIL)]; - [mViewReportOkButton setTitle:Str(ST_OK)]; - - [mCommentText setPlaceholder:Str(ST_COMMENTGRAYTEXT)]; - if (gRTLlayout) - [mCommentText toggleBaseWritingDirection:self]; - [[mEmailText cell] setPlaceholderString:Str(ST_EMAILGRAYTEXT)]; - - if (gQueryParameters.find("URL") != gQueryParameters.end()) { - // save the URL value in case the checkbox gets unchecked - gURLParameter = gQueryParameters["URL"]; - } - else { - // no URL specified, hide checkbox - [mIncludeURLButton removeFromSuperview]; - // shrink window to fit - NSRect frame = [mWindow frame]; - NSRect includeURLFrame = [mIncludeURLButton frame]; - NSRect emailFrame = [mEmailMeButton frame]; - int buttonMask = [mViewReportButton autoresizingMask]; - int checkMask = [mSubmitReportButton autoresizingMask]; - int commentScrollMask = [mCommentScrollView autoresizingMask]; - - [mViewReportButton setAutoresizingMask:NSViewMinYMargin]; - [mSubmitReportButton setAutoresizingMask:NSViewMinYMargin]; - [mCommentScrollView setAutoresizingMask:NSViewMinYMargin]; - - // remove all the space in between - frame.size.height -= includeURLFrame.origin.y - emailFrame.origin.y; - [mWindow setFrame:frame display: true animate:NO]; - - [mViewReportButton setAutoresizingMask:buttonMask]; - [mSubmitReportButton setAutoresizingMask:checkMask]; - [mCommentScrollView setAutoresizingMask:commentScrollMask]; - } - - // resize some buttons horizontally and possibly some controls vertically - [self doInitialResizing]; - - // load default state of submit checkbox - // we don't just do this via IB because we want the default to be - // off a certain percentage of the time - BOOL submitChecked = NO; - NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults]; - if (nil != [userDefaults objectForKey:@"submitReport"]) { - submitChecked = [userDefaults boolForKey:@"submitReport"]; - } - else { - // use compile-time specified enable percentage - submitChecked = ShouldEnableSending(); - [userDefaults setBool:submitChecked forKey:@"submitReport"]; - } - [mSubmitReportButton setState:(submitChecked ? NSOnState : NSOffState)]; - - [self updateSubmit]; - [self updateURL]; - [self updateEmail]; - - [mWindow makeKeyAndOrderFront:nil]; -} - --(void)showErrorUI:(const string&)message -{ - [self setView: mErrorView animate: NO]; - - [mErrorHeaderLabel setStringValue:Str(ST_CRASHREPORTERHEADER)]; - [self setStringFitVertically:mErrorLabel - string:NSSTR(message) - resizeWindow:YES]; - [mErrorCloseButton setTitle:Str(ST_OK)]; - - [mErrorCloseButton setKeyEquivalent:@"\r"]; - [mWindow makeFirstResponder:mErrorCloseButton]; - [mWindow makeKeyAndOrderFront:nil]; -} - --(void)showReportInfo -{ - NSDictionary* boldAttr = [NSDictionary - dictionaryWithObject: - [NSFont boldSystemFontOfSize: - [NSFont smallSystemFontSize]] - forKey:NSFontAttributeName]; - NSDictionary* normalAttr = [NSDictionary - dictionaryWithObject: - [NSFont systemFontOfSize: - [NSFont smallSystemFontSize]] - forKey:NSFontAttributeName]; - - [mViewReportTextView setString:@""]; - for (StringTable::iterator iter = gQueryParameters.begin(); - iter != gQueryParameters.end(); - iter++) { - NSAttributedString* key = [[NSAttributedString alloc] - initWithString:NSSTR(iter->first + ": ") - attributes:boldAttr]; - NSAttributedString* value = [[NSAttributedString alloc] - initWithString:NSSTR(iter->second + "\n") - attributes:normalAttr]; - [[mViewReportTextView textStorage] appendAttributedString: key]; - [[mViewReportTextView textStorage] appendAttributedString: value]; - [key release]; - [value release]; - } - - NSAttributedString* extra = [[NSAttributedString alloc] - initWithString:NSSTR("\n" + gStrings[ST_EXTRAREPORTINFO]) - attributes:normalAttr]; - [[mViewReportTextView textStorage] appendAttributedString: extra]; - [extra release]; -} - -- (void)maybeSubmitReport -{ - if ([mSubmitReportButton state] == NSOnState) { - [self setStringFitVertically:mProgressText - string:Str(ST_REPORTDURINGSUBMIT) - resizeWindow:YES]; - // disable all the controls - [self enableControls:NO]; - [mSubmitReportButton setEnabled:NO]; - [mRestartButton setEnabled:NO]; - [mCloseButton setEnabled:NO]; - [mProgressIndicator startAnimation:self]; - gDidTrySend = true; - [self sendReport]; - } else { - [NSApp terminate:self]; - } -} - -- (void)closeMeDown:(id)unused -{ - [NSApp terminate:self]; -} - --(IBAction)submitReportClicked:(id)sender -{ - [self updateSubmit]; - NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults]; - [userDefaults setBool:([mSubmitReportButton state] == NSOnState) - forKey:@"submitReport"]; - [userDefaults synchronize]; -} - --(IBAction)viewReportClicked:(id)sender -{ - [self showReportInfo]; - [NSApp beginSheet:mViewReportWindow modalForWindow:mWindow - modalDelegate:nil didEndSelector:nil contextInfo:nil]; -} - -- (IBAction)viewReportOkClicked:(id)sender -{ - [mViewReportWindow orderOut:nil]; - [NSApp endSheet:mViewReportWindow]; -} - --(IBAction)closeClicked:(id)sender -{ - [self maybeSubmitReport]; -} - --(IBAction)restartClicked:(id)sender -{ - RestartApplication(); - [self maybeSubmitReport]; -} - -- (IBAction)includeURLClicked:(id)sender -{ - [self updateURL]; -} - --(IBAction)emailMeClicked:(id)sender -{ - [self updateEmail]; -} - --(void)controlTextDidChange:(NSNotification *)note -{ - [self updateEmail]; -} - -- (void)textDidChange:(NSNotification *)aNotification -{ - // update comment parameter - if ([[[mCommentText textStorage] mutableString] length] > 0) - gQueryParameters["Comments"] = [[[mCommentText textStorage] mutableString] - UTF8String]; - else - gQueryParameters.erase("Comments"); -} - -// Limit the comment field to 500 bytes in UTF-8 -- (BOOL)textView:(NSTextView *)aTextView shouldChangeTextInRange:(NSRange)affectedCharRange replacementString:(NSString *)replacementString -{ - // current string length + replacement text length - replaced range length - if (([[aTextView string] - lengthOfBytesUsingEncoding:NSUTF8StringEncoding] - + [replacementString lengthOfBytesUsingEncoding:NSUTF8StringEncoding] - - [[[aTextView string] substringWithRange:affectedCharRange] - lengthOfBytesUsingEncoding:NSUTF8StringEncoding]) - > MAX_COMMENT_LENGTH) { - return NO; - } - return YES; -} - -- (void)doInitialResizing -{ - NSRect windowFrame = [mWindow frame]; - NSRect restartFrame = [mRestartButton frame]; - NSRect closeFrame = [mCloseButton frame]; - // resize close button to fit text - float oldCloseWidth = closeFrame.size.width; - [mCloseButton setTitle:Str(ST_QUIT)]; - [mCloseButton sizeToFit]; - closeFrame = [mCloseButton frame]; - // move close button left if it grew - if (!gRTLlayout) { - closeFrame.origin.x -= closeFrame.size.width - oldCloseWidth; - } - - if (gRestartArgs.size() == 0) { - [mRestartButton removeFromSuperview]; - if (!gRTLlayout) { - closeFrame.origin.x = restartFrame.origin.x + - (restartFrame.size.width - closeFrame.size.width); - } - else { - closeFrame.origin.x = restartFrame.origin.x; - } - [mCloseButton setFrame: closeFrame]; - [mCloseButton setKeyEquivalent:@"\r"]; - } else { - [mRestartButton setTitle:Str(ST_RESTART)]; - // resize "restart" button - float oldRestartWidth = restartFrame.size.width; - [mRestartButton sizeToFit]; - restartFrame = [mRestartButton frame]; - if (!gRTLlayout) { - // move left by the amount that the button grew - restartFrame.origin.x -= restartFrame.size.width - oldRestartWidth; - closeFrame.origin.x -= restartFrame.size.width - oldRestartWidth; - } - else { - // shift the close button right in RTL - closeFrame.origin.x += restartFrame.size.width - oldRestartWidth; - } - [mRestartButton setFrame: restartFrame]; - [mCloseButton setFrame: closeFrame]; - // possibly resize window if both buttons no longer fit - // leave 20 px from either side of the window, and 12 px - // between the buttons - float neededWidth = closeFrame.size.width + restartFrame.size.width + - 2*20 + 12; - - if (neededWidth > windowFrame.size.width) { - windowFrame.size.width = neededWidth; - [mWindow setFrame:windowFrame display: true animate: NO]; - } - [mRestartButton setKeyEquivalent:@"\r"]; - } - - NSButton *checkboxes[] = { - mSubmitReportButton, - mIncludeURLButton, - mEmailMeButton - }; - - for (int i=0; i<3; i++) { - NSRect frame = [checkboxes[i] frame]; - [checkboxes[i] sizeToFit]; - if (gRTLlayout) { - // sizeToFit will keep the left side fixed, so realign - float oldWidth = frame.size.width; - frame = [checkboxes[i] frame]; - frame.origin.x += oldWidth - frame.size.width; - [checkboxes[i] setFrame: frame]; - } - // keep existing spacing on left side, + 20 px spare on right - float neededWidth = frame.origin.x + frame.size.width + 20; - if (neededWidth > windowFrame.size.width) { - windowFrame.size.width = neededWidth; - [mWindow setFrame:windowFrame display: true animate: NO]; - } - } - - // do this down here because we may have made the window wider - // up above - [self setStringFitVertically:mDescriptionLabel - string:Str(ST_CRASHREPORTERDESCRIPTION) - resizeWindow:YES]; - - // now pin all the controls (except quit/submit) in place, - // if we lengthen the window after this, it's just to lengthen - // the progress text, so nothing above that text should move. - NSView* views[] = { - mSubmitReportButton, - mViewReportButton, - mCommentScrollView, - mIncludeURLButton, - mEmailMeButton, - mEmailText, - mProgressIndicator, - mProgressText - }; - for (unsigned int i=0; ifirst); - NSString* value = NSSTR(i->second); - if (key && value) { - [parameters setObject: value forKey: key]; - } else { - ostringstream message; - message << "Warning: skipping annotation '" << i->first - << "' due to malformed UTF-8 encoding"; - LogMessage(message.str()); - } - } - - for (StringTable::const_iterator i = gFiles.begin(); - i != gFiles.end(); - i++) { - [mPost addFileAtPath: NSSTR(i->second) name: NSSTR(i->first)]; - } - - [mPost setParameters: parameters]; - [parameters release]; - - return true; -} - --(void)uploadComplete:(NSData*)data -{ - NSHTTPURLResponse* response = [mPost response]; - [mPost release]; - - bool success; - string reply; - if (!data || !response || [response statusCode] != 200) { - success = false; - reply = ""; - - // if data is nil, we probably logged an error in uploadThread - if (data != nil && response != nil) { - ostringstream message; - message << "Crash report submission failed: server returned status " - << [response statusCode]; - LogMessage(message.str()); - } - } else { - success = true; - LogMessage("Crash report submitted successfully"); - - NSString* encodingName = [response textEncodingName]; - NSStringEncoding encoding; - if (encodingName) { - encoding = CFStringConvertEncodingToNSStringEncoding( - CFStringConvertIANACharSetNameToEncoding((CFStringRef)encodingName)); - } else { - encoding = NSISOLatin1StringEncoding; - } - NSString* r = [[NSString alloc] initWithData: data encoding: encoding]; - reply = [r UTF8String]; - [r release]; - } - - SendCompleted(success, reply); - - [mProgressIndicator stopAnimation:self]; - if (success) { - [self setStringFitVertically:mProgressText - string:Str(ST_REPORTSUBMITSUCCESS) - resizeWindow:YES]; - } else { - [self setStringFitVertically:mProgressText - string:Str(ST_SUBMITFAILED) - resizeWindow:YES]; - } - // quit after 5 seconds - [self performSelector:@selector(closeMeDown:) withObject:nil - afterDelay:5.0]; -} - --(void)uploadThread:(HTTPMultipartUpload*)post -{ - NSAutoreleasePool* autoreleasepool = [[NSAutoreleasePool alloc] init]; - NSError* error = nil; - NSData* data = [post send: &error]; - if (error) { - data = nil; - NSString* errorDesc = [error localizedDescription]; - string message = [errorDesc UTF8String]; - LogMessage("Crash report submission failed: " + message); - } - - [self performSelectorOnMainThread: @selector(uploadComplete:) - withObject: data - waitUntilDone: YES]; - - [autoreleasepool release]; -} - -// to get auto-quit when we close the window --(BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication*)theApplication -{ - return YES; -} - --(void)applicationWillTerminate:(NSNotification *)aNotification -{ - // since we use [NSApp terminate:] we never return to main, - // so do our cleanup here - if (!gDidTrySend) - DeleteDump(); -} - -@end - -@implementation TextViewWithPlaceHolder - -- (BOOL)becomeFirstResponder -{ - [self setNeedsDisplay:YES]; - return [super becomeFirstResponder]; -} - -- (void)drawRect:(NSRect)rect -{ - [super drawRect:rect]; - if (mPlaceHolderString && [[self string] isEqualToString:@""] && - self != [[self window] firstResponder]) - [mPlaceHolderString drawInRect:[self frame]]; -} - -- (BOOL)resignFirstResponder -{ - [self setNeedsDisplay:YES]; - return [super resignFirstResponder]; -} - -- (void)setPlaceholder:(NSString*)placeholder -{ - NSColor* txtColor = [NSColor disabledControlTextColor]; - NSDictionary* txtDict = [NSDictionary - dictionaryWithObjectsAndKeys:txtColor, - NSForegroundColorAttributeName, nil]; - mPlaceHolderString = [[NSMutableAttributedString alloc] - initWithString:placeholder attributes:txtDict]; - if (gRTLlayout) - [mPlaceHolderString setAlignment:NSRightTextAlignment - range:NSMakeRange(0, [placeholder length])]; - -} - -- (void)insertTab:(id)sender -{ - // don't actually want to insert tabs, just tab to next control - [[self window] selectNextKeyView:sender]; -} - -- (void)insertBacktab:(id)sender -{ - [[self window] selectPreviousKeyView:sender]; -} - -- (void)setEnabled:(BOOL)enabled -{ - [self setSelectable:enabled]; - [self setEditable:enabled]; - if (![[self string] isEqualToString:@""]) { - NSAttributedString* colorString; - NSColor* txtColor; - if (enabled) - txtColor = [NSColor textColor]; - else - txtColor = [NSColor disabledControlTextColor]; - NSDictionary *txtDict = [NSDictionary - dictionaryWithObjectsAndKeys:txtColor, - NSForegroundColorAttributeName, nil]; - colorString = [[NSAttributedString alloc] - initWithString:[self string] - attributes:txtDict]; - [[self textStorage] setAttributedString: colorString]; - [self setInsertionPointColor:txtColor]; - [colorString release]; - } -} - -- (void)dealloc -{ - [mPlaceHolderString release]; - [super dealloc]; -} - -@end - -/* === Crashreporter UI Functions === */ - -bool UIInit() -{ - gMainPool = [[NSAutoreleasePool alloc] init]; - [NSApplication sharedApplication]; - - if (gStrings.find("isRTL") != gStrings.end() && - gStrings["isRTL"] == "yes") - gRTLlayout = true; - - [NSBundle loadNibNamed:(gRTLlayout ? @"MainMenuRTL" : @"MainMenu") - owner:NSApp]; - - return true; -} - -void UIShutdown() -{ - [gMainPool release]; -} - -void UIShowDefaultUI() -{ - [gUI showErrorUI: gStrings[ST_CRASHREPORTERDEFAULT]]; - [NSApp run]; -} - -bool UIShowCrashUI(const StringTable& files, - const StringTable& queryParameters, - const string& sendURL, - const vector& restartArgs) -{ - gRestartArgs = restartArgs; - - [gUI showCrashUI: files - queryParameters: queryParameters - sendURL: sendURL]; - [NSApp run]; - - return gDidTrySend; -} - -void UIError_impl(const string& message) -{ - if (!gUI) { - // UI failed to initialize, printing is the best we can do - printf("Error: %s\n", message.c_str()); - return; - } - - [gUI showErrorUI: message]; - [NSApp run]; -} - -bool UIGetIniPath(string& path) -{ - NSString* tmpPath = [NSString stringWithUTF8String:gArgv[0]]; - NSString* iniName = [tmpPath lastPathComponent]; - iniName = [iniName stringByAppendingPathExtension:@"ini"]; - tmpPath = [tmpPath stringByDeletingLastPathComponent]; - tmpPath = [tmpPath stringByDeletingLastPathComponent]; - tmpPath = [tmpPath stringByAppendingPathComponent:@"Resources"]; - tmpPath = [tmpPath stringByAppendingPathComponent:iniName]; - path = [tmpPath UTF8String]; - return true; -} - -bool UIGetSettingsPath(const string& vendor, - const string& product, - string& settingsPath) -{ - FSRef foundRef; - OSErr err = FSFindFolder(kUserDomain, kApplicationSupportFolderType, - kCreateFolder, &foundRef); - if (err != noErr) - return false; - - unsigned char path[PATH_MAX]; - FSRefMakePath(&foundRef, path, sizeof(path)); - NSString* destPath = [NSString stringWithUTF8String:reinterpret_cast(path)]; - - // Note that MacOS ignores the vendor when creating the profile hierarchy - - // all application preferences directories live alongside one another in - // ~/Library/Application Support/ - destPath = [destPath stringByAppendingPathComponent: NSSTR(product)]; - // Thunderbird stores its profile in ~/Library/Thunderbird, - // but we're going to put stuff in ~/Library/Application Support/Thunderbird - // anyway, so we have to ensure that path exists. - string tempPath = [destPath UTF8String]; - if (!UIEnsurePathExists(tempPath)) - return false; - - destPath = [destPath stringByAppendingPathComponent: @"Crash Reports"]; - - settingsPath = [destPath UTF8String]; - - return true; -} - -bool UIEnsurePathExists(const string& path) -{ - int ret = mkdir(path.c_str(), S_IRWXU); - int e = errno; - if (ret == -1 && e != EEXIST) - return false; - - return true; -} - -bool UIFileExists(const string& path) -{ - struct stat sb; - int ret = stat(path.c_str(), &sb); - if (ret == -1 || !(sb.st_mode & S_IFREG)) - return false; - - return true; -} - -bool UIMoveFile(const string& file, const string& newfile) -{ - if (!rename(file.c_str(), newfile.c_str())) - return true; - if (errno != EXDEV) - return false; - - NSFileManager *fileManager = [NSFileManager defaultManager]; - NSString *source = [fileManager stringWithFileSystemRepresentation:file.c_str() length:file.length()]; - NSString *dest = [fileManager stringWithFileSystemRepresentation:newfile.c_str() length:newfile.length()]; - if (!source || !dest) - return false; - - [fileManager moveItemAtPath:source toPath:dest error:NULL]; - return UIFileExists(newfile); -} - -bool UIDeleteFile(const string& file) -{ - return (unlink(file.c_str()) != -1); -} - -std::ifstream* UIOpenRead(const string& filename) -{ - return new std::ifstream(filename.c_str(), std::ios::in); -} - -std::ofstream* UIOpenWrite(const string& filename, - bool append, // append=false - bool binary) // binary=false -{ - std::ios_base::openmode mode = std::ios::out; - - if (append) { - mode = mode | std::ios::app; - } - - if (binary) { - mode = mode | std::ios::binary; - } - - return new std::ofstream(filename.c_str(), mode); -} diff --git a/toolkit/crashreporter/client/crashreporter_unix_common.cpp b/toolkit/crashreporter/client/crashreporter_unix_common.cpp deleted file mode 100644 index f42a35616..000000000 --- a/toolkit/crashreporter/client/crashreporter_unix_common.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "crashreporter.h" - -#include - -#include -#include -#include -#include - -using namespace CrashReporter; -using std::string; -using std::vector; -using std::sort; - -struct FileData -{ - time_t timestamp; - string path; -}; - -static bool CompareFDTime(const FileData& fd1, const FileData& fd2) -{ - return fd1.timestamp > fd2.timestamp; -} - -void UIPruneSavedDumps(const std::string& directory) -{ - DIR *dirfd = opendir(directory.c_str()); - if (!dirfd) - return; - - vector dumpfiles; - - while (dirent *dir = readdir(dirfd)) { - FileData fd; - fd.path = directory + '/' + dir->d_name; - if (fd.path.size() < 5) - continue; - - if (fd.path.compare(fd.path.size() - 4, 4, ".dmp") != 0) - continue; - - struct stat st; - if (stat(fd.path.c_str(), &st)) { - closedir(dirfd); - return; - } - - fd.timestamp = st.st_mtime; - - dumpfiles.push_back(fd); - } - - sort(dumpfiles.begin(), dumpfiles.end(), CompareFDTime); - - while (dumpfiles.size() > kSaveCount) { - // get the path of the oldest file - string path = dumpfiles[dumpfiles.size() - 1].path; - UIDeleteFile(path.c_str()); - - // s/.dmp/.extra/ - path.replace(path.size() - 4, 4, ".extra"); - UIDeleteFile(path.c_str()); - - dumpfiles.pop_back(); - } -} - -void UIRunMinidumpAnalyzer(const string& exename, const string& filename) -{ - // Run the minidump analyzer and wait for it to finish - pid_t pid = fork(); - - if (pid == -1) { - return; // Nothing to do upon failure - } else if (pid == 0) { - execl(exename.c_str(), exename.c_str(), filename.c_str(), nullptr); - } else { - waitpid(pid, nullptr, 0); - } -} diff --git a/toolkit/crashreporter/client/crashreporter_win.cpp b/toolkit/crashreporter/client/crashreporter_win.cpp deleted file mode 100644 index 57ca495ba..000000000 --- a/toolkit/crashreporter/client/crashreporter_win.cpp +++ /dev/null @@ -1,1568 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifdef WIN32_LEAN_AND_MEAN -#undef WIN32_LEAN_AND_MEAN -#endif - -#include "crashreporter.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "resource.h" -#include "client/windows/sender/crash_report_sender.h" -#include "common/windows/string_utils-inl.h" - -#define CRASH_REPORTER_VALUE L"Enabled" -#define SUBMIT_REPORT_VALUE L"SubmitCrashReport" -#define SUBMIT_REPORT_OLD L"SubmitReport" -#define INCLUDE_URL_VALUE L"IncludeURL" -#define EMAIL_ME_VALUE L"EmailMe" -#define EMAIL_VALUE L"Email" -#define MAX_EMAIL_LENGTH 1024 - -#define SENDURL_ORIGINAL L"https://crash-reports.mozilla.com/submit" -#define SENDURL_XPSP2 L"https://crash-reports-xpsp2.mozilla.com/submit" - -#define WM_UPLOADCOMPLETE WM_APP - -// Thanks, Windows.h :( -#undef min -#undef max - -using std::string; -using std::wstring; -using std::map; -using std::vector; -using std::set; -using std::ios; -using std::ifstream; -using std::ofstream; - -using namespace CrashReporter; - -typedef struct { - HWND hDlg; - map queryParameters; - map files; - wstring sendURL; - - wstring serverResponse; -} SendThreadData; - -/* - * Per http://msdn2.microsoft.com/en-us/library/ms645398(VS.85).aspx - * "The DLGTEMPLATEEX structure is not defined in any standard header file. - * The structure definition is provided here to explain the format of an - * extended template for a dialog box. -*/ -typedef struct { - WORD dlgVer; - WORD signature; - DWORD helpID; - DWORD exStyle; - // There's more to this struct, but it has weird variable-length - // members, and I only actually need to touch exStyle on an existing - // instance, so I've omitted the rest. -} DLGTEMPLATEEX; - -static HANDLE gThreadHandle; -static SendThreadData gSendData = { 0, }; -static vector gRestartArgs; -static map gQueryParameters; -static wstring gCrashReporterKey(L"Software\\Mozilla\\Crash Reporter"); -static wstring gURLParameter; -static int gCheckboxPadding = 6; -static bool gRTLlayout = false; - -// When vertically resizing the dialog, these items should move down -static set gAttachedBottom; - -// Default set of items for gAttachedBottom -static const UINT kDefaultAttachedBottom[] = { - IDC_SUBMITREPORTCHECK, - IDC_VIEWREPORTBUTTON, - IDC_COMMENTTEXT, - IDC_INCLUDEURLCHECK, - IDC_EMAILMECHECK, - IDC_EMAILTEXT, - IDC_PROGRESSTEXT, - IDC_THROBBER, - IDC_CLOSEBUTTON, - IDC_RESTARTBUTTON, -}; - -static wstring UTF8ToWide(const string& utf8, bool *success = 0); -static DWORD WINAPI SendThreadProc(LPVOID param); - -static wstring Str(const char* key) -{ - return UTF8ToWide(gStrings[key]); -} - -/* === win32 helper functions === */ - -static void DoInitCommonControls() -{ - INITCOMMONCONTROLSEX ic; - ic.dwSize = sizeof(INITCOMMONCONTROLSEX); - ic.dwICC = ICC_PROGRESS_CLASS; - InitCommonControlsEx(&ic); - // also get the rich edit control - LoadLibrary(L"Msftedit.dll"); -} - -static bool GetBoolValue(HKEY hRegKey, LPCTSTR valueName, DWORD* value) -{ - DWORD type, dataSize; - dataSize = sizeof(DWORD); - if (RegQueryValueEx(hRegKey, valueName, nullptr, - &type, (LPBYTE)value, &dataSize) == ERROR_SUCCESS && - type == REG_DWORD) - return true; - - return false; -} - -// Removes a value from HKEY_LOCAL_MACHINE and HKEY_CURRENT_USER, if it exists. -static void RemoveUnusedValues(const wchar_t* key, LPCTSTR valueName) -{ - HKEY hRegKey; - - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, key, 0, KEY_SET_VALUE, &hRegKey) - == ERROR_SUCCESS) { - RegDeleteValue(hRegKey, valueName); - RegCloseKey(hRegKey); - } - - if (RegOpenKeyEx(HKEY_CURRENT_USER, key, 0, KEY_SET_VALUE, &hRegKey) - == ERROR_SUCCESS) { - RegDeleteValue(hRegKey, valueName); - RegCloseKey(hRegKey); - } -} - -static bool CheckBoolKey(const wchar_t* key, - const wchar_t* valueName, - bool* enabled) -{ - /* - * NOTE! This code needs to stay in sync with the preference checking - * code in in nsExceptionHandler.cpp. - */ - *enabled = false; - bool found = false; - HKEY hRegKey; - DWORD val; - // see if our reg key is set globally - if (RegOpenKey(HKEY_LOCAL_MACHINE, key, &hRegKey) == ERROR_SUCCESS) { - if (GetBoolValue(hRegKey, valueName, &val)) { - *enabled = (val == 1); - found = true; - } - RegCloseKey(hRegKey); - } else { - // look for it in user settings - if (RegOpenKey(HKEY_CURRENT_USER, key, &hRegKey) == ERROR_SUCCESS) { - if (GetBoolValue(hRegKey, valueName, &val)) { - *enabled = (val == 1); - found = true; - } - RegCloseKey(hRegKey); - } - } - - return found; -} - -static void SetBoolKey(const wchar_t* key, const wchar_t* value, bool enabled) -{ - /* - * NOTE! This code needs to stay in sync with the preference setting - * code in in nsExceptionHandler.cpp. - */ - HKEY hRegKey; - - // remove the old value from the registry if it exists - RemoveUnusedValues(key, SUBMIT_REPORT_OLD); - - if (RegCreateKey(HKEY_CURRENT_USER, key, &hRegKey) == ERROR_SUCCESS) { - DWORD data = (enabled ? 1 : 0); - RegSetValueEx(hRegKey, value, 0, REG_DWORD, (LPBYTE)&data, sizeof(data)); - RegCloseKey(hRegKey); - } -} - -static bool GetStringValue(HKEY hRegKey, LPCTSTR valueName, wstring& value) -{ - DWORD type, dataSize; - wchar_t buf[2048]; - dataSize = sizeof(buf); - if (RegQueryValueEx(hRegKey, valueName, nullptr, - &type, (LPBYTE)buf, &dataSize) == ERROR_SUCCESS && - type == REG_SZ) { - value = buf; - return true; - } - - return false; -} - -static bool GetStringKey(const wchar_t* key, - const wchar_t* valueName, - wstring& value) -{ - value = L""; - bool found = false; - HKEY hRegKey; - // see if our reg key is set globally - if (RegOpenKey(HKEY_LOCAL_MACHINE, key, &hRegKey) == ERROR_SUCCESS) { - if (GetStringValue(hRegKey, valueName, value)) { - found = true; - } - RegCloseKey(hRegKey); - } else { - // look for it in user settings - if (RegOpenKey(HKEY_CURRENT_USER, key, &hRegKey) == ERROR_SUCCESS) { - if (GetStringValue(hRegKey, valueName, value)) { - found = true; - } - RegCloseKey(hRegKey); - } - } - - return found; -} - -static void SetStringKey(const wchar_t* key, - const wchar_t* valueName, - const wstring& value) -{ - HKEY hRegKey; - if (RegCreateKey(HKEY_CURRENT_USER, key, &hRegKey) == ERROR_SUCCESS) { - RegSetValueEx(hRegKey, valueName, 0, REG_SZ, - (LPBYTE)value.c_str(), - (value.length() + 1) * sizeof(wchar_t)); - RegCloseKey(hRegKey); - } -} - -static string FormatLastError() -{ - DWORD err = GetLastError(); - LPWSTR s; - string message = "Crash report submission failed: "; - // odds are it's a WinInet error - HANDLE hInetModule = GetModuleHandle(L"WinInet.dll"); - if(FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_FROM_HMODULE, - hInetModule, - err, - 0, - (LPWSTR)&s, - 0, - nullptr) != 0) { - message += WideToUTF8(s, nullptr); - LocalFree(s); - // strip off any trailing newlines - string::size_type n = message.find_last_not_of("\r\n"); - if (n < message.size() - 1) { - message.erase(n+1); - } - } - else { - char buf[64]; - sprintf(buf, "Unknown error, error code: 0x%08x", err); - message += buf; - } - return message; -} - -#define TS_DRAW 2 -#define BP_CHECKBOX 3 - -typedef HANDLE (WINAPI*OpenThemeDataPtr)(HWND hwnd, LPCWSTR pszClassList); -typedef HRESULT (WINAPI*CloseThemeDataPtr)(HANDLE hTheme); -typedef HRESULT (WINAPI*GetThemePartSizePtr)(HANDLE hTheme, HDC hdc, int iPartId, - int iStateId, RECT* prc, int ts, - SIZE* psz); -typedef HRESULT (WINAPI*GetThemeContentRectPtr)(HANDLE hTheme, HDC hdc, int iPartId, - int iStateId, const RECT* pRect, - RECT* pContentRect); - - -static void GetThemeSizes(HWND hwnd) -{ - HMODULE themeDLL = LoadLibrary(L"uxtheme.dll"); - - if (!themeDLL) - return; - - OpenThemeDataPtr openTheme = - (OpenThemeDataPtr)GetProcAddress(themeDLL, "OpenThemeData"); - CloseThemeDataPtr closeTheme = - (CloseThemeDataPtr)GetProcAddress(themeDLL, "CloseThemeData"); - GetThemePartSizePtr getThemePartSize = - (GetThemePartSizePtr)GetProcAddress(themeDLL, "GetThemePartSize"); - - if (!openTheme || !closeTheme || !getThemePartSize) { - FreeLibrary(themeDLL); - return; - } - - HANDLE buttonTheme = openTheme(hwnd, L"Button"); - if (!buttonTheme) { - FreeLibrary(themeDLL); - return; - } - HDC hdc = GetDC(hwnd); - SIZE s; - getThemePartSize(buttonTheme, hdc, BP_CHECKBOX, 0, nullptr, TS_DRAW, &s); - gCheckboxPadding = s.cx; - closeTheme(buttonTheme); - FreeLibrary(themeDLL); -} - -// Gets the position of a window relative to another window's client area -static void GetRelativeRect(HWND hwnd, HWND hwndParent, RECT* r) -{ - GetWindowRect(hwnd, r); - MapWindowPoints(nullptr, hwndParent, (POINT*)r, 2); -} - -static void SetDlgItemVisible(HWND hwndDlg, UINT item, bool visible) -{ - HWND hwnd = GetDlgItem(hwndDlg, item); - - ShowWindow(hwnd, visible ? SW_SHOW : SW_HIDE); -} - -static void SetDlgItemDisabled(HWND hwndDlg, UINT item, bool disabled) -{ - HWND hwnd = GetDlgItem(hwndDlg, item); - LONG style = GetWindowLong(hwnd, GWL_STYLE); - if (!disabled) - style |= WS_DISABLED; - else - style &= ~WS_DISABLED; - - SetWindowLong(hwnd, GWL_STYLE, style); -} - -/* === Crash Reporting Dialog === */ - -static void StretchDialog(HWND hwndDlg, int ydiff) -{ - RECT r; - GetWindowRect(hwndDlg, &r); - r.bottom += ydiff; - MoveWindow(hwndDlg, r.left, r.top, - r.right - r.left, r.bottom - r.top, TRUE); -} - -static void ReflowDialog(HWND hwndDlg, int ydiff) -{ - // Move items attached to the bottom down/up by as much as - // the window resize - for (set::const_iterator item = gAttachedBottom.begin(); - item != gAttachedBottom.end(); - item++) { - RECT r; - HWND hwnd = GetDlgItem(hwndDlg, *item); - GetRelativeRect(hwnd, hwndDlg, &r); - r.top += ydiff; - r.bottom += ydiff; - MoveWindow(hwnd, r.left, r.top, - r.right - r.left, r.bottom - r.top, TRUE); - } -} - -static DWORD WINAPI SendThreadProc(LPVOID param) -{ - bool finishedOk; - SendThreadData* td = (SendThreadData*)param; - - if (td->sendURL.empty()) { - finishedOk = false; - LogMessage("No server URL, not sending report"); - } else { - google_breakpad::CrashReportSender sender(L""); - finishedOk = (sender.SendCrashReport(td->sendURL, - td->queryParameters, - td->files, - &td->serverResponse) - == google_breakpad::RESULT_SUCCEEDED); - if (finishedOk) { - LogMessage("Crash report submitted successfully"); - } - else { - // get an error string and print it to the log - //XXX: would be nice to get the HTTP status code here, filed: - // http://code.google.com/p/google-breakpad/issues/detail?id=220 - LogMessage(FormatLastError()); - } - } - - PostMessage(td->hDlg, WM_UPLOADCOMPLETE, finishedOk ? 1 : 0, 0); - - return 0; -} - -static void EndCrashReporterDialog(HWND hwndDlg, int code) -{ - // Save the current values to the registry - wchar_t email[MAX_EMAIL_LENGTH]; - GetDlgItemTextW(hwndDlg, IDC_EMAILTEXT, email, - sizeof(email) / sizeof(email[0])); - SetStringKey(gCrashReporterKey.c_str(), EMAIL_VALUE, email); - - SetBoolKey(gCrashReporterKey.c_str(), INCLUDE_URL_VALUE, - IsDlgButtonChecked(hwndDlg, IDC_INCLUDEURLCHECK) != 0); - SetBoolKey(gCrashReporterKey.c_str(), EMAIL_ME_VALUE, - IsDlgButtonChecked(hwndDlg, IDC_EMAILMECHECK) != 0); - SetBoolKey(gCrashReporterKey.c_str(), SUBMIT_REPORT_VALUE, - IsDlgButtonChecked(hwndDlg, IDC_SUBMITREPORTCHECK) != 0); - - EndDialog(hwndDlg, code); -} - -static void MaybeResizeProgressText(HWND hwndDlg) -{ - HWND hwndProgress = GetDlgItem(hwndDlg, IDC_PROGRESSTEXT); - HDC hdc = GetDC(hwndProgress); - HFONT hfont = (HFONT)SendMessage(hwndProgress, WM_GETFONT, 0, 0); - if (hfont) - SelectObject(hdc, hfont); - SIZE size; - RECT rect; - GetRelativeRect(hwndProgress, hwndDlg, &rect); - - wchar_t text[1024]; - GetWindowText(hwndProgress, text, 1024); - - if (!GetTextExtentPoint32(hdc, text, wcslen(text), &size)) - return; - - if (size.cx < (rect.right - rect.left)) - return; - - // Figure out how much we need to resize things vertically - // This is sort of a fudge, but it should be good enough. - int wantedHeight = size.cy * - (int)ceil((float)size.cx / (float)(rect.right - rect.left)); - int diff = wantedHeight - (rect.bottom - rect.top); - if (diff <= 0) - return; - - MoveWindow(hwndProgress, rect.left, rect.top, - rect.right - rect.left, - wantedHeight, - TRUE); - - gAttachedBottom.clear(); - gAttachedBottom.insert(IDC_CLOSEBUTTON); - gAttachedBottom.insert(IDC_RESTARTBUTTON); - - StretchDialog(hwndDlg, diff); - - for (int i = 0; i < sizeof(kDefaultAttachedBottom) / sizeof(UINT); i++) { - gAttachedBottom.insert(kDefaultAttachedBottom[i]); - } -} - -static void MaybeSendReport(HWND hwndDlg) -{ - if (!IsDlgButtonChecked(hwndDlg, IDC_SUBMITREPORTCHECK)) { - EndCrashReporterDialog(hwndDlg, 0); - return; - } - - // disable all the form controls - EnableWindow(GetDlgItem(hwndDlg, IDC_SUBMITREPORTCHECK), false); - EnableWindow(GetDlgItem(hwndDlg, IDC_VIEWREPORTBUTTON), false); - EnableWindow(GetDlgItem(hwndDlg, IDC_COMMENTTEXT), false); - EnableWindow(GetDlgItem(hwndDlg, IDC_INCLUDEURLCHECK), false); - EnableWindow(GetDlgItem(hwndDlg, IDC_EMAILMECHECK), false); - EnableWindow(GetDlgItem(hwndDlg, IDC_EMAILTEXT), false); - EnableWindow(GetDlgItem(hwndDlg, IDC_CLOSEBUTTON), false); - EnableWindow(GetDlgItem(hwndDlg, IDC_RESTARTBUTTON), false); - - SetDlgItemText(hwndDlg, IDC_PROGRESSTEXT, Str(ST_REPORTDURINGSUBMIT).c_str()); - MaybeResizeProgressText(hwndDlg); - // start throbber - // play entire AVI, and loop - Animate_Play(GetDlgItem(hwndDlg, IDC_THROBBER), 0, -1, -1); - SetDlgItemVisible(hwndDlg, IDC_THROBBER, true); - gThreadHandle = nullptr; - gSendData.hDlg = hwndDlg; - gSendData.queryParameters = gQueryParameters; - - gThreadHandle = CreateThread(nullptr, 0, SendThreadProc, &gSendData, 0, - nullptr); -} - -static void RestartApplication() -{ - wstring cmdLine; - - for (unsigned int i = 0; i < gRestartArgs.size(); i++) { - cmdLine += L"\"" + UTF8ToWide(gRestartArgs[i]) + L"\" "; - } - - STARTUPINFO si; - PROCESS_INFORMATION pi; - - ZeroMemory(&si, sizeof(si)); - si.cb = sizeof(si); - si.dwFlags = STARTF_USESHOWWINDOW; - si.wShowWindow = SW_SHOWNORMAL; - ZeroMemory(&pi, sizeof(pi)); - - if (CreateProcess(nullptr, (LPWSTR)cmdLine.c_str(), nullptr, nullptr, FALSE, - 0, nullptr, nullptr, &si, &pi)) { - CloseHandle(pi.hProcess); - CloseHandle(pi.hThread); - } -} - -static void ShowReportInfo(HWND hwndDlg) -{ - wstring description; - - for (map::const_iterator i = gQueryParameters.begin(); - i != gQueryParameters.end(); - i++) { - description += i->first; - description += L": "; - description += i->second; - description += L"\n"; - } - - description += L"\n"; - description += Str(ST_EXTRAREPORTINFO); - - SetDlgItemText(hwndDlg, IDC_VIEWREPORTTEXT, description.c_str()); -} - -static void UpdateURL(HWND hwndDlg) -{ - if (IsDlgButtonChecked(hwndDlg, IDC_INCLUDEURLCHECK)) { - gQueryParameters[L"URL"] = gURLParameter; - } else { - gQueryParameters.erase(L"URL"); - } -} - -static void UpdateEmail(HWND hwndDlg) -{ - if (IsDlgButtonChecked(hwndDlg, IDC_EMAILMECHECK)) { - wchar_t email[MAX_EMAIL_LENGTH]; - GetDlgItemTextW(hwndDlg, IDC_EMAILTEXT, email, - sizeof(email) / sizeof(email[0])); - gQueryParameters[L"Email"] = email; - if (IsDlgButtonChecked(hwndDlg, IDC_SUBMITREPORTCHECK)) - EnableWindow(GetDlgItem(hwndDlg, IDC_EMAILTEXT), true); - } else { - gQueryParameters.erase(L"Email"); - EnableWindow(GetDlgItem(hwndDlg, IDC_EMAILTEXT), false); - } -} - -static void UpdateComment(HWND hwndDlg) -{ - wchar_t comment[MAX_COMMENT_LENGTH + 1]; - GetDlgItemTextW(hwndDlg, IDC_COMMENTTEXT, comment, - sizeof(comment) / sizeof(comment[0])); - if (wcslen(comment) > 0) - gQueryParameters[L"Comments"] = comment; - else - gQueryParameters.erase(L"Comments"); -} - -/* - * Dialog procedure for the "view report" dialog. - */ -static BOOL CALLBACK ViewReportDialogProc(HWND hwndDlg, UINT message, - WPARAM wParam, LPARAM lParam) -{ - switch (message) { - case WM_INITDIALOG: { - SetWindowText(hwndDlg, Str(ST_VIEWREPORTTITLE).c_str()); - SetDlgItemText(hwndDlg, IDOK, Str(ST_OK).c_str()); - SendDlgItemMessage(hwndDlg, IDC_VIEWREPORTTEXT, - EM_SETTARGETDEVICE, (WPARAM)nullptr, 0); - ShowReportInfo(hwndDlg); - SetFocus(GetDlgItem(hwndDlg, IDOK)); - return FALSE; - } - - case WM_COMMAND: { - if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDOK) - EndDialog(hwndDlg, 0); - return FALSE; - } - } - return FALSE; -} - -// Return the number of bytes this string will take encoded -// in UTF-8 -static inline int BytesInUTF8(wchar_t* str) -{ - // Just count size of buffer for UTF-8, minus one - // (we don't need to count the null terminator) - return WideCharToMultiByte(CP_UTF8, 0, str, -1, - nullptr, 0, nullptr, nullptr) - 1; -} - -// Calculate the length of the text in this edit control (in bytes, -// in the UTF-8 encoding) after replacing the current selection -// with |insert|. -static int NewTextLength(HWND hwndEdit, wchar_t* insert) -{ - wchar_t current[MAX_COMMENT_LENGTH + 1]; - - GetWindowText(hwndEdit, current, MAX_COMMENT_LENGTH + 1); - DWORD selStart, selEnd; - SendMessage(hwndEdit, EM_GETSEL, (WPARAM)&selStart, (LPARAM)&selEnd); - - int selectionLength = 0; - if (selEnd - selStart > 0) { - wchar_t selection[MAX_COMMENT_LENGTH + 1]; - google_breakpad::WindowsStringUtils::safe_wcsncpy(selection, - MAX_COMMENT_LENGTH + 1, - current + selStart, - selEnd - selStart); - selection[selEnd - selStart] = '\0'; - selectionLength = BytesInUTF8(selection); - } - - // current string length + replacement text length - // - replaced selection length - return BytesInUTF8(current) + BytesInUTF8(insert) - selectionLength; -} - -// Window procedure for subclassing edit controls -static LRESULT CALLBACK EditSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, - LPARAM lParam) -{ - static WNDPROC super = nullptr; - - if (super == nullptr) - super = (WNDPROC)GetWindowLongPtr(hwnd, GWLP_USERDATA); - - switch (uMsg) { - case WM_PAINT: { - HDC hdc; - PAINTSTRUCT ps; - RECT r; - wchar_t windowText[1024]; - - GetWindowText(hwnd, windowText, 1024); - // if the control contains text or is focused, draw it normally - if (GetFocus() == hwnd || windowText[0] != '\0') - return CallWindowProc(super, hwnd, uMsg, wParam, lParam); - - GetClientRect(hwnd, &r); - hdc = BeginPaint(hwnd, &ps); - FillRect(hdc, &r, GetSysColorBrush(IsWindowEnabled(hwnd) - ? COLOR_WINDOW : COLOR_BTNFACE)); - SetTextColor(hdc, GetSysColor(COLOR_GRAYTEXT)); - SelectObject(hdc, (HFONT)GetStockObject(DEFAULT_GUI_FONT)); - SetBkMode(hdc, TRANSPARENT); - wchar_t* txt = (wchar_t*)GetProp(hwnd, L"PROP_GRAYTEXT"); - // Get the actual edit control rect - CallWindowProc(super, hwnd, EM_GETRECT, 0, (LPARAM)&r); - UINT format = DT_EDITCONTROL | DT_NOPREFIX | DT_WORDBREAK | DT_INTERNAL; - if (gRTLlayout) - format |= DT_RIGHT; - if (txt) - DrawText(hdc, txt, wcslen(txt), &r, format); - EndPaint(hwnd, &ps); - return 0; - } - - // We handle WM_CHAR and WM_PASTE to limit the comment box to 500 - // bytes in UTF-8. - case WM_CHAR: { - // Leave accelerator keys and non-printing chars (except LF) alone - if (wParam & (1<<24) || wParam & (1<<29) || - (wParam < ' ' && wParam != '\n')) - break; - - wchar_t ch[2] = { (wchar_t)wParam, 0 }; - if (NewTextLength(hwnd, ch) > MAX_COMMENT_LENGTH) - return 0; - - break; - } - - case WM_PASTE: { - if (IsClipboardFormatAvailable(CF_UNICODETEXT) && - OpenClipboard(hwnd)) { - HGLOBAL hg = GetClipboardData(CF_UNICODETEXT); - wchar_t* pastedText = (wchar_t*)GlobalLock(hg); - int newSize = 0; - - if (pastedText) - newSize = NewTextLength(hwnd, pastedText); - - GlobalUnlock(hg); - CloseClipboard(); - - if (newSize > MAX_COMMENT_LENGTH) - return 0; - } - break; - } - - case WM_SETFOCUS: - case WM_KILLFOCUS: { - RECT r; - GetClientRect(hwnd, &r); - InvalidateRect(hwnd, &r, TRUE); - break; - } - - case WM_DESTROY: { - // cleanup our property - HGLOBAL hData = RemoveProp(hwnd, L"PROP_GRAYTEXT"); - if (hData) - GlobalFree(hData); - } - } - - return CallWindowProc(super, hwnd, uMsg, wParam, lParam); -} - -// Resize a control to fit this text -static int ResizeControl(HWND hwndButton, RECT& rect, wstring text, - bool shiftLeft, int userDefinedPadding) -{ - HDC hdc = GetDC(hwndButton); - HFONT hfont = (HFONT)SendMessage(hwndButton, WM_GETFONT, 0, 0); - if (hfont) - SelectObject(hdc, hfont); - SIZE size, oldSize; - int sizeDiff = 0; - - wchar_t oldText[1024]; - GetWindowText(hwndButton, oldText, 1024); - - if (GetTextExtentPoint32(hdc, text.c_str(), text.length(), &size) - // default text on the button - && GetTextExtentPoint32(hdc, oldText, wcslen(oldText), &oldSize)) { - /* - Expand control widths to accomidate wider text strings. For most - controls (including buttons) the text padding is defined by the - dialog's rc file. Some controls (such as checkboxes) have padding - that extends to the end of the dialog, in which case we ignore the - rc padding and rely on a user defined value passed in through - userDefinedPadding. - */ - int textIncrease = size.cx - oldSize.cx; - if (textIncrease < 0) - return 0; - int existingTextPadding; - if (userDefinedPadding == 0) - existingTextPadding = (rect.right - rect.left) - oldSize.cx; - else - existingTextPadding = userDefinedPadding; - sizeDiff = textIncrease + existingTextPadding; - - if (shiftLeft) { - // shift left by the amount the button should grow - rect.left -= sizeDiff; - } - else { - // grow right instead - rect.right += sizeDiff; - } - MoveWindow(hwndButton, rect.left, rect.top, - rect.right - rect.left, - rect.bottom - rect.top, - TRUE); - } - return sizeDiff; -} - -// The window was resized horizontally, so widen some of our -// controls to make use of the space -static void StretchControlsToFit(HWND hwndDlg) -{ - int controls[] = { - IDC_DESCRIPTIONTEXT, - IDC_SUBMITREPORTCHECK, - IDC_COMMENTTEXT, - IDC_INCLUDEURLCHECK, - IDC_EMAILMECHECK, - IDC_EMAILTEXT, - IDC_PROGRESSTEXT - }; - - RECT dlgRect; - GetClientRect(hwndDlg, &dlgRect); - - for (int i=0; iexStyle |= WS_EX_LAYOUTRTL; - - rv = DialogBoxIndirectParam(nullptr, (LPCDLGTEMPLATE)pMyDlgTemplate, - hwndParent, dlgProc, param); - GlobalUnlock(hMyDlgTemplate); - GlobalFree(hMyDlgTemplate); - } - else { - rv = DialogBoxParam(nullptr, MAKEINTRESOURCE(idd), hwndParent, - dlgProc, param); - } - - return rv; -} - - -static BOOL CALLBACK CrashReporterDialogProc(HWND hwndDlg, UINT message, - WPARAM wParam, LPARAM lParam) -{ - static int sHeight = 0; - - bool success; - bool enabled; - - switch (message) { - case WM_INITDIALOG: { - GetThemeSizes(hwndDlg); - RECT r; - GetClientRect(hwndDlg, &r); - sHeight = r.bottom - r.top; - - SetWindowText(hwndDlg, Str(ST_CRASHREPORTERTITLE).c_str()); - HICON hIcon = LoadIcon(GetModuleHandle(nullptr), - MAKEINTRESOURCE(IDI_MAINICON)); - SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIcon); - SendMessage(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hIcon); - - // resize the "View Report" button based on the string length - RECT rect; - HWND hwnd = GetDlgItem(hwndDlg, IDC_VIEWREPORTBUTTON); - GetRelativeRect(hwnd, hwndDlg, &rect); - ResizeControl(hwnd, rect, Str(ST_VIEWREPORT), false, 0); - SetDlgItemText(hwndDlg, IDC_VIEWREPORTBUTTON, Str(ST_VIEWREPORT).c_str()); - - hwnd = GetDlgItem(hwndDlg, IDC_SUBMITREPORTCHECK); - GetRelativeRect(hwnd, hwndDlg, &rect); - long maxdiff = ResizeControl(hwnd, rect, Str(ST_CHECKSUBMIT), false, - gCheckboxPadding); - SetDlgItemText(hwndDlg, IDC_SUBMITREPORTCHECK, - Str(ST_CHECKSUBMIT).c_str()); - - if (!CheckBoolKey(gCrashReporterKey.c_str(), - SUBMIT_REPORT_VALUE, &enabled)) - enabled = ShouldEnableSending(); - - CheckDlgButton(hwndDlg, IDC_SUBMITREPORTCHECK, enabled ? BST_CHECKED - : BST_UNCHECKED); - SubmitReportChecked(hwndDlg); - - HWND hwndComment = GetDlgItem(hwndDlg, IDC_COMMENTTEXT); - WNDPROC OldWndProc = (WNDPROC)SetWindowLongPtr(hwndComment, - GWLP_WNDPROC, - (LONG_PTR)EditSubclassProc); - - // Subclass comment edit control to get placeholder text - SetWindowLongPtr(hwndComment, GWLP_USERDATA, (LONG_PTR)OldWndProc); - wstring commentGrayText = Str(ST_COMMENTGRAYTEXT); - wchar_t* hMem = (wchar_t*)GlobalAlloc(GPTR, (commentGrayText.length() + 1)*sizeof(wchar_t)); - wcscpy(hMem, commentGrayText.c_str()); - SetProp(hwndComment, L"PROP_GRAYTEXT", hMem); - - hwnd = GetDlgItem(hwndDlg, IDC_INCLUDEURLCHECK); - GetRelativeRect(hwnd, hwndDlg, &rect); - long diff = ResizeControl(hwnd, rect, Str(ST_CHECKURL), false, - gCheckboxPadding); - maxdiff = std::max(diff, maxdiff); - SetDlgItemText(hwndDlg, IDC_INCLUDEURLCHECK, Str(ST_CHECKURL).c_str()); - - // want this on by default - if (CheckBoolKey(gCrashReporterKey.c_str(), INCLUDE_URL_VALUE, &enabled) && - !enabled) { - CheckDlgButton(hwndDlg, IDC_INCLUDEURLCHECK, BST_UNCHECKED); - } else { - CheckDlgButton(hwndDlg, IDC_INCLUDEURLCHECK, BST_CHECKED); - } - - hwnd = GetDlgItem(hwndDlg, IDC_EMAILMECHECK); - GetRelativeRect(hwnd, hwndDlg, &rect); - diff = ResizeControl(hwnd, rect, Str(ST_CHECKEMAIL), false, - gCheckboxPadding); - maxdiff = std::max(diff, maxdiff); - SetDlgItemText(hwndDlg, IDC_EMAILMECHECK, Str(ST_CHECKEMAIL).c_str()); - - if (CheckBoolKey(gCrashReporterKey.c_str(), EMAIL_ME_VALUE, &enabled) && - enabled) { - CheckDlgButton(hwndDlg, IDC_EMAILMECHECK, BST_CHECKED); - } else { - CheckDlgButton(hwndDlg, IDC_EMAILMECHECK, BST_UNCHECKED); - } - - wstring email; - if (GetStringKey(gCrashReporterKey.c_str(), EMAIL_VALUE, email)) { - SetDlgItemText(hwndDlg, IDC_EMAILTEXT, email.c_str()); - } - - // Subclass email edit control to get placeholder text - HWND hwndEmail = GetDlgItem(hwndDlg, IDC_EMAILTEXT); - OldWndProc = (WNDPROC)SetWindowLongPtr(hwndEmail, - GWLP_WNDPROC, - (LONG_PTR)EditSubclassProc); - SetWindowLongPtr(hwndEmail, GWLP_USERDATA, (LONG_PTR)OldWndProc); - wstring emailGrayText = Str(ST_EMAILGRAYTEXT); - hMem = (wchar_t*)GlobalAlloc(GPTR, (emailGrayText.length() + 1)*sizeof(wchar_t)); - wcscpy(hMem, emailGrayText.c_str()); - SetProp(hwndEmail, L"PROP_GRAYTEXT", hMem); - - SetDlgItemText(hwndDlg, IDC_PROGRESSTEXT, Str(ST_REPORTPRESUBMIT).c_str()); - - RECT closeRect; - HWND hwndClose = GetDlgItem(hwndDlg, IDC_CLOSEBUTTON); - GetRelativeRect(hwndClose, hwndDlg, &closeRect); - - RECT restartRect; - HWND hwndRestart = GetDlgItem(hwndDlg, IDC_RESTARTBUTTON); - GetRelativeRect(hwndRestart, hwndDlg, &restartRect); - - // set the close button text and shift the buttons around - // since the size may need to change - int sizeDiff = ResizeControl(hwndClose, closeRect, Str(ST_QUIT), - true, 0); - restartRect.left -= sizeDiff; - restartRect.right -= sizeDiff; - SetDlgItemText(hwndDlg, IDC_CLOSEBUTTON, Str(ST_QUIT).c_str()); - - if (gRestartArgs.size() > 0) { - // Resize restart button to fit text - ResizeControl(hwndRestart, restartRect, Str(ST_RESTART), true, 0); - SetDlgItemText(hwndDlg, IDC_RESTARTBUTTON, Str(ST_RESTART).c_str()); - } else { - // No restart arguments, so just hide the restart button - SetDlgItemVisible(hwndDlg, IDC_RESTARTBUTTON, false); - } - // See if we need to widen the window - // Leave 6 pixels on either side + 6 pixels between the buttons - int neededSize = closeRect.right - closeRect.left + - restartRect.right - restartRect.left + 6 * 3; - GetClientRect(hwndDlg, &r); - // We may already have resized one of the checkboxes above - maxdiff = std::max(maxdiff, neededSize - (r.right - r.left)); - - if (maxdiff > 0) { - // widen window - GetWindowRect(hwndDlg, &r); - r.right += maxdiff; - MoveWindow(hwndDlg, r.left, r.top, - r.right - r.left, r.bottom - r.top, TRUE); - // shift both buttons right - if (restartRect.left + maxdiff < 6) - maxdiff += 6; - closeRect.left += maxdiff; - closeRect.right += maxdiff; - restartRect.left += maxdiff; - restartRect.right += maxdiff; - MoveWindow(hwndClose, closeRect.left, closeRect.top, - closeRect.right - closeRect.left, - closeRect.bottom - closeRect.top, - TRUE); - StretchControlsToFit(hwndDlg); - } - // need to move the restart button regardless - MoveWindow(hwndRestart, restartRect.left, restartRect.top, - restartRect.right - restartRect.left, - restartRect.bottom - restartRect.top, - TRUE); - - // Resize the description text last, in case the window was resized - // before this. - SendDlgItemMessage(hwndDlg, IDC_DESCRIPTIONTEXT, - EM_SETEVENTMASK, (WPARAM)nullptr, - ENM_REQUESTRESIZE); - - wstring description = Str(ST_CRASHREPORTERHEADER); - description += L"\n\n"; - description += Str(ST_CRASHREPORTERDESCRIPTION); - SetDlgItemText(hwndDlg, IDC_DESCRIPTIONTEXT, description.c_str()); - - - // Make the title bold. - CHARFORMAT fmt = { 0, }; - fmt.cbSize = sizeof(fmt); - fmt.dwMask = CFM_BOLD; - fmt.dwEffects = CFE_BOLD; - SendDlgItemMessage(hwndDlg, IDC_DESCRIPTIONTEXT, EM_SETSEL, - 0, Str(ST_CRASHREPORTERHEADER).length()); - SendDlgItemMessage(hwndDlg, IDC_DESCRIPTIONTEXT, EM_SETCHARFORMAT, - SCF_SELECTION, (LPARAM)&fmt); - SendDlgItemMessage(hwndDlg, IDC_DESCRIPTIONTEXT, EM_SETSEL, 0, 0); - // Force redraw. - SendDlgItemMessage(hwndDlg, IDC_DESCRIPTIONTEXT, - EM_SETTARGETDEVICE, (WPARAM)nullptr, 0); - // Force resize. - SendDlgItemMessage(hwndDlg, IDC_DESCRIPTIONTEXT, - EM_REQUESTRESIZE, 0, 0); - - // if no URL was given, hide the URL checkbox - if (gQueryParameters.find(L"URL") == gQueryParameters.end()) { - RECT urlCheckRect, emailCheckRect; - GetWindowRect(GetDlgItem(hwndDlg, IDC_INCLUDEURLCHECK), &urlCheckRect); - GetWindowRect(GetDlgItem(hwndDlg, IDC_EMAILMECHECK), &emailCheckRect); - - SetDlgItemVisible(hwndDlg, IDC_INCLUDEURLCHECK, false); - - gAttachedBottom.erase(IDC_VIEWREPORTBUTTON); - gAttachedBottom.erase(IDC_SUBMITREPORTCHECK); - gAttachedBottom.erase(IDC_COMMENTTEXT); - - StretchDialog(hwndDlg, urlCheckRect.top - emailCheckRect.top); - - gAttachedBottom.insert(IDC_VIEWREPORTBUTTON); - gAttachedBottom.insert(IDC_SUBMITREPORTCHECK); - gAttachedBottom.insert(IDC_COMMENTTEXT); - } - - MaybeResizeProgressText(hwndDlg); - - // Open the AVI resource for the throbber - Animate_Open(GetDlgItem(hwndDlg, IDC_THROBBER), - MAKEINTRESOURCE(IDR_THROBBER)); - - UpdateURL(hwndDlg); - UpdateEmail(hwndDlg); - - SetFocus(GetDlgItem(hwndDlg, IDC_SUBMITREPORTCHECK)); - return FALSE; - } - case WM_SIZE: { - ReflowDialog(hwndDlg, HIWORD(lParam) - sHeight); - sHeight = HIWORD(lParam); - InvalidateRect(hwndDlg, nullptr, TRUE); - return FALSE; - } - case WM_NOTIFY: { - NMHDR* notification = reinterpret_cast(lParam); - if (notification->code == EN_REQUESTRESIZE) { - // Resizing the rich edit control to fit the description text. - REQRESIZE* reqresize = reinterpret_cast(lParam); - RECT newSize = reqresize->rc; - RECT oldSize; - GetRelativeRect(notification->hwndFrom, hwndDlg, &oldSize); - - // resize the text box as requested - MoveWindow(notification->hwndFrom, newSize.left, newSize.top, - newSize.right - newSize.left, newSize.bottom - newSize.top, - TRUE); - - // Resize the dialog to fit (the WM_SIZE handler will move the controls) - StretchDialog(hwndDlg, newSize.bottom - oldSize.bottom); - } - return FALSE; - } - case WM_COMMAND: { - if (HIWORD(wParam) == BN_CLICKED) { - switch(LOWORD(wParam)) { - case IDC_VIEWREPORTBUTTON: - DialogBoxParamMaybeRTL(IDD_VIEWREPORTDIALOG, hwndDlg, - (DLGPROC)ViewReportDialogProc, 0); - break; - case IDC_SUBMITREPORTCHECK: - SubmitReportChecked(hwndDlg); - break; - case IDC_INCLUDEURLCHECK: - UpdateURL(hwndDlg); - break; - case IDC_EMAILMECHECK: - UpdateEmail(hwndDlg); - break; - case IDC_CLOSEBUTTON: - MaybeSendReport(hwndDlg); - break; - case IDC_RESTARTBUTTON: - RestartApplication(); - MaybeSendReport(hwndDlg); - break; - } - } else if (HIWORD(wParam) == EN_CHANGE) { - switch(LOWORD(wParam)) { - case IDC_EMAILTEXT: - UpdateEmail(hwndDlg); - break; - case IDC_COMMENTTEXT: - UpdateComment(hwndDlg); - } - } - - return FALSE; - } - case WM_UPLOADCOMPLETE: { - WaitForSingleObject(gThreadHandle, INFINITE); - success = (wParam == 1); - SendCompleted(success, WideToUTF8(gSendData.serverResponse)); - // hide throbber - Animate_Stop(GetDlgItem(hwndDlg, IDC_THROBBER)); - SetDlgItemVisible(hwndDlg, IDC_THROBBER, false); - - SetDlgItemText(hwndDlg, IDC_PROGRESSTEXT, - success ? - Str(ST_REPORTSUBMITSUCCESS).c_str() : - Str(ST_SUBMITFAILED).c_str()); - MaybeResizeProgressText(hwndDlg); - // close dialog after 5 seconds - SetTimer(hwndDlg, 0, 5000, nullptr); - // - return TRUE; - } - - case WM_LBUTTONDOWN: { - HWND hwndEmail = GetDlgItem(hwndDlg, IDC_EMAILTEXT); - POINT p = { LOWORD(lParam), HIWORD(lParam) }; - // if the email edit control is clicked, enable it, - // check the email checkbox, and focus the email edit control - if (ChildWindowFromPoint(hwndDlg, p) == hwndEmail && - IsWindowEnabled(GetDlgItem(hwndDlg, IDC_RESTARTBUTTON)) && - !IsWindowEnabled(hwndEmail) && - IsDlgButtonChecked(hwndDlg, IDC_SUBMITREPORTCHECK) != 0) { - CheckDlgButton(hwndDlg, IDC_EMAILMECHECK, BST_CHECKED); - UpdateEmail(hwndDlg); - SetFocus(hwndEmail); - } - break; - } - - case WM_TIMER: { - // The "1" gets used down in UIShowCrashUI to indicate that we at least - // tried to send the report. - EndCrashReporterDialog(hwndDlg, 1); - return FALSE; - } - - case WM_CLOSE: { - EndCrashReporterDialog(hwndDlg, 0); - return FALSE; - } - } - return FALSE; -} - -static wstring UTF8ToWide(const string& utf8, bool *success) -{ - wchar_t* buffer = nullptr; - int buffer_size = MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), - -1, nullptr, 0); - if(buffer_size == 0) { - if (success) - *success = false; - return L""; - } - - buffer = new wchar_t[buffer_size]; - if(buffer == nullptr) { - if (success) - *success = false; - return L""; - } - - MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), - -1, buffer, buffer_size); - wstring str = buffer; - delete [] buffer; - - if (success) - *success = true; - - return str; -} - -static string WideToMBCP(const wstring& wide, - unsigned int cp, - bool* success = nullptr) -{ - char* buffer = nullptr; - int buffer_size = WideCharToMultiByte(cp, 0, wide.c_str(), - -1, nullptr, 0, nullptr, nullptr); - if(buffer_size == 0) { - if (success) - *success = false; - return ""; - } - - buffer = new char[buffer_size]; - if(buffer == nullptr) { - if (success) - *success = false; - return ""; - } - - WideCharToMultiByte(cp, 0, wide.c_str(), - -1, buffer, buffer_size, nullptr, nullptr); - string mb = buffer; - delete [] buffer; - - if (success) - *success = true; - - return mb; -} - -string WideToUTF8(const wstring& wide, bool* success) -{ - return WideToMBCP(wide, CP_UTF8, success); -} - -/* === Crashreporter UI Functions === */ - -bool UIInit() -{ - for (int i = 0; i < sizeof(kDefaultAttachedBottom) / sizeof(UINT); i++) { - gAttachedBottom.insert(kDefaultAttachedBottom[i]); - } - - DoInitCommonControls(); - - return true; -} - -void UIShutdown() -{ -} - -void UIShowDefaultUI() -{ - MessageBox(nullptr, Str(ST_CRASHREPORTERDEFAULT).c_str(), - L"Crash Reporter", - MB_OK | MB_ICONSTOP); -} - -static bool CanUseMainCrashReportServer() -{ - // Any NT from 6.0 and above is fine. - if (IsWindowsVersionOrGreater(6, 0, 0)) { - return true; - } - - // On NT 5 servers, we need Server 2003 SP2. - if (IsWindowsServer()) { - return IsWindowsVersionOrGreater(5, 2, 2); - } - - // Otherwise we have an NT 5 client. - // We need exactly XP SP3 (version 5.1 SP3 but not version 5.2). - return (IsWindowsVersionOrGreater(5, 1, 3) && - !IsWindowsVersionOrGreater(5, 2, 0)); -} - -bool UIShowCrashUI(const StringTable& files, - const StringTable& queryParameters, - const string& sendURL, - const vector& restartArgs) -{ - gSendData.hDlg = nullptr; - gSendData.sendURL = UTF8ToWide(sendURL); - - // Older Windows don't support the crash report server's crypto. - // This is a hack to use an alternate server. - if (!CanUseMainCrashReportServer() && - gSendData.sendURL.find(SENDURL_ORIGINAL) == 0) { - gSendData.sendURL.replace(0, ARRAYSIZE(SENDURL_ORIGINAL) - 1, - SENDURL_XPSP2); - } - - for (StringTable::const_iterator i = files.begin(); - i != files.end(); - i++) { - gSendData.files[UTF8ToWide(i->first)] = UTF8ToWide(i->second); - } - - for (StringTable::const_iterator i = queryParameters.begin(); - i != queryParameters.end(); - i++) { - gQueryParameters[UTF8ToWide(i->first)] = UTF8ToWide(i->second); - } - - if (gQueryParameters.find(L"Vendor") != gQueryParameters.end()) { - gCrashReporterKey = L"Software\\"; - if (!gQueryParameters[L"Vendor"].empty()) { - gCrashReporterKey += gQueryParameters[L"Vendor"] + L"\\"; - } - gCrashReporterKey += gQueryParameters[L"ProductName"] + L"\\Crash Reporter"; - } - - if (gQueryParameters.find(L"URL") != gQueryParameters.end()) - gURLParameter = gQueryParameters[L"URL"]; - - gRestartArgs = restartArgs; - - if (gStrings.find("isRTL") != gStrings.end() && - gStrings["isRTL"] == "yes") - gRTLlayout = true; - - return 1 == DialogBoxParamMaybeRTL(IDD_SENDDIALOG, nullptr, - (DLGPROC)CrashReporterDialogProc, 0); -} - -void UIError_impl(const string& message) -{ - wstring title = Str(ST_CRASHREPORTERTITLE); - if (title.empty()) - title = L"Crash Reporter Error"; - - MessageBox(nullptr, UTF8ToWide(message).c_str(), title.c_str(), - MB_OK | MB_ICONSTOP); -} - -bool UIGetIniPath(string& path) -{ - wchar_t fileName[MAX_PATH]; - if (GetModuleFileName(nullptr, fileName, MAX_PATH)) { - // get crashreporter ini - wchar_t* s = wcsrchr(fileName, '.'); - if (s) { - wcscpy(s, L".ini"); - path = WideToUTF8(fileName); - return true; - } - } - - return false; -} - -bool UIGetSettingsPath(const string& vendor, - const string& product, - string& settings_path) -{ - wchar_t path[MAX_PATH]; - HRESULT hRes = SHGetFolderPath(nullptr, - CSIDL_APPDATA, - nullptr, - 0, - path); - if (FAILED(hRes)) { - // This provides a fallback for getting the path to APPDATA by querying the - // registry when the call to SHGetFolderPath is unable to provide this path - // (Bug 513958). - HKEY key; - DWORD type, size, dwRes; - dwRes = ::RegOpenKeyExW(HKEY_CURRENT_USER, - L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", - 0, - KEY_READ, - &key); - if (dwRes != ERROR_SUCCESS) - return false; - - dwRes = RegQueryValueExW(key, - L"AppData", - nullptr, - &type, - (LPBYTE)&path, - &size); - ::RegCloseKey(key); - // The call to RegQueryValueExW must succeed, the type must be REG_SZ, the - // buffer size must not equal 0, and the buffer size be a multiple of 2. - if (dwRes != ERROR_SUCCESS || type != REG_SZ || size == 0 || size % 2 != 0) - return false; - } - - if (!vendor.empty()) { - PathAppend(path, UTF8ToWide(vendor).c_str()); - } - PathAppend(path, UTF8ToWide(product).c_str()); - PathAppend(path, L"Crash Reports"); - settings_path = WideToUTF8(path); - return true; -} - -bool UIEnsurePathExists(const string& path) -{ - if (CreateDirectory(UTF8ToWide(path).c_str(), nullptr) == 0) { - if (GetLastError() != ERROR_ALREADY_EXISTS) - return false; - } - - return true; -} - -bool UIFileExists(const string& path) -{ - DWORD attrs = GetFileAttributes(UTF8ToWide(path).c_str()); - return (attrs != INVALID_FILE_ATTRIBUTES); -} - -bool UIMoveFile(const string& oldfile, const string& newfile) -{ - if (oldfile == newfile) - return true; - - return MoveFile(UTF8ToWide(oldfile).c_str(), UTF8ToWide(newfile).c_str()) - == TRUE; -} - -bool UIDeleteFile(const string& oldfile) -{ - return DeleteFile(UTF8ToWide(oldfile).c_str()) == TRUE; -} - -ifstream* UIOpenRead(const string& filename) -{ - // adapted from breakpad's src/common/windows/http_upload.cc - -#if defined(_MSC_VER) - ifstream* file = new ifstream(); - file->open(UTF8ToWide(filename).c_str(), ios::in); -#else // GCC - ifstream* file = new ifstream(WideToMBCP(UTF8ToWide(filename), CP_ACP).c_str(), - ios::in); -#endif // _MSC_VER - - return file; -} - -ofstream* UIOpenWrite(const string& filename, - bool append, // append=false - bool binary) // binary=false -{ - // adapted from breakpad's src/common/windows/http_upload.cc - std::ios_base::openmode mode = ios::out; - if (append) { - mode = mode | ios::app; - } - if (binary) { - mode = mode | ios::binary; - } - -#if defined(_MSC_VER) - ofstream* file = new ofstream(); - file->open(UTF8ToWide(filename).c_str(), mode); -#else // GCC - ofstream* file = new ofstream(WideToMBCP(UTF8ToWide(filename), CP_ACP).c_str(), - mode); -#endif // _MSC_VER - - return file; -} - -struct FileData -{ - FILETIME timestamp; - wstring path; -}; - -static bool CompareFDTime(const FileData& fd1, const FileData& fd2) -{ - return CompareFileTime(&fd1.timestamp, &fd2.timestamp) > 0; -} - -void UIPruneSavedDumps(const std::string& directory) -{ - wstring wdirectory = UTF8ToWide(directory); - - WIN32_FIND_DATA fdata; - wstring findpath = wdirectory + L"\\*.dmp"; - HANDLE dirlist = FindFirstFile(findpath.c_str(), &fdata); - if (dirlist == INVALID_HANDLE_VALUE) - return; - - vector dumpfiles; - - for (BOOL ok = true; ok; ok = FindNextFile(dirlist, &fdata)) { - FileData fd = {fdata.ftLastWriteTime, wdirectory + L"\\" + fdata.cFileName}; - dumpfiles.push_back(fd); - } - - sort(dumpfiles.begin(), dumpfiles.end(), CompareFDTime); - - while (dumpfiles.size() > kSaveCount) { - // get the path of the oldest file - wstring path = (--dumpfiles.end())->path; - DeleteFile(path.c_str()); - - // s/.dmp/.extra/ - path.replace(path.size() - 4, 4, L".extra"); - DeleteFile(path.c_str()); - - dumpfiles.pop_back(); - } -} - -void UIRunMinidumpAnalyzer(const string& exename, const string& filename) -{ - wstring cmdLine; - - cmdLine += L"\"" + UTF8ToWide(exename) + L"\" "; - cmdLine += L"\"" + UTF8ToWide(filename) + L"\" "; - - STARTUPINFO si = {}; - PROCESS_INFORMATION pi = {}; - - si.cb = sizeof(si); - si.dwFlags = STARTF_USESHOWWINDOW; - si.wShowWindow = SW_SHOWNORMAL; - - if (CreateProcess(nullptr, (LPWSTR)cmdLine.c_str(), nullptr, nullptr, FALSE, - 0, nullptr, nullptr, &si, &pi)) { - WaitForSingleObject(pi.hProcess, INFINITE); - CloseHandle(pi.hProcess); - CloseHandle(pi.hThread); - } -} diff --git a/toolkit/crashreporter/client/macbuild/Contents/Info.plist b/toolkit/crashreporter/client/macbuild/Contents/Info.plist deleted file mode 100644 index 299581f52..000000000 --- a/toolkit/crashreporter/client/macbuild/Contents/Info.plist +++ /dev/null @@ -1,32 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleDisplayName - crashreporter - CFBundleExecutable - crashreporter - CFBundleIconFile - crashreporter.icns - CFBundleIdentifier - org.mozilla.crashreporter - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - crashreporter - CFBundlePackageType - APPL - CFBundleSignature - ???? - CFBundleVersion - 1.0 - LSHasLocalizedDisplayName - - NSMainNibFile - MainMenu - NSPrincipalClass - NSApplication - - diff --git a/toolkit/crashreporter/client/macbuild/Contents/PkgInfo b/toolkit/crashreporter/client/macbuild/Contents/PkgInfo deleted file mode 100644 index cae6d0a58..000000000 --- a/toolkit/crashreporter/client/macbuild/Contents/PkgInfo +++ /dev/null @@ -1,2 +0,0 @@ -APPL???? - diff --git a/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/InfoPlist.strings.in b/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/InfoPlist.strings.in deleted file mode 100644 index 6fe086e35..000000000 --- a/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/InfoPlist.strings.in +++ /dev/null @@ -1,8 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/* Localized versions of Info.plist keys */ - -CFBundleName = "Crash Reporter"; -CFBundleDisplayName = "Crash Reporter"; diff --git a/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenu.nib/classes.nib b/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenu.nib/classes.nib deleted file mode 100644 index e31ff0bfb..000000000 --- a/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenu.nib/classes.nib +++ /dev/null @@ -1,102 +0,0 @@ - - - - - IBClasses - - - ACTIONS - - closeClicked - id - emailMeClicked - id - includeURLClicked - id - restartClicked - id - submitReportClicked - id - viewReportClicked - id - viewReportOkClicked - id - - CLASS - CrashReporterUI - LANGUAGE - ObjC - OUTLETS - - mCloseButton - NSButton - mCommentScrollView - NSScrollView - mCommentText - TextViewWithPlaceHolder - mDescriptionLabel - NSTextField - mEmailMeButton - NSButton - mEmailText - NSTextField - mErrorCloseButton - NSButton - mErrorHeaderLabel - NSTextField - mErrorLabel - NSTextField - mErrorView - NSView - mHeaderLabel - NSTextField - mIncludeURLButton - NSButton - mProgressIndicator - NSProgressIndicator - mProgressText - NSTextField - mRestartButton - NSButton - mSubmitReportButton - NSButton - mViewReportButton - NSButton - mViewReportOkButton - NSButton - mViewReportTextView - NSTextView - mViewReportWindow - NSWindow - mWindow - NSWindow - - SUPERCLASS - NSObject - - - ACTIONS - - insertTab - id - - CLASS - TextViewWithPlaceHolder - LANGUAGE - ObjC - SUPERCLASS - NSTextView - - - CLASS - FirstResponder - LANGUAGE - ObjC - SUPERCLASS - NSObject - - - IBVersion - 1 - - diff --git a/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenu.nib/info.nib b/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenu.nib/info.nib deleted file mode 100644 index 517349ffc..000000000 --- a/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenu.nib/info.nib +++ /dev/null @@ -1,18 +0,0 @@ - - - - - IBFramework Version - 629 - IBOldestOS - 5 - IBOpenObjects - - 2 - - IBSystem Version - 9C7010 - targetFramework - IBCocoaFramework - - diff --git a/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenu.nib/keyedobjects.nib b/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenu.nib/keyedobjects.nib deleted file mode 100644 index bfdcccb74..000000000 Binary files a/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenu.nib/keyedobjects.nib and /dev/null differ diff --git a/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenuRTL.nib/classes.nib b/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenuRTL.nib/classes.nib deleted file mode 100644 index e31ff0bfb..000000000 --- a/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenuRTL.nib/classes.nib +++ /dev/null @@ -1,102 +0,0 @@ - - - - - IBClasses - - - ACTIONS - - closeClicked - id - emailMeClicked - id - includeURLClicked - id - restartClicked - id - submitReportClicked - id - viewReportClicked - id - viewReportOkClicked - id - - CLASS - CrashReporterUI - LANGUAGE - ObjC - OUTLETS - - mCloseButton - NSButton - mCommentScrollView - NSScrollView - mCommentText - TextViewWithPlaceHolder - mDescriptionLabel - NSTextField - mEmailMeButton - NSButton - mEmailText - NSTextField - mErrorCloseButton - NSButton - mErrorHeaderLabel - NSTextField - mErrorLabel - NSTextField - mErrorView - NSView - mHeaderLabel - NSTextField - mIncludeURLButton - NSButton - mProgressIndicator - NSProgressIndicator - mProgressText - NSTextField - mRestartButton - NSButton - mSubmitReportButton - NSButton - mViewReportButton - NSButton - mViewReportOkButton - NSButton - mViewReportTextView - NSTextView - mViewReportWindow - NSWindow - mWindow - NSWindow - - SUPERCLASS - NSObject - - - ACTIONS - - insertTab - id - - CLASS - TextViewWithPlaceHolder - LANGUAGE - ObjC - SUPERCLASS - NSTextView - - - CLASS - FirstResponder - LANGUAGE - ObjC - SUPERCLASS - NSObject - - - IBVersion - 1 - - diff --git a/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenuRTL.nib/info.nib b/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenuRTL.nib/info.nib deleted file mode 100644 index 4a2251aaf..000000000 --- a/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenuRTL.nib/info.nib +++ /dev/null @@ -1,18 +0,0 @@ - - - - - IBFramework Version - 629 - IBOldestOS - 5 - IBOpenObjects - - 2 - - IBSystem Version - 9D34 - targetFramework - IBCocoaFramework - - diff --git a/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenuRTL.nib/keyedobjects.nib b/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenuRTL.nib/keyedobjects.nib deleted file mode 100644 index 6c93849b9..000000000 Binary files a/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenuRTL.nib/keyedobjects.nib and /dev/null differ diff --git a/toolkit/crashreporter/client/macbuild/Contents/Resources/crashreporter.icns b/toolkit/crashreporter/client/macbuild/Contents/Resources/crashreporter.icns deleted file mode 100644 index 341cd05a4..000000000 Binary files a/toolkit/crashreporter/client/macbuild/Contents/Resources/crashreporter.icns and /dev/null differ diff --git a/toolkit/crashreporter/client/moz.build b/toolkit/crashreporter/client/moz.build deleted file mode 100644 index 456c794af..000000000 --- a/toolkit/crashreporter/client/moz.build +++ /dev/null @@ -1,78 +0,0 @@ -# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -if CONFIG['OS_TARGET'] != 'Android': - Program('crashreporter') - - UNIFIED_SOURCES += [ - 'crashreporter.cpp', - ] - -if CONFIG['OS_ARCH'] == 'WINNT': - UNIFIED_SOURCES += [ - 'crashreporter_win.cpp', - ] - DEFINES['UNICODE'] = True - DEFINES['_UNICODE'] = True - USE_LIBS += [ - 'google_breakpad_libxul_s', - ] - OS_LIBS += [ - 'comctl32', - 'shell32', - 'wininet', - 'shlwapi', - ] -elif CONFIG['OS_ARCH'] == 'Darwin': - UNIFIED_SOURCES += [ - 'crashreporter_osx.mm', - 'crashreporter_unix_common.cpp', - ] - LOCAL_INCLUDES += [ - '../google-breakpad/src/common/mac', - ] - OS_LIBS += ['-framework Cocoa'] - USE_LIBS += [ - 'breakpad_common_s', - 'breakpad_mac_common_s', - ] -elif CONFIG['OS_ARCH'] == 'SunOS': - SOURCES += [ - 'crashreporter_linux.cpp', - 'crashreporter_unix.cpp', - ] - USE_LIBS += [ - 'breakpad_solaris_common_s', - ] - -if 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']: - UNIFIED_SOURCES += [ - 'crashreporter_gtk_common.cpp', - 'crashreporter_linux.cpp', - 'crashreporter_unix_common.cpp' - ] - USE_LIBS += [ - 'breakpad_linux_common_s', - ] - OS_LIBS += CONFIG['TK_LIBS'] - OS_LIBS += CONFIG['MOZ_GTHREAD_LIBS'] - CXXFLAGS += CONFIG['TK_CFLAGS'] - CXXFLAGS += CONFIG['MOZ_GTHREAD_CFLAGS'] - -if CONFIG['OS_ARCH'] == 'Linux' or CONFIG['OS_ARCH'] == 'SunOS': - FINAL_TARGET_FILES += [ - '/toolkit/themes/windows/global/throbber/Throbber-small.gif', - ] - -DEFINES['BIN_SUFFIX'] = '"%s"' % CONFIG['BIN_SUFFIX'] - -RCINCLUDE = 'crashreporter.rc' - -# Don't use the STL wrappers in the crashreporter clients; they don't -# link with -lmozalloc, and it really doesn't matter here anyway. -DISABLE_STL_WRAPPING = True - -include('/toolkit/crashreporter/crashreporter.mozbuild') diff --git a/toolkit/crashreporter/client/resource.h b/toolkit/crashreporter/client/resource.h deleted file mode 100644 index d736b0367..000000000 --- a/toolkit/crashreporter/client/resource.h +++ /dev/null @@ -1,37 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by crashreporter.rc -// -#define IDD_SENDDIALOG 102 -#define IDR_THROBBER 103 -#define IDD_VIEWREPORTDIALOG 104 -#define IDI_MAINICON 105 -#define IDC_PROGRESS 1003 -#define IDC_DESCRIPTIONTEXT 1004 -#define IDC_CLOSEBUTTON 1005 -#define IDC_VIEWREPORTBUTTON 1006 -#define IDC_SUBMITREPORTCHECK 1007 -#define IDC_EMAILMECHECK 1008 -#define IDC_EMAILTEXT 1009 -#define IDC_INCLUDEURLCHECK 1010 -#define IDC_COMMENTTEXT 1011 -#define IDC_RESTARTBUTTON 1012 -#define IDC_DESCRIPTIONLABEL 1013 -#define IDC_PROGRESSTEXT 1014 -#define IDC_THROBBER 1015 -#define IDC_VIEWREPORTTEXT 1016 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 106 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1017 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/toolkit/crashreporter/content/crashes.js b/toolkit/crashreporter/content/crashes.js deleted file mode 100644 index f1d3f39d9..000000000 --- a/toolkit/crashreporter/content/crashes.js +++ /dev/null @@ -1,179 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -var { classes: Cc, utils: Cu, interfaces: Ci } = Components; - -var reportURL; - -Cu.import("resource://gre/modules/CrashReports.jsm"); -Cu.import("resource://gre/modules/Services.jsm"); -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource://gre/modules/Task.jsm"); -Cu.import("resource://gre/modules/osfile.jsm"); - -XPCOMUtils.defineLazyModuleGetter(this, "CrashSubmit", - "resource://gre/modules/CrashSubmit.jsm"); - -const buildID = Services.appinfo.appBuildID; - -function submitPendingReport(event) { - let link = event.target; - let id = link.firstChild.textContent; - link.className = "submitting"; - CrashSubmit.submit(id, { noThrottle: true }).then( - (remoteCrashID) => { - link.className = ""; - // Reset the link to point at our new crash report. This way, if the - // user clicks "Back", the link will be correct. - link.firstChild.textContent = remoteCrashID; - link.setAttribute("id", remoteCrashID); - link.removeEventListener("click", submitPendingReport, true); - - if (reportURL) { - link.setAttribute("href", reportURL + remoteCrashID); - // redirect the user to their brand new crash report - window.location.href = reportURL + remoteCrashID; - } - }, - () => { - // XXX: do something more useful here - link.className = ""; - - // Dispatch an event, useful for testing - let event = document.createEvent("Events"); - event.initEvent("CrashSubmitFailed", true, false); - document.dispatchEvent(event); - }); - event.preventDefault(); - return false; -} - -function populateReportList() { - - Services.telemetry.getHistogramById("ABOUTCRASHES_OPENED_COUNT").add(1); - - var prefService = Cc["@mozilla.org/preferences-service;1"]. - getService(Ci.nsIPrefBranch); - - try { - reportURL = prefService.getCharPref("breakpad.reportURL"); - // Ignore any non http/https urls - if (!/^https?:/i.test(reportURL)) - reportURL = null; - } - catch (e) { } - if (!reportURL) { - document.getElementById("clear-reports").style.display = "none"; - document.getElementById("reportList").style.display = "none"; - document.getElementById("noConfig").style.display = "block"; - return; - } - let reports = CrashReports.getReports(); - - if (reports.length == 0) { - document.getElementById("clear-reports").style.display = "none"; - document.getElementById("reportList").style.display = "none"; - document.getElementById("noReports").style.display = "block"; - return; - } - - const locale = Cc["@mozilla.org/chrome/chrome-registry;1"] - .getService(Ci.nsIXULChromeRegistry) - .getSelectedLocale("global", true); - var dateFormatter = new Intl.DateTimeFormat(locale, { year: '2-digit', - month: 'numeric', - day: 'numeric' }); - var timeFormatter = new Intl.DateTimeFormat(locale, { hour: 'numeric', - minute: 'numeric' }); - var ios = Cc["@mozilla.org/network/io-service;1"]. - getService(Ci.nsIIOService); - var reportURI = ios.newURI(reportURL, null, null); - // resolving this URI relative to /report/index - var aboutThrottling = ios.newURI("../../about/throttling", null, reportURI); - - for (var i = 0; i < reports.length; i++) { - var row = document.createElement("tr"); - var cell = document.createElement("td"); - row.appendChild(cell); - var link = document.createElement("a"); - if (reports[i].pending) { - link.setAttribute("href", aboutThrottling.spec); - link.addEventListener("click", submitPendingReport, true); - } - else { - link.setAttribute("href", reportURL + reports[i].id); - } - link.setAttribute("id", reports[i].id); - link.classList.add("crashReport"); - link.appendChild(document.createTextNode(reports[i].id)); - cell.appendChild(link); - - var date = new Date(reports[i].date); - cell = document.createElement("td"); - cell.appendChild(document.createTextNode(dateFormatter.format(date))); - row.appendChild(cell); - cell = document.createElement("td"); - cell.appendChild(document.createTextNode(timeFormatter.format(date))); - row.appendChild(cell); - if (reports[i].pending) { - document.getElementById("unsubmitted").appendChild(row); - } else { - document.getElementById("submitted").appendChild(row); - } - } -} - -var clearReports = Task.async(function*() { - let bundle = Services.strings.createBundle("chrome://global/locale/crashes.properties"); - - if (!Services. - prompt.confirm(window, - bundle.GetStringFromName("deleteconfirm.title"), - bundle.GetStringFromName("deleteconfirm.description"))) { - return; - } - - let cleanupFolder = Task.async(function*(path, filter) { - let iterator = new OS.File.DirectoryIterator(path); - try { - yield iterator.forEach(Task.async(function*(aEntry) { - if (!filter || (yield filter(aEntry))) { - yield OS.File.remove(aEntry.path); - } - })); - } catch (e) { - if (!(e instanceof OS.File.Error) || !e.becauseNoSuchFile) { - throw e; - } - } finally { - iterator.close(); - } - }); - - yield cleanupFolder(CrashReports.submittedDir.path, function*(aEntry) { - return aEntry.name.startsWith("bp-") && aEntry.name.endsWith(".txt"); - }); - - let oneYearAgo = Date.now() - 31586000000; - yield cleanupFolder(CrashReports.reportsDir.path, function*(aEntry) { - if (!aEntry.name.startsWith("InstallTime") || - aEntry.name == "InstallTime" + buildID) { - return false; - } - - let date = aEntry.winLastWriteDate; - if (!date) { - let stat = yield OS.File.stat(aEntry.path); - date = stat.lastModificationDate; - } - - return (date < oneYearAgo); - }); - - yield cleanupFolder(CrashReports.pendingDir.path); - - document.getElementById("clear-reports").style.display = "none"; - document.getElementById("reportList").style.display = "none"; - document.getElementById("noReports").style.display = "block"; -}); diff --git a/toolkit/crashreporter/content/crashes.xhtml b/toolkit/crashreporter/content/crashes.xhtml deleted file mode 100644 index 695320356..000000000 --- a/toolkit/crashreporter/content/crashes.xhtml +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - %globalDTD; - %crashesDTD; -]> - - - - - -