Our assembly does not use the GOT to reference symbols, which means references to visible symbols will often require a TEXTREL. This is undesirable, so all assembly-referenced symbols should be hidden. CPU capabilities are the only such symbols defined in C. These symbols may be hidden by doing at least one of: 1. Build with -fvisibility=hidden 2. __attribute__((visibility("hidden"))) in C. 3. .extern + .hidden in some assembly file referencing the symbol. We have lots of consumers and can't always rely on (1) happening. We were doing (3) by way of d216b71f909fe56255813dab0a8d052534bdcb91 and 16e38b2b8f50a3d048f61d2979d5ceddacd70fc3, but missed 32-bit x86 because it doesn't cause a linker error. Those two patches are not in upstream. Upstream instead does (3) by way of x86cpuid.pl and friends, but we have none of these files. Standardize on doing (2). This avoids accidentally getting TEXTRELs on some 32-bit x86 build configurations. This also undoes d216b71f909fe56255813dab0a8d052534bdcb91 and 16e38b2b8f50a3d048f61d2979d5ceddacd70fc3. They are no now longer needed and reduce the upstream diff. Change-Id: Ib51c43fce6a7d8292533635e5d85d3c197a93644 Reviewed-on: https://boringssl-review.googlesource.com/22064 Commit-Queue: Matt Braithwaite <mab@google.com> Reviewed-by: Matt Braithwaite <mab@google.com> CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
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:
- PORTING.md: how to port OpenSSL-using code to BoringSSL.
- BUILDING.md: how to build BoringSSL
- INCORPORATING.md: how to incorporate BoringSSL into a project.
- API-CONVENTIONS.md: general API conventions for BoringSSL consumers and developers.
- STYLE.md: rules and guidelines for coding style.
- include/openssl: public headers with API documentation in comments. Also available online.
- FUZZING.md: information about fuzzing BoringSSL.
- CONTRIBUTING.md: how to contribute to BoringSSL.