)]}'
{
  "log": [
    {
      "commit": "9425b16978f9c5aa8f2c50c873db470819480d1d",
      "tree": "679a33df6c994b2767f8eaed660c665146963484",
      "parents": [
        "c81de9373ad5f46ba4805418bb3a50021f3827c2"
      ],
      "author": {
        "name": "Mitch Phillips",
        "email": "mitchp@google.com",
        "time": "Fri Feb 04 17:13:27 2022 -0800"
      },
      "committer": {
        "name": "Mitch Phillips",
        "email": "mitchp@google.com",
        "time": "Tue Feb 08 13:17:18 2022 -0800"
      },
      "message": "[MTE] Relax ELF note.\n\nCurrently, the ELF note parsing in the loader is not permissive. This\npatch relaxes the restrictions on the bits of the ELF note that could be\nextended in the future.\n\nThis may allow more MTE options in apexes. If we add some extra metadata\nbit (say, in bit 5) in the future, and then build MTE into every apex,\nwe don\u0027t want it to crash on Android 13 devices (we\u0027d much rather it\njust be a no-op).\n\nRemove the (unused anywhere) NT_MEMTAG_DEFAULT and call it\nNT_MEMTAG_NONE.\n\nAnd finally, make the tests work on bionic-unit-tests-static. We\npreviously didn\u0027t deploy the test binaries, so add them as a data\ndependency.\n\nBug: N/A\nTest: atest bionic-unit-tests-static\nChange-Id: I13530faad55c719c6eb848297f8ce378e18afbfc\n"
    },
    {
      "commit": "93400371f7e82ded50ebe6cf7dd1c3f26cf134a6",
      "tree": "232b06760b9abac86075499a299662f416abcaf8",
      "parents": [
        "442544d7b425cf37faae45eef78848400c6bc921"
      ],
      "author": {
        "name": "Mitch Phillips",
        "email": "mitchp@google.com",
        "time": "Mon Feb 07 13:49:20 2022 -0800"
      },
      "committer": {
        "name": "Mitch Phillips",
        "email": "mitchp@google.com",
        "time": "Mon Feb 07 13:49:20 2022 -0800"
      },
      "message": "[NFCI] Change Android\u0027s NT_TYPE to NT_ANDROID_TYPE.\n\nNormally, platform-specific note types in the toolchain are prefixed\nwith the platform name. Because we\u0027re exposing the NT_TYPE_MEMTAG and\nsynthesizing the note in the toolchain in an upcoming patch\n(https://reviews.llvm.org/D118948), it\u0027s been requested that we change\nthe name to include the platform prefix.\n\nWhile NT_TYPE_IDENT and NT_TYPE_KUSER aren\u0027t known about or synthesized\nby the toolchain, update those references as well for consistency.\n\nBug: N/A\nTest: Build Android\nChange-Id: I7742e4917ae275d59d7984991664ea48028053a1\n"
    },
    {
      "commit": "f5f04b19fe59f6ac3f0b94fc890d0ccff6821fa8",
      "tree": "0905b2e3c244a538d65a7b0dcbe355ed400a586f",
      "parents": [
        "b838fbda2a91955404f41e5ca2a7671f69b38f4e"
      ],
      "author": {
        "name": "Daniele Di Proietto",
        "email": "ddiproietto@google.com",
        "time": "Tue Jan 25 18:52:04 2022 +0000"
      },
      "committer": {
        "name": "Daniele Di Proietto",
        "email": "ddiproietto@google.com",
        "time": "Tue Jan 25 20:50:12 2022 +0000"
      },
      "message": "Fix recursive deadlock inside bionic_systrace\n\nThe first time should_trace() returns true, bionic_trace_begin() calls\nopen() on trace_marker.\n\nThe problem is that open() can call bionic_trace_begin(). We\u0027ve observed\nthis happening, for example when:\n\n* fdtrack is enabled. dlopen(\"libfdtrack.so\") can be used to enable\n  fdtrack on a process.\n* ThreadA is busy unwinding inside fdtrack and is holding an fdtrack\n  internal mutex.\n* ThreadB calls bionic_trace_begin() for the first time since the\n  property \"debug.atrace.tags.enableflags\" contains ATRACE_TAG_BIONIC.\n* ThreadB calls open(\"/sys/kernel/tracing/trace_marker\"). Since fdtrack\n  is enabled, ThreadB tries to do unwinding as well.\n* ThreadB, inside fdtrack\u0027s unwinding tries to grab the same mutex that\n  ThreadA is holding.\n* Mutex contention is reported using bionic_systrace, therefore\n  bionic_trace_begin() is called again on ThreadB.\n* ThreadB tries to grab g_lock in bionin_systrace.cpp, but that\u0027s\n  already held by ThreadB itself, earlier on the stack. Therefore\n  ThreadB is stuck.\n\nI managed to reproduce the above scenario by manually pausing ThreadA\ninside unwinding with a debugger and letting ThreadB hitting\nbionic_trace_begin() for the first time.\n\nWe could avoid using g_lock while calling open() (either by releasing\ng_lock and reacquiring it later, or by using atomics), but\nbionic_trace_begin() would try to call open() again. In my tests, open()\ndoes not call bionic_trace_begin() a third time, because fdtrack has\nreentrancy protection, but there might be another code path inside open\nthat calls bionic_trace_begin again (it could be racy or only happen in\ncertain configurations).\n\nThis commit fixes the problem by implementing reentrancy protection in\nbionic_systrace.\n\nSample callstack from ThreadA deadlocked before the fix:\n```\n  * frame #0: 0x0000007436db077c libc.so`syscall at syscall.S:41\n    frame #1: 0x0000007436db0ba0 libc.so`bionic_trace_begin(char const*) [inlined] __futex(ftx\u003d0x000000743737a548, op\u003d\u003cunavailable\u003e, value\u003d2, timeout\u003d0x0000000000000000, bitset\u003d-1) at bionic_futex.h:45:16\n    frame #2: 0x0000007436db0b8c libc.so`bionic_trace_begin(char const*) [inlined] __futex_wait_ex(ftx\u003d0x000000743737a548, value\u003d2) at bionic_futex.h:66:10\n    frame #3: 0x0000007436db0b78 libc.so`bionic_trace_begin(char const*) [inlined] Lock::lock(this\u003d0x000000743737a548) at bionic_lock.h:67:7\n    frame #4: 0x0000007436db0b74 libc.so`bionic_trace_begin(char const*) [inlined] should_trace() at bionic_systrace.cpp:38:10\n    frame #5: 0x0000007436db0b74 libc.so`bionic_trace_begin(message\u003d\"Contending for pthread mutex\") at bionic_systrace.cpp:59:8\n    frame #6: 0x0000007436e193e4 libc.so`NonPI::MutexLockWithTimeout(pthread_mutex_internal_t*, bool, timespec const*) [inlined] NonPI::NormalMutexLock(mutex\u003d0x0000007296cae9f0, shared\u003d0, use_realtime_clock\u003dfalse, abs_timeout_or_null\u003d0x0000000000000000) at pthread_mutex.cpp:592:17\n    frame #7: 0x0000007436e193c8 libc.so`NonPI::MutexLockWithTimeout(mutex\u003d0x0000007296cae9f0, use_realtime_clock\u003dfalse, abs_timeout_or_null\u003d0x0000000000000000) at pthread_mutex.cpp:719:16\n    frame #8: 0x0000007436e1912c libc.so`::pthread_mutex_lock(mutex_interface\u003d\u003cunavailable\u003e) at pthread_mutex.cpp:839:12 [artificial]\n    frame #9: 0x00000071a4e5b290 libfdtrack.so`std::__1::mutex::lock() [inlined] std::__1::__libcpp_mutex_lock(__m\u003d\u003cunavailable\u003e) at __threading_support:256:10\n    frame #10: 0x00000071a4e5b28c libfdtrack.so`std::__1::mutex::lock(this\u003d\u003cunavailable\u003e) at mutex.cpp:31:14\n    frame #11: 0x00000071a4e32634 libfdtrack.so`unwindstack::Elf::Step(unsigned long, unwindstack::Regs*, unwindstack::Memory*, bool*, bool*) [inlined] std::__1::lock_guard\u003cstd::__1::mutex\u003e::lock_guard(__m\u003d0x0000007296cae9f0) at __mutex_base:104:27\n    frame #12: 0x00000071a4e32618 libfdtrack.so`unwindstack::Elf::Step(this\u003d0x0000007296cae9c0, rel_pc\u003d66116, regs\u003d0x0000007266ca0470, process_memory\u003d0x0000007246caa130, finished\u003d0x0000007ff910efb4, is_signal_frame\u003d0x0000007ff910efb0) at Elf.cpp:206:31\n    frame #13: 0x00000071a4e2b3b0 libfdtrack.so`unwindstack::LocalUnwinder::Unwind(this\u003d0x00000071a4ea1528, frame_info\u003d\u003cunavailable\u003e, max_frames\u003d34) at LocalUnwinder.cpp:102:22\n    frame #14: 0x00000071a4e2a3ec libfdtrack.so`fd_hook(event\u003d\u003cunavailable\u003e) at fdtrack.cpp:119:18\n    frame #15: 0x0000007436dbf684 libc.so`::__open_2(pathname\u003d\u003cunavailable\u003e, flags\u003d\u003cunavailable\u003e) at open.cpp:72:10\n    frame #16: 0x0000007436db0a04 libc.so`bionic_trace_begin(char const*) [inlined] open(pathname\u003d\u003cunavailable\u003e, flags\u003d524289) at fcntl.h:63:12\n    frame #17: 0x0000007436db09f0 libc.so`bionic_trace_begin(char const*) [inlined] get_trace_marker_fd() at bionic_systrace.cpp:49:25\n    frame #18: 0x0000007436db09c0 libc.so`bionic_trace_begin(message\u003d\"pthread_create\") at bionic_systrace.cpp:63:25\n```\n\nBug: 213642769\nChange-Id: I10d331859045cb4a8609b007f5c6cf2577ff44df\n"
    },
    {
      "commit": "2c96639eb2d56a8261abd916079c2ac738f612b8",
      "tree": "25b7e74983f331e6018993bced259efe3fec5205",
      "parents": [
        "7d3f322e64ea1d51a465d2cac1ba2905977bdc49"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 16 11:03:19 2021 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 16 11:03:19 2021 -0800"
      },
      "message": "Optimize the mbs fast path slightly.\n\nFrom a logcat profile:\n```\n     |--95.06%-- convertPrintable(char*, char const*, unsigned long)\n     |    |--13.95%-- [hit in function]\n     |    |\n     |    |--35.96%-- mbrtoc32\n     |    |    |--82.72%-- [hit in function]\n     |    |    |\n     |    |    |--11.07%-- mbsinit\n     |    |    |\n     |    |    |--5.96%-- @plt\n```\nI think we\u0027d assumed that mbsinit() would be inlined, but since these\nfunctions aren\u0027t all in wchar.cpp it wasn\u0027t being. This change moves the\nimplementation into a (more clearly named) inline function so we can\ntrivially reclaim that 11%+6%.\n\nBenchmarks before:\n```\n-------------------------------------------------------------------\nBenchmark                         Time             CPU   Iterations\n-------------------------------------------------------------------\nBM_stdlib_mbrtowc_1            8.03 ns         7.95 ns     87144997\nBM_stdlib_mbrtowc_2            22.0 ns         21.8 ns     32002437\nBM_stdlib_mbrtowc_3            30.0 ns         29.7 ns     23517699\nBM_stdlib_mbrtowc_4            37.4 ns         37.1 ns     18895204\nBM_stdlib_mbstowcs_ascii     792373 ns       782484 ns          890 bytes_per_second\u003d609.389M/s\nBM_stdlib_mbstowcs_wide    15836785 ns     15678316 ns           44 bytes_per_second\u003d30.4138M/s\n```\n\nBenchmarks after:\n```\n-------------------------------------------------------------------\nBenchmark                         Time             CPU   Iterations\n-------------------------------------------------------------------\nBM_stdlib_mbrtowc_1            5.76 ns         5.72 ns    121863813\nBM_stdlib_mbrtowc_2            17.1 ns         16.9 ns     41487260\nBM_stdlib_mbrtowc_3            24.2 ns         24.0 ns     29141629\nBM_stdlib_mbrtowc_4            30.3 ns         30.1 ns     23229291\nBM_stdlib_mbstowcs_ascii     783506 ns       775389 ns          903 bytes_per_second\u003d614.965M/s\nBM_stdlib_mbstowcs_wide    12787003 ns     12672642 ns           55 bytes_per_second\u003d37.6273M/s\n```\n\nBug: http://b/206523398\nTest: treehugger\nChange-Id: If8c6c39880096ddd2cbd323c68dca82e9849ace6\n"
    },
    {
      "commit": "048f24ed2a0a863a59c0167cfbeff1b8a4376224",
      "tree": "77ffbd0cc9a05157036d3d3fd42d0d7c19bb79ed",
      "parents": [
        "69bcb8be274db9e683f73814553491f5a23d95b7"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Sep 01 17:26:00 2021 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Sep 08 15:53:10 2021 -0700"
      },
      "message": "Export fts as a static library for use with musl\n\nmusl libc doesn\u0027t provide fts, but elfutils and libabigail need it.\nExport bionic\u0027s fts as a staic library that can be linked into elfutils\nand libabigail when compiling against musl.\n\nfts uses recallocarray, which musl doesn\u0027t provide, so also include\nrecallocarray.c in libfts.a.\n\nRequires minor tweaks to fts.c and a wrapper around fts.h to make them\ncompatible with musl, primarily by providing local definitions of macros\nprovided in bionic\u0027s sys/cdefs.h.\n\nBug: 190084016\nTest: m libfts\nChange-Id: Ifac9a59e7504c0c1f5f8a3a5bd3c19a13980b83c\n"
    },
    {
      "commit": "8f14b650326b0276269d8c1fa657772bc5953f94",
      "tree": "583a100d33a259d30cdc994bbf8375d86009b63b",
      "parents": [
        "13a960f0ed699137d305a55c2ae22d090b04a67d"
      ],
      "author": {
        "name": "Bowgo Tsai",
        "email": "bowgotsai@google.com",
        "time": "Thu Jul 15 10:13:33 2021 +0000"
      },
      "committer": {
        "name": "Bowgo Tsai",
        "email": "bowgotsai@google.com",
        "time": "Wed Jul 21 09:15:41 2021 +0800"
      },
      "message": "Revert \"Adding system property tracing\"\n\nRevert submission 1403568-sysprop_trace\n\nReason for revert: makes property get/set non-reentrant\nReverted Changes:\nI6f85f3f52:Add systrace tag for system property\nId2b93acb2:Adding system property tracing\nId78992d23:Add systrace tag for system property\nI1ba9fc7bd:Add systrace tag for system property\n\nBug: 193050299\nTest: build and boot a device\nChange-Id: Ic7a83fb01a39113d408ed0c95d27f694d5a2649c\nMerged-In: Ic7a83fb01a39113d408ed0c95d27f694d5a2649c\n(cherry picked from commit 61a5a8380d6417e9b85bb2f6a4a694ef4222031f)\n"
    },
    {
      "commit": "dcc97c0887c57844c832f4497866320697811e88",
      "tree": "6f15dcf66c1b9b4b5e6e6d4b7642f555bf2a6ee6",
      "parents": [
        "87a205eefa2e12597f6d7a05db05fefbe498a292"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Dec 09 14:01:13 2020 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Apr 07 19:00:45 2021 -0700"
      },
      "message": "Disable fdtrack post-fork.\n\nAlso delete some fdsan code that attempts to check for the post-fork\nstate, but never will, because we update the cached pid upon fork.\n\nBug: http://b/174542867\nTest: /data/nativetest64/bionic-unit-tests/bionic-unit-tests\nTest: treehugger\nChange-Id: I9b748dac9de9b4c741897d93e64d31737e52bf8e\n"
    },
    {
      "commit": "03e961e392b5d0761eb604ef2d8e9e8387ff40c9",
      "tree": "1bafe08951b9b918ceb523b046e5d53a3dd19063",
      "parents": [
        "6d8515ffd0551d17c056678222a4a27a5541517c",
        "2753fc8ee5668b05a94dc3bc029ab9c67bc1af5a"
      ],
      "author": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Thu Mar 11 01:15:49 2021 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 11 01:15:49 2021 +0000"
      },
      "message": "Merge \"Teach debuggerd to pass the secondary ring buffer to __scudo_get_error_info().\""
    },
    {
      "commit": "6ba27e04dff8ddf9573ded7a176052aff5273ebd",
      "tree": "6c6eabfdde44037e96f5dfaafef3e1b1ea3574d4",
      "parents": [
        "9f46c9e2919dfe0c936e659eb8d247541c6f009a",
        "2659d7b6c221402b9fc58709fdab4d0790c47b4f"
      ],
      "author": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Tue Mar 09 01:15:54 2021 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Mar 09 01:15:54 2021 +0000"
      },
      "message": "Merge \"Add some slack at the end of large allocations when target SDK level \u003c S.\""
    },
    {
      "commit": "2659d7b6c221402b9fc58709fdab4d0790c47b4f",
      "tree": "35a268ac00847c20d5f109a10f75a44703dfe695",
      "parents": [
        "15ade069b10f7f5291e48c01db2da4852dae04b7"
      ],
      "author": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Fri Mar 05 13:31:41 2021 -0800"
      },
      "committer": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Fri Mar 05 14:29:17 2021 -0800"
      },
      "message": "Add some slack at the end of large allocations when target SDK level \u003c S.\n\nThis works around buggy applications that read a few bytes past the\nend of their allocation, which would otherwise cause a segfault with\nthe concurrent Scudo change that aligns large allocations to the right.\n\nBecause the implementation of\nandroid_set_application_target_sdk_version() lives in the linker,\nwe need to introduce a hook so that libc is notified when the target\nSDK version changes.\n\nBug: 181344545\nChange-Id: Id4be6645b94fad3f64ae48afd16c0154f1de448f\n"
    },
    {
      "commit": "b69a0d496930b1faf2559ce268064bc1a005215e",
      "tree": "ebf0e0323022577a89612caf9ac210892d6785c7",
      "parents": [
        "35e81bfc9fd55347e949870b575ffdd5cadb8476",
        "7b89be78f44dc1be48697f2c055fbf3a9534f856"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Feb 19 19:27:48 2021 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 19 19:27:48 2021 +0000"
      },
      "message": "Merge \"Move __libc_int0x80 to an assembly file\""
    },
    {
      "commit": "3abde068bdefb7d2d7167f66f7037e4eb1b9ce20",
      "tree": "5590edd54c74eb89a0cf3220b59a1ccc681bde6a",
      "parents": [
        "332065d57e734b65f56474d136d22d767e36cbcd"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 18 15:12:41 2021 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 18 15:16:39 2021 -0800"
      },
      "message": "Inline the raise(SIGABRT) for x86-64 too.\n\nThis matches what we do for arm and arm64. 32-bit x86 is too big a mess\nto warrant the effort still, but the more testing is done on cuttlefish,\nthe more value there is to making every stack frame count.\n\nBefore:\n\n   #00 pc 00000000000596d8 .../libc.so (syscall+24)\n   #01 pc 000000000005d072 .../libc.so (abort+194)\n   #02 pc 000000000005f1f0 .../libc.so (__fortify_fatal(char const*, ...)+160)\n\nAfter:\n\n   #00 pc 000000000005d07d .../libc.so (abort+205)\n   #01 pc 000000000005f1e0 .../libc.so (__fortify_fatal(char const*, ...)+160)\n\nTest: crasher64 fortify\nChange-Id: Ib74cb8b36341093c268872e26020f35eb2d8ef66\n"
    },
    {
      "commit": "7b89be78f44dc1be48697f2c055fbf3a9534f856",
      "tree": "f7315a1c4366fc37719697eac4485b1bc8a9f877",
      "parents": [
        "332065d57e734b65f56474d136d22d767e36cbcd"
      ],
      "author": {
        "name": "Pirama Arumuga Nainar",
        "email": "pirama@google.com",
        "time": "Fri Feb 12 15:09:49 2021 -0800"
      },
      "committer": {
        "name": "Pirama Arumuga Nainar",
        "email": "pirama@google.com",
        "time": "Thu Feb 18 09:52:59 2021 -0800"
      },
      "message": "Move __libc_int0x80 to an assembly file\n\nBug: http://b/157081822\n\nIf __libc_int0x80 is in a C/C++ file, Clang\u0027s coverage instrumentation\nadds instructions to count the number of times it gets executed [1].\nWith coverage instrumentation, __libc_sysinfo, used on 32-bit x86, is\ninitialized to the wrong value, causing dl.preinit_system_calls to fail.\n\nMoving the function to an assembly file leaves __libc_sysinfo properly\ninitialized.\n\n[1] We could change clang so it doesn\u0027t instrument functions marked\n__attribute__((naked)) as a followup.\n\nTest: `m CLANG_COVERAGE\u003dtrue NATIVE_COVERAGE_PATHS\u003dbionic` and run\nbionic-unit-tests\n\nChange-Id: I73558253512392d345de8d5b66d38bb14b308fdf\n"
    },
    {
      "commit": "2753fc8ee5668b05a94dc3bc029ab9c67bc1af5a",
      "tree": "32fff96bab2a62f23540a1b63334fa8496191ff6",
      "parents": [
        "15ade069b10f7f5291e48c01db2da4852dae04b7"
      ],
      "author": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Wed Jan 06 21:02:19 2021 -0800"
      },
      "committer": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Fri Feb 12 12:30:52 2021 -0800"
      },
      "message": "Teach debuggerd to pass the secondary ring buffer to __scudo_get_error_info().\n\nWith this change we can report memory errors involving secondary\nallocations. Update the existing crasher tests to also test\nUAF/overflow/underflow on allocations with sizes sufficient to trigger\nthe secondary allocator.\n\nBug: 135772972\nChange-Id: Ic8925c1f18621a8f272e26d5630e5d11d6d34d38\n"
    },
    {
      "commit": "ebfba5f8c10979b0eb12c03c1515b445b21f0bb4",
      "tree": "1f2041290cdc40e35267089add56b16df78dcf26",
      "parents": [
        "ee16c724f93ad5d32fd856f771b565c1b48c720b"
      ],
      "author": {
        "name": "Tamas Petz",
        "email": "tamas.petz@arm.com",
        "time": "Fri Jan 22 17:56:27 2021 +0100"
      },
      "committer": {
        "name": "Tamas Petz",
        "email": "tamas.petz@arm.com",
        "time": "Mon Jan 25 11:54:25 2021 +0100"
      },
      "message": "[libc] Change literal value in macro\n\n\"#\" there is incorrect: macro parameter is expected following a hashmark.\n\nTest: build libc with -mbranch-protection\u003dstandard\nChange-Id: Ib8e7ddf260b4cdbd36246cc70f69970f33dee200\n"
    },
    {
      "commit": "e1dc4f62eb0475244f69b04f77eeaba18ea179a8",
      "tree": "cf222070f5e73bd961aa20f8e7350443f12e55d8",
      "parents": [
        "08959d98b1d695ba00b683b6d473f20a7daac0ff"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jan 11 11:51:29 2021 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jan 11 11:51:29 2021 -0800"
      },
      "message": "Fewer copies of ALIGN()/ALIGNBYTES.\n\nNoticed while updating fts.c.\n\nBug: http://b/177003648\nTest: treehugger\nChange-Id: Ic3625c1c3af47c4dafb8ad686bbbddbc82b69b70\n"
    },
    {
      "commit": "b19fc79350aef43afc7b8370aa67eb5211fb6cf5",
      "tree": "2ad22469f04879ca7dc3070b6d2b803ba2273ed4",
      "parents": [
        "423351439e154e2123a391cda336a8ecf6ceefd3",
        "651f1fa509f4d113fef1424ae99bca16aac01b5f"
      ],
      "author": {
        "name": "Adam Barth",
        "email": "abarth@google.com",
        "time": "Sat Jan 09 04:33:15 2021 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Jan 09 04:33:15 2021 +0000"
      },
      "message": "Merge \"Make the atomic load explicit\""
    },
    {
      "commit": "43978a0a342936dbd8bbc28292824524d9e2253a",
      "tree": "a96c750764b7fc3d8baa338b78a439188f649d43",
      "parents": [
        "e09fc24a94c1a196b8930f8f26c6f5f8c1a47d06"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 07 17:15:41 2021 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 07 17:32:39 2021 -0800"
      },
      "message": "Fix things so that \u003cfeatures.h\u003e can be used from assembler again.\n\nBug: https://github.com/android/ndk/issues/1422\nTest: builds\nChange-Id: I1b94ffe688f3d420533074c94f7ffed606ca923f\n"
    },
    {
      "commit": "651f1fa509f4d113fef1424ae99bca16aac01b5f",
      "tree": "b474af881f127fd9156a618e01ee3ed633e72da1",
      "parents": [
        "e09fc24a94c1a196b8930f8f26c6f5f8c1a47d06"
      ],
      "author": {
        "name": "Adam Barth",
        "email": "abarth@google.com",
        "time": "Thu Jan 07 21:29:18 2021 +0000"
      },
      "committer": {
        "name": "Adam Barth",
        "email": "abarth@google.com",
        "time": "Fri Jan 08 01:21:52 2021 +0000"
      },
      "message": "Make the atomic load explicit\n\nTechnically, std::atomic does not have an operator(). Previously, this\ncode was relying on an implicit behavior of our C++ standard library in\norder to compile. When compiling this code against a different C++\nstandard library, I encountered a compiler error on these lines.\n\nThis CL makes the std::atomic load() operation explicit, makes it\nclearer what this code is actually doing and makes it conform better to\nthe C++ standard library spec rather than a particular implmentation.\n\nChange-Id: I7f255dffc0a3d8e07c973c18e9ba4098c4b5843e\n"
    },
    {
      "commit": "8564b8d9e61580bef3bd5018cf63e37c78e40053",
      "tree": "31105008dfcd942690f7143595121c2ab5d2bde8",
      "parents": [
        "dec48bdd9ee090f3b0e3ff22dcac4689a146e8d0"
      ],
      "author": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Tue Dec 15 13:55:32 2020 -0800"
      },
      "committer": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Wed Jan 06 16:08:18 2021 -0800"
      },
      "message": "Use ELF notes to set the desired memory tagging level.\n\nUse a note in executables to specify\n(none|sync|async) heap tagging level. To be extended with (heap x stack x\nglobals) in the future. A missing note disables all tagging.\n\nBug: b/135772972\nTest: bionic-unit-tests (in a future change)\n\nChange-Id: Iab145a922c7abe24cdce17323f9e0c1063cc1321\n"
    },
    {
      "commit": "dec48bdd9ee090f3b0e3ff22dcac4689a146e8d0",
      "tree": "fe6bc57460664d18d55ffb6d07da0e3286ef197b",
      "parents": [
        "5ec23f14b5c2b97490ea5d8e53d819b4c6355785"
      ],
      "author": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Tue Jan 05 15:15:47 2021 -0800"
      },
      "committer": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Tue Jan 05 15:25:39 2021 -0800"
      },
      "message": "(NFC) Symbolic names for Android ELF note types.\n\nBug: b/135772972\nTest: none\n\nChange-Id: Ia972200337d4e9a2adeba196edd06dd98348b6cd\n"
    },
    {
      "commit": "6351127c1387868f0293d2a27247e8be3326fb5f",
      "tree": "ed891f47e4d09bbe465c94155fba49b27cec1376",
      "parents": [
        "9494caa7e857c9e9d323dd58212d833f75b3362c",
        "fd8d687051793f89c2440a992ecaa74645aa6a16"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Oct 02 23:26:27 2020 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 02 23:26:27 2020 +0000"
      },
      "message": "Merge \"x86/x86_64: cleanup signal trampolines\""
    },
    {
      "commit": "6427f39ba9a77ba6d83de5f9b79fedc66edf5522",
      "tree": "c2219da363a7e793b649246467eab91b4f7b901d",
      "parents": [
        "b967e793a5b2e7f1742121797d35326400f41852"
      ],
      "author": {
        "name": "Victor Khimenko",
        "email": "khim@google.com",
        "time": "Mon Sep 28 20:35:12 2020 +0200"
      },
      "committer": {
        "name": "Victor Khimenko",
        "email": "khim@google.com",
        "time": "Mon Sep 28 20:36:39 2020 +0200"
      },
      "message": "Make __clone_for_fork pure native bridge mode abstraction\n\nIn native build of libc it would be inlined and in native bridge mode\nit\u0027s noinline, extern \"C\" and thus could be easily intercepted.\n\nTest: m (without weak symbols in native bridge mode x86+arm build would be broken)\n\nChange-Id: I67759858a5bc2174dce1db9732fdbd89ba7689cc\n"
    },
    {
      "commit": "b967e793a5b2e7f1742121797d35326400f41852",
      "tree": "b4b4cd1ff10d3e9ca3683caf87b383792747b7aa",
      "parents": [
        "73ed0c4525121d5ba7c0326f348e780935e6f7cc"
      ],
      "author": {
        "name": "Victor Khimenko",
        "email": "khim@google.com",
        "time": "Mon Sep 28 20:24:03 2020 +0200"
      },
      "committer": {
        "name": "Victor Khimenko",
        "email": "khim@google.com",
        "time": "Mon Sep 28 20:25:32 2020 +0200"
      },
      "message": "Stop marking symbols weak in native bionic build\n\nNow, when we can detect native bridge mode is sources we can do that.\n\nTest: m (without weak symbols in native bridge mode x86+arm build would be broken)\n\nChange-Id: I360e7df8211d03636bbe716dc14655ee8d765493\n"
    },
    {
      "commit": "fd8d687051793f89c2440a992ecaa74645aa6a16",
      "tree": "ec2f956610801c0ce52e5b9980b6292e2cdabb09",
      "parents": [
        "bcef897b6dd45eef0ef7342be7c8d376e16093a0"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Apr 17 19:46:51 2020 -0700"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Sep 25 15:58:42 2020 -0700"
      },
      "message": "x86/x86_64: cleanup signal trampolines\n\nLet the assembler handle the low-level details of generating .eh_frame,\nand use .cfi_escape to output the DWARF3 DW_CFA_def_cfa_expression and\nDW_CFA_expression instructions.\n\nExplicitly output a nop instruction between the FDE start\n(.cfi_startproc) and the trampoline symbol.\n\nx86_64: remove the rsp instruction, which is redundant with the CFA\nitself.\n\nBug: http://b/169383888\nTest: compare `objdump -Wf` output before and after\nTest: bionic-unit-tests\nChange-Id: Ie2a6d111cb473596be8c9f4fd64534e91d88f2a1\n"
    },
    {
      "commit": "19d66e6f2d4e1790932078b8fcb432f17e35b448",
      "tree": "501897b4062e68de9a9e1d3177348ac17afcdefd",
      "parents": [
        "7e0816a0a48d0dd96b4ffad5abd1506d478cbe67"
      ],
      "author": {
        "name": "Tamas Petz",
        "email": "tamas.petz@arm.com",
        "time": "Tue Dec 03 17:18:43 2019 +0100"
      },
      "committer": {
        "name": "Tamas Petz",
        "email": "tamas.petz@arm.com",
        "time": "Fri Sep 04 11:28:43 2020 +0200"
      },
      "message": "libc: Prepare support for Armv8.3-A PAuth and Armv8.5-A BTI in *.S\n\nThe instruction \"bti c\" is added through ENTRY*() macro,\nusing __bionic_asm_custom_entry(f).\n\nThe .note.gnu.property section is added with the new macro\nNOTE_GNU_PROPERTY(). BTI and PAuth features are automatically\nselected based on the presence of __ARM_FEATURE_* macros.\n\nFurthermore, gensyscalls.py got updated to append the new\nmacro to the generated syscalls-arm64.S.\n\nTest: Tested on FVP with BTI enabled.\n\nChange-Id: I40ffe294b8426421125fffd0a9758567d919a09d\n"
    },
    {
      "commit": "d0ecf0b30d180a52735ee677c48456176260e9cb",
      "tree": "f65c6c4c099257bb2137bf3c739909ea2e93e9b7",
      "parents": [
        "3ec750e035db74f954ee25c5f9f4357490fe2224"
      ],
      "author": {
        "name": "Bowgo Tsai",
        "email": "bowgotsai@google.com",
        "time": "Mon Apr 13 13:07:43 2020 +0800"
      },
      "committer": {
        "name": "Bowgo Tsai",
        "email": "bowgotsai@google.com",
        "time": "Wed Aug 19 12:47:01 2020 +0800"
      },
      "message": "Adding system property tracing\n\nIntroducing a new systrace tag, TRACE_TAG_SYSPROP, for use with\nsystem property.\n\nFor property set, the tracing is added in __system_property_set() instead of\n__system_property_update() / __system_property_add() so we can record\ncontrol properties like ctl.*, sys.powerctl.*, etc.., which won\u0027t be\nupdated via the latter two functions.\n\nBug: 147275573\nTest: atest CtsBionicTestCases\nTest: adb shell perfetto -o /data/misc/perfetto-traces/test_trace -t 10s bionic\nTest: adb shell perfetto -o /data/misc/perfetto-traces/test_trace -t 10s sysprop\nTest: adb shell /data/benchmarktest64/bionic-benchmarks/bionic-benchmarks \\\n      --benchmark_filter\u003dBM_property --bionic_cpu\u003d4, then compares the results\n      of property benchmarks before and after the change, didn\u0027t see\n      significant difference.\n\nChange-Id: Id2b93acb2ce02b308c0e4889f836159151af3b46\nMerged-In: Id2b93acb2ce02b308c0e4889f836159151af3b46\n(cherry picked from commit 26970c34937e2339876d6ba335a56769d6f0d75e)\n"
    },
    {
      "commit": "3936985e75eace1adeeb8d64d4c98e737318d284",
      "tree": "9237d67781fe515508d577a7ba09660204de2a45",
      "parents": [
        "1c502d46b35892dd00728c31b00e9c5fa99fb2eb",
        "03d89a706846e85f63721d452c43fd37be05f2ac"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Aug 13 21:58:58 2020 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 13 21:58:58 2020 +0000"
      },
      "message": "Merge \"Disable HWASAN on ifunc resolvers.\""
    },
    {
      "commit": "03d89a706846e85f63721d452c43fd37be05f2ac",
      "tree": "f0a973fd1d80ede5652a444c52678a89b15cbf5a",
      "parents": [
        "b5f301eaafdc23f05fe5558fb0406a0ab04fc807"
      ],
      "author": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Wed Aug 12 19:21:15 2020 -0700"
      },
      "committer": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Thu Aug 13 13:01:44 2020 -0700"
      },
      "message": "Disable HWASAN on ifunc resolvers.\n\nWe can\u0027t have HWASAN enabled in these resolvers because they\nmay be called before HWASAN is initialized.\n\nWe were previously getting away with HWASAN being enabled on these\nfunctions because ANDROID_EXPERIMENTAL_MTE was not defined, which\nlet the compiler simplify away any HWASAN instrumentation in the\nresolvers. But with this build flag enabled (which is currently the\ncase in FVP, and eventually everywhere once the MTE kernel patches\nland) the resolvers end up containing an HWASAN instrumented load of\nthe _hwcap2 field.\n\nBug: 135772972\nChange-Id: Iac79d02ddc81630c955e107eb7f78389aeb33879\n"
    },
    {
      "commit": "d500751443dbd841445f019428099aae42bac007",
      "tree": "2c55d14b68aad215315d927885a12c427c58b451",
      "parents": [
        "f08e70a0d9a02cbec89be682d665c2c2896c968f"
      ],
      "author": {
        "name": "Vy Nguyen",
        "email": "vyng@google.com",
        "time": "Tue Jul 14 17:37:04 2020 -0400"
      },
      "committer": {
        "name": "Vy Nguyen",
        "email": "vyng@google.com",
        "time": "Tue Aug 11 16:51:43 2020 +0000"
      },
      "message": "Add a thread-properties API\n(Based on proposal at https://sourceware.org/glibc/wiki/ThreadPropertiesAPI)\n\nThis includes API to:\n - locate static and dynamic TLS\n - register thread-exit and  dynamic TLS creation/destruction callbacks\n\nChange-Id: Icd9d29a5b2f47495395645e19d3b2c96826f19c8\n"
    },
    {
      "commit": "68ae6ad12e4f89526638f167c380d0b28b3bdeac",
      "tree": "e18075751c1f0d08d94d7c6be14e1a18b560b285",
      "parents": [
        "c79ea239415963d4a38752d0f3efe50531c8e04f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 21 16:11:30 2020 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 21 16:34:58 2020 -0700"
      },
      "message": "Changes for #inclusivefixit.\n\nTest: treehugger\nChange-Id: I7ff0496c5c2792a41781e74634247f55b0548213\n"
    },
    {
      "commit": "e0a14d4c8a727269aabccfcd53348bd7556500cc",
      "tree": "fc6632dcf764de6be025309f3901fd1d8614e53f",
      "parents": [
        "9f2e171900f08c1b1099a8b5c5842856e5fbb987"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Tue Jun 09 10:42:19 2020 -0700"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Tue Jun 09 16:03:42 2020 -0700"
      },
      "message": "fortify: remove `static`\n\nWhen glancing at libc.so, I noticed we had five copies of\n`__fortify_fatal` sitting around. LLVM can\u0027t inline variadic functions;\nallowing everything to reference the same one seems best to me. This\nsaves us a few hundred bytes. Whoopee.\n\nBug: None\nTest: TreeHugger\nChange-Id: I99188d49cd46d792e3167cb961f13b3c1b65bd61\n"
    },
    {
      "commit": "9f2e171900f08c1b1099a8b5c5842856e5fbb987",
      "tree": "303d3db704ea83bd750d1c0c4b52c39ce8c1a221",
      "parents": [
        "4dd8760cc41787f6fa561af656709ba919541d1d",
        "9253757ff23eba4c55f160f3997a9977f007bd28"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jun 08 17:25:01 2020 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jun 08 17:25:01 2020 +0000"
      },
      "message": "Merge \"Remove dead code.\""
    },
    {
      "commit": "1e381a242996639e8fd8100aceb38d39099d835d",
      "tree": "cc927294c9f33e91d57a9699893ce839efd1d566",
      "parents": [
        "700f753c50971a573bfd84cf7d64483b94fcfe2c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jun 08 08:41:27 2020 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jun 08 08:41:27 2020 -0700"
      },
      "message": "Factor out error reporting in WriteProtected.\n\nPartly to buff our coverage numbers, but also for improved consistency\nin error reporting.\n\nTest: treehugger\nChange-Id: Iffc32833a35f9e9535c1bc3e0f7cb3c4bbba5f7f\n"
    },
    {
      "commit": "9253757ff23eba4c55f160f3997a9977f007bd28",
      "tree": "9d1ce0010bbf5550f2d2655f977eebdfaf8f1d7f",
      "parents": [
        "700f753c50971a573bfd84cf7d64483b94fcfe2c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jun 08 08:33:54 2020 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jun 08 08:33:54 2020 -0700"
      },
      "message": "Remove dead code.\n\npirama made me do this.\n\nTest: treehugger\nChange-Id: I3af9157e246ae4f3d4dc388332dc63b730066f91\n"
    },
    {
      "commit": "e3bc50d44f40c311ad0dcb380f8d0d1f6a7b231b",
      "tree": "9c584c41f7bd2ae33e50be448a72c340648629c0",
      "parents": [
        "10bad3e882f50985b6984fe7cb5ac6f52d233b1a",
        "41291131284471eed7cb6c22cac8b442fd3d1c52"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue May 12 07:04:58 2020 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 12 07:04:58 2020 +0000"
      },
      "message": "Merge changes If42905f3,Id351a993,I8a082fd0\n\n* changes:\n  fdtrack: don\u0027t do anything while vforked.\n  fdsan: don\u0027t do anything when vforked.\n  Track whether a thread is currently vforked.\n"
    },
    {
      "commit": "41291131284471eed7cb6c22cac8b442fd3d1c52",
      "tree": "2c3d0a4a905545d3c15f17089e1ab818b7f2c7a4",
      "parents": [
        "65fb2a7f0304fda4463771ae40f8b83728e74a62"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu May 07 19:43:38 2020 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu May 07 20:18:45 2020 -0700"
      },
      "message": "fdtrack: don\u0027t do anything while vforked.\n\nBug: http://b/153926671\nTest: 32/64-bit bionic-unit-tests on blueline, x86_64 emulator\nChange-Id: If42905f3d6a76ed70a45e5b9edd029ffd7789045\n"
    },
    {
      "commit": "d3060019de533cc1e1ccf444c80b37ebb3490c9f",
      "tree": "0b8b45a1b6e7e4ec4a92bdf5c1bb2c8ed5752dcf",
      "parents": [
        "514faf92c82ca4f88e4a58f771ff5e393ceec317"
      ],
      "author": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Wed Apr 01 19:54:48 2020 -0700"
      },
      "committer": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Tue May 05 13:28:16 2020 -0700"
      },
      "message": "Introduce a new heap tagging level, M_HEAP_TAGGING_LEVEL_SYNC.\n\nThe SYNC tagging level enables stack trace collection for allocations and\ndeallocations, which allows allocation and deallocation stack traces to\nappear in tombstones when encountering a tag check fault in synchronous tag\nchecking mode.\n\nBug: 135772972\nChange-Id: Ibda9f51b29d2c8e2c993fc74425dea7bfa23ab1e\n"
    },
    {
      "commit": "ba1e921294afc35cede5940c15f3adb43eacc3c0",
      "tree": "ed46ae0895da1a7794dc563811a6b4ac56b4b90f",
      "parents": [
        "5057c4201228429f4e92b843c413bfc4acb25324"
      ],
      "author": {
        "name": "Mitch Phillips",
        "email": "mitchp@google.com",
        "time": "Tue Apr 28 11:33:48 2020 -0700"
      },
      "committer": {
        "name": "Mitch Phillips",
        "email": "mitchp@google.com",
        "time": "Tue Apr 28 11:33:48 2020 -0700"
      },
      "message": "[NFC] Align pointer to type.\n\nTypo fix.\n\nBug: N/A\nTest: N/a\nChange-Id: Ia19076da9ea19fc7629e625023e969105d2f8786\n"
    },
    {
      "commit": "3093e71811ee91273e629a4702abe823329ef3c6",
      "tree": "cc7b7ea9b739f219e6c5a63065b9e15058078819",
      "parents": [
        "c33ad202589c37be588206122743a9a755214b53"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 23 15:53:17 2020 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 23 15:57:58 2020 -0700"
      },
      "message": "Block all signals in ScopedSignalBlocker.\n\nWhen a thread calls pthread_exit(3), ScopedSignalBlocker blocks all\nuser-visible signals, but leaves internal-use signals 33/34/36/36/37.\nSignal 33 is used to unwind a thread for a backtrace, which can cause us\nto access the stack after it\u0027s been unmapped. (Avoiding this was the\nreason why we have the ScopedSignalBlocker in pthread_exit(3)!)\n\nFix this (and other potential issues) by changing ScopedSignalBlocker to\ncall __rt_sigprocmask(2) directly, so we don\u0027t mask out the internal-use\nsignals.\n\nBug: https://issuetracker.google.com/153624226\nTest: not trivially reproducible\nChange-Id: I9b125ed41ddee4c5d33b45920f1d142e52db47cb\n"
    },
    {
      "commit": "4c9293f29ae054c10a032e97a5cee54911d4e3db",
      "tree": "f7d77f732630321eba9b7beef55f2565f8a8dc44",
      "parents": [
        "679d8e19cf5c0f073f72f2cd906d2981c3fa8e69"
      ],
      "author": {
        "name": "Mitch Phillips",
        "email": "mitchp@google.com",
        "time": "Fri Feb 14 14:50:35 2020 -0800"
      },
      "committer": {
        "name": "Mitch Phillips",
        "email": "mitchp@google.com",
        "time": "Wed Feb 19 09:01:27 2020 -0800"
      },
      "message": "[GWP-ASan] Export GWP-ASan regions to libdebuggerd.\n\nExports GWP-ASan allocator information callbacks to libdebuggerd so that\ntombstoned can get information from the GWP-ASan allocator in the case\nof a crash.\n\nBug: 135634846\nTest: atest bionic-unit-tests\n\nChange-Id: Ie16426af55602fb2a76c4e69217773354c365843\n"
    },
    {
      "commit": "5ac438e5daf497526e7321b456ba87a758a95ea2",
      "tree": "b285ddd203793a6d11744afa37da0cd5f5bb017c",
      "parents": [
        "7482e240cf60fff52ec08cf9340edb231aae7079"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 13 15:56:31 2020 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 13 18:00:16 2020 -0800"
      },
      "message": "Clean up mips references in the headers.\n\nTest: treehugger\nChange-Id: I1997af980b9e46c7c530f9e6cb1aa407b2d63d76\n"
    },
    {
      "commit": "bf03c01b38898a20fdd485173bca483880400828",
      "tree": "b920801ecdab88a4782fc07e1cf43dce626e3b38",
      "parents": [
        "fd2eb42006fd1b51beb98e5c4e3e3ae2e676173e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 05 11:38:29 2020 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 05 11:39:35 2020 -0800"
      },
      "message": "Remove bionic\u0027s internal ctype-like inlines.\n\nBug: http://b/144165498\nTest: treehugger\nChange-Id: Ifcf352525abc74850053a1a019f90c72e488b71c\n"
    },
    {
      "commit": "759625072270f5b6940dae40c8039867a08eff12",
      "tree": "e0a1227301a6b67509badba95a91998d5c04e18d",
      "parents": [
        "97271920bf831610819ddfa44e4e2cc0815afd6e"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Jan 28 13:24:33 2020 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jan 30 13:55:10 2020 -0800"
      },
      "message": "Move fdtrack APIs to LLNDK.\n\nTest: logcat -c; fdtrack_test; logcat -d\nChange-Id: Ib6f75a7c8bbc4d6efa0708dcbbfe4ad3c0641022\n"
    },
    {
      "commit": "97271920bf831610819ddfa44e4e2cc0815afd6e",
      "tree": "0ba61ad31242b38becb89cab8702df68328a1e71",
      "parents": [
        "7ef4c774da59bbf942b5652b1f68e46cac2e5099"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Nov 06 13:15:00 2019 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jan 30 13:55:10 2020 -0800"
      },
      "message": "Add a tool to track down fd leaks.\n\nAdd a hook that\u0027s called upon file descriptor creation to libc, and a\nlibrary that uses it to capture backtraces for file descriptor creation,\nto make it easier to hunt down file descriptor leaks.\n\nCurrently, this doesn\u0027t capture all of the ways of creating a file\ndescriptor, but completeness isn\u0027t required for this to be useful as\nlong as leaked file descriptors are created with a function that is\ntracked. The primary unhandled case is binder, which receives file\ndescriptors as a payload in a not-trivially-parsable byte blob, but\nthere\u0027s a chance that the leak we\u0027re currently trying to track down\nisn\u0027t of a file descriptor received over binder, so leave that for\nlater.\n\nBug: http://b/140703823\nTest: manual\nChange-Id: I308a14c2e234cdba4207157b634ab6b8bc539dd9\n(cherry picked from commit b7eccd4b1577c101132e52d4a5313d5322dcae2d)\n"
    },
    {
      "commit": "3b21ada5f1bd98b337143ee5d5baba7373bfdbb1",
      "tree": "7e5bf3c1ae9008eccc61f7f6eefef9b0039af1b5",
      "parents": [
        "73e9f242ed07631798433df4e35f5f73443cb9f9"
      ],
      "author": {
        "name": "Mitch Phillips",
        "email": "mitchp@google.com",
        "time": "Tue Jan 07 15:47:47 2020 -0800"
      },
      "committer": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Thu Jan 23 10:37:24 2020 -0800"
      },
      "message": "Add tagged pointers to bionic.\n\nThis patch introduces tagged pointers to bionic. We add a static tag to\nall pointers on arm64 compatible platforms (needs requisite\ntop-byte-ignore hardware feature and relevant kernel patches).\n\nWe dynamically detect TBI-compatible devices (a device with the TBI feature and\nkernel support) at process start time, and insert an implementation-dependent\ntag into the top byte of the pointer for all heap allocations. We then check\nthat the tag has not been truncated when deallocating the memory.\n\nIf an application incorrectly writes to the top byte of the pointer, we\nterminate the process at time of detection. This will allow MTE-incompatible\napplications to be caught early.\n\nBug: 135754954\nBug: 147147490\n\nTest: cd bionic \u0026\u0026 atest .\nChange-Id: Ie424325ba1e3c4443040ac265aeaa28d9e405d28\n"
    },
    {
      "commit": "5c9efd1d66b06035f1e857235ad81f8d51d124ae",
      "tree": "9bb242303fd7c25917f59b2f6cf536b2f4f113e1",
      "parents": [
        "a547762ae30c0f9e85c464a0ed21f21e0999eb55",
        "ce4c42e09fb9039df7c6a5b7306119279a694897"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 21 13:57:45 2020 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jan 21 13:57:45 2020 +0000"
      },
      "message": "Merge \"Revert \"Add tagged pointers to bionic.\"\""
    },
    {
      "commit": "ce4c42e09fb9039df7c6a5b7306119279a694897",
      "tree": "13e38338ea7bc859b295b923be6a7acd73edbebc",
      "parents": [
        "43d5f9d4dd83d15a859d9be1359c4a4a47381fea"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 21 13:56:21 2020 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 21 13:57:26 2020 +0000"
      },
      "message": "Revert \"Add tagged pointers to bionic.\"\n\nThis reverts commit 43d5f9d4dd83d15a859d9be1359c4a4a47381fea.\n\nBug: 135754954\nBug: 147147490\n\nExempt-From-Owner-Approval: clean revert\n\nReason for revert: Breaks ART gtest, see:\nhttps://ci.chromium.org/p/art/builders/ci/angler-armv8-non-gen-cc/561\n\nThe crash happens on mprotect of a page, the test crashes with ENOMEM.\n\nChange-Id: I52eea1abbfaf8d8e2226f92d30aa55aba3810528\n"
    },
    {
      "commit": "3460b6c2658d05f0faed8ae3e941403c6e1bdf1a",
      "tree": "755db21d2d12727fc7d6df3c7d01eb6dc32cc027",
      "parents": [
        "0bf9aed92ef5ca25344016a0ec847664f4db6bfb",
        "43d5f9d4dd83d15a859d9be1359c4a4a47381fea"
      ],
      "author": {
        "name": "Mitch Phillips",
        "email": "mitchp@google.com",
        "time": "Mon Jan 20 23:31:27 2020 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jan 20 23:31:27 2020 +0000"
      },
      "message": "Merge \"Add tagged pointers to bionic.\""
    },
    {
      "commit": "43d5f9d4dd83d15a859d9be1359c4a4a47381fea",
      "tree": "95339c5cb5d055b8fd2b216b46e6264180c4fc36",
      "parents": [
        "d2b8149ddad8b21ce535fb02ff752c85c7aa9d43"
      ],
      "author": {
        "name": "Mitch Phillips",
        "email": "mitchp@google.com",
        "time": "Tue Jan 07 15:47:47 2020 -0800"
      },
      "committer": {
        "name": "Mitch Phillips",
        "email": "mitchp@google.com",
        "time": "Wed Jan 15 15:03:00 2020 -0800"
      },
      "message": "Add tagged pointers to bionic.\n\nThis patch introduces tagged pointers to bionic. We add a static tag to\nall pointers on arm64 compatible platforms (needs requisite\ntop-byte-ignore hardware feature and relevant kernel patches).\n\nWe dynamically detect TBI-compatible devices (a device with the TBI feature and\nkernel support) at process start time, and insert an implementation-dependent\ntag into the top byte of the pointer for all heap allocations. We then check\nthat the tag has not been truncated when deallocating the memory.\n\nIf an application incorrectly writes to the top byte of the pointer, we\nterminate the process at time of detection. This will allow MTE-incompatible\napplications to be caught early.\n\nBug: 135754954\nBug: 147147490\n\nTest: cd bionic \u0026\u0026 atest .\nChange-Id: I6e5b809fc81f55dd517f845eaf20f3c0ebd4d86e\n"
    },
    {
      "commit": "175c8867b05ec14a8da1fd528c2bf17c4e67c280",
      "tree": "ac5536a5465cb98d1810c204dd6762544abdbc5a",
      "parents": [
        "a04764bd286cf86f28d65487e1b6d6d36c9671e8"
      ],
      "author": {
        "name": "Ryan Savitski",
        "email": "rsavitski@google.com",
        "time": "Thu Jan 02 19:54:57 2020 +0000"
      },
      "committer": {
        "name": "Ryan Savitski",
        "email": "rsavitski@google.com",
        "time": "Wed Jan 15 22:55:03 2020 +0000"
      },
      "message": "allow for heapprofd\u0027s signal to be multiplexed\n\nThis patch refactors heapprofd_malloc to make it easier to reuse the\nreserved signal for multiple purposes. We define a new generic signal\nhandler for profilers, which dispatches to more specific logic based on\nthe signal\u0027s payload (si_value).\n\nThe profiler signal handler is installed during libc preinit, after\nmalloc initialization (so races against synchronous heapprofd\ninitialization need not be considered). In terms of code organization, I\ncopied the existing approach with a loosely referenced function in\nbionic_globals.h. Do tell if you\u0027d rather a different approach here.\n\nThe profileability of a process is quite tied to the malloc\nfiles/interfaces in bionic - in particular, it\u0027s set through\nandroid_mallopt. I do not change that, but instead introduce a new\nandroid_mallopt option to be able to query profileability of the\nprocess (which is now used by the new profiler signal handler). As part\nof that, gZygoteChildProfileable is moved from heapprofd_malloc to\ncommon (alongside gZygoteChild).\n\nI\u0027ve removed the masking and reraising of the heapprofd signal when\nracing against malloc_limit init. We\u0027re ok with taking a simpler\napproach and dropping the heapprofd signal in such an unlikely race.\n\nNote: this requires a corresponding change in heapprofd to use sigqueue()\ninstead of kill(), as the latter leaves the si_value uninitialized(?) on\nthe receiving side.\n\nBug: 144281346\nChange-Id: I93bb2e82cff5870e5ca499cf86439860aca9dfa5\n"
    },
    {
      "commit": "5074e7d28f128d8150dd36366b9e0867cfb80a27",
      "tree": "20d1080bef67ac6c1fc5e2d92eb9e4b2b532897c",
      "parents": [
        "4956c372cf320328952665629b2626e7cbc84c54"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Dec 13 13:55:53 2019 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jan 02 14:14:15 2020 -0800"
      },
      "message": "Move sigrtmin.h into platform headers.\n\nTest: mma\nChange-Id: Ibc97ef96fe9e32b948c245b06039b95fe4342f39\n"
    },
    {
      "commit": "4956c372cf320328952665629b2626e7cbc84c54",
      "tree": "7a02304c6c2eadc93b1b7a357fb31a143b661a89",
      "parents": [
        "e592dacfa254f59bb097c98d118d0c860b181da1"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Dec 19 16:35:51 2019 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jan 02 14:09:50 2020 -0800"
      },
      "message": "Move bionic_macros.h from private to platform.\n\nTest: treehugger\nChange-Id: Ie473914f4c8924c7240b3ac22093a9daf42fc948\n"
    },
    {
      "commit": "cdb52fc14747645d42d07e5f680da6058fbfd01c",
      "tree": "9e9e07157d206a7d04e2beddf04f982791f66f61",
      "parents": [
        "cad05d2e212f2e38974732826a86adc199504a00"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 12 15:26:14 2019 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 12 15:26:14 2019 -0800"
      },
      "message": "Make private/bionic_page.h available as platform/bionic/page.h.\n\nBug: http://b/145825270\nTest: treehugger\nChange-Id: I52958f370c0df2c02cb8250e2cf0705d4e93e908\n"
    },
    {
      "commit": "6f517cd7a1142191fde2201b6c529758e7ff6895",
      "tree": "49105414620136e4a9bf2c613a3f8c29a5c00062",
      "parents": [
        "ca1834de7a8180ee8db0a629fa950387c9da49b1"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Nov 08 11:28:38 2019 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Nov 08 11:49:14 2019 -0800"
      },
      "message": "Rename iterate to malloc_iterate internally.\n\nI have no idea why I used the iterate name internally which is\ncompletely unlike every other function name. Change this to match\neveryone else so that it\u0027s now malloc_iterate everywhere.\n\nThis is probably the last chance to change this before mainline\nmodules begin, so make everything consistent.\n\nTest: Compiles, unit tests passes.\nChange-Id: I56d293377fa0fe1a3dc3dd85d6432f877cc2003c\n"
    },
    {
      "commit": "7a3a5d8cd7e687fec74f091be3f8a27ab1b7f0e7",
      "tree": "98c440507ba2faffff665c22be42dd196e5e10c5",
      "parents": [
        "b18158c3c91d8935d380215151a8d91810bae7c9",
        "ff88fb0d3adbc67a4f94f5ef7e2b5bcc7a96c8f3"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Nov 06 23:31:33 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 06 23:31:33 2019 +0000"
      },
      "message": "Merge \"Fix allocations escaping malloc debug.\""
    },
    {
      "commit": "ff88fb0d3adbc67a4f94f5ef7e2b5bcc7a96c8f3",
      "tree": "1a78e188d9e51383579f697cb5532846b841cd69",
      "parents": [
        "1994f28be2c0faf2b70b1ca8fff7d8d2fa68d922"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Nov 04 18:40:00 2019 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Nov 06 10:42:42 2019 -0800"
      },
      "message": "Fix allocations escaping malloc debug.\n\nWhen using a FILE object for some malloc debug functions, calling\nfprintf will trigger an allocation to be put in the object. The problem\nis that these allocations were not allocated by the malloc debug\nwrapper and they get freed during the fclose as if they are malloc\ndebug allocation. In most cases, the code will detect the bad pointer\nand leak the memory, but it might also cause a crash.\n\nThe fix is to avoid using fprintf so that no allocations are made\nin the object that survive and need to be freed in the fclose call.\n\nChange the MallocXmlElem.h to use a file decsriptor not a FILE object.\n\nAdd new unit and system tests to detect this case.\n\nBug: 143742907\n\nTest: Ran unit and system tests.\nTest: Ran bionic unit tests.\nChange-Id: I524392de822a29483aa5be8f14c680e70033eba2\n"
    },
    {
      "commit": "89b09198b90c6ae98c378c9a45d23674672b6019",
      "tree": "2a7e44d156dac92caacf04f9c6c9c3540638a03f",
      "parents": [
        "590bdbe6e938e1bc53b09674b7eedde440863f11"
      ],
      "author": {
        "name": "Johan Harvyl",
        "email": "johan.harvyl@sony.com",
        "time": "Tue Nov 05 09:45:20 2019 +0100"
      },
      "committer": {
        "name": "John Eckerdal",
        "email": "john.eckerdal@sony.com",
        "time": "Tue Nov 05 12:20:23 2019 +0100"
      },
      "message": "Close descriptor in ScopeFd destructor\n\nThe underlying descriptor is supposed to be closed when the ScopedFd\ngoes out of scope but due to a typo in reset() that never happens.\n\nThis change was inspired by an earlier implementation of ScopedFd in:\n04dc91ae7 Load library using file handle.\n\nIssue: 143918215\nTest: Manual (verify fd usage on device)\nChange-Id: I5664fa82d3e732113732e34a7ae6df3ca79d3cee\n"
    },
    {
      "commit": "6cb70ad776c8e37bd812a449fc1bac64a22bdedb",
      "tree": "462ab239260ff4ce9726646b63804c7b14456ff9",
      "parents": [
        "dd2ed970793f3119f43368e72784155227b7f7f7"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 31 15:37:32 2019 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 31 21:16:18 2019 -0700"
      },
      "message": "Add the ScopedFd that we\u0027ve never quite gotten around to.\n\nThis is actually for the new change I\u0027m working on, but let\u0027s retrofit\nit first to separate any bugs in these changes from those in the new\nchange...\n\nTest: treehugger\nChange-Id: I890aeb61f9792810a77ad0da3f9674c9cc5db7bb\n"
    },
    {
      "commit": "900d07d6a1f3e1eca8cdbb3b1db1ceeec0acc9e2",
      "tree": "3453e11061f4a1a3f0860deb9561e718503abd1f",
      "parents": [
        "6f9a97f864898bb9538898b212bf0a9547b2f943"
      ],
      "author": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Mon Oct 28 13:11:00 2019 -0700"
      },
      "committer": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Tue Oct 29 16:18:31 2019 -0700"
      },
      "message": "Add arm64 string.h function implementations for use with hardware supporting MTE.\n\nAs it turns out, our \"generic\" arm64 implementations of certain string.h\nfunctions are not actually generic, since they will eagerly read memory\npossibly outside of the bounds of an MTE granule, which may lead to a segfault\non MTE-enabled hardware. Therefore, move the implementations into a \"default\"\ndirectory and use ifuncs to select between them and a new set of \"mte\"\nimplementations, conditional on whether the hardware and kernel support MTE.\n\nThe MTE implementations are currently naive implementations written in C\nbut will later be replaced with a set of optimized assembly implementations.\n\nBug: 135772972\nChange-Id: Ife37c4e0e6fd60ff20a34594cc09c541af4d1dd7\n"
    },
    {
      "commit": "e949195f6489653ee3771535951ed06973246c3e",
      "tree": "204c6f7112e6524c0380cf683f2954753471fd26",
      "parents": [
        "9615e0ddacafcc728ff432fce61eaa0a1049880e"
      ],
      "author": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Mon Oct 28 10:57:26 2019 -0700"
      },
      "committer": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Mon Oct 28 20:20:29 2019 -0700"
      },
      "message": "Adopt GNU calling convention for ifunc resolvers.\n\nIn order for an ifunc resolver to detect the presence of certain CPU features,\naccess to getauxval(AT_HWCAP) or getauxval(AT_HWCAP2) may be required. In order\nfor getauxval() to work, it needs to access the pointer to the auxiliary vector\nstored by the linker in the libc shared globals data structure. Accessing the\nshared globals requires libc to call the __libc_shared_globals() function\nexported by the linker. However, in order to call this function, libc must\nbe fully relocated, which is not guaranteed to be the case at the point when\nifunc resolvers are called.\n\nglibc solves this problem by passing the values of getauxval(AT_HWCAP)\n(and getauxval(AT_HWCAP2) on aarch64) as arguments to the ifunc resolver.\nSince this seems to be not only the most straightforward way to solve the\nproblem but also improves our compatibility with glibc, we adopt their\ncalling convention.\n\nThis change is ABI compatible with old resolvers because the arguments are\npassed in registers, so the old resolvers will simply ignore the new arguments.\n\nBug: 135772972\nChange-Id: Ie65bd6e7067f0c878df3d348c815fda61dc12de2\n"
    },
    {
      "commit": "c5d3a4348a49637d11c73143d71cf9bcc2bb1871",
      "tree": "51db1f05f6503e7bf8dde11d42e189ff47eb574a",
      "parents": [
        "57a64a717296e9f029bfcc3bba1d0b4c23d10cff"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Sep 25 17:50:36 2019 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Sep 27 12:14:24 2019 -0700"
      },
      "message": "Make tls related header files platform accessible.\n\nThere are places in frameworks and art code that directly included\nprivate bionic header files. Move these files to the new platform\ninclude files.\n\nThis change also moves the __get_tls.h header file to tls.h and includes\nthe tls defines header so that there is a single header that platform\ncode can use to get __get_tls and the defines.\n\nAlso, simplify the visibility rules for platform includes.\n\nBug: 141560639\n\nTest: Builds and bionic unit tests pass.\nChange-Id: I9e5e9c33fe8a85260f69823468bc9d340ab7a1f9\nMerged-In: I9e5e9c33fe8a85260f69823468bc9d340ab7a1f9\n(cherry picked from commit 44631c919aee96043f119aff6d39eb1584710d3c)\n"
    },
    {
      "commit": "fa43309a59bf26260afea89d6f02665165e47ee9",
      "tree": "65839834a46aa5dd34a66e07d58c655ccfe5f4cb",
      "parents": [
        "252eccfc846cc139b72b9fb0444bb85cb59a3047",
        "a4c7876c014d3f238d8431f7bec76580224a2b56"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 18 18:01:54 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 18 18:01:54 2019 +0000"
      },
      "message": "Merge \"ifuncs: start sharing.\""
    },
    {
      "commit": "a4c7876c014d3f238d8431f7bec76580224a2b56",
      "tree": "e04b183f115f89dbe53891f79e12df5c8f6619b4",
      "parents": [
        "1ffee0cfc1e3a7fddf4cbe633694be91e72265a1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Sep 17 09:53:14 2019 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Sep 17 12:44:41 2019 -0700"
      },
      "message": "ifuncs: start sharing.\n\nWe\u0027re going to have to add ifuncs to libm, and there will be some SVE\nones for arm64 soon too, so let\u0027s start sharing the absolute minimum...\n\nTest: builds\nChange-Id: Idbb9dd9477291ed3c15dc3902f65e593b766dfb9\n"
    },
    {
      "commit": "2b0638ef29bb305f8a37c16c706fb0ee80a994c0",
      "tree": "bea668f7605903876618505b7aec795da94ea4ae",
      "parents": [
        "1ffee0cfc1e3a7fddf4cbe633694be91e72265a1"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Sep 11 19:05:29 2019 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Sep 16 12:27:33 2019 -0700"
      },
      "message": "Make bionic_malloc.h a platform header.\n\nInstead of having platform directories directly include the\nprivate header, create a platform header directory and export it.\n\nBug: 130763340\n\nTest: Builds.\nChange-Id: Ie0f092b3fe077a3de8b90266c0b28bfbc20d0dfa\nMerged-In: Ie0f092b3fe077a3de8b90266c0b28bfbc20d0dfa\n(cherry picked from commit 8f582ef2f8a77d953d0e9f33387f592d20f852e2)\n"
    },
    {
      "commit": "9db3486a12eb62676c733d233e918d477ea3b5cc",
      "tree": "f0fddf3df218f007cc602ef195a60a74b7d72462",
      "parents": [
        "eab2046e35222c99d365ee09dc8388e740da2ad7"
      ],
      "author": {
        "name": "Ryan Savitski",
        "email": "rsavitski@google.com",
        "time": "Tue Aug 27 21:54:18 2019 +0100"
      },
      "committer": {
        "name": "Ryan Savitski",
        "email": "rsavitski@google.com",
        "time": "Tue Aug 27 22:50:21 2019 +0100"
      },
      "message": "Add arm32 case to BIONIC_STOP_UNWIND to correctly stop unwinders\n\nThe arm32 case was omitted when the macro was originally added due to\nclang issues (b/15469122#comment5).\n\nTesting at ToT master, \".cfi_undefined r14\" appears to compile \u0026 work as\nexpected. This is the same directive as used by the linker\u0027s begin.S.\n\nTest: ran a 32 bit binary on crosshatch-userdebug, verified that\n\"debuggerd -b\" (which uses libunwindstack) stops at __libc_init as in\nthe arm64 case (before it would unwind past _start_main, with an\nerroneous frame at the bottom).\n\nTest: ran unwind_reg_info tool on /system/lib/libc.so with an address\nwithin __libc_init, confirmed that the \"debug_frame\" section includes\n\"r14 \u003d undefine\" (arm exidx still contains \"r14 \u003d [cfa - 4]\", but that\nlooked correct to cferris@).\n\nBug: 140008396\nChange-Id: I6eb0bc6cf516fddee2df40492350678a0547fee3\n"
    },
    {
      "commit": "191ecdc49ba18fc07d62d419fd51cc7dee4190f8",
      "tree": "bfd1dc23f8fed1ddeee6b62a81623b32159b6799",
      "parents": [
        "639ad55176c78bfd70c3786a92a05dd3d2299953"
      ],
      "author": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Wed Aug 07 19:06:00 2019 -0700"
      },
      "committer": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Thu Aug 15 09:21:34 2019 -0700"
      },
      "message": "Fix a few bionic test failures caused by hwasan global instrumentation.\n\nThe call to the load hook needs to be moved before the call to link_image()\nbecause the latter calls ifunc resolvers which might access global\nvariables. This fixes a bunch of ifunc tests.\n\nThe dlfcn.segment_gap test is currently failing. One problem is that the name\nof the .bss.end_of_gap section changes as a result of global instrumentation.\nAdd some wildcards in so that we match both names. The other problem seems\nto be the same as b/139089152.\n\nIt turns out that we need to untag pointers in a few more places. Since we have\nquite a few of these now it seems worth creating a function for it.\n\nTest: bionic-unit-tests\nChange-Id: I44e2b0904faacdda7cc0c5e844ffc09de01dea2d\n"
    },
    {
      "commit": "6533208aaa6ef5d6169dfca6259870bfe3677258",
      "tree": "9a4dfd424f42687ec3475542b2cc953eec72ec0c",
      "parents": [
        "a5c9c7c56542b6471575148b8a3654078b180940"
      ],
      "author": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Mon Aug 05 16:16:14 2019 -0700"
      },
      "committer": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Mon Aug 05 16:51:01 2019 -0700"
      },
      "message": "linker: Add library load and unload hooks for HWASan.\n\nThese hooks notify the HWASan runtime library whenever a library is loaded\nor unloaded so that it can update its shadow memory.\n\nBug: 138159093\nTest: walleye_hwasan-userdebug boots with+without https://reviews.llvm.org/D65770\nChange-Id: I6caf2a6540ed2c0d94db444e806a3c7ba504cabb\n"
    },
    {
      "commit": "6883b0807b46074f6fe231df9f2d5d597f83d2bb",
      "tree": "cfcbd3b6164bc44efcdbf75b0fa38081f544341e",
      "parents": [
        "6b2532e19a76e9b809d2e52e677b1f2004159443"
      ],
      "author": {
        "name": "Florian Mayer",
        "email": "fmayer@google.com",
        "time": "Mon Jul 22 13:54:32 2019 +0100"
      },
      "committer": {
        "name": "Florian Mayer",
        "email": "fmayer@google.com",
        "time": "Tue Jul 23 16:38:00 2019 +0100"
      },
      "message": "Reserve signal for java heap dumps.\n\nWe will put instrumentation in ART to write out Java heap memory\ninformation on receipt of this signal.\n\nBug: 136210868\nTest: Flash blueline-userdebug and boot\n\nChange-Id: I63173a4051c46b8569faaf3064e1db1dbd0ea3fe\n"
    },
    {
      "commit": "45f0a3b64249ad296b09e7ba123fb921fc8e62da",
      "tree": "e51366660b603fda4f6ccc0b041ee27b0c8da649",
      "parents": [
        "7e958d0ce0b4acb3c34b84a13b14bfbe6b11d410"
      ],
      "author": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Tue Jul 16 11:18:07 2019 -0700"
      },
      "committer": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Tue Jul 16 13:38:38 2019 -0700"
      },
      "message": "Clear pointer tags as required for HWASAN for globals.\n\nA future version of HWASAN will set pointer tags when taking the address of\na global. This means that we need to untag pointers in a couple of cases\nwhere potential global pointers are passed to an interface that expects\nuntagged pointers:\n\n- The WriteProtected class, whose only instances are globals, passes its\n  own address to mprotect. However, our device kernels do not currently\n  untag pointers passed to mprotect (the proposed upstream kernel patches\n  do, however, untag these pointers), so once HWASAN starts tagging global\n  pointers, this will start failing.\n- The shadow_load function loads from a shadow that corresponds to the\n  address space bounds of loaded binaries. Since these address space\n  bounds are untagged, the pointer needs to be untagged to match.\n\nTest: boots\nChange-Id: I3f11ce6eb7261752e5ff6d039d04dd45516b236f\n"
    },
    {
      "commit": "5c6a3f9fbc7fda25cd0cd647cb891a5cfa2dc513",
      "tree": "d97844a5cecb7dce7534dceee796bbc1259f4b21",
      "parents": [
        "9894ec459637c5c805b8e03d0a0a7f3ff5d6c1d3"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 13 14:24:45 2019 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 20 08:32:24 2019 -0700"
      },
      "message": "libnetd_client: support hooking sendto/sendmsg/sendmmsg too.\n\nSamsung has asked for this for KNOX.\n\nTest: treehugger\nChange-Id: Iffaace9f8cb265ce8c911472989c9829cbf91a42\n"
    },
    {
      "commit": "31fe3c637e62ed69aee65eaf5a072f42f4403e3e",
      "tree": "4a95682f61ffe006b062bf62ffa145218d3de763",
      "parents": [
        "640bd0bf3ae76013a52a34e51cd301affe528334",
        "30659fd243d3996e0bb70be92469c65117cd465d"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Apr 23 17:45:01 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 23 17:45:01 2019 +0000"
      },
      "message": "Merge \"Move all leak info functions to android_mallopt.\""
    },
    {
      "commit": "f32e1a1f50af8756286f9f65352997c3e5719bdc",
      "tree": "52ea9e08f7ac95571ca2bd32ec91b9d1aa9a10d3",
      "parents": [
        "b7155fd4e4dbabafd30e1dd82cd81e39ecbe6e77",
        "aca110173fc26eb107a4d9055d8a65e1fa3b46c7"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Mon Apr 22 21:09:44 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 22 21:09:44 2019 +0000"
      },
      "message": "Merge \"Comment about lock destruction and unlocking\""
    },
    {
      "commit": "aca110173fc26eb107a4d9055d8a65e1fa3b46c7",
      "tree": "348af3f8a0430695b03f1af73c07a73daff82d42",
      "parents": [
        "9586c0f4f421e63342074eeae9806cf11d622703"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Apr 18 17:50:22 2019 -0700"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Apr 19 17:16:25 2019 -0700"
      },
      "message": "Comment about lock destruction and unlocking\n\nAdd a couple of comments explaining that a mutex can be freed during\nthe unlock call, immediately after the unlock\u0027s atomic exchange call but\nbefore its futex wakeup call.\n\nBug: http://b/129744706\nTest: bionic unit tests\nChange-Id: I2d290ebde880f46866098d022720896039e7022e\n"
    },
    {
      "commit": "30659fd243d3996e0bb70be92469c65117cd465d",
      "tree": "c8465a06413c0a276f69c7593feeb0a9a66d9cbf",
      "parents": [
        "75f7b06454f9a0f0ebc232605e8faec4ac0db4ee"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 15 19:01:08 2019 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Apr 19 11:27:02 2019 -0700"
      },
      "message": "Move all leak info functions to android_mallopt.\n\nBug: 130028357\n\nTest: malloc_hooks unit tests.\nTest: Enable backtrace for mediaserver, run dumpsys media.player -m\nTest: Enable backtrace for calendar, run am dumpheap -n \u003cPID\u003e \u003cFILE\u003e\nChange-Id: I6774e28ccd9b3f2310127a5b39ccd15fe696a787\nMerged-In: I6774e28ccd9b3f2310127a5b39ccd15fe696a787\n(cherry picked from commit 3aadc5e80a5e2cf6b6760ed90d528709223bb449)\n"
    },
    {
      "commit": "8189e77bbb47dbaa1a09d565c62c2fed03e358c3",
      "tree": "2c8fc5d8fd1ec1ab881d35519670104ad86283e3",
      "parents": [
        "b9a7c651f178323e27752406f89d741cfb143e61"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Apr 09 16:37:23 2019 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Apr 16 11:22:06 2019 -0700"
      },
      "message": "Remove gMallocLeakZygoteChild.\n\nRemove this global variable and change the setting of it to non-zero\nto a call to android_mallopt.\n\nIn addition, change the initialize function to use pass a bool* instead of\nint*.\n\nBug: 130028357\n\nTest: Ran malloc_debug/malloc_hooks/perfetto tests.\nChange-Id: I20d382bdeaaf38aac6b9dcabea5b3dfab3c945f6\nMerged-In: I20d382bdeaaf38aac6b9dcabea5b3dfab3c945f6\n(cherry picked from commit 5225b342f0810c027df3d09fbbcef4d324b19b93)\n"
    },
    {
      "commit": "5493ddcaa2ebe5dacc849c2d9f73e906796e297b",
      "tree": "84f6f846b3adba4bd9121af03824d9f1e9baa96f",
      "parents": [
        "02accd0ff4396f6fd6e74b662032e0e8fabf0d6c",
        "8c1a14d4f358a8135e0c0632da6d40c37192c0c2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 04 19:47:52 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 04 19:47:52 2019 +0000"
      },
      "message": "Merge \"Workaround potential access to unmapped stack\""
    },
    {
      "commit": "8c1a14d4f358a8135e0c0632da6d40c37192c0c2",
      "tree": "af9be5a543c0192df1cccedaac674d06bc809f5e",
      "parents": [
        "b656d4a1da35eac817950f906ce1c26259c05e82"
      ],
      "author": {
        "name": "Adrian-CJ Hung",
        "email": "adrian-cj.hung@mediatek.com",
        "time": "Wed Apr 03 10:39:15 2019 +0800"
      },
      "committer": {
        "name": "JeiFeng Lee",
        "email": "linger.lee@mediatek.com",
        "time": "Wed Apr 03 11:50:33 2019 +0800"
      },
      "message": "Workaround potential access to unmapped stack\n\nIssue:\nProcess is crashed near the end (startup_handshake_lock.unlock()) in\npthread_create().\n\nThe newly created child thread passes this handshake_lock unexpectedly\n\u003d\u003e its stack is unmapped \u0026 its associated pthread_internal_t data\nstructure can’t be accessed.\n\nAnalysis:\nThe created child thread should be blocked by startup_handshake_lock.lock()\nand enter __futex_wait_ex()\n\nBut if the parent thread is in the middle of startup_handshake_lock.unlock():\n\n  void unlock() {\n    if (atomic_exchange_explicit(\u0026state, Unlocked, memory_order_seq_cst) \u003d\u003d LockedWithWaiter) {  // \u003d\u003e the state is modified to Unlocked\n\n    // (a) if the child thread is back to running and pass the while() check in Lock::lock()\n    // (b) the child thread executes its start_routine and then pthread_exit\n    // (c) the stack of the child thread (where its pthread_internal_t (so the startup_handshake_lock) is located) will be unmapped\n\n     __futex_wake_ex(\u0026state, process_shared, 1);   // \u003d\u003e when the parent thread is back to running\n                                                   // the “state” \u0026 “process_shared” of startup_handshake_lock can’t be accessed (unmapped)\n                                                   // so the process will be crashed\n    }\n  }\n\nBug: 129744706\nTest: Monkey\nChange-Id: I55175e8c7ebc2b3b52de8a5602def0667076b974\n"
    },
    {
      "commit": "3e742cb6133ad37ce28e8f0bffdf70f763ed45a3",
      "tree": "0b102abd15cfa127182b8fd6b736ab1b09ae9bb1",
      "parents": [
        "6c5c6afea9c47d85ecada0f1d6d799ab640febf4",
        "ebe1ae7747699ab92e5e94a5f3b500098fa86678"
      ],
      "author": {
        "name": "Pirama Arumuga Nainar",
        "email": "pirama@google.com",
        "time": "Fri Mar 29 15:57:32 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Mar 29 15:57:32 2019 +0000"
      },
      "message": "Merge \"Reserve realtime signal for libprofile-extras\""
    },
    {
      "commit": "ebe1ae7747699ab92e5e94a5f3b500098fa86678",
      "tree": "198d07f2a5f55ae1f9d906300dcdb38e7e323bad",
      "parents": [
        "e187d92062b3a384f8c4730f93aa6c36e1c74b52"
      ],
      "author": {
        "name": "Pirama Arumuga Nainar",
        "email": "pirama@google.com",
        "time": "Mon Mar 25 22:06:56 2019 -0700"
      },
      "committer": {
        "name": "Pirama Arumuga Nainar",
        "email": "pirama@google.com",
        "time": "Mon Mar 25 22:09:19 2019 -0700"
      },
      "message": "Reserve realtime signal for libprofile-extras\n\nBug: http://b/128524141\n\nThis signal is used by libprofile-extras to trigger flush of gcov\ncoverage data.\n\nTest: libprofile-extras in system/extras/toolchain-extras\nChange-Id: I77dd5b1d67371a9cfaad54ad60254bfb2dd18ba9\n"
    },
    {
      "commit": "886370c2402e6fcf6ac613a8603f99fff66cd20c",
      "tree": "55973f92a11704c20bc09aa8a74c2094c7b1c2a7",
      "parents": [
        "ebdf4c19f9e034d7ec8e0e57539890d5c93eaed1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 21 21:11:41 2019 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 25 17:28:22 2019 -0700"
      },
      "message": "Fix internal uses of _PATH_BSHELL.\n\nWe regressed on this recently: code under the upstream-* directories has\n_PATH_BSHELL defined as a call to __bionic_get_shell_path(). In our own\ncode, we may as well just call it directly.\n\nBug: https://issuetracker.google.com/129030706\nTest: ran tests\nChange-Id: Ic2423f521272be95e67f94771772fe8072636ef0\n"
    },
    {
      "commit": "b62888b70940f173357d50395fee5b2ebee9ddff",
      "tree": "0efaf04ce45b02026d1bf5c0263d1628c238cef0",
      "parents": [
        "4a8b288704499b0c3e3df2d654fd62ecd1ab21a1",
        "f1ed31ffe12f5ab61493ae672fb4e39cb9671ce5"
      ],
      "author": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Tue Mar 19 23:29:05 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Mar 19 23:29:05 2019 +0000"
      },
      "message": "Merge \"Increase the size of the shadow call stack guard region to 16MB.\""
    },
    {
      "commit": "1fc5ccfe762f4cf2322a53215934492003dae49e",
      "tree": "b07af2f8b2466d0a7210b2aaacd97af5fe70efbd",
      "parents": [
        "ac74615c1c3638d33448f0f6995fb8bc9599f062"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Feb 15 18:06:15 2019 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Mar 15 10:54:55 2019 -0700"
      },
      "message": "Add a platform API for setting an allocation limit.\n\nIntroduce an M_SET_ALLOCATION_LIMIT enumerator for android_mallopt(),\nwhich can be used to set an upper bound on the total size of all\nallocations made using the memory allocation APIs.\n\nThis is useful for programs such as audioextractor and mediaserver\nwhich need to set such a limit as a security mitigation. Currently\nthese programs are using setrlimit(RLIMIT_AS) which isn\u0027t exactly\nwhat these programs want to control. RLIMIT_AS is also problematic\nunder sanitizers which allocate large amounts of address space as\nshadow memory, and is especially problematic under shadow call stack,\nwhich requires 16MB of address space per thread.\n\nAdd new unit tests for bionic.\n\nAdd new unit tests for malloc debug that verify that when the limit\nis enabled, malloc debug still functions for nearly every allocation\nfunction.\n\nBug: 118642754\nTest: Ran bionic-unit-tests/bionic-unit-tests-static.\nTest: Ran malloc debug tests and perfetto integration tests.\nChange-Id: I735403c4d2c87f00fb2cdef81d00af0af446b2bb\n"
    },
    {
      "commit": "6c619a0da3f96a26d91c1db48fd3e3be156aabe5",
      "tree": "aa0802d01d19ed0891e6b77a732cc72ed5617dcc",
      "parents": [
        "4e167f35d602f9dcede3b74ff3e09e88f3edb398"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Mar 01 17:59:51 2019 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Mar 07 08:39:55 2019 -0800"
      },
      "message": "Refactor the malloc_info code.\n\nmalloc_info needs to be per native allocator, but the code treated it\nlike a global function that doesn\u0027t depend on the native memory allocator.\n\nUpdate malloc debug to dump the actual pointers that it has been tracking.\n\nTest: bionic-unit-tests pass.\nTest: malloc debug tests pass.\nTest: malloc hook tests pass.\nChange-Id: I3b0d4d748489dd84c16d16933479dc8b8d79013e\nMerged-In: I3b0d4d748489dd84c16d16933479dc8b8d79013e\n(cherry picked from commit a3656a98b10d2a4a6194a5d9705ad9c2cc5877b0)\n"
    },
    {
      "commit": "808d176e7e0dd727c7f929622ec017f6e065c582",
      "tree": "2f34e0a7bd1822e8235e0d0f51b941beadc47927",
      "parents": [
        "2eb1fc9df0e8e90caed5145ab2f627b8d8961b97",
        "1990ba5601f5230851d1e2112c28bebbf78c3f40"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Feb 08 22:33:11 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 08 22:33:11 2019 +0000"
      },
      "message": "Merge \"Fix linker self-exec detection\""
    },
    {
      "commit": "1990ba5601f5230851d1e2112c28bebbf78c3f40",
      "tree": "89ac1bae3d31e58b42324787a2bf038ffe0b59f4",
      "parents": [
        "f827d82cdde0fe7f11015fb5ead39bac861ab6bd"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Feb 07 21:31:31 2019 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Feb 07 21:48:42 2019 -0800"
      },
      "message": "Fix linker self-exec detection\n\nWhen the linker is invoked on itself, (`linker64 /system/bin/linker64`),\nthe linker prints an error, because self-invocation isn\u0027t allowed. The\ncurrent method for detecting self-invocation fails because the second\nlinker instance can crash in a constructor function before reaching\n__linker_init.\n\nFix the problem by moving the error check into a constructor function,\nwhich finishes initializing libc sufficiently to call async_safe_fatal.\nThe only important thing missing is __libc_sysinfo on 32-bit x86. The aux\nvector isn\u0027t readily accessible, so use the fallback int 0x80.\n\nBug: http://b/123637025\nTest: bionic unit tests (32-bit x86)\nChange-Id: I8be6369e8be3938906628ae1f82be13e6c510119\n"
    },
    {
      "commit": "62e1e2c7e34a81dd20c6b2e75544eac72ab07d05",
      "tree": "815ef4135c963db34eace4100d9fa3ae2b48a424",
      "parents": [
        "1d3c56bc308c34217e36def4b408d8bae390924e"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Feb 04 12:26:02 2019 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Feb 07 14:48:34 2019 -0800"
      },
      "message": "Modify malloc common function pointers.\n\nInstead of every function being its own atomic, have a single\npointer that can be used to flip all pointers at once. This avoid cases\nwhere the set of pointers can be in an partial switched state.\n\nAlso fix a few inconsistent naming of functions in the file.\n\nTest: Ran unit tests (malloc debug, malloc hooks, perfetto).\nChange-Id: I3f66da395414586a3fa87874d80dcdf5f702ed39\nMerged-In: I3f66da395414586a3fa87874d80dcdf5f702ed39\n(cherry picked from commit 77184aedaf973c6e81accfc737f4fc362dad31ac)\n"
    },
    {
      "commit": "f1ed31ffe12f5ab61493ae672fb4e39cb9671ce5",
      "tree": "c205ede9391974c16b3dca443f998156752e0d39",
      "parents": [
        "58dd1cbd7f2a0b8a779f2f43c45447cdccc09c3e"
      ],
      "author": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Thu Jan 31 14:26:43 2019 -0800"
      },
      "committer": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Thu Jan 31 14:37:34 2019 -0800"
      },
      "message": "Increase the size of the shadow call stack guard region to 16MB.\n\nIncreasing the size of the guard region helps with the security of SCS,\nbut it\u0027s blocked on landing [1], which in turn is blocked on landing\n[2]. Once those two CLs land we will be able to land this one.\n\n[1] https://android-review.googlesource.com/c/platform/frameworks/av/+/837745\n[2] https://android-review.googlesource.com/c/platform/bionic/+/818973\n\nBug: 118642754\nChange-Id: I35409cbb6bfcd77e632567dd755376e345cfe67b\n"
    },
    {
      "commit": "ecdc451ccf9e3f6fa4a89ec99f0f59b0a8080516",
      "tree": "106c9d3feab344ad09751f27a728b2de4f19df41",
      "parents": [
        "543b4013e7e24813b33709750fe86ca190f0ac4c",
        "16455b5100ea46b930c1fa84d6bc905b7977643d"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Mon Jan 28 19:32:59 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jan 28 19:32:59 2019 +0000"
      },
      "message": "Merge changes I3c9b1292,I05c28d6a,I788c4a95,If8cd798f,I1c8d1cd7, ...\n\n* changes:\n  Implement dynamic TLS accesses and allocation\n  Implement TLS_DTPMOD and TLS_DTPREL relocations\n  Ignore DT_TLSDESC_GOT / DT_TLSDESC_PLT\n  Disable the dlfcn.dlopen_library_with_ELF_TLS test\n  Add BionicAllocator::memalign\n  Move the linker allocator into libc\n  Replace some of linker_allocator\u0027s header includes\n"
    },
    {
      "commit": "543b4013e7e24813b33709750fe86ca190f0ac4c",
      "tree": "7c2562760e7f9f47fe7b97b434a779550f0b12aa",
      "parents": [
        "122ecb1ca8023d32211b61004b1a107d83490b5c",
        "db59b891ca5a6f930161255cfd1f1d77eebd68fe"
      ],
      "author": {
        "name": "Florian Mayer",
        "email": "fmayer@google.com",
        "time": "Mon Jan 28 18:14:48 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jan 28 18:14:48 2019 +0000"
      },
      "message": "Merge \"Allow to reset malloc hooks.\""
    },
    {
      "commit": "db59b891ca5a6f930161255cfd1f1d77eebd68fe",
      "tree": "9d26d8bd324f0cd7221333ecae3248247d175cf4",
      "parents": [
        "a9aeccbf74eb05291d69cafc1058ad494b9d55e9"
      ],
      "author": {
        "name": "Florian Mayer",
        "email": "fmayer@google.com",
        "time": "Tue Nov 27 17:06:54 2018 +0000"
      },
      "committer": {
        "name": "Florian Mayer",
        "email": "fmayer@google.com",
        "time": "Mon Jan 28 15:01:50 2019 +0000"
      },
      "message": "Allow to reset malloc hooks.\n\nThis is used to prevent the additional indirection even after heap\nprofiling has finished, preventing any performance impact on processes\nthat are not currently being profiled.\n\nTest: m\nTest: flash sailfish\nTest: try tearing down \u0026 re-enabling hooks\n\nBug: 120186127\n\nChange-Id: Idc5988111a47870d2c093fd6a017b47e65f5616b\n"
    },
    {
      "commit": "16455b5100ea46b930c1fa84d6bc905b7977643d",
      "tree": "2cbeacaeecab2980c47fbf21ce860d44d86ea8c6",
      "parents": [
        "3b463cf7f4f7fa54567ff42f6772091b22add2b8"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Jan 18 01:00:59 2019 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Jan 25 17:53:01 2019 -0800"
      },
      "message": "Implement dynamic TLS accesses and allocation\n\nInitialize a thread\u0027s DTV to an empty zeroed DTV. Allocate the DTV and\nany ELF module\u0027s TLS segment on-demand in __tls_get_addr. Use a generation\ncounter, incremented in the linker, to signal when threads should\nupdate/reallocate their DTV objects.\n\nA generation count of 0 always indicates the constant zero DTV.\n\nOnce a DTV is allocated, it isn\u0027t freed until the thread exits, because\na signal handler could interrupt the fast path of __tls_get_addr between\naccessing the DTV slot and reading a field of the DTV. Bionic keeps a\nlinked list of DTV objects so it can free them at thread-exit.\n\nDynamic TLS memory is allocated using a BionicAllocator instance in\nlibc_shared_globals. For async-signal safety, access to the\nlinker/libc-shared state is protected by first blocking signals, then by\nacquiring the reader-writer lock, TlsModules::rwlock. A write lock is\nneeded to allocate or free memory.\n\nIn pthread_exit, unconditionally block signals before freeing dynamic\nTLS memory or freeing the shadow call stack.\n\nndk_cruft.cpp: Avoid including pthread_internal.h inside an extern \"C\".\n(The header now includes a C++ template that doesn\u0027t compile inside\nextern \"C\".)\n\nBug: http://b/78026329\nBug: http://b/123094171\nTest: bionic unit tests\nChange-Id: I3c9b12921c9e68b33dcc1d1dd276bff364eff5d7\n"
    },
    {
      "commit": "96773a2daf8d11f2d95801935e26f71eb0265559",
      "tree": "44a8da51e6b6acfb7054830a44e23b00d82afefc",
      "parents": [
        "083d850b30c5eb29c16500bca934d7f6682e4aaa"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Jan 24 15:22:50 2019 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Jan 25 15:31:35 2019 -0800"
      },
      "message": "Add BionicAllocator::memalign\n\nBionic needs this functionality to allocate a TLS segment with greater\nthan 16-byte alignment. For simplicity, this allocator only supports up\nto one page of alignment.\n\nThe memory layout changes slightly when allocating an object of exactly\nPAGE_SIZE alignment. Instead of allocating the page_info header at the\nstart of the page containing the pointer, it is allocated at the start\nof the preceding page.\n\nBug: http://b/78026329\nTest: linker-unit-tests{32,64}\nChange-Id: I1c8d1cd7ca72d113bced5ee15ba8d831426b0081\n"
    },
    {
      "commit": "083d850b30c5eb29c16500bca934d7f6682e4aaa",
      "tree": "5138d02782bff5e30af0c97cf114000674ca8771",
      "parents": [
        "52165b34b9c36eae4e15c47c25ab3c51b2029592"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Jan 24 13:47:13 2019 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Jan 25 15:31:35 2019 -0800"
      },
      "message": "Move the linker allocator into libc\n\nRename LinkerMemoryAllocator -\u003e BionicAllocator\nRename LinkerSmallObjectAllocator -\u003e BionicSmallObjectAllocator\n\nlibc and the linker need to share an instance of the allocator for\nallocating and freeing dynamic ELF TLS memory (DTVs and segments). The\nlinker also continues to use this allocator.\n\nBug: http://b/78026329\nTest: /data/nativetest/bionic-unit-tests-static\nTest: /data/nativetest64/bionic-unit-tests-static\nTest: /data/nativetest/linker-unit-tests/linker-unit-tests32\nTest: /data/nativetest64/linker-unit-tests/linker-unit-tests64\nChange-Id: I2da037006ddf8041a75f3eba2071a8fcdcc223ce\n"
    },
    {
      "commit": "3ce06c7b0ad60cafece0fedd2cf88340eb6a6c22",
      "tree": "8c9a90f00043f62f17a769a86c60cbf11c3be41b",
      "parents": [
        "a9aeccbf74eb05291d69cafc1058ad494b9d55e9",
        "a0834d805c2142216dbf8b71289e2409b00490c4"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Jan 24 18:53:28 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jan 24 18:53:28 2019 +0000"
      },
      "message": "Merge \"Reassign TLS slot 2 to TLS_SLOT_APP.\""
    },
    {
      "commit": "a0834d805c2142216dbf8b71289e2409b00490c4",
      "tree": "48757863221e3f1ad71e870df4ca72abe74e30c2",
      "parents": [
        "822326db922ac5d0e4dea8cff1d774e8f04db94a"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed Jan 23 18:47:10 2019 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed Jan 23 18:48:48 2019 -0800"
      },
      "message": "Reassign TLS slot 2 to TLS_SLOT_APP.\n\nBug: http://b/78026329\nBug: http://b/118381796\nTest: mmma bionic\nChange-Id: I1c50d3293206e59d54fbbfe9c9e3d6fd54dded3e\n"
    },
    {
      "commit": "f77928de325bae02a9568f7bfc7a254a978c7d8c",
      "tree": "dbd3bbca5d961795a47338dc5eeefa5518db9970",
      "parents": [
        "ecc37e38771aaf994a97c51104017a7d1b73a568"
      ],
      "author": {
        "name": "Ryan Savitski",
        "email": "rsavitski@google.com",
        "time": "Wed Jan 23 18:39:35 2019 +0000"
      },
      "committer": {
        "name": "Ryan Savitski",
        "email": "rsavitski@google.com",
        "time": "Wed Jan 23 18:40:17 2019 +0000"
      },
      "message": "android_mallopt: opcode preprocess define + missing header\n\nAddressing Elliott\u0027s remaining comments on the android_mallopt change.\nIntending to let this get merged in normally (should be clean).\n\nTest: blueline-userdebug still builds.\nChange-Id: I4f00191091b8af367f84d087432a5af5f83036ee\n"
    },
    {
      "commit": "ecc37e38771aaf994a97c51104017a7d1b73a568",
      "tree": "2b1a1d908e99eb5181cdaf77e06005a4459dcaa1",
      "parents": [
        "176d2fbcaefe4691b8fd7844f6cec8e7a1a22c76"
      ],
      "author": {
        "name": "Ryan Savitski",
        "email": "rsavitski@google.com",
        "time": "Fri Dec 14 15:57:21 2018 +0000"
      },
      "committer": {
        "name": "Ryan Savitski",
        "email": "rsavitski@google.com",
        "time": "Wed Jan 23 18:30:54 2019 +0000"
      },
      "message": "conditional zygote child heap profiling + android_internal_mallopt\n\nOn user builds, heapprofd should only be allowed to profile apps that\nare either debuggable, or profileable (according to the manifest). This\nchange exposes extra zygote-specific knowledge to bionic, and makes the\ndedicated signal handler check for the special case of being in a zygote child.\n\nWith this \u0026 the corresponding framework change, we should now be\nhandling the 4 combinations of:\n  {java, native} x {profile_at_runtime, profile_at_startup}.\n\nSee internal go/heapprofd-java-trigger for further context.\n\nTest: on-device unit tests (shared \u0026 static) on blueline-userdebug.\nTest: flashed blueline-userdebug, confirmed that java profiling activates from startup and at runtime.\nBug: 120409382\nChange-Id: Ic251afeca4324dc650ac1d4f46976b526eae692a\n(cherry picked from commit 998792e2b6e1b84222b5d124f13ecdcb446cb22f)\nMerged-In: Ic251afeca4324dc650ac1d4f46976b526eae692a\n"
    },
    {
      "commit": "fb8730d49586f29868b5697d6a8c74aa9a4847d0",
      "tree": "2900d8f03068efb6a069eb6b579460855b43627b",
      "parents": [
        "1988350d1ccd1a99c628178612e1c9ce0f7858a3"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Tue Jan 15 00:11:37 2019 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Jan 17 00:45:55 2019 -0800"
      },
      "message": "Handle R_GENERIC_TLS_TPREL relocations\n\nThis relocation is used for static TLS\u0027s initial-exec (IE) accesses.\n\nA TLS symbol\u0027s value is its offset from the start of the ELF module\u0027s\nTLS segment. It doesn\u0027t make sense to add the load_bias to this value,\nso skip the call to soinfo::resolve_symbol_address.\n\nAllow TLS relocations to refer to an unresolved weak symbol. In that case,\nsym will be non-zero, but lsi will be nullptr. The dynamic linker resolves\nthe TPREL relocation to 0, making \u0026missing_weak_symbol equal the thread\npointer.\n\nRecognize Gold-style relocations to STB_LOCAL TLS symbols/sections and\nissue an error.\n\nRemove the \"case R_AARCH64_TLS_TPREL64\", because the R_GENERIC_TLS_TPREL\ncase handles it.\n\nRemove the no-op R_AARCH64_TLSDESC handler. It\u0027s better to issue an error.\ndlopen_library_with_ELF_TLS now fails with a consistent error about an\nunimplemented dynamic TLS relocation.\n\nBug: http://b/78026329\nTest: bionic unit tests (elftls tests are added in a later CL)\nChange-Id: Ia08e1b5c8098117e12143d3b4ebb4dfaa5ca46ec\n"
    },
    {
      "commit": "1988350d1ccd1a99c628178612e1c9ce0f7858a3",
      "tree": "0b6c9375a51f534051334f40ff9aadc2df757a61",
      "parents": [
        "361c1b4a3bbdfeba70fce2f629a8bd523941981f"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed Jan 16 23:13:38 2019 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed Jan 16 23:19:40 2019 -0800"
      },
      "message": "Avoid a dlopen abort on an invalid TLS alignment\n\nIf the alignment of a TLS segment in a shared object is invalid, return\nan error through dlerror() rather than aborting the process.\n\nBug: http://b/78026329\nTest: bionic unit tests\nChange-Id: I60e589ddd8ca897f485d55af089f08bd3ff5b1fa\n"
    }
  ],
  "next": "361c1b4a3bbdfeba70fce2f629a8bd523941981f"
}
