Go to file
Adam Langley b18cb6a5d0 Make the POWER hardware capability value a global in crypto.c.
(Thanks to Sam Panzer for the patch.)

At least some linkers will drop constructor functions if no symbols from
that translation unit are used elsewhere in the program. On POWER, since
the cached capability value isn't a global in crypto.o (like other
platforms), the constructor function is getting discarded.

The C++11 spec says (3.6.2, paragraph 4):

    It is implementation-defined whether the dynamic initialization of a
    non-local variable with static storage duration is done before the
    first statement of main. If the initialization is deferred to some
    point in time after the first statement of main, it shall occur
    before the first odr-use (3.2) of any function or variable defined
    in the same translation unit as the variable to be initialized.

Compilers appear to interpret that to mean they are allowed to drop
(i.e. indefinitely defer) constructors that occur in translation units
that are never used, so they can avoid initializing some part of a
library if it's dropped on the floor.

This change makes the hardware capability value for POWER a global in
crypto.c, which should prevent the constructor function from being
ignored.

Change-Id: I43ebe492d0ac1491f6f6c2097971a277f923dd3e
Reviewed-on: https://boringssl-review.googlesource.com/14664
Commit-Queue: Adam Langley <agl@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: David Benjamin <davidben@google.com>
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
2017-04-04 18:19:19 +00:00
.github
crypto Make the POWER hardware capability value a global in crypto.c. 2017-04-04 18:19:19 +00:00
decrepit size_t the RSA padding add functions. 2017-03-25 21:59:49 +00:00
fuzz Refresh fuzzer corpora. 2017-03-30 16:55:36 +00:00
include/openssl Make the POWER hardware capability value a global in crypto.c. 2017-04-04 18:19:19 +00:00
infra/config Commit-Queue config: effectively remove Andorid builders. 2016-07-26 13:14:47 +00:00
ssl Support enabling early data on SSL 2017-04-03 20:25:29 +00:00
third_party Clear the last GTest warning suppression. 2017-02-16 19:03:32 +00:00
tool tool: show if early data was accepted 2017-03-26 18:31:07 +00:00
util util/generate_build_files.py: Filter test runner sources from BUILD files. 2017-04-03 23:12:33 +00:00
.clang-format Import `newhope' (post-quantum key exchange). 2016-04-26 22:53:59 +00:00
.gitignore Also add util/bot/golang to .gitignore. 2016-12-02 23:39:35 +00:00
API-CONVENTIONS.md Fix API-CONVENTIONS.md typos. 2017-01-04 01:46:32 +00:00
BUILDING.md Do a cursory conversion of a few tests to GTest. 2017-01-21 00:17:05 +00:00
CMakeLists.txt Build with -fsanitize-address-use-after-scope if -DASAN=1 2017-02-28 20:07:09 +00:00
codereview.settings No-op change to trigger the new Bazel bot. 2016-07-07 12:07:04 -07:00
CONTRIBUTING.md
FUZZING.md Fix FUZZING.md typo. 2017-03-30 16:54:18 +00:00
INCORPORATING.md Update links to Bazel's site. 2016-10-31 18:16:58 +00:00
LICENSE
PORTING.md Restore SSL_CTX_set_ecdh_auto compatibility hook. 2017-03-14 14:54:45 +00:00
README.md Add an API-CONVENTIONS.md document. 2016-08-04 23:27:49 +00:00
STYLE.md Work around language and compiler bug in memcpy, etc. 2016-12-21 20:34:47 +00:00

BoringSSL

BoringSSL is a fork of OpenSSL that is designed to meet Google's needs.

Although BoringSSL is an open source project, it is not intended for general use, as OpenSSL is. We don't recommend that third parties depend upon it. Doing so is likely to be frustrating because there are no guarantees of API or ABI stability.

Programs ship their own copies of BoringSSL when they use it and we update everything as needed when deciding to make API changes. This allows us to mostly avoid compromises in the name of compatibility. It works for us, but it may not work for you.

BoringSSL arose because Google used OpenSSL for many years in various ways and, over time, built up a large number of patches that were maintained while tracking upstream OpenSSL. As Google's product portfolio became more complex, more copies of OpenSSL sprung up and the effort involved in maintaining all these patches in multiple places was growing steadily.

Currently BoringSSL is the SSL library in Chrome/Chromium, Android (but it's not part of the NDK) and a number of other apps/programs.

There are other files in this directory which might be helpful: