)]}'
{
  "log": [
    {
      "commit": "048569be54188fadde19d5e48363e5fe3943023a",
      "tree": "fa84c2e71f765d5fb14998210b4511062559bf15",
      "parents": [
        "e8f815473ba463b875cea757bc0a52fc32f10748"
      ],
      "author": {
        "name": "Andrew Hsieh",
        "email": "andrewhsieh@google.com",
        "time": "Wed Sep 05 19:00:43 2012 +0800"
      },
      "committer": {
        "name": "Andrew Hsieh",
        "email": "andrewhsieh@google.com",
        "time": "Fri Sep 07 12:49:41 2012 +0800"
      },
      "message": "Rename __dso_handle_so.c to __dso_handle_so.h\n\nAlso chang libc/arch-arm/bionic/crtbegin_so.c to include it\nas a header.\n\nChange-Id: Ib91b0b8caf5c8b936425aa8a4fc1a229b2b27929\n"
    },
    {
      "commit": "b2c5bd543dcbbc1b2cbf7afd8b124256ce2c128e",
      "tree": "bc8800e46aecc0a879a8ac707ab9759d1412b132",
      "parents": [
        "26f2e4a1639a959513c4ff5981b4eb52757e8012",
        "144c2918668ac0d506a86478d5b9966ad816cec4"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 05 10:18:43 2012 -0700"
      },
      "committer": {
        "name": "android code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 05 10:18:43 2012 -0700"
      },
      "message": "Merge \"ARM: warn about atexit() calls from legacy shared libraries\""
    },
    {
      "commit": "26f2e4a1639a959513c4ff5981b4eb52757e8012",
      "tree": "f67c125011c1729fd3614304dd7428e6b1bfee22",
      "parents": [
        "82978cae4eec238a9d631d2b61b8985daa02516e",
        "f3cfcd869ded41d25c1f4f4e48e7c374a64f9583"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 05 09:43:35 2012 -0700"
      },
      "committer": {
        "name": "android code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 05 09:43:35 2012 -0700"
      },
      "message": "Merge \"ARM: make CRT_LEGACY_WORKAROUND work as intended\""
    },
    {
      "commit": "069c64cdf2d3da7b7ff6ea5d1041f982fb10ab22",
      "tree": "4aab3b7983679d9dd14605b2547bed4cacb03983",
      "parents": [
        "e026b1d89a0dcada499da186d4d94cc3ce5d3ef3",
        "5ed48a4d7fece002afbbd2bd981563aea6e52e24"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Aug 28 13:04:22 2012 -0700"
      },
      "committer": {
        "name": "android code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 28 13:04:22 2012 -0700"
      },
      "message": "Merge \"ARM: make sure __on_dlclose() actually gets called\""
    },
    {
      "commit": "e026b1d89a0dcada499da186d4d94cc3ce5d3ef3",
      "tree": "d7c48961a139387b230a2c86e0a35412a2572e3f",
      "parents": [
        "ad18073897378d3a13aaa6a7e7005f254ab8c1c8",
        "c23092887fce8bf97ff33f72adf2d454946e7271"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Aug 28 12:49:46 2012 -0700"
      },
      "committer": {
        "name": "android code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 28 12:49:46 2012 -0700"
      },
      "message": "Merge \"ARM: remove dummy entries from .so init_array/fini_array\""
    },
    {
      "commit": "144c2918668ac0d506a86478d5b9966ad816cec4",
      "tree": "5ce7a0dd37fd5722f4c99739cbd2ad11fba87635",
      "parents": [
        "f3cfcd869ded41d25c1f4f4e48e7c374a64f9583"
      ],
      "author": {
        "name": "Ard Biesheuvel",
        "email": "ard.biesheuvel@gmail.com",
        "time": "Tue Aug 28 11:23:06 2012 +0200"
      },
      "committer": {
        "name": "Ard Biesheuvel",
        "email": "ard.biesheuvel@gmail.com",
        "time": "Tue Aug 28 11:23:06 2012 +0200"
      },
      "message": "ARM: warn about atexit() calls from legacy shared libraries\n\nLegacy ARM shared libraries use this generic version of atexit(),\nwhich queues exit functions for invocation at program exit, at\nwhich time the library may have been dlclose()\u0027d, causing the\nprogram to crash.\n\nChange-Id: I41ae153c23268daa65ede7fb8966fc3e9caec369\nSigned-off-by: Ard Biesheuvel \u003card.biesheuvel@gmail.com\u003e\n"
    },
    {
      "commit": "f3cfcd869ded41d25c1f4f4e48e7c374a64f9583",
      "tree": "8024ef0103694c92f553fae4221fc220e1a12b00",
      "parents": [
        "9dfaa63a1c0d1b8e75dd9d7077a8103a19821fa9"
      ],
      "author": {
        "name": "Ard Biesheuvel",
        "email": "ard.biesheuvel@gmail.com",
        "time": "Tue Aug 21 14:13:50 2012 +0200"
      },
      "committer": {
        "name": "Ard Biesheuvel",
        "email": "ard.biesheuvel@gmail.com",
        "time": "Tue Aug 28 10:27:02 2012 +0200"
      },
      "message": "ARM: make CRT_LEGACY_WORKAROUND work as intended\n\nTo properly support legacy ARM shared libraries, libc.so needs\nto export the symbols __dso_handle and atexit, even though\nthese are now supplied by the crt startup code.\n\nThis patch reshuffles the existing CRT_LEGACY_WORKAROUND\nconditionally compiled code slightly so it works as the\noriginal author likely intended.\n\nChange-Id: Id6c0e94dc65b7928324a5f0bad7eba6eb2f464b9\nSigned-off-by: Ard Biesheuvel \u003card.biesheuvel@gmail.com\u003e\n"
    },
    {
      "commit": "c23092887fce8bf97ff33f72adf2d454946e7271",
      "tree": "5ab06b362578d2f936e2e322cb96086d965328c8",
      "parents": [
        "404e28ff8c3352a4fa290ae7769922db0172008e"
      ],
      "author": {
        "name": "Ard Biesheuvel",
        "email": "ard.biesheuvel@gmail.com",
        "time": "Tue Aug 28 09:06:07 2012 +0200"
      },
      "committer": {
        "name": "Ard Biesheuvel",
        "email": "ard.biesheuvel@gmail.com",
        "time": "Tue Aug 28 09:55:51 2012 +0200"
      },
      "message": "ARM: remove dummy entries from .so init_array/fini_array\n\nThe runtime linker parses the ELF section headers to\ndiscover the size of the init_array and fini_array, so\nthere is no point in putting NULL terminators at the end.\n\nChange-Id: I3246cd585efce9314155600277dd829e9f37d04f\nSigned-off-by: Ard Biesheuvel \u003card.biesheuvel@gmail.com\u003e\n"
    },
    {
      "commit": "0a150ead18019c0e4e59417ae3c5e8e0d7d2e4f4",
      "tree": "0eb50d447d6cc6f5d8084e4f0dc452c8bc2d74d8",
      "parents": [
        "404e28ff8c3352a4fa290ae7769922db0172008e"
      ],
      "author": {
        "name": "Ard Biesheuvel",
        "email": "ard.biesheuvel@gmail.com",
        "time": "Tue Aug 21 14:47:58 2012 +0200"
      },
      "committer": {
        "name": "Ard Biesheuvel",
        "email": "ard.biesheuvel@gmail.com",
        "time": "Wed Aug 22 20:45:26 2012 +0200"
      },
      "message": "libc: remove ctors/dtors sections\n\nNone of the supported ARCHs actually populate these sections,\nso there is no point in keeping them in the binaries.\n\nChange-Id: I21a364f510118ac1114e1b49c53ec8c895c6bc6b\nSigned-off-by: Ard Biesheuvel \u003card.biesheuvel@gmail.com\u003e\n"
    },
    {
      "commit": "404e28ff8c3352a4fa290ae7769922db0172008e",
      "tree": "7629a8b01649a2cc760e12e3b46c59508ab70fa9",
      "parents": [
        "1bd035cf119a2e4a667f07907c7860e5ec223cee"
      ],
      "author": {
        "name": "Ard Biesheuvel",
        "email": "ard.biesheuvel@gmail.com",
        "time": "Wed Aug 22 10:37:08 2012 +0200"
      },
      "committer": {
        "name": "Ard Biesheuvel",
        "email": "ard.biesheuvel@gmail.com",
        "time": "Wed Aug 22 20:38:54 2012 +0200"
      },
      "message": "hardening: remove pointless ARM __get_pc() function\n\nUseful if you\u0027re trying to defeat ASLR, otherwise not\nso much ...\n\nChange-Id: I17ebb50bb490a3967db9c3038f049adafe2b8ea7\nSigned-off-by: Ard Biesheuvel \u003card.biesheuvel@gmail.com\u003e\n"
    },
    {
      "commit": "5ed48a4d7fece002afbbd2bd981563aea6e52e24",
      "tree": "1e8bfc4f98621e45f7e9cbd4cd0964dde3043b2e",
      "parents": [
        "1bd035cf119a2e4a667f07907c7860e5ec223cee"
      ],
      "author": {
        "name": "Ard Biesheuvel",
        "email": "ard.biesheuvel@gmail.com",
        "time": "Tue Aug 21 11:34:46 2012 +0200"
      },
      "committer": {
        "name": "Ard Biesheuvel",
        "email": "ard.biesheuvel@gmail.com",
        "time": "Tue Aug 21 12:56:05 2012 +0200"
      },
      "message": "ARM: make sure __on_dlclose() actually gets called\n\nChange-Id: I280e5428b0543cccf17ca36baee4865395928cdb\nSigned-off-by: Ard Biesheuvel \u003card.biesheuvel@gmail.com\u003e\n"
    },
    {
      "commit": "b7beb6907599b36809effe1b4db76039ac649518",
      "tree": "6629ebe3ee4167d4383022edf4fa7882144a5445",
      "parents": [
        "6c98cdb1924afd3e71d39904557933fa10adaebf"
      ],
      "author": {
        "name": "Pavel Chupin",
        "email": "pavel.v.chupin@intel.com",
        "time": "Fri Aug 17 12:53:29 2012 +0400"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 17 12:44:23 2012 -0700"
      },
      "message": "Add link.h for all platforms with dl_phdr_info\n\nThis header is used on bionic build and should be propagated into\nsysroot on toolchain rebuild. Discussion re. this header is here:\nhttp://gcc.gnu.org/ml/gcc-patches/2012-08/msg00936.html\n\nIt is available already in mips NDK platforms:\ndevelopment/ndk/platforms/android-9/arch-mips/include/link.h\n\nChange-Id: I39ff467cdac9f448e31c11ee3e14a6200e82ab57\nSigned-off-by: Pavel Chupin \u003cpavel.v.chupin@intel.com\u003e\n"
    },
    {
      "commit": "6eee1fc68f366651379e776e4e3408069772562f",
      "tree": "433070baed2a5fdad07a47ff6144a0a204662412",
      "parents": [
        "a1822dced3ed8625438b3cbf1c53f907f78a3a48"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Aug 10 14:00:17 2012 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Aug 10 14:12:00 2012 -0700"
      },
      "message": "crtend*: Add GNU_STACK note\n\nAdd a GNU_STACK marker to crtend* files. This tells the linker\nthat these files do not require an executable stack.\n\nWhen linking, a missing GNU_STACK marker in any .o file can prevent\nthe compiler from automatically marking the final executable as NX\nsafe (executable stack not required).  In Android, we normally work\naround this by adding -Wa,--noexecstack / -Wl,-z,noexecstack.\nFor files like crtend.S / crtend_so.S, which are included in every\nexecutable / shared library, it\u0027s better to add the GNU_STACK note\ndirectly to the assembly file.  This allows the compiler to\nautomatically mark the final executable as NX safe without any\nspecial command line options.\n\nReferences: http://www.gentoo.org/proj/en/hardened/gnu-stack.xml\n\nChange-Id: I07bd058f9f60ddd8b146e0fb36ba26ff84c0357d\n"
    },
    {
      "commit": "3460db9490d7aee834dc05f99356e44d7549c538",
      "tree": "23031aed7eda4daf2d4280d0ff133207327b2f7b",
      "parents": [
        "f6ee33cee717f9878d3a43bf76c35547649676d7"
      ],
      "author": {
        "name": "Peter Enderborg",
        "email": "peter.enderborg@sonymobile.com",
        "time": "Mon Jul 09 16:17:17 2012 +0200"
      },
      "committer": {
        "name": "Johan Redestig",
        "email": "johan.redestig@sonymobile.com",
        "time": "Fri Jul 27 15:11:01 2012 +0200"
      },
      "message": "bionic: Stack pointer/signal race condition.\n\nMove the stackpointer so a captured signal does not corrupt\nstack variables needed for __thread_entry.\n\nChange-Id: I3e1e7b94a6d7cd3a07081f849043262743aa8064\n"
    },
    {
      "commit": "9d40326830c2bd407427889c554adeb915ee6b4a",
      "tree": "17c901c0eb9768711be1c299178cbd891624281b",
      "parents": [
        "857fc9eab912fbb3f27913c3582ed2268420bce9"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu May 31 11:40:10 2012 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Jun 01 14:41:27 2012 -0700"
      },
      "message": "arm: rewrite crtbegin* as C files.\n\nRewrite\n crtbegin.S     -\u003e crtbegin.c\n crtbegin_so.S  -\u003e crtbegin_so.c\n\nThis change allows us to generate PIC code without relying\non text relocations.\n\nAs a consequence of this rewrite, also rewrite\n  __dso_handle.S    -\u003e __dso_handle.c\n  __dso_handle_so.S -\u003e __dso_handle_so.c\n  atexit.S          -\u003e atexit.c\n\nIn crtbegin.c _start, place the __PREINIT_ARRAY__, __INIT_ARRAY__,\n__FINI_ARRAY__, and __CTOR_LIST__ variables onto the stack, instead of\npassing a pointer to the text section of the binary.\n\nThis change appears sorta wonky, as I attempted to preserve,\nas much as possible, the structure of the original assembly.\nAs a result, you have C files including other C files, and other\nprogramming uglyness.\n\nResult: This change reduces the number of files with text-relocations\nfrom 315 to 19 on my Android build.\n\nBefore:\n  $ scanelf -aR $OUT/system | grep TEXTREL | wc -l\n  315\n\nAfter:\n  $ scanelf -aR $OUT/system | grep TEXTREL | wc -l\n  19\n\nChange-Id: Ib9f98107c0eeabcb606e1ddc7ed7fc4eba01c9c4\n"
    },
    {
      "commit": "83a73d1afe972014f6c8ff2520fe6d3357421f87",
      "tree": "f7aea2d4044d20ff5236f53e0988d296e3ea8bd8",
      "parents": [
        "1ebb243d1ad7b82887b6b09c972f57f4c820a9f1"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed May 30 11:45:12 2012 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed May 30 11:45:12 2012 -0700"
      },
      "message": "crtbegin: eliminate duplicate code\n\ncrtbegin_dynamic and crtbegin_static are essentially identical,\nminus a few trivial differences (comments and whitespace).\n\nEliminate duplicates.\n\nChange-Id: Ic9fae6bc9695004974493b53bfc07cd3bb904480\n"
    },
    {
      "commit": "8034415ddd8404f8788199ed993af89692235dc5",
      "tree": "18342dbe06d1d56229eb1fb49e466b340989d331",
      "parents": [
        "804147cb7d533f5635da6adc28fbca1467a3078b",
        "08e72d0161e39e99ff1003bf1ce894f37d7b7eb4"
      ],
      "author": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Thu May 10 09:19:59 2012 -0700"
      },
      "committer": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Thu May 10 09:19:59 2012 -0700"
      },
      "message": "resolved conflicts for merge of 08e72d01 to jb-dev-plus-aosp\n\nChange-Id: If00e354a5953ed54b31963d4f8ea77e1603c321e\n"
    },
    {
      "commit": "08e72d0161e39e99ff1003bf1ce894f37d7b7eb4",
      "tree": "87b0528fa23fc00d475454b3585beb4f1f3e7f20",
      "parents": [
        "08b51e2c091d036c124259ae59eb7be6bbe346af"
      ],
      "author": {
        "name": "Prajakta Gudadhe",
        "email": "pgudadhe@nvidia.com",
        "time": "Mon May 07 14:17:44 2012 -0700"
      },
      "committer": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Wed May 09 13:34:31 2012 -0700"
      },
      "message": "bionic: add support for non-NEON memcpy() on NEON SoCs\n\nSome SoCs that support NEON nevertheless perform better with a non-NEON than a\nNEON memcpy().  This patch adds build variable ARCH_ARM_USE_NON_NEON_MEMCPY,\nwhich can be set in BoardConfig.mk.  When ARCH_ARM_USE_NON_NEON_MEMCPY is\ndefined, we compile in the non-NEON optimized memcpy() even if the SoC supports\nNEON.\n\nChange-Id: Ia0e5bee6bad5880ffc5ff8f34a1382d567546cf9\n"
    },
    {
      "commit": "da0d8534f1a6273a383f1dc631fbaf032674bb4d",
      "tree": "a932f1d4194424931c964b96a5f5002b18d3e769",
      "parents": [
        "a674a571dbf0eebf4825f80f3ab229b1d62d49da",
        "08b51e2c091d036c124259ae59eb7be6bbe346af"
      ],
      "author": {
        "name": "Ben Cheng",
        "email": "bccheng@google.com",
        "time": "Wed May 09 01:48:40 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed May 09 01:48:40 2012 -0700"
      },
      "message": "am 08b51e2c: Implement the \"abort\" stub in assembly for ARM.\n\n* commit \u002708b51e2c091d036c124259ae59eb7be6bbe346af\u0027:\n  Implement the \"abort\" stub in assembly for ARM.\n"
    },
    {
      "commit": "08b51e2c091d036c124259ae59eb7be6bbe346af",
      "tree": "c2ecae1c03f94d025bc3937b8326966f76776a08",
      "parents": [
        "efcf8893a97df2eb2ecb7aab305998878771d2f2"
      ],
      "author": {
        "name": "Ben Cheng",
        "email": "bccheng@google.com",
        "time": "Tue May 08 13:36:37 2012 -0700"
      },
      "committer": {
        "name": "Ben Cheng",
        "email": "bccheng@google.com",
        "time": "Tue May 08 14:39:35 2012 -0700"
      },
      "message": "Implement the \"abort\" stub in assembly for ARM.\n\nSo that we can always get the full stack trace regardless of gcc\u0027s handling\nof the \"noreturn\" attribute associated with abort().\n\n[cherry-picked from master]\n\nBUG:6455193\nChange-Id: I0102355f5bf20e636d3feab9d1424495f38e39e2\n"
    },
    {
      "commit": "e636e1f2c17d7097b6638cb4ae2b4857765b502d",
      "tree": "ff8532ad9959f67f53ad28b4d0c68c5427920eef",
      "parents": [
        "2ddea18f8113549511ad56252913ab9ea250bbbf",
        "8657eafc3552f36c176667c1591beab255308da6"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon May 07 13:59:58 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon May 07 13:59:58 2012 -0700"
      },
      "message": "am 8657eafc: Merge \"Adjust memcpy for ARM Cortex A9 cache line size\"\n\n* commit \u00278657eafc3552f36c176667c1591beab255308da6\u0027:\n  Adjust memcpy for ARM Cortex A9 cache line size\n"
    },
    {
      "commit": "fe6338da9168330d44b409b2ee36103e8bfe6697",
      "tree": "904bc5df5c840b96996259fb9658b492161117e3",
      "parents": [
        "f7db5ecc4d662da8368f31d57401ca1a39690e40"
      ],
      "author": {
        "name": "Henrik Smiding",
        "email": "henrik.smiding@stericsson.com",
        "time": "Wed Sep 15 16:08:03 2010 +0200"
      },
      "committer": {
        "name": "Christian Bejram",
        "email": "christian.bejram@stericsson.com",
        "time": "Mon May 07 14:18:02 2012 +0200"
      },
      "message": "Adjust memcpy for ARM Cortex A9 cache line size\n\nARM Cortex A8 use 64 bytes and ARM Cortex A9 use 32 bytes cache line\nsize.\n\nThe following patch:\n  Adds code to adjust memcpy cache line size to match A9 cache line\n  size.\n  Adds a flag to select between 32 bytes and 64 bytes cache line\n  size.\n\n  Copyright (C) ST-Ericsson SA 2010\n    Modified neon implementation to fit Cortex A9 cache line size\n    Author: Henrik Smiding henrik.smiding@stericsson.com for\n            ST-Ericsson.\n\nChange-Id: I8a55946bfb074e6ec0a14805ed65f73fcd0984a3\nSigned-off-by: Christian Bejram \u003cchristian.bejram@stericsson.com\u003e\n"
    },
    {
      "commit": "4a9d6e50bb800eeadf579eb36b63e8b2eedb0d43",
      "tree": "237902797b5e2163c27889e4ff1f8ede513d88bb",
      "parents": [
        "762a4fe2eed6a36b14d3b378c2974ad355d97d54"
      ],
      "author": {
        "name": "Evgeniy Stepanov",
        "email": "eugenis@google.com",
        "time": "Wed Apr 18 12:57:40 2012 +0400"
      },
      "committer": {
        "name": "Evgeniy Stepanov",
        "email": "eugenis@google.com",
        "time": "Wed Apr 18 12:59:38 2012 +0400"
      },
      "message": "Fix segv when unwinding stack past __libc_init.\n\nThis change mirrors cd15bac for statically-linked binaries.\n\nChange-Id: Id870832a50b37f0ef3e79e1ed03ed31390bfc9ef\n"
    },
    {
      "commit": "d5099016f70b5acbfeb969787687099df703a4f4",
      "tree": "ba32e3aaf26560aea0dff1f399e44f59c2800e70",
      "parents": [
        "470835b215c14aa5ff2368527feeff35bfb46a90",
        "cd15bacf334ab254a5f61c3bba100adde1b6b80a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 12 11:52:44 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 12 11:52:44 2012 -0700"
      },
      "message": "Merge \"Fix segv when unwinding stack past __libc_init.\""
    },
    {
      "commit": "470835b215c14aa5ff2368527feeff35bfb46a90",
      "tree": "0d35e1462a36051bf0ab5850b981c54a6ed68c97",
      "parents": [
        "03273f8fc0a7ac2b54fa2c983d4a647580e34458"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Apr 11 14:16:04 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Apr 11 14:24:28 2012 -0700"
      },
      "message": "Move end of __on_dlclose up\n\nThe END macro was put too far down which made the linker complain about\nit. Move up to the end of the code.\n\nChange-Id: Ica71a9c6083b437d2213c7cefe34b0083c78f16b\n"
    },
    {
      "commit": "03273f8fc0a7ac2b54fa2c983d4a647580e34458",
      "tree": "17f5d239e3a94929fdafe78b4358d174e7573c3c",
      "parents": [
        "7f03d2356f1380637d5a38fca20d2cd9b3f6c900"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Apr 10 17:24:24 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Apr 10 17:53:11 2012 -0700"
      },
      "message": "__on_dlclose should be aligned\n\nMarking segments read-only was pushing the alignment of __on_dlclose by\n2 bytes making it unaligned. This change makes sure the ARM code is\naligned to the 4 byte boundary.\n\nBug: 6313309\nChange-Id: Ic2bf475e120dd61225ec19e5d8a9a8b1d0b7f081\n"
    },
    {
      "commit": "cd15bacf334ab254a5f61c3bba100adde1b6b80a",
      "tree": "c01939f5d40d2827551840475b0453affe575f11",
      "parents": [
        "8c4f3ce8d084e3949d77ad8743593b5c83c3d41c"
      ],
      "author": {
        "name": "Evgeniy Stepanov",
        "email": "eugenis@google.com",
        "time": "Tue Apr 10 14:10:11 2012 +0400"
      },
      "committer": {
        "name": "Evgeniy Stepanov",
        "email": "eugenis@google.com",
        "time": "Tue Apr 10 16:45:54 2012 +0400"
      },
      "message": "Fix segv when unwinding stack past __libc_init.\n\nThis change fixes a segmentation fault in the libc unwinder when it goes\npast __libc_init.\n\nUnwind instructions for __libc_init direct it to grab the return address from\nthe stack frame. Without this change, the unwinder gets a wild address and\nlooks up further unwind instructions for the routine at that address. If it\u0027s\nunlucky enough to hit an existing function, it will try to unwind it. Bad\nthings happen then.\n\nWith this change, the return address always points to the _start function,\nwhich does not have unwind instructions associated with it. This stop the\nunwind process.\n\n__libc_init never returns, so this does not affect program execution, other\nthan adding 4 bytes on the main thread stack.\n\nChange-Id: Id58612172e8825c8729cccd081541a13bff96bd0\n"
    },
    {
      "commit": "be101bf39aaaaaee3a96d62fbc4c1136548480de",
      "tree": "af2003dd9e75b71015e03dbf4d5e64fe285c3740",
      "parents": [
        "93cb30813764b140f0adbaa620dcdbb1cae56dd8"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Mar 05 10:45:31 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 05 10:45:31 2012 -0800"
      },
      "message": "Revert \"Reference __dso_handle in PIC way\"\n\nThis reverts commit 93cb30813764b140f0adbaa620dcdbb1cae56dd8"
    },
    {
      "commit": "93cb30813764b140f0adbaa620dcdbb1cae56dd8",
      "tree": "3e96ed0c75c2b4e06edfd7fa1d637bc8142f1f4a",
      "parents": [
        "3690bcb217668a26675a7144637a4eed14bf7741"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Mar 02 13:05:25 2012 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Mar 02 13:09:36 2012 -0800"
      },
      "message": "Reference __dso_handle in PIC way\n\nUse the same pattern in atexit.S to reference __dso_handle in a way that\ndoesn\u0027t require a TEXTREL flag to be set.\n\nChange-Id: Id69d20863ee203d2b2f7ef0db230f9b548657741\n"
    },
    {
      "commit": "4fc127345968c0e75775a6377c6f784ae6600cff",
      "tree": "28f49f7aa5dd646e233c95cd967856b31eed7104",
      "parents": [
        "d638a500e96bdfec2bd3e34fc5545561b60cd9e6",
        "58b2c1616bed68fe5a6a1794c8764b24d29ad8cb"
      ],
      "author": {
        "name": "Andrew Hsieh",
        "email": "andrewhsieh@google.com",
        "time": "Wed Feb 29 09:40:49 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 29 09:40:49 2012 -0800"
      },
      "message": "Merge \"Trivial fix in comment\""
    },
    {
      "commit": "f1a17e762b6fab449cff3006178e42b68e8e241e",
      "tree": "65e9434cc213a1710b2c0369d5a1290d16261546",
      "parents": [
        "d6b58b03b8e046e0bd46d6d7e57290dcabe48860"
      ],
      "author": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Wed Feb 22 15:18:54 2012 -0800"
      },
      "committer": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Wed Feb 22 15:18:56 2012 -0800"
      },
      "message": "libc: Add __aeabi_llsl and __aeabi_llsr to libgcc_compat\n\nSome platform libraries built for ICS do not work with master\nbecause of some refactoring in frameworks/base.\n\nMake sure that these libgcc symbols are always present in our libc\n\nChange-Id: Ib8d345878be0ba711f051082a778f5cc1f1b3a19\nSigned-off-by: Dima Zavin \u003cdima@android.com\u003e\n"
    },
    {
      "commit": "58b2c1616bed68fe5a6a1794c8764b24d29ad8cb",
      "tree": "c278335183202451fd6fc0c107300e1dd1fd072d",
      "parents": [
        "d6b58b03b8e046e0bd46d6d7e57290dcabe48860"
      ],
      "author": {
        "name": "Andrew Hsieh",
        "email": "andrewhsieh@google.com",
        "time": "Tue Feb 21 15:09:32 2012 -0800"
      },
      "committer": {
        "name": "Andrew Hsieh",
        "email": "andrewhsieh@google.com",
        "time": "Tue Feb 21 15:09:32 2012 -0800"
      },
      "message": "Trivial fix in comment\n\nVery, very trivial fix for minor typo in comment about how it works\n\nChange-Id: Ia08d332366837dec8f7e91b9728732c5edea223e\n"
    },
    {
      "commit": "f1a39dce60be0b453416e1b82a6d445a7677eb4b",
      "tree": "8a439b3a8a38480b20cb6e9800d50d0f5e1909a6",
      "parents": [
        "de44d0b2bd32a2c2cc5e2ffb64f8356efd893bca"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Nov 23 14:38:36 2011 +0100"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Nov 23 14:38:36 2011 +0100"
      },
      "message": "libc: Fix typo that broke NDK compatibility.\n\nThe function must be named __atomic_cmpxchg, not __android_cmpxchg.\nThis typo broke existing prebuilt binaries (they couldn\u0027t be loaded\nat runtime anymore).\n\nChange-Id: I25ca7d18329817f0056e616a0409113269ad7b1f\n"
    },
    {
      "commit": "de44d0b2bd32a2c2cc5e2ffb64f8356efd893bca",
      "tree": "7b83cab0619d43bef90d24e2590032759d5e1a7d",
      "parents": [
        "95a17848d3a96000f90cdbfc7ff922182f0003b3",
        "0fec6b9d88ee5a9e359b2208038f9806c0804538"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Nov 22 02:10:06 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Nov 22 02:10:06 2011 -0800"
      },
      "message": "Merge \"libc: provide atomic operations will full barriers for NDK apps.\""
    },
    {
      "commit": "10c8ce59a40a1d8ae8f49145eca365b364aabe58",
      "tree": "5157c1d270cda4e2933a0e7fedf8b5ed6b920f96",
      "parents": [
        "4b469eae40368913b2841b390dada6c58296c602"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Nov 18 15:17:07 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Nov 18 16:40:48 2011 -0800"
      },
      "message": "Add tgkill syscall.\n\nUse tgkill instead of tkill to implement pthread_kill.\nThis is safer in the event that the thread has already terminated\nand its id has been reused by a different process.\n\nChange-Id: Ied715e11d7eadeceead79f33db5e2b5722954ac9\n"
    },
    {
      "commit": "0fec6b9d88ee5a9e359b2208038f9806c0804538",
      "tree": "09eeea71b53e27010352ac913e886459f2ed6c6c",
      "parents": [
        "b38522983712432ba143c046343ba4fa01baf7c8"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Nov 16 17:37:15 2011 +0100"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Nov 16 17:37:15 2011 +0100"
      },
      "message": "libc: provide atomic operations will full barriers for NDK apps.\n\n__atomic_cmpxchg and other related atomic operations did not\nprovide memory barriers, which can be a problem for non-platform\ncode that links against them when it runs on multi-core devices.\n\nThis patch does two things to fix this:\n\n- It modifies the existing implementation of the functions\n  that are exported by the C library to always provide\n  full memory barriers. We need to keep them exported by\n  the C library to prevent breaking existing application\n  machine code.\n\n- It also modifies \u003csys/atomics.h\u003e to only export\n  always-inlined versions of the functions, to ensure that\n  any application code compiled against the new header will\n  not rely on the platform version of the functions.\n\n  This ensure that said machine code will run properly on\n  all multi-core devices.\n\nThis is based on the GCC built-in sync primitives.\n\nThe end result should be only slightly slower than the\nprevious implementation.\n\nNote that the platform code does not use these functions\nat all. A previous patch completely removed their usage in\nthe pthread and libstdc++ code.\n\n+ rename arch-arm/bionic/atomics_arm.S to futex_arm.S\n+ rename arch-x86/bionic/atomics_x86.S to futex_x86.S\n+ remove arch-x86/include/sys/atomics.h which already\n  provided inlined functions to the x86 platform.\n\nChange-Id: I752a594475090cf37fa926bb38209c2175dda539\n"
    },
    {
      "commit": "d9ad62343c2db6b66a5fa597c9b20a6faabd7a9a",
      "tree": "32c3b060bfdc7f792ddb0d0cf95007dc2e809137",
      "parents": [
        "b0641d4a446fa98c72fd6252e5a5ca7e44c41f1f"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Oct 20 14:57:56 2011 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat Oct 22 13:19:23 2011 -0700"
      },
      "message": "Add linker support for PIE\n\nModify the dynamic linker so that executables can be loaded\nat locations other than 0x00000000.\n\nModify crtbegin* so that non-PIC compilant \"thumb interwork\nveneers\" are not created by the linker.\n\nBug: 5323301\nChange-Id: Iece0272e2b708c79034f302c20160e1fe9029588\n"
    },
    {
      "commit": "487b613e572160e80d0700e1bcd0e405420d14ea",
      "tree": "1b412ce8aa13d2a7eb40005cbfdf24b9851d27a4",
      "parents": [
        "0a1b306fe1e86b4d218506d2d3d3e72df8f795ba"
      ],
      "author": {
        "name": "Evgeniy Stepanov",
        "email": "eugenis@google.com",
        "time": "Tue Oct 04 14:22:15 2011 +0400"
      },
      "committer": {
        "name": "Evgeniy Stepanov",
        "email": "eugenis@google.com",
        "time": "Tue Oct 11 12:12:05 2011 +0400"
      },
      "message": "Use ENTRY and EXIT macros for strcmp, memcpy, atexit.\n\nWithout this change strcmp size is zero (not set), and it gets\nignored by Valgrind. Changes to memcpy and atexit don\u0027t affect the\ngenerated binary in any way.\n\nChange-Id: I05818cb5951f75901dc8c0eef02807a2e83a9231\n"
    },
    {
      "commit": "58246b7067b4e1a0b3ce48ccd94331f6fd8fa7cc",
      "tree": "e5f86c8d5a99f7387f28f5b12c06392d381f9dc8",
      "parents": [
        "d50225ad20b4510892dc5f2306b64f04bab6e711"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon Aug 22 19:50:51 2011 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon Aug 22 19:53:10 2011 +0200"
      },
      "message": "libc: Add __aeabi_f2uiz to libgcc_compat.c\n\nThis patch ensure that __aeabi_f2uiz is embedded in our C library.\nThis is needed to avoid breaking certain applications when they are\nloaded in ICS. It is likely that the issue is due to mis-linked\nbinaries generated with the stand-alone toolchain (the problem\nshould not exist if you use ndk-build), but this fix is easier\nthan asking all app developers to fix their custom build system.\n\nIf you want more technical details, read the comments inside\nlibgcc_compat.c\n\nChange-Id: I59ac1fc781ecb70b90b5573c5a3c67560ca8f270\n"
    },
    {
      "commit": "b489666086265eb756f11fd224137c7e3a03a707",
      "tree": "f6eaf3b51b9edc6e81033ee4b5d089815a25ba20",
      "parents": [
        "d0909a874a0b4e2de1468021942c75712a4463fa",
        "1c0a0381dfb3648ffadef9537ec9383d63d62473"
      ],
      "author": {
        "name": "David Turner",
        "email": "digit@android.com",
        "time": "Thu Jun 23 05:28:13 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jun 23 05:28:13 2011 -0700"
      },
      "message": "am 1c0a0381: Merge \"Enable functional DSO object destruction\"\n\n* commit \u00271c0a0381dfb3648ffadef9537ec9383d63d62473\u0027:\n  Enable functional DSO object destruction\n"
    },
    {
      "commit": "39640842823ba4cd42bd11514c0da39aa939519f",
      "tree": "c2cddf3319145716533bc9d12ad1d6bb5c047f59",
      "parents": [
        "4d9b75a9b08c19cef81b22f889edba61257fb356"
      ],
      "author": {
        "name": "Bruce Beare",
        "email": "bruce.j.beare@intel.com",
        "time": "Mon Jun 20 10:29:50 2011 -0700"
      },
      "committer": {
        "name": "Bruce Beare",
        "email": "bruce.j.beare@intel.com",
        "time": "Mon Jun 20 14:44:44 2011 -0700"
      },
      "message": "Enable functional DSO object destruction\n\nUnfortunately, legacy .so files for ARM don\u0027t have a correct crtbegin file.\nConsequently, we have to grandfather the old __dso_handle behaviour.\nAdd some ifdefs for ARM to allow it to use the old code until we can work\nout a transition.\n\nChange-Id: I6a28f368267d792c94e1d985d8344023bc632f6f\nAuthor: H.J. Lu \u003chongjiu.lu@intel.com\u003e\nSigned-off-by: Bruce Beare \u003cbruce.j.beare@intel.com\u003e\n"
    },
    {
      "commit": "a9e409a03530c79bc7ad8144d08e8921ebe0dd02",
      "tree": "1a84390a90eac1aa1ba46c04044134e3f50e81d8",
      "parents": [
        "3f7a3228cdf1a48e379fb297be9114ecd71bff11",
        "a7a9dddb5dfe783d65fec4d3b0dee9f734345a29"
      ],
      "author": {
        "name": "David Turner",
        "email": "digit@android.com",
        "time": "Tue May 17 04:47:09 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue May 17 04:47:09 2011 -0700"
      },
      "message": "am a7a9dddb: Merge \"bionic: Add ARM optimized strcmp()\"\n\n* commit \u0027a7a9dddb5dfe783d65fec4d3b0dee9f734345a29\u0027:\n  bionic: Add ARM optimized strcmp()\n"
    },
    {
      "commit": "f50e9be5930a08fa825b0c23353c802e11369b14",
      "tree": "7d0c8e2dac5c6711b267850890e0f0ccea943bc6",
      "parents": [
        "3ef36b2115d0802e668e325b59af6ef14d999e71"
      ],
      "author": {
        "name": "Jim Huang",
        "email": "jim.huang@linaro.org",
        "time": "Wed Apr 20 15:35:04 2011 +0800"
      },
      "committer": {
        "name": "Jim Huang",
        "email": "jserv@0xlab.org",
        "time": "Wed Apr 20 15:39:43 2011 +0800"
      },
      "message": "bionic: Add ARM optimized strcmp()\n\nReference results of the experiments on TI OMAP3430 at 600 MHz\n\n$ bench_strcmp -N \"strcmp_1k\" -s 1k -I 200\n\n[original C code]\n             prc thr   usecs/call      samples   errors cnt/samp     size\nstrcmp_1k      1   1     10.38000          102        0    15000     1024\n\n[ARM optimized code]\n             prc thr   usecs/call      samples   errors cnt/samp     size\nstrcmp_1k      1   1      3.08840           88        0    15000     1024\n\nThe work was derived from ARM Ltd, contributed to newlib, and reworked\nfor Android by Linaro.\n\nChange-Id: Ib0d5755e1eb9adb07d80ef0252f57a5c4c57a425\nSigned-off-by: Jim Huang \u003cjserv@0xlab.org\u003e\n"
    },
    {
      "commit": "3224c08bd77043338ad6e9ecacbd4c118205e873",
      "tree": "6f6df2236615246498645bdc1b40e33551222b07",
      "parents": [
        "0999f8dcf22cd2ca541314a348720aedcf02ae48",
        "fb723c87490b76d1d2fe521886f7cb6c96ed40b7"
      ],
      "author": {
        "name": "David Turner",
        "email": "digit@google.com",
        "time": "Fri Feb 18 15:22:27 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 18 15:22:27 2011 -0800"
      },
      "message": "Merge changes I8c481c89,I791406f8,I5f09cef8\n\n* changes:\n  libc: ARM: update syscalls with new script\n  libc: ARM: add size info to gensyscalls\n  Add function marks and size indications\n"
    },
    {
      "commit": "420878c6908cf9c2862888477ec3f424a06cf172",
      "tree": "8ed5e7674d62386ea6ec63821af4c53cc062fa19",
      "parents": [
        "3a3c1853aca502ec109e5e97423e9f721035915c"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Feb 16 11:55:58 2011 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Feb 17 09:07:25 2011 -0800"
      },
      "message": "Add function marks and size indications\n\nAdd a macro to annotate function end and start using both ENTRY and END\nfor each function. This allows valgrind (and presumably other debugging\ntools) to use the debug symbols to trace the functions.\n\nChange-Id: I5f09cef8e22fb356eb6f5cee952b031e567599b6\n"
    },
    {
      "commit": "0233509c16046766bea9af6c7053cc6ceecef7a2",
      "tree": "bb6af8b3dfb3c21923a6836b1bb1328be0a6fc7c",
      "parents": [
        "3a3c1853aca502ec109e5e97423e9f721035915c"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Feb 17 07:50:36 2011 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Feb 17 07:50:36 2011 -0800"
      },
      "message": "Amend previous commit with needed include\n\nChange-Id: Idae8daaf095d90513820e05f423144ffed4ba913\n"
    },
    {
      "commit": "3a3c1853aca502ec109e5e97423e9f721035915c",
      "tree": "695e9979089e19b00df1632235e6aae5d2749a15",
      "parents": [
        "0d06b423276208cfc44a67078bbb9dfe2926a0b6"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Feb 16 16:39:04 2011 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Feb 16 16:40:08 2011 -0800"
      },
      "message": "Use CLZ on ARMv5 and newer\n\nChange-Id: Ia5aa6974c0343ae43fbcb91304501213048e9ec0\n"
    },
    {
      "commit": "24dc936346b4a31005ac28c4bd464320cca9320a",
      "tree": "59110104507b3dcb829af8b124e8c036b339b2c2",
      "parents": [
        "9f1a7f933dbf3446d29cbbff959a29f0ab49b308",
        "1bc98ccb76c147c46bd666f05247eb11e2847d4b"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Mon Nov 22 13:34:59 2010 -0800"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Mon Nov 22 13:34:59 2010 -0800"
      },
      "message": "resolved conflicts for merge of 1bc98ccb to gingerbread-plus-aosp\n\nChange-Id: Ief9ec3d0472660e26864e082e03c26e09a043b9d\n"
    },
    {
      "commit": "73c04b32691cb344cb60289a646ded8fc551d09e",
      "tree": "681eb77b37ef319e35172026c87f4b275c2b7f74",
      "parents": [
        "ea0fe8563db2a5854d30b3c770c406356f55cfe8"
      ],
      "author": {
        "name": "Jim Huang",
        "email": "jserv@0xlab.org",
        "time": "Tue Aug 10 17:23:39 2010 +0800"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Mon Nov 22 13:01:32 2010 -0800"
      },
      "message": "bionic: Add ARM optimized strcpy()\n\nReference results of the experiments on Qualcomm MSM7x25 (524MHz):\n\n[original C code]\n             prc thr   usecs/call      samples   errors cnt/samp\nsize\nstrcpy_1k      1   1     14.56159           99        0     1000\n1024\n\n[ARM optimized code]\n             prc thr   usecs/call      samples   errors cnt/samp\nsize\nstrcpy_1k      1   1      3.46653           99        0     1000\n1024\n\nThe work was derived from ARM Ltd.\n\nChange-Id: I906ac53bb7a7285e14693c77d3ce8d4ed6f98bfd\n"
    },
    {
      "commit": "a1727092595a65e4dd9d9a6bae3778ad8c31d77f",
      "tree": "0d6c090d407e9975a8c6682615bc17a50caa05e9",
      "parents": [
        "4f086aeb4aa06e13079b7fec71a8178ceeacf318"
      ],
      "author": {
        "name": "Jim Huang",
        "email": "jserv@0xlab.org",
        "time": "Mon Aug 09 05:35:11 2010 +0800"
      },
      "committer": {
        "name": "Jim Huang",
        "email": "jserv@0xlab.org",
        "time": "Mon Aug 09 05:35:11 2010 +0800"
      },
      "message": "bionic: Rename _ARM_HAVE_LDREX_STREX to __ARM_HAVE_LDREX_STREX for consistency\n\nThe patch follows the naming manner in existing macros with prefix\n__ARM_HAVE.\n\nChange-Id: I6763ce2bf3ee85fd1da112c719543061d8d19bf4\n"
    },
    {
      "commit": "18c5bcc66a9a7b2178dcdcf04a0716958798ab81",
      "tree": "b53f6b74051e06eb57dc11fe512c48c0cffd44d4",
      "parents": [
        "7ed132a1ae6e00593918090a964f5d5b09d77f84"
      ],
      "author": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Thu Jul 29 19:12:04 2010 -0700"
      },
      "committer": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Thu Jul 29 19:12:04 2010 -0700"
      },
      "message": "Revert \"Set SA_RESTORER in sigaction()\"\n\nThis reverts commit e4fa46e75cd0d433b5c6c064720ed7e195cba7c8.\n"
    },
    {
      "commit": "3b43f87d2949a340e2c19cb735af7727157d8274",
      "tree": "ee57622555c0a91461f86ba7201863665380f0c3",
      "parents": [
        "e8f79c1f5de7ecaf1249ee36813abd2558cacf08"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@android.com",
        "time": "Thu Jul 01 23:09:28 2010 -0700"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@android.com",
        "time": "Thu Jul 01 23:09:28 2010 -0700"
      },
      "message": "Allow dlclose() to properly call static C++ destructors.\n\nWith this patch _and_ an upcoming build/ patch, the destruction\nof static C++ objects contained in shared libraries will happen\nproperly when dlclose() is called.\n\nNote that this change introduces crtbegin_so.S and crtend_so.S which\nare currently ignored by the build system.\n\n+ move definition of __dso_handle to the right place\n(before that, all shared libraries used the __dso_handle\nglobal variable from the C library).\n\nNote that we keep a \u0027weak\u0027 __dso_handle in aeabi.c to avoid\nbreaking the build until the next patch to build/core/combo/\nappears. We will be able to remove that later.\n\n+ move bionic/aeabi.c to arch-arm/bionic/ (its proper location)\n\nNOTE: The NDK will need to be modified to enable this feature in\n         the shared libraries that are generated through it.\n\nChange-Id: I99cd801375bbaef0581175893d1aa0943211b9bc\n"
    },
    {
      "commit": "6a9b888d7c4b246f6f66360789c72b754ff85021",
      "tree": "d27e4487c13f200d4cfe193f950e25a01efa7743",
      "parents": [
        "6a09cfd9f916e3a60de707ff0806cdeb143d77a4"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Jun 18 14:47:22 2010 -0700"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Jun 18 16:07:10 2010 -0700"
      },
      "message": "Allow static C++ destructors to be properly called on dlclose().\n\nWith this patch, _and_ an upcoming build/ patch, the destruction\nof static C++ objects contained in shared libraries will happen\nproperly when dlclose() is called.\n\nNote that this change introduces crtbegin_so.S and crtend_so.S which\nare currently ignored by the build system.\n\n+ move definition of __dso_handle to the right place\n  (before that, all shared libraries used the __dso_handle\n   global variable from the C library).\n\n  Note that we keep a \u0027weak\u0027 __dso_handle in aeabi.c to avoid\n  breaking the build until the next patch to build/core/combo/\n  appears. We will be able to remove that later.\n\n+ move bionic/aeabi.c to arch-arm/bionic/ (its proper location)\n\nChange-Id: Ie771aa204e3acbdf02fd30ebd4150373a1398f39\nNOTE: The NDK will need to be modified to enable this feature in\n      the shared libraries that are generated through it.\n"
    },
    {
      "commit": "b8e6c50cfa2d4c4b73e071d0e836a2667db010b1",
      "tree": "f9226eca1f1bce43e0e483a2a4713af2f414911f",
      "parents": [
        "aa4b1d042927872224e4bf5d22e4db5367e389fa"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Thu Mar 25 09:54:33 2010 -0700"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Jun 09 13:18:29 2010 -0700"
      },
      "message": "Fix setjmp()/longjmp() to save FP registers on ARMv7. - DO NOT MERGE\n\nChange-Id: I3a0c2c05e295ac05ed51a531dabda668be204ca0\n"
    },
    {
      "commit": "fcd00ebbdf3e7f4e1e7782a65ae10fb0fc03a1aa",
      "tree": "859e86f36d6bf63ee284c65fff114bbbfdeff38f",
      "parents": [
        "4fdbadde921ec17b4ff9e97fbd41096903b21772"
      ],
      "author": {
        "name": "Andy McFadden",
        "email": "fadden@android.com",
        "time": "Fri May 28 13:31:45 2010 -0700"
      },
      "committer": {
        "name": "Andy McFadden",
        "email": "fadden@android.com",
        "time": "Fri May 28 16:12:01 2010 -0700"
      },
      "message": "Atomic/SMP update, part 3.\n\nUpdate ARM atomic ops to use LDREX/STREX.  Stripped out #if 0 chunk.\n\nInsert explicit memory barriers in pthread and semaphore code.\n\nFor bug 2721865.\n\nChange-Id: I0f153b797753a655702d8be41679273d1d5d6ae7\n"
    },
    {
      "commit": "4fdbadde921ec17b4ff9e97fbd41096903b21772",
      "tree": "988de23c6495657f28fde4703ce656eb806e23cf",
      "parents": [
        "8a1d2cf1422e35257c160ac5bb12dd3ee481c433"
      ],
      "author": {
        "name": "Andy McFadden",
        "email": "fadden@android.com",
        "time": "Wed May 19 22:38:07 2010 -0700"
      },
      "committer": {
        "name": "Andy McFadden",
        "email": "fadden@android.com",
        "time": "Thu May 20 15:59:32 2010 -0700"
      },
      "message": "Atomic/SMP update.\n\nAdded an underscore to _ARM_HAVE_LDREX_STREX to make it match the others.\n\nAdded __ARM_HAVE_DMB and __ARM_HAVE_LDREXD when appropriate.\n\nFixed some typos.\n\nChange-Id: I2f55febcff4aeb7de572a514fb2cd2f820dca27c\n"
    },
    {
      "commit": "4aef0ae660e81ca151a04ce0ddaf956275c70116",
      "tree": "5dff7d6f26806adcff6de018bbb1f89c8c662547",
      "parents": [
        "f4394458301909a83b7ee7f3b436c038b7235ea8",
        "e4fa46e75cd0d433b5c6c064720ed7e195cba7c8"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Thu May 13 14:31:02 2010 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Thu May 13 14:31:02 2010 -0700"
      },
      "message": "merge from open-source master\n\nChange-Id: I2be62bce462ee53fe9519f433523bd7a44a73d40\n"
    },
    {
      "commit": "e4fa46e75cd0d433b5c6c064720ed7e195cba7c8",
      "tree": "88ab07e29e66cff45b3588718fa778c8218c4b6e",
      "parents": [
        "c3581dc78a51180d3550d0d04596657cb2db852c"
      ],
      "author": {
        "name": "Matt Fischer",
        "email": "matt.fischer@garmin.com",
        "time": "Mon Jan 11 10:02:06 2010 +0800"
      },
      "committer": {
        "name": "Garmin Android technology group",
        "email": "android@garmin.com",
        "time": "Wed May 12 14:18:36 2010 -0500"
      },
      "message": "Set SA_RESTORER in sigaction()\n\nGDB looks for specific opcode sequences when trying to recognize a stack\nframe as a signal trampoline.  The sequences it looks for happen to be those\ncreated when SA_RESTORER is set, since glibc always sets a restorer.  This\npatch does the same here, so that the trampolines can be correctly identified.\n\nChange-Id: I0ac574a68818cb24d939c3527f3aaeb04b853d04\n"
    },
    {
      "commit": "88f06cd84a70f8a5212cb03272ec2c7cf0017afa",
      "tree": "4ff0a88177cd5fb2ca9c0e6df9a331cea7ecad1c",
      "parents": [
        "ee7b077abf1d99503b986489ad93374a057cb354"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Thu Mar 18 17:13:41 2010 -0700"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Thu Mar 18 17:13:41 2010 -0700"
      },
      "message": "Use private futexes for pthread_mutex_t.\n\nThis does not change the implementation of conditional variables\nsince we\u0027re waiting for other system components to properly use\npthread_condattr_init/setpshared before that.\n\nAlso remove an obsolete x86 source file.\n\nChange-Id: Ia3e3fbac35b87a534fb04d4381c3c66b975bc8f7\n"
    },
    {
      "commit": "8641833b62e3b319796dc80ea16eb1592c05edf6",
      "tree": "f0b9b778513da0e049ce1b4c706ae5000848d7c1",
      "parents": [
        "ba9c6f0989ae94778ba2b9f597adc827c9dc81e8"
      ],
      "author": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Thu Mar 11 14:47:47 2010 -0800"
      },
      "committer": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Thu Mar 11 14:47:47 2010 -0800"
      },
      "message": "Revert \"bionic: pthread: use private futexes by default for mutexes and condvars\"\n\nThis reverts commit ba9c6f0989ae94778ba2b9f597adc827c9dc81e8.\n"
    },
    {
      "commit": "ba9c6f0989ae94778ba2b9f597adc827c9dc81e8",
      "tree": "2376f2a87f6ac304bd93beca7c8139b890a6227f",
      "parents": [
        "1cfbda826ce66e9bd1507a31b7e6df62e0dbcc6e"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Mar 10 16:44:08 2010 -0800"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Thu Mar 11 11:48:38 2010 -0800"
      },
      "message": "bionic: pthread: use private futexes by default for mutexes and condvars\n\nPrivate futexes are a recent kernel addition: faster futexes that cannot be\nshared between processes. This patch uses them by default, unless the PROCESS_SHARED\nattribute flag is used when creating a mutex and/or conditional variable.\n\nAlso introduces pthread_condattr_init/destroy/setpshared/getpshared.\n\nChange-Id: I3a0e2116f467072b046524cb5babc00e41057a53\n"
    },
    {
      "commit": "ecede4022283650ee4c4ed117a792d6db0b929fd",
      "tree": "20082d00d0ec7d9c6e02327ddcf91ab81b702465",
      "parents": [
        "d7ed1ae98249af8a58ce97784a29f048d77789a9"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Mar 09 16:23:51 2010 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Mar 09 16:23:51 2010 -0800"
      },
      "message": "Only use NEON memcpy if __ARM_NEON__ is defined\n\nChange-Id: I32e6b9385d46efeec15dee8e395a82eef24ba3ea\n"
    },
    {
      "commit": "97cf7f3394780d524038fc083e2c134031b54728",
      "tree": "40b61956bbe4d28babe839c3be40e9f114810e5f",
      "parents": [
        "1a2917ca954f575cc9698c99e54bd93087793c8f"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Jan 22 18:59:05 2010 -0800"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon Jan 25 11:18:30 2010 -0800"
      },
      "message": "Implement clone() C library function properly.\n\nOnly provide an implementation for ARM at the moment, since\nit requires specific assembly fragments (the standard syscall\nstubs cannot be used because the child returns in a different\nstack).\n"
    },
    {
      "commit": "d548a265ca0d998241443504afdcdc12e1507811",
      "tree": "e9f5413f93bcdba6847848ed98e5594b9ce5e0c1",
      "parents": [
        "ff3c8dfced4205eff7eed3902ddf7076c22763e3"
      ],
      "author": {
        "name": "Doug Kwan",
        "email": "dougkwan@google.com",
        "time": "Thu Dec 03 16:26:04 2009 -0800"
      },
      "committer": {
        "name": "Doug Kwan",
        "email": "dougkwan@google.com",
        "time": "Thu Dec 03 16:26:04 2009 -0800"
      },
      "message": "Add missing symbol type directives.\n"
    },
    {
      "commit": "ecac54db21256952b4b4a9c6f17604ec31743183",
      "tree": "4b1142d9fa5d9c2e557e11d045381f3d60b4e8ba",
      "parents": [
        "9e78de3e3c90ec3c2970431d8eae7378fdc0dac6",
        "3ba822cc3f0a252db73cf63cb8390e46fc0ceb0a"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Oct 29 19:53:39 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Oct 29 19:53:39 2009 -0700"
      },
      "message": "am 3ba822cc: am 199f9d92: Improve memcpy performance from 290 MiB/s to 340 MiB/s (17% improvment)\n\nMerge commit \u00273ba822cc3f0a252db73cf63cb8390e46fc0ceb0a\u0027 into eclair-mr2-plus-aosp\n\n* commit \u00273ba822cc3f0a252db73cf63cb8390e46fc0ceb0a\u0027:\n  Improve memcpy performance from 290 MiB/s to 340 MiB/s (17% improvment)\n"
    },
    {
      "commit": "47c5e30b61bad28731e4acff2d690a4207801f27",
      "tree": "c39bb4518e07e74555b2436f0706a41a43ba4939",
      "parents": [
        "53b32f8b7ef0ae319cc048ce1f0a81a4be8bce64",
        "199f9d923804d74e021dd80e48ec75c0a96dba77"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Oct 29 02:44:15 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Oct 29 02:44:15 2009 -0700"
      },
      "message": "am 199f9d92: Improve memcpy performance from 290 MiB/s to 340 MiB/s (17% improvment)\n\nMerge commit \u0027199f9d923804d74e021dd80e48ec75c0a96dba77\u0027 into eclair-plus-aosp\n\n* commit \u0027199f9d923804d74e021dd80e48ec75c0a96dba77\u0027:\n  Improve memcpy performance from 290 MiB/s to 340 MiB/s (17% improvment)\n"
    },
    {
      "commit": "199f9d923804d74e021dd80e48ec75c0a96dba77",
      "tree": "3a00bb9e267cf952d7d1140ff9a39ca07ee6c994",
      "parents": [
        "763ac28357f604e0e4196e0a7ad5b0f5cdcf274a"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Oct 28 02:54:37 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Oct 28 03:17:02 2009 -0700"
      },
      "message": "Improve memcpy performance from 290 MiB/s to 340 MiB/s (17% improvment)\n\nuse 64 bytes cache lines, reduce the main loop to 64-bytes instead of\n128 bytes and adjust the prefetch distance to the optimal value.\n"
    },
    {
      "commit": "581f43056b594429b3df4678d87989c93d8f81d2",
      "tree": "785bf3a7c78b3b4d1474505abf2eaab5961c533f",
      "parents": [
        "b3cfdb6220b9ce8ec6d25984ef086fa06f157236",
        "76ef331cd6967ca8f5af779d25c8b634f8cdd2b6"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Oct 19 17:19:37 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Oct 19 17:19:37 2009 -0700"
      },
      "message": "am 76ef331c: am 7e7d6c48: use local symbols in memset so it doesn\\\u0027t screw up profiling\n\nMerge commit \u002776ef331cd6967ca8f5af779d25c8b634f8cdd2b6\u0027 into eclair-mr2-plus-aosp\n\n* commit \u002776ef331cd6967ca8f5af779d25c8b634f8cdd2b6\u0027:\n  use local symbols in memset so it doesn\u0027t screw up profiling\n"
    },
    {
      "commit": "214dec2811ef893984ce5bceceb28a47d701fa9f",
      "tree": "e1e3da3c55ee13cafd9536c5ada67dc4145ece9f",
      "parents": [
        "cd230988286eb6aa395e051345052773f1943294",
        "7e7d6c48a064af82f0ec39f47b9eb803a6e1df4c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Oct 19 17:09:51 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Oct 19 17:09:51 2009 -0700"
      },
      "message": "am 7e7d6c48: use local symbols in memset so it doesn\\\u0027t screw up profiling\n\nMerge commit \u00277e7d6c48a064af82f0ec39f47b9eb803a6e1df4c\u0027 into eclair-plus-aosp\n\n* commit \u00277e7d6c48a064af82f0ec39f47b9eb803a6e1df4c\u0027:\n  use local symbols in memset so it doesn\u0027t screw up profiling\n"
    },
    {
      "commit": "7e7d6c48a064af82f0ec39f47b9eb803a6e1df4c",
      "tree": "08bb1fdfb2b20de55936bec7bd3844cef997e955",
      "parents": [
        "ff7b46b87c4d85881d88c2105a94be6c6accb628"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Oct 19 16:34:38 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Oct 19 16:34:38 2009 -0700"
      },
      "message": "use local symbols in memset so it doesn\u0027t screw up profiling\n"
    },
    {
      "commit": "1f2a381e844abfb364af7cfc48d8a2cb1e194637",
      "tree": "dc4ff7668a6e055688c82b13e8bbc39a9a21f9f4",
      "parents": [
        "5be45ce0cf81a3904c697a77fa3e73bf85aead8b",
        "fdc5c1f56f9d21034badb8e4b092c47098f19613"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Oct 07 11:48:11 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 07 11:48:11 2009 -0700"
      },
      "message": "am fdc5c1f5: Re-enable ARMv7 memcpy implementation.\n\nMerge commit \u0027fdc5c1f56f9d21034badb8e4b092c47098f19613\u0027 into eclair-plus-aosp\n\n* commit \u0027fdc5c1f56f9d21034badb8e4b092c47098f19613\u0027:\n  Re-enable ARMv7 memcpy implementation.\n"
    },
    {
      "commit": "5be45ce0cf81a3904c697a77fa3e73bf85aead8b",
      "tree": "0d88deb6de28ed99750991a765d763c86654e821",
      "parents": [
        "44e55ba8ebd059206bedefba18708af4774db671",
        "1e40783d9ad29c88a4d547774e05080fc4327a2e"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Oct 07 11:42:33 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 07 11:42:33 2009 -0700"
      },
      "message": "am 1e40783d: Fix armv7-user builds by disabling the ARMv7-optimized memcpy.\n\nMerge commit \u00271e40783d9ad29c88a4d547774e05080fc4327a2e\u0027 into eclair-plus-aosp\n\n* commit \u00271e40783d9ad29c88a4d547774e05080fc4327a2e\u0027:\n  Fix armv7-user builds by disabling the ARMv7-optimized memcpy.\n"
    },
    {
      "commit": "fdc5c1f56f9d21034badb8e4b092c47098f19613",
      "tree": "e46fc6ca820662d33e1dd48ff8fd65a84eac7e83",
      "parents": [
        "1e40783d9ad29c88a4d547774e05080fc4327a2e"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon Oct 05 14:11:55 2009 -0700"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon Oct 05 14:25:10 2009 -0700"
      },
      "message": "Re-enable ARMv7 memcpy implementation.\n\nDo not submit this patch before the one that modifies the Android emulator to\nwork-around a weird ARMv7 emulation issue. This is done to temporarily re-allow\nthe -user builds needed for QA.\n"
    },
    {
      "commit": "1e40783d9ad29c88a4d547774e05080fc4327a2e",
      "tree": "d73c841ff9743e0f78ecd410794998eba693d9db",
      "parents": [
        "fe46030cdd97f9cf810630541df367dd2b85cae9"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Oct 02 19:13:27 2009 -0700"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Oct 02 19:13:27 2009 -0700"
      },
      "message": "Fix armv7-user builds by disabling the ARMv7-optimized memcpy.\n\nThis is required to work-around some corny bugs in ARMv7 emulation.\n\nThe emulation itself is required to run the dex pre-optimization pass\nfor -user builds.\n"
    },
    {
      "commit": "0893d4918742db3b4bd8ef82c4f3008b60de9e2a",
      "tree": "d27f4a2ed629c14bb2e9ec74aeda6cf766e7b9a0",
      "parents": [
        "2d77d4dbd690e2d85b9795e670c3b94f8233e962",
        "7a9e06fa7e4e533074cde314f25dff3024f34a5d"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Sep 29 15:13:15 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Sep 29 15:13:15 2009 -0700"
      },
      "message": "am 7a9e06fa: Merge change I2a7ad975 into eclair\n\nMerge commit \u00277a9e06fa7e4e533074cde314f25dff3024f34a5d\u0027 into eclair-plus-aosp\n\n* commit \u00277a9e06fa7e4e533074cde314f25dff3024f34a5d\u0027:\n  Fix ABI breakage in libc.so and libm.so between 1.6 and Eclair.\n"
    },
    {
      "commit": "7a9e06fa7e4e533074cde314f25dff3024f34a5d",
      "tree": "415721b383792ec3ea8c45a12f6a924ba504b80a",
      "parents": [
        "ee223d02d96815c989b62043ff1237b1cd4e14b0",
        "2a7ad97539313c82e13d36c9c75cefb2982a87d8"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 29 18:04:51 2009 -0400"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 29 18:04:51 2009 -0400"
      },
      "message": "Merge change I2a7ad975 into eclair\n\n* changes:\n  Fix ABI breakage in libc.so and libm.so between 1.6 and Eclair.\n"
    },
    {
      "commit": "2a7ad97539313c82e13d36c9c75cefb2982a87d8",
      "tree": "273eed8deddcc38c67b86e4a9dc90d966444fefa",
      "parents": [
        "33acbf0719c4f3db059bc9e1f52cf554a5d0295f"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Sep 29 14:43:38 2009 -0700"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Sep 29 14:43:38 2009 -0700"
      },
      "message": "Fix ABI breakage in libc.so and libm.so between 1.6 and Eclair.\n\nFor a detailed description of the problem and why this fix is\nneeded, plrease read the comments in libgcc_compat.c\n"
    },
    {
      "commit": "2d77d4dbd690e2d85b9795e670c3b94f8233e962",
      "tree": "f6b1eee82b26ae72026b51c421ef0dd2316eae75",
      "parents": [
        "468fc8c53310b66455f88d47d11775b5995378c5",
        "ee223d02d96815c989b62043ff1237b1cd4e14b0"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Sep 29 13:31:57 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Sep 29 13:31:57 2009 -0700"
      },
      "message": "am ee223d02: NEON optimized memcpy.\n\nMerge commit \u0027ee223d02d96815c989b62043ff1237b1cd4e14b0\u0027 into eclair-plus-aosp\n\n* commit \u0027ee223d02d96815c989b62043ff1237b1cd4e14b0\u0027:\n  NEON optimized memcpy.\n"
    },
    {
      "commit": "ee223d02d96815c989b62043ff1237b1cd4e14b0",
      "tree": "b60fc608c7c0d87da2dfb3015faa3da62fe09335",
      "parents": [
        "33acbf0719c4f3db059bc9e1f52cf554a5d0295f"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sun Sep 27 17:46:43 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Sep 28 19:08:18 2009 -0700"
      },
      "message": "NEON optimized memcpy.\n\n372 MB/s for large transfers, 440 MB/s for smaller ones down to 1KB. 130 MB/s for very small transfers ( \u003c 32 bytes )\nPerformance is similar with non-congruent buffers.\n"
    },
    {
      "commit": "dfa87a200fd3f99e2a8790f2efc12528fba8e756",
      "tree": "96b9e2023148b0377f81cbd57f8f9c3e1c594912",
      "parents": [
        "7e5e9f42706da2f487645a522e907b38fc387910",
        "f355096a64b74c8e869527de55f7e908873e3128"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Sun Sep 27 07:19:59 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sun Sep 27 07:19:59 2009 -0700"
      },
      "message": "am f355096a: Remove NEON optimizations for memcpy\n\nMerge commit \u0027f355096a64b74c8e869527de55f7e908873e3128\u0027 into eclair-plus-aosp\n\n* commit \u0027f355096a64b74c8e869527de55f7e908873e3128\u0027:\n  Remove NEON optimizations for memcpy\n"
    },
    {
      "commit": "f355096a64b74c8e869527de55f7e908873e3128",
      "tree": "914ca013c2b4979b97c639c301a70c41a4785a4a",
      "parents": [
        "bc10cd2900cdb7fed077163b6a33e0f8572b2b19"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Sun Sep 27 07:08:46 2009 -0700"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Sun Sep 27 07:08:46 2009 -0700"
      },
      "message": "Remove NEON optimizations for memcpy\n"
    },
    {
      "commit": "b8a18d059b8bde9a04e5778a0074a54413328472",
      "tree": "809bf4ad3a8790fa09859f480aa7bc217a199eaf",
      "parents": [
        "cdeb4c8afa2fb7b92cce3b32a9d2f3c05ad759ba",
        "bd192b470b69e00e9313680b70c5572a609e535d"
      ],
      "author": {
        "name": "Ben Cheng",
        "email": "bccheng@google.com",
        "time": "Tue Sep 15 14:51:10 2009 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Sep 15 14:51:10 2009 -0700"
      },
      "message": "am bd192b47: Add stack unwinding directives to assembly leaf functions.\n\nMerge commit \u0027bd192b470b69e00e9313680b70c5572a609e535d\u0027 into eclair-plus-aosp\n\n* commit \u0027bd192b470b69e00e9313680b70c5572a609e535d\u0027:\n  Add stack unwinding directives to assembly leaf functions.\n"
    },
    {
      "commit": "bd192b470b69e00e9313680b70c5572a609e535d",
      "tree": "61d3575f3195acab886e3fe74388ff45b76fb539",
      "parents": [
        "824201294b5f3c3ad6ca9d9751d96f78142c5409"
      ],
      "author": {
        "name": "Ben Cheng",
        "email": "bccheng@google.com",
        "time": "Tue Sep 15 13:41:14 2009 -0700"
      },
      "committer": {
        "name": "Ben Cheng",
        "email": "bccheng@google.com",
        "time": "Tue Sep 15 13:41:14 2009 -0700"
      },
      "message": "Add stack unwinding directives to assembly leaf functions.\n\nSo that the real culprit of native crashes can surface in the stack trace.\n"
    },
    {
      "commit": "cdeb4c8afa2fb7b92cce3b32a9d2f3c05ad759ba",
      "tree": "c92b4205ab7379cf157a88b8e9709794e70119fd",
      "parents": [
        "664dac1e959dda5f017571d52ab4a34891800927",
        "76ec6891e2bc18c9e12cd2f567358bb817b24cff"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Tue Sep 15 07:51:39 2009 -0700"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Tue Sep 15 07:51:39 2009 -0700"
      },
      "message": "merge from open-source master\n"
    },
    {
      "commit": "76ec6891e2bc18c9e12cd2f567358bb817b24cff",
      "tree": "4623c956fcb7404faeb72a347620ce65406276a0",
      "parents": [
        "a90528ad3420c571987f2124955646dae88007b6"
      ],
      "author": {
        "name": "vinay harugop",
        "email": "vinay.harugop@stericsson.com",
        "time": "Wed Sep 09 20:53:39 2009 +0530"
      },
      "committer": {
        "name": "vinay harugop",
        "email": "vinay.harugop@stericsson.com",
        "time": "Wed Sep 09 21:01:46 2009 +0530"
      },
      "message": "ARM architecture reference manuals for ARMv6 \u0026 ARMv7 state that the use of \u0027swp\u0027 instruction is deprecated\nARMv6 onwards. These architectures provide the load-linked, store-conditional pair of ldrex/strex whose use\nis recommended in place of \u0027swp\u0027. Also, the description of the \u0027swp\u0027 instruction in the ARMv6 reference\nmanual states that the swap operation does not include any memory barrier guarantees.This fix attempts to\naddress these issues by providing an atomic swap implementation using ldrex/strex under _ARM_HAVE_LDREX_STREX\nmacro.  This Fix is verified on ST Ericsson\u0027s U8500 platform and Submitted on behalf of a third-party:\nSurinder-pal SINGH from STMicroelectronics.\n"
    },
    {
      "commit": "1bbc56cd227546cb155bb47721cdb717780a3400",
      "tree": "d8fa2782b57382a9f94eb4cd51113c842d67eab7",
      "parents": [
        "898cc98f3d6536f7ae1b38340537edecf9a529f2"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Aug 26 21:50:42 2009 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Sep 02 23:21:52 2009 +0200"
      },
      "message": "Neon-optimized versions of memcpy.\n\nThis optimization come from the external 0xdroid repository.\nOriginal patch can be found here:\n\nhttp://gitorious.org/0xdroid/bionic/commit/ebafe41c2c02f8c09a3c1d7746047083df180ac5\n"
    },
    {
      "commit": "3a654b1e04d4275ae315cfe1b196998acf10052c",
      "tree": "79ce08ac573c6c5bd7d7a65f7fdc24237c00452a",
      "parents": [
        "03eabfe65e1e2c36f4d26c78a730fa19a3bdada3"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Jun 03 19:32:37 2009 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Jun 03 19:32:37 2009 +0200"
      },
      "message": "Revert \"Fix the C library initialization to avoid calling static C++ constructors twice.\"\n\nThis reverts commit 03eabfe65e1e2c36f4d26c78a730fa19a3bdada3.\n"
    },
    {
      "commit": "03eabfe65e1e2c36f4d26c78a730fa19a3bdada3",
      "tree": "b965ea27e54b0833639227c619f6e35647c92510",
      "parents": [
        "0353195f344666256dba474a15c9ba22cf0cccc9"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Thu May 28 15:54:03 2009 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Jun 02 23:27:44 2009 +0200"
      },
      "message": "Fix the C library initialization to avoid calling static C++ constructors twice.\n\nThe problem was due to the fact that, in the case of dynamic executables,\nthe dynamic linker calls the DT_PREINIT_ARRAY, DT_INIT and DT_INIT_ARRAY\nconstructors when loading shared libraries and dynamic executables,\n*before* calling the executable\u0027s entry point (i.e. arch-$ARCH/bionic/crtbegin_dynamic.c)\nwhich in turns call __libc_init() in libc.so, as defined by bionic/libc_init_dynamic.c\n\nThe latter did call these constructors array again, mistakenly.\n\nThe patch also updates the documentation of many related functions.\n\nAlso adds a new section to linker/README.TXT explaining restrictions on\nC library usage.\n\nThe patch has been tested on a Dream for stability issues with\nproprietary blobs:\n\n- H264 decoding works\n- Camera + Video recording works\n- GPS works\n- Sensors work\n\nThe tests in system/extra/tests/bionic/libc/common/test_static_cpp_mutex.cpp has been\nrun and shows the static C++ constructor being called only once.\n"
    },
    {
      "commit": "1dc9e472e19acfe6dc7f41e429236e7eef7ceda1",
      "tree": "3be0c520fae17689bbf5584e1136fb820caef26f",
      "parents": [
        "1767f908af327fa388b1c66883760ad851267013"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:28:35 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:28:35 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "1767f908af327fa388b1c66883760ad851267013",
      "tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
      "parents": [
        "a799b53f10e5a6fd51fef4436cfb7ec99836a516"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:13 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:13 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "6d6c82c7a0a6b9a89f61b61c66f9b90d9c7177dc",
      "tree": "8de86895228b63728c3a134c8b1fcab003db467d",
      "parents": [
        "4e468ed2eb86a2406e14f1eca82072ee501d05fd"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri Jan 09 17:50:54 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri Jan 09 17:50:54 2009 -0800"
      },
      "message": "auto import from //branches/cupcake/...@125939\n"
    },
    {
      "commit": "4e468ed2eb86a2406e14f1eca82072ee501d05fd",
      "tree": "4e05b3c66eef86531e464521a3bf96a1864d4bf5",
      "parents": [
        "a27d2baa0c1a2ec70f47ea9199b1dd6762c8a349"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Dec 17 18:03:48 2008 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Dec 17 18:03:48 2008 -0800"
      },
      "message": "Code drop from //branches/cupcake/...@124589\n"
    },
    {
      "commit": "a27d2baa0c1a2ec70f47ea9199b1dd6762c8a349",
      "tree": "defd1cc07d16ad2f3b21154114e092d11c94c5bb",
      "parents": [],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "message": "Initial Contribution\n"
    }
  ]
}
