)]}'
{
  "log": [
    {
      "commit": "e8df33e879f37de56c05a54812bf8bf8a08ecb9c",
      "tree": "270f748b2a15b72ff033089ae4242639837d3df3",
      "parents": [
        "7d9f95f29d07c455c3ab76d89b7952755a3e0a28",
        "91cb54e6caf8b06546c416e7f7467f1c03b3a757"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Jan 22 15:02:12 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jan 22 15:02:12 2016 +0000"
      },
      "message": "Merge \"Create helper class for DWARF expressions.\""
    },
    {
      "commit": "91cb54e6caf8b06546c416e7f7467f1c03b3a757",
      "tree": "ec445c2b9ee1f3ad4051162be56c56d244da8cd0",
      "parents": [
        "0e78aedf507512abcb730851025547645cd48c9c"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Jan 15 13:47:59 2016 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Jan 22 14:40:41 2016 +0000"
      },
      "message": "Create helper class for DWARF expressions.\n\nThis ensures we generate valid DWARF opcodes and\nit slightly simplifies the debug info writer.\n\nChange-Id: I2ef8a9222c9a129c58f500741acd209b67e2ecff\n"
    },
    {
      "commit": "91d65e024846717fce3572106cffe9b957b8902c",
      "tree": "22ea1a91afdd552a31bb2365a9eae034ae0a1c9b",
      "parents": [
        "1bcbcf8e848d18b19d248c3d15f77c888f2b5f04"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Jan 19 15:59:16 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Jan 19 15:59:16 2016 +0000"
      },
      "message": "Fix various typos in ART\u0027s comments and string literals.\n\nChange-Id: I85d628055b1a61647a77fef730c9631c234e22a2\n"
    },
    {
      "commit": "fffbee4d158259633ec7b7f712eaf75be86bd4e5",
      "tree": "05b9ae8b23be722cf8c2a6a979cc3706437ecf71",
      "parents": [
        "55380bbe098bace4375d77a2b77d05ef88dfe6f6"
      ],
      "author": {
        "name": "Tamas Berghammer",
        "email": "tberghammer@google.com",
        "time": "Fri Jan 15 13:09:34 2016 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Jan 18 14:35:14 2016 +0000"
      },
      "message": "Report types loaded during init to the native debugger\n\nThe runtime loads a lot of type before it creates the jit from the\nboot image and from hard coded source code (e.g. primitive arrays).\nThis change emits type information for these types after the jit has\nbeen created. At the same time we remove the type info generation\nthat happens during AOT compilation because that type information can\nbe modified by a class loader at runtime.\n\nChange-Id: Ie5b3b3df9d01c7200a1f670a98d9cbee796234e9\n"
    },
    {
      "commit": "03c941f585c9d6124ea658d3136496ecff9b52a5",
      "tree": "47c7e1144026bdc185bbb7ab749859aafb90e998",
      "parents": [
        "697cc25fadc4fb2bb233a285853f7d415ed75214"
      ],
      "author": {
        "name": "Tamas Berghammer",
        "email": "tberghammer@google.com",
        "time": "Fri Jan 15 13:39:57 2016 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Jan 18 14:18:32 2016 +0000"
      },
      "message": "Emit some additional debug info for java.lang.String\n\nThe value part of java.lang.String is not a proper ArtField so the\ndefault debug info writing code don\u0027t emit debug info about that. This\nCL add logic to emit debug info for a new member what represents the\nfirst element of the underlying string data what can be used by the\nconsumer of the debug info to display the value of the string.\n\nChange-Id: Ibc11b143e79aa8866000d02922bcd6069cfcd4c2\n"
    },
    {
      "commit": "86e4278d5edc3685465b8846dcb17efa83c86d75",
      "tree": "53c9af36418ed8872be46271a86a481075e78854",
      "parents": [
        "b8a20aafa13d59112dcbf1df858b8d1d61cfb708"
      ],
      "author": {
        "name": "Tamas Berghammer",
        "email": "tberghammer@google.com",
        "time": "Tue Jan 05 14:29:02 2016 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Jan 13 15:56:52 2016 +0000"
      },
      "message": "Add DWARF type information generation.\n\nEmit native debugging information for types which are used during\ncompilation.\n\nChange-Id: If28d19f60294494b7c6db8400d179494bebe9e61\n"
    },
    {
      "commit": "5cc349f3dd578e974f78314c50b6a0267c23e591",
      "tree": "7d8bf706fd6aba6f298bfe212f75db0f66e94b81",
      "parents": [
        "a38e418fb2d9b817309c54b54ca85039907c2bbb"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Dec 18 15:04:48 2015 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Jan 13 15:39:12 2016 +0000"
      },
      "message": "Report DWARF debug information for JITed code.\n\nChange-Id: Ia5b2133c54386932c76c22774cf3d2ae61e0925f\n"
    },
    {
      "commit": "e0febdfc2d9585d0d1b4a562b8e44d9058c71c37",
      "tree": "a31e5e2447bbf52052fa22cf93ec54ca3a8e51a6",
      "parents": [
        "67feb1701277cd90be15f86c7633752721408b57"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Dec 17 20:53:07 2015 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Dec 18 15:08:23 2015 +0000"
      },
      "message": "Move debug symbol writing code to elf_writer_debug.cc\n\nI want to be able to use this code without needing to\nreference elf_writer_quick.\n\nChange-Id: I87ccedc540b8f04b53be0fc6344a5947308ffcb6\n"
    },
    {
      "commit": "96c9de9510b33e2c8def669c4dfcb65db729e7d2",
      "tree": "7949b6c0289b63ab48004569489a3d0fe102b7be",
      "parents": [
        "74768fb83073a2ae84c9173d4fc53654e3092b24",
        "b06e28e5b9fbabe3e69b18f31bf353eaff5d0c1f"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Dec 15 15:29:17 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Dec 15 15:29:17 2015 +0000"
      },
      "message": "Merge \"Refactor DexFile::DecodeDebugInfo.\""
    },
    {
      "commit": "b06e28e5b9fbabe3e69b18f31bf353eaff5d0c1f",
      "tree": "18ff419c6a3b80ecff3125f13b72a8851e848ab0",
      "parents": [
        "f71b3ade9c99ce2fec2f5049ce9c5968721e1b81"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Dec 10 13:15:00 2015 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Dec 15 15:11:50 2015 +0000"
      },
      "message": "Refactor DexFile::DecodeDebugInfo.\n\nSplit the method into two - one for locals and one for positions.\nAll uses of the method request only one of the two and it makes the\ncode slightly cleaner. The position variant requires fewer parameters.\n\nExpose additional line table information which was previously ignored\nby the decode method (prologue, epilogue, source file).\n\nChange-Id: Idf8ba98fa58ea0d2103932b5cc0af81365885107\n"
    },
    {
      "commit": "7b000c9d9dd34f1857bcd561daf04742bbacdd76",
      "tree": "83a54a794cb6b87910599d3b47a269cb1bdacd15",
      "parents": [
        "a79c717fd4de0d7361a51bee1e3cf4f2ff5f085a",
        "8c55712f2202782cfe02c5dda9b65ec410ea7475"
      ],
      "author": {
        "name": "Tamas Berghammer",
        "email": "tberghammer@google.com",
        "time": "Fri Dec 11 11:48:00 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Dec 11 11:48:00 2015 +0000"
      },
      "message": "Merge \"Set DW_AT_comp_dir for each compile unit in dwarf\""
    },
    {
      "commit": "f71b3ade9c99ce2fec2f5049ce9c5968721e1b81",
      "tree": "fcda284846a6a468e39aec2783812d2d1129a35e",
      "parents": [
        "d48015603a54b820d287d92709825765159615f0"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Dec 08 15:05:08 2015 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Dec 10 16:18:54 2015 +0000"
      },
      "message": "Get source mapping table from stack maps.\n\nStack maps contain pc to dex mapping.\nReuse them instead of maintaining separate map.\n\nChange-Id: Iaaec9a6bd2603eace1dfc8f4344087883d88cce3\n"
    },
    {
      "commit": "8c55712f2202782cfe02c5dda9b65ec410ea7475",
      "tree": "f8a614193f9635d9283706ac271b98203798a80a",
      "parents": [
        "f9a9f2bba730a4f47aa84d2b97d3f52f6a73ac1f"
      ],
      "author": {
        "name": "Tamas Berghammer",
        "email": "tberghammer@google.com",
        "time": "Thu Dec 10 15:06:25 2015 +0000"
      },
      "committer": {
        "name": "Tamas Berghammer",
        "email": "tberghammer@google.com",
        "time": "Thu Dec 10 15:09:57 2015 +0000"
      },
      "message": "Set DW_AT_comp_dir for each compile unit in dwarf\n\nThe dex file don\u0027t contain the full path of the compilation dir so we\nset it to a symbolic value ($JAVA_SRC_ROOT) what can be remapped by\nthe tools reading the dwarf information.\n\nChange-Id: Ia011de14a6b36a29b54b3f3fa290cc3157a0b91d\n"
    },
    {
      "commit": "996ed0b8d99c6d692ae71b86b18ec5df5293a431",
      "tree": "57a5b140323e8e0fe88024b5eb28455aa142cb55",
      "parents": [
        "533ffe5369cdaeb8ab7986b1fefece32351c0366"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Nov 27 10:27:11 2015 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Dec 09 16:52:47 2015 +0000"
      },
      "message": "Add local variables to DWARF.\n\nChange-Id: Ic915643a898e45380710de86a7944cc27403bd7f\n"
    },
    {
      "commit": "d1744d449cf2b56af7e0896b3729fac2a414e3af",
      "tree": "cd23e1e0a3cea10cc9a9ae8269a01f75ada8ef0e",
      "parents": [
        "e51e3f988ba91f0469757738fa55f835e16e37d9",
        "10c13565474de2786aad7c2e79757ea250747a15"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Dec 01 10:16:19 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Dec 01 10:16:19 2015 +0000"
      },
      "message": "Merge \"Refactor oat file writing to give Dex2Oat more control.\""
    },
    {
      "commit": "10c13565474de2786aad7c2e79757ea250747a15",
      "tree": "759bdf7aab97ab45e1a3e09f5d627e568f6e7084",
      "parents": [
        "e928dc587718d00d234768f76d1efb2ffe74e885"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 25 14:33:36 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Nov 30 18:19:44 2015 +0000"
      },
      "message": "Refactor oat file writing to give Dex2Oat more control.\n\nThis is the first step towards writing dex files to oat file\nand mapping them from there for the actual AOT compilation.\n\nChange-Id: Icb0d27487eaf6ba3a66c157e695f9bdc5bb9cf9a\n"
    },
    {
      "commit": "3dd7e5a1ed9692774f4d4f812fbe75dfc288053d",
      "tree": "3924d46d651ed131e5ce05c0fb1379cd6f21634e",
      "parents": [
        "e928dc587718d00d234768f76d1efb2ffe74e885"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Nov 27 13:31:16 2015 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Nov 27 13:31:16 2015 +0000"
      },
      "message": "Temporarily omit MIPS floating point registers in DWARF.\n\nI am struggling to find authoritative source for the mapping,\nso disable them in the meantime so they do not break tests.\n\nChange-Id: I37340179f5d2fe91f318b64ddf64a725ce96ab76\n"
    },
    {
      "commit": "0fd295f8663e658de429f85f241a142169477335",
      "tree": "6d675ac1fcf29d8cb54a6f27fc5a55325566d79a",
      "parents": [
        "b9ededb3b5c5422a925bb0e3b4b54ae95bf371fd"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Nov 16 16:39:10 2015 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Nov 25 11:58:06 2015 +0000"
      },
      "message": "Add stack locations to DWARF parameters.\n\nTranslate StackMap to DWARF location attributes so that the\ndebugger knows where to read the run-time value from.\n\nChange-Id: I8b2baf23f37e6e7ff6f76e18077d880f0c1cf57d\n"
    },
    {
      "commit": "04b0526d60de4e9979fc486d2ba655247d211d0b",
      "tree": "f1557aea44abe67f83b74e332fc8d8c28192a3ff",
      "parents": [
        "349baca032735e4a386b74709aa94d17f076cbce"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Nov 09 18:05:48 2015 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Nov 20 16:30:38 2015 +0000"
      },
      "message": "Encode function signatures properly in DWARF.\n\nThe signatures were previously stored as plain string.\nThe proper way in DWARF is to store them as structured tree of tags.\n(for example, DW_TAG_subprogram containing DW_TAG_formal_parameter)\n\nNote that this makes the debug sections smaller since DWARF\nsignatures are actually more efficient than just plain strings.\n\nChange-Id: I6afbce28340570666d8674d07c0e324aad561dd5\n"
    },
    {
      "commit": "b851b49eee0a77720347a4f777c07d4531302655",
      "tree": "7ac29ad35fbd39e7a2dd5c6243ef02336fee4be5",
      "parents": [
        "5f5509a17b04dcacf964eefc169cdfbb3014278b"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Nov 11 20:19:38 2015 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Nov 11 21:03:37 2015 +0000"
      },
      "message": "Stream DWARF debug section directly to disk.\n\nChange the structure so that the debug sections are written to\ndisk as we go.  There are still some temporary buffers, however,\nwe no longer hold all of the data in memory before writing it.\nWe can not avoid buffering of some things (e.g. .debug_str).\n\nChange-Id: Id4940cf10ae5b6f3cac7fb8d20197f0304079b92\n"
    },
    {
      "commit": "5f5509a17b04dcacf964eefc169cdfbb3014278b",
      "tree": "2a7ab03dea32a74d5033547c21d9e8a75f0f523b",
      "parents": [
        "ce0f43b97ffb5e4d14c5df6607d8efb46a5dc9d2"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Nov 11 20:38:16 2015 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Nov 11 20:38:16 2015 +0000"
      },
      "message": "Move .debug_line before .debug_info.\n\nSwap the order since .debug_info depends on .debug_line, but\nnot vice versa.  This is for disk streaming convenience.\n\nChange-Id: Iabe18fea97aa5527aedfc55c9bdf66e5587568bc\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": "35831e8bfa1c0944d4c978d99c4c5b9577945170",
      "tree": "a347ecaf4265a1713c86d528392e162d5edfaebc",
      "parents": [
        "171b12e8060f63cf900ffc43d6db35125f6b8c83"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Sep 11 11:59:18 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 27 15:13:37 2015 +0000"
      },
      "message": "Reduce memory used by CompiledMethods.\n\nUse LengthPrefixedArray\u003c\u003es instead of SwapVector\u003c\u003es to store\nCompiledMethod data and get rid of the unnecessary members\nof CompiledMethod to reduce dex2oat memory usage. Refactor\nthe deduplication from CompilerDriver to a new class.\n\nUse HashSet\u003c\u003e instead of std::set\u003c\u003e for the DedupeSet\u003c\u003e to\nfurther decrease the memory usage and improve performance.\n\nThis reduces the dex2oat memory usage when compiling boot\nimage on Nexus 5 (with Optimizing, -j1) by ~6.75MiB (5%).\nThis also reduces the compile time by ~2.2% (~1.6% dex2oat\ntime; with Optimizing, without -j).\n\nChange-Id: I974f1f5e58350de2bf487a2bca3907fa05fb80ea\n"
    },
    {
      "commit": "c04c800e7bda94abfadc8c2d30f58c50b261b612",
      "tree": "c4096b86bde3b8be56be21bf1a72b7a04f227430",
      "parents": [
        "f68c8545382925062da2b87169ca2b5314f0b431"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jul 14 11:37:54 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 15 10:44:34 2015 +0100"
      },
      "message": "Revert \"Revert \"Revert \"Revert \"Make dex2dex return a CompiledMethod after quickening.\"\"\"\"\n\nThis reverts commit ed6195a514e3253576af27ea9ba13038509d29ac.\n\nChange-Id: Icb58854301e8982147cdebe3edf2e0d9e0a63a56\n"
    },
    {
      "commit": "ed6195a514e3253576af27ea9ba13038509d29ac",
      "tree": "79a2bbbab8cb36523056539d374d5d79e7e5ee4a",
      "parents": [
        "f075879649686e59b7a9065c5a061dbfdcdfbecc"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 13 17:02:30 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 13 17:02:30 2015 +0000"
      },
      "message": "Revert \"Revert \"Revert \"Make dex2dex return a CompiledMethod after quickening.\"\"\"\n\nBreaks again in some configurations I don\u0027t fully understand yet.\n\nThis reverts commit f075879649686e59b7a9065c5a061dbfdcdfbecc.\n\nChange-Id: I0ac5533825e40b06462ee69b2740e4a96fb5c582\n"
    },
    {
      "commit": "f075879649686e59b7a9065c5a061dbfdcdfbecc",
      "tree": "4ecc8cec0a8c96e1115195041530c7fc5ca6a7ec",
      "parents": [
        "f185fb365e9faf58428762bace96d7729ea5bdbc"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 13 11:56:00 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 13 14:53:03 2015 +0100"
      },
      "message": "Revert \"Revert \"Make dex2dex return a CompiledMethod after quickening.\"\"\n\nThis reverts commit 327c5ed30a1f016ef3e1bb26ea7b4abd34eb63b9.\n\nChange-Id: I0dc5d92e5d1ef98830fbd3c40ec59a93f9e0422d\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": "dc80984a9e24d6e46fab9461f01d7a27e656cf90",
      "tree": "d26c956837f327b35425f1043c42093c4f94ef53",
      "parents": [
        "7288b382b03936e707f0cb2da955be4e4301a699",
        "297ed22d71e0c67e7b1a3f188cff7c3874abbe47"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu May 21 15:36:21 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 21 15:36:22 2015 +0000"
      },
      "message": "Merge \"Write 64-bit address in DWARF if we are on 64-bit architecture.\""
    },
    {
      "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": "e3d623e54c0640b0594eabaa3c3b176dd577927c",
      "tree": "a93cf66be82cc5df61e7bd7cfbadafd76c83f4c4",
      "parents": [
        "1db3554cf9751d4328d5514b6bee15b6a92b82c4"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri May 01 16:11:04 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri May 01 16:11:04 2015 -0700"
      },
      "message": "ART: Fix max build\n\nChange-Id: Id1b9c0ee05b61195d1c1f09a8938df3110c2f2b3\n"
    },
    {
      "commit": "033d745bb9412c9b546d29395cc9efbbb4fa306e",
      "tree": "a3fc83bd37c278c792955ae8f09bf560f6c35728",
      "parents": [
        "485971cf4105886773a3fd10a0021738d4cd4de7"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Apr 30 19:57:35 2015 +0100"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri May 01 13:24:58 2015 -0700"
      },
      "message": "Add binary search table to .eh_frame_hdr\n\nThe addresses in the search table must be relative to the start\nof .eh_frame_hdr which results in yet another pointer type to patch.\nI have moved the Patch method back to elf_writer_quick where\nit can be specialized to one of the three pointer types.\n\nThe .eh_frame_hdr takes around 17% of .eh_frame now.\n\nChange-Id: I4770d1355ded6cdff9489c33380f6b06c4e3f9fe\n"
    },
    {
      "commit": "6d73c9d06bc0fc6b32825ca0a8224010933a026e",
      "tree": "2601d0ae98704dc77e5b025b93dedae92ec2b821",
      "parents": [
        "01ce498499eed47e87fceb8736d26fe49b2a4346"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri May 01 15:00:40 2015 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri May 01 15:00:40 2015 +0100"
      },
      "message": "Do not write CFI and symbols for deduplicate methods.\n\nThere is no need to have multiple symbols for a given address\nsince libunwind still has to pick only one to print.\nLikewise, there is no need to duplicate the CFI.\n\nThere is fair number of duplicate methods in the boot image,\nso this saves over 20% from those debug sections.\n\nChange-Id: Ib4390150257d009a6303b084076750ce56afed60\n"
    },
    {
      "commit": "8a813f72d21dea87b9e94b686fb35868ad4a88c4",
      "tree": "b442306bde33fe6fb6afd7c8ee65a8ec95aeaf4a",
      "parents": [
        "be52c68dca2f146a571ffa65624acf2e6c7adeb2"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Apr 20 16:43:52 2015 +0100"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Apr 22 14:19:16 2015 -0700"
      },
      "message": "Do not mention x86 floating point numbers in CFI.\n\nWe have explicitly declared them as undefined, but libunwind does\nnot seem to support them at all.  Omit the initialization to make\nlibunwind happy.  Reasonable debugger should still default to\nundefined since they are not callee save registers.\n\nBug: 20491296\nChange-Id: Ibaa9595b977508e518bfe3f88b240e8959b1198f\n"
    },
    {
      "commit": "297ed22d71e0c67e7b1a3f188cff7c3874abbe47",
      "tree": "ed432521ad0853bea19fa9becd168cd28120c955",
      "parents": [
        "f0dec62af300eaacfe3e8621276ee89a7d76346e"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Apr 15 01:18:12 2015 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Apr 21 20:50:04 2015 +0000"
      },
      "message": "Write 64-bit address in DWARF if we are on 64-bit architecture.\n\nDWARF includes code address.  Make sure they are of the right size.\n\nI have kept them as 32-bit until now to keep consistent with the\nold code.  I do not think that having 32-bit addresses was an issue\nsince we were using 32-bit Elf, but since we plan to switch to\n64-bit Elf, we should definitely be using 64-bit address.\n\nChange-Id: I57138c0dda2d37fc6f0f9329b31d61f38a2d6fcb\n"
    },
    {
      "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": "799b8c4cba128d13bab63c28800d1eed4e3bd243",
      "tree": "19f607698efe767fcd3e433a1ac252d3b24c97d9",
      "parents": [
        "edae94ab217d4ef3912cb89c20dae58001ceaec9"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Apr 14 01:57:43 2015 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Apr 15 01:53:42 2015 +0100"
      },
      "message": "Split .debug_info section to compilation units.\n\nThis resolves old TODO in the code.  It is also very important\nfor performance and memory usage of any tools which might be\nconsuming the debug data.  Without this split, the tools\nwould be forced to decode (and probably store in memory) all of\ndebug data even for a simple query.  With this change it should\nbe easy to find only the relevant compilation unit.\n\nChange-Id: I9f285eaa01632b6adea39cae866df6f76e9d0062\n"
    },
    {
      "commit": "626a1666015b0fa201e979870baf06afa93b65e7",
      "tree": "efeab75defdadffd5f354c51ce9146c88001a434",
      "parents": [
        "67592a44cd5600b3c007b9215e3e5296a61118e8"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Sun Apr 12 13:12:26 2015 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Apr 13 23:35:56 2015 +0100"
      },
      "message": "Append [DEDUPED] suffix to all deduped methods in the symbol table.\n\nThis resolves old TODO in the code.  The first method was never\nmarked as deduped and only the subsequent copies were recognised.\nTherefore the suffix might have been missing in backtraces.\n\nChange-Id: I4882d90f3049f7e196cd38c8987ba02960dab338\n"
    },
    {
      "commit": "8dc7324da5bd0f2afd2ab558ab04882329a61fe8",
      "tree": "245ce4265cc31990fa6d2f6e792ccd9d44af1dc1",
      "parents": [
        "4af290af4e89cfbc3a4e1ada79909ccee353361a"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Sun Apr 12 11:40:39 2015 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Apr 13 21:24:12 2015 +0100"
      },
      "message": "Add --include-cfi compiler option.\n\nDecouple generation of CFI from the rest of debug symbols.\nThis makes it possible to generate oat with CFI but without\nthe rest of debug symbols.\n\nThis is in line with intention of the .eh_frame section.\nThe section does not have the .debug_ prefix because it\nis considered somewhat different to the rest of debug symbols.\n\nChange-Id: I32816ecd4f30ac4e0dc69d69a4993e349c737f96\n"
    },
    {
      "commit": "2f6cdb01f74772c1c521a125776ef57ea3c73d43",
      "tree": "163f90841f02b9529997f4e3eea65e512e4795a3",
      "parents": [
        "58565098b2298041ccc97371a3cc486df88d51b3"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Sat Apr 11 00:17:53 2015 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Sat Apr 11 19:14:10 2015 +0100"
      },
      "message": "Relocate DWARF using .oat_patches.\n\nThe current solution is to hard-code knowledge of DWARF in the linker.\nThis works for simple use of DWARF, but breaks as soon as I try to do\nanything more complex.  Making the linker fully support DWARF would be\nnon-trivial task and would be essentially rewrite.  Using .oat_patches\nis much easier solution.\n\nRelocating .debug_* sections required extending .oat_patches to support\nmore sections than just .text.  I have encoded each section as\nnull-terminated section name followed by ULEB128 deltas.\n\nThe ULEB128 encoding shrinks .oat_patches for .text by factor of\nabout 6 with 64-bit compiler, and factor of 3 with 32-bit compiler.\n\nOn the other hand, it grows by the extra .oat_patches for DWARF which\nwere not present before (if debug symbols are included).\n\nOverall, it is still a clear improvement even with the DWARF patches.\n\nChange-Id: I78ffeda0f8a3da03341995a3b5ef15c954e16e9f\n"
    },
    {
      "commit": "3b9d57ab580a0593635a7dbe3dd2e2c76274f9fa",
      "tree": "bd33d5cbdebab7b8a55f782a06d09de48d407542",
      "parents": [
        "b536247b1ce5de640eec81dddac47802cd074363"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Apr 10 00:22:14 2015 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Apr 10 04:44:05 2015 +0100"
      },
      "message": "Move DWARF related code in ElfWriter to its own file.\n\nThis is purely for organisation.  The DWARF related code\nis becoming more complex and I do not want to keep mixing\nit with the ElfWriter.  The ElfWriter probably should not\nbe dealing with the fine details of DWARF generation.\n\nI intend to do much more work on DWARF in the future so\nthis situatuion would only get worse as the code grows.\n\nThe code could also use some refactoring and splitting.\nHowever, I have mostly just moved it in this CL.\n\nChange-Id: I6e3401a2b745ddf991b440ad7899ad7d4b921be6\n"
    }
  ]
}
