)]}'
{
  "log": [
    {
      "commit": "a7a194beb4a28f2da3d5098d1258d7284cca2b13",
      "tree": "723eaf789959d2615ecc9bc2eaaf4f0a9319f423",
      "parents": [
        "b827d1db0cf5aad248e1698d47a6aa9648aea0e6"
      ],
      "author": {
        "name": "Sim Sun",
        "email": "simsun@fb.com",
        "time": "Thu Apr 16 04:02:59 2020 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri May 01 22:20:01 2020 +0000"
      },
      "message": "Fix dangling pointer issue in LocalUpdatbleMaps\n\nLibunwindstack would remove duplicated items and update the `prev_map`\nduring reparsing `/proc/self/maps`. But we leave `prev_real_map`\npointing toward a MapInfo that will be deleted soon. It will cause a\ndangling pointer issue.\n\nAdd new tests to cover this dangling pointer issue.\n\nBug: 155511785\n\nTest: libunwindstack_test\nChange-Id: I62e1b97bcb73f07e9349671f0b758f5ec9de16c0\n"
    },
    {
      "commit": "0f40a0530976bc7fe2213944d69851821eb402c7",
      "tree": "515b7c5168a6b3e58e5c73ebea9f0a7db38922e5",
      "parents": [
        "929c9e8b40fe6adb23a140a8584d69edb2cab636"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jan 22 12:17:06 2020 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jan 22 18:30:12 2020 -0800"
      },
      "message": "Properly handle empty map after read-only map.\n\nRecently, the maps for an elf in memory might show up looking like:\n\n  f0000-f1000 0 r-- /system/lib/libc.so\n  f1000-f2000 0 ---\n  f2000-f3000 1000 r-x /system/lib/libc.so\n  f3000-f4000 2000 rw- /system/lib/libc.so\n\nThe problem is that there is logic in the code that assumed that the\nmap before the execute map must be the read-only map. In the case\nabove, this is not true. Add a new prev_real_map that will point\nto the previous map that is not one of these empty maps.\n\nThis will fix the backtraces that look like this:\n\n  #00  pc 0000000000050d58  /apex/com.android.runtime/lib64/bionic/libc.so!libc.so (offset 0x50000) (syscall+24) (BuildId: 5252408bf30e395d49ee270b54c77ca4)\n\nTo get rid of the !libc.so and the offset value, which is not correct.\n\nAdded new unit tests to verify this.\nAdded new offline test which an empty map between read-only and execute\nmap. Before this change, the backtraces had lines like\nlibc.so!libc.so (offset XXX) would be present.\n\nBug: 148075852\n\nTest: Ran unit tests.\nChange-Id: Ie04bfc96b8f91ed885cb1e655cf1e346efe48a45\n"
    },
    {
      "commit": "8a243118dbd3ee751ae7e3d6827469895490a377",
      "tree": "299899ed29b7620dd1420e97d5961d2b24c872b5",
      "parents": [
        "bace5995f1c1c6e006e94f6f235828a13ecda753"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Nov 14 17:33:12 2019 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Nov 14 18:12:57 2019 -0800"
      },
      "message": "unwindstack: fix dangling pointer in LocalUpdatableMaps.\n\nPreviously, when reparsing /proc/self/maps, we would remove duplicate\nMapInfo entries, but leave the following entry\u0027s prev_map pointing\ntoward the soon-to-be-deleted MapInfo, leading to explosions.\n\nTest: libunwindstack_test\nTest: booted with libfdtrack.so preloaded\nChange-Id: Ibfb7a8712540fe3aaadc10e9c31938f6ecddf17b\n"
    },
    {
      "commit": "f1932fd107f4a7a340cd520a91aed79975627427",
      "tree": "5db152de5b845498416c25c9cd5f4c2ca97f22a2",
      "parents": [
        "32017407fd667f66151cce115ff8198c3d53340a"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Sep 16 22:36:55 2019 +0100"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Sep 16 18:28:38 2019 -0700"
      },
      "message": "Fix LocalUpdatableMaps\n\nAvoid accessing nullptr of already deleted entry.\n\nAdd new unit tests that pass with the fix and fail without.\n\nTest: fixes unwinding in ART gcstress tests\nTest: All unit tests pass.\nChange-Id: Ideb00e2adc899904dd6aeb5dad3fb6fad150322d\n"
    },
    {
      "commit": "3d67d347f5322ca6d4aeac790368bff1f50e27b1",
      "tree": "7f7972210500803c11055447dbe592fd6db236ee",
      "parents": [
        "d5345f58fdb11f9f362b00bbfd9d7b19ca659fcc"
      ],
      "author": {
        "name": "Florian Mayer",
        "email": "fmayer@google.com",
        "time": "Wed Feb 27 18:00:37 2019 +0000"
      },
      "committer": {
        "name": "Florian Mayer",
        "email": "fmayer@google.com",
        "time": "Tue Mar 05 13:05:36 2019 +0000"
      },
      "message": "Fix copy / move behaviour of Maps object.\n\nCurrently, moving or copying a Maps object leads to double free of MapInfo.\n\nEven moving a Maps object  did not prevent this, as after a move\nthe object only has to be in an \"unspecified but valid state\", which can\nbe the original state for a vector of raw pointers (but not for a vector\nof unique_ptrs).\n\nChanging to unique_ptrs is the most failsafe way to make sure we never\naccidentally destruct MapInfo.\n\nTest: atest libuwindstack_test\n      Failed LocalUnwinderTest#unwind_after_dlopen which also fails at master.\n\nChange-Id: Id1c9739b334da5c1ba532fd55366e115940a66d3\n"
    },
    {
      "commit": "f31c70989b78ca40bda969195a4c92a1060789d5",
      "tree": "f9912f626a2a03256324419a56efd3df10ffb3c1",
      "parents": [
        "c6a2d7d5cd1e6ce36a19220c3922c5673c7b4ac5"
      ],
      "author": {
        "name": "Sandeep Patil",
        "email": "sspatil@google.com",
        "time": "Wed Jan 30 17:43:22 2019 -0800"
      },
      "committer": {
        "name": "Sandeep Patil",
        "email": "sspatil@google.com",
        "time": "Mon Feb 11 01:38:08 2019 +0000"
      },
      "message": "procinfo: Read inode number from /proc/\u003cpid\u003e/maps\n\nAdjust all callbacks to include the inode number as well.\n\nFixes: 123532375\nTest: libprocinfo_test\nTest: libdmabufinfo_test\nTest: libmeminfo_test\n\nChange-Id: I71fd75d90d5ee44585011c5ae654a1dd7e185458\nSigned-off-by: Sandeep Patil \u003csspatil@google.com\u003e\n"
    },
    {
      "commit": "a09c4a6ff2806644c8baf0b93415078fa252b0e9",
      "tree": "27827d1b44afc8b9391eb42fca881e2ba837c3f4",
      "parents": [
        "8fd4435d532846b46fe47e52a6825a050d1af13c"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Dec 13 16:08:50 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Dec 18 11:22:14 2018 -0800"
      },
      "message": "Fix offsets when shared lib split across maps.\n\nThe linker was modified so that a shared library has a read-only\nmap, then a read-execute map to represent the whole shared library.\nWhen backtraces are created, then the offsets are set incorrectly\nfor backtraces. For example, all backtraces wind up with an offset now,\nand a shared library loaded out of an apk shows the wrong offset.\n\nChanges:\n- Fix the FormatFrame function which was putting the offset before the\n  map name.\n- Refactor the Maps and MapInfo classes to keep track of the previous map\n  instead of all maps. This was the only map that was ever needed.\n- Modify the unwind_for_offline tool to capture both the read-only and\n  read-execute map when using the read-only segment option.\n\nBug: 120981155\n\nTest: Updated unit tests pass.\nTest: Unwinds on device don\u0027t show the offsets everywhere any more.\nChange-Id: I75b3727221be9c20316dfdcd7a1c6d242d7ce948\n"
    },
    {
      "commit": "3f1f2e07abe919abe044d710aea644d0aebde56a",
      "tree": "030fc92defd72d83a7c5c3af173f08922221bf51",
      "parents": [
        "215d1d510ea1d1f076716ab9303f87cbcd8bcacc"
      ],
      "author": {
        "name": "Florian Mayer",
        "email": "fmayer@google.com",
        "time": "Tue Oct 23 15:56:28 2018 +0100"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Dec 06 10:09:20 2018 -0800"
      },
      "message": "Add missing includes.\n\nTest: Builds.\nChange-Id: Ia8b79154902503cdd774dc3b4523466123b4324c\n"
    },
    {
      "commit": "9d5712c1238164d5394b188617719c91a8f2efaa",
      "tree": "56d96d87d30179616f0787afb344d9bdfd24010e",
      "parents": [
        "15a5c9c44fee0246b6b762457e4132b700cdc7f1"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Oct 01 21:01:09 2018 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Oct 03 20:48:45 2018 -0700"
      },
      "message": "Implement support for linker rosegment option.\n\nThe rosegment linker option results in two maps containing the elf data\nexisting. One is an execute map where the code lives, and the other is the\nread-only segment which contains the elf header information. If the file\nbacking a shared library in memory is not readable, then the new code\nwill attempt to find the read-only map that has the same name as the\ncurrent execute segment, and that is at offest zero in the file.\n\nAdd new unit tests for this functionality.\n\nAdd the missing MapInfoCreateMemoryTest.cpp to the list of tests.\n\nBug: 109657296\n\nTest: Pass new unit tests.\nTest: All unit libbacktrace/libunwindstack tests pass with rosegment enabled.\nChange-Id: If8f69e4a067d77b3f2a7c31e2e5cd989a0702a8c\n"
    },
    {
      "commit": "ca9a54b2c0381cc59598e8e560be9ad10b7c2e38",
      "tree": "4efa54155c9ce3b162a913bf7a9941f4b0506ff4",
      "parents": [
        "2ed14f3923a96f66ee0b0270cb0b373e690505e5"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Apr 05 11:15:00 2018 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed May 23 20:02:30 2018 -0700"
      },
      "message": "Add a specialized LocalUnwinder object.\n\nThis object is for doing many local unwinds across different threads\nat any point during a program\u0027s execution.\n\nAlso add LocalUpdatableMaps that will re-read the maps data under certain\ncircumstances.\n\nThis first version does not support jit or dex pc data.\n\nBug: 74361929\n\nTest: Ran unit tests.\nChange-Id: I790662366d3fed677f31b3288182950c494de9ad\n"
    },
    {
      "commit": "3841accba82b47087647d023e670219ac3627710",
      "tree": "2e5d901771563dded16721f694530b3ddc53e8ed",
      "parents": [
        "3607fe672a1aa0fa775df01b60d18d287e7f8686"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu May 10 17:19:12 2018 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon May 14 14:00:18 2018 -0700"
      },
      "message": "libprocinfo: add functions reading process map file.\n\nAdd test and benchmark.\nAlso switch libbacktrace, libunwindstack, libmemunreachable\nto use libprocinfo for map file reading.\nThe benchmark shows using libprocinfo speeds up map file reading\nin libbacktrace and libunwindstack 18% - 36% on walleye.\n\nBug: http://b/79118393\nTest: run procinfo_test.\nTest: run libunwindstack_test.\nTest: run libbacktrace_test.\nTest: run memunreachable_test.\n\nChange-Id: Icf281c352f4103fc8d4ba6732c5c07b943330ca1\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": "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": "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": "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": "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": "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": "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"
    }
  ]
}
