diff --git a/BUILD.gn b/BUILD.gn
new file mode 100644
index 0000000..fb2aeea
--- /dev/null
+++ b/BUILD.gn
@@ -0,0 +1,993 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/symlink.gni")
+import("//testing/libfuzzer/fuzzer_test.gni")
+import("//testing/test.gni")
+
+if (is_win) {
+  import("//build/config/win/visual_studio_version.gni")
+}
+
+config("tools_config") {
+  include_dirs = [
+    "src",
+    "src/third_party",
+  ]
+  if (is_android) {
+    defines = [ "__ANDROID__" ]
+  }
+  if (is_clang) {
+    cflags = [ "-Wno-tautological-constant-out-of-range-compare" ]
+  }
+}
+
+config("internal_config") {
+  include_dirs = [ "src" ]
+  defines = []
+  if (is_debug) {
+    # This is needed for GTMLogger to work correctly.
+    defines += [ "DEBUG" ]
+  }
+  if (is_android) {
+    defines += [ "__ANDROID__" ]
+  }
+}
+
+config("client_config") {
+  include_dirs = [ "src" ]
+  if (is_android) {
+    include_dirs += [ "src/common/android/include" ]
+  }
+  if (is_chromeos) {
+    defines = [ "__CHROMEOS__" ]
+  }
+}
+
+config("handler_config") {
+  include_dirs = [ "src" ]
+}
+
+config("sender_config") {
+  include_dirs = [ "src" ]
+}
+
+config("breakpad_unittest_config") {
+  # One of the breakpad unit tests test that we can detect the proper build-id.
+  # We must override the build-id for this one target.
+  ldflags = [ "-Wl,--build-id=0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" ]
+}
+
+# {micro,mini}dump_stackwalk and minidump_dump are tool-type executables
+# that do not build on Windows.
+if (!is_win) {
+  if (current_toolchain == host_toolchain) {
+    # Contains the code shared by both {micro,mini}dump_stackwalk.
+    static_library("stackwalk_common") {
+      # Always want these files included regardless of platform.
+      set_sources_assignment_filter([])
+      sources = [
+        "src/processor/basic_code_module.h",
+        "src/processor/basic_code_modules.cc",
+        "src/processor/basic_code_modules.h",
+        "src/processor/basic_source_line_resolver.cc",
+        "src/processor/call_stack.cc",
+        "src/processor/cfi_frame_info.cc",
+        "src/processor/cfi_frame_info.h",
+        "src/processor/disassembler_x86.cc",
+        "src/processor/disassembler_x86.h",
+        "src/processor/dump_context.cc",
+        "src/processor/dump_object.cc",
+        "src/processor/logging.cc",
+        "src/processor/logging.h",
+        "src/processor/pathname_stripper.cc",
+        "src/processor/pathname_stripper.h",
+        "src/processor/proc_maps_linux.cc",
+        "src/processor/process_state.cc",
+        "src/processor/simple_symbol_supplier.cc",
+        "src/processor/simple_symbol_supplier.h",
+        "src/processor/source_line_resolver_base.cc",
+        "src/processor/stack_frame_cpu.cc",
+        "src/processor/stack_frame_symbolizer.cc",
+        "src/processor/stackwalk_common.cc",
+        "src/processor/stackwalker.cc",
+        "src/processor/stackwalker_amd64.cc",
+        "src/processor/stackwalker_amd64.h",
+        "src/processor/stackwalker_arm.cc",
+        "src/processor/stackwalker_arm.h",
+        "src/processor/stackwalker_arm64.cc",
+        "src/processor/stackwalker_arm64.h",
+        "src/processor/stackwalker_mips.cc",
+        "src/processor/stackwalker_mips.h",
+        "src/processor/stackwalker_ppc.cc",
+        "src/processor/stackwalker_ppc.h",
+        "src/processor/stackwalker_ppc64.cc",
+        "src/processor/stackwalker_ppc64.h",
+        "src/processor/stackwalker_sparc.cc",
+        "src/processor/stackwalker_sparc.h",
+        "src/processor/stackwalker_x86.cc",
+        "src/processor/stackwalker_x86.h",
+        "src/processor/tokenize.cc",
+        "src/processor/tokenize.h",
+
+        # libdisasm
+        "src/third_party/libdisasm/ia32_implicit.c",
+        "src/third_party/libdisasm/ia32_implicit.h",
+        "src/third_party/libdisasm/ia32_insn.c",
+        "src/third_party/libdisasm/ia32_insn.h",
+        "src/third_party/libdisasm/ia32_invariant.c",
+        "src/third_party/libdisasm/ia32_invariant.h",
+        "src/third_party/libdisasm/ia32_modrm.c",
+        "src/third_party/libdisasm/ia32_modrm.h",
+        "src/third_party/libdisasm/ia32_opcode_tables.c",
+        "src/third_party/libdisasm/ia32_opcode_tables.h",
+        "src/third_party/libdisasm/ia32_operand.c",
+        "src/third_party/libdisasm/ia32_operand.h",
+        "src/third_party/libdisasm/ia32_reg.c",
+        "src/third_party/libdisasm/ia32_reg.h",
+        "src/third_party/libdisasm/ia32_settings.c",
+        "src/third_party/libdisasm/ia32_settings.h",
+        "src/third_party/libdisasm/libdis.h",
+        "src/third_party/libdisasm/qword.h",
+        "src/third_party/libdisasm/x86_disasm.c",
+        "src/third_party/libdisasm/x86_format.c",
+        "src/third_party/libdisasm/x86_imm.c",
+        "src/third_party/libdisasm/x86_imm.h",
+        "src/third_party/libdisasm/x86_insn.c",
+        "src/third_party/libdisasm/x86_misc.c",
+        "src/third_party/libdisasm/x86_operand_list.c",
+        "src/third_party/libdisasm/x86_operand_list.h",
+      ]
+
+      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
+
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+      configs += [ ":tools_config" ]
+    }
+
+    fuzzer_test("minidump_fuzzer") {
+      sources = [
+        "minidump_fuzzer.cc",
+        "src/processor/exploitability.cc",
+        "src/processor/minidump.cc",
+        "src/processor/minidump_processor.cc",
+      ]
+
+      deps = [
+        ":stackwalk_common",
+        "//base",
+      ]
+
+      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
+      include_dirs = [ "src" ]
+      dict = "minidump_fuzzer.dict"
+
+      libfuzzer_options = [
+        "close_fd_mask=3",
+        "max_len=128000",
+      ]
+
+      # Always want these files included regardless of platform.
+      set_sources_assignment_filter([])
+      sources += [
+        "src/processor/exploitability_linux.cc",
+        "src/processor/exploitability_linux.h",
+        "src/processor/exploitability_win.cc",
+        "src/processor/exploitability_win.h",
+        "src/processor/symbolic_constants_win.cc",
+        "src/processor/symbolic_constants_win.h",
+      ]
+    }
+
+    executable("microdump_stackwalk") {
+      sources = [
+        "src/processor/microdump.cc",
+        "src/processor/microdump_processor.cc",
+        "src/processor/microdump_stackwalk.cc",
+      ]
+
+      deps = [
+        ":stackwalk_common",
+        "//build/config:exe_and_shlib_deps",
+      ]
+
+      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
+
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+      configs += [ ":tools_config" ]
+    }
+
+    executable("minidump_stackwalk") {
+      sources = [
+        "src/processor/exploitability.cc",
+        "src/processor/minidump.cc",
+        "src/processor/minidump_processor.cc",
+        "src/processor/minidump_stackwalk.cc",
+      ]
+
+      deps = [
+        ":stackwalk_common",
+        "//build/config:exe_and_shlib_deps",
+      ]
+
+      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
+
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+      configs += [ ":tools_config" ]
+
+      # Always want these files included regardless of platform.
+      set_sources_assignment_filter([])
+      sources += [
+        "src/processor/exploitability_linux.cc",
+        "src/processor/exploitability_linux.h",
+        "src/processor/exploitability_win.cc",
+        "src/processor/exploitability_win.h",
+        "src/processor/symbolic_constants_win.cc",
+        "src/processor/symbolic_constants_win.h",
+      ]
+    }
+
+    executable("minidump_dump") {
+      set_sources_assignment_filter([])
+      sources = [
+        "src/processor/basic_code_module.h",
+        "src/processor/basic_code_modules.cc",
+        "src/processor/basic_code_modules.h",
+        "src/processor/dump_context.cc",
+        "src/processor/dump_object.cc",
+        "src/processor/logging.cc",
+        "src/processor/logging.h",
+        "src/processor/minidump.cc",
+        "src/processor/minidump_dump.cc",
+        "src/processor/pathname_stripper.cc",
+        "src/processor/pathname_stripper.h",
+        "src/processor/proc_maps_linux.cc",
+      ]
+
+      configs += [ ":tools_config" ]
+
+      # There are some warnings in this code.
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+
+      deps = [
+        "//build/config:exe_and_shlib_deps",
+      ]
+    }
+  } else {
+    # Aliases for convenience.
+    binary_symlink("microdump_stackwalk") {
+      binary_label = ":$target_name($host_toolchain)"
+    }
+    binary_symlink("minidump_stackwalk") {
+      binary_label = ":$target_name($host_toolchain)"
+    }
+    binary_symlink("minidump_dump") {
+      binary_label = ":$target_name($host_toolchain)"
+    }
+  }
+}
+
+# Mac --------------------------------------------------------------------------
+
+if (is_mac) {
+  if (current_toolchain == host_toolchain) {
+    # TODO(GYP) This should be only 64-bit on Mac. From .gypi:
+    # Like ld, dump_syms needs to operate on enough data that it may
+    # actually need to be able to address more than 4GB. Use x86_64.
+    # Don't worry! An x86_64 dump_syms is perfectly able to dump
+    # 32-bit files.
+    executable("dump_syms") {
+      sources = [
+        "src/common/dwarf/bytereader.cc",
+        "src/common/dwarf/dwarf2diehandler.cc",
+        "src/common/dwarf/dwarf2reader.cc",
+        "src/common/dwarf/elf_reader.cc",
+        "src/common/dwarf/elf_reader.h",
+        "src/common/dwarf_cfi_to_module.cc",
+        "src/common/dwarf_cu_to_module.cc",
+        "src/common/dwarf_line_to_module.cc",
+        "src/common/language.cc",
+        "src/common/mac/arch_utilities.cc",
+        "src/common/mac/arch_utilities.h",
+        "src/common/mac/dump_syms.cc",
+        "src/common/mac/file_id.cc",
+        "src/common/mac/macho_id.cc",
+        "src/common/mac/macho_reader.cc",
+        "src/common/mac/macho_utilities.cc",
+        "src/common/mac/macho_walker.cc",
+        "src/common/md5.cc",
+        "src/common/module.cc",
+        "src/common/stabs_reader.cc",
+        "src/common/stabs_to_module.cc",
+        "src/tools/mac/dump_syms/dump_syms_tool.cc",
+      ]
+
+      # For src/common/stabs_reader.h.
+      defines = [ "HAVE_MACH_O_NLIST_H" ]
+      include_dirs = [ "src/common/mac" ]
+
+      # The DWARF utilities require -funsigned-char.
+      cflags = [ "-funsigned-char" ]
+
+      configs += [ ":internal_config" ]
+
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+
+      # dwarf2reader.cc uses dynamic_cast.
+      configs -= [ "//build/config/compiler:no_rtti" ]
+      configs += [ "//build/config/compiler:rtti" ]
+
+      libs = [ "Foundation.framework" ]
+
+      if (!is_debug) {
+        # dump_syms crashes when built at -O1, -O2, and -O3.  It does
+        # not crash at -Os.  To play it safe, dump_syms is always built
+        # at -O0 until this can be sorted out.
+        # http://code.google.com/p/google-breakpad/issues/detail?id=329
+        configs -= [ "//build/config/compiler:default_optimization" ]
+        cflags += [ "-O0" ]
+      }
+
+      deps = [
+        "//build/config:exe_and_shlib_deps",
+      ]
+    }
+
+    executable("symupload") {
+      sources = [
+        "src/common/mac/HTTPMultipartUpload.m",
+        "src/tools/mac/symupload/symupload.m",
+      ]
+
+      include_dirs = [ "src/common/mac" ]
+
+      libs = [ "Foundation.framework" ]
+
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+
+      deps = [
+        "//build/config:exe_and_shlib_deps",
+      ]
+    }
+  } else {
+    binary_symlink("dump_syms") {
+      binary_label = ":$target_name($host_toolchain)"
+    }
+    binary_symlink("symupload") {
+      binary_label = ":$target_name($host_toolchain)"
+    }
+  }
+}
+
+if (is_ios) {
+  binary_symlink("dump_syms") {
+    binary_label = ":$target_name($host_toolchain)"
+  }
+  binary_symlink("symupload") {
+    binary_label = ":$target_name($host_toolchain)"
+  }
+}
+
+if (is_mac) {
+  static_library("utilities") {
+    sources = [
+      "src/client/mac/crash_generation/ConfigFile.mm",
+      "src/client/mac/handler/breakpad_nlist_64.cc",
+      "src/client/mac/handler/dynamic_images.cc",
+      "src/client/mac/handler/minidump_generator.cc",
+      "src/client/minidump_file_writer.cc",
+      "src/common/convert_UTF.c",
+      "src/common/mac/MachIPC.mm",
+      "src/common/mac/arch_utilities.cc",
+      "src/common/mac/bootstrap_compat.cc",
+      "src/common/mac/file_id.cc",
+      "src/common/mac/launch_reporter.cc",
+      "src/common/mac/macho_id.cc",
+      "src/common/mac/macho_utilities.cc",
+      "src/common/mac/macho_walker.cc",
+      "src/common/mac/string_utilities.cc",
+      "src/common/md5.cc",
+      "src/common/simple_string_dictionary.cc",
+      "src/common/string_conversion.cc",
+    ]
+
+    configs += [ ":internal_config" ]
+
+    # There are some warnings in this code.
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+  }
+
+  executable("crash_inspector") {
+    sources = [
+      "src/client/mac/crash_generation/Inspector.mm",
+      "src/client/mac/crash_generation/InspectorMain.mm",
+    ]
+
+    # TODO(GYP): 'mac_real_dsym': 1,
+
+    include_dirs = [
+      "src/client/apple/Framework",
+      "src/common/mac",
+      "src",
+    ]
+    libs = [
+      "CoreServices.framework",
+      "Foundation.framework",
+    ]
+
+    deps = [
+      ":utilities",
+      "//build/config:exe_and_shlib_deps",
+    ]
+  }
+
+  # TODO(GYP) this target has some mac_bundle_resources stuff.
+  # executable("crash_report_sender") {
+  # }
+  group("crash_report_sender") {
+  }
+
+  config("breakpad_config") {
+    include_dirs = [ "src/client/apple/Framework" ]
+  }
+
+  static_library("breakpad") {
+    sources = [
+      "src/client/mac/Framework/Breakpad.mm",
+      "src/client/mac/Framework/OnDemandServer.mm",
+      "src/client/mac/crash_generation/crash_generation_client.cc",
+      "src/client/mac/crash_generation/crash_generation_client.h",
+      "src/client/mac/handler/exception_handler.cc",
+      "src/client/mac/handler/protected_memory_allocator.cc",
+    ]
+
+    configs += [ ":internal_config" ]
+    public_configs = [ ":breakpad_config" ]
+
+    defines = [ "USE_PROTECTED_ALLOCATIONS=1" ]
+    include_dirs = [ "src/client/apple/Framework" ]
+
+    deps = [
+      ":crash_inspector",
+      ":crash_report_sender",
+      ":utilities",
+    ]
+  }
+
+  group("client") {
+    public_configs = [ ":client_config" ]
+  }
+}
+
+if (is_linux || is_android) {
+  if (current_toolchain == host_toolchain) {
+    executable("symupload") {
+      sources = [
+        "src/common/linux/http_upload.cc",
+        "src/common/linux/http_upload.h",
+        "src/common/linux/symbol_upload.cc",
+        "src/common/linux/symbol_upload.h",
+        "src/tools/linux/symupload/sym_upload.cc",
+      ]
+
+      include_dirs = [
+        "src",
+        "src/third_party",
+      ]
+
+      configs += [ ":tools_config" ]
+
+      libs = [ "dl" ]
+
+      deps = [
+        "//build/config:exe_and_shlib_deps",
+      ]
+    }
+
+    # dump_syms is a host tool, so only compile it for the host system.
+    executable("dump_syms") {
+      sources = [
+        "src/common/dwarf/bytereader.cc",
+        "src/common/dwarf/dwarf2diehandler.cc",
+        "src/common/dwarf/dwarf2reader.cc",
+        "src/common/dwarf/elf_reader.cc",
+        "src/common/dwarf/elf_reader.h",
+        "src/common/dwarf_cfi_to_module.cc",
+        "src/common/dwarf_cfi_to_module.h",
+        "src/common/dwarf_cu_to_module.cc",
+        "src/common/dwarf_cu_to_module.h",
+        "src/common/dwarf_line_to_module.cc",
+        "src/common/dwarf_line_to_module.h",
+        "src/common/language.cc",
+        "src/common/language.h",
+        "src/common/linux/crc32.cc",
+        "src/common/linux/crc32.h",
+        "src/common/linux/dump_symbols.cc",
+        "src/common/linux/dump_symbols.h",
+        "src/common/linux/elf_symbols_to_module.cc",
+        "src/common/linux/elf_symbols_to_module.h",
+        "src/common/linux/elfutils.cc",
+        "src/common/linux/elfutils.h",
+        "src/common/linux/file_id.cc",
+        "src/common/linux/file_id.h",
+        "src/common/linux/guid_creator.h",
+        "src/common/linux/linux_libc_support.cc",
+        "src/common/linux/linux_libc_support.h",
+        "src/common/linux/memory_mapped_file.cc",
+        "src/common/linux/memory_mapped_file.h",
+        "src/common/module.cc",
+        "src/common/module.h",
+        "src/common/stabs_reader.cc",
+        "src/common/stabs_reader.h",
+        "src/common/stabs_to_module.cc",
+        "src/common/stabs_to_module.h",
+        "src/tools/linux/dump_syms/dump_syms.cc",
+      ]
+
+      # There are some warnings in this code.
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+
+      # dwarf2reader.cc uses dynamic_cast. Because we don't typically
+      # don't support RTTI, we enable it for this single target. Since
+      # dump_syms doesn't share any object files with anything else,
+      # this doesn't end up polluting Chrome itself.
+      configs -= [ "//build/config/compiler:no_rtti" ]
+      configs += [ "//build/config/compiler:rtti" ]
+
+      # Breakpad rev 583 introduced this flag.
+      # Using this define, stabs_reader.h will include a.out.h to
+      # build on Linux.
+      defines = [ "HAVE_A_OUT_H" ]
+
+      include_dirs = [ "src" ]
+
+      deps = [
+        "//build/config:exe_and_shlib_deps",
+      ]
+    }
+  } else {
+    # Aliases for convenience.
+    binary_symlink("dump_syms") {
+      binary_label = ":dump_syms($host_toolchain)"
+    }
+    binary_symlink("symupload") {
+      binary_label = ":symupload($host_toolchain)"
+    }
+  }
+
+  static_library("client") {
+    # Want all these sources for both Linux and Android.
+    set_sources_assignment_filter([])
+    sources = [
+      "src/client/linux/crash_generation/crash_generation_client.cc",
+      "src/client/linux/crash_generation/crash_generation_client.h",
+      "src/client/linux/dump_writer_common/mapping_info.h",
+      "src/client/linux/dump_writer_common/thread_info.cc",
+      "src/client/linux/dump_writer_common/thread_info.h",
+      "src/client/linux/dump_writer_common/ucontext_reader.cc",
+      "src/client/linux/dump_writer_common/ucontext_reader.h",
+      "src/client/linux/handler/exception_handler.cc",
+      "src/client/linux/handler/exception_handler.h",
+      "src/client/linux/handler/minidump_descriptor.cc",
+      "src/client/linux/handler/minidump_descriptor.h",
+      "src/client/linux/log/log.cc",
+      "src/client/linux/log/log.h",
+      "src/client/linux/microdump_writer/microdump_writer.cc",
+      "src/client/linux/microdump_writer/microdump_writer.h",
+      "src/client/linux/minidump_writer/cpu_set.h",
+      "src/client/linux/minidump_writer/directory_reader.h",
+      "src/client/linux/minidump_writer/line_reader.h",
+      "src/client/linux/minidump_writer/linux_core_dumper.cc",
+      "src/client/linux/minidump_writer/linux_core_dumper.h",
+      "src/client/linux/minidump_writer/linux_dumper.cc",
+      "src/client/linux/minidump_writer/linux_dumper.h",
+      "src/client/linux/minidump_writer/linux_ptrace_dumper.cc",
+      "src/client/linux/minidump_writer/linux_ptrace_dumper.h",
+      "src/client/linux/minidump_writer/minidump_writer.cc",
+      "src/client/linux/minidump_writer/minidump_writer.h",
+      "src/client/linux/minidump_writer/proc_cpuinfo_reader.h",
+      "src/client/minidump_file_writer-inl.h",
+      "src/client/minidump_file_writer.cc",
+      "src/client/minidump_file_writer.h",
+      "src/common/convert_UTF.c",
+      "src/common/convert_UTF.h",
+      "src/common/linux/elf_core_dump.cc",
+      "src/common/linux/elf_core_dump.h",
+      "src/common/linux/elfutils.cc",
+      "src/common/linux/elfutils.h",
+      "src/common/linux/file_id.cc",
+      "src/common/linux/file_id.h",
+      "src/common/linux/google_crashdump_uploader.cc",
+      "src/common/linux/google_crashdump_uploader.h",
+      "src/common/linux/guid_creator.cc",
+      "src/common/linux/guid_creator.h",
+      "src/common/linux/libcurl_wrapper.cc",
+      "src/common/linux/libcurl_wrapper.h",
+      "src/common/linux/linux_libc_support.cc",
+      "src/common/linux/linux_libc_support.h",
+      "src/common/linux/memory_mapped_file.cc",
+      "src/common/linux/memory_mapped_file.h",
+      "src/common/linux/safe_readlink.cc",
+      "src/common/linux/safe_readlink.h",
+      "src/common/memory.h",
+      "src/common/simple_string_dictionary.cc",
+      "src/common/simple_string_dictionary.h",
+      "src/common/string_conversion.cc",
+      "src/common/string_conversion.h",
+    ]
+
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+    public_configs = [ ":client_config" ]
+
+    if (current_cpu == "arm" && is_chromeos) {
+      # Avoid running out of registers in
+      # linux_syscall_support.h:sys_clone()'s inline assembly.
+      cflags = [ "-marm" ]
+    }
+
+    # Clang's -mstackrealign doesn't work well with
+    # linux_syscall_support.h hand written asm syscalls.
+    # See https://crbug.com/556393
+    configs -= [ "//build/config/compiler:clang_stackrealign" ]
+
+    if (is_android) {
+      sources += [ "src/common/android/breakpad_getcontext.S" ]
+    }
+
+    libs = [ "dl" ]
+
+    include_dirs = [
+      ".",
+      "src",
+      "src/client",
+      "src/third_party/linux/include",
+    ]
+  }
+
+  static_library("processor_support") {
+    set_sources_assignment_filter([])
+    sources = [
+      "src/common/scoped_ptr.h",
+      "src/processor/basic_code_modules.cc",
+      "src/processor/basic_code_modules.h",
+      "src/processor/dump_context.cc",
+      "src/processor/dump_object.cc",
+      "src/processor/logging.cc",
+      "src/processor/logging.h",
+      "src/processor/minidump.cc",
+      "src/processor/pathname_stripper.cc",
+      "src/processor/pathname_stripper.h",
+      "src/processor/proc_maps_linux.cc",
+    ]
+
+    include_dirs = [
+      "src",
+      "src/client",
+      "src/third_party/linux/include",
+      ".",
+    ]
+
+    # There are some warnings in this code.
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+  }
+
+  test("breakpad_unittests") {
+    set_sources_assignment_filter([])
+    sources = [
+      "linux/breakpad_googletest_includes.h",
+      "src/client/linux/handler/exception_handler_unittest.cc",
+      "src/client/linux/minidump_writer/cpu_set_unittest.cc",
+      "src/client/linux/minidump_writer/directory_reader_unittest.cc",
+      "src/client/linux/minidump_writer/line_reader_unittest.cc",
+      "src/client/linux/minidump_writer/linux_core_dumper_unittest.cc",
+      "src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc",
+      "src/client/linux/minidump_writer/minidump_writer_unittest.cc",
+      "src/client/linux/minidump_writer/minidump_writer_unittest_utils.cc",
+      "src/client/linux/minidump_writer/proc_cpuinfo_reader_unittest.cc",
+      "src/common/linux/elf_core_dump_unittest.cc",
+      "src/common/linux/file_id_unittest.cc",
+      "src/common/linux/linux_libc_support_unittest.cc",
+      "src/common/linux/synth_elf.cc",
+      "src/common/linux/tests/auto_testfile.h",
+      "src/common/linux/tests/crash_generator.cc",
+      "src/common/linux/tests/crash_generator.h",
+      "src/common/memory_range.h",
+      "src/common/memory_unittest.cc",
+      "src/common/simple_string_dictionary_unittest.cc",
+      "src/common/test_assembler.cc",
+      "src/common/tests/file_utils.cc",
+      "src/common/tests/file_utils.h",
+      "src/tools/linux/md2core/minidump_memory_range.h",
+      "src/tools/linux/md2core/minidump_memory_range_unittest.cc",
+    ]
+
+    deps = [
+      ":client",
+      ":linux_dumper_unittest_helper",
+      ":processor_support",
+      "//build/config:exe_and_shlib_deps",
+      "//testing/gmock",
+      "//testing/gtest",
+      "//testing/gtest:gtest_main",
+    ]
+
+    include_dirs = [
+      "linux",  # Use our copy of breakpad_googletest_includes.h
+      ".",
+    ]
+
+    # There are some warnings in this code.
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [
+      ":client_config",
+      "//build/config/compiler:no_chromium_code",
+    ]
+
+    if (is_clang) {
+      # See http://crbug.com/138571#c18
+      cflags = [ "-Wno-unused-value" ]
+    }
+
+    if (is_android) {
+      use_raw_android_executable = true
+      sources += [ "src/common/android/breakpad_getcontext_unittest.cc" ]
+      libs = [ "log" ]
+      extra_dist_files = [ "$root_out_dir/linux_dumper_unittest_helper" ]
+    }
+
+    # Clang's -mstackrealign doesn't work well with
+    # linux_syscall_support.h hand written asm syscalls.
+    # See https://crbug.com/556393
+    configs -= [ "//build/config/compiler:clang_stackrealign" ]
+
+    # Add the breakpad unittest config at the end to override all configs.
+    configs += [ ":breakpad_unittest_config" ]
+  }
+
+  executable("linux_dumper_unittest_helper") {
+    set_sources_assignment_filter([])
+    testonly = true
+    sources = [
+      "src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc",
+    ]
+    deps = [
+      ":processor_support",
+      "//build/config:exe_and_shlib_deps",
+    ]
+
+    configs += [ ":client_config" ]
+
+    if (is_component_build) {
+      ldflags = [
+        "-Wl,-rpath,",
+        rebase_path(root_build_dir),
+      ]
+    }
+  }
+
+  executable("generate_test_dump") {
+    set_sources_assignment_filter([])
+    testonly = true
+    sources = [
+      "linux/generate-test-dump.cc",
+    ]
+
+    # This file has an unused variable warning.
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [
+      ":client_config",
+      "//build/config/compiler:no_chromium_code",
+    ]
+
+    deps = [
+      ":client",
+      "//build/config:exe_and_shlib_deps",
+    ]
+
+    if (is_android) {
+      libs = [ "log" ]
+    }
+  }
+
+  executable("minidump-2-core") {
+    set_sources_assignment_filter([])
+    sources = [
+      "src/tools/linux/md2core/minidump-2-core.cc",
+    ]
+
+    include_dirs = [ "src" ]
+
+    deps = [
+      ":client",
+      "//build/config:exe_and_shlib_deps",
+    ]
+  }
+
+  executable("core-2-minidump") {
+    set_sources_assignment_filter([])
+    sources = [
+      "src/tools/linux/core2md/core2md.cc",
+    ]
+
+    deps = [
+      ":client",
+      "//build/config:exe_and_shlib_deps",
+    ]
+
+    include_dirs = [ "src" ]
+  }
+}
+
+if (is_win) {
+  executable("dump_syms") {
+    # TODO(scottmg) using this with VS2015 may break the crash server.
+    # https://crbug.com/696671
+    include_dirs = [
+      "$visual_studio_path/DIA SDK/include",
+      "src",
+    ]
+
+    sources = [
+      "src/common/windows/dia_util.cc",
+      "src/common/windows/dia_util.h",
+      "src/common/windows/guid_string.cc",
+      "src/common/windows/guid_string.h",
+      "src/common/windows/omap.cc",
+      "src/common/windows/omap.h",
+      "src/common/windows/pdb_source_line_writer.cc",
+      "src/common/windows/pdb_source_line_writer.h",
+      "src/common/windows/string_utils-inl.h",
+      "src/common/windows/string_utils.cc",
+      "src/tools/windows/dump_syms/dump_syms.cc",
+    ]
+
+    lib_dirs = []
+    if (target_cpu == "x64") {
+      lib_dirs += [ "$visual_studio_path/DIA SDK/lib/amd64" ]
+    } else {
+      lib_dirs += [ "$visual_studio_path/DIA SDK/lib" ]
+    }
+
+    libs = [
+      "diaguids.lib",
+      "imagehlp.lib",
+    ]
+    if (is_clang) {
+      # clang complains about microsoft-specific goto extensions. Instead of
+      # rewriting decade-old, goto-ridden code, disable the warning.
+      cflags = [ "-Wno-microsoft-goto" ]
+    }
+  }
+}
+
+if (is_ios) {
+  static_library("client") {
+    set_sources_assignment_filter([])
+    sources = [
+      "src/client/ios/Breakpad.h",
+      "src/client/ios/Breakpad.mm",
+      "src/client/ios/BreakpadController.h",
+      "src/client/ios/BreakpadController.mm",
+      "src/client/ios/handler/ios_exception_minidump_generator.h",
+      "src/client/ios/handler/ios_exception_minidump_generator.mm",
+      "src/client/mac/crash_generation/ConfigFile.h",
+      "src/client/mac/crash_generation/ConfigFile.mm",
+      "src/client/mac/handler/breakpad_nlist_64.cc",
+      "src/client/mac/handler/breakpad_nlist_64.h",
+      "src/client/mac/handler/dynamic_images.cc",
+      "src/client/mac/handler/dynamic_images.h",
+      "src/client/mac/handler/exception_handler.cc",
+      "src/client/mac/handler/exception_handler.h",
+      "src/client/mac/handler/minidump_generator.cc",
+      "src/client/mac/handler/minidump_generator.h",
+      "src/client/mac/handler/protected_memory_allocator.cc",
+      "src/client/mac/handler/protected_memory_allocator.h",
+      "src/client/mac/sender/uploader.h",
+      "src/client/mac/sender/uploader.mm",
+      "src/client/minidump_file_writer-inl.h",
+      "src/client/minidump_file_writer.cc",
+      "src/client/minidump_file_writer.h",
+      "src/common/convert_UTF.c",
+      "src/common/convert_UTF.h",
+      "src/common/mac/HTTPMultipartUpload.m",
+      "src/common/mac/file_id.cc",
+      "src/common/mac/file_id.h",
+      "src/common/mac/macho_id.cc",
+      "src/common/mac/macho_id.h",
+      "src/common/mac/macho_utilities.cc",
+      "src/common/mac/macho_utilities.h",
+      "src/common/mac/macho_walker.cc",
+      "src/common/mac/macho_walker.h",
+      "src/common/mac/string_utilities.cc",
+      "src/common/mac/string_utilities.h",
+      "src/common/md5.cc",
+      "src/common/md5.h",
+      "src/common/simple_string_dictionary.cc",
+      "src/common/simple_string_dictionary.h",
+      "src/common/string_conversion.cc",
+      "src/common/string_conversion.h",
+      "src/google_breakpad/common/minidump_format.h",
+    ]
+    set_sources_assignment_filter(sources_assignment_filter)
+
+    include_dirs = [
+      "src",
+      "src/client/mac/Framework",
+      "src/common/mac",
+    ]
+
+    deps = [
+      "//third_party/google_toolbox_for_mac",
+    ]
+
+    public_configs = [ ":client_config" ]
+
+    if (is_clang) {
+      # See https://bugs.chromium.org/p/google-breakpad/issues/detail?id=675.
+      cflags = [ "-Wno-deprecated-declarations" ]
+    }
+  }
+  # TODO(GYP) There is some XCode-only targets like ninja-breakpad.
+}
+
+if (is_win) {
+  group("client") {
+    public_configs = [ ":client_config" ]
+  }
+
+  config("breakpad_handler_warnings") {
+    if (is_clang) {
+      # See https://code.google.com/p/google-breakpad/issues/detail?id=658.
+      cflags = [ "-Wno-reorder" ]
+    }
+  }
+
+  static_library("breakpad_handler") {
+    configs += [ ":handler_config" ]
+    if (is_win) {
+      public_configs = [ ":handler_config" ]
+    }
+
+    defines = [ "BREAKPAD_NO_TERMINATE_THREAD" ]
+
+    sources = [
+      "src/client/windows/crash_generation/client_info.cc",
+      "src/client/windows/crash_generation/client_info.h",
+      "src/client/windows/crash_generation/crash_generation_client.cc",
+      "src/client/windows/crash_generation/crash_generation_client.h",
+      "src/client/windows/crash_generation/crash_generation_server.cc",
+      "src/client/windows/crash_generation/crash_generation_server.h",
+      "src/client/windows/crash_generation/minidump_generator.cc",
+      "src/client/windows/crash_generation/minidump_generator.h",
+      "src/client/windows/handler/exception_handler.cc",
+      "src/client/windows/handler/exception_handler.h",
+      "src/common/windows/guid_string.cc",
+      "src/common/windows/guid_string.h",
+      "src/common/windows/string_utils-inl.h",
+      "src/google_breakpad/common/minidump_format.h",
+    ]
+    configs += [ ":breakpad_handler_warnings" ]
+  }
+
+  source_set("breakpad_sender") {
+    sources = [
+      "src/client/windows/sender/crash_report_sender.cc",
+      "src/client/windows/sender/crash_report_sender.h",
+      "src/common/windows/http_upload.cc",
+      "src/common/windows/http_upload.h",
+    ]
+    configs += [ ":sender_config" ]
+    public_configs = [ ":sender_config" ]
+  }
+}
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..2a66be3
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,88 @@
+Copyright (c) 2006, 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.
+
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright (c) 1996 - 2011, Daniel Stenberg, <daniel@haxx.se>.
+
+All rights reserved.
+
+Permission to use, copy, modify, and distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright
+notice and this permission notice appear in all copies.
+
+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 OF THIRD PARTY RIGHTS. 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.
+
+Except as contained in this notice, the name of a copyright holder shall not
+be used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization of the copyright holder.
+
+
+Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+
+@APPLE_LICENSE_HEADER_START@
+
+This file contains Original Code and/or Modifications of Original Code
+as defined in and that are subject to the Apple Public Source License
+Version 2.0 (the 'License'). You may not use this file except in
+compliance with the License. Please obtain a copy of the License at
+http://www.opensource.apple.com/apsl/ and read it before using this
+file.
+
+The Original Code and all software distributed under the License are
+distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+Please see the License for the specific language governing rights and
+limitations under the License.
+
+@APPLE_LICENSE_HEADER_END@
+
+
+Copyright 2007-2008 Google Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License"); you may not
+use this file except in compliance with the License.  You may obtain a copy
+of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+License for the specific language governing permissions and limitations under
+the License.
diff --git a/OWNERS b/OWNERS
new file mode 100644
index 0000000..c70e545
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1,5 @@
+mark@chromium.org
+thestig@chromium.org
+
+# TEAM: google-breakpad-dev@googlegroups.com
+# COMPONENT: Internals>CrashReporting
diff --git a/README.chromium b/README.chromium
new file mode 100644
index 0000000..bab0a12
--- /dev/null
+++ b/README.chromium
@@ -0,0 +1,12 @@
+Name: Breakpad, An open-source multi-platform crash reporting system
+Short Name: breakpad
+URL: https://chromium.googlesource.com/breakpad/breakpad
+License: New BSD, Apple PSL 2.0 and Apache 2.0
+Security Critical: no
+
+This directory contains Chrome's version of Breakpad's Visual Studio build
+files (*.vcproj) and a compiled version of Breakpad's symupload.exe utility
+for Windows.
+
+Part of the upstream Breakpad project is pulled into the src/ subdirectory via
+DEPS.
diff --git a/linux/breakpad_googletest_includes.h b/linux/breakpad_googletest_includes.h
new file mode 100644
index 0000000..aeab315
--- /dev/null
+++ b/linux/breakpad_googletest_includes.h
@@ -0,0 +1,36 @@
+// Copyright (c) 2009, 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.
+
+#ifndef BREAKPAD_GOOGLETEST_INCLUDES_H__
+#define BREAKPAD_GOOGLETEST_INCLUDES_H__
+
+#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/gmock/include/gmock/gmock.h"
+
+#endif  // BREAKPAD_GOOGLETEST_INCLUDES_H__
diff --git a/linux/generate-test-dump.cc b/linux/generate-test-dump.cc
new file mode 100644
index 0000000..b0dca00
--- /dev/null
+++ b/linux/generate-test-dump.cc
@@ -0,0 +1,67 @@
+// Copyright (c) 2009, 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.
+
+// This code exists to generate minidump files for testing.
+
+#include <stdlib.h>
+
+#include <unistd.h>
+
+#include "breakpad/src/client/linux/handler/exception_handler.h"
+#include "breakpad/src/common/linux/linux_libc_support.h"
+#include "third_party/lss/linux_syscall_support.h"
+
+static bool DumpCallback(const google_breakpad::MinidumpDescriptor& descriptor,
+                         void* context, bool success) {
+  if (!success) {
+    static const char msg[] = "Failed to write minidump\n";
+    sys_write(2, msg, sizeof(msg) - 1);
+    return false;
+  }
+
+  static const char msg[] = "Wrote minidump: ";
+  sys_write(2, msg, sizeof(msg) - 1);
+  sys_write(2, descriptor.path(), strlen(descriptor.path()));
+  sys_write(2, "\n", 1);
+
+  return true;
+}
+
+static void DoSomethingWhichCrashes() {
+  int local_var = 1;
+  *reinterpret_cast<volatile char*>(NULL) = 1;
+}
+
+int main() {
+  google_breakpad::MinidumpDescriptor minidump(".");
+  google_breakpad::ExceptionHandler breakpad(minidump, NULL, DumpCallback, NULL,
+                                             true, -1);
+  DoSomethingWhichCrashes();
+  return 0;
+}
diff --git a/minidump_fuzzer.cc b/minidump_fuzzer.cc
new file mode 100644
index 0000000..8af4532
--- /dev/null
+++ b/minidump_fuzzer.cc
@@ -0,0 +1,88 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+#include <streambuf>
+#include <istream>
+#include <memory>
+
+#include "base/memory/free_deleter.h"
+#include "google_breakpad/processor/basic_source_line_resolver.h"
+#include "google_breakpad/processor/minidump.h"
+#include "google_breakpad/processor/minidump_processor.h"
+#include "google_breakpad/processor/process_state.h"
+#include "processor/logging.h"
+#include "processor/simple_symbol_supplier.h"
+#include "processor/stackwalk_common.h"
+
+namespace {
+
+using google_breakpad::BasicSourceLineResolver;
+using google_breakpad::Minidump;
+using google_breakpad::MinidumpProcessor;
+using google_breakpad::ProcessState;
+using google_breakpad::SimpleSymbolSupplier;
+
+struct membuf : std::streambuf {
+  membuf(char* begin, char* end) { setg(begin, begin, end); }
+
+ protected:
+  virtual pos_type seekoff(off_type off,
+                           std::ios_base::seekdir dir,
+                           std::ios_base::openmode which = std::ios_base::in) {
+    if (dir == std::ios_base::cur)
+      gbump(off);
+    return gptr() - eback();
+  }
+};
+
+bool PrintMinidumpProcess(const uint8_t* data,
+                          size_t size,
+                          const std::vector<string>& symbol_paths) {
+  std::unique_ptr<SimpleSymbolSupplier> symbol_supplier;
+  char* ptr = static_cast<char*>(malloc(size));
+  if (!ptr)
+    return false;
+
+  std::unique_ptr<char, base::FreeDeleter> buffer(ptr);
+  memcpy(buffer.get(), data, size);
+
+  membuf sbuf(buffer.get(), buffer.get() + size);
+  std::istream input(&sbuf);
+
+  if (!symbol_paths.empty()) {
+    symbol_supplier.reset(new SimpleSymbolSupplier(symbol_paths));
+  }
+
+  BasicSourceLineResolver resolver;
+  MinidumpProcessor minidump_processor(symbol_supplier.get(), &resolver);
+
+  // Process the minidump.
+  Minidump dump(input);
+  if (!dump.Read()) {
+    BPLOG(ERROR) << "Minidump " << dump.path() << " could not be read";
+    return false;
+  }
+  ProcessState process_state;
+  if (minidump_processor.Process(&dump, &process_state) !=
+      google_breakpad::PROCESS_OK) {
+    BPLOG(ERROR) << "MinidumpProcessor::Process failed";
+    return false;
+  }
+
+  PrintProcessStateMachineReadable(process_state);
+
+  return true;
+}
+
+}  // namespace
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+  // TODO(wfh): Somehow pull symbols in.
+  PrintMinidumpProcess(data, size, std::vector<string>());
+  return 0;
+}
diff --git a/minidump_fuzzer.dict b/minidump_fuzzer.dict
new file mode 100644
index 0000000..ecd94eb
--- /dev/null
+++ b/minidump_fuzzer.dict
@@ -0,0 +1,2 @@
+minidump_sig="PMDM"
+minidump_ver="\x93\xa7"
diff --git a/symupload.exe b/symupload.exe
new file mode 100755
index 0000000..7e0e9fb
--- /dev/null
+++ b/symupload.exe
Binary files differ
diff --git a/using_breakpad.vsprops b/using_breakpad.vsprops
new file mode 100644
index 0000000..7d7ab92
--- /dev/null
+++ b/using_breakpad.vsprops
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="using_breakpad"
+	>
+	<Tool
+		Name="VCCLCompilerTool"
+		AdditionalIncludeDirectories="&quot;$(SolutionDir)..\breakpad\src&quot;"
+	/>
+</VisualStudioPropertySheet>
