This patch updates README.ANDROID, since the client library
now supports directly generating a minidump without raising
a signal, and that it builds and runs fine on Android/x86.
+ Formatting fixes in minidump_writer_unittest.cc
Review URL: https://breakpad.appspot.com/446002
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1026 4c0a9323-5329-0410-9bdc-e9ce6186880e
If none of the installed ExceptionHandlers handle a signal (their
FilterCallbacks or HandlerCallbacks all return false), then the signal
should be delivered to the signal handlers that were previously
installed.
This requires that old_handlers_ become a static vector so that we can
restore the handlers in the static HandleSignal.
Currently it is also restoring signals in ~ExceptionHandler (if there
are no others). This should not be required since our documentation
states that a process can only have one ExceptionHandler for which
install_handlers is true (and so we get the correct behavior if we
simply leave our handlers installed forever), but even the tests
themselves violate that.
Patch by Chris Hopman <cjhopman@chromium.org>
Review URL: https://breakpad.appspot.com/440002/
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1025 4c0a9323-5329-0410-9bdc-e9ce6186880e
This adds a minimalistic implementation of getcontext()
for Android/ARM and Android/x86. The provided code is
in assembly and only implements the bare minimum required
by Breakpad to get the current processor state.
Note that:
- The FPU state is not saved to the ucontext_t on ARM.
(that's actually the main difference with a normal
getcontext() implementation).
This is normal. On Linux/ARM, such state must be
obtained with PTRACE_GETVFPREGS instead. This will
be implemented in a future patch.
- On x86, only the 'regular' FPU state is saved, to
mimic the GLibc/i386 implementation. The state of
SSE/SSE2/etc registers is not part of the upstream
getcontext() implementation.
Review URL: https://breakpad.appspot.com/444002
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1024 4c0a9323-5329-0410-9bdc-e9ce6186880e
This patch contains the source-related fixes to ensure that
the Breakpad unit tests build properly when targetting Android.
Calling 'make check' still fails because there is still no
way to run the unit test programs on a device. This will be
addressed by a future patch.
Important notes:
- You must target Android API level 9 (Gingerbread) or higher
to build the unit tests. This requirement is due to the
current GTest revision used in the breakpad source tree.
- This patch adds headers providing inlined C library functions
missing from the NDK (see src/common/android/testing). They
are inlined to avoid modifying Makefile.am and other build
files.
- Similarly, the <wchar.h> header-fix under
src/common/android/testing/include is only required by
GTest's current revision. E.g. it's not needed when building
Breakpad as part of Chromium which uses a more up-to-date
revision.
Review URL: https://breakpad.appspot.com/439002
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1020 4c0a9323-5329-0410-9bdc-e9ce6186880e
This small patch allows the build of the tools and processor
when targetting Android with the Automake/Autconf build.
Not that these necessarily work correctly at the moment,
but there is no need for --disable-tools --disable-processor
now when using --host=arm-linux-androideabi or
--host=i686-linux-android.
+ Modify android/run-checks.sh to build all binaries with
the Automake build.
+ Tiny fix for --abi=x86 in android/run-checks.sh
Review URL: https://breakpad.appspot.com/438002
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1018 4c0a9323-5329-0410-9bdc-e9ce6186880e
This patch remove many Android-specific #ifdefs from the Breakpad
source code. This is achieved by providing "fixed-up" platform
headers (e.g. <signal.h> or <sys/user,h>), in the new directory
src/common/android/include/, which masks differences between
the NDK and GLibc headers.
The old "android_link.h" and "android_ucontext.h" are moved
and renamed.
This also requires putting this directory as the first
include path during Android-hosted builds, hence the
modification of Makefile.am and configure.ac
Review URL: https://breakpad.appspot.com/434002
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1017 4c0a9323-5329-0410-9bdc-e9ce6186880e
Until now, the context information was the current one when receiving a
SIGABRT. This is mainly wrong because the signal handler start in a new
context. This instead use the context passed to the signal handler.
Review URL: https://breakpad.appspot.com/435002
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1015 4c0a9323-5329-0410-9bdc-e9ce6186880e
where the minidump should be created, without the need of opening any other
file.
BUG=None
TEST=Run unit-tests.
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1007 4c0a9323-5329-0410-9bdc-e9ce6186880e
This patch removes a few libc calls from the client library
when generating a minidump.
+ Move the static inlined functions from linux_libc_support.h
into their own source file to avoid code duplication.
Tested on linux-x86_64 with 'make check' and 'android/run-checks.sh'
Review URL: https://breakpad.appspot.com/411002
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1001 4c0a9323-5329-0410-9bdc-e9ce6186880e
Ted Mielczarek:
> You could try backing out r989, although Mozilla has been running with that
> patch for months without issue.
Me:
> src/client/windows/handler/exception_handler.cc in r989 appears to have
> formatting problems, an unwanted property change, and no real Breakpad review
> history, so maybe we should back it out anyway until the proper process is
> followed.
NACL Tests nacl_integration failures:
http://build.chromium.org/p/chromium/builders/NACL%20Tests/builds/30138
chrome src/native_client/tests/inbrowser_crash_test/crash_dump_tester.py says
that the observed failures are a symptom of crash_service.exe itself crashing.
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@998 4c0a9323-5329-0410-9bdc-e9ce6186880e
Compilation directive for PPC was using MAC_OS_X_VERSION_MIN_REQUIRED.
This is not correct, as the latest SDKs allow to compile for older version of
Mac OS, but don't contain the ppc headers. Changing the directive to use
MAC_OS_X_VERSION_MAX_ALLOWED instead.
Moreover, uploader.mm was including pwd.h that was not used and doesn't exist
on the latest iOS SDK.
Review URL: https://breakpad.appspot.com/412002
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@982 4c0a9323-5329-0410-9bdc-e9ce6186880e
In order to better distinguish Android and Linux minidumps, introduce
a new MD_OS_ANDROID definition, and modify related source code accordingly.
Also append the build-fingerprint to the minidump location descriptor.
This gives more information about the system image the device runs on.
Review URL: https://breakpad.appspot.com/405002
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@981 4c0a9323-5329-0410-9bdc-e9ce6186880e
information about opened handles (!handle) and handle operations trace
(!htrace).
Depending on the dump type different amount of data is collected. For a full
dump all handles and complete handle trace are included to the dump. In the case
of a minidump the list of handle operations for a single handle value (the last
handle value that caused STATUS_INVALID_HANDLE exception) is recorded. In either
case the handle trace should be explicitly enabled by the client process (or by
a debugger) in order to produce any handle trace data.
BUG=131699
Patch by Alex Pakhunov <alexeypa@chromium.org>
Review URL: https://breakpad.appspot.com/410002/
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@979 4c0a9323-5329-0410-9bdc-e9ce6186880e
do with FPO (frame-pointer-omission) optimized context
frames where the context frame represents a Windows
System call stub.
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@971 4c0a9323-5329-0410-9bdc-e9ce6186880e
thread and thread pool threads. This CL serializes access to the FSM state.
Handling of crash dump and client shutdown requests is still done
asynchronously.
Patch by Alex Pakhunov <alexeypa@chromium.org>
BUG=132164
TEST=remoting_unittests.BreakpadWinDeathTest.*
Review URL: https://breakpad.appspot.com/396002/
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@970 4c0a9323-5329-0410-9bdc-e9ce6186880e
Currently the log file and the minidump are uploaded in two consequent requests,
thus they get different report ids and it's hard to associate them to each
other.
This CL makes the crash uploader send the minidump and the log file together in
a single multipart request, so that they have the same report id and are
accessible from the same landing page.
Patch by Alexander Potapenko <glider@chromium.org>
Review URL: https://breakpad.appspot.com/387003/
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@963 4c0a9323-5329-0410-9bdc-e9ce6186880e
The first module in a minidump is expected to be for the main executable.
We used to assume that /proc/<pid>/maps always showed that one first, but in
some cases that is no longer true (see comment #7 of the bug). So this
change makes use of the entry point stored in auxv to make sure we put the
correct module first.
BUG=chromium-os:25355
TEST=Ran Breakpad tests
Review URL: https://breakpad.appspot.com/366002
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@942 4c0a9323-5329-0410-9bdc-e9ce6186880e
Change MinidumpModuleList::GetMainModule() to use GetModuleAtIndex() instead
of GetModuleAtSequence() because the former gets the first module that was
in the minidump file, while the latter actually gets the first module when
sorted by address. While this is pretty much the same thing at the moment,
I have another change in the works that can sometimes affect the module
order in the file.
BUG=chromium-os:25355
TEST=Ran Breakpad tests
Review URL: https://breakpad.appspot.com/366001
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@941 4c0a9323-5329-0410-9bdc-e9ce6186880e
A memory leak in DisassemblerX86 is detected by valgrind. This patch
fixes the DisassemblerX86 destructor to properly free the |current_instr_|
variable.
BUG=471
TEST=Run valgrind on disassembler_x86_unittest to verify the leak is gone.
Review URL: https://breakpad.appspot.com/371001
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@940 4c0a9323-5329-0410-9bdc-e9ce6186880e
The new API allows to automatically upload repports to the crash server when the application restarts.
This change also:
- Correct a bug on the test for correct alignment of the abrt signal handler
- Add user friendly information on crashes for SIGABRT and NSException
Review URL: https://breakpad.appspot.com/361001
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@935 4c0a9323-5329-0410-9bdc-e9ce6186880e
Instead of using exc_server, the message is parsed directly, and the minidump
is created, then the app is killed.
Moreover, the only catch exception is exception_raise. This patch remove all
rereference to exception_raise_state and exception_raise_state_identity.
Review URL: https://breakpad.appspot.com/358001
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@934 4c0a9323-5329-0410-9bdc-e9ce6186880e
- Cast result of _dyld_image_count to prevent compilation warning: The 2 int
in both side of the ? operator should have the same type.
- Remove unused variable for return values.
- Remove unused NSUserDefaults.
Review URL: https://breakpad.appspot.com/354001
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@929 4c0a9323-5329-0410-9bdc-e9ce6186880e
This patch is taken from the downstream version of breakpad in
Chromium OS: https://gerrit.chromium.org/gerrit/15148
LinuxCoreDumperTest previously assumes the proc files of the child
process created by CrashGenerator::CreateChildCrash() have the same
content as its parent process, which may not be true. This CL modifies
CrashGenerator to copy the proc files of the child process, created by
CreateChildCrash(), before crashing that process.
BUG=chromium-os:25252
TEST=Verified the following:
TEST=Tested the following:
1. Build on 32-bit and 64-bit Linux with gcc 4.4.3 and gcc 4.6.
2. Build on Mac OS X 10.6.8 with gcc 4.2 and clang 3.0 (with latest gmock).
3. All unit tests pass.
Review URL: https://breakpad.appspot.com/353001
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@925 4c0a9323-5329-0410-9bdc-e9ce6186880e
This patch fixes a compilation error with gcc / clang on Linux / Mac OS.
BUG=none
TEST=Tested the following:
1. Build on 32-bit and 64-bit Linux with gcc 4.4.3 and gcc 4.6.
2. Build on Mac OS X 10.6.8 with gcc 4.2 and clang 3.0 (with latest gmock).
3. All unit tests pass.
Patch by Ben Chan <benchan@chromium.org>
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@924 4c0a9323-5329-0410-9bdc-e9ce6186880e
it's deprecated. Apple marked bootstrap_register as deprecated on 10.5 but
it's actually still needed on that OS release. There isn't a way to get the
functionality Breakpad needs from it without calling it until 10.6.
Review URL: https://breakpad.appspot.com/350001
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@921 4c0a9323-5329-0410-9bdc-e9ce6186880e
This CL adds a minidump_generator that can write a minidump from a NSException
on iOS on an ARM cpu.
This CL also install an uncaught exception handler on iOS, and use the
previous generator to write minidumps for any uncaught exception.
Review URL: https://breakpad.appspot.com/347001
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@916 4c0a9323-5329-0410-9bdc-e9ce6186880e
This patch allows Breakpad's DWARF reader to at least read or skip
attributes using the new forms defined in version 4 of the DWARF
specification, instead of crashing.
Attributes encoded using DW_FORM_flag_present, DW_FORM_sec_offset, and
DW_FORM_exprloc should work fine now. However, compilation units using
DW_FORM_ref_sig8 to refer to types in .debug_types will need further work
to support. (GCC 4.6.2 does not emit .debug_types sections.)
Specifically:
- dwarf2reader::DwarfForm gets new values.
- dwarf2reader::Dwarf2Handler and dwarf2reader::DIEHandler get new handler
methods, named ProcessAttributeSignature, for DW_FORM_ref_sig8 attributes.
- dwarf2reader::CompilationUnit reads DW_FORM_ref_sig8 attributes, and
passes them to ProcessAttributeSignature. It also gets support for
DW_FORM_sec_offset, DW_FORM_exprloc, and DW_FORM_flag_present, using the
existing appropriate ProcessAttribute* methods.
- dwarf2reader::DIEDispatcher passes through ProcessAttributeSignature
attributes to its DIEHandler.
- Unit tests are updated.
a=jimb, r=ted.mielczarek
Review URL: http://breakpad.appspot.com/343003/
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@912 4c0a9323-5329-0410-9bdc-e9ce6186880e
This is really incomplete --- it's just what's needed to get started
testing support for the DWARF 4 attribute forms.
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@910 4c0a9323-5329-0410-9bdc-e9ce6186880e
When a variable is used to set (and lookup) MappingInfo's "start_addr"
field, it needs to match types -- which is "uintptr_t". When Chrome OS
updated the 'make' that's used for building, the 32-bit "char *" had
sign-extended when cast up to a u_int64_t -- maybe because pointers were
unsigned before and then changed to be signed -- and that caused the address
lookup to fail.
BUG=chromium-os:25355
TEST=Ran Breakpad unittests
A=mkrebs@chromium.org
Review URL: http://breakpad.appspot.com/345001
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@908 4c0a9323-5329-0410-9bdc-e9ce6186880e
uploader.mm:549:5: warning: instance method '-uploadData:name:url:' not found (return type defaults to 'id')
[self uploadData:logFileData_ name:@"log" url:url];
=> it looks like this method does in fact not exist, the last parameter
needs to be removed.
breakpad_nlist_64.cc:193:59: warning: '&&' within '||' [-Wlogical-op-parentheses]
=> Just add parentheses, no functionality change.
Patch by Nico Weber <thakis@chromium.org>
BUG=none
TEST=breakpad stil works.
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@907 4c0a9323-5329-0410-9bdc-e9ce6186880e
This patch is part of a bigger patch that helps merging the breakpad code
with the modified version in Chromium OS.
Specifically, this patch makes the following changes:
1. Turn the LinuxDumper class into a base class and move ptrace related
code into a new derived class, LinuxPtraceDumper.
2. Add a LinuxCoreDumper class, which is derived from LinuxDumper, to
extract information from a crashed process via a core dump file instead
of ptrace.
3. Add a WriteMinidumpFromCore function to
src/client/linux/minidump_writer/minidump_writer.h,
which uses LinuxCoreDumper to extract information from a core dump file.
4. Add a core2md utility, which simply wraps WriteMinidumpFromCore, for
converting a core dump to a minidump.
BUG=455
TEST=Tested the following:
1. Build on 32-bit and 64-bit Linux with gcc 4.4.3 and gcc 4.6.
2. Build on Mac OS X 10.6.8 with gcc 4.2 and clang 3.0 (with latest gmock).
3. All unit tests pass.
4. Run Chromium OS tests to test core2md.
Review URL: http://breakpad.appspot.com/343001
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@905 4c0a9323-5329-0410-9bdc-e9ce6186880e
CrashGenerator::CreateChildCrash() may have some flakiness. This patch
changes ElfCoreDumpTest to temporarily skip the ValidCoreFile test if
no core dump is generated by CrashGenerator::CreateChildCrash(), but
print out the error message to help debug the flakiness.
BUG=chromium-os:24982
TEST=Tested the following:
1. Build on 32-bit and 64-bit Linux with gcc 4.6.
2. All unit tests pass.
Review URL: http://breakpad.appspot.com/342001
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@904 4c0a9323-5329-0410-9bdc-e9ce6186880e
This patch is part of a bigger patch that helps merging the breakpad code
with the modified version in Chromium OS.
Specifically, this patch makes the following changes:
1. Add two convenient methods, back() and empty(), to the wasteful_vector
class.
2. Refactor the LinuxDumper class such that it can later be splitted into
a base class and two derived classes, one uses the current ptrace
implementation and one uses a core file.
3. Refactor the MinidumpWriter class such that it can later use different
derived implementations of LinuxDumper.
BUG=455
TEST=Tested the following:
1. Build on 32-bit and 64-bit Linux with gcc 4.4.3 and gcc 4.6.
2. Build on Mac OS X 10.6.8 with gcc 4.2 and clang 3.0 (with latest gmock).
3. All unit tests pass.
Review URL: http://breakpad.appspot.com/340001
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@902 4c0a9323-5329-0410-9bdc-e9ce6186880e
This patch is part of a bigger patch that helps merging the breakpad code
with the modified version in Chromium OS.
Specifically, this patch makes the following changes:
1. Add an ElfCoreDump class for processing Linux core dump files, which will
later be used to implement the core dump to minidump conversion.
2. Add a CrashGenerator class for generating a crash with a core dump file
for testing the functionalities of ElfCoreDump.
3. Move some utility functions for reading/writing files to file_utils.h.
BUG=455
TEST=Tested the following:
1. Build on 32-bit and 64-bit Linux with gcc 4.4.3 and gcc 4.6.
2. Build on Mac OS X 10.6.8 with gcc 4.2 and clang 3.0 (with latest gmock).
3. All unit tests pass.
Review URL: http://breakpad.appspot.com/337001
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@900 4c0a9323-5329-0410-9bdc-e9ce6186880e
This patch is part of a bigger patch that helps merging the breakpad code
with the modified version in Chromium OS.
The MemoryRange class was added in r895 (http://breakpad.appspot.com/332001),
which is largely based on MMappedRange but generalized to be used in other
code. However, MemoryRange does not support minidump data structures. This
patch adds a MinidumpMemoryRange class that extends MemoryRange to handle
minidump data structures, which can then replace MMappedRange.
As with MemoryRange, MinidumpMemoryRange is unit tested.
BUG=455
TEST=Tested the following:
1. Build on 32-bit and 64-bit Linux with gcc 4.4.3 and gcc 4.6.
2. Build on Mac OS X 10.6.8 with gcc 4.2 and clang 3.0 (with latest gmock).
3. All unit tests pass.
4. Run minidump-2-core to covnert a minidump file to a core file.
Review URL: http://breakpad.appspot.com/335001
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@898 4c0a9323-5329-0410-9bdc-e9ce6186880e
Manufacturing an exception record improves the crash reporting, since then
the crashes get bucketed by the call stack leading to the dump, instead of
all falling into a misc bucket that nobody ever looks at.
Currently these are occuring through e.g. dumps from the base watchdog.
Link against RtlCaptureContext, as the function has been documented as
available
from Windows XP
[http://msdn.microsoft.com/en-us/library/windows/desktop/ms680591(v=vs.85).aspx].
Patch by Siggi Asgeirsson <siggi@chromium.org>
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@897 4c0a9323-5329-0410-9bdc-e9ce6186880e
This patch is part of a bigger patch that helps merging the breakpad code
with the modified version in Chromium OS.
Specifically, this patch makes the following changes:
1. Add a SafeReadLink function that wraps sys_readlink() to resolve a
symbolic link but guarantees the result is NULL-terminated on success.
2. Refactor other source code to use SafeReadLink instead of readlink()
or sys_readlink().
BUG=455
TEST=Tested the following:
1. Build on 32-bit and 64-bit Linux with gcc 4.4.3 and gcc 4.6.
2. Build on Mac OS X 10.6.8 with gcc 4.2 and clang 3.0 (with latest gmock).
3. All unit tests pass.
4. Run minidump-2-core to covnert a minidump file to a core file.
Review URL: http://breakpad.appspot.com/334001
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@896 4c0a9323-5329-0410-9bdc-e9ce6186880e
This patch is part of a bigger patch that helps merging the breakpad code
with the modified version in Chromium OS.
Specifically, this patch makes the following changes:
1. Add a MemoryRange class for encapsulating and checking read access
to a contiguous range of memory.
2. Add a MemoryMappedFile class for mapping a file into memory for
read-only access.
3. Refactor other source code to use MemoryMappedFile.
BUG=455
TEST=Tested the following:
1. Build on 32-bit and 64-bit Linux with gcc 4.4.3 and gcc 4.6.
2. Build on Mac OS X 10.6.8 with gcc 4.2 and clang 3.0 (with latest gmock).
3. All unit tests pass.
4. Run minidump-2-core to covnert a minidump file to a core file.
Review URL: http://breakpad.appspot.com/332001
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@895 4c0a9323-5329-0410-9bdc-e9ce6186880e
The assertion (context.context_flags & MD_CONTEXT_X86) in synth_minidump.cc
produces a different message on Mac OS X than other platforms. This patch
changes the ContextDeathTest.X86BadFlags test to handle both message patterns.
BUG=424
TEST=Verified ContextDeathTest.X86BadFlags on Windows, Linux and Mac OS X.
Review URL: http://breakpad.appspot.com/333001
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@894 4c0a9323-5329-0410-9bdc-e9ce6186880e
"const" that causes an error with the newer gcc.
BUG=chromium-os:14973
TEST=Built CrOS's google-breakpad
Patch by Michael Krebs <mkrebs@chromium.org>
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@878 4c0a9323-5329-0410-9bdc-e9ce6186880e