)]}'
{
  "log": [
    {
      "commit": "5d8112029d0e085c5a0099257daa4c7e29c12310",
      "tree": "b98a1b83095ebd34feb3140e6910ec7e830bce0a",
      "parents": [
        "8a8c84114b16b8971bc2d3c5c7e0e31470d1a68b"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Mar 08 13:21:22 2016 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Mar 08 13:46:37 2016 +0000"
      },
      "message": "Propagate InstructionSetFeatures to ElfBuilder.\n\nThis is subset of CL171665 and it separates it into two.\nIt will be needed to generate .MIPS.abiflags ELF section.\n\nChange-Id: I5557e7cb98d0fa1dc57c85cf6161e119c6d50a1a\n"
    },
    {
      "commit": "4fda4eb799c95be266f52aaf3461a440ea86b841",
      "tree": "54a7e56b5633caf2b868f6028010b488eb1923ce",
      "parents": [
        "3c258f4d7a6492af733a9351ba430d876a3e5ccf"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Feb 05 13:34:46 2016 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Feb 08 11:33:50 2016 +0000"
      },
      "message": "Move code related to debug info generation to its own directory.\n\ndebug/dwarf/ contains helper classes which hide the details\nof the DWARF file format. It acts as independent DWARF library.\n\ndebug/ contains ART-specific code which generates ELF debug\nsections (which includes non-DWARF sections like .symtab).\n\nChange-Id: Id351f604e4e64be2ca395a78324ea02e30481497\n"
    },
    {
      "commit": "131980fc9aeb2b4d03480443e0fb494c76ce03a2",
      "tree": "a071f8a706146ed4279c3cbe933d9a46910f480d",
      "parents": [
        "68cebffee2f44f0345bd7be7e4cbad0f10e64082"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Dec 03 18:29:23 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 04 15:58:02 2015 +0000"
      },
      "message": "Add ElfWriter::GetStream().\n\nThis will be used for writing the OatHeader which is\ncurrently oddly written through the .text stream.\n\nAlso move the error delaying output stream out of the\nElfBuilder\u003c\u003e to its own file and move all output stream\nfiles to compiler/linker/.\n\nChange-Id: I00db4e33ed80ac4757ec459946c7b5ae014a3a2e\n"
    },
    {
      "commit": "6d8c8f0344a706df651567387ede683ab3ec1b5f",
      "tree": "2c2fe153db3dd59de6b175b040d1209e2e76728e",
      "parents": [
        "2264f624e41acf09b17c3961bd52966e43f2b58f"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Oct 26 10:57:09 2015 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Sun Nov 08 20:17:13 2015 +0000"
      },
      "message": "Rewrite ElfBuilder to make streaming directly to file easier.\n\nThe previous design required knowing all the sections and their\nsizes before even the first byte of the file was written.\n\nThe new design allows sections to be written one by one without\nany knowledge of later sections.  Furthermore, as soon as\nsection is started, its virtual memory address is known,\nwhich removes the need for the various patching passes.\n\nThe new ElfBuilder essentially tries to be a thin wrapper\naround OutputStream which keeps track where the various\nsections start/end and then writes their ELF headers.\n\nChange-Id: I817e7f3b41882e4e4b9b442cfe56e4ef2e26babd\n"
    },
    {
      "commit": "80afd02024d20e60b197d3adfbb43cc303cf29e0",
      "tree": "ef054c7b4f2a739f7cf063e0bc4c501c2c7e41b5",
      "parents": [
        "559b178e34c5d92e7932f92e5d8a981ac334606f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 19 18:08:00 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 26 15:59:02 2015 +0100"
      },
      "message": "ART: Clean up arm64 kNumberOfXRegisters usage.\n\nAvoid undefined behavior for arm64 stemming from 1u \u003c\u003c 32 in\nloops with upper bound kNumberOfXRegisters.\n\nCreate iterators for enumerating bits in an integer either\nfrom high to low or from low to high and use them for\n\u003carch\u003eContext::FillCalleeSaves() on all architectures.\n\nRefactor runtime/utils.{h,cc} by moving all bit-fiddling\nfunctions to runtime/base/bit_utils.{h,cc} (together with\nthe new bit iterators) and all time-related functions to\nruntime/base/time_utils.{h,cc}. Improve test coverage and\nfix some corner cases for the bit-fiddling functions.\n\nBug: 13925192\nChange-Id: I704884dab15b41ecf7a1c47d397ab1c3fc7ee0f7\n"
    },
    {
      "commit": "ad5fa8c5b26a325dc2a9521b87188755046c17f3",
      "tree": "1be28a827fe9e186196ad744eaa3438c1bea3f0a",
      "parents": [
        "cfee0507f26375fe048ed35f402e61f904db0095"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed May 06 18:27:35 2015 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue May 19 15:36:53 2015 +0100"
      },
      "message": "Support generation of CFI in .debug_frame format.\n\n.debug_frame section is almost identical to .eh_frame section.\nThere are only minor differences in the CIE and FDE headers.\nThe main difference is that .eh_frame is intended to be used\nat runtime for exception handling and is therefore allocated\nwithin the running program whereas .debug_frame is not.\n\nThis makes .debug_frame easier to remove using standard tools.\n\"objcopy --strip-debug\" removes .debug_frame, but not .eh_frame.\n(although objcopy can be still be forced to remove .eh_frame)\n\nSimilarly, we might want to separate the CFI to separate debug\nfile or include it as compressed .gnu_debugdata section.\nIt is more appropriate to use .debug_frame for this purpose.\n\nBug:20556771\nChange-Id: I9d91a333b9fb37523fd6fafccfad89b21d2477af\n"
    },
    {
      "commit": "bc90fd09e09a845ae6ea0d84ad67560575a94142",
      "tree": "400ccfd60a231ce9bf03fcbad025d724da63a48e",
      "parents": [
        "0c5bbc11a6af7b4f83b3929bc99de690635095c0"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Apr 22 19:40:27 2015 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Apr 30 12:29:29 2015 +0100"
      },
      "message": "Major refactoring of ElfBuilder.\n\nSimplify ElfBuilder by removing duplicated or redundant code.\nMany of the repeated code patterns were replaced by just\nlooping over the list of all sections.\n\nMethods Init() and Write() have been merged into one.\nThe split between those was rather arbitrary, but it was there\nfor a reason.  It allowed creation of raw sections between\nthe calls which may have depended on layout decisions done in\nInit(), but not in Write() (e.g. knowing of offset of .text).\n\nThis has been replaced by more generic solution.\nAll sections are asked about their size first and complete\nfile layout is calculated.  Then the sections are asked to\nwrite their content (potentially using the layout information).\n\nThis should be pure refactoring CL - the compiler should\nproduce bit for bit identical output as before.\n\nChange-Id: I281d13d469801bd8288b36b360d200d98a3e92d7\n"
    },
    {
      "commit": "0c5bbc11a6af7b4f83b3929bc99de690635095c0",
      "tree": "4d72ed70efa866e94804e9a6fb210cad34a9abc4",
      "parents": [
        "1c5808c0fa83155565f5319808a2949e0a3f5789"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Apr 28 17:54:52 2015 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Apr 28 18:13:35 2015 +0100"
      },
      "message": "Minor refactoring of ElfBuilder.\n\n * Nest section builder classes within the main builder\n   class to reduce verbosity caused by templates.\n * Move .eh_frame and .eh_frame_hdr section headers earlier\n   so that the section headers are sorted by file offset.\n * Do not emit PT_NULL header if .eh_frame_hdr is missing.\n\nNone of these changes should have any material impact.\nThis CL just prepares ground for the following CL.\n\nChange-Id: I56f9825892adb01d413a18ca10cb5c805cb8cd78\n"
    },
    {
      "commit": "533c207f9d2da6d913c4b10f6f757fe9d6367b10",
      "tree": "1e2c1bf5c91898e785398a3d66e7e7570e8b29db",
      "parents": [
        "8d1ba74fe48703fc2b5a5920dd5eea0c65db5b15"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Apr 22 12:20:22 2015 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Apr 22 16:56:23 2015 +0100"
      },
      "message": "Simplify template parameters of Elf classes.\n\nThe ELF specification defines several types which differ between\n32-bit ELF and 64-bit ELF.  We used to template all ELF-related\nmethods on all of those types which was very verbose.\n\nThis CL wraps all the types as typedefs in ElfTypes32 and ElfTypes64.\nOne of those wrappers is then used as the template parameter.\n\nChange-Id: I65247c2c79d92a7c4799e988cf3e4a1b10eb4788\n"
    },
    {
      "commit": "f0dec62af300eaacfe3e8621276ee89a7d76346e",
      "tree": "c82ca25ee0df9ef31e83723b3976da11cff03a54",
      "parents": [
        "bbf02afc641a393d33342976e269218668c07386",
        "527c9c71f0c6e2f9943ac028e7c050500699a44b"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Apr 21 20:30:41 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 21 20:30:42 2015 +0000"
      },
      "message": "Merge \"Generate .eh_frame_hdr section and PT_GNU_EH_FRAME segment.\""
    },
    {
      "commit": "527c9c71f0c6e2f9943ac028e7c050500699a44b",
      "tree": "09e6794e5b184ce33ca468c972a8ef2faff7f174",
      "parents": [
        "e7bee3b7d307508243f4a00b5cf8a8867fcaaff5"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Apr 17 21:14:10 2015 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Apr 21 19:47:42 2015 +0100"
      },
      "message": "Generate .eh_frame_hdr section and PT_GNU_EH_FRAME segment.\n\nFixes issue 20125400 - ART: Need .eh_frame_hdr and PT_GNU_EH_FRAME\nfor libunwind.\n\n.eh_frame_hdr serves two purposes. Firstly, it can optionally contain\nbinary search table for fast eh_frame lookup. This is important for\nC++ exception handling, but we do not need it so we omit it.\nSecondly, it contains a relative .eh_frame pointer which makes it\neasier for run-time code to locate the .eh_frame section.\nlibunwind seems to rely on this relative pointer.\n\nBug: 20125400\nChange-Id: I7c1e3f68d914f70781404c508395831a3296a7da\n"
    },
    {
      "commit": "3e52aa4d406fe802dabee2a2e7ba8764cc13aaaa",
      "tree": "81b2d22b3fae45a0c92e688a3502335c02397934",
      "parents": [
        "f458ba7d9c04bc8d499532b5470af28db18e4149"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Sun Apr 12 07:45:18 2015 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Apr 21 12:37:13 2015 +0100"
      },
      "message": "Move GetAndroidToolsDir to common location.\n\nMove the code which looks for the prebuilts directory\nto CommonRuntimeTest and add test for it.\n\nChange-Id: Id804de31c466656957fdd4b6a470f80a00477aed\n"
    },
    {
      "commit": "15c1975f5fa5ae646ae87b57394bfdae1090a236",
      "tree": "6f43d273a55a01b3e556f2c48e5e0ac13e7057c4",
      "parents": [
        "1ded5beffa4bae6203e1fa03903c6ffa2766bf4c"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Mar 31 14:53:55 2015 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Mar 31 15:54:51 2015 +0100"
      },
      "message": "Revert \"Revert \"Add small library for writing of DWARF data.\"\"\n\nUse objdump from prebuilts.\n\nThis reverts commit 1ded5beffa4bae6203e1fa03903c6ffa2766bf4c.\n\nChange-Id: I91f61a91827406930039ccf8691359b1c2636640\n"
    },
    {
      "commit": "1ded5beffa4bae6203e1fa03903c6ffa2766bf4c",
      "tree": "94d7d6016c5a58d6c5f31d8350330c8025baa014",
      "parents": [
        "75c3d61011a06c1253e773c42e53ee6f137dbe53"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 31 14:18:47 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 31 14:18:47 2015 +0000"
      },
      "message": "Revert \"Add small library for writing of DWARF data.\"\n\nobjdump differences on the bots\n\nThis reverts commit 75c3d61011a06c1253e773c42e53ee6f137dbe53.\n\nChange-Id: Ie5947a27b9fe5de9d5f0838a024b5cf646ec701e\n"
    },
    {
      "commit": "75c3d61011a06c1253e773c42e53ee6f137dbe53",
      "tree": "2ebc4f07a5e176dd92340b18a42fbb97280c2c89",
      "parents": [
        "c8924c6ea9e83ba3832dd5551df38ab06f4aaca9"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Mar 26 16:33:17 2015 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Mar 31 11:22:37 2015 +0100"
      },
      "message": "Add small library for writing of DWARF data.\n\nChange-Id: Ifa77aec7584bfcdcc05ddb049c160be9b6dda7c5\n"
    }
  ]
}
