)]}'
{
  "commit": "b18cb6a5d013666b6ac0f29eb8772d33efdf7749",
  "tree": "daa49fd6f6749056467b1356ab5217cf5e72aeac",
  "parents": [
    "42329a828b25259fc47691f5b4a39caf2b29f058"
  ],
  "author": {
    "name": "Adam Langley",
    "email": "agl@google.com",
    "time": "Tue Apr 04 11:08:28 2017 -0700"
  },
  "committer": {
    "name": "CQ bot account: commit-bot@chromium.org",
    "email": "commit-bot@chromium.org",
    "time": "Tue Apr 04 18:19:19 2017 +0000"
  },
  "message": "Make the POWER hardware capability value a global in crypto.c.\n\n(Thanks to Sam Panzer for the patch.)\n\nAt least some linkers will drop constructor functions if no symbols from\nthat translation unit are used elsewhere in the program. On POWER, since\nthe cached capability value isn\u0027t a global in crypto.o (like other\nplatforms), the constructor function is getting discarded.\n\nThe C++11 spec says (3.6.2, paragraph 4):\n\n    It is implementation-defined whether the dynamic initialization of a\n    non-local variable with static storage duration is done before the\n    first statement of main. If the initialization is deferred to some\n    point in time after the first statement of main, it shall occur\n    before the first odr-use (3.2) of any function or variable defined\n    in the same translation unit as the variable to be initialized.\n\nCompilers appear to interpret that to mean they are allowed to drop\n(i.e. indefinitely defer) constructors that occur in translation units\nthat are never used, so they can avoid initializing some part of a\nlibrary if it\u0027s dropped on the floor.\n\nThis change makes the hardware capability value for POWER a global in\ncrypto.c, which should prevent the constructor function from being\nignored.\n\nChange-Id: I43ebe492d0ac1491f6f6c2097971a277f923dd3e\nReviewed-on: https://boringssl-review.googlesource.com/14664\nCommit-Queue: Adam Langley \u003cagl@google.com\u003e\nCommit-Queue: David Benjamin \u003cdavidben@google.com\u003e\nReviewed-by: David Benjamin \u003cdavidben@google.com\u003e\nCQ-Verified: CQ bot account: commit-bot@chromium.org \u003ccommit-bot@chromium.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c431c818f92ff7310c65cf1e16ef5f1d616cb034",
      "old_mode": 33188,
      "old_path": "crypto/cpu-ppc64le.c",
      "new_id": "54571bdb9fa4dbfd237beb5f3fcc6a323ef09944",
      "new_mode": 33188,
      "new_path": "crypto/cpu-ppc64le.c"
    },
    {
      "type": "modify",
      "old_id": "c32f5144da065bcbce27c236f5f6826732efa404",
      "old_mode": 33188,
      "old_path": "crypto/crypto.c",
      "new_id": "174c74a99ea8c51f0a79405912885fa63f5dfac3",
      "new_mode": 33188,
      "new_path": "crypto/crypto.c"
    },
    {
      "type": "modify",
      "old_id": "457a47681d96e08da0a9f53c8328ee1310aaff1d",
      "old_mode": 33188,
      "old_path": "include/openssl/cpu.h",
      "new_id": "1a4294acbbef82563648a373517cc1864de92ef2",
      "new_mode": 33188,
      "new_path": "include/openssl/cpu.h"
    }
  ]
}
