)]}'
{
  "log": [
    {
      "commit": "6dbc28ece3ab7cadd0087b4dc31ba9a2986545f0",
      "tree": "0f7f5ad39abcafaf218855dd6ef7efa939f1fbdf",
      "parents": [
        "c41ff1b366eabad4371a972f6be9648990658760"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Mar 28 15:12:49 2018 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Mar 28 17:21:01 2018 -0700"
      },
      "message": "Fix null pointer dereference in RegsArm.\n\nFix RegsArm::GetPcAdjustment to check for an invalid elf before trying\nto read memory.\nModify the tests for this so it crashes without this change.\n\nAlso modify the GetPcAdjustment for all different architectures so\nthat unless the relative pc is too small, it will return the minimum\namount that should be adjusted. This is to handle cases where we still\nwant to adjust the pc but it\u0027s in an invalid elf. Mostly this is for\nhandling cases when the pc is in jit gdb debug code so that we use the\nright unwind information.\n\nBug: 77233204\n\nTest: Passes unit tests for libbacktrace/libunwindstack.\nChange-Id: Id73609adaf3b80a583584441de228156fec3afa7\n"
    },
    {
      "commit": "d5b22c5f048c3aae950d48a7681c156fe52cad24",
      "tree": "223634bb9f3992004a5394e9c742a021af964d2a",
      "parents": [
        "5ea2c4baf1d60915b4a75f2ea8347afbcecef98f"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Feb 22 17:11:31 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Mar 21 17:23:54 2018 -0700"
      },
      "message": "Support a map that represents gdb jit elf data.\n\nChanges:\n- Add a new flag to the libbacktrace and libunwindstack map data.\n- Modify the unwinder to handle this map to use the raw pc when stepping.\n- Add new unit tests for this case.\n\nBug: http://b/73127105\nTest: Run simpleperf to unwind through jit symfiles.\nTest: Run new unit tests.\nTest: Run 137-cfi test on host.\nChange-Id: I10bc0410680accc6d35fe51e9f1098911f667e01\n"
    },
    {
      "commit": "b22451f178ff063fb99391cc9f7b089394a3018b",
      "tree": "f31e25b3f6138f385a82bcbe8664ce368ef37a65",
      "parents": [
        "e8d1b75c0c9384d476dd929b7215d9d121775081",
        "11e96fe48a74e6ab97d4de899684d3a61a9d1129"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Mar 19 17:48:59 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Mar 19 17:48:59 2018 +0000"
      },
      "message": "Merge \"Always set the sp reg to the cfa for DWARF.\""
    },
    {
      "commit": "e8d1b75c0c9384d476dd929b7215d9d121775081",
      "tree": "a31e14d25b70eb7ee29ae746baac00357096b424",
      "parents": [
        "4fa763290e2052ff1f0409d98a92004faa300128",
        "e62f4c4d4c016322bda7f17f7111d3f7d4d35dc8"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Mar 19 11:23:10 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Mar 19 11:23:10 2018 +0000"
      },
      "message": "Merge \"Don\u0027t include map name if the consumer doesn\u0027t want names.\""
    },
    {
      "commit": "e62f4c4d4c016322bda7f17f7111d3f7d4d35dc8",
      "tree": "f005c26e51f808bc59b042311321ecf2cc09f825",
      "parents": [
        "6fe59afe53b2cd791935e27338dd994f9fd9a319"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Mar 16 18:44:04 2018 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Mar 19 11:20:00 2018 +0000"
      },
      "message": "Don\u0027t include map name if the consumer doesn\u0027t want names.\n\nSimpleperf doesn\u0027t need the name, so avoid the string copies.\n\nThis seems to speed up simpleperf by around 20%.\n\nTest: backtrace_test libunwindstack_test\nChange-Id: Iba064c7078f7e5ecfc9d8539ba09c14495a52158\n"
    },
    {
      "commit": "11e96fe48a74e6ab97d4de899684d3a61a9d1129",
      "tree": "6a056073b680ed6fe25fb406e5f2b316b991ee3e",
      "parents": [
        "a411fc65d1fc4c2c1c44d5d0860b31a018b8c9fd"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Mar 14 18:16:22 2018 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Mar 16 23:38:07 2018 -0700"
      },
      "message": "Always set the sp reg to the cfa for DWARF.\n\nThere are a few places where it is assumed that this register is\nset to the cfa value when interpreting DWARF information.\n\nAdd a testcase for unwinding art_quick_osr_stub on ARM.\n\nBug: 73954823\n\nTest: Ran libunwindstack/libbacktrace unit tests.\nTest: Random debuggerd -b of process on a hikey.\nTest: Ran the 137 art test on host.\nChange-Id: Ida6ccdc38c3cfeea6b57fe861a0cc127b150b790\n"
    },
    {
      "commit": "704ec9adbac6f7f265afe0d727e685b92f7726d0",
      "tree": "66acabd364033fe0b10745a678ca7eadc283063d",
      "parents": [
        "39273df6516a990f593d89d6259cc89ac6bbecbd"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Mar 15 14:35:01 2018 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Mar 15 15:14:18 2018 -0700"
      },
      "message": "Handle ARM thumb function symbols.\n\nARM thumb functions will have the zero bit set to one, which can cause\nfunction name lookups to fail.\n\nAdd an ARM special GetFunctionName that handles this condition.\n\nFix a couple of the function offsets in unit tests.\n\nBug: 74844137\n\nTest: Ran unit tests.\nTest: Ran debuggerd -b on processes on a bullhead device.\nChange-Id: Ibd407db34eaaa641f91fdb4f589c44a0dcc0216a\n"
    },
    {
      "commit": "3692f251990ecb063bb9a3f8af1f820782be9973",
      "tree": "3c3df3a4f24d3bd2afb5a171de9953c13cccff44",
      "parents": [
        "929112bcd19e92c9b9f647d8a227ba55c743239d"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Mar 08 16:57:19 2018 +0000"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Mar 08 14:44:11 2018 -0800"
      },
      "message": "Don\u0027t implicitly dereference DW_CFA_def_cfa_expression.\n\nThe specification isn\u0027t entirely clear. Follow the gdb interpretation.\n\nBug: 73954823\nTest: libunwindstack_test\nChange-Id: If72717f54eed84e442f43af19e615143a9796b68\n"
    },
    {
      "commit": "8fbdbba9f5ada29261efea830e0485fdc13eed49",
      "tree": "2246cab30a7c468cb30e62ca73f10f3073335924",
      "parents": [
        "47354e76ebbb262518255fb188861bacb4fc85b8",
        "4015ef411a73ac93ff7cf2765a6efa540230a9e4"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Feb 23 17:53:23 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 23 17:53:23 2018 +0000"
      },
      "message": "Merge \"Adjust DEX file reading to follow layout changes in ART.\""
    },
    {
      "commit": "a2ec50bf57c9dba78459ef011cd13f8525ea57b4",
      "tree": "ace0f0bd418003176089db54641bd11f00c08244",
      "parents": [
        "2733708cfb2ed041e0a82593eeaae5b48ca44a66"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Feb 21 15:39:07 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Feb 21 20:16:39 2018 -0800"
      },
      "message": "Change the GetAdjustedRelPc to GetPcAdjustment.\n\nThis cleans up a bit of the Unwinder code to make it clear what\u0027s\ngoing on.\n\nModify the offline unit tests to verify the pc and sp to make sure\nthat those values get computed correctly.\n\nTest: Passes unit tests.\nTest: Passes 137-cfi art tests.\nChange-Id: I0787a1d77b8726d3defd08f31c7476f6798f8d0d\n"
    },
    {
      "commit": "e4b3a6aaa46bfe4b20597d89ba73c90e33da463d",
      "tree": "8f2f942a780b8c30a0b312df71ce008071134e28",
      "parents": [
        "ca26cbc5d389971887227b737489ff6b44e82a8f"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Feb 20 13:58:40 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Feb 20 17:10:23 2018 -0800"
      },
      "message": "Add ability to skip function name resolution.\n\nBug: 73558129\n\nTest: New unit tests pass.\nChange-Id: I3a6b17d2590aacb367ab3e3a51cc85be73ad64eb\n"
    },
    {
      "commit": "d9575b668bd122f1ad80767bc36024e4571ffeb0",
      "tree": "6d52a08b98a3f1c429fbba400b71193d4e3bb510",
      "parents": [
        "76eda07ff6bacb5972bec7f59f0d36ac076028ec"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Feb 16 13:48:19 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Feb 16 14:52:38 2018 -0800"
      },
      "message": "Modify elf cache to handle elf_offsets properly.\n\nBug: 73498823\n\nTest: All unit tests pass.\nTest: Simpleperf run that previously failed, passes now.\nChange-Id: Iff3a1f2f641a46ab9a0326579af3649f0c76fc65\n"
    },
    {
      "commit": "4015ef411a73ac93ff7cf2765a6efa540230a9e4",
      "tree": "05483e27e6e7b8d19f4d552ebcca59ada992cfd0",
      "parents": [
        "e1ae2ff9e46547dfaa3947eedd5e471332c92a86"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Feb 15 17:57:16 2018 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Feb 16 14:54:49 2018 +0000"
      },
      "message": "Adjust DEX file reading to follow layout changes in ART.\n\nI have changed the root DEX debug descriptor in ART to more\nclosely follow the JIT debug descriptor. Add the appropriate\noffsets to correctly fetch the linked list head for DEX files.\n\nTest: testrunner.py -t 137\nTest: libunwindstack_test\nChange-Id: I90402befc88fec42658f7330d51ee79756a7f872\n"
    },
    {
      "commit": "beae42bc7f8fb6494138ff8a6d17ed6a65b2cf9a",
      "tree": "5ef5f8d3fb4b7c482fe077e19c2a1792156ecdfa",
      "parents": [
        "851803d3cf3e874bb9305341a681a56cc73e7c57"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Feb 15 17:36:33 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Feb 15 17:57:13 2018 -0800"
      },
      "message": "Fix soname reading code.\n\nThe dynamic section contained an address, not an offset into the elf\nfile to indicate where the soname exists. Changed to use the strtab\nentries in the section headers to map this address to the actual offset.\n\nRefactor the soname test a bit to make it easier to verify the code.\n\nBug: 73499044\n\nTest: Passes new unit tests.\nTest: Ran unwind_info on the failing shared elf and verified the soinfo\nTest: is correct.\nChange-Id: I16ba148389bcb9aadd3566fb442dac27f89fe894\n"
    },
    {
      "commit": "559c7f209295a7070515bba9fa3985edf53d13a0",
      "tree": "3c4d389dd713cf1b388d58ecdf121e1c2c6989fd",
      "parents": [
        "71fa8125b90a99329561c2dd13c055adf52dd25a"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Feb 12 20:18:03 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Feb 13 16:45:38 2018 -0800"
      },
      "message": "Implement new DEX PC lookup scheme.\n\nGDB wasn\u0027t handling the old one gracefully.\n\n- Create a RegsInfo structure that can be used to properly eval expression\n  data.\n- Remove the versions on Dwarf ops. It doesn\u0027t work the in the real world\n  and doesn\u0027t add useful information.\n- Fix dex pc frame number bug.\n\nTest: testrunner.py -j40 --host --cdex-fast -t 137\nTest: libunwindstack_test\nTest: All unit tests pass.\nChange-Id: Iac4fea651b81cb6087fd237a9a5027a352a49245\n"
    },
    {
      "commit": "e4df5f5ab50939d4a36aa6c8076c7aa571fb56df",
      "tree": "53c5d69585fdbc5bd314d95981ab3021e3c53a09",
      "parents": [
        "73a2508dc4b2b6644e4904f013a6df5fff5e4569"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Feb 12 13:24:18 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Feb 12 14:06:13 2018 -0800"
      },
      "message": "Fix computation of pc.\n\nFix the case where a non-zero load bias or a non-zero elf offset causes\nthe pc to be set incorrectly.\n\nAdd unit tests for these cases.\n\nBug: 73172903\n\nTest: Ran unit tests.\nTest: Ran the unit tests from the simpleperf CL that detected the failure.\nChange-Id: Id8802c00b34c66875edd4926a20c5fccd2bb7d72\n"
    },
    {
      "commit": "73a2508dc4b2b6644e4904f013a6df5fff5e4569",
      "tree": "499ab918a885730d0efc1f8a1a74d1389fbb9c3c",
      "parents": [
        "ecff589728b29828f626eefefd9ff88869882180",
        "e37e2d05b1ae3f844750b76d3b71278b79d5de51"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Feb 12 18:58:34 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Feb 12 18:58:34 2018 +0000"
      },
      "message": "Merge \"Fix off by 4 error handling eh_frame hdr.\""
    },
    {
      "commit": "a8c397317d6fce12d0ea1cac5482dbdd8b75fa6d",
      "tree": "ed78ac195df1a619702103205c1d6b0faf002df9",
      "parents": [
        "cd2fa1f43215b829bd4359bf7725daa220b08dbf"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Feb 12 08:46:19 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Feb 12 08:46:19 2018 -0800"
      },
      "message": "Clear dex pc to avoid duplicate frames.\n\nBug: 73228466\n\nTest: Passes new unit tests, fails without change.\nChange-Id: I3660bfd16cbf2d5cf96490ca7714bc5f97914884\n"
    },
    {
      "commit": "e37e2d05b1ae3f844750b76d3b71278b79d5de51",
      "tree": "8828b7da33798376c03a4285b2130d374272b843",
      "parents": [
        "bac72c884f3ae08aa26c62cc94d165c198accd64"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Feb 09 15:57:39 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Sat Feb 10 17:11:23 2018 -0800"
      },
      "message": "Fix off by 4 error handling eh_frame hdr.\n\n- Add a new tool that can dump the register information given a pc.\n- Add a new offline unwinder test that fails without this change.\n- Update unit tests.\n- Refactor offline unwind tests to make it easier to add tests.\n\nBug: 73048324\n\nTest: Passes new unit tests.\nTest: Passes libbacktrace unit tests.\nTest: Ran debuggerd -b on random processes.\nChange-Id: If6c70a044299505c2274ae6888b35bf9ac34b74b\n"
    },
    {
      "commit": "53914165e4a19e4a320cf3394e4fabff4e89d7c6",
      "tree": "7b48d5313031761ea5b8714c58a52457f2aa2977",
      "parents": [
        "2ccde89153321d2c98787d6320ac15602494a78d"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Feb 08 19:27:47 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Feb 08 19:29:08 2018 -0800"
      },
      "message": "Expose per arch headers.\n\nBug: 73013352\n\nTest: Compiles.\nChange-Id: Ic05660db7d7858a9857143ee5e58cdaddcf52a35\n"
    },
    {
      "commit": "892e675a892413acd52eb1c926ab5820a729ed4e",
      "tree": "d7b9d1bf625f632c6fa5b6cf6d532c9c2b216a0d",
      "parents": [
        "3ff3ff1c36aa1b764a3cb849b9e2e7f2a358f22e"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Feb 07 15:19:22 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Feb 07 15:19:22 2018 -0800"
      },
      "message": "Remove dependency on -no_art variant\n\nRemove an external dependency on a shim I used to protect against\nrenaming.\n\nBug: 22322814\nTest: make -j 50\nChange-Id: I7e6eaee7d82a1a42d4c37daa74803cefc7bb68ce\n"
    },
    {
      "commit": "e762f1f193bbaff746bcbe4e4efdad9b3ebfeb26",
      "tree": "341be8e59856891621f0edd6d45bafa5297bf135",
      "parents": [
        "9d6b55928ca9829fa3a4ff1bb71c9668d452a085"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Feb 06 14:51:48 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Feb 06 15:00:04 2018 -0800"
      },
      "message": "Check that dex pc is in a valid map.\n\nAdd new unit tests for dex pc being non-zero.\n\nBug: 73004673\n\nTest: Ran unit tests.\nTest: Ran art 137-cfi test on host for interpreter.\nChange-Id: I09bbf96d0ed65fc1e5896e4ab2bc67867e3b7fdb\n"
    },
    {
      "commit": "5f5cb238f01e2f9327ec517c1487b19f946876de",
      "tree": "5f960fcaa9c3b53a4e41ad89d0bd225aedfa0f8a",
      "parents": [
        "94e930551169f95593cd8732f8d9dcb452902ed0"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Feb 05 13:07:06 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Feb 05 13:12:54 2018 -0800"
      },
      "message": "Small test clean up.\n\nShrink a few files that are huge by removing all of the .debug_XXX\nsections except .debug_frame since they aren\u0027t used.\n\nRename all of the arm32 to arm and x86_32 to x86.\n\nTest: All unit tests pass.\nChange-Id: Ia0f0baadf2a7fbc42a544aff2f14d5ed5f9287b7\n"
    },
    {
      "commit": "7747b60faa5dcfd43d920c1e60abdab1150aab32",
      "tree": "87d6249b19071be18cdb079980b09997369ada14",
      "parents": [
        "4819edf4fc15264cae0d94fbda5482b2480e99b9"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jan 31 19:05:19 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Feb 02 15:03:00 2018 -0800"
      },
      "message": "Load dex files from ART-specific data structure.\n\nFixes cdex which was recently changed to have shared data section,\nwhich means the DEX PC cannot be used to find the right symbol,\nas the bytecode is no longer within the dex file, and in-fact,\nwe might have to scan multiple dex files to find the method.\n\nBug: 72520014\nTest: testrunner.py --host --cdex-none -t 137\nTest: testrunner.py --host --cdex-fast -t 137\nTest: All unit tests pass.\nChange-Id: I80265d05ad69dd9cefbe3f8a75e4cd349002af5e\n"
    },
    {
      "commit": "d70ea5ea8511ae9b9ae57b17390e4027d20e3390",
      "tree": "958dc628f9a4d173076a54bc7d012d85ecc2473e",
      "parents": [
        "01ba1157325a5e6572122f5d46cfd0376b75aa98"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jan 30 19:47:24 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jan 31 14:19:42 2018 -0800"
      },
      "message": "Move dex pc frame creation into libunwindstack.\n\nTest: Compiles, all unit tests pass.\nTest: Ran 137-cfi art test in interpreter and verified interpreter\nTest: frames still show up.\n\nChange-Id: Icea90194986faa733a873e8cf467fc2513eb5573\n"
    },
    {
      "commit": "0b79ae155f0a5740a04723071e9f05f2527cbb86",
      "tree": "48a9e16eaa9ec0e26f685b9a096fcc885e340069",
      "parents": [
        "dc0edb586dcfbc3ce441d2ac34a67309bd76d6fe"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jan 25 12:15:56 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jan 25 17:11:33 2018 -0800"
      },
      "message": "Add a global elf cache.\n\nBug: 65682279\n\nTest: Ran new unit tests.\nChange-Id: I19c64614b2b11a27f58204d4cc34913c02e04c36\n"
    },
    {
      "commit": "2fcf4cf13e9aefa8c312084af12ca2d712a6ead3",
      "tree": "b5221be7ee35e1b7e2cfed8f931a704cc5f40da4",
      "parents": [
        "335675c2fd8ff39e5af635eb375edc766147cbb9"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jan 23 17:52:23 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jan 24 17:50:46 2018 -0800"
      },
      "message": "Add error propagation into Unwinder/Elf objects.\n\nThe backtrace offline code uses these error codes to diagnose errors.\nIn addtion, I\u0027ve had cases where seeing these errors would help diagnose\nfailures.\n\nThis also allows us to add a few features to indicate why an unwind\nterminated (such as max frames exceeded).\n\nBug: 65682279\n\nTest: Updated unit tests pass.\nChange-Id: If82b5092698e8a194016d670efff1320f9b44d50\n"
    },
    {
      "commit": "1a141a09256bbb61ffd67a0f666711a92adf5726",
      "tree": "7c6f0fc6648c1eb4a1933e907a70be36f1955f7c",
      "parents": [
        "0ad424358c0e6937ba1d58d21721377cf4f03a95"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jan 24 08:52:47 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jan 24 13:20:03 2018 -0800"
      },
      "message": "Small behavioral changes to the unwinder.\n\n- Be a little more lenient when reading the cies/fdes. If next entry data\n  winds up incorrect, don\u0027t fail, simply stop processing the entries. This\n  only applies when reading all of the cies/fdes at once.\n- Fail to init an eh_frame with no entries and fallback to assuming the\n  eh_frame has no header instead.\n- Change the step to always try debug_frame first which has the most\n  accurate information.\n- Add small unit tests and a couple of offline unit tests to verify\n  this behavior.\n\nThese changes are needed to support offline unwinding since it depends\non this new behavior.\n\nBug: 65682279\n\nTest: Ran new unit tests.\nChange-Id: I3529f1b0c8e14cd7409494e5de2f3c9e78d0855e\n"
    },
    {
      "commit": "98984b41da78448df24d8d9ced842066328d5f11",
      "tree": "642bbd79fd42f8deccf9b29b3c73b5af295ec936",
      "parents": [
        "2c4f487dfbf1e1cce6e887bfef5e864f8222d07f"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jan 17 12:59:45 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jan 17 19:18:00 2018 -0800"
      },
      "message": "Add support for getting a dex pc.\n\nChanges:\n- Change the register type from int16_t to uint32_t for the location data\n  and the Eval processing. This is because the special dex pc is \u003e 65535.\n- Add the ability for Dwarf register location information to point to a\n  register that is itself a Dwarf location register.\n- Add dex_pc to the frame information.\n- Modify the unwind tool to print the dex pc if non-zero.\n\nThis does not implement the printing of the dex information in anything\nbut the unwind tool. It\u0027s not the final form of this printing.\n\nBug: 72070049\n\nTest: Ran new unit tests.\nTest: Dumped stack while in interpreter running 137-cfi art test and\nTest: verified dex pc is set to non-zero.\nChange-Id: I6ce8a6b577fb4f92abacbd433b1f68977e272542\n"
    },
    {
      "commit": "ed37aca9876de87b86f50126da1541ae2699e74f",
      "tree": "b353718d19d99a2b521c1bc500b0338d1bbab77a",
      "parents": [
        "85d0c3adaf2a6d63e99681718a5d79cf012644ca"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jan 12 15:53:19 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jan 16 14:59:51 2018 -0800"
      },
      "message": "Find first non-zero jit debug entry.\n\nSometimes a process will have multiple shared libraries loaded\nthat have defined __jit_debug_descriptor. Specifically, art testing\nwill load libart.so and libartd.so, which would have broken unwinding\nthrough jit\u0027d code for art testing if libart.so winds up being found first.\nIn order to avoid duplicating the code for the linker to figure out\nwhich one is live, change the algorithm to find the first non-zero\nfirst_entry_ set in __jit_debug_descriptor.\n\nBug: 68396769\n\nTest: Passes unit tests.\nTest: Verified this can unwind 137-cfi on arm/arm64.\nChange-Id: Ic4d403065d2c6f22476ef0171e7add17cd1464cd\n"
    },
    {
      "commit": "150db124f3f3c0f8e1c341fd33c6c64310e0ac39",
      "tree": "87fb701a6895bf8f273997edb1d98bf9aea2a3cd",
      "parents": [
        "55feb241b159a946ad3a24286baec3b8bf43a9e6"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Dec 20 18:49:01 2017 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jan 12 11:18:42 2018 -0800"
      },
      "message": "Add ability to read jit gdb data.\n\nChanges:\n- New JitDebug class to handle all of the jit gdb interface.\n- Add unit tests for all, along with new offline test using debug data.\n- Add new Memory type called MemoryOfflineParts that has multiple\n  MemoryOffline objects to support the offline test.\n- Update the tools to use the JitDebug object.\n- Modify libbacktrace to use the JitDebug, but only looking in libart.so\n  and libartd.so.\n- Change the Format32Bits to Is32Bit since it\u0027s more accurate and I use\n  it in a different context where original name didn\u0027t make sense.\n- Add a new function to find global variables in an elf file\n  (GetGlobalVariable).\n- Add a new function to determine if a pc is valid for this elf (IsValidPc).\n\nBug: 68396769\n\nTest: Ran new unit tests. Added new offline test that uses jit debug data.\nTest: Ran art test that generates jit data and verified a crash unwinds\nTest: through the jit data.\nChange-Id: I6e7ee2f5bab2242028a06feece156dff21c0a974\n"
    },
    {
      "commit": "3dfd2aea7a28faa5240cb308b9cdcca8b4025f83",
      "tree": "17773c49864e9c06f0f57401f84e6e051d2e4bd5",
      "parents": [
        "d848876ff76af3588d8e60415b68da7adcf361f2"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Dec 15 20:00:59 2017 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Dec 20 12:57:01 2017 -0800"
      },
      "message": "Add tool to save information from a process.\n\nAlso, modify the ProcessVmRead function to allow arbitrarily large\nreads and add a test for it.\n\nTest: Run tool and verify the output can be used to do an offline\nTest: unwind.\nTest: Ran unit tests.\nChange-Id: I0974ddca4f5cf72b4c9fa29b597a0a669e223828\n"
    },
    {
      "commit": "8b18000b39869997379259d775d25e37efd4fbda",
      "tree": "460a4ec8abac0e68830610747211881f948aaff0",
      "parents": [
        "432cca5c32a87f5c43df1b908eb606619a0e5635",
        "f4a94c44b6979719ce7a734d8e03ba0f853bf8cb"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Dec 18 22:21:45 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Dec 18 22:21:45 2017 +0000"
      },
      "message": "Merge \"unwindstack: add some perfunctory MemoryOffline tests.\""
    },
    {
      "commit": "f4a94c44b6979719ce7a734d8e03ba0f853bf8cb",
      "tree": "a99345cc30c72299517f7dc8135402028d047619",
      "parents": [
        "2b2ae0c88ef83c4c53297ff54fa601b18c014fa4"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Nov 13 16:16:27 2017 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Dec 15 14:11:12 2017 -0800"
      },
      "message": "unwindstack: add some perfunctory MemoryOffline tests.\n\nAdd some tests for the behavior of MemoryOffline.\n\nTest: libunwindstack_test 32/64 on hikey960\nChange-Id: Ib65a0fe5347b86062ffeaf0adaf9af57066edb76\n"
    },
    {
      "commit": "e7b6624c3fd6bb780f6330448fad175e80469384",
      "tree": "3d51f04c7a314eddbd0d091b5ae806cdcb18b64d",
      "parents": [
        "3fca67514a0634f1645db5d0a1030e42d061bf69"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Dec 15 11:17:45 2017 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Dec 15 11:17:45 2017 -0800"
      },
      "message": "Fix issues in libunwindstack.\n\n- Add a load_bias field in MapInfo so that it can be loaded offline,\n  and also so it can be cached.\n- Add an Add function to the Maps class so that it\u0027s possible to manually\n  create a map.\n- Remove the OfflineMaps class since I haven\u0027t found a reason for this to\n  exist.\n- Add a pointer to the gnu debugdata compressed section in the interface\n  itself and modify the step path to try eh_frame, then debug_frame, then\n  gnu_debugdata. This way arm can add exidx as the last step behind\n  gnu_debugdata. Add an offline test to verify the order of unwind.\n- Fix x86_64_ucontext_t since it was a different size on 32 bit and 64 bit\n  systems.\n\nTest: Pass new unit tests.\nChange-Id: I978b70d6c244bd307c62a29886d24c1a8cb2af23\n"
    },
    {
      "commit": "61b1a1ae7797e0d3177400cdb3cda028ea14669d",
      "tree": "1d2d45484f749e3bb619de268e19380bc925e926",
      "parents": [
        "84de4c0a892c922a79143248f00f2965c82b0903"
      ],
      "author": {
        "name": "Douglas Leung",
        "email": "douglas.leung@mips.com",
        "time": "Wed Nov 08 10:53:53 2017 +0100"
      },
      "committer": {
        "name": "Dejan Jovicevic",
        "email": "dejan.jovicevic@mips.com",
        "time": "Mon Dec 11 15:44:40 2017 +0100"
      },
      "message": "Add libunwindstack support for Mips and Mips64\n\nThis patch requires v3.18 kernel or above, because v3.10 kernel\nhas a bug (as of 8/1/2017) in the ptrace(GETREGSET) function for mips\nand mips64.\n\nChange-Id: I004c1fa190193eebe1c84440b366289122a6bd8a\nSigned-off-by: Douglas Leung \u003cdouglas.leung@mips.com\u003e\nSigned-off-by: Dejan Jovicevic \u003cdejan.jovicevic@mips.com\u003e\n"
    },
    {
      "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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"
    }
  ]
}
