)]}'
{
  "log": [
    {
      "commit": "9782b8707484addc0c90b641422e583e95ab7b35",
      "tree": "6c76c9f4832eae6764ee9425fc8f50bd19fa7c79",
      "parents": [
        "9cf76012aa5edc11050920ab1b65817c1be1a112"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jul 18 13:36:50 2019 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jul 18 21:11:22 2019 +0000"
      },
      "message": "Move to the libc++ demangler.\n\nBug: 136138882\n\nTest: Ran malloc debug tests.\nTest: Ran an app with backtrace_full and verified demangling working in\nTest: log file.\nTest: Enabled leak checking and verified that the logs include properly\nTest: demangled.\nChange-Id: Ic4fd9f1522451e867048ac1bea59d8c5ed0d3577\n"
    },
    {
      "commit": "b233fab925ca9b8370e83c2577610b26cb143619",
      "tree": "c769a8eaf1e5fbb4e32c437d82f2433b65a6668e",
      "parents": [
        "0c499a69e3d8b858f53a7410285416c0cb30f83b"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Dec 18 16:44:42 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Dec 18 17:45:46 2018 -0800"
      },
      "message": "Fix handling of libs with a ro map and a rx map.\n\nWhen the linker was changed so that it put a read-only map and\nread-execute map, this code incorrectly computed the relative pc and\noffset. Modify to look for the actual start map in this case.\n\nAlso, change the load_base name to load_bias.\n\nBug: 120613266\n\nTest: Dumped logcat while dumping backtraces.\n\nChange-Id: I6628694c5222ea34d63217af3d138707d4900004\n"
    },
    {
      "commit": "4da2503d70dc4bc1444454876e3794b69227d90d",
      "tree": "d904c750ebac96aee76df44baad1320c0db211a3",
      "parents": [
        "a3f6f6c1b9135c90e410f5382b153db9a43a4db0"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Mar 07 13:38:48 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 02 18:59:23 2018 -0700"
      },
      "message": "Refactor malloc debug.\n\nChanges\n- Refactor the code so that only guards require creating a special header\n  for every pointer allocated.\n- Store only a single copy of every backtrace. This saves memory so that\n  turning on the backtrace option doesn\u0027t result in 10X memory usage.\n- Added new option track_allocs that only verifies pointers are valid for\n  free/malloc_usable_size/realloc.\n- Remove suffix from test names.\n- Add the TRACK_ALLOCS options to all guard options.\n- Add new option verify_pointers that is a lightweight way to verify\n  pointers that are passed to allocation routines.\n- Do auto-formatting of the code.\n- Updated documentation for all of these changes.\n\nBug: 74361929\n\nTest: Ran unit tests.\nTest: Ran libmemunreachable unit tests.\nTest: Ran an app with backtrace enabled.\n\nChange-Id: I3246c48ae4f9811f64622d90d0a9b4d9d818702c\n"
    },
    {
      "commit": "a625ee2063dec60996f01e0274e4c352ab75c46b",
      "tree": "5654e79f8e65ba2372ff038d1e4285ea3ecf6629",
      "parents": [
        "498b4de964b5d38952acfe2d1823c13f20a641d3"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jun 01 14:16:32 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jun 02 10:10:24 2017 -0700"
      },
      "message": "Use libdemangle for function names.\n\nBug: 62141808\n\nTest: Ran unit tests, ran malloc debug with leaks and verified functions\nTest: are demangled.\nChange-Id: I1900632e9a55bb818b1aabc798224ff3eebc1fca\n"
    },
    {
      "commit": "c0352bbd5f8bd4c7696d3b71a0056dcfb2b44708",
      "tree": "ae90fd70a7381d5c9366feb8cfb16a240a06e1cd",
      "parents": [
        "a559cff654afd31d718d5f476003584f48c5932b"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu May 25 18:26:37 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu May 25 18:38:45 2017 -0700"
      },
      "message": "Add offset to backtrace_string printing.\n\nThe libmemunreachable code uses backtrace_string to print out the backtrace\ninformation. However, when the offset of the map that a frame is in is\nnon-zero, no information is printed. This means that when a frame comes from\na shared library loaded from an apk, it\u0027s impossible to tell which\nshared library the frame is really coming from.\n\nAdd the offset display when it\u0027s non-zero. This means this can now be fed\nto development/scripts/stack to decode the frame.\n\nBug: 37276041\n\nTest: Ran dumpsys meminfo --unreachable on an app that leaks from a\nTest: shared library and verified the offset output is present.\nChange-Id: I61d34ae3f617622d354cc099eff520a64782b6e2\n"
    },
    {
      "commit": "7a3681e5b6c39bc2b3b62031ca5941dbf7bc4e63",
      "tree": "78c25e2a38b7efed8db770a623a5cbfb7eaab11d",
      "parents": [
        "ca5e0f49ca5df873a20c996755175b5c9c1e2ed9"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 24 17:48:32 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed May 03 08:50:43 2017 -0700"
      },
      "message": "Move libc_log code into libasync_safe.\n\nThis library is used by a number of different libraries in the system.\nMake it easy for platform libraries to use this library and create\nan actual exported include file.\n\nChange the names of the functions to reflect the new name of the library.\n\nRun clang_format on the async_safe_log.cpp file since the formatting is\nall over the place.\n\nBug: 31919199\n\nTest: Compiled for angler/bullhead, and booted.\nTest: Ran bionic unit tests.\nTest: Ran the malloc debug tests.\nChange-Id: I8071bf690c17b0ea3bc8dc5749cdd5b6ad58478a\n"
    },
    {
      "commit": "a19bc2d4edfc261bdccfc5f855c50e83477b3757",
      "tree": "2cb3b588486f4d25f0574499fe6a1913e56cacbf",
      "parents": [
        "f97b27a9c06a61206dd1edbbfc5e11b2a293b462"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Nov 15 14:04:16 2016 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Nov 16 10:55:20 2016 -0800"
      },
      "message": "Fix uninitialized variable usage.\n\nIf the dladdr call fails, then info.dli_fname will be unitialized.\nMake sure that this can\u0027t happen.\n\nBug: 32907235\n\nTest: Enabled malloc debug on an angler and verified that function names\nTest: still work.\nChange-Id: I738e66d9f37bce07bc4c10f1f9bac11fbfdae2c7\n"
    },
    {
      "commit": "d75d4bea54a788dada3f2538a33cc491e4c56ed4",
      "tree": "2afb4a19e32539b11eda85948225ef456b4cf638",
      "parents": [
        "2c75991359df165ca7cc7a6213fb227c0b5ed87c"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Feb 08 14:29:03 2016 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Feb 18 16:09:17 2016 -0800"
      },
      "message": "malloc_debug: reread /proc/pid/maps when entry is missing\n\nReread /proc/pid/maps on demand in case a new library has been loaded.\n\nChange-Id: Iac8109b3e6a07bf02c38300b21eecabf4bcd54df\n"
    },
    {
      "commit": "2c75991359df165ca7cc7a6213fb227c0b5ed87c",
      "tree": "4dc02df00481962e80acb454ee857fd5b2f8b2d4",
      "parents": [
        "2d4721c0c57fe2f7c1e1b40df4763a561b3cf856"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Feb 05 16:17:39 2016 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Feb 18 16:09:17 2016 -0800"
      },
      "message": "Add backtrace_string and export to libmemunreachable\n\nAdd backtrace_string to convert a malloc_debug backtrace to a string.\nAlso move the backtrace functions to libc_malloc_debug_backtrace so that\nlibmemunreachable can reuse them.\n\nChange-Id: I5ad67001c0b4d184903c762863a8588181d4873b\n"
    },
    {
      "commit": "7993b80f894db20af4d1d154221c42fea6171a3d",
      "tree": "fc99d36000a8f0853224d75296d96509a730ee05",
      "parents": [
        "50647711ebaf2360aca05cc94a2fdf431c1a153e"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jan 28 18:35:05 2016 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jan 29 15:19:22 2016 -0800"
      },
      "message": "Add better free tracking.\n\nIncluded in this change:\n\n- Change the tag when a pointer is freed so it\u0027s easy to detect if\n  an already freed pointer is being used.\n- Move the free backtrace out of the header. This backtrace is only\n  used under only some circumstances, so no need to allocate space\n  in all headers for it.\n- Add new option free_track_backtrace_num_frames to specify how many\n  frames to record when the free occurs. This removes the dependency\n  on the backtrace option to get backtraces.\n\nBug: 26739265\nChange-Id: I76f5209507dcf46af67ada162a7cb2bf282116f2\n"
    },
    {
      "commit": "63860cb8fd1adf3f679b9b4ad876323a8d65cd9d",
      "tree": "25aeae686d92efcb5e08a54e8cba1e8c31efe33b",
      "parents": [
        "ad9c3f34f762ed45cce5dbb93218124ed31f6873"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Nov 16 17:30:32 2015 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jan 25 10:54:21 2016 -0800"
      },
      "message": "Malloc debug rewrite.\n\nThe major components of the rewrite:\n\n- Completely remove the qemu shared library code. Nobody was using it\n  and it appears to have broken at some point.\n- Adds the ability to enable/disable different options independently.\n- Adds a new option that can enable the backtrace on alloc/free when\n  a process gets a specific signal.\n- Adds a new way to enable malloc debug. If a special property is\n  set, and the process has an environment variable set, then debug\n  malloc will be enabled. This allows something that might be\n  a derivative of app_process to be started with an environment variable\n  being enabled.\n- get_malloc_leak_info() used to return one element for each pointer that\n  had the exact same backtrace. The new version returns information for\n  every one of the pointers with same backtrace. It turns out ddms already\n  automatically coalesces these, so the old method simply hid the fact\n  that there where multiple pointers with the same amount of backtrace.\n- Moved all of the malloc debug specific code into the library.\n  Nothing related to the malloc debug data structures remains in libc.\n- Removed the calls to the debug malloc cleanup routine. Instead, I\n  added an atexit call with the debug malloc cleanup routine. This gets\n  around most problems related to the timing of doing the cleanup.\n\nThe new properties and environment variables:\n\nlibc.debug.malloc.options\n  Set by option name (such as \"backtrace\"). Setting this to a bad value\n  will cause a usage statement to be printed to the log.\n\nlibc.debug.malloc.program\n  Same as before. If this is set, then only the program named will\n  be launched with malloc debug enabled. This is not a complete match,\n  but if any part of the property is in the program name, malloc debug is\n  enabled.\n\nlibc.debug.malloc.env_enabled\n  If set, then malloc debug is only enabled if the running process has the\n  environment variable LIBC_DEBUG_MALLOC_ENABLE set.\n\nBug: 19145921\n\nChange-Id: I7b0e58cc85cc6d4118173fe1f8627a391b64c0d7\n"
    },
    {
      "commit": "32bf43f44a4c0ccf04c6a60094aff574d50ecfe7",
      "tree": "9f4ee4ace8e764e5ee7dc5ee285d58d26d0d0be1",
      "parents": [
        "a992004c9edf4db0c11aae8610cce6ebf13d53b4"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Sep 01 16:01:50 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Sep 01 16:01:50 2015 -0700"
      },
      "message": "Rename debug_stacktrace to debug_backtrace.\n\nAll the functions say \"backtrace\", so it\u0027s weird that the filename\nsays \"stacktrace\".\n\nChange-Id: I1c88a56c1f9adb1bae4615edc8af3e73db270a8c\n"
    },
    {
      "commit": "b72c9d80ab760eb2f33a6667b0f0acfb779d9439",
      "tree": "9521cddb1f7d61eb739a3d787eec490519611c11",
      "parents": [
        "4d7d05bd60b1d0bc20c95dd764fc2d916a12bb74"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Aug 25 20:48:46 2015 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Aug 26 10:55:09 2015 -0700"
      },
      "message": "Fix the 16 bit/32 bit instruction check for arm.\n\nThe current code only looks for a branch, instead make this more\ngeneral.\n\nChange-Id: Ib442d6f2f04074e274b320ca0cf04734cc78e5d2\n"
    },
    {
      "commit": "224bef8ec492e8c2a88f17f05ab7982495b43d6a",
      "tree": "cbd35e18d699a70e0c1ec7ad49bdc27b364cfc37",
      "parents": [
        "e4d51cf37a861e258e423de14619982af51d2527"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Aug 18 15:41:31 2015 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Aug 18 15:41:31 2015 -0700"
      },
      "message": "Modify ip to get the instr being executed.\n\nThe ip values being reported are always pointing at the next\ninstruction to execute, not the currently executing instruction.\nChange the ip address to point at the currently executing instruction.\n\nThis fixes a problem where the next instruction is not actually\npart of the same function, so if an addr2line is used, it reports\nthe wrong value.\n\nThis does not modify the ip for mips.\n\nBug: 22565486\nChange-Id: Ie0df4c9727f62ce06948b9a2b0e4b7956eb6e752\n"
    },
    {
      "commit": "6e54c3e519892ca13f15bdcea0d431befbadac25",
      "tree": "914bdd8c31ba4d8cd205fefb8f0b95669a425189",
      "parents": [
        "8e5f9bc8a46872e3f0ac4799558fdfd5999f9c20"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 05 12:05:34 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 05 12:05:34 2015 -0800"
      },
      "message": "Use the libcxxabi __cxa_demangle.\n\nBug: 18930951\nChange-Id: If2ea3633ac6dfd4ec975c0f16bdf3dd58e05c614\n"
    },
    {
      "commit": "05fc1d7050d5451aea08dc5f504d2670287b2d43",
      "tree": "fa1d81b61b303ee8ed94c511cc08b8f40ed6624b",
      "parents": [
        "43606bc1ce974e4ba42d7d2c3682ad5182e6fc96"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 28 18:02:33 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 28 19:23:11 2015 -0800"
      },
      "message": "Add missing includes.\n\nChange-Id: Ibf549266a19a67eb9158d341a69dddfb654be669\n"
    },
    {
      "commit": "30e59c4c691d493fda7da35307db69ced61e7cf4",
      "tree": "037fed2bb268f386bb8d3d25da3064ce8fe4235f",
      "parents": [
        "d3de1ddef1427708581af4df02943486783f980d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 06 18:48:24 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 06 18:48:24 2015 -0800"
      },
      "message": "_Unwind_Context is a struct.\n\nChange-Id: Iff2c52dc630eb83b931a78fdebc4494d69462db7\n"
    },
    {
      "commit": "861c0ef37bcfcae56d88572cb01c18bcfe1faded",
      "tree": "f63fc703a50b23213537962e4f60519f8b34db47",
      "parents": [
        "a7dc7600fe1be1f3fd61856b407bb7065307e711"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jul 24 17:52:23 2014 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jul 29 18:10:00 2014 -0700"
      },
      "message": "Use libunwindbacktrace for debug malloc code.\n\nCreate a method of disabling the debug allocation code paths so that\nit\u0027s possible to use the libunwindbacktrace library without any\nmodifications.\n\nUse this path to create and destroy the maps for the process. It\u0027s not\nstricly necessary in the init code since the symbols are not modified\nuntil after the initialize calls.\n\nAlso, remove the debug_XXX source files that doesn\u0027t need to be in libc.so.\n\nFix the maps reading code since it was completely broken for 64 bit.\n\nBug: 16408686\n\nChange-Id: I6b02ef6ce26fdb7a59ad1029e7cbba9accceb704\n"
    },
    {
      "commit": "1728b2396591853345507a063ed6075dfd251706",
      "tree": "7083cd234073afa5179b94b3d978550c890af90c",
      "parents": [
        "bac795586bbc5dcbe886d8d781710f60c4c19d9b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 14 10:02:03 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 14 10:02:03 2014 -0700"
      },
      "message": "Switch to g_ for globals.\n\nThat\u0027s what the Google style guide recommends, and we\u0027re starting\nto get a mix.\n\nChange-Id: Ib0c53a890bb5deed5c679e887541a715faea91fc\n"
    },
    {
      "commit": "d3679c815e010c2e67bf07420b6ab3a74f27a2ed",
      "tree": "7105ac89172be5ad7396be69471233a7f034e7fe",
      "parents": [
        "8abf44c415bb3b02b6a3198196c92266442a0c32"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 21 10:15:14 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 21 10:15:14 2014 -0700"
      },
      "message": "clang is \u003e\u003d 3.4 now; remove a hack.\n\nChange-Id: I8d976ee0fd88eca9779c87b5d7e27f46b4b1b489\n"
    },
    {
      "commit": "ba76572789740ec1a04da30dd89121ef5cb0bf44",
      "tree": "d0fc08febdef41d97549daa11256f3d5f657c7d5",
      "parents": [
        "901553aaf4960c4ab21c9a090919aee8be5e62ab"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 25 15:32:01 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 25 15:32:01 2014 -0800"
      },
      "message": "Fix log_backtrace assertion failure caused by LP64 fix.\n\nWhen libc.debug.malloc is enabled, stack backtraces fail with:\n\nbionic/libc/bionic/libc_logging.cpp:378: assertion \"conversion\n    specifier unsupported\" failed\n\nThe cause was a change to the format specifier from \"%08x\" to\n\"%0*x\" to pass the field width as an additional parameter.\nUnfortunately this modifier isn\u0027t supported by out_vformat() in\nlibc_logging.cpp.\n\nChanged to use \"%016x\" if __LP64__ is defined; \"%08x\" otherwise.\n\nBug: 13177507\nChange-Id: Ibf07263acf14da086d3c3788872f4b5477bd5708\n"
    },
    {
      "commit": "eb847bc8666842a3cfc9c06e8458ad1abebebaf0",
      "tree": "15e070fb706ba7599d5f402a8f934a7399541a6a",
      "parents": [
        "0c17099a71cb5d1b36b7aab66fd7341b3fc9106d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 09 15:50:50 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 09 16:00:17 2013 -0700"
      },
      "message": "Fix x86_64 build, clean up intermediate libraries.\n\nThe x86_64 build was failing because clone.S had a call to __thread_entry which\nwas being added to a different intermediate .a on the way to making libc.so,\nand the linker couldn\u0027t guarantee statically that such a relocation would be\npossible.\n\n  ld: error: out/target/product/generic_x86_64/obj/STATIC_LIBRARIES/libc_common_intermediates/libc_common.a(clone.o): requires dynamic R_X86_64_PC32 reloc against \u0027__thread_entry\u0027 which may overflow at runtime; recompile with -fPIC\n\nThis patch addresses that by ensuring that the caller and callee end up in the\nsame intermediate .a. While I\u0027m here, I\u0027ve tried to clean up some of the mess\nthat led to this situation too. In particular, this removes libc/private/ from\nthe default include path (except for the DNS code), and splits out the DNS\ncode into its own library (since it\u0027s a weird special case of upstream NetBSD\ncode that\u0027s diverged so heavily it\u0027s unlikely ever to get back in sync).\n\nThere\u0027s more cleanup of the DNS situation possible, but this is definitely a\nstep in the right direction, and it\u0027s more than enough to get x86_64 building\ncleanly.\n\nChange-Id: I00425a7245b7a2573df16cc38798187d0729e7c4\n"
    },
    {
      "commit": "c7c5f85ead6a58eadd511c728a9020a493bc128f",
      "tree": "a2a9e24e58bc73036ae7c93a7120ecda7cca8c1e",
      "parents": [
        "458076c3c7f41c72e0d1ae8da23907f75427ca3a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 08 17:02:26 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 08 17:02:26 2013 -0700"
      },
      "message": "Fix bionic\u0027s built-in stack trace dumping for LP64.\n\nChange-Id: I967c5789d7bb2d3d248d94d81a40d5ec4e1bf26d\n"
    },
    {
      "commit": "5f6cfce4f6608f2e450266814543e70b1ed2e02c",
      "tree": "4e45c2598a634c1d21e8b9b49ee775f414c01d33",
      "parents": [
        "76218efbeb2e124656ce15d4eb5a7039da065123"
      ],
      "author": {
        "name": "Stephen Hines",
        "email": "srhines@google.com",
        "time": "Tue Oct 01 18:20:51 2013 -0700"
      },
      "committer": {
        "name": "Stephen Hines",
        "email": "srhines@google.com",
        "time": "Tue Oct 01 18:20:51 2013 -0700"
      },
      "message": "Add simple implementation _Unwind_GetIP() for clang compiles.\n\nClang (prior to 3.4) does not actually provide a declaration (or definition)\nof _Unwind_GetIP() for ARM. We can work around this by writing our own\nbasic implementation using the available primitive operations.\n\nChange-Id: If6c66846952d8545849ad32d2b55daa4599cfe2c\n"
    },
    {
      "commit": "63dd03ccedc316724c40e140067e612932e4420e",
      "tree": "a70b494e2204cefbd419b4e24f8946f54ee07201",
      "parents": [
        "b9256adab3aa7e7628d7bbd015132a511de7a43d"
      ],
      "author": {
        "name": "Ben Cheng",
        "email": "bccheng@google.com",
        "time": "Tue May 07 16:53:33 2013 -0700"
      },
      "committer": {
        "name": "Ben Cheng",
        "email": "bccheng@google.com",
        "time": "Tue May 07 16:53:33 2013 -0700"
      },
      "message": "Remove a spurious FIXME and unnecessary type cast.\n\nChange-Id: I05dcefdec7f047bef7eef5c5ceb7453992d56c24\n"
    },
    {
      "commit": "52171b9bdcb2aa1efe9c4deab37c029699fe763d",
      "tree": "5a96f4a0319f32a08089ec8e60fe4f34aa9b7354",
      "parents": [
        "d541ba17197fd3ef1f60462e51261c4340369218"
      ],
      "author": {
        "name": "Ben Cheng",
        "email": "bccheng@google.com",
        "time": "Tue May 07 14:22:43 2013 -0700"
      },
      "committer": {
        "name": "Ben Cheng",
        "email": "bccheng@google.com",
        "time": "Tue May 07 15:44:13 2013 -0700"
      },
      "message": "Adjust PC value in ARM stack trace.\n\n-2 for Thumb BLX(2) or -4 for the rest.\n\nChange-Id: I804fdabfa1db4709bede222d4b432e8d42d53167\n"
    },
    {
      "commit": "8f2a5a0b40fc82126c691d5c30131d908772aab7",
      "tree": "0b29a5dc82395c076387edb5af9ca271a91264c0",
      "parents": [
        "e23ed8c6441389a79c6504295184f7249e01a197"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 15 15:30:25 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 15 16:12:58 2013 -0700"
      },
      "message": "Clean up internal libc logging.\n\nWe only need one logging API, and I prefer the one that does no\nallocation and is thus safe to use in any context.\n\nAlso use O_CLOEXEC when opening the /dev/log files.\n\nMove everything logging-related into one header file.\n\nChange-Id: Ic1e3ea8e9b910dc29df351bff6c0aa4db26fbb58\n"
    },
    {
      "commit": "35b621c5f4c79959cd36fec0153c2c9c43ebe5f0",
      "tree": "016d232e99a12943587357bf8b10a3d25cb98b0e",
      "parents": [
        "a0151cbfbaa37965dbcd188a55a78d3ad4802b9b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jan 28 16:27:36 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 29 09:56:31 2013 -0800"
      },
      "message": "Don\u0027t collect useless stack frames; do demangle C++ symbols.\n\nPreviously, we\u0027d collect every stack frame and then throw some away\nwhen we came to log them. This meant that stack traces were effectively\nshorter than the buffers that had been allocated for them. This patch\nonly stores frames we\u0027ll actually output.\n\nAlso dynamically call the C++ demangler so we don\u0027t have to try to\nread mangled names. Because no one knows the mangling of operator new[]\nfor int arrays off the top of their head.\n\nBug: 7291287\nChange-Id: I42b022fd7cd61675d05171de4c3b2704d058ef2a\n"
    },
    {
      "commit": "239e7a0756fddf3698bf72cab10d7f382421090b",
      "tree": "6ec3636787883bf1b20bd490cc011110b625d3fe",
      "parents": [
        "6a94cb748bf63278c3271b0ab610061b0dc6f04a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 25 17:13:45 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 25 17:13:45 2013 -0800"
      },
      "message": "More debug malloc fixes.\n\nInclude the leaky executable\u0027s name in the log output. Fix the \"sh\" test.\nUse uintptr_t instead of intptr_t.\n\nAlso fix debug formatting of NULL with %s.\n\nBug: 7291287\nChange-Id: I015bf341cd48d43a247173612e6ccb1bf1243d53\n"
    },
    {
      "commit": "1e980b6bc8315d00a07312b25486531247abd98c",
      "tree": "539f2c0c63fca27d5eb6ba184d658bb0e11a32d9",
      "parents": [
        "e4ca88d9fa8757e4fb4056fcafa5bc15b406a2fd"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 17 18:36:06 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 18 22:20:06 2013 -0800"
      },
      "message": "Fix the duplication in the debugging code.\n\nWe had two copies of the backtrace code, and two copies of the\nlibcorkscrew /proc/pid/maps code. This patch gets us down to one.\n\nWe also had hacks so we could log in the malloc debugging code.\nThis patch pulls the non-allocating \"printf\" code out of the\ndynamic linker so everyone can share.\n\nThis patch also makes the leak diagnostics easier to read, and\nmakes it possible to paste them directly into the \u0027stack\u0027 tool (by\nusing relative PCs).\n\nThis patch also fixes the stdio standard stream leak that was\ncausing a leak warning every time tf_daemon ran.\n\nBug: 7291287\nChange-Id: I66e4083ac2c5606c8d2737cb45c8ac8a32c7cfe8\n"
    }
  ]
}
