)]}'
{
  "log": [
    {
      "commit": "02fdb569f65f85730cca514311fd0965dec0b6a1",
      "tree": "40e598c469b5954af3bc511022496e05a44ec3e6",
      "parents": [
        "a4a9a81d383b4c29841279b342a4e8772542ea88"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Dec 08 15:04:49 2017 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Dec 08 15:44:14 2017 -0800"
      },
      "message": "Do not check arch for format check.\n\nUse a generic check if the address is 32 bits when using the default\nformating of a backtrace line instead of an arch check.\n\nTest: New unit tests pass.\nChange-Id: Id609abc037d7b437a02d52763aa91fbefe5f4d5b\n"
    },
    {
      "commit": "70f7d47f3ca5ac63f3e4d77c60a37aaff19f5b2a",
      "tree": "963ee36f5745de63d0f8b721b0cc7ae21117f75d",
      "parents": [
        "cf27dbacafb53e800ca77c8b95392bafc739253f",
        "e328673a305a5c9f4acf73a7a2826eb61390632c"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Dec 08 20:09:34 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Dec 08 20:09:34 2017 +0000"
      },
      "message": "Merge \"Add method to detect remote read function to use.\""
    },
    {
      "commit": "e328673a305a5c9f4acf73a7a2826eb61390632c",
      "tree": "a4de300723718b8bfac81cff5a0ab7caa4b76b4a",
      "parents": [
        "255c43cd050f5202e96483430684c19b7ce916ff"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Dec 07 17:41:18 2017 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Dec 07 19:00:00 2017 -0800"
      },
      "message": "Add method to detect remote read function to use.\n\nThe process_vm_read function is much faster than ptrace, but sometimes\nthat will not work on a remote process. Modify the libunwindstack\nMemoryRemote object to figure out which one it can use.\n\nWrote new unit test to verify this checking behavior.\n\nModify libbacktrace so that the read from libunwind is used instead of\nusing the default ptrace calls.\n\nAdd some benchmarks to libbacktrace to compare the two different methods.\n\nTest: Ran unit tests libbacktrace/libunwindstack/debuggerd.\nTest: Ran debuggerd -b \u003cSYSTEM_SERVER_PID\u003e\nTest: Ran debuggerd -b \u003cMEDIACODEC PID\u003e\nTest: Ran debuggerd -b \u003cRANDOM_PID\u003e\nTest: Used crasher to create tombstones and verified stack data is\nTest: dumped properly.\nChange-Id: If75ca238289532dd8e1de430d569cabb2523380a\n"
    },
    {
      "commit": "3289b9c9282dec777363256e27fcc23cd97001c1",
      "tree": "e592f69aba1eceaf88b8ddb643935a5e77b13e3c",
      "parents": [
        "255c43cd050f5202e96483430684c19b7ce916ff",
        "693d63f9cfc21e3334c6f8f228d73c4fb60ced8b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 07 23:21:26 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Dec 07 23:21:26 2017 +0000"
      },
      "message": "Merge \"Add OWNERS.\""
    },
    {
      "commit": "693d63f9cfc21e3334c6f8f228d73c4fb60ced8b",
      "tree": "f0cc35536aff301e680302b8f3654517b8863acc",
      "parents": [
        "aaa0bbce8eadf1a428493f3524066a74447eded4"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 07 11:31:02 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 07 13:30:03 2017 -0800"
      },
      "message": "Add OWNERS.\n\nBug: N/A\nTest: N/A\nChange-Id: Ie785058c0f5eb9b4086c98ccba6e63e3ed411b65\n"
    },
    {
      "commit": "d06001d6e07b14b865f3294fff82d2571ed7cb2c",
      "tree": "658e3e571743464b47bad3a5642e2ab0bd41fa40",
      "parents": [
        "1ae6d14f938c05654a4bef99a54503dbb2409572"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Nov 30 18:56:01 2017 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Dec 06 16:01:40 2017 -0800"
      },
      "message": "Split arch data into separate files.\n\nAdd an ArchEnum to express the arch of the Elf objects and Reg objects.\n\nSplit out the regs code into per arch pieces and generic parts.\nAlso, split out the header files for each arch.\n\nDo not break out the test code yet, there isn\u0027t enough and it doesn\u0027t\nhelp to maintain the tests.\n\nTest: libunwindstack/libbacktrace/debuggerd unit tests pass.\nTest: Running debuggerd -b \u003cPIDS\u003e yields valid data on bullhead.\nChange-Id: If61f6c730c9ff2249f986b41de8c4d62f7158325\n"
    },
    {
      "commit": "b7de5f542925216dbb8b7124260d2915570598d1",
      "tree": "2126153a21557204dd60a05605c4aa0445155b11",
      "parents": [
        "ebca57adecb3521d78e4e1e5c220df897f84e336"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Dec 01 21:37:37 2017 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Dec 05 13:12:47 2017 -0800"
      },
      "message": "Demand read load bias for a map.\n\nAdd a static GetLoadBias method to the Elf object that only reads just\nenough to get the load bias.\n\nAdd a method to MapInfo that gets the load bias. First attempt to get\nit if the elf object already exists. If no elf object was created, use\nthe new static method to get the load bias.\n\nIn BacktraceMap, add a custom iterator so that when code dereferences\na map element, that\u0027s when the load bias will be retrieved if it hasn\u0027t\nalready been set.\n\nBug: 69871050\n\nTest: New unit tests, verify tombstones have non-zero load bias values for\nTest: libraries with a non-zero load bias.\nChange-Id: I125f4abc827589957fce2f0df24b0f25d037d732\n"
    },
    {
      "commit": "e714ed27747a433938a02a766b8c8047a5c3b6ce",
      "tree": "837a3f6d160ab764b8dc2cc3652d8ff60f7c6f06",
      "parents": [
        "b4fda18d8353cd4b27aefac832f392ad264facc4"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Dec 04 14:23:58 2017 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Dec 04 14:27:34 2017 -0800"
      },
      "message": "Switch MemoryRemote to use ptrace.\n\nSome processes will fail to read when using process_vm_read, so switch\nback to ptrace for now. For example, the system_server process only\ngets two frames without this fix.\n\nFix up some of the remote memory read unit tests to allow passing\neven when using ptrace.\n\nBug: 70160908\n\nTest: All unit tests pass, debuggerd -b \u003csystem_server pid\u003e works.\nChange-Id: I37c67bf9c480d7268c9fe32dad6a8d78a4020b85\n"
    },
    {
      "commit": "b4fda18d8353cd4b27aefac832f392ad264facc4",
      "tree": "3d24ce53f924dc85ce05e7604bca988989efb91a",
      "parents": [
        "20a410b575a44ffff5bd510cb6663ee3a43dc097",
        "b837763b494e59f8532e98d2b57a5f28ed15c5a7"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Dec 02 00:12:21 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Dec 02 00:12:21 2017 +0000"
      },
      "message": "Merge changes I53c2c560,I7d845ac5,I8b11d923\n\n* changes:\n  unwindstack: rename Memory::ReadPartially to Read.\n  unwindstack: rename Memory::Read to ReadFully.\n  unwindstack: add Memory::ReadPartially.\n"
    },
    {
      "commit": "c3d79f7c0749a40d523b36807b8d7525cdb90654",
      "tree": "5258b70a35e2d76b7c9eebad3b37ce5c94e88e88",
      "parents": [
        "f819c1d94b732afca3738ba948c377b8bd1aa762"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Nov 28 19:14:54 2017 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Nov 29 16:10:08 2017 -0800"
      },
      "message": "Fix incorrect usage of relative pcs.\n\nWhen stepping, it\u0027s necessary to use both the unaltered relative pc\nand the adjusted relative pc. If the adjusted pc is not used, the\nwrong unwind information can be used.\n\nAdded new offline unit tests that take real data and verifies that it\nunwinds properly.\n\nFix a bug in the map code that would not properly parse map data for\na 64 bit process when done in a 32 bit process.\n\nFix bug in eh_frame processing that didn\u0027t adjust the pc correctly.\nFix unit tests related to the pc adjustment.\n\nBug: 69475565\n\nTest: Passes libbacktrace/libunwindstack unit tests.\nTest: Run debuggerd -b on processes on a hikey.\nChange-Id: Ic501a1c4549c5f61d2742a7105c42a960f2c892b\n"
    },
    {
      "commit": "f819c1d94b732afca3738ba948c377b8bd1aa762",
      "tree": "19ca0b6c6fb4122e87bc03cf347cf40f7bed46b0",
      "parents": [
        "2f1aa4e90f493e179957000a0dd57ed05e2548f7",
        "be788d891da26943b1ad6abe0f07a8745fa676d5"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Nov 29 02:58:06 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 29 02:58:06 2017 +0000"
      },
      "message": "Merge \"Allow multiple threads sharing a map to unwind.\""
    },
    {
      "commit": "be788d891da26943b1ad6abe0f07a8745fa676d5",
      "tree": "859d524e7673f9e700d5c5f9a102e485fd8c8602",
      "parents": [
        "f03f2a5cd7a7ad7a2cfa3c2ae5f512c0ddbeeb80"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Nov 27 14:50:38 2017 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Nov 28 15:20:38 2017 -0800"
      },
      "message": "Allow multiple threads sharing a map to unwind.\n\nAdd a mutex in MapInfo, and a mutex in Elf. Lock the creation of an Elf\nfile using the MapInfo mutex, and lock when calling Step, GetFunctionName,\nor GetSoname since they can modify information in the object. It might\nbe beneficial to use a fine grained lock in the future.\n\nChange the Maps object to contain a vector of MapInfo pointers rather\nthan the total objects. This avoids copying this data around.\n\nAdd a test to libbacktrace to verify that sharing a map while doing\nunwinds in different threads works.\n\nAdd concurrency tests in libunwindstack to verify the locking works.\n\nAdd always inline to the RegsGetLocal arm and aarch64 functions. I had\na case where clang did not inline the code, so make sure this is specified.\n\nBug: 68813077\n\nTest: New unit tests to cover the case. Passes all unit tests.\nTest: Ran a monkey test while dumping bugreports and verified that\nTest: no crashes in libunwind.\nTest: Remove the locking and verified that all of the concurrenty tests fail.\nChange-Id: I769e728c676f6bdae9e64ce4cdc03b6749beae03\n"
    },
    {
      "commit": "a141709b212daef7b6087b0307b638c4cb8a93d7",
      "tree": "3fffe89d01e7c132bc175009e1990a7ceb004ca7",
      "parents": [
        "8055ea44de477a1e0e5aa7e8fd0d4c835a1c0bf5"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Nov 28 10:59:33 2017 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Nov 28 10:59:33 2017 -0800"
      },
      "message": "Add way to specify an offset in an elf file.\n\nThis is to support the ability to dump an elf embedded in an apk.\n\nTest: Ran unwind_info on a file, then ran it on an apk with an offset.\nChange-Id: I8f23f4bdaadfd3665900bdd45d50cb270e2e0eed\n"
    },
    {
      "commit": "b837763b494e59f8532e98d2b57a5f28ed15c5a7",
      "tree": "6d9d0c4b2d72ee5a0aec42b5686926202989863b",
      "parents": [
        "ef35aa5d40b6404baf702a58527f1cd3a9f42f19"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Oct 18 11:52:53 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Nov 15 15:38:13 2017 -0800"
      },
      "message": "unwindstack: rename Memory::ReadPartially to Read.\n\nTest: mma\nTest: treehugger\nChange-Id: I53c2c5600fb44620b629c01db85a67789594595f\n"
    },
    {
      "commit": "ef35aa5d40b6404baf702a58527f1cd3a9f42f19",
      "tree": "99f7797b05c934a10fdcb058b025a0304ca2b6f5",
      "parents": [
        "29c5378e91720b7befabc91fbab0f25d59a23bf1"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Oct 18 11:44:51 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Nov 15 15:38:13 2017 -0800"
      },
      "message": "unwindstack: rename Memory::Read to ReadFully.\n\nRename Memory::Read to ReadFully to match its semantics with that of\nandroid::base. ReadPartially will be renamed to Read in a follow up\ncommit, kept intentionally separate so that there aren\u0027t any callers\naccidentally switched from ReadFully to Read.\n\nTest: treehugger\nChange-Id: I7d845ac5244c3025d92c8512e960e5d0d1da05af\n"
    },
    {
      "commit": "29c5378e91720b7befabc91fbab0f25d59a23bf1",
      "tree": "bbbad7bd899927a5e6f9e15891be0e4de31fc7c4",
      "parents": [
        "37eb97d911087992fb7dc986331e10a3c5a18d30"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Sep 26 14:11:37 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Nov 15 15:38:13 2017 -0800"
      },
      "message": "unwindstack: add Memory::ReadPartially.\n\nAdd a way to read while allowing for partial reads.\n\nTest: new tests added to libunwindstack_test, ran 32/64 on hikey960, sailfish\nTest: ran unwind on hikey960/sailfish\nChange-Id: I8b11d9230fcd3122148ef3f980863ac1404ad70a\n"
    },
    {
      "commit": "d96cbae4d483cf0422a0d879969ac1fee072aca1",
      "tree": "c5a18c4aec036a415738a9af7b3b5d6fbbe45ed1",
      "parents": [
        "35fc00124bb41e9373bfa2888f30c9839ac97cb7"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Nov 08 11:01:18 2017 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Nov 08 11:04:48 2017 -0800"
      },
      "message": "Fix another nullptr dereference.\n\nIn this case, if the .eh_frame_hdr doesn\u0027t exist, we would crash.\n\nBug: 68813077\n\nTest: Pass new unit tests, verified that without the fix, the unit test\nTest: would crash.\nChange-Id: I4f1365a76fe5c2fb69fa106a1ef15889c14e7611\n"
    },
    {
      "commit": "c9dee84d81e4672dee5dd08890c904d1ab841e56",
      "tree": "b71dfd2d4adf1041b6420cef62492494d00e864c",
      "parents": [
        "1e0b9672defa3504915741c8d4cec3cc73f89568"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Nov 03 14:50:27 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Nov 07 13:22:39 2017 -0800"
      },
      "message": "Add support for only a .eh_frame.\n\nStatic executables only have a .eh_frame section and no .eh_frame_hdr\nsection. Add support for this by rearranging the class hierarchy and\ncreating a DwarfEhFrameWithHdr class and a DwarfEhFrame class to handle\nthe different cases.\n\nAdd new unit tests for DwarfEhFrame and for the new functionality.\n\nBug: 68820189\n\nTest: Passes new unit tests, unwinds static executables.\nChange-Id: I63d7cb8c52a686e96579a2266e18c0d06bbb6e63\n"
    },
    {
      "commit": "13b86658b93e4887034cc3533b5c9af78d72e646",
      "tree": "4b92e489db761a0766df570ec38a5b7a1bb4c63a",
      "parents": [
        "ebcfa449375fb809b266383d0036a7be3ecdac01"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Sun Nov 05 14:01:43 2017 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Sun Nov 05 14:01:43 2017 -0800"
      },
      "message": "Fix nullptr dereference.\n\nIf an entry is found in .eh_frame_hdr, but it\u0027s not properly in .eh_frame,\nthen the code would crash. The assumption that the header always points\nto valid fde data is not guaranteed.\n\nBug: 68813077\n\nTest: Passes new unit test that crashed before the change.\nChange-Id: I914d9bda0d442cd232e2a056ae490301a8850105\n"
    },
    {
      "commit": "fda7edd13ec5970e43e9677dae066f52b277a470",
      "tree": "b384c9f43333bf9615561b9c675be3c10e4b52bc",
      "parents": [
        "bb3769349de0f4becb8a4fd2ed33ffeaf8d56862"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Oct 31 16:10:42 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Oct 31 17:51:02 2017 -0700"
      },
      "message": "Move sp/pc not changing check into Unwinder.\n\nRemove this check from the DwarfSection class.\n\nRather than have every step function make the check, doing it at the\ntop level avoids having every function do the same check.\n\nBug: 68167269\n\nTest: New unit tests, ran debuggerd -b on processes.\nChange-Id: I23b7c799faaf26c93c1b72848df18c78de6c42fb\n"
    },
    {
      "commit": "e22701ee8a8246e9648a60ebdbed2c415c103c91",
      "tree": "499fe42dcb3b6bbd31bfbaeff09398b34e02e2ac",
      "parents": [
        "b9670bb437d493f834c6ba3096946583d2904b72"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Oct 23 14:25:08 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Oct 26 14:20:17 2017 -0700"
      },
      "message": "libbacktrace: remove exit time destructors.\n\nIf libbacktrace is statically linked into a library that interposes\nlibc, exit-time destructors can lead to a segfault upon exit if static\nvariables are used after their destruction.\n\nRemove the one use of a static variable (with inconsequential\nperformance impact of less than 1us per backtrace), and enable\n-Wexit-time-destructors to ensure this stays fixed in the future.\n\nTest: mma\nChange-Id: Icdaf1cf1c1f166cf501d9ecd1983c44e4305f7e9\n"
    },
    {
      "commit": "1cb84cea2f622327d41abb8845e97dffa055fa4e",
      "tree": "f6eee63bebccee922592de7b3946d4aab564475e",
      "parents": [
        "09123383cbdaee9ca0a85289061b7b98ff6160d8"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Oct 24 15:36:00 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Oct 24 15:45:59 2017 -0700"
      },
      "message": "Add an interface for stopping in certain maps.\n\nAlso, change the std::set parameters to std::vector. As jmgao points out,\na small std::set is not really the best choice for performance reasons.\n\nTest: All unit tests pass, enabled the new unwinder and did a kill -3 on\nTest: an android process.\nChange-Id: I81227d7b79a9b7cf1d54fb0e3331d3cf4d4d3c4f\n"
    },
    {
      "commit": "09123383cbdaee9ca0a85289061b7b98ff6160d8",
      "tree": "123197484005ac94fa9824031e75c46643180cfd",
      "parents": [
        "b128c78aef290f0eb0a5fc989a53a39c89a131c9",
        "2502a60ea1a5d612ce5d0c44a121fe314c3ef930"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Oct 24 20:50:30 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 24 20:50:30 2017 +0000"
      },
      "message": "Merge \"If the pc is set to zero, the unwind is done.\""
    },
    {
      "commit": "1c65e77e6d73b9eee13d913e0b7886c72282e67f",
      "tree": "ad4fe5d769556097d531f6c2ab67a2192a2f555c",
      "parents": [
        "b409e5e00b0af1cfe5648d132d4f62797738ac1d",
        "6f580d8b843f4caac8c12383684941ca02de12a8"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Oct 24 04:03:18 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 24 04:03:18 2017 +0000"
      },
      "message": "Merge changes I8f33830f,Icd2b891b,I8736ff5c,Iae6e342a\n\n* changes:\n  libunwindstack: add method to iterate across registers.\n  libbacktrace: expose BacktraceMap\u0027s unwindstack::Memory.\n  libunwindstack: expose UnwindStackMap::GetFunctionName.\n  libbacktrace: expose libunwindstack Unwind routine.\n"
    },
    {
      "commit": "2502a60ea1a5d612ce5d0c44a121fe314c3ef930",
      "tree": "b8f0f043f8762467120b4c1a70d8a4c0ec5c0811",
      "parents": [
        "26b614ddf6a135e37ffd5c2b2a619fdf90569de4"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Oct 23 13:51:54 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Oct 23 14:55:16 2017 -0700"
      },
      "message": "If the pc is set to zero, the unwind is done.\n\nBug: 68047085\n\nTest: Ran new unit tests, verified new unwinder does not show an\nTest: extra pc zero frame for arm 32 bit processes.\nChange-Id: Ic6532e56fbb786a8b7d41638abae777c2d0f1d59\n"
    },
    {
      "commit": "6f580d8b843f4caac8c12383684941ca02de12a8",
      "tree": "cdd50e63d02b89394eefe227899d008499ebbae9",
      "parents": [
        "ebea0ef2566bb2404154d89fbe4e80b0abf197cd"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Sep 22 12:57:15 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Oct 20 13:52:56 2017 -0700"
      },
      "message": "libunwindstack: add method to iterate across registers.\n\nAdd a function to iterate over Regs with a human-friendly name and the\nvalue of the register, to make it easy to string-format registers.\n\nTest: mma\nChange-Id: I8f33830fa79b245b5030b7bc9bc3c1c7ced80c75\n"
    },
    {
      "commit": "e69f470933f24977825bb34ee39d32650b75107f",
      "tree": "79d620e7d0d0661ef01180e42a0e58d370972694",
      "parents": [
        "4e2a8e375e8fa24c1dab531cff5143a5674c8bf3"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Oct 19 16:08:58 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Oct 20 11:15:32 2017 -0700"
      },
      "message": "Multiple bugfixes, small restructuring.\n\n- Move the load bias stored out of ElfInterface into Elf. For the compressed\n  sections, the load bias was not the same as the data from the uncompressed\n  section.\n- Move the initialization of the compressed section into Init. It was too easy\n  to forget to call the init of the compressed section.\n- Do not automatically add in load bias to the pc before calling ElfInterface\n  code. Do all of the pc manipulations in the Elf object.\n- Change the interface GetFunctionName code to pass in the load_bias instead\n  of modifying the pc inside the code.\n- Modify the Step function to pass in the elf offset, not add it to the pc.\n  It is necessary to have two different relative values when executing the\n  Step: a pc that is relative to the beginning of the elf for the reading data\n  the actual instructions when trying to determine if this is in a signal\n  frame, and a pc that is relative to the map for finding the appropriate\n  unwind information.\n- Add a feature to Unwinder so that an unwind can be stopped if it ends up\n  in map that has a specified suffix. This is so that the ART unwinding\n  code doesn\u0027t require skipping the compressed section. Instead, stop at\n  if trying to unwind through a known suffix code that means the code is\n  in java code. This is important because the compressed section data is\n  not only used by the jave compiled code, so that will continue to work.\n- Fix tests for restructuring, add new tests for new functionality.\n\nTest: Ran art test 137-cfi using new unwinder as default.\nTest: Ran new unit tests.\nChange-Id: I42e658c64c5e14f698ba34944a3043afac967884\n"
    },
    {
      "commit": "c5a3baa5e3262c4bae4973d8d1215dbd96e3b4ab",
      "tree": "680120aefcc232a5ff22203b14f013aecdca96be",
      "parents": [
        "796987482f3a56c4bc7ab7500a5dbe033ff11ae1"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Oct 17 18:42:03 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Oct 17 18:42:03 2017 -0700"
      },
      "message": "Fix setting of map_offset in frame data.\n\nThe old code set the map_offset from elf_offset, but it should have used\noffset. Without this change, frame data is not properly shown for shared\nlibraries in an apk.\n\nAdd new unit test to verify that map_offset is set properly.\n\nTest: Ran new unit tests.\nChange-Id: I2fe5abda23a5de51c8fcf9361ba9350b80446f15\n"
    },
    {
      "commit": "ae3b136506ff0056359db52df5f78bfa1beea5e7",
      "tree": "7580c158ca188723866457b78336212bfdaf405b",
      "parents": [
        "9e6c11da18267ffe27f7be06ce5a04fe321645a3"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Oct 05 16:05:44 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Oct 05 16:05:44 2017 -0700"
      },
      "message": "Use Unwinder object for unwind tool.\n\nTest: Ran unwind on arm and arm64 processes.\nChange-Id: I8a2a3ed31482044fe51d7e0d8c7f5588d5aad81c\n"
    },
    {
      "commit": "9e6c11da18267ffe27f7be06ce5a04fe321645a3",
      "tree": "419928f6eb5f5fbd0c55db00d6d0650522f0cb2f",
      "parents": [
        "4e008547bea04bd552fbca53c742987087c8c4d6",
        "f6f691b63c1b2166ed005a462a6fba5001786eda"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Oct 05 20:46:01 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 05 20:46:01 2017 +0000"
      },
      "message": "Merge \"Update the Unwinder object and add tests.\""
    },
    {
      "commit": "f6f691b63c1b2166ed005a462a6fba5001786eda",
      "tree": "0b8cb36809d1d497a6fa9388620dda1768ca5c50",
      "parents": [
        "dea5e081ac0f94a83650a600af881b529817b6fd"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Sep 25 19:23:07 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Oct 04 14:40:14 2017 -0700"
      },
      "message": "Update the Unwinder object and add tests.\n\nChanges:\n- Remove unused GetReturnAddressFromDefault function and tests.\n- Modify the unwinder to stop when a pc/sp in a device map.\n- Modify the unwinder to skip initial frames based on map names.\n- Unit tests that exercise all of the paths in the unwinder code.\n- Move the test Elf/ElfInterface objects into their own file.\n- Update RegsFake to handle extra cases.\n- Modify libbacktrace code to use this unwinder.\n\nThe new unwinder does not implement the ignore frame functionality since\nthis is not used very often and is better implemented using a skip frames\nin named libraries functionality.\n\nTest: Ran new unit tests, ran backtrace tests.\nChange-Id: Ifd65e9acd66ac5e2d0e04bd32a9ad870b54610ff\n"
    },
    {
      "commit": "cd58088ccfc1a3315bed181c0c1b7cab3e71176f",
      "tree": "c29a1d82c98da6550d68c47e3985ce981c6aa012",
      "parents": [
        "8b7feee38fe31eb40a50c55144a850cbc37e4089"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Oct 02 10:29:02 2017 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Oct 02 10:44:28 2017 -0700"
      },
      "message": "Move host flags from linux -\u003e host\n\nThere will be a second linux host config (linux_bionic), so move this to\napply to all supported host configs instead of just linux_glibc.\n\nTest: out/soong/build.ninja is the same before/after\nChange-Id: Id8db10e0a3db889736070eea16f387785c913179\n"
    },
    {
      "commit": "1e45d533b36df8436a667a63fe624091933cb2ab",
      "tree": "0a68593653604ca37e993339f5d8b3c44a02a559",
      "parents": [
        "39071a517738b24611ae373c9a608a4ca00d0630"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Sep 28 17:13:32 2017 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Fri Sep 29 13:17:06 2017 -0700"
      },
      "message": "Remove default libraries\n\nlibdl is part of system_shared_libs now. -ldl -lpthread -lm are now defaults\nfor host_ldlibs on Linux and Darwin. -lrt is a default for host_ldlibs on\nLinux.\n\nTest: m host\nChange-Id: I0b3c147b00a8ab6ff289b85db55b88836c905f5c\nExempt-From-Owner-Approval: build system cleanup\n"
    },
    {
      "commit": "b9de87f7edefd7a2473134b267716c5fd750e89f",
      "tree": "b172908cd472d59887c35a040b61c7fe6d61196a",
      "parents": [
        "0bb8dcb23ea63995fa7afe84be58c6e9407585a8"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Sep 20 13:37:24 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Sep 22 16:55:12 2017 -0700"
      },
      "message": "Add a new unwind method on error.\n\nIf a function crashes by jumping into unexecutable code, the old method\ncould not unwind through that. Add a fallback method to set the pc from\nthe default return address location.\n\nIn addition, add a new finished check for steps. This will provide a method\nto indicate that this step is the last step. This prevents cases where\nthe fallback method might be triggered incorrectly.\n\nUpdate the libbacktrace code to unwind using the new methodology.\n\nUpdate the unwind tool to use the new unwind methodology.\n\nAdd a new option to crasher that calls through a null function.\n\nCreate a new object, Unwinder, that encapsulates the a basic unwind. For now,\nlibbacktrace will still use the custom code.\n\nAdded new unit tests to cover the new cases. Also add a test that\ncrashes calling a nullptr as a function, and then has call frames in\nthe signal stack.\n\nBug: 65842173\n\nTest: Pass all unit tests, verify crasher dumps properly.\nChange-Id: Ia18430ab107e9f7bdf0e14a9b74710b1280bd7f4\n"
    },
    {
      "commit": "0f048675b276f8604425bcdfcba917f02d4820af",
      "tree": "4e3789395d78217659831aa7d913b9640fae7d80",
      "parents": [
        "7dcf076700d24c850f5240246408739b2cdf46e2"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue Sep 19 17:53:12 2017 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 20 13:16:13 2017 -0700"
      },
      "message": "Enable libdemangle and libunwindstack on host bionic\n\nlibunwindstack_test:UnwindTest.* are all failing, but at least this\nbuilds.\n\nTest: Enable host bionic; m\nTest: out/soong/host/linux_bionic-x86/nativetest64/libdemangle_test/libdemangle_test\nTest: out/soong/host/linux_bionic-x86/nativetest64/libunwindstack_test/libunwindstack_test\nChange-Id: Ie6c774ecb4d7a467b5ea7ae977833e9cba178f2d\n"
    },
    {
      "commit": "edccd84763c96fedb88b66f413de534fd302d882",
      "tree": "1ab630e5a8a041710198bd3b0c4a030e33f61348",
      "parents": [
        "18149b6764437eeb88d0ab78e565ec9cb2384779"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Sep 06 14:15:28 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Sep 06 17:08:44 2017 -0700"
      },
      "message": "Fix UnwindTest repeatability.\n\n- Rewrite some of the UnwindTest tests to properly wait for the process\n  to be ready.\n- Add a TestScopedPidReaper to make sure that fork process get killed even\n  if the test fails. Add this to all tests that fail.\n- Create a quiesce function to be used by all of the tests that will\n  wait after attaching to a process.\n\nBug: 65287279\n\nTest: Ran unit tests on hikey960 board and on host repeatedly.\nChange-Id: I57084120396f34d8dfb852f3d814bef2056f1b54\n"
    },
    {
      "commit": "18149b6764437eeb88d0ab78e565ec9cb2384779",
      "tree": "f61b3cdb6834a499640ca2544b3f1d4c447bbe9b",
      "parents": [
        "2827106d7d95b5e2d41b846f1505fbfacc56d850",
        "5f118519fd323a0c71b54de9279e8a9ea6a56271"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Sep 07 00:01:10 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 07 00:01:10 2017 +0000"
      },
      "message": "Merge \"Add a method to share the process memory object.\""
    },
    {
      "commit": "5f118519fd323a0c71b54de9279e8a9ea6a56271",
      "tree": "3ce288c58ab8d5a6aa1d3c307def1f0f1019ae7a",
      "parents": [
        "9638729a9d9e3cbbbe1bb2784e774fef0f2e6a54"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Sep 01 11:17:16 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Sep 05 14:30:22 2017 -0700"
      },
      "message": "Add a method to share the process memory object.\n\nNew function to create the process memory object. This allows for\na future where different remote process memory objects could be created\ndepending on the way remote memory can be created. Even different local\nmemory objects that access memory without doing any checks.\n\nIt also allows MemoryRange objects to share one single process memory object\nand could help if the process memory object caches data.\n\nSmall changes to MapInfo::CreateMemory to when some errors are detected.\n- Always check if the map is a device map, instead of only if the name\n  is not empty.\n- Check if a memory map is readable before creating the memory from process\n  memory.\n\nBug: 23762183\n\nTest: Ran unit tests, unwound on device using the new code.\nChange-Id: I12a93c2dc19639689a528ec41c67bfac74d431b3\n"
    },
    {
      "commit": "73bd4f05bfcdb7561ea3206499111ae4a18e51a5",
      "tree": "2c59a5777108a8d08fe7eae6f962f8c1ec8af6c3",
      "parents": [
        "9638729a9d9e3cbbbe1bb2784e774fef0f2e6a54"
      ],
      "author": {
        "name": "Justin Yun",
        "email": "justinyun@google.com",
        "time": "Fri Aug 04 17:33:54 2017 +0900"
      },
      "committer": {
        "name": "Justin Yun",
        "email": "justinyun@google.com",
        "time": "Fri Sep 01 13:40:23 2017 +0900"
      },
      "message": "Add vndk tag for libunwindstack which must be a vndk-sp\n\nAs a VNDK-SP module, Android.bp must have \u0027vndk\u0027 tag as well as\n\u0027vendor_available: true\u0027.\n\nThe \u0027vndk\u0027 tag for VNDK-SP module is formated as below:\nvndk: {\n    enabled: true,\n    support_system_process: true,\n},\n\nVNDK-SP modules will be installed both in system/lib(64) as normal and\nin system/lib(64)/vndk-sp as a vendor variant.\n\nBug: 64395154\nBug: 63866913\nTest: build with BOARD_VNDK_VERSION\u003dcurrent\nMerged-In: Idb4757988d1799ffcd3341343fcc4dac34bf7ef3\nChange-Id: Idb4757988d1799ffcd3341343fcc4dac34bf7ef3\n(cherry picked from commit 14d540a1567994301465ad6c820e6e4973f19c85)\n"
    },
    {
      "commit": "3f805ac3f8e61489f66a54bbdb1a8dd541c043d1",
      "tree": "5392038e32942faed35a0b94fd821e3dc3c887fe",
      "parents": [
        "e1f9a58c8649136af7578b01c3f224ea4b88b555"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Aug 30 13:15:19 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Aug 30 15:50:11 2017 -0700"
      },
      "message": "Add proper support for embedded elf files.\n\n- Add a method to get the max size of an elf file by reading the\n  section header offset + size. This will properly map an elf\n  file embedded into an apk, instead of just mapping in what is done\n  by the dynamic linker. It does assume that the section headers are\n  at the end of the elf file.\n- Add new tests for the above functionality.\n- Update the unwind_symbols tool to take an address for finding a\n  function instead of dumping the entire symbol table.\n\nBug: 23762183\n\nTest: Unit tests pass, unwind through the camera process and verify\nTest: the GoogleCamera.apk shows some function names.\nChange-Id: I00c021680fe1d43b60d652bf91bbf6667d9617be\n"
    },
    {
      "commit": "75a40988c0e7a35f2663b644989ce012b66f4586",
      "tree": "2e40cac43676143ffa2d2793fdc87aa7ee5807e4",
      "parents": [
        "54a28300b790dbbb165563bca0720939b5157864",
        "0953ecd03a90350117d6881c55959c6644972b79"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Aug 26 00:02:46 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Aug 26 00:02:46 2017 +0000"
      },
      "message": "Merge \"libunwindstack: make machine type a property of Regs.\""
    },
    {
      "commit": "0953ecd03a90350117d6881c55959c6644972b79",
      "tree": "5bfbfde939a83d68e8769f58eefda0c4f3d61380",
      "parents": [
        "46244a6497ac6b0b1a589e40a67d0f99f462ba1e"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Aug 25 13:55:06 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Aug 25 14:48:09 2017 -0700"
      },
      "message": "libunwindstack: make machine type a property of Regs.\n\nThere are no actual users of the machine type output parameter to\nRegs::RemoteGet. The concrete implementations of Regs know what machine\ntype they represent anyway, so provide an accessor to query.\n\nTest: treehugger\nTest: libunwindstack tests on 32/64-bit host, hikey960\nChange-Id: Ia25910531d36c41b2b6919f154cfa914aae63117\n"
    },
    {
      "commit": "60521c7d52962827b447467ef550d9db05cc358c",
      "tree": "6c080470815a650e39f167101ed4fc633d62fad3",
      "parents": [
        "e3e4ec7c97e7f4beafd5c6d6186018c93a9b6e5d"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Aug 18 15:10:53 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Aug 23 15:43:39 2017 -0700"
      },
      "message": "Speed up map creation.\n\n- Rewrite the Maps::Parse to use open, and a buffer on the stack.\n- Rewrite the line parser away from sscanf. The current way sscanf\n  is used does not catch many malformed lines. In addition, this\n  new version improves performance by 50% over sscanf on sailfish.\n- Add a lot of unit tests for the parser to make sure there are\n  no problems. In addition, add a special line that was not rejected\n  with the previous version of the code.\n- Add new accessor to get the map at a particular index.\n- Add a backtrace benchmark for map creation for both new and old.\n\nThis cl results in ~5% speedup and makes the new unwinder map creation\nabout the same for 64 bit. It\u0027s still a bit slower, but not by much.\nOn 32 bit, we are still about 5% slower than the old creation method,\nthough.\n\nBug: 23762183\n\nTest: libunwindstack unit tests pass. Ran the new benchmarks.\nChange-Id: Id4431e539f400984e6fad62153fdf4152d518322\n"
    },
    {
      "commit": "9e484bdb4ac24841ce8956dd9f98c33a4be4c037",
      "tree": "58b7476d9307d4a2fa67c176934cd0673c56bb20",
      "parents": [
        "5d89e6c7fe7d3e14cbbe8d19233bb76417f3573e"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Aug 10 17:37:32 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Aug 10 17:37:32 2017 -0700"
      },
      "message": "Fix another set of bugs.\n\n- The pc read from the eh frame binary table of pc/fde offset is off by 4.\n  I verified that on arm/arm64/x86/x86_64 the pc in this table matches\n  the fde pc_start value. I did this by adding an error if this occurred\n  and ran unwind_info over everything in system/lib, system/lib64, system/bin.\n- Fixed unit tests for the above change.\n- Fix a small bug in the processing encoded values. The high\n  bit of the encoding should be masked off, but I wasn\u0027t doing that. That\n  meant during processing of the fde, I was incorrectly returning\n  an error because the encoded value was unknown.\n- Added a new test for this encoding change.\n\nBug: 23762183\n\nTest: Build and all unit tests pass. Also, see above comments.\nChange-Id: If074a410a1726392274cd72c64470ca0be48e0db\n"
    },
    {
      "commit": "3b4b075fea87c0177e5ef314776713162d86566d",
      "tree": "0968973b5fb6232d55d1818157627956a2cc1ea9",
      "parents": [
        "2d1d8812cc71c9ab17c0362602f3adff9e643d81"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Aug 09 11:16:03 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Aug 09 14:22:12 2017 -0700"
      },
      "message": "Small clean ups\n\n- Remove redundant map_info checks.\n- Initialize fde_count_ to zero.\n\nBug: 23762183\n\nContributed-By: Ivan Maidanski \u003ci.maidanski@samsung.com\u003e\n\nTest: Builds, run backtrace_test modifying CreateNew to Create and vice-versa.\nChange-Id: I6e9cdfa99734f8cc2d9915cc32c66a1455e79f1b\n"
    },
    {
      "commit": "6f3981c181677830c33093411b51ad6b0bf2e337",
      "tree": "35ea042367a3e9462346d78ba86e8be397b77edb",
      "parents": [
        "5c655991f51e63f4264619293b393a2c6bddb1fa"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jul 27 09:29:18 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Aug 03 10:15:44 2017 -0700"
      },
      "message": "Add support for the new unwind method.\n\nAlso add a comment to the GetElf function to indicate that it never returns\nnullptr.\n\nAlso needed to add this library to the a million and one places that the vndk\nhas hard-coded this data.\n\nBug: 23762183\n\nTest: Built, nothing uses the new code.\nTest: However, I did run backtrace_test using this code, and all tests pass.\nChange-Id: Ib270665dcb7a7607075e36d88be76dbde6e2faa8\n(cherry picked from commit dc4104b720c7fd2014ccfa9fa621d02df58a43c4)\n"
    },
    {
      "commit": "32766f1f528a879797b19f90693cb62d042f8e01",
      "tree": "1c4af1b27f689669665ef16cb67b29d96b1bb903",
      "parents": [
        "c34afb1cd57607aaa9dd862399c6ffb75cde80a5"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Aug 01 18:09:44 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Aug 02 10:45:46 2017 -0700"
      },
      "message": "Allow mips to build.\n\nTest: Build mips.\nChange-Id: Ice2fe1d11b7c628b325ea2ad1fd1252ad8e10668\n"
    },
    {
      "commit": "bd625efbca611f56f9e206e8f876e128a1dd5364",
      "tree": "f77f535b2ce7df9df96483c8fe0c0b2aef4e2c4b",
      "parents": [
        "5b460d13a4c383fa6c9a416d64502430ab065209"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Aug 02 01:47:31 2017 +0000"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Aug 02 01:47:31 2017 +0000"
      },
      "message": "Revert \"Add support for the new unwind method.\"\n\nThis reverts commit 5b460d13a4c383fa6c9a416d64502430ab065209.\n\nReason for revert: Strange sailfish boot problem.\n\nChange-Id: Ibde9375405cca4343c262335647dac120aab4d73\n"
    },
    {
      "commit": "5b460d13a4c383fa6c9a416d64502430ab065209",
      "tree": "d9a8238774e138208ecc47f507aef04c6ded7025",
      "parents": [
        "6fa0884188dbc27b59b2fa3f86fb317bb1381252"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jul 27 09:29:18 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jul 31 13:00:35 2017 -0700"
      },
      "message": "Add support for the new unwind method.\n\nAlso add a comment to the GetElf function to indicate that it never returns\nnullptr.\n\nBug: 23762183\n\nTest: Built, nothing uses the new code.\nTest: However, I did run backtrace_test using this code, and all tests pass.\n\nChange-Id: I252b9c2497e2d3d94347dd6e506170bf50cbfe16\n"
    },
    {
      "commit": "eb4a6dbf5c6697c953942d079744c05da0c09d51",
      "tree": "7a30b551fe2c60c4eae9e614f0a2091b55fcbf21",
      "parents": [
        "33913ebfb5ca699d09459227284b3d324343fa43"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jul 19 12:37:45 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jul 19 21:35:46 2017 +0000"
      },
      "message": "Speed up StepIfSignalHandler path.\n\nThe StepIfSignalHandler code reads from the process memory object, which\nis currently the slowest way to read memory. Change the code to read from\nthe elf memory object which will almost always be a memory mapped file and\nshould be really fast.\n\nAlso, move the tests for StepIfSignalHandler to its own file.\n\nBug: 23762183\n\nTest: Unit tests pass.\nChange-Id: I1100b50554e5ef736a87babd484f3f34e9071caa\n"
    },
    {
      "commit": "a019665b3cb73609c888af7f17c64bf80ec40283",
      "tree": "df034f8eaaf960faad9f8be144c19a18809b3249",
      "parents": [
        "a022ea424dd439e174eeb420dac916c0e9d65861"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jul 18 16:09:20 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jul 18 17:27:48 2017 -0700"
      },
      "message": "Add signal handling to the register object.\n\n- Add the StepIfSignalHandler function to the Regs object that checks\n  if the code is in a signal handler.\n- Add tests for new code, also add a test that unwinds through a signal\n  handler.\n- Slight modification to Elf to fail if a bad machine type is encountered.\n  Add tests for this.\n\nBug: 23762183\n\nTest: Ran unit tests.\nChange-Id: Idafa1105d00b91a9343d7464ac9ed1cb95830963\n"
    },
    {
      "commit": "d226a5140989f509a0ed3e2723f05d5fc93ce8df",
      "tree": "ffe7078dc51b6292506856c0a0982d2e8596612f",
      "parents": [
        "b76158d56af33f512cad32c5e948656e47a73216"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jul 14 10:37:19 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jul 14 12:20:23 2017 -0700"
      },
      "message": "Make the library usable as a library.\n\n- Add namespace unwindstack everywhere so that it\u0027s easier for other\n  code to use the library.\n- Move some of the header files into include/unwindstack so that they\n  can be exposed.\n- Modify the headers so that only a limited number need to be exposed.\n- Update the tools to use the new headers.\n- Add a GetLoadBias() call on the Elf object. This prevents the need\n  to get the interface object out of the Elf object.\n- Move the GetRelPc() call out of the Reg class, to the Elf class. It\u0027s\n  not always the case that a Reg object will be around when you want to\n  get a relative pc. The tests for this moved to ElfTest.cpp.\n\nBug: 23762183\n\nTest: Unit tests pass.\nChange-Id: Iac609dac1dd90ed83d1a1e24ff2579c96c023bc3\n"
    },
    {
      "commit": "b5d7a875128d58924832ab9b97b72f9e37af9b7a",
      "tree": "5b2cd9a77a683caa77bb0dc5f56620b81d2136b7",
      "parents": [
        "f42d02830de827096150fea42e99c55fdb2b7df7"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jul 12 15:40:52 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jul 13 13:20:10 2017 -0700"
      },
      "message": "Move tools to separate directory.\n\nBug: 23762183\n\nTest: Ran unit tests, ran new tools.\nChange-Id: Icc7cbb4102a68042f4683d6dd622f21bc5e74deb\n"
    },
    {
      "commit": "f6d5431273a6293703853fc3d4043ed2c5d5a3c9",
      "tree": "38b0e92916e097f917d5464954e1434e96acc6f9",
      "parents": [
        "5aee3ff22a42f9ff7a35e0181d19821b1510fee2"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jul 11 15:29:32 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jul 11 19:10:34 2017 -0700"
      },
      "message": "A few cleanups.\n\n- Cleanup the blueprint file a bit.\n- Fix the formatting in DwarfMemoryTest.cpp.\n- Fix the misnamed test MemoryBuffer.cpp to MemoryBufferTest.cpp.\n- Add a function to find the location of the test files so it\u0027s not\n  necessary to run the test in the same directory as the test files.\n\nBug: 23762183\n\nTest: Builds and unit tests pass.\nChange-Id: I5666972bd01f14b8ee47c518f1840f8aeb7fd08b\n"
    },
    {
      "commit": "3517fe041374a975429e947669c7f25bdb9f87dc",
      "tree": "7c48aa69de2f86dc78167a6b87c755b1f23023b4",
      "parents": [
        "3c7f5664956e1b944b89a9ef1a689db7bfdeb4c1"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jul 11 15:06:19 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jul 11 15:06:19 2017 -0700"
      },
      "message": "Fix mips build.\n\nDon\u0027t build for mips, none of this is supported on mips.\n\nBug: 23762183\n\nTest: Mips build passes.\nChange-Id: Iba89466a7bc13856f8fcd59ca0708a30f417b6c6\n"
    },
    {
      "commit": "2a25c4aab5c7d0f0f6018789cce0b6e8c4abb03b",
      "tree": "5e5e249199156084b1678667a248c41ad82cba04",
      "parents": [
        "896297b2ef10a58fc614aebce8724d342d81f85e"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jul 07 16:35:48 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jul 11 12:15:54 2017 -0700"
      },
      "message": "Add full support for initing registers.\n\n- Fixes a few bugs in untested functionality.\n- Add tests for the way the register handling code is used.\n- Fix a few tests that were not reaping child processes.\n\nBug: 23762183\n\nTest: Ran unit tests on host (32 bit and 64 bit).\nTest: Ran unit tests on angler (32 bit and 64 bit).\nChange-Id: I573d6617b4f1561f6e8494d7213c52086d112d97\n"
    },
    {
      "commit": "9744fb2b5441d020f24b8c439670519ae247841e",
      "tree": "ac973baab43a343f1ddeb6e7a4a0e2c6d184dc78",
      "parents": [
        "2d07f7296109699772393601eee5772256eb292f"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jul 07 12:18:16 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jul 07 12:25:23 2017 -0700"
      },
      "message": "Add missing test files to compile.\n\nBug: 23762183\n\nTest: Ran unit tests.\nChange-Id: I8ac43517231d88c68c288800d8ed286daa57bce1\n"
    },
    {
      "commit": "570b76f04fbca11471738319f8e9ca0bb5682182",
      "tree": "f2531608b27d46b5d9284cc58ead1ff6299bf518",
      "parents": [
        "67897d47ce1b4676892d9ea71fd2d11f3067561c"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jun 30 17:18:16 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jun 30 17:24:58 2017 -0700"
      },
      "message": "Init .gnu_debugdata in GetElf().\n\n- Modify the tests to share some code for the generation of the elf data.\n- Move the gnu_debugdata files into a separate directory.\n- Add tests for GetElf().\n- Move the CreateMemory() tests and the GetElf() tests into separate files.\n\nBug: 23762183\n\nTest: New unit tests pass.\nChange-Id: Ie3380296bb49753c2ac8801cfa11f93d6ff7121d\n"
    },
    {
      "commit": "9416703f5b37cde61fe8f3e3572b84b21e06ea81",
      "tree": "696bf3c03b57ac3d2b27bfdb6bf43c10093862a4",
      "parents": [
        "51b4f48280bed76bdc8c1758ff6c77435989a33e"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jun 28 18:56:52 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jun 29 10:29:43 2017 -0700"
      },
      "message": "Remove assert, use CHECK instead.\n\n- Use the CHECK macro everywhere that assert was used.\n- Remove the _debug version of the tests and leave the CHECK macro so\n  it\u0027s always checking in the code.\n\nBug: 23762183\n\nTest: Ran unit tests.\nChange-Id: Ie705eedae393d0e95bb9d99f852687a11881aef1\n"
    },
    {
      "commit": "bfd6292db605f77a7f4700fded1ac4362fa385b3",
      "tree": "8c22595cc8df9646ca52b9b1152bb7122f1809f2",
      "parents": [
        "9302daeb1d3d12c18b99aae82342c359950dd447"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jun 28 20:44:48 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jun 28 20:44:48 2017 -0700"
      },
      "message": "Fix mac build.\n\nTest: Built.\nChange-Id: I455381d29045dc6dddfb2b77dcde312722c06ebf\n"
    },
    {
      "commit": "bae69f1892b5eee6e2a5af374d524ce3212f0abb",
      "tree": "f0aa4464e301dfa1b4952656e7aaffe928f4d19a",
      "parents": [
        "040212706bdff2efece95f4fc4fd8bee136657d6"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jun 28 14:51:54 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jun 28 15:23:10 2017 -0700"
      },
      "message": "Add .gnu_debugdata support.\n\nUpdate the unwind_info tool to dump all of the sections.\n\nBug: 23762183\n\nTest: Passes new unit tests.\nChange-Id: I8b223bc208a1a2ef06ed333e6d96943c8f273681\n"
    },
    {
      "commit": "8098b1c378cf999fda76c2dc0dfbdfaafc25adb9",
      "tree": "17baaf8473411531cae03b5dbd6e0febd3421077",
      "parents": [
        "9d239ec6a58dba74aefced063b01a66a51eaaa1f"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jun 20 13:54:08 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jun 23 10:51:28 2017 -0700"
      },
      "message": "Add section parsing and function name handling.\n\nAdd the code to parse the Elf section headers.\n\nAdd the plumbing through of all the symbol handling code.\n\nAdd tests for all of this new functionality.\n\nBug: 23762183\n\nTest: Pass new unit tests.\nChange-Id: Ie2d90cbb3d7653c53251dbcf34d9e5d241278377\n"
    },
    {
      "commit": "9d239ec6a58dba74aefced063b01a66a51eaaa1f",
      "tree": "b896dddcf4adabff508440d39734b7691defcb58",
      "parents": [
        "643b4776b5ad511ed2eac3e5e4d10f50cdfb1efc",
        "051792fed4ce3fcbfb8f2c8e86bd50e959fe14ca"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jun 20 18:29:22 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jun 20 18:29:24 2017 +0000"
      },
      "message": "Merge \"Fix some memory leaks, potential errors.\""
    },
    {
      "commit": "051792fed4ce3fcbfb8f2c8e86bd50e959fe14ca",
      "tree": "7a0b4848ae3b5e87c453784352dd5d9a0f70eccd",
      "parents": [
        "ad4aa9e169529615ba7c74b942aaee53a1425a78"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jun 19 13:42:04 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jun 19 16:20:33 2017 -0700"
      },
      "message": "Fix some memory leaks, potential errors.\n\nFix a couple of memory leaks in tests.\n\nFix a potential case that length could be zero.\n\nBug: 23762183\n\nTest: Ran unit tests, then ran valgrind on unit tests and verified no leaks.\nChange-Id: I5f7602aa0204db0488a8e305250658cdb6e977d0\n"
    },
    {
      "commit": "61d4097737c897847b7600d7d5ddbd384efb8540",
      "tree": "c2e3905c87947328bc11a592bed950cc01c18c6b",
      "parents": [
        "9b537f24bd375cf1954e94efbc8ee7d97b5a1e8e"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jun 12 19:14:20 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jun 16 14:25:29 2017 -0700"
      },
      "message": "Add EH frame and debug frame support.\n\nBug: 23762183\n\nTest: Pass new unit tests.\nChange-Id: I1bfe900e068017ff31998f359bf98d4c5c9af2a5\n"
    },
    {
      "commit": "7b8e4671926486d61aab693968d8a0256a856033",
      "tree": "7a108359008f215adc89152d2edd607d5b52bd68",
      "parents": [
        "72076d1aa7231ce92d9acc6c722ce365b40e5821"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jun 01 17:55:25 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jun 01 17:56:46 2017 -0700"
      },
      "message": "Change RegsTmpl to RegsImpl.\n\nAlso clang-format modified Regs.cpp slightly.\n\nBug: 23762183\n\nTest: Built and ran unit tests.\nChange-Id: I1c7c1b01974ee3f35059c42b8e2aef24d46c81a7\n"
    },
    {
      "commit": "53a3c9b4ab57f04b46bc3abf42e36bdfa821f7f3",
      "tree": "9fc9121598c53fe697b19217b406337d0b74f2a9",
      "parents": [
        "c495e059b7bd38cb105df59b2b206589ed117a8f"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed May 10 18:34:15 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jun 01 13:12:31 2017 -0700"
      },
      "message": "Add DwarfSection classes.\n\nBug: 23762183\n\nTest: Ran new unit tests.\nChange-Id: Icca2a73c50d467718ba4ac41e1c8f541488620dd\n"
    },
    {
      "commit": "8642fcbad2fbe20e84fe4f4e3e88a9258545c3ad",
      "tree": "a830f56e2d3c7455f12b7ea79cfcbc3401373fbc",
      "parents": [
        "39aee4635220a3958695d023098f9b5ddc7f48b7"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 24 11:14:39 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 24 13:24:33 2017 -0700"
      },
      "message": "Add the Dwarf CFA handling.\n\nBug: 23762183\n\nTest: Ran new unit tests.\nChange-Id: I31abac1238cc671b78a505da655fb6298be072b4\n"
    },
    {
      "commit": "0d7cf3e8dd9709b8495041c9c405732a27c4539b",
      "tree": "d465a59ddc6635d410c00099461250f438c0d4c8",
      "parents": [
        "8d644d2c960d2df495cb133af69dfed95f0dd48e"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Apr 19 15:42:19 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Apr 19 15:48:02 2017 -0700"
      },
      "message": "Add function definitions for MapInfo.\n\nBug: 23762183\n\nTest: All new unit tests pass.\nChange-Id: I26a1f6e84bf1a02447eff48ff6e35068554330fe\n"
    },
    {
      "commit": "09385e7db5ec503f66bd96f12a32fcd2a5548cff",
      "tree": "8af8e3ba5f524ba8710de0f1807a55b665ad3b00",
      "parents": [
        "568dc01fdf973c2d731c9dafe7c5b73ecb6627aa"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Apr 05 13:25:04 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Apr 06 15:01:02 2017 -0700"
      },
      "message": "Implement maps parsing.\n\nThe MapsOffline code is still in development so I\u0027m not testing it very\nthoroughly yet.\n\nBug: 23762183\n\nTest: All unit tests pass.\nChange-Id: I77aeac62940cd95c489ee221afe02349bfe39671\n"
    },
    {
      "commit": "e7ba4cc222597aef308cae6e94abfe00b7d2e5d8",
      "tree": "bbfb96b9ae03feb13c84d27af3286a180ccd3b2b",
      "parents": [
        "3f220aaa63b99a0c22ffc18f33792a3704bd9e51"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Apr 04 14:06:58 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Apr 04 14:41:34 2017 -0700"
      },
      "message": "Add Symbols parsing.\n\nBug: 23762183\n\nTest: New unit tests pass.\nChange-Id: Ib67fee879120b5e82889076a0f7221dc429ac140\n"
    },
    {
      "commit": "55d22ef67c428a3f0994ee7da51b33c79ddcc552",
      "tree": "949f5fd2dd1267ac9e20904268f885822d33a6c5",
      "parents": [
        "856bccbdc3f509218149e16354496027cb7c1ea3"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Apr 04 10:41:31 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Apr 04 12:35:50 2017 -0700"
      },
      "message": "Add DwarfOp support.\n\nBug: 23762183\n\nTest: New unit tests pass.\nChange-Id: I9581701ee2721283a1114adab4e1bcff881980cc\n"
    },
    {
      "commit": "f447c8eb205d899085968a0a8dfae861ef56a589",
      "tree": "b7cbe68673663760db5330d33c2fd75d2651fcbe",
      "parents": [
        "8aae1b158ad45bd3a7eeace9558ee7390b12fa94"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 03 12:39:47 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 03 18:36:33 2017 -0700"
      },
      "message": "Add overflow checks in Memory objects.\n\nAlso change one of the reads to be explicitly ReadField instead of an\noverloaded Read function.\n\nBug: 23762183\n\nTest: Passes new unit tests.\nChange-Id: Id848f7b632f67df0c5b7318d9e588942cfd2099a\n"
    },
    {
      "commit": "72a6fa693b1d5d0fa2a83264776d73eeeae6478d",
      "tree": "a6e424cf8d1b35d8a2a7550bc4ebc47b99fe2ae7",
      "parents": [
        "4b9a555a0f6370b939d7d4c0816b23e783918e28"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Mar 21 12:41:17 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Mar 24 14:07:21 2017 -0700"
      },
      "message": "Add DwarfMemory class.\n\nBug: 23762183\n\nTest: Passes new unit tests.\nChange-Id: I80293af0b5a8a042195c37a06d64082d2f7c781a\n"
    },
    {
      "commit": "adda67446663071b89a2f04ff25c495dfd9fd46b",
      "tree": "b4dd9957937c1387cec336c49d6104071805f137",
      "parents": [
        "e9539eb02f601a417635979bf0de832e29c1d60d"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Mar 21 10:41:09 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Mar 21 10:41:45 2017 -0700"
      },
      "message": "Use the 2 space clang format for libunwindstack.\n\nTest: NA\nChange-Id: Ibf321931d1e7ac5bbe4e8479c9d706576f55e8ac\n"
    },
    {
      "commit": "3958f8060ac0adccd977c0fab7a53d45f3fce58d",
      "tree": "cd01b1ab589fcc42479147ad1806b16f8fee8ce0",
      "parents": [
        "e88882e16e3fa5820e9e768fdceb7aa84f8256fc"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Feb 01 15:44:40 2017 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Mar 09 12:27:16 2017 -0800"
      },
      "message": "Elf interface for new unwinder.\n\nThis cl includes the code to read arm unwind information from a shared\nlibrary.\n\nBug: 23762183\n\nTest: Passes all unit tests. I can dump the arm unwind information\nTest: for an arm shared library.\nChange-Id: I43501ea2eab843b81de8bd5128401dd1971af8d3\n"
    },
    {
      "commit": "01d50374adb548d8c245b28c8f3d5989f788e46a",
      "tree": "270ec85dc93ab9dcfb40e20b94697281fd3d05e2",
      "parents": [
        "a5cfc8b1e6140ac7a7bfc7bffa36de3d6543b59a"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jan 30 13:45:16 2017 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jan 30 13:45:16 2017 -0800"
      },
      "message": "Do not build any host targets on mac.\n\nBug: 23762183\n\nTest: Compiled.\nChange-Id: I42afabeb7d3576ea4afd4af05bb1cabd79ac76e5\n"
    },
    {
      "commit": "71a2dcfc6412d4afa8e5fb091d653c0343a9ec42",
      "tree": "b6f69f5a3c7eb651a023089d98aab818132ef435",
      "parents": [
        "e69b1b9831c2fd5b1458a6a6133abadd091aae1f"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jan 30 13:24:51 2017 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jan 30 13:24:51 2017 -0800"
      },
      "message": "Remote reference to log/logger.h\n\nIt was made an error to include this file after I went through the\npresubmit checks.\n\nTest: Compiles.\nChange-Id: If00b0b644ecef95325636cec094cfcb399e307f9\n"
    },
    {
      "commit": "723cf9b6e61744f7a20a807e67ab50adb9db5d42",
      "tree": "8bc95027c1552ce1bd83f9900c3bbf6115125cd3",
      "parents": [
        "18044da57674dff66af818a05b70afdb51a11d05"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jan 19 20:08:48 2017 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jan 25 12:21:51 2017 -0800"
      },
      "message": "New version of unwinder.\n\nBug: 23762183\n\nTest: All unit tests pass.\nChange-Id: I0ac69e55af56e1142c0a1ee3715cdc48f2ed3ec3\n"
    }
  ]
}
