177 Commits
Author SHA1 Message Date
Ian McKellar 9ea5b228f5 Add support for zstd compressed sections to dump_syms
Support for zstd must be enabled by passing --enable-zstd to configure.

Change-Id: I57d0196552284de86575d979d673ac20a3fc4d64
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/4722191
Reviewed-by: Joshua Peraza <jperaza@chromium.org>
2023-07-27 18:14:10 +00:00
Leonard Grey 652e7dac80 Update Mac Headers
These are reimported from Apple's Github source drops, see exact
provenance in README. Most were imported as is, some were edited
to match previous versions, and as noted below

- Added arm headers where needed
- Removed (now) unused `/mach/i386/vm_param.h`
- Removed availability annotations
- Removed `__kernel_ptr_semantics`
- Added `defined(__aarch64__)` to all arm64 define guards

Bug: chromium:1420654, google-breakpad:880, b/257505171
Change-Id: I17bd03fa871a8f1dc4285daafa3d7b26c2186e2b
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/4482294
Reviewed-by: Mark Mentovai <mark@chromium.org>
2023-04-27 14:56:41 +00:00
Mark Brand 38115b0c5f Refactor DisassemblerObjdump.
This change removes ScopedTmpFile from DisassemblerObjdump, and
replaces it with the use of the implementation in linux/common.

It also switches to using ScopedPipe to read the output from objdump,
and directly execing objdump instead of using system.

Change-Id: I6d425190fb4a20d6b265c72aa7315026687cb86a
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3971919
Reviewed-by: Ivan Penkov <ivanpe@chromium.org>
2023-01-31 00:35:06 +00:00
Mark Brand 5daa41904a Add ScopedPipe.
This provides a similar wrapper to ScopedTmpFile for linux pipes.

Change-Id: I53b377085322f61d87525d215ecd703f13ae9ae7
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3971918
Reviewed-by: Lei Zhang <thestig@chromium.org>
2023-01-31 00:34:58 +00:00
Mark Brand 9a87ff661e Add ScopedTmpFile.
This replaces the existing AutoTestFile implementation with a simpler
implementation that uses O_TMPFILE to avoid having the temporary files
linked in the filesystem.

Refactor the existing tests to use the new ScopedTmpFile instead of
duplicating the same ScopedTestFile wrapper into each test.

Change-Id: Iee9416e52269eff271f748ec9d822aee6e28f59a
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3971917
Reviewed-by: Lei Zhang <thestig@chromium.org>
2023-01-31 00:34:48 +00:00
Mark Brand f617814017 Remove disassembler_objdump from the build on non-linux platforms.
Change-Id: I29d628ac7cf79bfca1794ba325c945a0f122b360
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3964364
Reviewed-by: Ivan Penkov <ivanpe@chromium.org>
2023-01-31 00:34:35 +00:00
Ian Barkley-Yeung 6e03dc0f20 Fix test breakage from 9aa786f
After
https://chromium.googlesource.com/breakpad/breakpad/+/9aa786f03dbd1fca98eeae42c35c54d61b2a83b9,
attempts to roll breakpad into ChromeOS fail with:

make[1]: *** No rule to make target 'src/testing/googletest/src/gtest-all.cc', needed by 'src/testing/googletest/src/client_linux_linux_client_unittest_shlib-gtest-all.o'.  Stop.

(see
https://logs.chromium.org/logs/chromeos/buildbucket/cr-buildbucket/8794115289064657457/+/u/run_SDK_package_unit_tests/call_chromite.api.TestService_BuildTargetUnitTest/stdout,
the result of dry-running
https://chrome-internal-review.googlesource.com/c/chromeos/manifest-internal/+/5238479,
which just updates the breakpad revision to
b14bb95d5de268b6231dc8c667fb0f7d73676856.)

Change-Id: Ia6e47c044e74499a849f8b615594f403893d7653
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/4120547
Reviewed-by: Mike Frysinger <vapier@chromium.org>
2022-12-27 18:38:17 +00:00
Mike Frysinger d31ce76161 gyp: drop unused build system
Chromium moved to GN a long time ago, and CrOS has never used this.
Let's remove one of the build systems to make it easier on people.
Especially since the GYP tool is completely unmaintained now.

Change-Id: I0371ca1427811f307dc30f88ed6d1bf61d7fab89
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/4054941
Reviewed-by: Mark Mentovai <mark@chromium.org>
2022-12-05 01:38:54 +00:00
Marvin Scholz 9aa786f03d Restructure Makefile conditionals/targets
As the conditionals and targets was becoming quite hard to
grasp with lots of conditionals applied unnecessarily to target
properties, there were issues with targets being defined without
any sources.
This commit fixes that while restructuring the Makefile so that
all targets are declared (conditionally if needed) upfront and
then all the target properties are defined (source, flags, deps, etc.)

Change-Id: I666d153c476fbf1aafabb89cee7af4eee5795ab6
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3928024
Reviewed-by: Mike Frysinger <vapier@chromium.org>
2022-11-29 09:27:01 +00:00
Konstantin Mandrika de086a9859 Add support for compressed section headers to dump_syms.
Change-Id: I019cc9ffd66850ec5259f6dfcd9af8ac6c37d2c0
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3938926
Reviewed-by: Manoj Gupta <manojgupta@chromium.org>
Reviewed-by: Joshua Peraza <jperaza@chromium.org>
2022-10-26 20:29:20 +00:00
Mark Brand 6289830b67 Add DisassemblerObjdump.
This extracts the existing objdump-based disassembler engine used in
ExploitabilityLinux into a seperate reusable class, and adds support
for most common address operand formats.

This is a precursor to using DisassemblerObjdump to handle address
resolution for non-canonical address dereferences on amd64.

Bug: 901847
Change-Id: I1a06a86fc2e7c76b4d0e79eca5f8a6c501379f47
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3720740
Reviewed-by: Ivan Penkov <ivanpe@google.com>
Reviewed-by: Ivan Penkov <ivanpe@chromium.org>
2022-10-12 17:19:44 +00:00
Iacopo Colonnelli 28cf16bc34 Added riscv and riscv64 support for Linux
Change-Id: I62cd157d00a87720db001072662a81d8eb9112b0
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3873291
Reviewed-by: Mike Frysinger <vapier@chromium.org>
2022-09-09 08:44:46 +00:00
Mark Mentovai 4febb34583 Update copyright boilerplate, 2022 edition (Breakpad)
sed -i '' -E -e 's/Copyright (\(c\) )?([0-9-]+),? (Google|The Chromium Authors).*(\r)?$/Copyright \2 Google LLC\4/' -e '/^((\/\/|#| \*) )?All rights reserved\.?\r?$/d' -e 's/name of Google Inc\. nor the/name of Google LLC nor the/' -e 's/POSSIBILITY OF SUCH DAMAGE$/POSSIBILITY OF SUCH DAMAGE./' $(git grep -El 'Copyright (\(c\) )?([0-9-]+),? (Google|The Chromium Authors).*$')

Plus manual fixes for src/processor/disassembler_x86.{cc,h}.

Plus some conversions from CRLF to LF line endings in .cc and .h files.

Bug: chromium:1098010
Change-Id: I8030e804eecd9f5a1ec9d66ae166efd8418c2a67
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3878302
Reviewed-by: Mike Frysinger <vapier@chromium.org>
2022-09-07 16:59:53 +00:00
George Burgess IV 335e61656f {static_,}range_map: fix overflows under ubsan
Explicitly call out where overflows are expected, and add appropriate
checking for them.

BUG=b:235999011
TEST=Unittests on CrOS and Linux

Change-Id: I999a6996183c2f4afc16a1c0188dee3bd64d7f09
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3759630
Reviewed-by: Mike Frysinger <vapier@chromium.org>
2022-07-13 05:45:04 +00:00
Iryna Shakhova c4c43b80ea Reland "Support PE modules in core files when running core2md"
This is a reland of commit 0808030bee

Original change's description:
> Support PE modules in core files when running core2md
>
> Core files generated from `wine` contain both ELF and PE modules. Module
> format can be guessed by checking the file contents. If the module
> corresponds to PE-file conditions (has specific fields set up as
> described in https://code.google.com/archive/p/corkami/wikis/PE.wiki)
> we'll create a MDCVInfoPDB70 record in the minidump for it, but if
> the file cannot be opened, is too short or is not a PE file, we'll
> fall back to ELF procedure.
>
> Added /src/client/linux/minidump_writer/pe_file.{cc,h} to
> src_client_linux_libbreakpad_client_a_SOURCES and
> src_client_linux_linux_client_unittest_shlib_SOURCES.
> Makefile.in and aclocal.m4 were generated by running 'aclocal && automake'.
>
> Test: build core2md and use it to convert a core file into dmp, validate
> that the generated dmp file can be opened. Ran './configure & make'.
>
> Change-Id: I225ffeea3f582deed40ecdfe7ab77f5754e90cbe
> Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3629189
> Reviewed-by: Joshua Peraza <jperaza@chromium.org>

Change-Id: I09dd067a39a95f81f48656595e811c263561ebf2
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3695863
Reviewed-by: Joshua Peraza <jperaza@chromium.org>
2022-06-08 19:59:24 +00:00
Justin Cohen 0f1f43edd2 Revert "Support PE modules in core files when running core2md"
This reverts commit 0808030bee.

Reason for revert: Breaks Android Compile

ld.lld: error: undefined symbol: google_breakpad::PEFile::TryGetDebugInfo(char const*, google_breakpad::_RSDS_DEBUG_FORMAT*)
>>> referenced by minidump_writer.cc
>>>               client/minidump_writer.o:((anonymous namespace)::MinidumpWriter::FillRawModule(google_breakpad::MappingInfo const&, bool, unsigned int, MDRawModule*, unsigned char const*)) in archive obj/third_party/breakpad/libclient.a


https://ci.chromium.org/ui/p/chromium/builders/try/android-marshmallow-arm64-rel/1188618/overview

Original change's description:
> Support PE modules in core files when running core2md
>
> Core files generated from `wine` contain both ELF and PE modules. Module
> format can be guessed by checking the file contents. If the module
> corresponds to PE-file conditions (has specific fields set up as
> described in https://code.google.com/archive/p/corkami/wikis/PE.wiki)
> we'll create a MDCVInfoPDB70 record in the minidump for it, but if
> the file cannot be opened, is too short or is not a PE file, we'll
> fall back to ELF procedure.
>
> Added /src/client/linux/minidump_writer/pe_file.{cc,h} to
> src_client_linux_libbreakpad_client_a_SOURCES and
> src_client_linux_linux_client_unittest_shlib_SOURCES.
> Makefile.in and aclocal.m4 were generated by running 'aclocal && automake'.
>
> Test: build core2md and use it to convert a core file into dmp, validate
> that the generated dmp file can be opened. Ran './configure & make'.
>
> Change-Id: I225ffeea3f582deed40ecdfe7ab77f5754e90cbe
> Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3629189
> Reviewed-by: Joshua Peraza <jperaza@chromium.org>

Change-Id: I7105ed615a338263f112243bd8dc9e86b906fcb1
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3695862
Reviewed-by: Ivan Penkov <ivanpe@chromium.org>
2022-06-08 18:11:47 +00:00
Iryna Shakhova 0808030bee Support PE modules in core files when running core2md
Core files generated from `wine` contain both ELF and PE modules. Module
format can be guessed by checking the file contents. If the module
corresponds to PE-file conditions (has specific fields set up as
described in https://code.google.com/archive/p/corkami/wikis/PE.wiki)
we'll create a MDCVInfoPDB70 record in the minidump for it, but if
the file cannot be opened, is too short or is not a PE file, we'll
fall back to ELF procedure.

Added /src/client/linux/minidump_writer/pe_file.{cc,h} to
src_client_linux_libbreakpad_client_a_SOURCES and
src_client_linux_linux_client_unittest_shlib_SOURCES.
Makefile.in and aclocal.m4 were generated by running 'aclocal && automake'.

Test: build core2md and use it to convert a core file into dmp, validate
that the generated dmp file can be opened. Ran './configure & make'.

Change-Id: I225ffeea3f582deed40ecdfe7ab77f5754e90cbe
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3629189
Reviewed-by: Joshua Peraza <jperaza@chromium.org>
2022-05-12 18:24:10 +00:00
Alex Pankhurst 38ee0be4d1 Update Rust demangling to use rustc-demangle
The rust-demangle-capi crate hasn't been updated since 2016 and
out-of-date. Instead, Breakpad needs to use C API offered by the
rustc-demangle to demangle Rust symbols.

*** TESTING ***

1) Set up rustc-demangle

> git clone https://github.com/rust-lang/rustc-demangle.git
> cd rustc-demangle
> cargo build -p rustc-demangle-capi --release

2) Breakpad

> ./configure --with-rustc-demangle=<path to rustc-demangle>
> make check src/common/dward_cu_to_module

Change-Id: Ib68b62ef329f1397bc379a1d04c632781e4b2069
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3273324
Reviewed-by: Joshua Peraza <jperaza@chromium.org>
2021-11-11 02:02:49 +00:00
Lei Zhang c484031f1f Consistently call BaseName() in various Usage() functions.
Make various tools print just their names as part of the usage
instructions, rather than the full path. Also fix a missing space in the
dump_syms usage output.

Change-Id: I2b796678cd47e7dbabcc03df2b57cdc3420c008c
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/2787678
Reviewed-by: Mike Frysinger <vapier@chromium.org>
2021-04-07 20:37:52 +00:00
Ryo Hashimoto a5d7afb38b Add src/processor/stackwalk_common.{cc,h} to src_libbreakpad_a_SOURCES
To generate the out directory before compiling stackwalk_common.cc.

Makefile.in and aclocal.m4 were generated by running `aclocal &&
automake`.

BUG=chromium:1167503
BUG=b:177451284
TEST=./configure && make

Change-Id: I7a7674aa5f81cf0016eb2f5170ea3676ccfe3bbb
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/2659000
Reviewed-by: Mike Frysinger <vapier@chromium.org>
2021-01-29 12:43:57 +00:00
Eric Astor 86c090b77f Do not build core_handler unless memfd_create is available
Restores build compatibility with glibc < 2.27.

Change-Id: I1e58ab5e15d7691ad076769a52260fa01c9cfd06
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/2597562
Reviewed-by: Mike Frysinger <vapier@chromium.org>
2020-12-21 22:07:02 +00:00
Snehasish Kumar 83203748ae Add a test to check debug information for split functions.
With optimizations such as -fsplit-machine-functions (clang) and
-freorder-blocks-and-partition (gcc), the function body may be
discontiguous in the binary. Control flow between the parts are routed
using jumps. This test ensures that breakpad consumes debuginfo
generated by the -fsplit-machine-functions optimization and the line
table for the cold function part is correct.

Change-Id: I44d59704864ee940dd429c5249d5d793fe081d6a
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/2591951
Reviewed-by: Sterling Augustine <saugustine@google.com>
Reviewed-by: Joshua Peraza <jperaza@chromium.org>
2020-12-15 17:14:09 +00:00
Snehasish Kumar 57ce4032f5 Add dwarf2reader unit test to run with make check.
This change updates Makefile.am to include the dwarf2reader lineinfo
unittest to the suite of tests run when make check is invoked. All the
manual changes are limited to the Makefile.am file. The remaining files
contain changes generated by automake.

Change-Id: Ib078391b44235ce430a224713512637ce8e90a36
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/2587266
Reviewed-by: Joshua Peraza <jperaza@chromium.org>
2020-12-11 21:39:03 +00:00
Ludovic Guegan 78f7ae495b pid2md: generate a minidump from a running process
On Linux, this tool generates a minidump for given process. It requires
the permission to trace the process and access its /proc directory. This
is useful when a defective behavior of a process does not lead to a
crash. For example, it can be used by a watchdog or if a process does
not correctly respond to a termination request.

Change-Id: Iab501e42c064a537aea62831c471e395ff697186
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/2539920
Reviewed-by: Mike Frysinger <vapier@chromium.org>
2020-11-24 08:18:56 +00:00
Ludovic Guegan bd4a28c08b core_handler: coredump handler to produce minidump
On Linux, it is possible to register a core handler via
/proc/sys/kernel/core_pattern. Doing so invokes the core handler when
a process crash. The core_handler uses /proc/<pid>/mem to access the
process memory. This way it is not necessary to process the full
coredump which takes time and consumes memory.

In order to profit from this core handler, for example, one can
integrate dump_syms into Yocto and generate an archive with the
breakpad symbols of all the binaries in the rootfs. Minidumps are
especially useful on embedded systems since they are lightweight and
provide contextual information.

Change-Id: I9298d81159029cefb81c915831db54884310ad05
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/2536917
Reviewed-by: Mike Frysinger <vapier@chromium.org>
2020-11-23 23:15:15 +00:00