)]}'
{
  "log": [
    {
      "commit": "f5e568e653d0dd6bccc86d1a60db5a2573f75f0e",
      "tree": "15b6eb5ebf107abc74ee75703867b38a36daaf17",
      "parents": [
        "435fc451031a6a186284d43a340f6e35be4aa170"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Mar 22 13:18:31 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Mar 22 14:55:05 2017 -0700"
      },
      "message": "Do not access device maps.\n\nIt\u0027s possible that a device map has memory controlled by a single entry\ndevice driver. Thus, you can deadlock if a process is touching that\ndevice memory and we try to unwind it and also touch that device memory.\nSimply skip any attempts to step through, or get function names from\ndevice memory maps.\n\nBug: 36130325\n\nTest: Ran new unit tests, ran bionic unit tests, ran art ThreadStress.\nChange-Id: Ibc62d7ec8106c619ee08968f05e04aea55d7cbfa\n"
    },
    {
      "commit": "82f3bbdc25253ee299207acd22b074bbe39bf2c6",
      "tree": "b67e7819902938723b530108841a16059d6bf5f1",
      "parents": [
        "e87a826a1df1891d2819aa70d613f7f140b11953"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Mar 14 15:22:26 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Mar 21 14:21:49 2017 -0700"
      },
      "message": "Allow calling GetFunctionName before unwinding.\n\nSome extra initialization needs to occur before calling the local/remote\nGetFunctioneName.\n\nAlso, cleanup the test code a bit:\n\n- Make all local functions static.\n- Create a common function to create and finish remote processes.\n- Remove unused function.\n- Fix the formatting a bit by making it match clang format.\n\nTest: Ran the unit tests.\nChange-Id: I998bed1378d582df59fdf9263df6f208db5d795a\n"
    },
    {
      "commit": "c463ba45c42b4e2d8ce30c02a626d7183102f46e",
      "tree": "4e68f1cb0a203371c57ef864def5acc4178a5d7f",
      "parents": [
        "01d76eb1ecb943db042eb6618087c0e22588e6b3"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Mar 09 14:35:54 2016 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Mar 10 14:14:43 2016 -0800"
      },
      "message": "Add error reporting mechanism for failing Unwind.\n\nRemove the logging of an error if a thread disappears before the unwind\ncan begin. This can happen, so allow the caller to determine if this\nis really a problem worth logging.\n\nBug: 27449879\n\n(cherry picked from commit 206a3b9798e3622c906a3cafdb113c271c1c927c)\n\nChange-Id: If9e7cfeb6eb7b122679a734c1a9eacee8354ef18\n"
    },
    {
      "commit": "30c942cf1024bf791c28ab9b67a1f752de72248c",
      "tree": "3da915a8e19c5e1dd547614f3198bca217d7bf45",
      "parents": [
        "000c009bcc71bf8218d20c5575d3ae44c8bd4cda"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu May 14 15:39:52 2015 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu May 14 17:56:41 2015 -0700"
      },
      "message": "Prevent crashes if a map cannot be created.\n\nUnder some conditions, /proc/\u003cpid\u003e/maps might return nothing. If we\ntry and unwind in this case, we\u0027ll crash. Check this case and fail\nthe unwind.\n\nAdd checks that no other functions try and use map_ without\nchecking for nullptr.\n\nAdd logging when an unwind fails so it\u0027s clear what happened.\n\nBug: 21162746\nChange-Id: I56ce51dda0cfc9db20475a441f118108196aa07c\n"
    },
    {
      "commit": "2c43cff01d1271be451671567955158629b23670",
      "tree": "b08d199b9cc4d0b665d7dc844cadedf883d0590c",
      "parents": [
        "e29744d94df787fa83307572d90a954b1592f69b"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Mar 26 19:18:36 2015 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Mar 31 10:51:44 2015 -0700"
      },
      "message": "Refactor the code.\n\nThe object hierarchy was confusing and convoluted. This removes\na lot of unnecessary code, and consolidates the BacktraceCurrent\nand BacktraceThread code into BacktraceCurrent.\n\nChange-Id: I01c8407d493712a48169df49dd3ff46db4a7c3ae\n"
    },
    {
      "commit": "12385e3ad085aa1ac06c26529b32b688503a9fcf",
      "tree": "c73a344e4e481a95eae2e9a9fb2216ec09cf64a3",
      "parents": [
        "6289412222bfe26ebeef2ea9c422e828c11ffc30"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Feb 06 13:22:01 2015 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Feb 06 15:00:09 2015 -0800"
      },
      "message": "Move map data into backtrace data proper.\n\nThe backtrace structure used to include a pointer to a backtrace_map_t\nthat represented the map data for a particular pc. This introduced a\nrace condition where the pointer could be discarded, but the backtrace\nstructure still contained a pointer to garbage memory. Now all of the map\ninformation is right in the structure.\n\nBug: 19028453\nChange-Id: If7088a73f3c6bf1f3bc8cdd2bb4b62e7cab831c0\n"
    },
    {
      "commit": "c58287d60166ebdb1bd39fa40e5524c868c73a9b",
      "tree": "a594c23641d255bc9c2842cb63e1a8220021bb39",
      "parents": [
        "b49f23ed3198ee6129ad675e26c8d197ed984017"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri May 09 16:59:06 2014 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri May 09 16:59:06 2014 -0700"
      },
      "message": "Only include ucontext.h when necessary.\n\nChange-Id: I29014f6c6b82e0a9797e5d76147b3c4e3d82a7f5\n"
    },
    {
      "commit": "a2efd3ac7abe223aa7a8ba8b5ba448216c4953b4",
      "tree": "4af24fc95846166c6891d4b23b7ca761aaa6b1b3",
      "parents": [
        "b52a48affc77232047a599afa3e567c0a8c01b69"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue May 06 15:23:59 2014 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu May 08 14:42:16 2014 -0700"
      },
      "message": "Rewrite unwind thread handling.\n\nThis new version doesn\u0027t require any specialized thread\nimplementation, it uses the Current implementation to do its job.\nIn addition, it runs much faster when multiple threads are trying\nto unwind at the same time since the global signal lock is held for\nonly a small amount of time. Even running through the threads one at\na time should be faster since it no longer requires two passes through\nthe unwound stacks.\n\nThe new code now allows multiple simultaneous unwinds of the\nsame thread.\n\nFinally, add the ability to unwind from a ucontext_t passed in. This\nfunctionality doesn\u0027t work for remote unwinds yet.\n\nChange-Id: I4d181d7ca5ffd2acfd1686e668e6d21e36b425cb\n"
    },
    {
      "commit": "e29609106033a48a6128664668d22bf4fb42a7ee",
      "tree": "c01cd6a8fd876b11a08ff0120af3f263d71b7b53",
      "parents": [
        "223fc42b5e289e882f67c893374ffbef595a6901"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Mar 07 19:42:19 2014 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Apr 03 14:19:24 2014 -0700"
      },
      "message": "Create an UnwindMapLocal object.\n\nThe way libunwind handles local unwinds is different from remote unwinds,\nso create a new map object to handle the differences.\n\nAdd new test to verify the map data is being generated correctly.\n\nAdd new tests to check for leaks.\n\nRefactor the BACK_LOGW code into a single header file.\n\nChange-Id: I01f3cbfc4b927646174ea1b614fa25d23b9b3427\n"
    },
    {
      "commit": "df2906186b6952c57b1f662bfef0b65c9f8c2e0d",
      "tree": "e5ed8339b7fd42ff20047244f87106c8f1fa0d45",
      "parents": [
        "6ddabb7a1cc3080ae773acb045f69b5e6afee87a"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jan 22 19:21:07 2014 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jan 28 12:03:36 2014 -0800"
      },
      "message": "Re-enable libunwind for arm.\n\nUpdate to handle the new optimized way that libunwind works.\n\nIn addition, a small refactor of the BacktraceMap code.\n\nA few new tests of for good measure.\n\nChange-Id: I2f9b4f5ad5a0dfe907b31febee76e4b9b94fb76f\n"
    },
    {
      "commit": "46756821c4fe238f12a6e5ea18c356398f8d8795",
      "tree": "f0a17c7afec73b58608ffe0230fad7d5c8f6371b",
      "parents": [
        "e847f429f43ae56aaa406697ca603c8469e2100b"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jan 14 20:16:30 2014 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jan 16 16:12:29 2014 -0800"
      },
      "message": "Rewrite libbacktrace to be all C++.\n\nThis includes removing the map_info.c source and replacing it with the\nBacktraceMap class to handle all map related code.\n\nChange all callers of libbacktrace map functionality.\n\nAlso modify the corkscrew thread code so that it doesn\u0027t need to build\nthe map twice (once in the corkscrew format and once in the libbacktrace\nformat).\n\nChange-Id: I32865a39f83a3dd6f958fc03c2759ba47d12382e\n"
    },
    {
      "commit": "20303f856f1f1cdb5af58af0b116b8c598f0ea5c",
      "tree": "de0b205001d3afdf97bd54e4ee39a81750e9bf70",
      "parents": [
        "e76343ef72458aff8fdc25c57f4e84407c05a2f2"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jan 10 16:33:16 2014 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jan 13 14:21:52 2014 -0800"
      },
      "message": "Next phase of the move, reformat use C++ features.\n\nUse the libbacktrace C++ interface instead of the C interface in debuggerd.\n\nReformat the debuggerd code to be closer to Google C++ style.\n\nFix all debuggerd casts to be C++ casts.\n\nAdd a frame number to the frame data structure for ease of formatting and\nadd another FormatFrameData function.\n\nChange the format_test to use the new FormatFrameData function.\n\nModify all of the backtrace_test to use the C++ interface.\n\nChange-Id: I10e1610861acf7f4a3ad53276b74971cfbfda464\n"
    },
    {
      "commit": "9846497f7926fc3240c2893d89e60880c22d1fd6",
      "tree": "d137d0957607cbdf211f6323516a8b8968004c7a",
      "parents": [
        "0afaf7f4dde98ff554b69d05ed87ceab4ec611aa"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jan 06 19:16:33 2014 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jan 08 15:32:28 2014 -0800"
      },
      "message": "Refactor to share map_info amongst threads.\n\nAllow the use of the same map info to be shared when getting information on\nmultiple threads from the same pid.\n\nChange-Id: I2e460e20154a10f4894ae563331fb32179e4551f\n"
    },
    {
      "commit": "8ed46278bee3cfc4c216f3a1524744019b693200",
      "tree": "5f6eab2ef98469e75dc1d1793b134ee61715cac5",
      "parents": [
        "98f87d92d89079f274374409efcf57ca52b13c1f"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Oct 29 15:44:25 2013 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Oct 30 14:14:54 2013 -0700"
      },
      "message": "More libbacktrace fixes.\n\nIncluded in minor fix ups is the addition of a warning macro to replace\nall of the ALOGW calls.\n\nFix a race where multiple threads could be attempting to unwind the threads\nof the current process at the same time.\n\nBug: 8410085\n\nChange-Id: I02a65dc778dde690e5f95fc8ff069a32d0832fd1\n"
    },
    {
      "commit": "17e91d44edf5e6476a477a200bcd89d4327358a3",
      "tree": "947783229077133a7f467402607a72fe2047a7a7",
      "parents": [
        "f1296b9e92cb04f9bba8c622560d37dfc53c7aa4"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Oct 21 13:30:52 2013 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Oct 28 17:55:25 2013 -0700"
      },
      "message": "Rewrite libbacktrace using C++.\n\nThe old code was essentially trying to be C++ in C and was awkward. This\nchange makes it all objects with a thin layer that C code can use.\n\nThere is a C++ backtrace object that is not very useful, this code will\nreplace it.\n\nThis change also includes moving the backtrace test to a gtest, and adding\ncoverage of all major functionality.\n\nBug: 8410085\nChange-Id: Iae0f1b09b3dd60395f71ed66010c1ea5cdd37841\n"
    }
  ]
}
