)]}'
{
  "log": [
    {
      "commit": "fd4d0d3eb9b5c7fe2fa1df97d9c0763900b2be52",
      "tree": "25c774814eb3b6e595ea9c267fcb93fee03bf3eb",
      "parents": [
        "bc9a87c33a3f1553934872387a0bb3178b5140e8"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Apr 26 19:09:47 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri May 12 12:37:40 2017 -0700"
      },
      "message": "sigchain: always call InitializeSignalChain on startup.\n\nProcesses that link against libsigchain because they might want to\ndynamically load libart.so (e.g. surfaceflinger) might never explicitly\ncall InitializeSignalChain. In this scenario, the lazy initialization\nthat occurs when sigprocmask is called can happen at unexpected times,\nsuch as from pthread_exit, leading to deadlocks or crashes.\n\nAdd __attribute__((constructor)) to InitializeSignalChain to have it be\nautomatically called upon process start. Keep the existing calls to it\nin the wrapper functions in order to sidestep problems around static\ninitialization order.\n\nBug: https://issuetracker.google.com/37119593\nTest: run-test 004-SignalTest\nTest: m test-art-host\nTest: m test-art-target\nChange-Id: I7906c1f625ccca0350ea9310140a3f43a657be4c\n"
    },
    {
      "commit": "85a78cff8cbd6477c19ab4c9a21698dddcf0a9f9",
      "tree": "cee518d7bed60fcc3c4c08603f27500a8d2e6eea",
      "parents": [
        "6efac9929f8952e4871e8c423c923989fc6f2ad2"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Mar 20 16:26:42 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Mar 23 16:16:53 2017 -0700"
      },
      "message": "Revert^2: \"Make sigchain actually own the signal chain.\"\"\n\nThis reverts commit 33dca562d5ed9f52f63ced2334c066333ca073e9.\n\nBug: http://b/36205469\nBug: http://b/36262089\nOriginal-Change-Id: I416b13de800d3e23424cf20688ccfd7e4e48a111\nChange-Id: I1267be72c32ed73d1079a572d0b8907556526dde\n"
    },
    {
      "commit": "33dca562d5ed9f52f63ced2334c066333ca073e9",
      "tree": "b13ca4ec329595953d3aa3b04b0323f2dee173ca",
      "parents": [
        "7600fa9234e02cf5108a3a82babf3d3ab82fcddd"
      ],
      "author": {
        "name": "Jin Qian",
        "email": "jinqian@google.com",
        "time": "Sat Mar 18 02:51:37 2017 +0000"
      },
      "committer": {
        "name": "Jin Qian",
        "email": "jinqian@google.com",
        "time": "Sat Mar 18 02:51:37 2017 +0000"
      },
      "message": "Revert \"Make sigchain actually own the signal chain.\"\n\nThis reverts commit 7600fa9234e02cf5108a3a82babf3d3ab82fcddd.\n\nChange-Id: Ia46db2a7df0c0ac07107a8db06f42ff1afd4a97e\n"
    },
    {
      "commit": "7600fa9234e02cf5108a3a82babf3d3ab82fcddd",
      "tree": "7fc841d365122ae618b657c7bd3fa28e8151e870",
      "parents": [
        "ed883a11b8cd7f3712bd30fca1e2b0fb641bff63"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Mar 15 17:40:42 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Mar 17 17:04:31 2017 -0700"
      },
      "message": "Make sigchain actually own the signal chain.\n\nsigchain exists to make sure that art\u0027s signal handler is at the front,\nbut it currently does this by putting the fault manager in the actual\nsignal handler slot and having that handler call into sigchain when it\ndoesn\u0027t want to handle a signal. sigchain also has a \"special signal\nhandler\" (used for native bridge) that runs before user handlers, but\nafter ART\u0027s.\n\nMove maintenance of the signal chain into sigchain itself, and use the\nsame mechanism to handle the ART handler and the native bridge handler.\n\nAlso, clean up some bugs:\n  - InvokeUserSignalHandler was using the wrapper sigprocmask instead\n    of the actual one.\n  - Use SIG_SETMASK instead of SIG_BLOCK between calling handlers, in\n    case one of the handlers changes the signal mask.\n  - Correctly handle sigaction without SA_SIGINFO.\n\nBug: http://b/36205469\nBug: http://b/36262089\nTest: NPE with dalvikvm with/without TEST_NESTED_SIGNAL defined (arm/aarch64)\nChange-Id: I416b13de800d3e23424cf20688ccfd7e4e48a111\n"
    },
    {
      "commit": "82b67b9897ac0f6791dddeb98c4b876418a6a162",
      "tree": "b220869ada1e498f6b3b101e1ffdf84c225540f3",
      "parents": [
        "fcc3c6d26a7e5abd84c348278ec5133d96726048"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Aug 01 11:19:03 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Aug 01 14:14:06 2016 -0700"
      },
      "message": "libsigchain: intercept bsd_signal on lp32\n\nbsd_signal is a deprecated synonym for the signal. Nevertheless\nthere are apps and libraries calling this function.\n\nlibsigchain needs to intercept these calls and handle them the same\nway it handles signal() call.\n\nBug: http://b/30562229\nTest: readelf --dyn-sym app_process32 and check that bsd_signal is exported\n      readelf --dyn-sym app_process64 and check that bsd_signal is not exported\nChange-Id: I3aa41632bb015568d8524a82f1c97e4443ec0d6c\n"
    },
    {
      "commit": "e089920eb0abc10eca708dbf5993134aa7e8d9b0",
      "tree": "a95aa0203decce3519b2b2f360d10e5a9b1a4e52",
      "parents": [
        "38b66b6fed1adcc1da4b931a32f78c5290a97c1e"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 05 20:45:31 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 05 20:47:36 2015 -0700"
      },
      "message": "ART: Add SetSpecialSignalHandlerFn to version-script.txt\n\nExpose the new function from the sigchainlib implementation.\n\nBug: 20217701\nChange-Id: I7d21025595775e057ea703236ca88ceb07173136\n"
    },
    {
      "commit": "d000480134b7b00895fbfd142f1d1e18d9cfa6e9",
      "tree": "a9fab808555310308aecda2a59a7c90727ede0ff",
      "parents": [
        "d866c7616cb3426c431b635ae69964ce69c2ecb5"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 15 16:59:47 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Oct 16 19:16:41 2014 -0700"
      },
      "message": "Add way to ensure we are at the front of the sigaction chain\n\nCalling this after jni_on_load fixes the unity apps. This is\nnot exactly correct since we may already have the following chain.\n\nStart up:\nUs -\u003e debuggerd\n\nAfter app goes in front:\nApp -\u003e us -\u003e debuggerd\n\nAfter we put ourself back at the front:\nUs -\u003e app -\u003e us -\u003e app -\u003e .... stack overflow.\n\nBug: 17620677\nChange-Id: I9183997e3d5ebd51c320b5d51425be5142e938f3\n\n(cherry picked from commit 1f24296c7c8a6501ee2388c0d20b48f471b48660)\n"
    },
    {
      "commit": "f57874dddefc03fef9ad36fbdd87e39a08a8d641",
      "tree": "4cb51f492558475368ce0df190c12e8f1adf732a",
      "parents": [
        "1000e69b7e11348f2e1d3ba67339616a647f53d7"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Oct 07 13:43:23 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Oct 07 16:52:46 2014 -0700"
      },
      "message": "Remove libsigchain from LD_PRELOADS\n\n  Link sigchain.cc statically with dalvikvm, app_process,\n  surfaceflinger, dex2oat, patchoat and objdump.\n\n  Replace libsigchain.so with dummy implementaions to avoid\n  situations when it is used incorrectly.\n\nBug: 15345057\nBug: 15426766\nChange-Id: If0b7f59a59824e30aa0c33dad76c7a44932180de\n"
    }
  ]
}
