)]}'
{
  "commit": "4804ac8724ff42f0750def99a17ff929cff92d7f",
  "tree": "3279b7d12650245548868989cee4c30c032d7a0a",
  "parents": [
    "b638dfe160a17f288c774fd98f725f212f843c2b"
  ],
  "author": {
    "name": "Nicolas Capens",
    "email": "capn@google.com",
    "time": "Mon Nov 02 22:06:55 2020 -0500"
  },
  "committer": {
    "name": "Nicolas Capens",
    "email": "nicolascapens@google.com",
    "time": "Thu Nov 12 06:04:00 2020 +0000"
  },
  "message": "Implement MemorySanitizer instrumentation of Reactor routines\n\nMemorySanitizer checks for uninitialized memory and variable usage. It\ninstruments each instruction to update \u0027shadow\u0027 memory which indicates\nwhich bits are \u0027poisoned\u0027, and inserts tests for dereferencing pointers\nand conditional branching which makes use of not fully initialized data.\n\nThe instrumentation is done by the llvm::MemorySanitizerLegacyPass.\nFunctions must opt-in to the instrumentation with the \u0027SanitizeMemory\u0027\nattribute.\n\nMemorySanitizer relies on several TLS variables for storing the shadow\nvalue of function parameters and return values. The JIT makes calls to\n__emutls_get_address() to obtain the address off these variables,\npassing it the address of a __emutls_v.* control structure unique to\nthe TLS variable. We replace the former with our own function through\nthe symbol resolver, and the latter are represented by enum values, to\nallow obtaining the real TLS variable\u0027s address in C++ code.\n\nThis is enabled behind a REACTOR_ENABLE_MEMORY_SANITIZER_INSTRUMENTATION\nflag. For now, only enable CMake builds.\n\nBug: b/155148722\nChange-Id: I6d755244589c9b0de19a283f9dff5d8a3bf6f24b\nReviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/49829\nKokoro-Result: kokoro \u003cnoreply+kokoro@google.com\u003e\nTested-by: Nicolas Capens \u003cnicolascapens@google.com\u003e\nReviewed-by: Antonio Maiorano \u003camaiorano@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c50fc2b181da17419f8ebab3e82be52d37a683a4",
      "old_mode": 33188,
      "old_path": "CMakeLists.txt",
      "new_id": "49dadc57475201a98ada856cc5e7003c620bea8f",
      "new_mode": 33188,
      "new_path": "CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "be96c6189c08fb73c07d2b141aef2b623696f909",
      "old_mode": 33188,
      "old_path": "src/Reactor/CMakeLists.txt",
      "new_id": "ea450d789039be948fb13d5cedde226e7fb19256",
      "new_mode": 33188,
      "new_path": "src/Reactor/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "567f11d3859b1970afab85f658bc3eab9727eb3b",
      "old_mode": 33188,
      "old_path": "src/Reactor/LLVMJIT.cpp",
      "new_id": "fc5a74db5c6ddc6b0a3989987d23cd9d1e095605",
      "new_mode": 33188,
      "new_path": "src/Reactor/LLVMJIT.cpp"
    },
    {
      "type": "modify",
      "old_id": "31491c3d077d95e348c09acdfa13ee934e17402d",
      "old_mode": 33188,
      "old_path": "src/Reactor/LLVMReactor.cpp",
      "new_id": "5f55ca84bd3c96dc3f51b60f87c6737f075769be",
      "new_mode": 33188,
      "new_path": "src/Reactor/LLVMReactor.cpp"
    },
    {
      "type": "modify",
      "old_id": "4b07ce9b83359d6ef5896c8ea35bf2d6b45e5608",
      "old_mode": 33188,
      "old_path": "src/Reactor/Reactor.hpp",
      "new_id": "05d592569461b67202ca67b0861413393498cf97",
      "new_mode": 33188,
      "new_path": "src/Reactor/Reactor.hpp"
    },
    {
      "type": "modify",
      "old_id": "f1deb2f76ad82a0e66f9db08e7321e100e2a87b4",
      "old_mode": 33188,
      "old_path": "src/Reactor/ReactorUnitTests.cpp",
      "new_id": "5482f821b2a06576a8db53d54f4e0cd8efb053f6",
      "new_mode": 33188,
      "new_path": "src/Reactor/ReactorUnitTests.cpp"
    },
    {
      "type": "modify",
      "old_id": "e0a4416c90b7e9cbd79559142aa43a1267dd448b",
      "old_mode": 33188,
      "old_path": "third_party/llvm-10.0/CMakeLists.txt",
      "new_id": "6018a12e91b2c8aeb3ec1def70923f67a22a78a5",
      "new_mode": 33188,
      "new_path": "third_party/llvm-10.0/CMakeLists.txt"
    }
  ]
}
