)]}'
{
  "log": [
    {
      "commit": "4688279db5dcc4004941e7f133c4a1c3617d842c",
      "tree": "db614aaf2e0a02cef4b5f643fa91e9cbcfd7d5ff",
      "parents": [
        "1c861728e5c8dda7589e6595f4850d77ec21a236"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 03 16:49:39 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 07 11:41:10 2012 -0700"
      },
      "message": "Clean up the linker a bit, remove prelinking support.\n\nAlso make the errors more readable, since none of us seemed to know\nwhat they actually meant. The new style is still as verbose as the\nold, but that\u0027s probably necessary in the absence of chained exceptions\nin C. Here\u0027s what you\u0027d see if you try to boot after removing\nlibsurfaceflinger.so:\n\n  32267 32267 E AndroidRuntime: java.lang.UnsatisfiedLinkError: Cannot load library: (linker.c:1629, pid 32259) soinfo_link_image: could not load library \"libsystem_server.so\" needed by \"libandroid_servers.so\"; caused by (linker.c:1629, pid 32259) soinfo_link_image: could not load library \"libsurfaceflinger.so\" needed by \"libsystem_server.so\"; caused by (linker.c:709, pid 32259) load_library: library \"libsurfaceflinger.so\" not found\n\nThis patch also fixes almost all of the compiler warnings.\n\nChange-Id: I64bb59aed6d4e039c15ea45be2367f319ef879f8\n"
    },
    {
      "commit": "1c303981431e3b8542a874370971d50687c6e11a",
      "tree": "aad6b03ec27bbdfd012ec18ecedf7196c6207894",
      "parents": [
        "52f3ee962b384bf247638adb653f0024ce92a895"
      ],
      "author": {
        "name": "Raghu Gandham",
        "email": "raghu@mips.com",
        "time": "Thu Aug 02 17:47:37 2012 -0700"
      },
      "committer": {
        "name": "Raghu Gandham",
        "email": "raghu@mips.com",
        "time": "Thu Aug 02 18:01:05 2012 -0700"
      },
      "message": "[MIPS] Support for TLS register\n\nChange-Id: I6b5194e5e379b573e3b1203d8015e20fb3edd647\nSigned-off-by: Chris Dearman \u003cchris@mips.com\u003e\n"
    },
    {
      "commit": "52d6233296ec84eb5b58fcbf7bc9da4b96a943aa",
      "tree": "b0186ce62c2aedc309501f0bfc641a291d91d3e6",
      "parents": [
        "a7916509a3446afd0e863b03e4204cee73e81555"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 27 17:40:29 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 27 17:43:38 2012 -0700"
      },
      "message": "Report errors to the log, not just stderr.\n\nIn particular this affects assert(3) and __cxa_pure_virtual, both of\nwhich have managed to confuse people this week by apparently aborting\nwithout reason. (Because stderr goes nowhere, normally.)\n\nBug: 6852995\nBug: 6840813\nChange-Id: I7f5d17d5ddda439e217b7932096702dc013b9142\n"
    },
    {
      "commit": "958dad705a8c2c191e4352547fc9950c4feaa9fb",
      "tree": "1c73bc42b0aafd48ea3b8317427939f3d4b970b7",
      "parents": [
        "344aca8ced2522074f799439e201226377d02dba"
      ],
      "author": {
        "name": "Chris Dearman",
        "email": "chris@mips.com",
        "time": "Mon Jul 23 17:30:04 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 24 13:56:38 2012 -0700"
      },
      "message": "Fix implementation of generic atomic operations\n\nChange-Id: Ie1ea5aacc561e2d6d40125d2952ed0e9116b7b0d\n"
    },
    {
      "commit": "f7fb9e1ef1e159be2fded066d126d8e1f111b772",
      "tree": "5b5605e5203bd658fdeef3f1bbef1676c93413c6",
      "parents": [
        "b109e437fcbc1cbe09fce8ce2abb6f951d5a0274"
      ],
      "author": {
        "name": "Raghu Gandham",
        "email": "raghu@mips.com",
        "time": "Fri Jun 29 15:52:55 2012 -0700"
      },
      "committer": {
        "name": "Raghu Gandham",
        "email": "raghu@mips.com",
        "time": "Tue Jul 24 10:30:22 2012 -0700"
      },
      "message": "[MIPS] Add atomic routines\n\nChange-Id: I2cb20ce44dd230d222b7fc1ede2e1e3dce6e692b\n"
    },
    {
      "commit": "8f88aa7d3823ac079fc783651a64dbe986a8205e",
      "tree": "b035e97c14afeaa3f4264c7d4a5caa9ec14a7156",
      "parents": [
        "c2f1d215b1786520fa8c371caa97f062e0bfb513",
        "c5cab3452d5ced55474e56497594579108670b51"
      ],
      "author": {
        "name": "Robert Greenwalt",
        "email": "rgreenwalt@google.com",
        "time": "Tue Jun 12 15:56:29 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jun 12 15:56:29 2012 -0700"
      },
      "message": "am c5cab345: am 028ccf5d: Merge \"Avoid multiple dns lookups for the same query\"\n\n* commit \u0027c5cab3452d5ced55474e56497594579108670b51\u0027:\n  Avoid multiple dns lookups for the same query\n"
    },
    {
      "commit": "c5cab3452d5ced55474e56497594579108670b51",
      "tree": "aa86ebb93eb3a84c1101a2d28edb58c4addc2e1d",
      "parents": [
        "20afd4e70c2f346d7cd03a7a3049f8de2d176d5c",
        "028ccf5d40dd9a945ea92aa79822c08c6f6aa1d2"
      ],
      "author": {
        "name": "Robert Greenwalt",
        "email": "rgreenwalt@google.com",
        "time": "Tue Jun 12 15:52:56 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jun 12 15:52:56 2012 -0700"
      },
      "message": "am 028ccf5d: Merge \"Avoid multiple dns lookups for the same query\"\n\n* commit \u0027028ccf5d40dd9a945ea92aa79822c08c6f6aa1d2\u0027:\n  Avoid multiple dns lookups for the same query\n"
    },
    {
      "commit": "009f38478e6a1c47aa355b0aed80b69ba91b9c61",
      "tree": "4ddfedaecd744900e449d68972157afb99f27908",
      "parents": [
        "76656afc6dd069fcfda5768e6e54bb85e4e99942"
      ],
      "author": {
        "name": "Geremy Condra",
        "email": "gcondra@google.com",
        "time": "Fri Jun 08 14:39:11 2012 -0700"
      },
      "committer": {
        "name": "Geremy Condra",
        "email": "gcondra@google.com",
        "time": "Mon Jun 11 11:30:56 2012 -0700"
      },
      "message": "Added actual event logging calls to the FORTIFY_SOURCE methods.\n\nChange-Id: I3bf4fa8678c33187cb8ce4b75e666ddcd24403ab\n"
    },
    {
      "commit": "8b11c4cec21dc8eedd153866ce738614cfae57e6",
      "tree": "ee313cc132aeda193792e290d1e4749f8f2e1712",
      "parents": [
        "158ad015c2eb8f0a7f0e91db706ca363e634f407"
      ],
      "author": {
        "name": "Geremy Condra",
        "email": "gcondra@google.com",
        "time": "Thu Jun 07 17:45:06 2012 -0700"
      },
      "committer": {
        "name": "Geremy Condra",
        "email": "gcondra@google.com",
        "time": "Fri Jun 08 12:14:48 2012 -0700"
      },
      "message": "Adding event logging to libc.\n\nI\u0027ve basically just copied the relevant bits out of liblog and\nEventLog.cpp. While this will let us do the uid logging we want\nto address the concerns in 245c07027f78565858dd489eb0d94c3d48743e9d\nit doesn\u0027t give us much else.\n\nChange-Id: Icac6ff20bc0a3ade5927f6f76fedffe1ae6f8522\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": "a59cfcfd0821f51ee77f13105099f700ccbf9252",
      "tree": "d7ffc93dc89f31b9a50d6eba201fbfaac9befb9d",
      "parents": [
        "e3bc7192ec4254bed00eb8b352735665c6072995"
      ],
      "author": {
        "name": "Mattias Falk",
        "email": "mattias.falk@sonyericsson.com",
        "time": "Tue Sep 06 15:15:06 2011 +0200"
      },
      "committer": {
        "name": "Bjorn Andersson",
        "email": "bjorn.andersson@sonymobile.com",
        "time": "Mon May 07 18:04:25 2012 -0700"
      },
      "message": "Avoid multiple dns lookups for the same query\n\nIf two or more rapid dns requests for the same server are done\nfrom different threads it turns into separate dns reques, if\nthe response of the request isn\u0027t found in the cache.\n\nThis patch avoid multiple request for the same server by\nletting subsequents request wait until the first request\nhas finished.\n\nChange-Id: Ic72ea0e7d3964a4164eddf866feb4357ec4dfe54\n"
    },
    {
      "commit": "1a78fbb5c8228e4aea2a516818828b76044310f2",
      "tree": "4de785711dbfa8923d721f9180473328b6228a5c",
      "parents": [
        "d5099016f70b5acbfeb969787687099df703a4f4"
      ],
      "author": {
        "name": "Evgeniy Stepanov",
        "email": "eugenis@google.com",
        "time": "Thu Mar 22 18:01:53 2012 +0400"
      },
      "committer": {
        "name": "Evgeniy Stepanov",
        "email": "eugenis@google.com",
        "time": "Fri Apr 13 00:08:11 2012 +0400"
      },
      "message": "Initialize TLS before any application code is run.\n\nSince e19d702b8e33, dlsym and friends use recursive mutexes that\nrequire the current thread id, which is not available before the libc\nconstructor. This prevents us from using dlsym() in .preinit_array.\n\nThis change moves TLS initialization from libc constructor to the earliest\npossible point - immediately after linker itself is relocated. As a result,\npthread_internal_t for the initial thread is available from the start.\n\nAs a bonus, values stored in TLS in .preinit_array are not lost when libc is\ninitialized.\n\nChange-Id: Iee5a710ee000173bff63e924adeb4a4c600c1e2d\n"
    },
    {
      "commit": "faca92f2f17cea192c5fbde4d869aa7620315196",
      "tree": "e8cbfe294c0b00a9de2c928d4cbe9ac915fd0ca7",
      "parents": [
        "126601dd3f5303b50033dcb88945d928aa764aa4"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Mon Mar 26 15:25:19 2012 -0700"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Mon Mar 26 15:38:59 2012 -0700"
      },
      "message": "Handle pthread-related changes (mutex/atfork)\n\nFirst commit:\n\nRevert \"Revert \"am be741d47: am 2f460fbe: am 73b5cad9: Merge \"bionic: Fix wrong kernel_id in pthread descriptor after fork()\"\"\"\n\nThis reverts commit 06823da2f0c8b4a4ce4c45113032f03df85c94b8.\n\nSecond commit:\n\nbionic: fix atfork hanlder_mutex deadlock\n\nThis cherry-picks commit 34e89c232dd5645fe3b5f9b40856d8e3e4cae57a\n\nAfter applying the kernel_id fix, the system refused to boot up and we\ngot following crash log:\nI/DEBUG   (  113): pid: 618, tid: 618  \u003e\u003e\u003e org.simalliance.openmobileapi.service:remote \u003c\u003c\u003c\nI/DEBUG   (  113): signal 16 (SIGSTKFLT), code -6 (?), fault addr --------\nI/DEBUG   (  113):  eax fffffe00  ebx b77de994  ecx 00000080  edx 00724002\nI/DEBUG   (  113):  esi 00000000  edi 00004000\nI/DEBUG   (  113):  xcs 00000073  xds 0000007b  xes 0000007b  xfs 00000000 xss 0000007b\nI/DEBUG   (  113):  eip b7761351  ebp bfdf3de8  esp bfdf3dc4  flags 00000202\nI/DEBUG   (  113):     #00  eip: 00015351  /system/lib/libc.so\nI/DEBUG   (  113):     #01  eip: 0000d13c  /system/lib/libc.so (pthread_mutex_lock)\nI/DEBUG   (  113):     #02  eip: 00077b48  /system/lib/libc.so (__bionic_atfork_run_prepare)\nI/DEBUG   (  113):     #03  eip: 00052cdb  /system/lib/libc.so (fork)\nI/DEBUG   (  113):     #04  eip: 0009ae91  /system/lib/libdvm.so (_Z18dvmOptimizeDexFileillPKcjjb)\nI/DEBUG   (  113):     #05  eip: 000819d6  /system/lib/libdvm.so (_Z14dvmJarFileOpenPKcS0_PP7JarFileb)\nI/DEBUG   (  113):     #06  eip: 000b175e  /system/lib/libdvm.so (_ZL40Dalvik_dalvik_system_DexFile_openDexFilePKjP6JValue)\nI/DEBUG   (  113):     #07  eip: 0011fb94  /system/lib/libdvm.so\n\nRoot cause:\nThe atfork uses the mutex handler_mutex to protect the atfork_head. The\nparent will call __bionic_atfork_run_prepare() to lock the handler_mutex,\nand need both the parent and child to unlock their own copy of handler_mutex\nafter fork. At that time, the owner of hanlder_mutex is set as the parent.\nIf we apply the kernel_id fix, then the child\u0027s kernel_id will be set as\nchild\u0027s tid.\nThe handler_mutex is a recursive lock, and pthread_mutex_unlock(\u0026hander_mutex)\nwill fail because the mutex owner is the parent, while the current tid\n(__get_thread()-\u003ekernel_id) is child, not matched with the mutex owner.\nAt that time, the handler_mutex is left in lock state.If the child wants to\nfork other process after than, then it will try to lock handler_mutex, and\nthen be deadlocked.\n\nFix:\nSince the child has its own copy of vm space from the the parent, the\nchild space\u0027s handler_mutex should be reset to the initialized state.\n\nChange-Id: I3907dd9a153418fb78862f2aa6d0302c375d9e27\nSigned-off-by: Jack Ren \u003cjack.ren@intel.com\u003e\nSigned-off-by: Chenyang Du \u003cchenyang.du@intel.com\u003e\nSigned-off-by: Bruce Beare \u003cbruce.j.beare@intel.com\u003e\n\nChange-Id: Ic8072f366a877443a60fe215f3c00b3df5a259c8\n"
    },
    {
      "commit": "06823da2f0c8b4a4ce4c45113032f03df85c94b8",
      "tree": "eacafbaa2b301b0e28ab145cb4f28e10ae2fd212",
      "parents": [
        "76d56cf4a94e875a8b621025e2780775247adb6e"
      ],
      "author": {
        "name": "Guang Zhu",
        "email": "guangzhu@google.com",
        "time": "Mon Mar 12 22:05:36 2012 -0700"
      },
      "committer": {
        "name": "Guang Zhu",
        "email": "guangzhu@google.com",
        "time": "Mon Mar 12 22:05:36 2012 -0700"
      },
      "message": "Revert \"am be741d47: am 2f460fbe: am 73b5cad9: Merge \"bionic: Fix wrong kernel_id in pthread descriptor after fork()\"\"\n\nThis reverts commit 76d56cf4a94e875a8b621025e2780775247adb6e, reversing\nchanges made to c59ba4595be25a1213955233fcf9bcd1afe6438e.\n\nBug: 6157577\n"
    },
    {
      "commit": "76d56cf4a94e875a8b621025e2780775247adb6e",
      "tree": "9101c17f6134d7c2f18a956fb50816695689e888",
      "parents": [
        "c59ba4595be25a1213955233fcf9bcd1afe6438e",
        "be741d472868a8ffcb455588f18cda889b0f465c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 12 17:12:35 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Mar 12 17:12:35 2012 -0700"
      },
      "message": "am be741d47: am 2f460fbe: am 73b5cad9: Merge \"bionic: Fix wrong kernel_id in pthread descriptor after fork()\"\n\n* commit \u0027be741d472868a8ffcb455588f18cda889b0f465c\u0027:\n  bionic: Fix wrong kernel_id in pthread descriptor after fork()\n"
    },
    {
      "commit": "d8bc6e7119450f263afcf89c8b581f6aaa23d186",
      "tree": "00a129ca73e415545e7a629ceb1ec4e7bbe525ef",
      "parents": [
        "a58c88c235bfeeb17ac495991e66f7b906935852"
      ],
      "author": {
        "name": "Jack Ren",
        "email": "jack.ren@intel.com",
        "time": "Tue Jan 17 16:27:42 2012 +0800"
      },
      "committer": {
        "name": "Jack Ren",
        "email": "jack.ren@intel.com",
        "time": "Mon Mar 12 23:14:56 2012 +0800"
      },
      "message": "bionic: Fix wrong kernel_id in pthread descriptor after fork()\n\nAfter forking, the kernel_id field in the phtread_internal_t returned by pthread_self()\nis incorrect --- it\u0027s the tid from the parent, not the new tid of the\nchild.\n\nThe root cause is that: currently the kernel_id is set by\n_init_thread(), which is called in 2 cases:\n(1) called by __libc_init_common(). That happens when the execv( ) is\ncalled after fork( ). But when the zygote tries to fork the android\napplication, the child application doesn\u0027t call execv( ), instread, it\ntries to call the Java main method directly.\n(2) called by pthread_create(). That happens when a new thread is\ncreated.\n\nFor the lead thread which is the thread created by fork(), it should\ncall execv() but it doesn\u0027t, as described in (1) above. So its kernel_id\nwill inherit the parent\u0027s kernel_id.\n\nFixed it in this patch.\n\nChange-Id: I63513e82af40ec5fe51fbb69456b1843e4bc0fc7\nSigned-off-by: Chenyang Du \u003cchenyang.du@intel.com\u003e\nSigned-off-by: Jack Ren \u003cjack.ren@intel.com\u003e\nSigned-off-by: Bruce Beare \u003cbruce.j.beare@intel.com\u003e\n"
    },
    {
      "commit": "11f3d5a4319e6e37e5280cf187b3d173e1ac0adb",
      "tree": "8c67346daa2fab7c3b2a0ab62defbfbf5a53acd5",
      "parents": [
        "68d03fdbd8eb4d0e40dcdfbfa5e6c6dd931b467a"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Jan 13 13:26:50 2012 +0100"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Jan 13 13:26:50 2012 +0100"
      },
      "message": "libc: Copy private C library declarations to private/\n\nThis patch is the first in a series that aims at cleaning up the\npublic C library headers (which end up being distributed with the NDK).\n\n\u003cresolv.h\u003e and \u003ctime.h\u003e contain declarations that should not be public.\nThey are used by other parts of the platform, but NDK applications should\nnot use or rely on them.\n\nSo copy them to private \u003cbionic_time.h\u003e and \u003cresolv_iface.h\u003e headers\nand use a guard macro to avoid conflicts when both headers are included\nat the same time.\n\nThe idea is that we\u0027re going to fix the other platform modules to\ninclude these private headers. After this is done, we will remove the\nduplicate definitions from \u003cresolv.h\u003e and \u003ctime.h\u003e\n\nChange-Id: I121c11936951c98ca7165e811126ed8a4a3a394d\n"
    },
    {
      "commit": "e31bfae2baa96742f998155ee26e56c826a8ce3a",
      "tree": "b12cfb44ad035c26278f42fa9b19095e90b79e95",
      "parents": [
        "8180b08fb2f27052f9df2ae4787bb5bf409f13e0"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@android.com",
        "time": "Tue Nov 15 15:47:02 2011 +0100"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Nov 16 16:28:10 2011 +0100"
      },
      "message": "bionic: Do not use \u003csys/atomics.h\u003e for platform code.\n\nWe\u0027re going to modify the __atomic_xxx implementation to provide\nfull memory barriers, to avoid problems for NDK machine code that\nlink to these functions.\n\nFirst step is to remove their usage from our platform code.\nWe now use inlined versions of the same functions for a slight\nperformance boost.\n\n+ remove obsolete atomics_x86.c (was never compiled)\n\nNOTE: This improvement was benchmarked on various devices.\n      Comparing a pthread mutex lock + atomic increment + unlock\n      we get:\n\n  - ARMv7 emulator, running on a 2.4 GHz Xeon:\n       before: 396 ns    after: 288 ns\n\n  - x86 emulator in KVM mode on same machine:\n       before: 27 ns     after: 27 ns\n\n  - Google Nexus S, in ARMv7 mode (single-core):\n       before: 82 ns     after: 76 ns\n\n  - Motorola Xoom, in ARMv7 mode (multi-core):\n       before: 121 ns    after: 120 ns\n\nThe code has also been rebuilt in ARMv5TE mode for correctness.\n\nChange-Id: Ic1dc72b173d59b2e7af901dd70d6a72fb2f64b17\n"
    },
    {
      "commit": "d53cae0e45dafdb3a83ccc3675051c0aee532111",
      "tree": "c8771059f9c172b0da3b05f7e4903e1225008635",
      "parents": [
        "b8ef90d67950c5d4e04f95c30e164e924f41f70a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 11 15:41:28 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Sep 16 12:38:28 2011 -0700"
      },
      "message": "Add non-NDK internal API __pthread_gettid\n\nTracking bugs 5267571 and 5090073 (for deadlock detection logs).\n\nChange-Id: Icb90f91ec1525607551c2234ef921bf88296484f\n"
    },
    {
      "commit": "c99376836021e6623516cf38d42259d38e1a480f",
      "tree": "369350c5eb46452d6c693d8d6aa4286012dccd51",
      "parents": [
        "368ee1e4d65c555fdb0fa4b3a91d75a397936908"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Wed Jul 06 12:58:56 2011 -0700"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Wed Jul 06 12:58:56 2011 -0700"
      },
      "message": "Revert \"Revert \"libc: Add logcat error message for memory corruption\"\"\n\nThis reverts commit 368ee1e4d65c555fdb0fa4b3a91d75a397936908.\n"
    },
    {
      "commit": "368ee1e4d65c555fdb0fa4b3a91d75a397936908",
      "tree": "bab57744349e2a22c98a07c83d130983d0df5e9c",
      "parents": [
        "877923d369c953d601afd461a04854a27ec720fd"
      ],
      "author": {
        "name": "Mathew Inwood",
        "email": "mathewi@google.com",
        "time": "Wed Jul 06 16:51:54 2011 +0100"
      },
      "committer": {
        "name": "Mathew Inwood",
        "email": "mathewi@google.com",
        "time": "Wed Jul 06 16:51:54 2011 +0100"
      },
      "message": "Revert \"libc: Add logcat error message for memory corruption\"\n\nThis fixes the build.\n\nThis reverts commit 7708a89c60e7b024d31c48c8034932c5e9f0aceb.\n"
    },
    {
      "commit": "7708a89c60e7b024d31c48c8034932c5e9f0aceb",
      "tree": "d74fbfa8efa44b57fe91e768b4bea8834c49dd31",
      "parents": [
        "2f5c6d2d663591b0b5cff9f7e90f58f12a5967eb"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@android.com",
        "time": "Thu Jun 30 18:32:03 2011 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@android.com",
        "time": "Tue Jul 05 19:53:53 2011 +0200"
      },
      "message": "libc: Add logcat error message for memory corruption\n\nOur dlmalloc implementation currently calls abort() when it detects\nthat the heap is corrupted, or that an invalid pointer is passed to\none of its functions.\n\nThe only way to detect this is because abort() will force-fully\ncrash the current program with a magic fault address of \u00270xdeadbaad\u0027.\n\nHowever, this is not really well documented, and a frequent topic\non the android-ndk forum (among others).\n\nThis change makes our dlmalloc code dump a simple message to the\nlog just before the abort() call (and hence before the stack trace)\nto better help identify the problem.\n\nChange-Id: Iebf7eb7fe26463ecadfaca8f247d237edb441e3c\n"
    },
    {
      "commit": "cc32fbc3050079aa020ac39afb1c84b5e72737a8",
      "tree": "801c71abe576923c52326e22693d83aa2a5a58d8",
      "parents": [
        "2be3f09f2d9b6d35b262f7a6148f51c164bb8cbb",
        "23d3e6b21b4b6debff87da8c6558495e564cc38e"
      ],
      "author": {
        "name": "Robert Greenwalt",
        "email": "rgreenwalt@google.com",
        "time": "Thu Jun 23 10:20:38 2011 -0700"
      },
      "committer": {
        "name": "Android Code Review",
        "email": "code-review@android.com",
        "time": "Thu Jun 23 10:20:38 2011 -0700"
      },
      "message": "Merge \"Add support for a dns cache per interface\""
    },
    {
      "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": "23d3e6b21b4b6debff87da8c6558495e564cc38e",
      "tree": "12c38b3f07f332621e4cedf34dd9ac118428b7d5",
      "parents": [
        "b127b1f208e67d74a7ee94ad2bd0ffb2fed3af6b"
      ],
      "author": {
        "name": "Mattias Falk",
        "email": "mattias.falk@sonyericsson.com",
        "time": "Mon Apr 04 16:12:35 2011 +0200"
      },
      "committer": {
        "name": "Johan Redestig",
        "email": "johan.redestig@sonyericsson.com",
        "time": "Wed Jun 08 15:39:29 2011 +0200"
      },
      "message": "Add support for a dns cache per interface\n\nInitial commit for dns cache per interface.\nAdded a type that holds a reference to a\ncache and name of associated interface,\naddress of interface, name server(s)\nassociated with an interface etc.\n\nNew functions to set default interface,\naddress of name servers etc.\n\nChange-Id: Ie991bc5592fd998409853d8bf77d7fe69035dac5\n"
    },
    {
      "commit": "dc3bc87b43d0d73d89cca59692b80de878e11a5d",
      "tree": "8f67ff271139055a7dd842b11028f00b86abc4bc",
      "parents": [
        "9062a2369107eadb2b45973adc3246cba35640e6"
      ],
      "author": {
        "name": "Mark D Horn",
        "email": "mark.d.horn@intel.com",
        "time": "Tue Apr 26 14:05:30 2011 -0700"
      },
      "committer": {
        "name": "Bruce Beare",
        "email": "bruce.j.beare@intel.com",
        "time": "Tue May 24 13:31:50 2011 -0700"
      },
      "message": "Update X86 Bionic CRT files for unwind/exceptions\n\nSeveral updates to Bionic crt*.o files to implement Linux/x86\nstack unwind/exception handling.\nMark __dso_handle as hidden.\nNote: Requires complete rebuild due to CRT changes. Google will\nneed to regenerate and check-in all the prebuilt x86 CRT object\nfiles and libraries which link to them.\n\nChange-Id: I191ce1afb0dee7bbc28dcd9694e5919226dbd070\nSigned-off-by: Bruce J Beare \u003cbruce.j.beare@intel.com\u003e\nSigned-off-by: Mark D Horn \u003cmark.d.horn@intel.com\u003e\nAuthor: Lu, Hongjiu \u003chongjiu.lu@intel.com\u003e\n"
    },
    {
      "commit": "6a51defa034a1c033ed01f7de444c0a4fc615249",
      "tree": "87b93dbfe8ab9c61d80d4a6036c66b0982b72c73",
      "parents": [
        "22f1e3d4fae7d45cc439da94690d786ed44756fb"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Aug 27 08:19:19 2010 -0700"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Aug 27 08:19:19 2010 -0700"
      },
      "message": "Fix __get_tls() in static C library to use kernel helpers.\n\nThis is needed to fix gdbserver\u0027s handling of threaded programs,\namong other things.\n\nChange-Id: I823387c602cef9891532da946a01db14be780ab0\n"
    },
    {
      "commit": "50ace4fec5e8cb5afcbc656a4556fa528adfd760",
      "tree": "04647e039a457f69ba48a8301bebdd605fda7fca",
      "parents": [
        "6a9b888d7c4b246f6f66360789c72b754ff85021"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Jun 16 16:36:41 2010 -0700"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Jun 22 17:51:41 2010 -0700"
      },
      "message": "Remove compiler warnings when building Bionic.\n\nAlso add missing declarations to misc. functions.\nFix clearerr() implementation (previous was broken).\nHandle feature test macros like _POSIX_C_SOURCE properly.\n\nChange-Id: Icdc973a6b9d550a166fc2545f727ea837fe800c4\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": "6c8a2f2a5bc8d612ee953f528f2b5eb35983656a",
      "tree": "7dd45d3e3162220578e93a6cb7244b4209b1c7c5",
      "parents": [
        "038fbae518e904c7aba64779714a22dbeeb90887"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Thu Jun 10 23:34:24 2010 -0700"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Jun 11 13:49:09 2010 -0700"
      },
      "message": "libc: remove cutils dependencies\n\nWe simply copy the stuff we need from cutils headers.\n\nA future patch will change cutils to include the private \u003cbionic_atomic_inline.h\u003e\n\nChange-Id: Ib6fd9a03bc9e337ce867bd606dc94c2b4438480a\n"
    },
    {
      "commit": "6304d8b21891fd0cb7b5a4c25159a3d3b1709d62",
      "tree": "8ab9c2bf6022f139b7af2eabda11846abf684171",
      "parents": [
        "a8a21488630980c1d2a2152d0ac39bd7978879e2"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Jun 02 18:12:12 2010 -0700"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Jun 08 17:04:49 2010 -0700"
      },
      "message": "Use private futexes for semaphores, unless they are initialized with pshared !\u003d 0.\n\nChange-Id: I534e36a7171cd37037ae03b910ba71ea6968286d\nNote: previously, sem_init() would return an error if pshared !\u003d 0.\n"
    },
    {
      "commit": "d378c68d74cb4fdac450650fe816c9d649c8edaf",
      "tree": "0d5c15b4606982f26009bdc5c572415ac9dd18d3",
      "parents": [
        "d7ed1ae98249af8a58ce97784a29f048d77789a9"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon Mar 08 15:13:04 2010 -0800"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon Mar 08 15:22:13 2010 -0800"
      },
      "message": "Fix spurious DNS lookups in the C library.\n\nThe problem was that the \u0027defdname\u0027 field of res_state structure\nwas not properly initialized in __res_vinit(). This field is used\nto store the default domain name, which is normally build from\ncalling gethostname() (see line 549 of res_init.c).\n\nUnfortunately, in the typical Android case, gethostname() returns\nan error (the hostname is configured) and a random stack string is\nused later to build the DNS search list (see lines 556+ in res_init.c)\n\nFor the sake of illustration, let\u0027s say the search list is set to\na random value like \u0027xWLK\u0027.\n\nThe end result is that when trying to result an unknown domain name\n(e.g. \u0027www.ptn\u0027), the query fails then the resolver tries to make a\nnew query with the DNS search list path(s) appended (e.g. \u0027www.ptn.xWLK\u0027).\n\nThe patch simply initializes \u0027defdname\u0027 to an empty string to avoid\nthis when the net.dns.search system property is not set.\n\nAlso contains whitespace/formatting fixes\n"
    },
    {
      "commit": "7910e39d197bc32ed79a144d06279c2be3c7f296",
      "tree": "2be732d00b499cd6d2e1be8084ba81730ca6c113",
      "parents": [
        "7ed086eb99a0dc326bf47fb387fa8be394fe3da4",
        "4a05d12cf52a9a40759f11f28543bd75715c8f00"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Sep 22 15:41:36 2009 -0700"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Sep 22 15:41:36 2009 -0700"
      },
      "message": "resolved conflicts for merge of 4a05d12c to eclair-plus-aosp\n"
    },
    {
      "commit": "4a05d12cf52a9a40759f11f28543bd75715c8f00",
      "tree": "2d0beafae4775320beea102649b491b05fa50f8e",
      "parents": [
        "916edf2a3fc60e08a5f29cd322d9f2a04d15cb49"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Sep 18 13:35:05 2009 -0700"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Sep 22 10:03:59 2009 -0700"
      },
      "message": "Fix TLS access for ARMv6 and beyond.\n\nFor performance reasons, we don\u0027t call the kernel helper. Instead, we directly\naccess the TLS register on ARMv6 and higher. For ARMv5TE, keep using the hard-coded\naddress populated by the kernel on each task switch.\n\nNOTE: Since we don\u0027t call the kernel helper, this must precisely match your\n      kernel configuration. This is controlled by setting the ARCH_ARM_HAVE_TLS_REGISTER\n      variable to \u0027true\u0027 in your board configuration file.\n"
    },
    {
      "commit": "a246a71975c1b4a939421ed20fdd8557f93de46f",
      "tree": "4b22fcf89ca32961cb12ef7b9a3bf9752ea22d65",
      "parents": [
        "c7f65a01e5ac3c4d3599ea3508459ecd6b54a71d"
      ],
      "author": {
        "name": "vinay harugop",
        "email": "vinay.harugop@stericsson.com",
        "time": "Wed Aug 05 02:09:29 2009 +0530"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Wed Sep 16 14:38:40 2009 -0700"
      },
      "message": "Linux kernel helpers support is provided to android for its TLS implementation. This fix addresses this by modifying\nthe TLS access functions to use the kernel helper.\nThis Fix is verified on ST Ericsson\u0027s U8500 platform and Submitted on behalf of a third-party:\nSurinder-pal SINGH from STMicroelectronics.\n"
    },
    {
      "commit": "ef0bd1857041ffde069cf52138aaf22c1af7130e",
      "tree": "c61b6ca4b286821ff473533183eba42e7da234a3",
      "parents": [
        "348065586a2e6154d6cff36afa6e00af6bbc5918"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Jul 17 17:55:01 2009 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Jul 17 17:55:01 2009 +0200"
      },
      "message": "Pass the elfdata pointer in a slot of the temporary TLS area.\n\nThis is needed to properly initialize the C runtime when libc.so\nis loaded by the dynamic linker.\n\nMove the temporary TLS setup before the first system call, just\nin case something really horrible happens, we won\u0027t crash when\ntrying to write an error code in \u0027errno\u0027\n\nRemove the broken TLS_SLOT_THREAD_ID setup. First, this slot\nshould normally receive the address of a pthread_internal_t,\nnot a kernel thread identifier. Second, it is never used by\nthe linker anyway.\n\nAlso remove an obsolete comment.\n"
    },
    {
      "commit": "c4eee3765bf9dd81ff055e70ff7daa83a3926d2a",
      "tree": "fca5f9156dba6f7a3278699da9665c138c08f816",
      "parents": [
        "6ee8f1b0444c0db94931d2cd64427ded8fba38b0"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Jul 08 14:22:41 2009 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Jul 10 00:32:08 2009 +0200"
      },
      "message": "Prevent a crash in the memory leak checker (which happened in chk_free())\n\nSimplify the code a little, removing un-necessary mutex locks/unlocks.\nProvide slightly better diagnostic message in case of corruption.\nUse snprintf/strlcat instead of sprintf/strcat\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": "6f04a0f4c72acff80dad04828cb69ef67fa609d1",
      "tree": "915db7d93cb742f72b5d3819e69f48cb29c40a15",
      "parents": [
        "2489551343aa89fc539f369f7689c941b78c08d1"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Thu Feb 19 10:57:29 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Thu Feb 19 10:57:29 2009 -0800"
      },
      "message": "auto import from //branches/cupcake/...@132276\n"
    },
    {
      "commit": "e5cc1f386b167b9f7bfdebc7219e89aa9b71e4b2",
      "tree": "2cbd43daa6744ed80e833528f8cbfc0c485e5253",
      "parents": [
        "6d6c82c7a0a6b9a89f61b61c66f9b90d9c7177dc"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Thu Jan 15 16:12:07 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Thu Jan 15 16:12:07 2009 -0800"
      },
      "message": "auto import from //branches/cupcake/...@126645\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"
    }
  ]
}
