)]}'
{
  "commit": "def85b403db7bc2f40b4a7a9d83ae43331c0617c",
  "tree": "7dc8974b779ef521da16e294d6d8c857cfd44e98",
  "parents": [
    "075875fbf69e042f54d62074a99d8ff501b51fba"
  ],
  "author": {
    "name": "David Benjamin",
    "email": "davidben@google.com",
    "time": "Tue Apr 25 18:32:32 2017 -0400"
  },
  "committer": {
    "name": "CQ bot account: commit-bot@chromium.org",
    "email": "commit-bot@chromium.org",
    "time": "Thu Apr 27 21:07:33 2017 +0000"
  },
  "message": "Revise OPENSSL_ia32cap_P strategy to avoid TEXTRELs.\n\nOPENSSL_ia32cap_addr avoids any relocations within the module, at the\ncost of a runtime TEXTREL, which causes problems in some cases.\n(Notably, if someone links us into a binary which uses the GCC \"ifunc\"\nattribute, the loader crashes.)\n\nWe add a OPENSSL_ia32cap_addr_delta symbol (which is reachable\nrelocation-free from the module) stores the difference between\nOPENSSL_ia32cap_P and its own address.  Next, reference\nOPENSSL_ia32cap_P in code as usual, but always doing LEAQ (or the\nequivalent GOTPCREL MOVQ) into a register first. This pattern we can\nthen transform into a LEAQ and ADDQ on OPENSSL_ia32cap_addr_delta.\n\nADDQ modifies the FLAGS register, so this is only a safe transformation\nif we safe and restore flags first. That, in turn, is only a safe\ntransformation if code always uses %rsp as a stack pointer (specifically\neverything below the stack must be fair game for scribbling over). Linux\ndelivers signals on %rsp, so this should already be an ABI requirement.\nFurther, we must clear the red zone (using LEAQ to avoid touching FLAGS)\nwhich signal handlers may not scribble over.\n\nThis also fixes the GOTTPOFF logic to clear the red zone.\n\nChange-Id: I4ca6133ab936d5a13d5c8ef265a12ab6bd0073c9\nReviewed-on: https://boringssl-review.googlesource.com/15545\nReviewed-by: Adam Langley \u003cagl@google.com\u003e\nCommit-Queue: Adam Langley \u003cagl@google.com\u003e\nCQ-Verified: CQ bot account: commit-bot@chromium.org \u003ccommit-bot@chromium.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5d352892d692d98e40bf8ee01518aab3ff14e1b6",
      "old_mode": 33188,
      "old_path": "crypto/crypto.c",
      "new_id": "a52b8089074cc77ade3d02c78ba27a0f83b0b101",
      "new_mode": 33188,
      "new_path": "crypto/crypto.c"
    },
    {
      "type": "modify",
      "old_id": "362c1c9ee1ed7fa038727abf0a403795c46f4324",
      "old_mode": 33261,
      "old_path": "crypto/fipsmodule/aes/asm/aes-x86_64.pl",
      "new_id": "4bf7db3fdeb8a0a1e67682834875b877dbfb4dcd",
      "new_mode": 33261,
      "new_path": "crypto/fipsmodule/aes/asm/aes-x86_64.pl"
    },
    {
      "type": "modify",
      "old_id": "5810980272bf0105b7454a44e6eefa1974d87fd5",
      "old_mode": 33188,
      "old_path": "crypto/fipsmodule/aes/asm/aesni-x86_64.pl",
      "new_id": "4ad0fb110ed3d9f31ec9ec54898c4ab5045a7776",
      "new_mode": 33188,
      "new_path": "crypto/fipsmodule/aes/asm/aesni-x86_64.pl"
    },
    {
      "type": "modify",
      "old_id": "2a692559640ec7e75f23e404ec5a07733b116275",
      "old_mode": 33188,
      "old_path": "crypto/fipsmodule/delocate.go",
      "new_id": "7b5454c554a1f0aad0aaf484eb4ada2c2377c51c",
      "new_mode": 33188,
      "new_path": "crypto/fipsmodule/delocate.go"
    },
    {
      "type": "modify",
      "old_id": "1a74edfc3e581ee9dec531dc6dd047ab21adc8c3",
      "old_mode": 33188,
      "old_path": "crypto/fipsmodule/modes/asm/ghash-x86_64.pl",
      "new_id": "1778ac0bd1d957235fbbdb7469d4635b87fe46e9",
      "new_mode": 33188,
      "new_path": "crypto/fipsmodule/modes/asm/ghash-x86_64.pl"
    },
    {
      "type": "modify",
      "old_id": "25a1cad007e643b851cfedff9aca70eba43d3b34",
      "old_mode": 33261,
      "old_path": "crypto/fipsmodule/sha/asm/sha1-x86_64.pl",
      "new_id": "b269e84dd7b8633051dca35b3f7789beb4e262ef",
      "new_mode": 33261,
      "new_path": "crypto/fipsmodule/sha/asm/sha1-x86_64.pl"
    },
    {
      "type": "modify",
      "old_id": "c6385958b455d4a1ab08fac1df43021290f45291",
      "old_mode": 33261,
      "old_path": "crypto/fipsmodule/sha/asm/sha512-x86_64.pl",
      "new_id": "7ad74916108e1f12172775997228be48d81388e4",
      "new_mode": 33261,
      "new_path": "crypto/fipsmodule/sha/asm/sha512-x86_64.pl"
    }
  ]
}
