)]}'
{
  "log": [
    {
      "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"
    },
    {
      "commit": "361c1b4a3bbdfeba70fce2f629a8bd523941981f",
      "tree": "1131a3788cb91990a56877c377fb63dcefe92f48",
      "parents": [
        "e5e69e09128e2e89bcafec45be343674adf983bf"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Tue Jan 15 13:45:27 2019 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed Jan 16 16:52:47 2019 -0800"
      },
      "message": "Initialize static TLS memory using module list\n\nThis implementation simply iterates over each static TLS module and\ncopies its initialization image into a new thread\u0027s static TLS block.\n\nBug: http://b/78026329\nTest: bionic unit tests\nChange-Id: Ib7edb665271a07010bc68e306feb5df422f2f9e6\n"
    },
    {
      "commit": "e5e69e09128e2e89bcafec45be343674adf983bf",
      "tree": "3bddb0f2bd3ccb8e6cbb6b55adbe121d6936f825",
      "parents": [
        "977e47d01897be06c2b5fc30267d29f86eeb5fc1"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Tue Jan 01 18:53:48 2019 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed Jan 16 16:52:47 2019 -0800"
      },
      "message": "Record TLS modules and layout static TLS memory\n\nBug: http://b/78026329\nTest: bionic unit tests\nChange-Id: Ibf1bf5ec864c7830e4cd1cb882842b644e6182ae\n"
    },
    {
      "commit": "977e47d01897be06c2b5fc30267d29f86eeb5fc1",
      "tree": "b36bf217ddc383ed63ed343e497bf9096b9790db",
      "parents": [
        "05ca47512c94d919ba72862920985992a5ed2905"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Mon Jan 14 21:52:14 2019 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed Jan 16 15:54:52 2019 -0800"
      },
      "message": "StaticTlsLayout: add exe/tcb and solib layout\n\nReplace reserve_tcb with reserve_exe_segment_and_tcb, which lays out both\nthe TCB and the executable\u0027s TLS segment, accounting for the difference in\nlayout between variant 1 and variant 2 targets.\n\nThe function isn\u0027t actually called with a non-null TlsSegment* yet.\n\nBug: http://b/78026329\nTest: bionic unit tests\nChange-Id: Ibd6238577423a7d0451f36da7e64912046959796\n"
    },
    {
      "commit": "4809755c0f62ff993c9ec1187553760708389a60",
      "tree": "3ddec18dc7c6367fecdf25d21c6f4158823cd71a",
      "parents": [
        "c86576c1fb242e721f0d02cd63810922b1d85384"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Sun Jan 06 18:24:10 2019 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed Jan 16 01:11:26 2019 -0800"
      },
      "message": "Add a __bionic_get_tls_segment function\n\nThe function searches for a TLS segment in a ElfXX_Phdr table.\n\nBug: http://b/78026329\nTest: bionic unit tests\nChange-Id: I221b13420d1a2da33fc2174b7dd256589f6ecfdb\n"
    },
    {
      "commit": "c86576c1fb242e721f0d02cd63810922b1d85384",
      "tree": "b67974ee704c29588359ba4ed1122c6771d45fb5",
      "parents": [
        "9ee8069046d587a4da2a67feb24ede9e9ea73edf"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed Jan 09 03:09:42 2019 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed Jan 16 01:11:26 2019 -0800"
      },
      "message": "Factor out ScopedRWLock into its own header\n\nBug: http://b/78026329\nTest: bionic unit tests\nChange-Id: I1d1276da835bc8ecac7a7abb714d639a1ee58007\n"
    },
    {
      "commit": "2e724175acab8f0b9752bb55acb42a4915eb3d01",
      "tree": "f4c143afc2020212bed23f37cba0aaf16ea71a54",
      "parents": [
        "82aea781365f911e29386479a1da24c7664d78b7"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Tue Jan 15 20:33:27 2019 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed Jan 16 01:11:26 2019 -0800"
      },
      "message": "Remove TLS_SLOT_TSAN(8)\n\nAs of the switch to clang-r346389c, it has been replaced with\nTLS_SLOT_SANITIZER(6). lld reserves 8 words beyond the TP on arm/arm64, so\nBionic can\u0027t use anything beyond 7.\n\nThe DTV and bionic_tls slots on x86 haven\u0027t been part of a release yet,\nand they should be strictly internal to Bionic anyway, so shift them down.\n\nBug: http://b/78026329\nTest: bionic unit tests\nChange-Id: Ifb3b2d8d85efe1417ee9a10b657b665ec6f2fd3d\n"
    },
    {
      "commit": "45d1349c638426d99a5319e7be3dbb7c36ece7eb",
      "tree": "fe566eac57d2354c8b6bf27fc9db698fe57ea6be",
      "parents": [
        "27d59338b98bba7f33eb223c4f2e1df4c3b96774"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Jan 03 02:51:30 2019 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Jan 11 15:34:22 2019 -0800"
      },
      "message": "Reorganize static TLS memory for ELF TLS\n\nFor ELF TLS \"local-exec\" accesses, the static linker assumes that an\nexecutable\u0027s TLS segment is located at a statically-known offset from the\nthread pointer (i.e. \"variant 1\" for ARM and \"variant 2\" for x86).\nBecause these layouts are incompatible, Bionic generally needs to allocate\nits TLS slots differently between different architectures.\n\nTo allow per-architecture TLS slots:\n - Replace the TLS_SLOT_xxx enumerators with macros. New ARM slots are\n   generally negative, while new x86 slots are generally positive.\n - Define a bionic_tcb struct that provides two things:\n    - a void* raw_slots_storage[BIONIC_TLS_SLOTS] field\n    - an inline accessor function: void*\u0026 tls_slot(size_t tpindex);\n\nFor ELF TLS, it\u0027s necessary to allocate a temporary TCB (i.e. TLS slots),\nbecause the runtime linker doesn\u0027t know how large the static TLS area is\nuntil after it has loaded all of the initial solibs.\n\nTo accommodate Golang, it\u0027s necessary to allocate the pthread keys at a\nfixed, small, positive offset from the thread pointer.\n\nThis CL moves the pthread keys into bionic_tls, then allocates a single\nmapping per thread that looks like so:\n - stack guard\n - stack [omitted for main thread and with pthread_attr_setstack]\n - static TLS:\n    - bionic_tcb [exec TLS will either precede or succeed the TCB]\n    - bionic_tls [prefixed by the pthread keys]\n    - [solib TLS segments will be placed here]\n - guard page\n\nAs before, if the new mapping includes a stack, the pthread_internal_t\nis allocated on it.\n\nAt startup, Bionic allocates a temporary bionic_tcb object on the stack,\nthen allocates a temporary bionic_tls object using mmap. This mmap is\ndelayed because the linker can\u0027t currently call async_safe_fatal() before\nrelocating itself.\n\nLater, Bionic allocates a stack-less thread mapping for the main thread,\nand copies slots from the temporary TCB to the new TCB.\n(See *::copy_from_bootstrap methods.)\n\nBug: http://b/78026329\nTest: bionic unit tests\nTest: verify that a Golang app still works\nTest: verify that a Golang app crashes if bionic_{tls,tcb} are swapped\nMerged-In: I6543063752f4ec8ef6dc9c7f2a06ce2a18fc5af3\nChange-Id: I6543063752f4ec8ef6dc9c7f2a06ce2a18fc5af3\n(cherry picked from commit 1e660b70da625fcbf1e43dfae09b7b4817fa1660)\n"
    },
    {
      "commit": "0b0ee0c634a631693c5d8c8f2d2d42f6ff7ccf7f",
      "tree": "4700ca36208c7fae3bf48ac76290f44fe81fee7f",
      "parents": [
        "d14d83032c5aeaac49d861683b46a8bedea50195"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Dec 14 17:34:05 2018 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Jan 03 17:11:27 2019 -0800"
      },
      "message": "libc_shared_globals: add a constexpr ctor\n\nHaving a constexpr constructor should guarantee that the static\n`globals` variable in __libc_shared_globals is initialized statically\n(as opposed to dynamically), which is important because\n__libc_shared_globals is called very early (before the linker has\nrelocated itself). With the constructor, though, the fields can safely\nhave in-line default initializers.\n\nBug: none\nTest: bionic unit tests\nChange-Id: Icde821557369625734a4d85d7ff55428bad5c247\n"
    },
    {
      "commit": "770032ddfa31f6ed18e6ec85013b7939cd291eb0",
      "tree": "28dc26ae8a6b3623e79d1bb2b19fd5362477843c",
      "parents": [
        "7bd54ade8d12762ef6bdb0096f3838261f14eee5"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Jan 02 10:59:48 2019 -0800"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Jan 02 11:04:05 2019 -0800"
      },
      "message": "Fix/suppress bionic google-explicit-constructor warnings\n\n* Add explicit to conversion constructors/operators\n\nBug: 28341362\nTest: make with WITH_TIDY\u003d1 DEFAULT_GLOBAL_TIDY_CHECKS\u003d-*,google-explicit-constructor\nChange-Id: Id1ad0327c1b8c6f094bcbb3ae599bc1f716b3f2f\n"
    },
    {
      "commit": "4825c6d8146245e06c39d616c9dc91b6ae401cd1",
      "tree": "363bfa4f7a29fdcccdb9a6e484694d7621394585",
      "parents": [
        "37754cdef681dde87f74ece0712e7c93b18ee368"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Tue Dec 11 12:59:00 2018 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Tue Dec 11 13:02:56 2018 -0800"
      },
      "message": "Reserve TLS_SLOT_SANITIZER with value 6.\n\nThis slot will replace TLS_SLOT_TSAN, which needs to be removed for ELF\nTLS compatibility. The platform has both slots reserved until compiler-rt\ncan be updated. See:\n - https://reviews.llvm.org/D53906\n - discussion on AOSP change Idf25d2ee457a5d26d0bdd6281cee72c345c8b755\n\nBug: http://b/78026329\nTest: m\nChange-Id: Ifd5aeb5711dc88266e7350cb022146dd87cfd7be\n"
    },
    {
      "commit": "37754cdef681dde87f74ece0712e7c93b18ee368",
      "tree": "2e94cb9012c50e2a6315f08994ff983e0095c15a",
      "parents": [
        "8b475e598d6c1252271849e41fb0e30e105a0ab3"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Dec 07 01:47:00 2018 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Tue Dec 11 12:59:23 2018 -0800"
      },
      "message": "Move errno to a pthread_internal_t field.\n\nThis change is intended to allow native-bridge to use independent\nTLS memory for host and guest environments, while still sharing a\nthread-local errno between the two.\n\nBug: http://b/78026329\nTest: bionic unit tests\nChange-Id: I838cd321e159add60760bc12a8aa7e9ddc960c33\nMerged-In: I838cd321e159add60760bc12a8aa7e9ddc960c33\n(cherry picked from commit a9c7c55462392a6b974761831744f6d80ca162df)\n"
    },
    {
      "commit": "34583c1089755406877cde9ebd9f75f73858a9bc",
      "tree": "084d100ac5071fedbd93741a283a6452d35fdb8d",
      "parents": [
        "31105c8dd8f4b57b3244aca23ba377c1190f3a6b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 13 15:30:07 2018 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Dec 06 05:19:57 2018 +0000"
      },
      "message": "Move dlerror out of a TLS slot and into a pthread_internal_t member.\n\nBug: N/A\nTest: boots, tests pass.\nChange-Id: Idf25d2ee457a5d26d0bdd6281cee72c345c8b755\n"
    },
    {
      "commit": "07440a87732b0f23f8866256cf460b0798f08b8a",
      "tree": "db993d6293c37214c37d52f5f2cd032891887991",
      "parents": [
        "5a66490e3b9738cc70162257788bcc00583032fa"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Nov 22 03:16:06 2018 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Tue Dec 04 13:51:56 2018 -0800"
      },
      "message": "Replace TLS_SLOT_BIONIC_PREINIT w/ shared globals\n\nInstead of passing the address of a KernelArgumentBlock to libc.so for\ninitialization, use __loader_shared_globals() to initialize globals.\n\nMost of the work happened in the previous CLs. This CL switches a few\nKernelArgumentBlock::getauxval calls to [__bionic_]getauxval and stops\nrouting the KernelArgumentBlock address through the libc init functions.\n\nBug: none\nTest: bionic unit tests\nChange-Id: I96c7b02c21d55c454558b7a5a9243c682782f2dd\nMerged-In: I96c7b02c21d55c454558b7a5a9243c682782f2dd\n(cherry picked from commit 746ad15912cfa82271424747e94d8125acc43d8c)\n"
    },
    {
      "commit": "5a66490e3b9738cc70162257788bcc00583032fa",
      "tree": "3c284f55d4ce2f2af5745627bf271812082d3223",
      "parents": [
        "9cfca866ce36458bb942b7eebc4997f7bb94d3ad"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Nov 22 02:14:14 2018 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Tue Dec 04 13:51:46 2018 -0800"
      },
      "message": "Use shared globals so getauxval works earlier\n\nMake getauxval() work in .preinit_array. It still won\u0027t be usable for\nifuncs unless we can guarantee that the __loader_shared_globals relocation\nis resolved before the ifunc calls [__bionic_]getauxval.\n\nDefine __bionic_getauxval for use in replacing calls to\nKernelArgumentBlock::getauxval, which doesn\u0027t (and sometimes isn\u0027t allowed\nto) access TLS variables like errno.\n\nBug: http://b/25751302\nTest: bionic unit tests\nChange-Id: I461feeaed7f43cfa2a2b6c34147194f0df82b516\nMerged-In: I461feeaed7f43cfa2a2b6c34147194f0df82b516\n(cherry picked from commit bdab4a2b97c53af0205788875342ec08e6901376)\n"
    },
    {
      "commit": "9cfca866ce36458bb942b7eebc4997f7bb94d3ad",
      "tree": "f0a8fbdff8af4c8a911b4e88c248f7256f941bbc",
      "parents": [
        "949269828e14167cef09ed7a5ba99df170b5adb6"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Nov 22 02:44:09 2018 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Tue Dec 04 13:51:36 2018 -0800"
      },
      "message": "Split main thread init into early+late functions\n\nSplit __libc_init_main_thread into __libc_init_main_thread_early and\n__libc_init_main_thread_late. The early function is called very early in\nthe startup of the dynamic linker and static executables. It initializes\nthe global auxv pointer and enough TLS memory to do system calls, access\nerrno, and run -fstack-protector code (but with a zero cookie because the\ncode for generating a cookie is complex).\n\nAfter the linker is relocated, __libc_init_main_thread_late finishes\nthread initialization.\n\nBug: none\nTest: bionic unit tests\nChange-Id: I6fcd8d7587a380f8bd649c817b40a3a6cc1d2ee0\nMerged-In: I6fcd8d7587a380f8bd649c817b40a3a6cc1d2ee0\n(cherry picked from commit 39bc44bb0e03514e8d92f8c0ceb0b5901e27a485)\n"
    },
    {
      "commit": "48b1159bb82b12bdd75be9228bd43db45168bdba",
      "tree": "876b546289ca58c6bb0a923c325aedeef7fd5cf8",
      "parents": [
        "7752bcb234a9960d2e9e89766d143b7ac0c5f332"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Nov 22 02:41:36 2018 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed Nov 28 14:26:14 2018 -0800"
      },
      "message": "Use shared globals to init __progname + environ\n\nInitialize the __progname and environ global variables using\nlibc_shared_globals rather than KernelArgumentBlock.\n\nAlso: suppose the linker is invoked on an executable:\n\n    linker prog [args...]\n\nThe first argument passed to main() and constructor functions is \"prog\"\nrather than \"linker\". For consistency, this CL changes the BSD\n__progname global from \"linker\" to \"prog\".\n\nBug: none\nTest: bionic unit tests\nChange-Id: I376d76953c9436706dbc53911ef6585c1acc1c31\n"
    },
    {
      "commit": "7752bcb234a9960d2e9e89766d143b7ac0c5f332",
      "tree": "e7bcae45f66a0682f07d242f18b33681fc9e4cfa",
      "parents": [
        "abf736a7803f4acc8b70a2dab0d43b931aa9c5c0"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Nov 22 02:41:04 2018 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed Nov 28 14:26:14 2018 -0800"
      },
      "message": "Move the abort message to libc_shared_globals\n\n__libc_shared_globals() is available in dynamic modules as soon as\nrelocation has finished (i.e. after ifuncs run). Before ifuncs have run,\nthe android_set_abort_message() function already doesn\u0027t work because it\ncalls public APIs via the PLT. (If this matters, we can use a static\nbool variable to enable android_set_abort_message after libc\ninitialization).\n\n__libc_shared_globals() is hidden, so it\u0027s available in the linker\nimmediately (i.e. before relocation). TLS memory (e.g. errno) currently\nisn\u0027t accessible until after relocation, but a later patch fixes that.\n\nBug: none\nTest: bionic unit tests\nChange-Id: Ied4433758ed2da9ee404c6158e319cf502d05a53\n"
    },
    {
      "commit": "abf736a7803f4acc8b70a2dab0d43b931aa9c5c0",
      "tree": "72009b4f3acbd65415b4c1ed2244d1c560269349",
      "parents": [
        "12ed389ca5ea756f664de6f76118c886f7bac865"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Nov 22 02:40:17 2018 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed Nov 28 14:26:14 2018 -0800"
      },
      "message": "Expose libc_shared_globals to libc.so with symbol\n\nPreviously, the address of the global variable was communicated from the\ndynamic linker to libc.so using a field of KernelArgumentBlock, which is\ncommunicated using the TLS_SLOT_BIONIC_PREINIT slot.\n\nAs long as this function isn\u0027t called during relocations (i.e. while\nexecuting an ifunc), it always return a non-NULL value. If it\u0027s called\nbefore its PLT entry is relocated, I expect a crash.\n\nI removed the __libc_init_shared_globals function. It\u0027s currently empty,\nand I don\u0027t think there\u0027s one point in libc\u0027s initialization where\nshared globals should be initialized.\n\nBug: http://b/25751302\nTest: bionic unit tests\nChange-Id: I614d25e7ef5e0d2ccc40d5c821dee10f1ec61c2e\n"
    },
    {
      "commit": "f47e89f29bedeece3cd702e6c48c921d37a03d1b",
      "tree": "27be02dcd96200c148a90567e3bc0c640d3b034e",
      "parents": [
        "0ff8df5f6affa4dac7658e947f71baa0cba2f709",
        "e3ed892faaaa1d580fbdb49dbe6242e10cceff4d"
      ],
      "author": {
        "name": "Luke Huang",
        "email": "huangluke@google.com",
        "time": "Wed Nov 28 12:21:33 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 28 12:21:33 2018 +0000"
      },
      "message": "Merge \"Replace android_open_proxy with dns_open_proxy\""
    },
    {
      "commit": "8d849ffbade2e4418084e186f9f22a347fe4862c",
      "tree": "afbcf74d11c296650ae0aedbd2ed52361757abcb",
      "parents": [
        "7562ef394daa8c8e3313372be73bec7d1be68d9b",
        "734beec3d48a7ea5cfe3bd0815676181ea698cc7"
      ],
      "author": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Mon Nov 19 20:44:03 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 19 20:44:03 2018 +0000"
      },
      "message": "Merge \"Allocate a small guard region around the shadow call stack.\""
    },
    {
      "commit": "e3ed892faaaa1d580fbdb49dbe6242e10cceff4d",
      "tree": "67995fa3dd42fd0d2d40f503822c23481ecd20fc",
      "parents": [
        "c89a3971e94c30611c885e4c440eae2fd9937948"
      ],
      "author": {
        "name": "Luke Huang",
        "email": "huangluke@google.com",
        "time": "Mon Nov 19 16:59:08 2018 +0800"
      },
      "committer": {
        "name": "Luke Huang",
        "email": "huangluke@google.com",
        "time": "Mon Nov 19 18:00:37 2018 +0800"
      },
      "message": "Replace android_open_proxy with dns_open_proxy\n\nremove android_open_proxy and use dns_open_proxy instead of it.\ndns_open_proxy is in libnetd_client and\nit does the same thing as android_open_proxy except return value.\nIt returns fd directly now.\n\nTest: build, dns works fine\nChange-Id: I984743fb50b23eeb9a7d24e9fc347832acfe2afe\n"
    },
    {
      "commit": "734beec3d48a7ea5cfe3bd0815676181ea698cc7",
      "tree": "4a288b288b56d549c23e25166de6be1b86729c79",
      "parents": [
        "83590680649dc04ce8a98cd85b6356e1d6066564"
      ],
      "author": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Wed Nov 14 12:41:41 2018 -0800"
      },
      "committer": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Fri Nov 16 14:37:08 2018 -0800"
      },
      "message": "Allocate a small guard region around the shadow call stack.\n\nThis lets us do two things:\n\n1) Make setjmp and longjmp compatible with shadow call stack.\n   To avoid leaking the shadow call stack address into memory, only the\n   lower log2(SCS_SIZE) bits of x18 are stored to jmp_buf. This requires\n   allocating an additional guard page so that we\u0027re guaranteed to be\n   able to allocate a sufficiently aligned SCS.\n\n2) SCS overflow detection. Overflows now result in a SIGSEGV instead\n   of corrupting the allocation that comes after it.\n\nChange-Id: I04d6634f96162bf625684672a87fba8b402b7fd1\nTest: bionic-unit-tests\n"
    },
    {
      "commit": "c0f46564528c7bec8d490e62633e962f2007b8f4",
      "tree": "4dabb94963f869576828c5d169e74956f527031a",
      "parents": [
        "83590680649dc04ce8a98cd85b6356e1d6066564"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 09 15:38:52 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 15 11:07:30 2018 -0800"
      },
      "message": "Make android_get_application_target_sdk_version available to the NDK.\n\nAlso move this and android_get_device_api_level into \u003candroid/api-level.h\u003e\nso that they\u0027re always available.\n\nThis involves cleaning up \u003csys/cdefs.h\u003e slightly.\n\nBug: N/A\nTest: builds\nChange-Id: I25435c55f3549cd0d827a7581bee75ea8228028b\n"
    },
    {
      "commit": "ff1428a48e05a86b6e777d5f04a8faa1dc662f8b",
      "tree": "513aeffdbfed65b2f995aca73d9926ac70e293ee",
      "parents": [
        "17c4bd9e5966e36352bfe93832e6cdccf5755a49"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 12 16:01:37 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 13 21:25:07 2018 -0800"
      },
      "message": "Move API levels from `uint32_t` to `int`.\n\n(cherrypick of a6c71a09670ca636cca5cfea9d74b03a951e2b5e.)\n\nBug: N/A\nTest: builds\nChange-Id: I9c414e30e3c4fe2a4e16a2fe4ce18eae85fe4844\n"
    },
    {
      "commit": "5e62b34c0d6fa545b487b9b64fb4a04a0589bc13",
      "tree": "e08ee44067b3b636ace11b21ec8d63a08d4d2a19",
      "parents": [
        "c89a3971e94c30611c885e4c440eae2fd9937948"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 25 11:00:00 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 25 11:00:00 2018 -0700"
      },
      "message": "Clean up bionic_macros.h a bit.\n\nUse \u003candroid-base/macros.h\u003e instead where possible, and move the bionic\nmacros out of the way of the libbase ones. Yes, there are folks who manage\nto end up with both included at once (thanks OpenGL!), and cleaning that\nup doesn\u0027t seem nearly as practical as just making this change.\n\nBug: N/A\nTest: builds\nChange-Id: I23fc544f39d5addf81dc61471771a5438778895b\n"
    },
    {
      "commit": "f7f71e3c7b70c0369cf04cedbd988f55f88918fb",
      "tree": "8872ac6e3608cd8d6feb74621a8c6ed3e8da0632",
      "parents": [
        "7ff7d03286dcf8abc6b4bd0455c428256493c96d"
      ],
      "author": {
        "name": "Florian Mayer",
        "email": "fmayer@google.com",
        "time": "Fri Aug 31 15:36:48 2018 -0700"
      },
      "committer": {
        "name": "Florian Mayer",
        "email": "fmayer@google.com",
        "time": "Thu Oct 18 21:38:06 2018 +0100"
      },
      "message": "Add RT signal to load heapprofd library.\n\nTests: Ran malloc_debug_unit_tests\nTests: Flashed to walleye, sent signal, observed\n  \"Unable to open shared library: heapprofd.so\".\n\nChange-Id: Ia8ce216837e29e3edbda8789ca28023d53fa1fda\n"
    },
    {
      "commit": "92a9116100f766f4df5c9e3efbb9ad2a402af06c",
      "tree": "2684d5a475e4da56ebc63c726386f3e177adccb9",
      "parents": [
        "4e29cdec23762fd6e26b3ca4f87ce35213b0db1f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 15 13:12:19 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 15 13:12:19 2018 -0700"
      },
      "message": "strerror: add missing ERFKILL and EHWPOISON.\n\nThere\u0027s little value to having strings for these, but we may as well\nfor consistency. There\u0027s no ELASTERRNO constant we can use to check\nwhether we\u0027ve fallen behind again, but these were added in 2009 and\n2011 respectively, so we\u0027re not likely to have to deal with any more\nnew errno values any time soon...\n\nBug: http://b/117755069\nTest: ran tests\nChange-Id: I5b7155c22cad92c2fe03a0b4c7cae415c37fa186\n"
    },
    {
      "commit": "391af2cefea88abe7eccff8edd0ae06c653bef5e",
      "tree": "c2c1e6d8f45fc5c7e67efda4c6e7d809c90b1902",
      "parents": [
        "069d5aef90e1a322fb9e9ff7e922f8505fe81c8c",
        "8f639a40966c630c64166d2657da3ee641303194"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Oct 11 01:04:57 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 11 01:04:57 2018 +0000"
      },
      "message": "Merge \"Allow invoking the linker on an executable.\""
    },
    {
      "commit": "8f639a40966c630c64166d2657da3ee641303194",
      "tree": "96e03d65a4efa6613941b748ed2c11b64a8dec1b",
      "parents": [
        "cb8ed207d2bb6113a80fc7f27cd0beb8897f5192"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Mon Oct 01 23:10:05 2018 -0700"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed Oct 10 14:31:06 2018 -0700"
      },
      "message": "Allow invoking the linker on an executable.\n\nThe executable can be inside a zip file using the same syntax used for\nshared objects: path.zip!/libentry.so.\n\nThe linker currently requires an absolute path. This restriction could be\nloosened, but it didn\u0027t seem important? If it allowed non-absolute paths,\nwe\u0027d need to decide how to handle:\n - foo/bar      (relative to CWD?)\n - foo          (search PATH / LD_LIBRARY_PATH, or also relative to CWD?)\n - foo.zip!/bar (normalize_path() requires an absolute path)\n\nThe linker adjusts the argc/argv passed to main() and to constructor\nfunctions to hide the initial linker argument, but doesn\u0027t adjust the auxv\nvector or files like /proc/self/{exe,cmdline,auxv,stat}. Those files will\nreport that the kernel loaded the linker as an executable.\n\nI think the linker_logger.cpp change guarding against (g_argv \u003d\u003d NULL)\nisn\u0027t actually necessary, but it seemed like a good idea given that I\u0027m\ndelaying initialization of g_argv until after C++ constructors have run.\n\nBug: http://b/112050209\nTest: bionic unit tests\nChange-Id: I846faf98b16fd34218946f6167e8b451897debe5\n"
    },
    {
      "commit": "baf20fc9122740ff2baa34d28001e8bdfac9568c",
      "tree": "8e6f717de9cef90828010497ef80ab454c0eb4c6",
      "parents": [
        "773c697f815d43182adf1eb430f4899255088d6b"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Oct 08 17:28:07 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Oct 09 16:27:22 2018 -0700"
      },
      "message": "Block TIMER_SIGNAL in sigprocmask(SIG_SETMASK, ...).\n\nPreviously, we were zeroing out the reserved signals, when we actually\nwanted to have TIMER_SIGNAL always be blocked, and the other signals\nalways be unblocked. This resulted in process termination when a\nSIGEV_THREAD timer callback calls sigprocmask(SIG_SETMASK, ...) with\nany signal mask value, and then subsequently fails to complete its\ncallback and reach the sigtimedwait in bionic before the next timer\niteration triggers.\n\nAdd a how argument to filter_reserved_signals to appropriately\nblock/unblock our reserved signals.\n\nBug: http://b/116783733\nTest: bionic-unit-tests32/64\nChange-Id: Ie5339682cdeb914711cd4089cd26ee395704d0df\n"
    },
    {
      "commit": "f5693c688da161b147de961bc6db0ccc574b8666",
      "tree": "a186766ee17cb35fba1156e8c0710c26a66c5827",
      "parents": [
        "fc85c3c8476fe2490b027840994db4ff009631e0"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Aug 31 14:07:40 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Aug 31 16:39:23 2018 -0700"
      },
      "message": "Generalize abort\u0027s inline_tgkill, use it in fdsan.\n\nConvert abort\u0027s inline_tgkill to do the equivalent of\npthread_sigqueue(pthread_self(), ...), so that we can use it in fdsan\nas well.\n\nTest: bionic-unit-tests\nTest: debuggerd_test32\nTest: debuggerd_test64\nChange-Id: I92a7b84e2f00ce021b4043ed8a3bd8683d77fe9c\n"
    },
    {
      "commit": "99d54656bda40edb817e6bc6de9a85d88ef4e6b5",
      "tree": "1a176f12c89582f0d06a3376ef66c6281d8af01c",
      "parents": [
        "8f2298e73f4d930b58a8466fd7264e9a88c96d99"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 22 10:36:23 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 22 10:36:23 2018 -0700"
      },
      "message": "Add PR_SET_VMA and PR_SET_VMA_ANON_NAME to \u003csys/prctl.h\u003e.\n\nWe\u0027ve copied \u0026 pasted these to too many places. And if we\u0027re going to\nhave another go at upstreaming these, that\u0027s probably yet another reason\nto have the *values* in just one place. (Even if upstream wants different\nnames, we\u0027ll likely keep the legacy names around for a while for source\ncompatibility.)\n\nBug: http://b/111903542\nTest: ran tests\nChange-Id: I8ccc557453d69530e5b74f865cbe0b458c84e3ba\n"
    },
    {
      "commit": "fa5410fdb7664e4561f5adcee406b1913f520d77",
      "tree": "4dc35e592835307b61e88534a7a054dc90cf0759",
      "parents": [
        "a7573441c1274bbdb3fc992d068ebf97b30a0208"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Mon Aug 13 17:44:06 2018 -0700"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Wed Aug 15 10:11:08 2018 -0700"
      },
      "message": "libc: enable -Wimplicit-fallthrough\n\nlibc had some -Wimplicit-fallthrough warnings. They all seem to be\nbenign. We\u0027re trying to enable this flag globally, so we need to\nannotate these breaks here.\n\nBug: 112564944\nTest: Builds\nChange-Id: I5afae694cc4cf26ad1a61e2c8ae91f00cda7c733\n"
    },
    {
      "commit": "e6dab7b55fbcbb72b4b5b7edd3f46ca03da7bfe5",
      "tree": "33525cfdbbfe4deb1eed53155697fe086a3726b4",
      "parents": [
        "4b7c1cc13f313d5d53ab36de250ef3e1f93d0a54"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 06 18:47:29 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 06 18:47:29 2018 -0700"
      },
      "message": "fdsan: minor refactoring.\n\nMake it easier for other code to parse the fdsan table themselves by\nmaking it so that they can include the bionic_fdsan.h header to get a\nstruct definition with the layout without bringing in other\ndependencies.\n\nTest: treehugger\nChange-Id: I3583ef113991234aa83cd193a4eb139ad06737c7\n"
    },
    {
      "commit": "32bc0fcf69dfccb3726fe572833a38b01179580e",
      "tree": "abca656f500087493e0997d5cf38cbcc9ec98eb8",
      "parents": [
        "65f82092a17518080178ff7004cc6db362ebfbcd"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Thu Aug 02 17:31:13 2018 -0700"
      },
      "committer": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Thu Aug 02 18:09:44 2018 -0700"
      },
      "message": "Modernize codebase by replacing NULL with nullptr\n\nFixes -Wzero-as-null-pointer-constant warning.\n\nTest: m\nBug: 68236239\nChange-Id: I5b4123bc6709641315120a191e36cc57541349b2\n"
    },
    {
      "commit": "f6e5b582604715729b09db3e36a7aeb8c24b36a4",
      "tree": "1d68c449355f88a0652d3c1e2d6679b54fce1b20",
      "parents": [
        "ad596bf4fc406c0940d0f76f6b7c4ff22ecee7ac"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jun 01 15:30:54 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jul 19 14:28:54 2018 -0700"
      },
      "message": "Introduce api to track fd ownership in libc.\n\nAdd two functions to allow objects that own a file descriptor to\nenforce that only they can close their file descriptor.\n\nUse them in FILE* and DIR*.\n\nBug: http://b/110100358\nTest: bionic_unit_tests\nTest: aosp/master boots without errors\nTest: treehugger\nChange-Id: Iecd6e8b26c62217271e0822dc3d2d7888b091a45\n"
    },
    {
      "commit": "468efc80da2504f4ae7de8b5e137426d44dda9d7",
      "tree": "464d20ef3a5ae493a9728ddc53629764b59f300d",
      "parents": [
        "f0296f35f67cf4c112b3ed407858999bdc2f33b0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 10 14:39:49 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 11 12:15:26 2018 -0700"
      },
      "message": "Reimplement popen(3)/pclose(3).\n\npclose(3) is now an alias for fclose(3). We could add a FORTIFY check\nthat you use pclose(3) if and only if you used popen(3), but there seems\nlittle value to that when we can just do the right thing.\n\nThis patch also adds the missing locking to _fwalk --- we need to lock\nboth the global list of FILE*s and also each FILE* we touch. POSIX says\nthat \"The popen() function shall ensure that any streams from previous\npopen() calls that remain open in the parent process are closed in the\nnew child process\", which we implement via _fwalk(fclose) in the child,\nbut we might want to just make *all* popen(3) file descriptors O_CLOEXEC\nin all cases.\n\nIgnore fewer errors in popen(3) failure cases.\n\nImprove popen(3) test coverage.\n\nBug: http://b/72470344\nTest: ran tests\nChange-Id: Ic937594bf28ec88b375f7e5825b9c05f500af438\n"
    },
    {
      "commit": "37d4e67bb0839df433353b4b3859abe3db1c2684",
      "tree": "ad6d889c9ec5a71162a765d93e39718cb6da254e",
      "parents": [
        "92c6f7ee9014f434fbcce89ab894c745e36732d2"
      ],
      "author": {
        "name": "Adhemerval Zanella",
        "email": "adhemerval.zanella@linaro.org",
        "time": "Fri Jun 22 11:08:47 2018 -0300"
      },
      "committer": {
        "name": "Adhemerval Zanella",
        "email": "adhemerval.zanella@linaro.org",
        "time": "Tue Jun 26 15:58:52 2018 -0300"
      },
      "message": "Set __bionic_asm_align to 16 for arm64\n\nAs for others targets, it is better to align function text by minimim\ncacheline size.  This patch changes arm __bionic_asm_align to 16.\n\nTest: bionic tests on aarch64.\nChange-Id: Ib121663c65493d33d6803e2c5139d247a8cae858\n"
    },
    {
      "commit": "95bca3f7d4f33bc7c38d33fb6f166eaf02454d92",
      "tree": "42c9b715fa2df0c2a4fe92ccbd890a22310ed30f",
      "parents": [
        "42596b7bf0652e44edff0370f75e1d5387c5cc7b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 12 14:16:50 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 12 15:29:36 2018 -0700"
      },
      "message": "Remove valgrind workarounds.\n\nBug: http://b/77856586\nTest: ran 32-bit x86 tests on host\nChange-Id: I98f6262bb1363ed5c8dd533b1f89b59b2b188525\n"
    },
    {
      "commit": "27475b5105e30332dd2145e0bfba098b756673d9",
      "tree": "02f72da22fcc8e2d2e8bf6db1e84d10f3365592c",
      "parents": [
        "cb5f4100060cd9894273863a973d622d6ebd2719"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu May 17 17:14:18 2018 -0700"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed May 30 16:44:23 2018 -0700"
      },
      "message": "Initialize __libc_sysinfo early on.\n\n__libc_sysinfo is hidden, so accessing it doesn\u0027t require a relocated GOT.\nIt is important not to have a relocatable initializer on __libc_sysinfo,\nbecause if it did have one, and if we initialized it before relocating the\nlinker, then on 32-bit x86 (which uses REL rather than RELA), the\nrelocation step would calculate the wrong addend and overwrite\n__libc_sysinfo with garbage.\n\nAsides:\n\n * It\u0027d be simpler to keep the __libc_sysinfo initializer for static\n   executables, but the loader pulls in libc_init_static (even though it\n   uses almost none of the code in that file, like __libc_init).\n\n * The loader has called __libc_init_sysinfo three times by the time it\n   has relocated itself. A static executable calls it twice, while libc.so\n   calls it only once.\n\nBug: none\nTest: lunch aosp_x86-userdebug ; emulator\nTest: adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests\nTest: adb shell /data/nativetest/bionic-unit-tests-static/bionic-unit-tests-static\nChange-Id: I5944f57847db7191608f4f83dde22b49e279e6cb\n"
    },
    {
      "commit": "c2b9fec50b4bc33de60aef764798a2aca3c35873",
      "tree": "a5b6f465740515613340cb6769d21737571c04d5",
      "parents": [
        "1d509bc8785ef00cc57426ee79076623008da105"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu May 10 13:33:06 2018 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue May 15 14:10:21 2018 -0700"
      },
      "message": "Require vendor users and groups to start with vendor_\n\nRequire that users and groups found in /vendor/etc/{passwd,group}\nstart with vendor_.  This is needed to compliance with Treble as\nwithout this prefix, it is possible for a new system image to create a\nuser/group name that a vendor has already used, causing a collision.\n\nBug: 79528966\nTest: new unit test\nChange-Id: I07500641e165f41526a8101592d83fa174e7a711\n"
    }
  ],
  "next": "38e960b7aa84dae94be7962d7d70f1f32b87cce6"
}
