Merge "Call __emutls_unregister_key on dlclose"
diff --git a/benchmarks/bionic_benchmarks.cpp b/benchmarks/bionic_benchmarks.cpp
index 074c3c8..e4c32fa 100644
--- a/benchmarks/bionic_benchmarks.cpp
+++ b/benchmarks/bionic_benchmarks.cpp
@@ -16,6 +16,7 @@
#include <err.h>
#include <getopt.h>
+#include <inttypes.h>
#include <math.h>
#include <sys/resource.h>
@@ -85,7 +86,7 @@
{0, 0, 0, 0},
};
-typedef std::vector<std::vector<int>> args_vector_t;
+typedef std::vector<std::vector<int64_t>> args_vector_t;
void Usage() {
printf("Usage:\n");
@@ -212,15 +213,16 @@
static constexpr char kOnebufManualStr[] = "AT_ONEBUF_MANUAL_ALIGN_";
static constexpr char kTwobufManualStr[] = "AT_TWOBUF_MANUAL_ALIGN1_";
-static bool ParseOnebufManualStr(std::string& arg, std::vector<int>* values) {
+static bool ParseOnebufManualStr(std::string& arg, std::vector<int64_t>* values) {
// The format of this is:
// AT_ONEBUF_MANUAL_ALIGN_XX_SIZE_YY
// Where:
// XX is the alignment
// YY is the size
- int align;
- int size;
- if (sscanf(arg.c_str(), "AT_ONEBUF_MANUAL_ALIGN_%d_SIZE_%d" , &align, &size) != 2) {
+ int64_t align;
+ int64_t size;
+ if (sscanf(arg.c_str(), "AT_ONEBUF_MANUAL_ALIGN_%" SCNd64 "_SIZE_%" SCNd64,
+ &align, &size) != 2) {
return false;
}
@@ -228,22 +230,22 @@
return false;
}
- values->push_back(static_cast<int>(size));
- values->push_back(static_cast<int>(align));
+ values->push_back(static_cast<int64_t>(size));
+ values->push_back(static_cast<int64_t>(align));
return true;
}
-static bool ParseTwobufManualStr(std::string& arg, std::vector<int>* values) {
+static bool ParseTwobufManualStr(std::string& arg, std::vector<int64_t>* values) {
// The format of this is:
// AT_TWOBUF_MANUAL_ALIGN1_XX_ALIGN2_YY_SIZE_ZZ
// Where:
// XX is the alignment of the first argument
// YY is the alignment of the second argument
// ZZ is the size
- int align1;
- int align2;
- int size;
- if (sscanf(arg.c_str(), "AT_TWOBUF_MANUAL_ALIGN1_%d_ALIGN2_%d_SIZE_%d" ,
+ int64_t align1;
+ int64_t align2;
+ int64_t size;
+ if (sscanf(arg.c_str(), "AT_TWOBUF_MANUAL_ALIGN1_%" SCNd64 "_ALIGN2_%" SCNd64 "_SIZE_%" SCNd64,
&align1, &align2, &size) != 3) {
return false;
}
@@ -254,9 +256,9 @@
return false;
}
- values->push_back(static_cast<int>(size));
- values->push_back(static_cast<int>(align1));
- values->push_back(static_cast<int>(align2));
+ values->push_back(static_cast<int64_t>(size));
+ values->push_back(static_cast<int64_t>(align1));
+ values->push_back(static_cast<int64_t>(align2));
return true;
}
@@ -270,7 +272,7 @@
}
// Check for free form macro.
if (android::base::StartsWith(args, kOnebufManualStr)) {
- std::vector<int> values;
+ std::vector<int64_t> values;
if (!ParseOnebufManualStr(args, &values)) {
errx(1, "ERROR: Bad format of macro %s, should be AT_ONEBUF_MANUAL_ALIGN_XX_SIZE_YY",
args.c_str());
@@ -278,7 +280,7 @@
to_populate->push_back(std::move(values));
return to_populate;
} else if (android::base::StartsWith(args, kTwobufManualStr)) {
- std::vector<int> values;
+ std::vector<int64_t> values;
if (!ParseTwobufManualStr(args, &values)) {
errx(1,
"ERROR: Bad format of macro %s, should be AT_TWOBUF_MANUAL_ALIGN1_XX_ALIGNE2_YY_SIZE_ZZ",
@@ -288,7 +290,7 @@
return to_populate;
}
- to_populate->push_back(std::vector<int>());
+ to_populate->push_back(std::vector<int64_t>());
std::stringstream sstream(args);
std::string argstr;
while (sstream >> argstr) {
@@ -318,7 +320,7 @@
}
benchmark_func_t benchmark_function = g_str_to_func.at(fn_name).first;
- for (const std::vector<int>& args : (*run_args)) {
+ for (const std::vector<int64_t>& args : (*run_args)) {
auto registration = benchmark::RegisterBenchmark(fn_name.c_str(), LockAndRun,
benchmark_function,
cpu_to_use)->Args(args);
@@ -476,7 +478,8 @@
// that can be created with the current property area size.
{"NUM_PROPS", args_vector_t{ {1}, {4}, {16}, {64}, {128}, {256}, {512} }},
- {"MATH_COMMON", args_vector_t{ {0}, {1}, {2}, {3} }}
+ {"MATH_COMMON", args_vector_t{ {0}, {1}, {2}, {3} }},
+ {"MATH_SINCOS_COMMON", args_vector_t{ {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7} }},
};
args_vector_t args_onebuf;
diff --git a/benchmarks/expf_input.cpp b/benchmarks/expf_input.cpp
new file mode 100644
index 0000000..12aa5b4
--- /dev/null
+++ b/benchmarks/expf_input.cpp
@@ -0,0 +1,2416 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+// Reduced trace based on 2.4 billion samples extracted from specpu2017
+// 521.wrf_r benchmark.
+static const std::vector<float> expf_input = {
+ -0x0p+0,
+ -0x1.092bd4p+2,
+ -0x1.8af5ecp-1,
+ 0x1.45659p+3,
+ 0x1.388742p+3,
+ 0x1.3857eep+3,
+ -0x1.80f2ep+0,
+ -0x1.3a3adcp+1,
+ -0x1.07b87ap+0,
+ 0x1.3c5c22p+3,
+ 0x1.ede768p+2,
+ -0x1.bb5bcp-2,
+ -0x1.0e7d6ep+5,
+ -0x1.79ac4p+4,
+ 0x1.20fe8ap+3,
+ -0x1.616dd4p+3,
+ -0x1.7d3bc2p+0,
+ 0x1.0b8384p+0,
+ 0x1.44422ap+3,
+ 0x1.e3bce8p+2,
+ 0x1.44d11ap+3,
+ 0x1.cfdd92p+2,
+ -0x1.b5093p+1,
+ 0x1.9d1724p+1,
+ 0x1.9471bcp+2,
+ 0x1.9ccc52p+0,
+ -0x1.e1ea14p+0,
+ -0x1.46d1ecp-3,
+ 0x1.927332p-2,
+ -0x1.d553a2p+1,
+ 0x1.923732p+0,
+ 0x1.6aea06p+2,
+ 0x1.92eb6cp-1,
+ -0x1.a7cd8ep+2,
+ -0x1.bda41p+2,
+ -0x1.312bb8p+1,
+ 0x1.b52ab2p+1,
+ -0x1.a90d4ep+2,
+ -0x1.26bc92p+2,
+ -0x1.6035eep-3,
+ -0x1.7dbc7ep+3,
+ -0x1.736a64p-1,
+ -0x1.7595c8p+2,
+ -0x1.dade16p-1,
+ 0x1.b3d2c8p+2,
+ -0x1.ec98dep+1,
+ -0x1.134a88p+0,
+ 0x1.c5fafap+1,
+ 0x1.255ee4p-3,
+ -0x1.2da37ep+6,
+ -0x1.7e171ep+0,
+ 0x1.d9f48ap+2,
+ -0x1.75f3eep+2,
+ 0x1.3e8f9ap+3,
+ -0x1.608296p-3,
+ 0x1.b5f2dcp+2,
+ 0x1.d86428p+0,
+ 0x1.412beap+3,
+ -0x1.3ea40ap+1,
+ -0x1.41dfc4p+2,
+ -0x1.21bd5p-2,
+ -0x1.54fdf8p+2,
+ -0x1.608d6ap-3,
+ -0x1.863facp+2,
+ 0x1.ae490ap+2,
+ -0x1.b04428p+0,
+ 0x1.e5a47p+1,
+ 0x1.bcf1aep+0,
+ 0x1.3c662ap+0,
+ -0x1.3b0756p+0,
+ -0x1.6bafb2p+2,
+ 0x1.7bc0dcp+2,
+ 0x1.444f44p+3,
+ 0x1.44609ap+3,
+ 0x1.165ffep+0,
+ 0x1.d47be6p+2,
+ -0x1.4263ecp+1,
+ -0x1.8e061ep+2,
+ 0x1.0f0eb8p+0,
+ -0x1.3fd988p+2,
+ 0x1.4f49f6p+1,
+ -0x1.543c3cp+3,
+ -0x1.5f0aa4p-3,
+ -0x1.5c3fa2p+2,
+ -0x1.82b9b2p+2,
+ -0x1.64ce3ap-3,
+ 0x1.79f9f8p+2,
+ 0x1.b24b12p+2,
+ -0x1.43658cp+3,
+ -0x1.658068p+0,
+ 0x1.203d1cp+0,
+ -0x1.c142c6p-1,
+ 0x1.9a1cd6p+1,
+ -0x1.ade766p+1,
+ 0x1.daf22p+2,
+ -0x1.62f814p-1,
+ -0x1.79bb9cp+0,
+ -0x1.38a3e4p+0,
+ -0x1.dea0fp+2,
+ -0x1.f09064p+1,
+ 0x1.e8baep-1,
+ -0x1.deb80cp+0,
+ 0x1.bc846ap+2,
+ 0x1.ebc59ep+2,
+ -0x1.4e3848p+3,
+ 0x1.d42b04p+2,
+ 0x1.e0cb2ep-3,
+ -0x1.7ee3d6p-2,
+ 0x1.dfc3a4p+2,
+ -0x1.7b7d56p+2,
+ -0x1.59d8b6p+2,
+ -0x1.17cea4p+0,
+ -0x1.a9839ep+2,
+ 0x1.e985b6p+2,
+ -0x1.eb72dp+2,
+ 0x1.0dd7aep-1,
+ -0x1.0325eap+1,
+ 0x1.a7f02ep+1,
+ -0x1.fab7e2p+1,
+ 0x1.ab8e12p+2,
+ 0x1.a28b4ep+2,
+ 0x1.136d86p-4,
+ -0x1.eafep+0,
+ -0x1.a5b8ep+4,
+ -0x1.217af6p+0,
+ -0x1.517d18p-1,
+ -0x1.525346p+2,
+ 0x1.4b30ccp-1,
+ -0x1.5ea04ep-3,
+ -0x1.b96c1p+2,
+ -0x1.23c61ep+1,
+ 0x1.1e53dcp-2,
+ -0x1.f550e2p-2,
+ 0x1.9d8e66p+0,
+ 0x1.c1578cp+2,
+ 0x1.c4bbfcp+2,
+ -0x1.5a1902p+2,
+ 0x1.d8469cp+2,
+ 0x1.43d612p+3,
+ -0x1.578826p+1,
+ -0x1.0ff7e6p+3,
+ -0x1.f89a3cp-3,
+ 0x1.71853ap+2,
+ 0x1.a8240cp+2,
+ -0x1.40a39ap+0,
+ -0x1.2130e4p+2,
+ 0x1.3abdbep+0,
+ 0x1.9b57d6p+0,
+ -0x1.21eed8p+3,
+ -0x1.593d7cp-1,
+ 0x1.a0b0d4p+2,
+ 0x1.1f2aa4p+0,
+ 0x1.e06742p+1,
+ 0x1.bab072p+2,
+ 0x1.46825ep+1,
+ -0x1.6c8604p+2,
+ 0x1.980152p+2,
+ -0x1.76b6eep-1,
+ 0x1.3d30c2p+3,
+ 0x1.996adap+2,
+ 0x1.3b8866p+3,
+ -0x1.7b4842p-2,
+ -0x1.1df6b8p-1,
+ -0x1.daa564p+2,
+ 0x1.cc7028p+1,
+ 0x1.71de86p+0,
+ -0x1.6c3d08p+0,
+ 0x1.91c468p-1,
+ -0x1.3ba51ep-3,
+ -0x1.135962p-4,
+ -0x1.1f891p+2,
+ 0x1.aa1e92p+2,
+ 0x1.ccb4eap+2,
+ 0x1.cca312p+2,
+ -0x1.bbb332p-3,
+ -0x1.e86bc8p+1,
+ 0x1.53c07ap-1,
+ 0x1.35d8cp+3,
+ 0x1.47f866p+0,
+ 0x1.9808a4p-1,
+ -0x1.fbf91cp+2,
+ -0x1.956b98p+1,
+ -0x1.8c3e7ap+2,
+ -0x1.a907e2p+2,
+ -0x1.792b7p+1,
+ -0x1.5c0e9p-7,
+ 0x1.4629ecp-1,
+ 0x1.30fed6p+1,
+ -0x1.aa670ap+4,
+ -0x1.65a70ap-2,
+ 0x1.668866p+0,
+ 0x1.572f5cp-2,
+ -0x1.55aa82p+2,
+ -0x1.1336c2p+1,
+ 0x1.3a2c32p+2,
+ 0x1.17d2b8p-1,
+ 0x1.c1f8bcp+1,
+ 0x1.10cb0ep+3,
+ -0x1.b28c42p+1,
+ -0x1.adc0fcp-1,
+ -0x1.7260c4p+2,
+ -0x1.5e4ae4p-2,
+ 0x1.a4763ap+2,
+ -0x1.314ab2p-3,
+ -0x1.81ef1cp+2,
+ -0x1.a36d9ep+2,
+ -0x1.d85266p-1,
+ -0x1.503506p+5,
+ 0x1.45401ep+3,
+ -0x1.0b5af6p+0,
+ -0x1.bfd03ap+2,
+ 0x1.487766p+3,
+ -0x1.490c08p+4,
+ 0x1.5f2852p-3,
+ -0x1.0e805cp+0,
+ -0x1.4d25aap+5,
+ -0x1.14973ep+2,
+ -0x1.a416b2p-1,
+ 0x1.0e2bccp+1,
+ 0x1.213eb8p-4,
+ 0x1.3fabaep+0,
+ 0x1.ebf592p-1,
+ -0x1.58f156p+2,
+ -0x1.e47384p-1,
+ 0x1.41a968p+3,
+ -0x1.62169ap+1,
+ -0x1.24518ap+0,
+ -0x1.2b3848p+2,
+ -0x1.2473e2p+2,
+ 0x1.cbf3f6p+2,
+ 0x1.c7647ap-1,
+ 0x1.0d0038p-1,
+ 0x1.35fc7ep+3,
+ 0x1.3f8aa6p+3,
+ -0x1.647b64p-3,
+ -0x1.5bbab6p-3,
+ -0x1.79c962p+2,
+ -0x1.57007ap-3,
+ -0x1.06533ap+2,
+ -0x1.43c814p+0,
+ 0x1.8b8652p+0,
+ 0x1.872cb8p+0,
+ -0x1.7b02ap-3,
+ -0x1.111332p-2,
+ -0x1.5cfe1ep-3,
+ -0x1.5da536p-3,
+ 0x1.10caacp+3,
+ 0x1.ae6508p+2,
+ 0x1.3bef7ap+3,
+ 0x1.282ec8p+2,
+ -0x1.9a2e56p+2,
+ -0x1.5bf556p-3,
+ -0x1.010ea8p+3,
+ 0x1.7b5c7ap-2,
+ -0x1.648d0ap+0,
+ -0x1.4f6a82p+0,
+ 0x1.432dcep+3,
+ 0x1.78819ep+2,
+ -0x1.417cfap+2,
+ -0x1.9c93eap+2,
+ -0x1.477822p+2,
+ -0x1.5f354ep-3,
+ 0x1.3752eep+2,
+ -0x1.d8cd0ap+2,
+ -0x1.08e0a4p+0,
+ 0x1.87b0b8p+0,
+ -0x1.32451ep+1,
+ 0x1.305e7p+0,
+ -0x1.649322p-3,
+ -0x1.a2bp-2,
+ -0x1.60850cp-3,
+ -0x1.60f59ap-3,
+ 0x1.79ce2cp-1,
+ -0x1.647d6ap-3,
+ 0x1.a828ep+0,
+ -0x1.7cd6ep+0,
+ 0x1.44835ep+3,
+ 0x1.0bd40cp+0,
+ -0x1.b370ccp+0,
+ -0x1.b13c84p+2,
+ 0x1.82c1dp-1,
+ -0x1.529398p+5,
+ -0x1.1a187ep-3,
+ 0x1.d57a16p+2,
+ 0x1.30bf36p+2,
+ -0x1.449d04p+3,
+ -0x1.569fcep-3,
+ -0x1.185e66p+4,
+ 0x1.e631eap-2,
+ -0x1.ac70f6p-1,
+ 0x1.4627e8p+3,
+ -0x1.633cc4p-3,
+ 0x1.9f868ep+2,
+ -0x1.db78ep-1,
+ -0x1.6b700ap+2,
+ -0x1.04137ep+1,
+ 0x1.6b8552p+0,
+ 0x1.37ad6p+3,
+ 0x1.75f16p+3,
+ -0x1.811434p+1,
+ 0x1.417fcep+3,
+ -0x1.f1ce28p-2,
+ 0x1.363584p+3,
+ 0x1.ff1094p+1,
+ 0x1.90a454p+2,
+ -0x1.cb3544p+1,
+ -0x1.651e0ep-3,
+ 0x1.80cdf4p+3,
+ 0x1.5fcd1ap+0,
+ -0x1.31335cp+5,
+ 0x1.aa75dep+2,
+ 0x1.db9a66p+0,
+ -0x1.52754p+3,
+ 0x1.10a55ep+0,
+ 0x1.cae0eap+2,
+ 0x1.c6af44p-1,
+ -0x1.cde492p+1,
+ -0x1.93aab4p+1,
+ -0x1.1213c4p+2,
+ -0x1.9c4b32p+0,
+ -0x1.d8fa66p+0,
+ 0x1.5cf4a6p+2,
+ -0x1.90565ap+2,
+ 0x1.b65acp+2,
+ -0x1.5e0c1ep-3,
+ 0x1.10cb7p+3,
+ -0x1.658ecap-3,
+ 0x1.43e2f6p+0,
+ -0x1.bc6366p+2,
+ 0x1.665548p-1,
+ -0x1.11cd7p-1,
+ 0x1.173eep+0,
+ -0x1.4e1d58p+2,
+ 0x1.7494ccp+1,
+ -0x1.26d708p+4,
+ -0x1.34c074p+1,
+ 0x1.85edc2p+1,
+ 0x1.a79a8ep+1,
+ -0x1.628072p-3,
+ 0x1.f8daep-3,
+ 0x1.84fe96p-2,
+ 0x1.5b45f4p-2,
+ -0x1.58870cp-3,
+ -0x1.37ba3ep+2,
+ -0x1.653a8ep-1,
+ 0x1.719f5cp-2,
+ -0x1.2e786ep+1,
+ 0x1.662788p+2,
+ 0x1.dba64p+2,
+ -0x1.aca33ap+2,
+ 0x1.b3223ap+2,
+ -0x1.23a97ap+2,
+ -0x1.b5b582p+2,
+ 0x1.1b9cccp-2,
+ -0x1.7753bp-2,
+ 0x1.5e542p+2,
+ -0x1.5abfp+1,
+ 0x1.dd8a8ap+2,
+ -0x1.b41d7ep+1,
+ -0x1.65a87p-4,
+ 0x1.3966eap+3,
+ -0x1.81735ap+2,
+ 0x1.b46238p-1,
+ -0x1.aa568ep+2,
+ 0x1.37a5bp+3,
+ 0x1.e3p-4,
+ 0x1.97a2f6p-1,
+ 0x1.334cep+0,
+ 0x1.90b7aep-3,
+ 0x1.0d89fap+1,
+ 0x1.6231ccp+2,
+ -0x1.614f2p+0,
+ 0x1.34f15cp+0,
+ -0x1.6d631ap+1,
+ 0x1.ba88d2p+2,
+ -0x1.3f0d44p+3,
+ 0x1.aff8bp-4,
+ 0x1.05c3d6p+1,
+ 0x1.407924p-1,
+ -0x1.52616cp+0,
+ 0x1.bcbf28p+2,
+ -0x1.48f218p+2,
+ 0x1.3f457p+0,
+ 0x1.ecbac4p-4,
+ 0x1.9088bap-2,
+ -0x1.d4d294p+2,
+ -0x1.620106p-3,
+ 0x1.487b7cp+3,
+ 0x1.3c89f8p-2,
+ -0x1.82a98p+2,
+ 0x1.f69746p+0,
+ 0x1.cf72b6p+2,
+ -0x1.6460cep-3,
+ -0x1.813142p+1,
+ -0x1.7d2a9cp+2,
+ 0x1.ebf4eep+2,
+ 0x1.bbc7fcp+2,
+ -0x1.fc9bf2p+1,
+ -0x1.abd912p-1,
+ -0x1.181baep-1,
+ -0x1.376852p-3,
+ 0x1.2f9d3ap+2,
+ 0x1.a43f72p+2,
+ 0x1.10cd82p+3,
+ 0x1.330766p-7,
+ 0x1.9c7abap-2,
+ -0x1.1d151ap+4,
+ 0x1.0420aep+2,
+ -0x1.1c82d8p-4,
+ 0x1.03f97p-1,
+ -0x1.9ce762p-2,
+ -0x1.01d9a8p+1,
+ 0x1.bc5b9ep-3,
+ -0x1.b85dd4p+2,
+ -0x1.5fbe3ep-3,
+ 0x1.a2fca8p-1,
+ -0x1.f87332p-2,
+ 0x1.ffb102p-1,
+ 0x1.496214p+0,
+ -0x1.830a7p+2,
+ -0x1.0509fap-2,
+ -0x1.53079ap+0,
+ 0x1.76198p+0,
+ -0x1.5dbb76p-3,
+ 0x1.a46a9ep+1,
+ -0x1.646f1ap+5,
+ -0x1.ab75c8p+1,
+ -0x1.b85902p-6,
+ 0x1.284bc2p+0,
+ -0x1.62cc74p-3,
+ 0x1.c928cap+2,
+ 0x1.40b302p-2,
+ -0x1.737232p+2,
+ 0x1.3a823cp-1,
+ 0x1.157b9ep+1,
+ -0x1.a1ba3ep+4,
+ 0x1.f51844p+2,
+ 0x1.b43bdep+2,
+ 0x1.142676p+2,
+ -0x1.2d1b7ep+2,
+ 0x1.51213ep-2,
+ 0x1.7b7938p+2,
+ -0x1.57e164p+1,
+ -0x1.1f42a4p+1,
+ -0x1.bedddep+1,
+ -0x1.0501eap+2,
+ 0x1.c8d1fp+2,
+ -0x1.7427cep+5,
+ -0x1.167deep-1,
+ 0x1.820772p-3,
+ -0x1.f0b1dap+1,
+ 0x1.87c9e4p+2,
+ 0x1.6eeeeap+1,
+ -0x1.a35f4ap+2,
+ 0x1.8ae50ap+0,
+ -0x1.28cd7ap+1,
+ 0x1.3e18f6p+0,
+ 0x1.50b63p+2,
+ 0x1.36c114p+3,
+ -0x1.00bc3p+1,
+ -0x1.0a799p+3,
+ 0x1.3cc37p+0,
+ 0x1.8c48p-1,
+ -0x1.0d831ep+1,
+ 0x1.ce8994p+2,
+ 0x1.745a2ep+1,
+ 0x1.36a8p+3,
+ -0x1.1a770ap+1,
+ -0x1.86528ep-1,
+ 0x1.47be68p+3,
+ -0x1.0eb4f6p+0,
+ -0x1.611df2p-3,
+ 0x1.46c5ecp+3,
+ -0x1.e55996p-10,
+ -0x1.5e20e4p-3,
+ -0x1.60f51ep-1,
+ -0x1.49bcp+2,
+ 0x1.649348p+1,
+ 0x1.87a4aep-4,
+ -0x1.7aa58cp+2,
+ 0x1.8cf99ap-4,
+ 0x1.bd5326p+2,
+ 0x1.8ce666p+0,
+ -0x1.6bff88p-1,
+ 0x1.d12a7ap+2,
+ 0x1.7dc29cp+2,
+ 0x1.421e8ap+3,
+ -0x1.656186p-3,
+ -0x1.1fa2e2p+1,
+ 0x1.dfd894p+2,
+ -0x1.e24b84p-1,
+ -0x1.08b8c2p+0,
+ -0x1.b3cd68p+2,
+ -0x1.5b7acep-3,
+ 0x1.e3432ap+2,
+ -0x1.58e15cp+2,
+ -0x1.0d7ad6p+3,
+ 0x1.a8262ep-3,
+ -0x1.55364ap+2,
+ -0x1.b95818p+1,
+ -0x1.5263c2p+1,
+ -0x1.43d4ccp-1,
+ -0x1.ccb046p+3,
+ -0x1.f4969ap-1,
+ -0x1.3bcb7ep-2,
+ -0x1.2f32cp+2,
+ -0x1.61303ap-3,
+ -0x1.df2826p-1,
+ 0x1.5e9fc2p+2,
+ 0x1.d03e14p-4,
+ 0x1.42320cp+3,
+ -0x1.aa2f4p+2,
+ -0x1.f3d52ap+0,
+ -0x1.818c72p-2,
+ 0x1.32d08ep+2,
+ -0x1.c332p+0,
+ 0x1.dc5dc2p+0,
+ 0x1.1c7358p-1,
+ -0x1.3adfd8p-1,
+ 0x1.113bap+0,
+ -0x1.5b65a6p-3,
+ 0x1.36437cp+3,
+ 0x1.bb8dbap+2,
+ -0x1.c46d9p+1,
+ -0x1.c678d6p-1,
+ 0x1.3c9146p+3,
+ 0x1.485612p+3,
+ 0x1.f87d98p-1,
+ -0x1.bf2d5cp+0,
+ -0x1.cd2c2ap+2,
+ 0x1.829d9ap-1,
+ -0x1.a95bd8p+2,
+ 0x1.a857aep+0,
+ -0x1.03261cp+2,
+ -0x1.8657d6p-1,
+ 0x1.50b348p+0,
+ 0x1.d615fp+2,
+ 0x1.8b0548p-5,
+ -0x1.d0aa84p+1,
+ -0x1.9b93cap+2,
+ -0x1.595412p-3,
+ 0x1.b6ab74p-2,
+ 0x1.16c592p-2,
+ 0x1.cccc72p+1,
+ -0x1.657c7p+1,
+ 0x1.aa995cp+2,
+ -0x1.fa172ep+1,
+ -0x1.12a886p+2,
+ -0x1.9173d8p+2,
+ 0x1.9c3ca8p-3,
+ 0x1.e796ccp+0,
+ 0x1.182396p-3,
+ -0x1.4291dap-4,
+ -0x1.62f536p-3,
+ 0x1.7216e8p+2,
+ 0x1.cb45c8p+2,
+ -0x1.497518p+2,
+ -0x1.351996p+1,
+ -0x1.0dfe32p+2,
+ 0x1.3bfc3cp+0,
+ -0x1.39bd7p-6,
+ -0x1.3a197ap+1,
+ -0x1.830bc2p+2,
+ 0x1.b3857ep-5,
+ -0x1.53f426p+2,
+ -0x1.5f6ba2p-3,
+ -0x1.4ed77ap+1,
+ -0x1.556abp+2,
+ 0x1.9712p+1,
+ 0x1.0bf266p+0,
+ -0x1.ad2376p+2,
+ -0x1.af3504p+1,
+ -0x1.76e7ep+2,
+ -0x1.6562bap+1,
+ 0x1.843614p-2,
+ 0x1.384ef8p+3,
+ -0x1.47a784p+0,
+ 0x1.f4a732p+2,
+ -0x1.7ce922p+2,
+ -0x1.336c52p+0,
+ -0x1.48c65cp+1,
+ 0x1.494452p+3,
+ -0x1.193914p+5,
+ 0x1.3577d2p+2,
+ -0x1.63f1bep-3,
+ -0x1.55d4d8p-4,
+ 0x1.d880eep-1,
+ -0x1.7204ep+0,
+ 0x1.dbbb12p+2,
+ -0x1.5e758ap-3,
+ -0x1.21018p+1,
+ 0x1.06676ep+2,
+ -0x1.646416p-3,
+ 0x1.03d04p+2,
+ 0x1.10cb02p+3,
+ -0x1.6987b8p+1,
+ -0x1.fb44dp+0,
+ 0x1.0e49ecp+1,
+ -0x1.ae974ap+2,
+ -0x1.8170a4p-9,
+ -0x1.a49d78p+1,
+ 0x1.f48614p-2,
+ 0x1.c3c598p+0,
+ 0x1.5b5d38p+2,
+ -0x1.e7e994p+1,
+ -0x1.5ffb9ap-3,
+ -0x1.1b21bp+3,
+ -0x1.71927p+1,
+ -0x1.5b87aep-3,
+ 0x1.106eccp+2,
+ 0x1.3e7aep-4,
+ 0x1.36a5d8p+3,
+ 0x1.1e7f48p+0,
+ -0x1.6caff6p+2,
+ 0x1.91cf84p-1,
+ -0x1.34c43cp+1,
+ -0x1.594ad2p+2,
+ 0x1.dd37d4p+2,
+ 0x1.f073e8p+2,
+ 0x1.cef936p+2,
+ -0x1.bab5acp-2,
+ -0x1.035e0ap+0,
+ 0x1.6d44ccp-2,
+ -0x1.1c4808p+2,
+ -0x1.e8786ap+1,
+ 0x1.388c7cp+3,
+ 0x1.8766aep+1,
+ -0x1.5eaeb6p-3,
+ -0x1.64b42cp-3,
+ -0x1.027faep-1,
+ -0x1.ba8b4ep+1,
+ 0x1.266edap+2,
+ 0x1.9fd6c2p+2,
+ -0x1.a44034p+1,
+ 0x1.78abccp+1,
+ 0x1.377b5p+3,
+ -0x1.940a02p+1,
+ -0x1.fdb2bcp+0,
+ -0x1.65ae92p-3,
+ 0x1.a521c8p+3,
+ -0x1.4749aap+3,
+ -0x1.c1a2dep-1,
+ -0x1.7f4bfep+3,
+ 0x1.3f9db8p+3,
+ 0x1.6c7c0ap+2,
+ 0x1.82779cp-1,
+ -0x1.824e0ep+2,
+ 0x1.fec4ccp-2,
+ 0x1.e58412p+2,
+ -0x1.578fc8p+3,
+ 0x1.0ccf34p-2,
+ -0x1.6173bcp+0,
+ -0x1.f7357p+0,
+ 0x1.f3e768p+2,
+ 0x1.4317e2p+3,
+ -0x1.0f5222p+1,
+ -0x1.e5895ep-5,
+ 0x1.d298dep+2,
+ 0x1.c86c1ep+2,
+ 0x1.459134p+3,
+ -0x1.553b7ap-3,
+ -0x1.05c35cp+0,
+ 0x1.4461bcp+2,
+ 0x1.9bc9eap-4,
+ 0x1.06295cp+0,
+ 0x1.43d93ep+3,
+ 0x1.556832p+2,
+ 0x1.f4b8d6p+1,
+ -0x1.465f64p+1,
+ -0x1.614fdep-3,
+ -0x1.b5350ep-3,
+ 0x1.9f56p+0,
+ 0x1.454eb6p+3,
+ -0x1.fba2cep+1,
+ -0x1.5f303cp-3,
+ 0x1.6ceed2p+0,
+ 0x1.58255cp+2,
+ 0x1.b69528p+1,
+ 0x1.7177ep+3,
+ -0x1.a45ad8p-1,
+ -0x1.94f706p+0,
+ -0x1.be9e04p+2,
+ 0x1.5bf948p+0,
+ 0x1.10cacep+3,
+ -0x1.740c94p+2,
+ -0x1.09bff6p+1,
+ 0x1.3671c4p+3,
+ 0x1.bec15cp+2,
+ -0x1.6346d4p+2,
+ 0x1.bd4e1cp+2,
+ 0x1.82d99ap-1,
+ -0x1.8225a8p+2,
+ 0x1.220a66p-2,
+ -0x1.e16c52p-1,
+ -0x1.35848ep-1,
+ 0x1.e11384p-2,
+ -0x1.8d8592p+0,
+ 0x1.4c29bcp+1,
+ 0x1.387af8p+2,
+ 0x1.8d8fd6p-1,
+ 0x1.c7d02ep+2,
+ -0x0p+0,
+ 0x1.38ec96p+3,
+ -0x1.306a06p+2,
+ -0x1.59c33ep-3,
+ 0x1.6d72f4p+0,
+ -0x1.cf944cp+2,
+ -0x1.5dac8cp-3,
+ 0x1.acda6p+2,
+ -0x1.e3cbf2p+1,
+ -0x1.0cdac4p+0,
+ 0x1.390014p+2,
+ -0x1.64fceep+2,
+ -0x1.82edfep+2,
+ -0x1.3ea13cp+3,
+ -0x1.0b4e5cp+1,
+ 0x1.01028ep-5,
+ -0x1.2bb428p-2,
+ 0x1.00128p+0,
+ -0x1.7adbfap-1,
+ 0x1.e535f2p+2,
+ -0x1.648a8cp-3,
+ 0x1.e84186p+2,
+ -0x1.6321p+0,
+ -0x1.0a5654p+3,
+ 0x1.124c1cp-2,
+ 0x1.bba78ep+2,
+ 0x1.4531d8p+3,
+ 0x1.1bf358p+0,
+ 0x1.6cf66p+1,
+ -0x1.033dc6p+2,
+ 0x1.4311aap+3,
+ -0x1.766bdcp-3,
+ 0x1.828456p+2,
+ 0x1.3e467ap+3,
+ -0x1.7fcebep-2,
+ -0x1.432faep-1,
+ -0x1.924aaep+1,
+ -0x1.646662p+2,
+ -0x1.892088p+0,
+ -0x1.2b8eb8p+0,
+ 0x1.50170ap-5,
+ 0x1.50ad28p+1,
+ 0x1.e2ca16p+2,
+ 0x1.c2a97cp-1,
+ -0x1.613492p-3,
+ -0x1.7c95f4p+1,
+ -0x1.b20d22p+0,
+ 0x1.713644p-2,
+ 0x1.f59c7ap-2,
+ 0x1.07cd36p+2,
+ -0x1.467f64p-2,
+ -0x1.01f75cp-2,
+ 0x1.54450cp-2,
+ -0x1.cd8dc2p-1,
+ 0x1.441b4ap+3,
+ -0x1.a839b6p+2,
+ 0x1.6a2932p+0,
+ -0x1.3345ecp-1,
+ 0x1.d0f1dep+2,
+ -0x1.657a4cp-3,
+ -0x1.408364p+2,
+ -0x1.01883ep+1,
+ 0x1.fe29aap-4,
+ 0x1.924d0ap+0,
+ -0x1.5d1a3cp-2,
+ 0x1.c7d03cp+2,
+ 0x1.d03b78p+2,
+ 0x1.0b450ep+0,
+ -0x1.e230c4p+1,
+ -0x1.baa6ep-1,
+ 0x1.75c21ep+2,
+ 0x1.30bcbcp+0,
+ -0x1.8f395cp+2,
+ 0x1.d0c2aep+2,
+ -0x1.64f59ap-3,
+ -0x1.ea3c2ap+1,
+ -0x1.0506c6p+2,
+ 0x1.67c7fp-2,
+ 0x1.1b8feep+2,
+ -0x1.1b0498p+3,
+ 0x1.451682p+3,
+ 0x1.76a29p-1,
+ -0x1.2162d4p+4,
+ -0x1.7e93c8p-4,
+ -0x1.afffd6p+2,
+ 0x1.f2p-7,
+ -0x1.8c62bep+5,
+ 0x1.effbep+2,
+ 0x1.d1b852p+2,
+ 0x1.5cdbd2p+0,
+ 0x1.c06b2p-1,
+ -0x1.b33b84p-2,
+ 0x1.71d7c2p+0,
+ -0x1.64c27ap-3,
+ -0x1.3ea13cp+3,
+ -0x1.7d82b2p+2,
+ 0x1.aa6d0cp+2,
+ -0x1.ed7f5p-4,
+ -0x1.e8264ep+2,
+ -0x1.ae1c56p+2,
+ -0x1.7abe24p+2,
+ 0x1.4236f4p+3,
+ -0x1.c2268cp-2,
+ 0x1.6114aep+1,
+ -0x1.60f716p-3,
+ -0x1.09918ap+0,
+ 0x1.1c06a4p+0,
+ 0x1.860c26p-2,
+ 0x1.c42886p+3,
+ -0x1.3447aep-5,
+ -0x1.db094cp+3,
+ -0x1.6dcbep+2,
+ -0x1.4ec2dep-2,
+ 0x1.45b736p+3,
+ 0x1.3ff3dp-1,
+ -0x1.bcfd2ap+2,
+ -0x1.8854acp+2,
+ -0x1.a0ff42p+0,
+ 0x1.04fab8p-1,
+ -0x1.30bp-2,
+ 0x1.407192p+3,
+ -0x1.79ac6ap+2,
+ 0x1.2277cap-1,
+ 0x1.35f784p+3,
+ -0x1.35df54p+2,
+ -0x1.610686p-3,
+ -0x1.64178ep-3,
+ -0x1.65b712p-3,
+ 0x1.10795cp+0,
+ 0x1.8ab654p+2,
+ 0x1.37e6dcp+3,
+ 0x1.4375bep+3,
+ 0x1.98562p+2,
+ 0x1.e2c1a8p+2,
+ 0x1.53f1ecp-1,
+ -0x1.0c4b76p+1,
+ -0x1.54a9ep+2,
+ 0x1.84b444p+3,
+ 0x1.a738a4p+0,
+ 0x1.95b5e4p+2,
+ -0x1.eda14p+1,
+ 0x1.9f4bb6p+2,
+ 0x1.ff370ap-1,
+ 0x1.443dbcp+3,
+ 0x1.7780ccp-1,
+ -0x1.968c9ap+1,
+ 0x1.6612fap+2,
+ 0x1.7b6bdep+2,
+ -0x1.5b9b7cp-3,
+ 0x1.8679b8p-1,
+ 0x1.456d38p+3,
+ -0x1.b3db5cp-1,
+ 0x1.9c6b3cp+1,
+ 0x1.96479cp+0,
+ -0x1.814ec8p+2,
+ -0x1.6dcb18p+2,
+ 0x1.110848p-2,
+ -0x1.1f7ffp+1,
+ -0x1.e60428p+1,
+ 0x1.6bea2ep+1,
+ 0x1.21c3d4p-1,
+ -0x1.d0723ap+2,
+ -0x1.2b0ccap-1,
+ -0x1.ed681cp+1,
+ 0x1.5423d6p-4,
+ 0x1.43c694p+1,
+ 0x1.335p+0,
+ -0x1.551ee4p-3,
+ -0x1.7961eep+2,
+ -0x1.10339cp+2,
+ 0x1.62a75ep-4,
+ 0x1.d3e368p+2,
+ -0x1.c5a18ep+1,
+ -0x1.2da37ep+6,
+ 0x1.9fd6ep+0,
+ -0x1.617842p+2,
+ 0x1.7ceeb8p-3,
+ 0x1.c1b256p-1,
+ -0x1.04dbfp+5,
+ -0x1.c276c6p+0,
+ -0x1.667c36p+2,
+ -0x1.700c48p+2,
+ 0x1.0174ecp+0,
+ -0x1.e1e5f8p-1,
+ 0x1.e5b97p+2,
+ 0x1.797d68p+2,
+ -0x1.2b722ap+0,
+ -0x1.143b4ap+3,
+ 0x1.437d6ep+3,
+ 0x1.942202p-4,
+ -0x1.06013ep+1,
+ -0x1.e739p+2,
+ 0x1.369ddap+3,
+ -0x1.6f15eap+2,
+ 0x1.231e36p+2,
+ -0x1.f77b84p+0,
+ -0x1.68ed1ep+0,
+ -0x1.84c91ap+4,
+ -0x1.e6819cp-2,
+ 0x1.a0c1e6p+2,
+ -0x1.80a3ecp+0,
+ 0x1.ce8948p-2,
+ -0x1.e6dc46p+1,
+ 0x1.bbde32p-5,
+ 0x1.0ef40cp+2,
+ -0x1.5f668p-1,
+ -0x1.99b3a4p+2,
+ 0x1.497064p+3,
+ -0x1.96d5f6p+2,
+ -0x1.2db79p-5,
+ -0x1.5b661ep-3,
+ 0x1.5f1226p+2,
+ 0x1.cd7992p+2,
+ -0x1.5c4c9ep+2,
+ 0x1.860548p+0,
+ 0x1.3d40ep+3,
+ 0x1.1e676ep+2,
+ 0x1.7a52e6p-2,
+ -0x1.5ecea6p+0,
+ 0x1.53567ap+2,
+ -0x1.78bf34p-1,
+ 0x1.430f92p+3,
+ -0x1.26b57p-2,
+ -0x1.81b49p+2,
+ -0x1.7949ep+0,
+ -0x1.58403ep-3,
+ 0x1.941b48p+0,
+ -0x1.508df4p+2,
+ 0x1.99ca4ap-2,
+ -0x1.944b84p-3,
+ 0x1.36bb82p+3,
+ 0x1.2b7daep+0,
+ -0x1.3b6ed8p+2,
+ 0x1.18abep-2,
+ -0x1.f359d6p+0,
+ -0x1.8d59fep-2,
+ 0x1.175bd4p-1,
+ -0x1.7bb492p+2,
+ -0x1.6c687ap+0,
+ -0x1.6551b2p-3,
+ -0x1.1077aep-2,
+ -0x1.23a6d6p+1,
+ -0x1.7c9692p+2,
+ -0x1.649712p-3,
+ 0x1.71726ap+1,
+ -0x1.10ac4ep+3,
+ 0x1.3a74a6p+0,
+ 0x1.6e98a4p-1,
+ 0x1.b7dc68p-2,
+ -0x1.c34fbep+1,
+ -0x1.9b2efap+2,
+ 0x1.64fc28p+1,
+ -0x1.08275ep+0,
+ -0x1.90b768p+1,
+ -0x1.04687ap+0,
+ 0x1.022a3ep-2,
+ 0x1.31d856p+2,
+ -0x1.1916a6p+2,
+ -0x1.071b6p+5,
+ 0x1.580aeep+2,
+ -0x1.0e753ep+1,
+ 0x1.6d8e6ep+0,
+ 0x1.afc04p+2,
+ -0x1.0c5c88p+2,
+ -0x1.0b0094p+2,
+ -0x1.a9374cp+2,
+ -0x1.389e9ap-4,
+ -0x1.9e1a66p+0,
+ 0x1.2917a4p+2,
+ 0x1.4516a4p+0,
+ -0x1.58d6d2p-3,
+ -0x1.8d3282p-1,
+ 0x1.9ce2acp+3,
+ 0x1.75f332p-1,
+ 0x1.ab3d0ap+0,
+ -0x1.75513ep+3,
+ 0x1.b4056ap+1,
+ 0x1.accf0ap+0,
+ -0x1.648446p-3,
+ 0x1.b6284ap+2,
+ 0x1.0a73e6p+3,
+ -0x1.8f931ep+0,
+ -0x1.653ab4p-3,
+ -0x1.a07646p+2,
+ -0x1.838fcep+2,
+ -0x1.1fcca4p-1,
+ 0x1.3f8acp+3,
+ -0x1.e72a6p+2,
+ 0x1.53451ep-3,
+ -0x1.21bf8p-1,
+ 0x1.477cccp+0,
+ -0x1.1f2f32p-1,
+ 0x1.65303cp+0,
+ 0x1.43e608p+3,
+ -0x1.c06e3cp+0,
+ 0x1.b3408ep+0,
+ -0x1.5b09dp-2,
+ -0x1.2f482ep+2,
+ -0x1.358416p+2,
+ -0x1.d2b2ap+2,
+ -0x1.1883d6p+2,
+ 0x1.d2229cp+2,
+ -0x1.35c1a2p+1,
+ -0x1.8bb666p+3,
+ -0x1.1d2eb6p+3,
+ -0x1.600dp-3,
+ -0x1.1c721p+3,
+ -0x1.644118p+2,
+ 0x1.9f08ap+2,
+ 0x1.8c13d4p+2,
+ 0x1.35c95p+3,
+ 0x1.80d7cap+2,
+ -0x1.58caa4p-2,
+ 0x1.4628p-2,
+ -0x1.27d56ep+0,
+ 0x1.380e6cp+3,
+ 0x1.8539aap+2,
+ -0x1.56efep+1,
+ -0x1.ef1648p-1,
+ -0x1.8549eep+2,
+ 0x1.155e12p+4,
+ -0x1.53d3bap-3,
+ -0x1.9c7e88p+2,
+ 0x1.d688fcp+2,
+ -0x1.54807ep-3,
+ -0x1.7436b8p-2,
+ 0x1.6ca666p-1,
+ -0x1.6c77b6p-1,
+ 0x1.37fa42p+3,
+ -0x1.98f9eep+1,
+ 0x1.1b44p+0,
+ -0x1.3277eep-1,
+ 0x1.0da99ap-2,
+ 0x1.9c6892p+2,
+ -0x1.c47754p+2,
+ 0x1.a31352p-4,
+ 0x1.71f8p-1,
+ -0x1.22ff28p+1,
+ 0x1.374108p+3,
+ 0x1.b5cd8ap+1,
+ -0x1.5b3f32p-3,
+ -0x1.56193ap-3,
+ -0x1.2fdd8ap+4,
+ -0x1.5956b2p+2,
+ -0x1.772006p+1,
+ -0x1.5a291cp-3,
+ 0x1.2124fcp+2,
+ 0x1.d378fp+2,
+ 0x1.76b3f4p-3,
+ 0x1.00387ap+0,
+ -0x1.362686p+2,
+ 0x1.451ba6p+3,
+ -0x1.066914p+1,
+ 0x1.213ddap+0,
+ -0x1.6f10d2p+2,
+ -0x1.ecab64p-6,
+ 0x1.b96d0cp+2,
+ -0x1.63cd96p-3,
+ 0x1.366b4cp+1,
+ 0x1.31a756p+0,
+ -0x1.c721c6p-5,
+ -0x1.6ed70ap-6,
+ 0x1.24ab92p-3,
+ -0x1.47a3aep-1,
+ 0x1.950d6p+2,
+ -0x1.57ffb6p-3,
+ 0x1.c9c3aep+0,
+ 0x1.d7bf4p+2,
+ -0x1.2814f6p+0,
+ -0x1.60f6cep-3,
+ -0x1.62a2fep-3,
+ 0x1.d818ccp-1,
+ 0x1.76c47ap-3,
+ -0x1.5b8674p+2,
+ -0x1.d5f9dep+2,
+ 0x1.620a42p+2,
+ 0x1.b6d2d6p+2,
+ -0x1.4b037p+0,
+ -0x1.a0735cp-1,
+ -0x1.272cf6p-1,
+ -0x1.14c35cp-1,
+ -0x1.d9620ap-1,
+ 0x1.f2921p-1,
+ 0x1.7784f6p+1,
+ 0x1.ba38f6p-3,
+ -0x1.cecfdep+2,
+ -0x1.13b832p-5,
+ 0x1.d4f442p+2,
+ 0x1.b36cap+2,
+ 0x1.500062p-1,
+ -0x1.04dc5cp+1,
+ -0x1.5e9754p+2,
+ -0x1.b961p-6,
+ -0x1.cfcfe6p+1,
+ 0x1.650866p+0,
+ -0x1.545418p+3,
+ -0x1.115a7ap+0,
+ -0x1.99b554p+2,
+ -0x1.ea403p-2,
+ -0x1.6183a2p-2,
+ 0x1.919b5ap+2,
+ -0x1.5afc4ap-3,
+ 0x1.ea9146p-2,
+ -0x1.00c81ep+1,
+ -0x1.4aa03ep+2,
+ 0x1.878edp-3,
+ 0x1.18dadap-4,
+ 0x1.60d8bcp+1,
+ 0x1.e9192cp-1,
+ 0x1.797b0ap+0,
+ 0x1.1dafa4p+0,
+ -0x1.98f70ap-1,
+ 0x1.ae13c2p+2,
+ -0x1.c9ffd6p-4,
+ 0x1.3cd90ap+0,
+ -0x1.5638cep-3,
+ 0x1.448b38p+3,
+ 0x1.b5f5e4p+2,
+ -0x1.27e222p+2,
+ 0x1.42a508p+3,
+ -0x1.9a6a7p+2,
+ 0x1.36cbc2p+3,
+ 0x1.e9676p+1,
+ 0x1.95abdep+2,
+ -0x1.666aep+0,
+ -0x1.d48214p+0,
+ 0x1.d7d86ap+1,
+ 0x1.78e714p+1,
+ 0x1.a4161ep-2,
+ -0x1.34e68ep-1,
+ 0x1.d5450cp+2,
+ 0x1.7e3dc2p-2,
+ -0x1.92407ap+2,
+ 0x1.4418b4p+3,
+ -0x1.763d3p+3,
+ -0x1.116978p+3,
+ 0x1.9018aep+2,
+ -0x1.80c9bep-2,
+ 0x1.5bec14p+0,
+ -0x1.7ccf84p+0,
+ 0x1.44e018p+3,
+ -0x1.279b7p+2,
+ -0x1.2d08ap-1,
+ 0x1.bb4d8ep+1,
+ 0x1.be100ep-1,
+ -0x1.5c1c3ap-3,
+ 0x1.4bf624p+2,
+ 0x1.adaa76p+2,
+ -0x1.5cd68ep+0,
+ -0x1.3185fp+2,
+ 0x1.3dee18p-4,
+ -0x1.e395f8p-1,
+ -0x1.e8528ap+2,
+ -0x1.5b326ap+2,
+ 0x1.35bcbcp+3,
+ -0x1.0802cp+5,
+ 0x1.fdab84p-2,
+ -0x1.158152p-1,
+ -0x1.5140c6p+3,
+ 0x1.14f5c2p+1,
+ -0x1.a6f156p-1,
+ -0x1.63d8b2p-3,
+ -0x1.228ec4p+2,
+ 0x1.51173p-1,
+ -0x1.c2abeep+2,
+ -0x1.5f6792p+2,
+ -0x1.88bfc2p+2,
+ 0x1.4a6decp+0,
+ 0x1.d0a6cp+2,
+ -0x1.c10dccp+1,
+ -0x1.60b94p+5,
+ -0x1.3f78eep+3,
+ 0x1.f1b1ep+1,
+ -0x1.404326p+2,
+ 0x1.9c6bd6p-2,
+ 0x1.4e963cp-4,
+ 0x1.1d26b4p+2,
+ -0x1.37d952p+2,
+ 0x1.7eee38p+3,
+ 0x1.c5392ep+2,
+ 0x1.9128ap+2,
+ 0x1.9c8fd6p+2,
+ 0x1.be43d6p-2,
+ -0x1.57f9e2p-4,
+ 0x1.434bacp+3,
+ 0x1.2d0f2cp-1,
+ -0x1.ba23aap+1,
+ 0x1.3ae01cp+3,
+ -0x1.95778ap+2,
+ -0x1.c65b3cp+1,
+ 0x1.23ae7ap+1,
+ -0x1.23d308p+2,
+ -0x1.ba5c3cp+0,
+ -0x1.d07b0ep-3,
+ 0x1.504052p-2,
+ 0x1.5e1a46p+0,
+ 0x1.95dd28p+2,
+ 0x1.897f68p+2,
+ -0x1.56811ep+0,
+ 0x1.9b504p+2,
+ 0x1.034f02p+4,
+ -0x1.6a872ap+0,
+ 0x1.eb077ap+2,
+ -0x1.6b6004p+0,
+ 0x1.71ec28p-1,
+ 0x1.00a18ap+2,
+ 0x1.a65932p+0,
+ 0x1.f27e3cp+2,
+ -0x1.683308p+0,
+ -0x1.6de68ap+0,
+ -0x1.f15cbap+2,
+ -0x1.2390c2p+2,
+ 0x1.eeaa42p+2,
+ -0x1.feccb4p+0,
+ -0x1.234018p+4,
+ -0x1.ffb332p+0,
+ -0x1.8fbd1ep-1,
+ -0x1.2666b8p-1,
+ 0x1.10c816p+3,
+ -0x1.7fd956p-2,
+ -0x1.073c3ap+3,
+ -0x1.63a47cp+1,
+ 0x1.814d1ep-2,
+ 0x1.65d55ap-1,
+ -0x1.64c9b4p-3,
+ 0x1.d9562ap+2,
+ -0x1.60f91cp-3,
+ -0x1.650866p-3,
+ 0x1.48178cp+3,
+ 0x1.e0d776p+2,
+ -0x1.6f9418p+1,
+ -0x1.1bf3ecp+0,
+ 0x1.f4717p-1,
+ 0x1.c791f6p+2,
+ -0x1.525c08p-1,
+ -0x1.62d062p-3,
+ -0x1.eb511ep-2,
+ -0x1.09cd3cp+0,
+ 0x1.3e45ap+3,
+ 0x1.301802p-1,
+ -0x1.39bbdap+2,
+ -0x1.c82196p+2,
+ -0x1.303b3ap+4,
+ 0x1.8f4b08p+2,
+ 0x1.035eeep-2,
+ -0x1.5fe326p-3,
+ 0x1.04028ep-5,
+ 0x1.d3fafcp+2,
+ 0x1.42ba5ap-1,
+ -0x1.cdeb2ep+0,
+ -0x1.7500a8p+2,
+ 0x1.7dbbbcp+0,
+ -0x1.f4eb86p+2,
+ 0x1.7c47aep-6,
+ 0x1.75b67p-2,
+ 0x1.8d873ap+2,
+ 0x1.5bccacp+0,
+ -0x1.e151a8p+0,
+ -0x1.51474ep-2,
+ 0x1.c0ea9ep+2,
+ -0x1.a23e0ep+2,
+ -0x1.011accp+0,
+ -0x1.dde764p+4,
+ -0x1.da003cp+0,
+ -0x1.b005c2p-4,
+ 0x1.43b4aep+3,
+ 0x1.869f5cp+1,
+ -0x1.f8e706p+0,
+ -0x1.55077ap+1,
+ -0x1.136deap+2,
+ -0x1.0376a6p+3,
+ 0x1.f668f6p-3,
+ 0x1.17f31ep+0,
+ 0x1.ab83d8p-1,
+ -0x1.534404p+4,
+ -0x1.63de7cp-3,
+ -0x1.1cfap+0,
+ 0x1.576bd6p+0,
+ -0x1.4463a4p+2,
+ -0x1.65a27cp-3,
+ 0x1.b13052p-2,
+ 0x1.d483a4p+2,
+ -0x1.02d042p+1,
+ -0x1.60fa9cp-3,
+ -0x1.16e87ap-1,
+ 0x1.b492b8p+0,
+ -0x1.a4cf6ep+2,
+ 0x1.19af4cp+1,
+ 0x1.7e8bc2p+2,
+ -0x1.29775p+1,
+ -0x1.4cccccp+1,
+ 0x1.167266p+0,
+ -0x1.647cccp+1,
+ 0x1.1debfap+1,
+ -0x1.4e9166p-3,
+ 0x1.87c92ap+0,
+ -0x1.3ea13cp+3,
+ 0x1.8976ccp+0,
+ 0x1.6c7384p+0,
+ -0x1.5b557cp-3,
+ -0x1.30c126p+1,
+ -0x1.639d72p-3,
+ -0x1.4c44ap+2,
+ -0x1.6ea332p+1,
+ 0x1.8e982ap+2,
+ -0x1.81006p+2,
+ 0x1.1d4be4p+4,
+ -0x1.ec89fcp-1,
+ -0x1.503f1ap+2,
+ 0x1.e57e76p+2,
+ -0x1.5ddcaap-1,
+ 0x1.439434p+3,
+ -0x1.4a897ap+2,
+ -0x1.939222p+2,
+ -0x1.3da46cp-4,
+ -0x1.58bf08p+2,
+ -0x1.3eaadep+3,
+ -0x1.aab2eep+2,
+ -0x1.7c5af6p-1,
+ 0x1.bf4fccp+2,
+ 0x1.10cd1ep+3,
+ 0x1.fa0198p-1,
+ -0x1.ca7dc2p-4,
+ 0x1.894544p+2,
+ 0x1.442d5ep+3,
+ 0x1.371242p+3,
+ -0x1.95fba6p-1,
+ 0x1.d1a67p+2,
+ 0x1.769918p+0,
+ 0x1.4e61c2p-1,
+ -0x1.57c1ep+1,
+ -0x1.d74902p+0,
+ -0x1.3ea13cp+3,
+ -0x1.851e32p+2,
+ 0x1.247602p+2,
+ 0x1.3f0314p+1,
+ -0x1.637aep-2,
+ 0x1.41b1fap+3,
+ -0x1.04efc6p-3,
+ -0x1.88130cp+2,
+ -0x1.b2a146p+2,
+ 0x1.54bb5ep+3,
+ -0x1.a06ap+0,
+ -0x1.569e66p+0,
+ 0x1.2a59a8p+4,
+ -0x1.6105fap-3,
+ -0x1.82a98cp+1,
+ 0x1.a428f2p+2,
+ -0x1.8bb3eap+0,
+ -0x1.627f62p-3,
+ 0x1.b0f5c2p-9,
+ -0x1.469442p+1,
+ 0x1.4507e8p+3,
+ -0x1.86afacp+2,
+ 0x1.da41f8p+2,
+ -0x1.eece8ep-1,
+ -0x1.03cddp+1,
+ -0x1.225768p+4,
+ -0x1.51a33ap+2,
+ 0x1.24c926p+0,
+ 0x1.7b8ad4p+2,
+ -0x1.17bebcp-2,
+ 0x1.ac0e14p-3,
+ -0x1.82f9f6p+2,
+ -0x1.5e5b3p-1,
+ -0x1.805ffcp+2,
+ -0x1.600742p-3,
+ -0x1.887c68p-3,
+ -0x1.615aacp-3,
+ -0x1.7ba8fep+4,
+ 0x1.f6370ap-4,
+ -0x1.e06b9p+2,
+ -0x1.5fbfb2p-3,
+ 0x1.aaa50ep+2,
+ -0x1.8176fep+2,
+ 0x1.5ce1d2p+0,
+ 0x1.b23e64p-1,
+ -0x1.aea0ep+0,
+ -0x1.26c00cp+2,
+ -0x1.5a23bap+2,
+ -0x1.55a02ep-3,
+ 0x1.350bap+3,
+ -0x1.9b4ec6p+1,
+ 0x1.e0a52ep+2,
+ -0x1.74fe26p+2,
+ -0x1.1d92c2p+1,
+ -0x1.5da7d6p-1,
+ -0x1.312282p+1,
+ -0x1.62c91cp-3,
+ -0x1.c173f8p-1,
+ -0x1.9f0316p-1,
+ -0x1.4ba776p+2,
+ 0x1.cb445ep+2,
+ -0x1.7efb5cp-1,
+ 0x1.4595cap+3,
+ -0x1.5bcf12p-3,
+ 0x1.c3b3d6p-3,
+ -0x1.cb85d8p-3,
+ -0x1.2824ccp-1,
+ -0x1.a35d68p+2,
+ -0x1.87e812p+2,
+ -0x1.68cfd6p-1,
+ -0x1.b44846p+2,
+ -0x1.4cb4d4p+2,
+ -0x1.058c1cp-2,
+ -0x1.600046p-3,
+ 0x1.d80cb8p-2,
+ 0x1.babe66p+0,
+ 0x1.be9c56p+2,
+ 0x1.016978p-2,
+ -0x1.a61fbp+2,
+ 0x1.6bd5f6p+2,
+ -0x1.9e2b36p-2,
+ -0x1.936c78p+2,
+ -0x1.390932p+0,
+ -0x1.c978ccp+0,
+ 0x1.4fbcccp-2,
+ -0x1.605154p-3,
+ 0x1.00c70ap-2,
+ -0x1.65c06cp-3,
+ 0x1.a6f552p+2,
+ 0x1.0f98p-1,
+ -0x1.a673c6p+1,
+ 0x1.36420ap+3,
+ 0x1.20469p+2,
+ 0x1.da8c28p-1,
+ -0x1.451f4ep+2,
+ -0x1.c56adcp+2,
+ 0x1.c57f32p+0,
+ -0x1.12477p-1,
+ -0x1.3aa0aap-6,
+ 0x1.c60c24p+1,
+ -0x1.6476acp-3,
+ -0x1.6bbc9cp+2,
+ -0x1.7e46b6p+1,
+ -0x1.fae904p-3,
+ 0x1.b9451ep-4,
+ 0x1.4a5348p+0,
+ 0x1.aa0cp-1,
+ -0x1.7b5694p+2,
+ -0x1.59cb04p+2,
+ 0x1.47eaf2p+3,
+ -0x1.61696cp-3,
+ 0x1.3b5cep+0,
+ 0x1.30facp+0,
+ -0x1.7dfp-2,
+ 0x1.aefcfap+1,
+ 0x1.e5ae7cp+2,
+ -0x1.9920aap+1,
+ -0x1.410848p+1,
+ 0x1.7aa234p+1,
+ 0x1.5fe74cp+2,
+ -0x1.07b5aep+0,
+ 0x1.8d2e4p-1,
+ -0x1.5dc9bap-3,
+ 0x1.4edc32p-5,
+ -0x1.5a747ap-4,
+ -0x1.551516p-3,
+ 0x1.427c36p+3,
+ 0x1.d5762p+2,
+ -0x1.a94422p+0,
+ 0x1.2813dp+0,
+ -0x1.0aececp+2,
+ 0x1.430af8p+3,
+ 0x1.704334p+0,
+ -0x1.6180ecp-3,
+ 0x1.9878cep+2,
+ -0x1.5c8532p-3,
+ -0x1.a0f696p+2,
+ -0x1.63c81cp-3,
+ 0x1.5c9ccep+2,
+ 0x1.d0b332p+0,
+ 0x1.dd02fp+2,
+ 0x1.30824ap-4,
+ 0x1.f0ce3cp-1,
+ 0x1.375f9cp+3,
+ -0x1.1b636cp+4,
+ -0x1.c607ap+2,
+ 0x1.93b6f6p+0,
+ -0x1.640b8ap-3,
+ -0x1.ac8748p+0,
+ -0x1.148e5ep+2,
+ -0x1.60dfdep-3,
+ -0x1.61688cp-3,
+ -0x1.a87362p+2,
+ -0x1.5d02d8p+3,
+ -0x1.3692eep-1,
+ 0x1.ece852p-3,
+ -0x1.01c6ep+0,
+ 0x1.be7a58p+2,
+ -0x1.365372p-3,
+ 0x1.7dd0d4p-1,
+ 0x1.94f6ep+0,
+ 0x1.df5e8ap+2,
+ -0x1.28cdf2p+0,
+ -0x1.6547d2p-3,
+ -0x1.cbe236p-4,
+ -0x1.23dffep+1,
+ -0x1.2b9e4ep+2,
+ 0x1.28ff22p+0,
+ -0x1.5f1b8ep-3,
+ -0x1.af4f5cp-2,
+ -0x1.261c7cp+2,
+ -0x1.940248p+0,
+ -0x1.aa31eap-1,
+ -0x1.17841ep+0,
+ -0x1.a15b06p+1,
+ 0x1.852a0ap+2,
+ -0x1.1d74a4p-1,
+ 0x1.3d8912p+3,
+ 0x1.def324p+2,
+ 0x1.3ba8eep+0,
+ -0x1.5fbb8ep+0,
+ 0x1.55f48ep-2,
+ -0x1.d12e1p+1,
+ -0x1.591d24p-3,
+ -0x1.f08bbcp-1,
+ -0x1.d5aadp+2,
+ 0x1.d7b94p+2,
+ 0x1.4215ecp+3,
+ -0x1.531ac8p+3,
+ -0x1.785704p+2,
+ 0x1.cab5d6p+2,
+ 0x1.48437ap+3,
+ 0x1.fd2b46p-5,
+ -0x1.640bfep-3,
+ 0x1.44d448p+0,
+ -0x1.4bfd76p-1,
+ 0x1.49063p+3,
+ -0x1.74b3a8p+3,
+ 0x1.7f4ca8p+1,
+ 0x1.55a30ep+1,
+ 0x1.2fc866p+0,
+ -0x1.80e5eap+0,
+ -0x1.2e49e2p+4,
+ -0x1.89d538p+1,
+ 0x1.8012b8p+0,
+ -0x1.651586p-3,
+ -0x1.82af5cp+2,
+ 0x1.f1b0a4p-1,
+ 0x1.28e914p+1,
+ -0x1.e08a7ap+0,
+ 0x1.10c9f4p+3,
+ -0x1.64dbbcp-3,
+ 0x1.cfceb8p+2,
+ -0x1.64e71ep+2,
+ 0x1.01c214p-1,
+ -0x1.0cee7ap+2,
+ 0x1.66bb84p-2,
+ -0x1.47ba7ap+5,
+ 0x1.ccb8e8p+2,
+ 0x1.d34b7cp+2,
+ 0x1.5828p+0,
+ -0x1.9bf8c6p+2,
+ -0x1.270aacp+2,
+ 0x1.445e38p+3,
+ -0x1.c2af3p+2,
+ 0x1.73bcd6p-1,
+ -0x1.5d3f7ap-3,
+ -0x1.54c33ep+3,
+ 0x1.b0f92ep+2,
+ 0x1.54694ap+2,
+ 0x1.365b8ep-1,
+ 0x1.81712ep+1,
+ -0x1.64de44p-3,
+ 0x1.8b28f6p-2,
+ 0x1.e79ceap+2,
+ -0x1.790c14p+2,
+ -0x1.0e76b8p+5,
+ -0x1.7afc7p+2,
+ 0x1.bb846ep+2,
+ -0x1.b1403cp+1,
+ -0x1.86fe4cp+2,
+ 0x1.05ff34p+4,
+ -0x1.861eb8p+0,
+ 0x1.6ee384p+0,
+ -0x1.1d674cp-1,
+ 0x1.27cee8p-3,
+ 0x1.203dfcp+1,
+ -0x1.94085p+1,
+ -0x1.62fdf6p-3,
+ -0x1.259494p+4,
+ 0x1.e7b2bap+2,
+ -0x1.7ea7bcp-3,
+ -0x1.3ea13cp+3,
+ -0x1.287842p+2,
+ -0x1.ab0f56p+2,
+ 0x1.d4ab54p+2,
+ 0x1.99c332p-3,
+ 0x1.2739aep+0,
+ 0x1.10cda8p+3,
+ 0x1.8c677p-1,
+ 0x1.792b74p-1,
+ 0x1.be6c56p+2,
+ -0x1.003724p+2,
+ 0x1.ef91eap-3,
+ -0x1.5fec66p+0,
+ -0x1.3f348cp+2,
+ 0x1.899daep+0,
+ -0x1.324956p+2,
+ 0x1.e44ee4p+2,
+ -0x1.597012p-3,
+ 0x1.2af992p+0,
+ -0x1.7569c8p+1,
+ 0x1.af3934p-4,
+ 0x1.808d1ep+0,
+ -0x1.8d45e4p+2,
+ 0x1.463158p+3,
+ 0x1.3adp+0,
+ 0x1.ecdf32p+2,
+ 0x1.2aad9ap-3,
+ -0x1.d803ecp-2,
+ 0x1.f03244p+2,
+ 0x1.9dc15cp+2,
+ -0x1.b4c5cap-6,
+ -0x1.659e44p-3,
+ -0x1.798c8ap+1,
+ 0x1.c8d80ep+2,
+ -0x1.47ae14p-6,
+ -0x1.1e8216p+2,
+ -0x1.5d407ep-3,
+ 0x1.13ee36p+2,
+ -0x1.61244cp-3,
+ -0x1.f2d01ep+1,
+ -0x1.53e61ep-3,
+ -0x1.1239ccp+1,
+ -0x1.8d8168p+2,
+ -0x1.585ed8p+2,
+ -0x1.916e16p+1,
+ 0x1.a99198p-1,
+ -0x1.936488p-1,
+ 0x1.424e58p+3,
+ 0x1.5e15c2p-1,
+ -0x1.614486p-3,
+ -0x1.a5a616p+2,
+ 0x1.3ef362p+3,
+ -0x1.0dbee4p-4,
+ 0x1.03b99ap-2,
+ -0x1.910a68p+3,
+ -0x1.2fbfc2p+0,
+ -0x1.59f8eap-3,
+ 0x1.7cec24p+1,
+ 0x1.1c27c2p+0,
+ -0x1.de5f06p+2,
+ 0x1.7621c2p+0,
+ -0x1.98de22p+1,
+ -0x1.1f41d2p+1,
+ 0x1.adddaap+2,
+ 0x1.784fd8p-1,
+ -0x1.5f00f2p+2,
+ 0x1.48dfc2p-1,
+ 0x1.7e3b1ep+0,
+ 0x1.8bc666p-3,
+ 0x1.37d0e2p-1,
+ 0x1.157c74p+2,
+ 0x1.6ff89ep+0,
+ 0x1.165ffep+0,
+ 0x1.d7529ep+2,
+ 0x1.44055ap+3,
+ -0x1.6576e4p-3,
+ 0x1.b5bdc2p-2,
+ -0x1.86a71p+2,
+ -0x1.e0bb9ap+1,
+ -0x1.3efb4ep+3,
+ 0x1.465b4ap+3,
+ 0x1.69ccccp-2,
+ 0x1.fa8332p+0,
+ 0x1.4f36aep-3,
+ 0x1.901bdcp+2,
+ -0x1.93f8dap+1,
+ -0x1.c6d308p-1,
+ -0x1.8ab1e6p+2,
+ 0x1.3a40b8p+3,
+ -0x1.347ff6p+1,
+ -0x1.ab55b8p-3,
+ 0x1.2b15d2p+2,
+ -0x1.78cb5p+2,
+ -0x1.44fd58p+1,
+ 0x1.8874ccp+2,
+ -0x1.95c6eap+2,
+ 0x1.6a9ad6p+2,
+ 0x1.5ac8p-2,
+ -0x1.a31878p+1,
+ -0x1.61f5eep-2,
+ 0x1.daa598p+2,
+ -0x1.99370ap-1,
+ 0x1.8d1328p+2,
+ -0x1.717428p-6,
+ 0x1.a4ac26p-1,
+ -0x1.a8341ap+4,
+ -0x1.3d9104p+2,
+ -0x1.3461e8p+4,
+ 0x1.af6bd4p+2,
+ 0x1.ad2e52p+2,
+ -0x1.5eb886p-3,
+ 0x1.4cc9c2p-1,
+ 0x1.363ce2p+3,
+ 0x1.cac2d4p+2,
+ -0x1.64c11ap-3,
+ -0x1.5bb654p-3,
+ 0x1.9cd41ep+2,
+ 0x1.a0c9fep-1,
+ 0x1.0f9018p-4,
+ -0x1.669748p+0,
+ 0x1.b1023cp+1,
+ 0x1.d9e51ep-3,
+ -0x1.860c04p+2,
+ -0x1.004e04p+0,
+ 0x1.606e3cp+0,
+ -0x1.3d5198p+2,
+ 0x1.e50c02p+3,
+ 0x1.175666p-2,
+ -0x1.15400ap+1,
+ 0x1.d3df72p+2,
+ 0x1.8474f6p+2,
+ -0x1.7beef6p-1,
+ -0x1.234dfcp+1,
+ 0x1.a31fap+2,
+ 0x1.371dd2p+3,
+ 0x1.49ae1ap+1,
+ 0x1.09183cp+0,
+ -0x1.9943fep+2,
+ -0x1.65ae36p-3,
+ -0x1.3f64f6p+2,
+ 0x1.a9d88cp-1,
+ -0x1.108da4p+1,
+ 0x1.239b84p-1,
+ -0x1.7a3fcap+1,
+ 0x1.2fb65cp-3,
+ -0x1.c22adp-1,
+ -0x1.4e4a96p+2,
+ -0x1.b97532p-2,
+ 0x1.6a1b84p-1,
+ -0x1.4acc7ep+2,
+ 0x1.597faep-2,
+ -0x1.29e666p-4,
+ -0x1.92f968p+2,
+ 0x1.b5bcbcp+2,
+ 0x1.d44a0ap+2,
+ -0x1.118962p+0,
+ -0x1.0963fcp-1,
+ 0x1.b49e72p+2,
+ 0x1.479932p+3,
+ -0x1.96ebb8p+2,
+ -0x1.17fd5ap+2,
+ -0x1.30bf5cp-3,
+ 0x1.458e58p+3,
+ 0x1.36d3dap+3,
+ 0x1.498cc4p+0,
+ 0x1.a51dp+2,
+ -0x1.76eaep-2,
+ 0x1.a92b5cp-1,
+ 0x1.1cb5c8p+1,
+ 0x1.f116dap-1,
+ -0x1.2fefa4p+1,
+ 0x1.895384p-1,
+ 0x1.3ea70ap-1,
+ 0x1.4e5bc2p+0,
+ -0x1.5d3056p-3,
+ 0x1.6e4f32p+1,
+ 0x1.a0cb4ap+2,
+ 0x1.3e9daep+0,
+ -0x1.610884p-3,
+ -0x1.e575c2p-4,
+ -0x1.4aa4e4p+3,
+ 0x1.6b2384p-1,
+ 0x1.10ccccp+3,
+ 0x1.287d32p+0,
+ 0x1.3ecp-2,
+ -0x1.ac3126p+2,
+ -0x1.375428p-2,
+ 0x1.dd5e32p+2,
+ -0x1.3cc38cp+5,
+ -0x1.63b394p-3,
+ -0x1.36dd2ap+0,
+ -0x1.abaca4p-1,
+ 0x1.9a4998p-3,
+ 0x1.a8322ep+1,
+ 0x1.495ba8p+2,
+ -0x1.2b1d96p+2,
+ 0x1.3cb612p+3,
+ 0x1.3b0bacp+2,
+ -0x1.24da3ep+2,
+ 0x1.b4cc52p-1,
+ -0x1.7231e6p+2,
+ 0x1.68579ap+0,
+ 0x1.98b34p+2,
+ 0x1.b0f174p+2,
+ -0x1.19633p+1,
+ 0x1.4e8p-5,
+ 0x1.c0b04cp+2,
+ 0x1.3707a8p+3,
+ -0x1.0e597ap+2,
+ -0x1.cedcfep+4,
+ -0x1.086438p+3,
+ -0x1.a9c966p+1,
+ -0x1.74d70ap-7,
+ -0x1.641bbap-3,
+ 0x1.bbba02p+2,
+ -0x1.348cccp-3,
+ -0x1.660e72p-3,
+ 0x1.ace148p-4,
+ -0x1.21da26p+0,
+ 0x1.46698ap+0,
+ -0x1.1153b6p+0,
+ -0x1.785416p+2,
+ -0x1.fa611ep-1,
+ -0x1.f9b342p-10,
+ 0x1.bc4b08p+2,
+ -0x1.5b84eep-3,
+ 0x1.47768p+1,
+ 0x1.4c15c2p+0,
+ -0x1.c77e56p+0,
+ 0x1.7d241ep+1,
+ 0x1.ae9d56p+1,
+ 0x1.969368p+2,
+ -0x1.cae3fp+0,
+ 0x1.dd0f7ap+2,
+ -0x1.60cbbcp-3,
+ 0x1.e8d8bap+2,
+ -0x1.994098p+0,
+ -0x1.4fca34p+3,
+ 0x1.c4a67ap+2,
+ 0x1.7d00ap+2,
+ -0x1.c32c1p+2,
+ -0x1.8632b6p+2,
+ 0x1.b1f5cep+2,
+ -0x1.97022ep+4,
+ -0x1.55a7ep+3,
+ -0x1.d4fa1ep+2,
+ 0x1.5fff5cp-3,
+ 0x1.c1ca3ep-6,
+ 0x1.8f307ap-1,
+ -0x1.43319ap-1,
+ -0x1.ab6e94p-1,
+ -0x1.a640ap-2,
+ 0x1.44e4e4p+3,
+ -0x1.d568c8p+3,
+ 0x1.2f5ba6p+2,
+ 0x1.4371b2p+3,
+ -0x1.63de96p-3,
+ 0x1.674f7ep+0,
+ 0x1.899e56p+2,
+ -0x1.493136p+0,
+ -0x1.be2b2ep+1,
+ -0x1.01d56ap+2,
+ -0x1.3d4ddp+5,
+ 0x1.479bf6p+3,
+ -0x1.67a02ep-1,
+ 0x1.b4265cp+2,
+ -0x1.07d2a4p+1,
+ -0x1.85bb08p+2,
+ 0x1.d3d95cp+2,
+ -0x1.6fd80cp+2,
+ -0x1.141ed8p+0,
+ -0x1.5e4264p-3,
+ 0x1.3ff1fp+2,
+ 0x1.3f5e2ap+1,
+ -0x1.683c8ap+2,
+ 0x1.456ad2p+1,
+ -0x1.203312p+2,
+ -0x1.63533ap-3,
+ -0x1.554ceap+2,
+ -0x1.506d48p+2,
+ 0x1.f2cap-1,
+ 0x1.432124p+3,
+ -0x1.6905d4p+2,
+ 0x1.a13008p+2,
+ -0x1.61007cp-3,
+ -0x1.80ada8p+2,
+ -0x1.2b5e12p+2,
+ 0x1.0c38c6p-2,
+ 0x1.6bb408p+2,
+ 0x1.ee99c2p-1,
+ 0x1.3c9f7cp+0,
+ -0x1.ca076p+4,
+ -0x1.b9fd7p-2,
+ 0x1.d3c47ap-1,
+ -0x1.2dadfp+2,
+ -0x1.1f362p-4,
+ 0x1.6923dep+2,
+ 0x1.be923ap+2,
+ -0x1.6cb73ep+2,
+ -0x1.565dd6p-3,
+ 0x1.0d65ecp+0,
+ 0x1.8e8a76p+2,
+ -0x1.9f02cep-4,
+ 0x1.43d63ep-1,
+ 0x1.36302cp+3,
+ -0x1.0e3a4ep+1,
+ -0x1.9a6fdap+2,
+ -0x1.5ac962p-3,
+ -0x1.2531c6p+1,
+ -0x1.7803f8p+2,
+ -0x1.527bccp-2,
+ 0x1.7c4c54p+2,
+ 0x1.3e060ep+2,
+ -0x1.6f1faep+1,
+ 0x1.d71794p+2,
+ -0x1.4ef87cp+0,
+ 0x1.34ebd6p-1,
+ -0x1.bcdef2p-11,
+ -0x1.7c89b4p+1,
+ 0x1.1dde7ap+0,
+ 0x1.070a4cp+2,
+ 0x1.944982p+2,
+ -0x1.8fc20cp+2,
+ 0x1.0a54d2p-4,
+ 0x1.44068ap+1,
+ -0x1.3682ccp+1,
+ -0x1.6027b4p-3,
+ -0x1.56433cp-3,
+ -0x1.611a72p-3,
+ 0x1.f3e98p-2,
+ 0x1.d08a02p+2,
+ -0x1.3caae2p-6,
+ 0x1.c20dbcp+2,
+ -0x1.018d48p-1,
+ -0x1.64ea72p+5,
+ -0x1.8cf15cp+1,
+ -0x1.7bd526p+2,
+ 0x1.910532p+0,
+ 0x1.876cccp-1,
+ 0x1.6b878ap+2,
+ -0x1.631b5cp-3,
+ 0x1.b00e48p+2,
+ -0x1.f2bbc8p+1,
+ -0x1.45803cp+1,
+ -0x1.5f5a66p-3,
+ -0x1.96ce1cp+2,
+ 0x1.291652p+0,
+ -0x1.d34f3ap+0,
+ 0x1.38998ep+0,
+ 0x1.ada72p-1,
+ -0x1.237184p+0,
+ -0x1.20ab84p+2,
+ 0x1.067852p-3,
+ 0x1.3cac66p+0,
+ 0x1.bccd8ep+2,
+ 0x1.252d84p+0,
+ -0x1.32397ap+2,
+ 0x1.35fc82p+3,
+ -0x1.70551ep-3,
+ -0x1.813478p+4,
+ 0x1.3f75c4p+3,
+ 0x1.3f7dd6p+3,
+ 0x1.381c9ep+1,
+ -0x1.fd3b32p-2,
+ -0x1.2bb33cp-1,
+ 0x1.de544ap+2,
+ 0x1.772e6ap+0,
+ 0x1.a7acfap+1,
+ -0x1.0615c6p+3,
+ 0x1.5b0bbcp+2,
+ -0x1.9dd4a8p-2,
+ -0x1.9f4442p+1,
+ -0x1.d50b1ep+1,
+ -0x1.56bf4ap-3,
+ 0x1.16945cp+1,
+ -0x1.5ff37ap-3,
+ -0x1.ffbccap+2,
+ -0x1.384d24p+1,
+ -0x1.b98b6cp+1,
+ 0x1.3a1936p+2,
+ 0x1.44faf8p+3,
+ 0x1.50b852p-8,
+ -0x1.57888ep+2,
+ 0x1.489e2ap+3,
+ 0x1.7ef8eep-1,
+ -0x1.242e6ep-10,
+ 0x1.b2a55cp+3,
+ 0x1.c89c72p+2,
+ 0x1.35d764p+3,
+ -0x1.9e46p+0,
+ -0x1.75e2f4p-3,
+ -0x1.5c53c6p-3,
+ -0x1.12715cp+0,
+ -0x1.d39724p+2,
+ -0x1.9a8eb8p+0,
+ 0x1.e68af6p+2,
+ 0x1.24099ep+1,
+ 0x1.8bc658p-1,
+ 0x1.a15c28p-7,
+ -0x1.6294e6p-3,
+ 0x1.e64718p+2,
+ -0x1.88c804p+1,
+ -0x1.9198b6p+5,
+ -0x1.283048p-1,
+ 0x1.ce516ap+2,
+ -0x1.2b3baep+1,
+ 0x1.812d0cp+2,
+ 0x1.7ba71cp-1,
+ 0x1.47349p+0,
+ -0x1.0b8e48p+4,
+ -0x1.e6dfaep-2,
+ 0x1.440fa2p+3,
+ -0x1.912c34p+2,
+ -0x1.4bee34p+2,
+ -0x1.ad47c8p-4,
+ 0x1.35fa32p+3,
+ -0x1.8e0298p-1,
+ 0x1.48aaf6p+3,
+ -0x1.0fe0d2p+0,
+ -0x1.18fef6p-2,
+ -0x1.e6b47ap+0,
+ 0x1.ca98aep+2,
+ 0x1.e2d266p-1,
+ -0x1.351f76p+0,
+ 0x1.6d3c66p+2,
+ 0x1.ffcb3ep+0,
+ -0x1.6d0c0cp+2,
+ -0x1.3c1c28p-5,
+ -0x1.c15cccp-3,
+ 0x1.98650ap+0,
+ 0x1.a6029ep+2,
+ -0x1.9379f8p-3,
+ 0x1.3759e6p+3,
+ 0x1.5fdf7p+0,
+ -0x1.6cc55ep+4,
+ -0x1.053ee8p+2,
+ 0x1.4af0c8p+1,
+ 0x1.47654p+3,
+ -0x1.2efceap-3,
+ 0x1.35a8bcp+3,
+ -0x1.fc1d5ep-1,
+ -0x1.459dfp+0,
+ 0x1.f8a8dep-1,
+ -0x1.a7f5c2p-5,
+ -0x1.9f3316p+1,
+ -0x1.1aefp+2,
+ 0x1.36e29p+3,
+ 0x1.11eb7p+0,
+ 0x1.6532ep-1,
+ -0x1.26974ep+1,
+ 0x1.acf71ep+1,
+ -0x1.0aa7d6p-5,
+ -0x1.9d2ad4p+0,
+ -0x1.394222p+4,
+ 0x1.2d6428p+0,
+ -0x1.b3fe3p-6,
+ 0x1.dbf61cp+2,
+ -0x1.61fb7cp-3,
+ -0x1.02cbep+1,
+ -0x1.3d3f54p+0,
+ -0x1.64d5bep-3,
+ -0x1.9a6666p-5,
+ -0x1.40a212p+4,
+ -0x1.846292p+2,
+ -0x1.257d9cp-1,
+ 0x1.e20d2ep+2,
+ 0x1.506cbap-1,
+ -0x1.9f6c8ap-1,
+ 0x1.cb5852p-2,
+ 0x1.dfede8p+2,
+ -0x1.df03d2p+1,
+ -0x1.44c584p+1,
+ -0x1.a3a42p+1,
+ -0x1.2d988ap+1,
+ -0x1.33a426p+4,
+ -0x1.654542p-3,
+ 0x1.1e27bep+1,
+ 0x1.3faddap+3,
+ -0x1.9066fp+1,
+ -0x1.5c72dap-3,
+ 0x1.ac0814p+0,
+ 0x1.46ebd6p-1,
+ -0x1.bc3a8ep+1,
+ 0x1.3104p+0,
+ 0x1.4c56fap+1,
+ -0x1.742226p+0,
+ -0x1.5c0486p-3,
+ 0x1.6285ecp+0,
+ -0x1.c9b584p+0,
+ 0x1.e5955cp-3,
+ -0x1.632452p-3,
+ 0x1.5bee1ep+1,
+ 0x1.3c2fb6p+3,
+ 0x1.16c592p-2,
+ 0x1.b295eap+2,
+ 0x1.407dcap+3,
+ -0x1.767ef6p-1,
+ 0x1.eaf332p-3,
+ -0x1.4c6c5p+2,
+ -0x1.637f32p+1,
+ -0x1.7f5e8ep-6,
+ -0x1.65b23ap-3,
+ -0x1.11900ap-1,
+ 0x1.10cef4p+3,
+ 0x1.d66a2ep+2,
+ -0x1.3900ccp+2,
+ 0x1.b3f344p+2,
+ -0x1.148232p+1,
+ -0x1.3b252ep+2,
+ 0x1.da34a6p+2,
+ -0x1.65a516p-3,
+ -0x1.5ab462p+5,
+ 0x1.a73528p+2,
+ -0x1.52d4dcp-2,
+ -0x1.3f1bf4p+2,
+ 0x1.3d109cp+3,
+ -0x1.e7b434p-3,
+ 0x1.4a8e1ap+0,
+ -0x1.69edc2p-1,
+ 0x1.ad5e14p+0,
+ 0x1.366efp+3,
+ -0x1.f320ep+3,
+ -0x1.60c86ep-3,
+ -0x1.062e96p+1,
+ -0x1.a5e6b4p-1,
+ 0x1.48c082p+3,
+ -0x1.54a50cp-1,
+ -0x1.1d0e38p+1,
+ -0x1.0d72cap-3,
+ -0x1.c7214cp+4,
+ 0x1.cf20a8p+2,
+ -0x1.42b7ecp+1,
+ 0x1.421b4p+3,
+ -0x1.9509aep+2,
+ -0x1.641eep+2,
+ 0x1.37c6f4p+3,
+ -0x1.321a78p+2,
+ 0x1.c01464p+2,
+ 0x1.2ad612p+0,
+ -0x1.baaeb4p-5,
+ 0x1.f1ba76p+1,
+ -0x1.16b9aep+0,
+ 0x1.69f97p+0,
+ 0x1.d7236ep+2,
+ -0x1.2655ecp+0,
+ -0x1.b6036p+2,
+ 0x1.3bf742p+2,
+ 0x1.3a2338p+3,
+ 0x1.302f54p+2,
+ 0x1.b783cep+2,
+ 0x1.231e54p+2,
+ 0x1.b9a226p+2,
+ 0x1.3d6ec4p-4,
+ -0x1.6605fep+2,
+ -0x1.016e18p-15,
+ 0x1.7fb554p+2,
+ 0x1.bb8caep+2,
+ 0x1.397678p+3,
+ -0x1.08edp+1,
+ 0x1.e85b2ep+2,
+ -0x1.ba8f1ep+0,
+ -0x1.600bc2p-3,
+ 0x1.4706b2p+2,
+ 0x1.76e914p+1,
+ -0x1.d276ep-1,
+ -0x1.fb3c58p+1,
+ 0x1.7fec7p+2,
+ -0x1.488bf6p+5,
+ 0x1.3daea4p+0,
+ -0x1.babc8ep+2,
+ 0x1.421582p+3,
+ 0x1.3b2066p+1,
+ -0x1.ea428ep-3,
+ 0x1.c4b67ap-5,
+ -0x1.4a9be6p+4,
+ 0x1.076be8p-2,
+ 0x1.979a26p+2,
+ 0x1.3fcdcp+3,
+ 0x1.3b8242p+3,
+ 0x1.8d651ep-4,
+ 0x1.b4919ap-2,
+ -0x1.1a234ep-1,
+ 0x1.2fd148p-3,
+ 0x1.42871cp+3,
+ 0x1.97d77p+0,
+ -0x1.86b75cp-2,
+ 0x1.9009a6p+2,
+ 0x1.408e7ap+1,
+ -0x1.0fb01cp-7,
+ 0x1.a2f7d2p+2,
+ -0x1.2cc04ap-5,
+ -0x1.69a5ap+1,
+ 0x1.0bbc28p-2,
+ 0x1.2e22a2p+0,
+ -0x1.88dc7ap-2,
+ 0x1.7c0c2p+2,
+ -0x1.407b66p-2,
+ 0x1.d9152p+2,
+ 0x1.7002b4p+0,
+ 0x1.758778p+2,
+ 0x1.0dcfbap+2,
+ -0x1.7f44bp+2,
+ 0x1.cd82p+2,
+ -0x1.feb61ap+2,
+ -0x1.1a4e4ep+2,
+ 0x1.e4a6a4p+1,
+ -0x1.0b5fp+3,
+ 0x1.799eccp+1,
+ -0x1.e3f07ap-1,
+ 0x1.38249cp+3,
+ -0x1.bffb68p+1,
+ -0x1.082034p+2,
+ 0x1.23fcd6p+1,
+ -0x1.c101eep+1,
+ -0x1.54d51ap-3,
+ 0x1.767064p+2,
+ -0x1.9bc01ap-1,
+ -0x1.29edc6p+2,
+ -0x1.3877a4p+1,
+ -0x1.61a294p-3,
+ -0x1.bb793p+1,
+ 0x1.7a649ep+1,
+ 0x1.d2ed52p+2,
+ 0x1.48241cp+3,
+ 0x1.75e9c2p-2,
+ 0x1.42bcc4p+3,
+ -0x1.cfdaaep+2,
+ -0x1.858b18p+4,
+ 0x1.54595cp+0,
+ 0x1.0b3c52p+0,
+ -0x1.d3180cp-1,
+ 0x1.58da68p+2,
+ 0x1.c6adp+1,
+ 0x1.a98beep+2,
+ 0x1.5c53b2p+1,
+ -0x1.89d0ccp-1,
+ -0x1.650562p-3,
+ 0x1.193d82p-1,
+ 0x1.5bca22p+3,
+ 0x1.3a05bp+3,
+ 0x1.161abcp+4,
+ -0x1.71d802p+2,
+ -0x1.02919ap+0,
+ 0x1.dc4546p-1,
+ -0x1.f46284p+1,
+ -0x1.8e38cep-2,
+ -0x1.2b76d6p+1,
+ 0x1.b21856p+2,
+ 0x1.9c86e6p+2,
+ -0x1.64d776p-3,
+ -0x1.267618p+2,
+ -0x1.53a72ap+2,
+ 0x1.dcabd6p-2,
+ 0x1.d42ac6p+2,
+ 0x1.45b8acp+3,
+ -0x1.5c0da8p-1,
+ -0x1.acc00ap+2,
+ 0x1.da4a46p+2,
+ -0x1.64e686p-3,
+ -0x1.729f8p+5,
+ -0x1.194d9ap+3,
+ 0x1.7e3eb8p+0,
+ -0x1.5ef7a2p-3,
+ 0x1.e443b2p+1,
+ -0x1.7470dp+2,
+ -0x1.3f927p+1,
+ 0x1.b096cp+2,
+ 0x1.b6792ap+2,
+ -0x1.44742p+3,
+ 0x1.492384p+3,
+ 0x1.d3c576p-3,
+ -0x1.11ab9ap+0,
+ -0x1.e35b8cp-2,
+ 0x1.de41f6p-1,
+ -0x1.2b6a16p-4,
+ 0x1.2d4eb2p+0,
+ 0x1.48aac8p+1,
+ 0x1.4450cap+3,
+ 0x1.35d076p+3,
+ 0x1.a536cep-1,
+ 0x1.735fbcp-1,
+ 0x1.b2e3d2p-1,
+ 0x1.775ab8p+2,
+ 0x1.819c92p-2,
+ 0x1.8f27cep+2,
+ 0x1.bb9e3ap+2,
+ -0x1.4d9a94p+2,
+ 0x1.d7bcd8p+2,
+ -0x1.1febecp+2,
+ 0x1.4d60e2p+3,
+ -0x1.4b24d2p+3,
+ -0x1.49a54cp-2,
+ 0x1.456e9ep+3,
+ 0x1.49f47ap-1,
+ -0x1.63babep-4,
+ 0x1.b15424p+2,
+ 0x1.e115eap+2,
+ -0x1.513732p+3,
+ -0x1.35b7dep-2,
+ -0x1.1bd7a4p+2,
+ 0x1.599a8ep+0,
+ 0x1.ad84aap-2,
+ 0x1.d976fcp+2,
+ -0x1.86e666p-1,
+ 0x1.10cb48p+3,
+ 0x1.1d27fep+2,
+ 0x1.ea9446p+2,
+ 0x1.acbc8p+2,
+ 0x1.a6d17p+0,
+ -0x1.100aa2p-3,
+ -0x1.6dfbbep+5,
+ -0x1.5b177p+0,
+ 0x1.9524f6p+0,
+ -0x1.5aa4fap+2,
+ 0x1.6c782p+4,
+ 0x1.af708ap+1,
+ 0x1.cec838p+2,
+ 0x1.089898p+0,
+ -0x1.63ccacp-3,
+ 0x1.1940bap+2,
+ -0x1.14ca86p+1,
+ -0x1.b5d494p+2,
+ -0x1.0a319ap-2,
+ -0x1.171efp+2,
+ 0x1.49beaap+3,
+ -0x1.e727d4p+3,
+ -0x1.234bcp-1,
+ 0x1.43c804p+3,
+ -0x1.178dfep+2,
+ 0x1.fdc47ap-3,
+ -0x1.e75396p+2,
+ 0x1.f8f04cp+2,
+ 0x1.3a2882p+3,
+ -0x1.4fab3ep+2,
+ 0x1.952e04p+1,
+ -0x1.f99bd6p+0,
+ 0x1.233548p+0,
+ 0x1.0fccccp-6,
+ -0x1.54f26ap+2,
+ -0x1.ea8732p-4,
+ -0x1.44f526p+2,
+ 0x1.9dfe8ep+0,
+ 0x1.4df2ep-1,
+ -0x1.5f4d08p+0,
+ 0x1.350aap+3,
+ 0x1.e7b63cp+2,
+ -0x1.cba3f6p+1,
+ 0x1.3ec0f6p+0,
+ 0x1.b8a2bap+2,
+ -0x1.5c199cp+4,
+ -0x1.056936p+3,
+ 0x1.8e304p+2,
+ 0x1.b2fc28p-2,
+ 0x1.0af75cp-2,
+ -0x1.57f7b8p+3,
+ 0x1.3d1ecp+3,
+ -0x1.2a76fp-1,
+ -0x1.2da37ep+6,
+ -0x1.4fc948p-2,
+ 0x1.002a8ep+0,
+ -0x1.20bdd4p+2,
+ -0x1.5f6ceep+2,
+ 0x1.93eb84p-4,
+ -0x1.c443cp+2,
+ 0x1.b34272p+2,
+ -0x1.fec732p-1,
+ 0x1.5a9794p+1,
+ 0x1.9f7c76p+2,
+ 0x1.c86a0cp+2,
+ 0x1.88d064p-1,
+ -0x1.782b46p+2,
+ -0x1.a8241p-2,
+ 0x1.01e8cep+2,
+ -0x1.65f582p-3,
+ -0x1.a6e786p+2,
+ 0x1.268be2p-2,
+ 0x1.d4ca68p+2,
+ 0x1.10d1fep+3,
+ 0x1.33280ap+1,
+ 0x1.45129ap+3,
+ 0x1.b2f9fp+2,
+ 0x1.c06c2ap+2,
+ -0x1.2e4b6p+2,
+ 0x1.532108p-1,
+ -0x1.198f1p+0,
+ 0x1.32f2ep-1,
+ -0x1.63b1fap-3,
+ 0x1.de7384p-1,
+ -0x1.f9c4ep+0,
+ 0x1.bd8dc4p+2,
+ -0x1.748c3p+2,
+ -0x1.0c2204p+2,
+ 0x1.3f400cp+3,
+ 0x1.16ef8ep+1,
+ 0x1.ffaf0ap-1,
+ -0x1.3df84ep-5,
+ -0x1.0a47f6p+3,
+ -0x1.074b02p-3,
+ 0x1.358ba2p+3,
+};
diff --git a/benchmarks/logf_input.cpp b/benchmarks/logf_input.cpp
new file mode 100644
index 0000000..322d3bf
--- /dev/null
+++ b/benchmarks/logf_input.cpp
@@ -0,0 +1,2916 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+// Reduced trace based on 2.8 billion samples extracted from specpu2017
+// 521.wrf_r benchmark.
+static const std::vector<float> logf_input = {
+ 0x1.fe4c3p-1,
+ 0x1.0e33e6p+1,
+ 0x1.00000ap+0,
+ 0x1.900028p+4,
+ 0x1.f8cdeep+0,
+ 0x1.332986p+7,
+ 0x1.493696p+0,
+ 0x1p+0,
+ 0x1.38c67p+7,
+ 0x1.029046p+1,
+ 0x1.1bd31cp+4,
+ 0x1.bb3e3ep+12,
+ 0x1.000098p+0,
+ 0x1.a7971p+7,
+ 0x1p+0,
+ 0x1.0001a8p+0,
+ 0x1.00004ep+0,
+ 0x1p+0,
+ 0x1.0606f2p+0,
+ 0x1.3e54a8p+11,
+ 0x1.3a0662p+3,
+ 0x1.000c72p+0,
+ 0x1p+0,
+ 0x1.0bf8b6p+0,
+ 0x1.000204p+0,
+ 0x1.500ad2p+0,
+ 0x1p+0,
+ 0x1.3e4cfp+8,
+ 0x1.00006cp+0,
+ 0x1.54f7fp+0,
+ 0x1.267858p+0,
+ 0x1.191ccp+0,
+ 0x1.0cdb18p+1,
+ 0x1.29bf1ep+15,
+ 0x1.64bd92p+1,
+ 0x1.255534p+0,
+ 0x1p+0,
+ 0x1.93bb82p+3,
+ 0x1.1348ep+1,
+ 0x1.00456ep+0,
+ 0x1.08afbcp+8,
+ 0x1.32c37ep+0,
+ 0x1.3437cep-1,
+ 0x1.000214p+0,
+ 0x1.03d5ap+0,
+ 0x1.172378p+6,
+ 0x1p+0,
+ 0x1.330f22p-1,
+ 0x1.00b91p+0,
+ 0x1.e831f2p+15,
+ 0x1.092318p+9,
+ 0x1p+0,
+ 0x1.e80902p+7,
+ 0x1.71ec54p+2,
+ 0x1.1935dcp+0,
+ 0x1.651082p+14,
+ 0x1p+0,
+ 0x1.0f41d8p+8,
+ 0x1.17f4p+0,
+ 0x1.7cf946p+9,
+ 0x1.b14396p+0,
+ 0x1.92f94p+1,
+ 0x1.2f3784p-1,
+ 0x1p+0,
+ 0x1.305ad4p-1,
+ 0x1.002a08p+0,
+ 0x1.3e338p+5,
+ 0x1.1863f6p+8,
+ 0x1p+0,
+ 0x1.ed8fd8p+58,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.215fc8p+9,
+ 0x1.1965bep+16,
+ 0x1.00031cp+0,
+ 0x1.00011p+0,
+ 0x1p+0,
+ 0x1.e384fep-20,
+ 0x1p+0,
+ 0x1.00020cp+0,
+ 0x1.007e24p+0,
+ 0x1.b14346p+0,
+ 0x1.243ff8p+0,
+ 0x1.3f6ac2p+3,
+ 0x1.816ff6p+5,
+ 0x1.0115ap+8,
+ 0x1.162028p+16,
+ 0x1.62692cp+0,
+ 0x1.0227c8p+1,
+ 0x1.4dda3ep+0,
+ 0x1.418696p+0,
+ 0x1.0272f4p+2,
+ 0x1.62c6ecp+5,
+ 0x1.3cd07ap+18,
+ 0x1.0191eap+0,
+ 0x1.21c3a2p+8,
+ 0x1p+0,
+ 0x1.000bf6p+0,
+ 0x1.a4b51cp+7,
+ 0x1.04d1f8p+0,
+ 0x1.8de2b8p+0,
+ 0x1.7b7a4ep+8,
+ 0x1.1928acp+5,
+ 0x1.305a8p-1,
+ 0x1.ba8662p+5,
+ 0x1p+0,
+ 0x1.ab75a2p-12,
+ 0x1.7cc13cp+9,
+ 0x1.505306p+0,
+ 0x1.63085p+0,
+ 0x1.000064p+0,
+ 0x1.b3f16ap+7,
+ 0x1.1348f8p+1,
+ 0x1.71fe88p+1,
+ 0x1.0b7132p+4,
+ 0x1.470316p+1,
+ 0x1.3228b6p-1,
+ 0x1.8dd666p+0,
+ 0x1.38ed88p+12,
+ 0x1.432218p+0,
+ 0x1.00e0cap+0,
+ 0x1.73eb44p+2,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.bda15ep+7,
+ 0x1.0272fep+2,
+ 0x1.00171ep+0,
+ 0x1p+0,
+ 0x1.3faa86p+3,
+ 0x1.33c2a2p-1,
+ 0x1.3e48e2p+7,
+ 0x1.017ef2p+0,
+ 0x1.30115ap-1,
+ 0x1.587444p+0,
+ 0x1.3efed8p+8,
+ 0x1.8a5526p+0,
+ 0x1.cb1ecap+15,
+ 0x1.1f5cp+0,
+ 0x1.0001a4p+0,
+ 0x1.1a20dap+7,
+ 0x1.376e6p+0,
+ 0x1.0001aap+0,
+ 0x1.9182f6p-1,
+ 0x1.000292p+0,
+ 0x1.3d46a2p+12,
+ 0x1.e177b6p+7,
+ 0x1.3f5646p+1,
+ 0x1.2ab784p+9,
+ 0x1.dc81b4p+1,
+ 0x1.0ef326p+0,
+ 0x1.996588p-12,
+ 0x1.740848p+3,
+ 0x1.00016p+0,
+ 0x1.ffd51ap+52,
+ 0x1p+0,
+ 0x1.4461ap+4,
+ 0x1.08e7bcp+51,
+ 0x1p+0,
+ 0x1.106e98p+3,
+ 0x1.5490e4p+0,
+ 0x1.46703cp+4,
+ 0x1.6b1e86p-29,
+ 0x1.324caap+0,
+ 0x1.0467ccp+0,
+ 0x1.424574p+0,
+ 0x1p+0,
+ 0x1.001da4p+0,
+ 0x1.364604p+0,
+ 0x1p+0,
+ 0x1.0951e2p+8,
+ 0x1.408994p+0,
+ 0x1.0003ap+0,
+ 0x1.619e92p+12,
+ 0x1.313e72p+2,
+ 0x1.8b47p-6,
+ 0x1.2190fp+2,
+ 0x1.20aaacp+0,
+ 0x1.f0059cp-1,
+ 0x1p+0,
+ 0x1.018e78p+0,
+ 0x1.313e1p+2,
+ 0x1p+0,
+ 0x1.2efce4p-1,
+ 0x1.5ebdap+0,
+ 0x1p+0,
+ 0x1.5e2488p+51,
+ 0x1.bf95f2p+5,
+ 0x1.5a1124p+16,
+ 0x1.73bad6p+1,
+ 0x1.00048ap+0,
+ 0x1.0c9beap+8,
+ 0x1p+0,
+ 0x1.358c08p+7,
+ 0x1.7f834ep-26,
+ 0x1.3e56bcp+15,
+ 0x1.52d8b2p+15,
+ 0x1p+0,
+ 0x1.00109cp+0,
+ 0x1.0a0bb2p+0,
+ 0x1p+0,
+ 0x1.026908p+6,
+ 0x1.370f22p+0,
+ 0x1.5c6c5ap+1,
+ 0x1.7fe4bcp+2,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.42be68p+49,
+ 0x1.0000d8p+0,
+ 0x1.3abdf8p+12,
+ 0x1.370a44p-12,
+ 0x1.aef9f4p+0,
+ 0x1.00001ep+2,
+ 0x1.017c2p+0,
+ 0x1.00b614p+0,
+ 0x1.32f9f8p-1,
+ 0x1p+0,
+ 0x1.00ebf2p+0,
+ 0x1.0c3116p+0,
+ 0x1.00004p+0,
+ 0x1.03b992p+0,
+ 0x1p+0,
+ 0x1.24eb3cp+0,
+ 0x1.4c73ecp+51,
+ 0x1.fad3ep+1,
+ 0x1p+0,
+ 0x1.32368ap-1,
+ 0x1.000908p+0,
+ 0x1.5ea59ep+12,
+ 0x1.1928ccp+5,
+ 0x1p+0,
+ 0x1.21a93cp+8,
+ 0x1p+0,
+ 0x1.0001e8p+0,
+ 0x1.95b6c2p-12,
+ 0x1.00002p+0,
+ 0x1.2399fap+9,
+ 0x1.449b44p+0,
+ 0x1p+0,
+ 0x1.64a766p+15,
+ 0x1.06ccecp+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.c81f9cp+1,
+ 0x1.5ef196p+0,
+ 0x1.022822p+1,
+ 0x1.99beep+3,
+ 0x1.1f417p+8,
+ 0x1p+0,
+ 0x1.c08726p+5,
+ 0x1.397d9ep+0,
+ 0x1.88e748p+18,
+ 0x1.3b319p+9,
+ 0x1.2fd3b6p-1,
+ 0x1.0001aep+0,
+ 0x1.4a0562p+5,
+ 0x1.4e5f1ap+0,
+ 0x1p+0,
+ 0x1.017fbp+0,
+ 0x1.acaf56p+57,
+ 0x1.ef7d66p+8,
+ 0x1.736c3cp+1,
+ 0x1.12ddbep+0,
+ 0x1.b85ebcp+6,
+ 0x1.0e259p+1,
+ 0x1.5cc2c4p+2,
+ 0x1.99e614p+3,
+ 0x1.f30aa6p+2,
+ 0x1.3911c6p+15,
+ 0x1.119b92p+1,
+ 0x1.352a3p-1,
+ 0x1.0001b2p+0,
+ 0x1.00b26p+0,
+ 0x1.bd730ep+60,
+ 0x1.54fc5p+0,
+ 0x1.5a4804p+0,
+ 0x1.ff7eaep-1,
+ 0x1.5cc268p+2,
+ 0x1.1077aap+2,
+ 0x1.1723d6p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.30c17p-1,
+ 0x1.000648p+0,
+ 0x1.91aa4cp+6,
+ 0x1.17234p+6,
+ 0x1p+0,
+ 0x1.6d5b18p+2,
+ 0x1.00027ap+0,
+ 0x1.dc8224p+1,
+ 0x1.a9eabep-6,
+ 0x1.099edcp+1,
+ 0x1.004118p+1,
+ 0x1.58d5fcp+60,
+ 0x1.000098p+0,
+ 0x1.004e8p+0,
+ 0x1.f32edap-1,
+ 0x1.0394aep+0,
+ 0x1.0689bp+2,
+ 0x1.124e5cp+0,
+ 0x1.71fe86p+1,
+ 0x1.025ce2p+0,
+ 0x1.46107cp+0,
+ 0x1.047c74p+2,
+ 0x1.a57e74p+15,
+ 0x1.18bbcep+0,
+ 0x1p+0,
+ 0x1.65b9a4p+0,
+ 0x1.0000eep+0,
+ 0x1.08a4a4p+0,
+ 0x1.0fe774p+1,
+ 0x1.000128p+0,
+ 0x1.3e95fp+12,
+ 0x1.b14e3ap-56,
+ 0x1.00007cp+0,
+ 0x1.5619c2p+1,
+ 0x1.4ac958p+0,
+ 0x1.00031p+0,
+ 0x1.003064p+0,
+ 0x1.e119eap-1,
+ 0x1.577b36p+0,
+ 0x1p+0,
+ 0x1.26ff2ap+0,
+ 0x1.004ap+0,
+ 0x1.0000a2p+0,
+ 0x1.1fcc7ep+4,
+ 0x1.6f959p+16,
+ 0x1.000064p+0,
+ 0x1.375c6ap+0,
+ 0x1.6a806ep+2,
+ 0x1p+0,
+ 0x1.8e27aep+1,
+ 0x1p+0,
+ 0x1.000b22p+0,
+ 0x1.8f0c12p+0,
+ 0x1.192892p+5,
+ 0x1.2bcaacp+1,
+ 0x1.984264p+2,
+ 0x1.0034cp+0,
+ 0x1p+0,
+ 0x1.abf4dp+0,
+ 0x1.001044p+0,
+ 0x1.0d26f4p+0,
+ 0x1.626906p+0,
+ 0x1.8bf0c2p+5,
+ 0x1.02d288p+0,
+ 0x1.900128p+4,
+ 0x1.bbbbcp+12,
+ 0x1.45fa5p+0,
+ 0x1p+0,
+ 0x1.01bef2p+0,
+ 0x1.524f26p+2,
+ 0x1.083b0ep+0,
+ 0x1.4811e4p+0,
+ 0x1.0163a8p+0,
+ 0x1.9570fap+15,
+ 0x1.3022f2p-1,
+ 0x1.14c73ap+0,
+ 0x1.0009d8p+0,
+ 0x1.056b92p+63,
+ 0x1.0025a4p+0,
+ 0x1.36aad4p+17,
+ 0x1.05c244p+8,
+ 0x1.d00886p+17,
+ 0x1.001188p+0,
+ 0x1.3376ecp-1,
+ 0x1.6719c8p+16,
+ 0x1.02495p+0,
+ 0x1.fd9bacp-1,
+ 0x1.3882c6p+6,
+ 0x1.3cb358p+0,
+ 0x1.0ec93ep+0,
+ 0x1.4fd2bap+1,
+ 0x1.f8b68p+1,
+ 0x1.33b1f2p-1,
+ 0x1.ba7f4cp+1,
+ 0x1p+0,
+ 0x1.44a3d2p-17,
+ 0x1.9a6a8p+2,
+ 0x1.00918ap+6,
+ 0x1.30d50ep-1,
+ 0x1p+0,
+ 0x1.0001bep+0,
+ 0x1.05b93ep+0,
+ 0x1.aa9d98p+0,
+ 0x1.039b74p+0,
+ 0x1.1ac25ep+8,
+ 0x1p+0,
+ 0x1.12b23ap+1,
+ 0x1.4c5c52p+0,
+ 0x1.07de64p+0,
+ 0x1.950f94p+1,
+ 0x1.001caap+47,
+ 0x1.0a9448p+0,
+ 0x1.01026cp+0,
+ 0x1.03d74ap+0,
+ 0x1p+0,
+ 0x1.0032dap+0,
+ 0x1.380922p-1,
+ 0x1.c0e7ccp+15,
+ 0x1.a35e4p+4,
+ 0x1.25b1e6p+0,
+ 0x1.000044p+2,
+ 0x1.05ac24p+7,
+ 0x1.1fa744p+44,
+ 0x1.0007b2p+0,
+ 0x1.2cca62p+2,
+ 0x1.04be3ap+6,
+ 0x1.00065p+0,
+ 0x1.2b9f3ap+1,
+ 0x1.74085p+3,
+ 0x1p+0,
+ 0x1.01fc4cp+0,
+ 0x1.e137bcp+2,
+ 0x1.097ac8p+0,
+ 0x1.ad1458p+4,
+ 0x1.c8587cp+1,
+ 0x1.31d172p-1,
+ 0x1.0b414ap+1,
+ 0x1.664e36p+1,
+ 0x1.30ae16p-1,
+ 0x1p+0,
+ 0x1.3b7e3cp+2,
+ 0x1.9cc348p+64,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.cdb384p-32,
+ 0x1p+0,
+ 0x1.00b998p+0,
+ 0x1.36b69ep-1,
+ 0x1.939538p+4,
+ 0x1.dc9deep+4,
+ 0x1.36f86ep+2,
+ 0x1.02113cp+0,
+ 0x1.035852p+0,
+ 0x1.9de428p+2,
+ 0x1.369814p+1,
+ 0x1.147f44p+3,
+ 0x1.031bc8p+0,
+ 0x1.03f7cp+0,
+ 0x1.000924p+0,
+ 0x1.145e14p+2,
+ 0x1.0000d4p+0,
+ 0x1p+0,
+ 0x1.54fdfp+2,
+ 0x1.07c0ep+0,
+ 0x1.829aeep+1,
+ 0x1.000f08p+0,
+ 0x1.34dcdp-1,
+ 0x1p+0,
+ 0x1.cd56e4p+1,
+ 0x1.16400ap+8,
+ 0x1p+0,
+ 0x1.00000ap+2,
+ 0x1.00a21p+0,
+ 0x1.8d6286p+6,
+ 0x1.de4f28p+1,
+ 0x1.9f55b6p+48,
+ 0x1.01c802p+0,
+ 0x1.0327cp+0,
+ 0x1.32fb52p-1,
+ 0x1p+0,
+ 0x1.2525dcp+0,
+ 0x1.91da28p-6,
+ 0x1.5a23a8p+0,
+ 0x1.5f024ap+1,
+ 0x1p+0,
+ 0x1.0008f2p+0,
+ 0x1.05563cp+0,
+ 0x1.89381cp+0,
+ 0x1.8bb056p+16,
+ 0x1.7cc93ep+1,
+ 0x1.8bf0acp+5,
+ 0x1.1722bap+6,
+ 0x1p+0,
+ 0x1.00238ep+0,
+ 0x1.ebb8d2p-1,
+ 0x1.001194p+0,
+ 0x1.6cd388p+1,
+ 0x1.08e4bp+8,
+ 0x1.00002p+0,
+ 0x1.01a0bep+0,
+ 0x1.00e7cep+8,
+ 0x1.1193p+0,
+ 0x1.06a9c8p+0,
+ 0x1.11c7fep+0,
+ 0x1.5ef17cp+0,
+ 0x1.4ae72cp+0,
+ 0x1.e0df4cp+41,
+ 0x1.7e5468p+1,
+ 0x1.8dd478p+0,
+ 0x1.3c2784p+51,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.b9d454p+12,
+ 0x1.011a58p+0,
+ 0x1.3efb48p+4,
+ 0x1.000208p+0,
+ 0x1.57b3eep+7,
+ 0x1.000004p+0,
+ 0x1.1cd6b8p+0,
+ 0x1.c366fap+9,
+ 0x1.466d2cp+0,
+ 0x1p+0,
+ 0x1.300096p-1,
+ 0x1p+0,
+ 0x1.bef388p+0,
+ 0x1.0c20e8p+8,
+ 0x1.397f2p+4,
+ 0x1.037596p+2,
+ 0x1.62a0a4p+52,
+ 0x1.37269ap+0,
+ 0x1.81fe24p+2,
+ 0x1.dd4196p+56,
+ 0x1.b143ep+0,
+ 0x1p+0,
+ 0x1.b8c2fp+1,
+ 0x1.056b3ep+1,
+ 0x1.3b6cbp+0,
+ 0x1.3ffb2p+0,
+ 0x1p+0,
+ 0x1.3c21cp+0,
+ 0x1.00312cp+0,
+ 0x1p+0,
+ 0x1.3822f8p+0,
+ 0x1.02734p+2,
+ 0x1.05a7dap+0,
+ 0x1.6df1b4p+5,
+ 0x1.0006f4p+0,
+ 0x1.31aebep-1,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.b997fap+18,
+ 0x1.0570d8p+0,
+ 0x1p+0,
+ 0x1.0a9216p+42,
+ 0x1.ef16f2p+1,
+ 0x1p+0,
+ 0x1.31269ep-1,
+ 0x1.a9954ap+2,
+ 0x1.1cc5e8p+0,
+ 0x1.01d334p+0,
+ 0x1.905f98p+4,
+ 0x1.0310d4p+0,
+ 0x1.16a62ap+0,
+ 0x1.8dd6b2p+0,
+ 0x1.395dcep+7,
+ 0x1.ef5f92p+0,
+ 0x1.000868p+0,
+ 0x1p+0,
+ 0x1.844a16p+2,
+ 0x1.452efcp+0,
+ 0x1p+0,
+ 0x1.1c5da2p+6,
+ 0x1.31ac3ap-1,
+ 0x1.cc1bfp+2,
+ 0x1p+0,
+ 0x1.08215ap+0,
+ 0x1.3b4306p+0,
+ 0x1.71fe6p+1,
+ 0x1.192bd8p+0,
+ 0x1.262f78p+0,
+ 0x1.00013cp+0,
+ 0x1.33c486p-1,
+ 0x1.000014p+0,
+ 0x1.b8f4fp+1,
+ 0x1.5f9f5ap-1,
+ 0x1.059872p+0,
+ 0x1p+0,
+ 0x1.58168p+1,
+ 0x1.826d5cp+0,
+ 0x1p+0,
+ 0x1.032a04p+0,
+ 0x1p+0,
+ 0x1.0c0a5cp+0,
+ 0x1.668d9p+0,
+ 0x1.2f9644p-1,
+ 0x1p+0,
+ 0x1.1821b8p+6,
+ 0x1.b22e8ep+7,
+ 0x1.4f7a78p+0,
+ 0x1.52df24p+0,
+ 0x1.48c612p+0,
+ 0x1.93a19ap+4,
+ 0x1.8bf102p+5,
+ 0x1.122d94p+0,
+ 0x1p+0,
+ 0x1.00018p+0,
+ 0x1.30083ap-1,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.30d20ep-1,
+ 0x1p+0,
+ 0x1.0000dcp+0,
+ 0x1.285bb4p+0,
+ 0x1p+0,
+ 0x1.0003a4p+0,
+ 0x1p+0,
+ 0x1.2ffcfcp-1,
+ 0x1.093d96p+0,
+ 0x1.239bfcp+0,
+ 0x1.f7c33cp-27,
+ 0x1.a9982ep+2,
+ 0x1.1969f4p+4,
+ 0x1.ff5c88p-1,
+ 0x1.04db6ep+2,
+ 0x1p+0,
+ 0x1.f010dap-1,
+ 0x1.13647p+7,
+ 0x1p+0,
+ 0x1.ea6e18p-10,
+ 0x1.2d16eap+0,
+ 0x1.02b668p+0,
+ 0x1.191704p+4,
+ 0x1.18f2b4p+0,
+ 0x1.b186eap+0,
+ 0x1.24c01ap+2,
+ 0x1.6a3adap+16,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.2f9f28p-1,
+ 0x1.4b5da4p+0,
+ 0x1.004054p+0,
+ 0x1.002616p+8,
+ 0x1.561954p+1,
+ 0x1p+0,
+ 0x1.4c4394p+0,
+ 0x1.1eed34p+1,
+ 0x1.a702eap+5,
+ 0x1.ee054p+7,
+ 0x1.1156a8p+0,
+ 0x1.9a81fcp+2,
+ 0x1.10ce16p-28,
+ 0x1.b18b88p+0,
+ 0x1.d9c4a8p+1,
+ 0x1.0e275cp+0,
+ 0x1.905f58p+4,
+ 0x1p+0,
+ 0x1.02f774p+0,
+ 0x1.7ce226p+1,
+ 0x1.0002bcp+0,
+ 0x1.010f58p+0,
+ 0x1p+0,
+ 0x1.000198p+0,
+ 0x1p+0,
+ 0x1.4aa832p+0,
+ 0x1.0006c2p+0,
+ 0x1.358ca4p+7,
+ 0x1.1edc64p+0,
+ 0x1.003508p+0,
+ 0x1.fdb69p+1,
+ 0x1.0ff4fep+0,
+ 0x1p+0,
+ 0x1.b8c2fp+1,
+ 0x1.284c16p+0,
+ 0x1.00a228p+0,
+ 0x1.03080cp+0,
+ 0x1.91a8f4p+48,
+ 0x1p+0,
+ 0x1.2080fep+1,
+ 0x1.0002f8p+0,
+ 0x1.b14338p+0,
+ 0x1.081288p+0,
+ 0x1.71b9bep+0,
+ 0x1.09c368p+0,
+ 0x1.35ed64p+0,
+ 0x1.8dd68cp+0,
+ 0x1.d2cc42p+0,
+ 0x1.9be0ecp+3,
+ 0x1.7407fcp+3,
+ 0x1.313ecp-1,
+ 0x1.cdc978p+0,
+ 0x1.0ed538p+1,
+ 0x1.159af4p+8,
+ 0x1p+0,
+ 0x1.128694p+0,
+ 0x1.2f1b06p-1,
+ 0x1.19c0d8p+0,
+ 0x1.dcc7c8p+1,
+ 0x1.a33f8ap+7,
+ 0x1.000158p+0,
+ 0x1p+0,
+ 0x1.28bdaep-16,
+ 0x1.74086cp+3,
+ 0x1.ea297cp+1,
+ 0x1.5d87fp+2,
+ 0x1.0e2658p+1,
+ 0x1.621c14p+1,
+ 0x1.9d8a8cp+3,
+ 0x1p+0,
+ 0x1.7807e8p+3,
+ 0x1.74c924p+0,
+ 0x1.a484e4p+53,
+ 0x1.771c44p+0,
+ 0x1.13d1e4p+2,
+ 0x1.2fa402p-1,
+ 0x1p+0,
+ 0x1.024d72p+2,
+ 0x1.064c6ap+8,
+ 0x1.15d2dep+0,
+ 0x1.9c004ep+3,
+ 0x1.bc2fcap+12,
+ 0x1.befdbep+0,
+ 0x1.36461p+0,
+ 0x1.6db7b8p+5,
+ 0x1.0000cp+0,
+ 0x1p+0,
+ 0x1.02f354p+0,
+ 0x1p+0,
+ 0x1.000228p+0,
+ 0x1.013fep+0,
+ 0x1.213782p+0,
+ 0x1p+0,
+ 0x1.000204p+0,
+ 0x1.a69cccp+7,
+ 0x1.0036acp+0,
+ 0x1.0982b8p+0,
+ 0x1.81693cp-22,
+ 0x1.1e5d64p+6,
+ 0x1.0009f2p+0,
+ 0x1.2fe96p-1,
+ 0x1.0368f8p+0,
+ 0x1.2d2cbep+0,
+ 0x1.37bc04p-1,
+ 0x1p+0,
+ 0x1.d45d88p+1,
+ 0x1.000694p+0,
+ 0x1.000272p+0,
+ 0x1p+0,
+ 0x1.d0b2e6p+1,
+ 0x1.2598a4p+3,
+ 0x1p+0,
+ 0x1.8b7d3p+2,
+ 0x1.192902p+5,
+ 0x1.3d5386p+0,
+ 0x1.9c779ap+1,
+ 0x1.08257cp+0,
+ 0x1.0b8a4p+2,
+ 0x1.01afa4p+3,
+ 0x1.e48b7ap-1,
+ 0x1.f30a5cp+2,
+ 0x1.0df814p+0,
+ 0x1.2f28p-1,
+ 0x1.983f46p+3,
+ 0x1.009094p+6,
+ 0x1.326a3ep-1,
+ 0x1.9767e6p+0,
+ 0x1.1027fp+0,
+ 0x1.3274f8p-1,
+ 0x1.197a9cp+1,
+ 0x1.3807p+2,
+ 0x1.90533p+4,
+ 0x1.0332ecp+0,
+ 0x1.3ca37p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.3ff4dcp+0,
+ 0x1p+0,
+ 0x1.900046p+0,
+ 0x1p+0,
+ 0x1.195576p+5,
+ 0x1.aec2ecp+7,
+ 0x1.65b984p+0,
+ 0x1.74677p+3,
+ 0x1.423322p+0,
+ 0x1.aeef9ep+16,
+ 0x1.0338c4p+0,
+ 0x1.1ae22ap+8,
+ 0x1.cc4adcp+0,
+ 0x1.d20a9ep+0,
+ 0x1.cdbefcp-45,
+ 0x1.03b23cp+0,
+ 0x1.25970cp+3,
+ 0x1.e6b02ep-1,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000aa8p+0,
+ 0x1.0054a4p+0,
+ 0x1.06600ap+0,
+ 0x1.b8601cp+6,
+ 0x1.fea92cp+5,
+ 0x1.6p+5,
+ 0x1.c76586p+0,
+ 0x1.90007ap+0,
+ 0x1.ef2d1p-84,
+ 0x1.03d5b6p+0,
+ 0x1.0164ecp+0,
+ 0x1.4441d8p+0,
+ 0x1.005c42p+0,
+ 0x1.046838p+0,
+ 0x1.51f04ap+0,
+ 0x1.cf822cp+0,
+ 0x1.033b4ap+0,
+ 0x1p+0,
+ 0x1.091bep+0,
+ 0x1p+0,
+ 0x1.5bb2a4p+0,
+ 0x1.01fe2cp+0,
+ 0x1.2b96p+1,
+ 0x1.242d9p+0,
+ 0x1.42ade4p+0,
+ 0x1p+0,
+ 0x1.689714p+2,
+ 0x1.4ac756p+0,
+ 0x1p+0,
+ 0x1.101ad8p+0,
+ 0x1.6208e8p+41,
+ 0x1.47091p+0,
+ 0x1.3e28p+3,
+ 0x1.04b70ep+0,
+ 0x1p+0,
+ 0x1.086c9p+0,
+ 0x1.70eb62p+54,
+ 0x1.dfb744p+4,
+ 0x1p+0,
+ 0x1.f302bcp-8,
+ 0x1.8d5fd4p+6,
+ 0x1.12d9a8p+0,
+ 0x1.00a39p+0,
+ 0x1p+0,
+ 0x1.00003cp+0,
+ 0x1.00031p+0,
+ 0x1.58743ep+0,
+ 0x1.003ae4p+0,
+ 0x1.7de5cep+2,
+ 0x1.096c7ep+0,
+ 0x1.57e436p+1,
+ 0x1.21fcb4p+2,
+ 0x1.31297ap-1,
+ 0x1p+0,
+ 0x1.ab5fcp+16,
+ 0x1.91e912p+42,
+ 0x1.5cb206p+1,
+ 0x1.000072p+0,
+ 0x1.00f4d2p+0,
+ 0x1.0ee52p+0,
+ 0x1.000014p+0,
+ 0x1.2f3a5ep-1,
+ 0x1.3fc07cp+1,
+ 0x1.64bd36p+1,
+ 0x1.f48f56p-1,
+ 0x1.0115f4p+0,
+ 0x1.1650bcp+2,
+ 0x1.013494p+0,
+ 0x1p+0,
+ 0x1.684e92p+0,
+ 0x1.0063a4p+0,
+ 0x1.3ca364p+0,
+ 0x1.197a48p+1,
+ 0x1.00a6f4p+0,
+ 0x1.31ce92p-1,
+ 0x1.fea91ep+5,
+ 0x1.6dd5cep+5,
+ 0x1.05035ep+8,
+ 0x1.6d6acep+5,
+ 0x1.8c4fa2p+5,
+ 0x1.f4e59cp-12,
+ 0x1.6330e4p+0,
+ 0x1.01a9fep+0,
+ 0x1.4f48e4p+0,
+ 0x1.d589c6p+1,
+ 0x1.5be04ap+15,
+ 0x1.f9e2f2p-1,
+ 0x1.294bdp+1,
+ 0x1.8bf1p+5,
+ 0x1.967eb8p-9,
+ 0x1.018d04p+0,
+ 0x1.00032cp+0,
+ 0x1p+0,
+ 0x1.ba21bcp+14,
+ 0x1.8dd6bp+0,
+ 0x1.7455a8p+3,
+ 0x1p+0,
+ 0x1.8e8a02p+15,
+ 0x1.015f06p+0,
+ 0x1.04a26p+8,
+ 0x1.000c58p+0,
+ 0x1.26a58cp+3,
+ 0x1.2719bap-19,
+ 0x1p+0,
+ 0x1.05194cp+7,
+ 0x1.34d9f4p+0,
+ 0x1p+0,
+ 0x1.029fa2p+0,
+ 0x1.99a9dap+0,
+ 0x1.cee06ep+0,
+ 0x1.3e921ap+0,
+ 0x1.9f8eep+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.13f606p+0,
+ 0x1p+0,
+ 0x1.0a176ep+2,
+ 0x1.aa9c94p+7,
+ 0x1.1211ep+0,
+ 0x1.122594p+0,
+ 0x1.b39642p+47,
+ 0x1p+0,
+ 0x1.000068p+0,
+ 0x1.6600aep-12,
+ 0x1.e0d6ecp+1,
+ 0x1.0019ep+0,
+ 0x1.34b8f4p-1,
+ 0x1.581728p+2,
+ 0x1.00016p+0,
+ 0x1.12b1ep+8,
+ 0x1.a679fp+14,
+ 0x1.90005ap+4,
+ 0x1.837996p-1,
+ 0x1p+0,
+ 0x1.0e2552p+1,
+ 0x1.22160cp+9,
+ 0x1p+0,
+ 0x1.57e4b4p+1,
+ 0x1p+0,
+ 0x1.bf8d0cp+0,
+ 0x1.d7e10ep+16,
+ 0x1.06bcc8p+0,
+ 0x1.133b12p+0,
+ 0x1.1b6542p+6,
+ 0x1p+0,
+ 0x1.feddbcp-1,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.2fd98ep-1,
+ 0x1.03d5b6p+0,
+ 0x1p+0,
+ 0x1.db8a46p-1,
+ 0x1.42e588p+0,
+ 0x1.0ee1p+1,
+ 0x1.361fep+0,
+ 0x1.2f74a8p+0,
+ 0x1p+0,
+ 0x1.31596cp-1,
+ 0x1.740a2p+3,
+ 0x1p+0,
+ 0x1.8dd672p+0,
+ 0x1.00011cp+0,
+ 0x1p+0,
+ 0x1.000102p+0,
+ 0x1.5cc2b2p+2,
+ 0x1p+0,
+ 0x1.17f4b4p+0,
+ 0x1.619318p+12,
+ 0x1.b14362p+0,
+ 0x1.c1004ep+0,
+ 0x1.318578p-1,
+ 0x1.9728ecp+2,
+ 0x1.25bdbcp+3,
+ 0x1.37ac8ap+63,
+ 0x1p+0,
+ 0x1.41ef56p+2,
+ 0x1.e65866p-1,
+ 0x1p+0,
+ 0x1.307e0ap+0,
+ 0x1.ef570ep+54,
+ 0x1.0290fap+1,
+ 0x1.9dd308p+0,
+ 0x1.21db9p+0,
+ 0x1.00003cp+0,
+ 0x1.eabf94p+0,
+ 0x1.386614p+10,
+ 0x1.f244dap+16,
+ 0x1p+0,
+ 0x1.00e094p+0,
+ 0x1.5605e6p+1,
+ 0x1.b16374p+2,
+ 0x1.9a2d88p+0,
+ 0x1.48748ap+9,
+ 0x1p+0,
+ 0x1.28e674p+0,
+ 0x1.bf4324p+7,
+ 0x1.2598c6p+3,
+ 0x1.215484p+1,
+ 0x1.05fb5p+51,
+ 0x1.0000d8p+0,
+ 0x1.f389dcp+6,
+ 0x1.41a1bp+0,
+ 0x1.001582p+0,
+ 0x1.1928ecp+5,
+ 0x1.00ff3ep+0,
+ 0x1.3883c4p+13,
+ 0x1.98b044p+2,
+ 0x1.8a43eep+0,
+ 0x1.733e8p+14,
+ 0x1.73ebfcp+2,
+ 0x1.0cd1fp+0,
+ 0x1p+0,
+ 0x1.af357p+5,
+ 0x1.b2c586p+5,
+ 0x1.470f58p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.0ffddep+0,
+ 0x1.02c422p+1,
+ 0x1.56c4a6p+1,
+ 0x1.492014p-47,
+ 0x1.192862p+5,
+ 0x1p+0,
+ 0x1.c7e222p+7,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.1a0d3p+49,
+ 0x1.946148p+0,
+ 0x1.524f6ap+2,
+ 0x1.31566ep-1,
+ 0x1.000198p+0,
+ 0x1.3d7efcp+3,
+ 0x1.000264p+0,
+ 0x1.4ed7ccp+0,
+ 0x1.b667ecp+0,
+ 0x1.81940ep+1,
+ 0x1p+0,
+ 0x1.088e6cp+0,
+ 0x1.065bbcp+1,
+ 0x1.009ae4p+1,
+ 0x1.008bfp+6,
+ 0x1.e9f5acp+7,
+ 0x1.1e1c44p+8,
+ 0x1.992348p+0,
+ 0x1.3162fp+0,
+ 0x1.fb0e1ap+48,
+ 0x1.8bf0acp+5,
+ 0x1p+0,
+ 0x1.1f57b2p+60,
+ 0x1.011f3p+0,
+ 0x1.3af642p+0,
+ 0x1.ccae9p+46,
+ 0x1.21325cp+0,
+ 0x1.07743p+7,
+ 0x1.1ae49ep+8,
+ 0x1.00006ap+0,
+ 0x1.1928aap+5,
+ 0x1.838206p-1,
+ 0x1p+0,
+ 0x1.00e9e8p+0,
+ 0x1.4684cap+0,
+ 0x1.02568p+0,
+ 0x1.5efc62p+1,
+ 0x1p+0,
+ 0x1.000352p+0,
+ 0x1.0578cap+0,
+ 0x1.0039ecp+0,
+ 0x1.2fc412p-1,
+ 0x1.4a939ap+1,
+ 0x1.ff27ep+5,
+ 0x1.091a62p+0,
+ 0x1.08c012p+0,
+ 0x1.67c8p+4,
+ 0x1.e26b74p-48,
+ 0x1p+0,
+ 0x1.283076p+3,
+ 0x1.2fe494p-1,
+ 0x1.4dcd9ep+5,
+ 0x1p+0,
+ 0x1.cdf4e4p+7,
+ 0x1p+0,
+ 0x1.c77d16p+1,
+ 0x1.fccf76p-1,
+ 0x1p+0,
+ 0x1.120a84p+0,
+ 0x1.054cdep+0,
+ 0x1.002a0cp+0,
+ 0x1.063b76p+0,
+ 0x1.0000d8p+0,
+ 0x1.30cedep-1,
+ 0x1.003884p+0,
+ 0x1p+0,
+ 0x1.e0065cp-1,
+ 0x1.693bd2p+15,
+ 0x1.0fadc2p+0,
+ 0x1.415d06p+0,
+ 0x1.0002ecp+0,
+ 0x1.27ce08p+0,
+ 0x1.3b9762p+0,
+ 0x1.2fb36p+2,
+ 0x1.02c8f8p+0,
+ 0x1.629facp+50,
+ 0x1.281c56p+3,
+ 0x1.4a93c8p+1,
+ 0x1.0e6cacp-1,
+ 0x1.f9ef4ap+0,
+ 0x1.44f78ap+2,
+ 0x1.9a1e18p+0,
+ 0x1p+0,
+ 0x1.3e566p+3,
+ 0x1.000128p+0,
+ 0x1p+0,
+ 0x1.112c38p+0,
+ 0x1.03d2dap+0,
+ 0x1.5fb222p+12,
+ 0x1.1f4b96p+0,
+ 0x1.01422p+1,
+ 0x1.ee5728p+63,
+ 0x1.4bcdd8p+1,
+ 0x1p+0,
+ 0x1.30e0e4p-1,
+ 0x1.6a36b2p+0,
+ 0x1.00016cp+0,
+ 0x1.04b966p+0,
+ 0x1.106e16p+16,
+ 0x1p+0,
+ 0x1.1233d2p+0,
+ 0x1p+0,
+ 0x1.15d1cap+1,
+ 0x1.137c02p+8,
+ 0x1.00001ap+0,
+ 0x1.07ab74p+0,
+ 0x1.800b4ep-1,
+ 0x1.55047p+0,
+ 0x1.90017ap+4,
+ 0x1.5c9898p+1,
+ 0x1.8ce4ccp+6,
+ 0x1p+0,
+ 0x1.6ee34p+0,
+ 0x1.bf600cp+0,
+ 0x1.f13a7ep+8,
+ 0x1.00015cp+0,
+ 0x1.b9c51ep+12,
+ 0x1.740826p+3,
+ 0x1.c29e5p+1,
+ 0x1.f56ba8p-1,
+ 0x1.37fe18p+2,
+ 0x1.190eap+0,
+ 0x1.419f1cp+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.20687ep+8,
+ 0x1.938ecap+4,
+ 0x1.01dd1cp+0,
+ 0x1.bbe888p+7,
+ 0x1.09d802p+0,
+ 0x1.cf3b8p+0,
+ 0x1.ea0d98p-1,
+ 0x1.172472p+6,
+ 0x1p+0,
+ 0x1.61dce4p+1,
+ 0x1.20b4fcp+0,
+ 0x1.00038cp+0,
+ 0x1p+0,
+ 0x1.0822p+0,
+ 0x1.9966ep+2,
+ 0x1.21f47cp+0,
+ 0x1.3a9762p+0,
+ 0x1.8c4e0cp+5,
+ 0x1p+0,
+ 0x1.61878cp+12,
+ 0x1.3ca348p+0,
+ 0x1.289028p+0,
+ 0x1.06e004p+0,
+ 0x1.02b4b4p+0,
+ 0x1.144eeep+1,
+ 0x1.30a14ap-1,
+ 0x1.07652p+0,
+ 0x1p+0,
+ 0x1.2ef288p+0,
+ 0x1.1ba73cp+5,
+ 0x1.48c714p+2,
+ 0x1.25c508p+3,
+ 0x1.b14382p+0,
+ 0x1.b39acep+0,
+ 0x1.0001c2p+0,
+ 0x1.996938p+3,
+ 0x1p+0,
+ 0x1.e49b2ep+7,
+ 0x1.000436p+0,
+ 0x1.34712p+0,
+ 0x1.47089p+0,
+ 0x1.0353b8p-49,
+ 0x1.2a818p+2,
+ 0x1.00058p+0,
+ 0x1.8a5a7ep+51,
+ 0x1p+0,
+ 0x1.8dbf04p+0,
+ 0x1.5004d8p+61,
+ 0x1.9557b2p+1,
+ 0x1.0fa92cp+0,
+ 0x1.16984ep+8,
+ 0x1.72bd7ap+1,
+ 0x1.980f0cp+1,
+ 0x1.ae63fp+14,
+ 0x1p+0,
+ 0x1.085224p+0,
+ 0x1.d8889ap-1,
+ 0x1.1d3ff6p+4,
+ 0x1.02c6ecp+1,
+ 0x1.73eb4ep+2,
+ 0x1.1916fp+4,
+ 0x1.4a04e8p+5,
+ 0x1.134906p+1,
+ 0x1.0002dp+0,
+ 0x1p+0,
+ 0x1.32db7p+0,
+ 0x1.0105b8p+0,
+ 0x1.09f78p+0,
+ 0x1.1d3e78p+4,
+ 0x1.41b184p+0,
+ 0x1.134914p+1,
+ 0x1.410e6ep+1,
+ 0x1.312a4ap-1,
+ 0x1.7308f4p+1,
+ 0x1p+0,
+ 0x1.0afbe8p+0,
+ 0x1p+0,
+ 0x1.00026ap+0,
+ 0x1.2ee012p+0,
+ 0x1.001318p+0,
+ 0x1.af1034p+4,
+ 0x1.687b1cp-24,
+ 0x1.a93ap+2,
+ 0x1.084598p+0,
+ 0x1.37031ap-1,
+ 0x1.c046ep+5,
+ 0x1.79a75ep+2,
+ 0x1.46a9c8p+1,
+ 0x1.000766p+0,
+ 0x1.245d98p+0,
+ 0x1.19287ap+5,
+ 0x1.6a0fbep+0,
+ 0x1p+0,
+ 0x1.011424p+0,
+ 0x1.879f4cp+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.4ca7ecp-51,
+ 0x1.5818c6p+2,
+ 0x1p+0,
+ 0x1.b4c9fap+7,
+ 0x1.b14384p+0,
+ 0x1.082fdp+0,
+ 0x1.085672p+8,
+ 0x1.918f3cp+6,
+ 0x1p+0,
+ 0x1.45623ep+0,
+ 0x1.95515cp+2,
+ 0x1.000068p+0,
+ 0x1.31f33ap-1,
+ 0x1.f9eed8p+0,
+ 0x1.91b218p+6,
+ 0x1.331446p-1,
+ 0x1.000202p+0,
+ 0x1p+0,
+ 0x1.3cdfb8p-1,
+ 0x1p+0,
+ 0x1.08fb58p+7,
+ 0x1.4dde38p+5,
+ 0x1p+0,
+ 0x1.0053a4p+0,
+ 0x1p+0,
+ 0x1.31e138p+7,
+ 0x1p+0,
+ 0x1.01c35cp+0,
+ 0x1.dba85cp+7,
+ 0x1.03682cp+2,
+ 0x1.000108p+0,
+ 0x1.bff348p+55,
+ 0x1.582dbp+1,
+ 0x1.31158p+0,
+ 0x1.760bep+44,
+ 0x1.e43226p+7,
+ 0x1.082008p+0,
+ 0x1.a03e4cp+7,
+ 0x1.00b984p+0,
+ 0x1.20c58ep+1,
+ 0x1.221c1p+0,
+ 0x1.594056p+7,
+ 0x1.aabf58p+2,
+ 0x1p+0,
+ 0x1.b142e4p+0,
+ 0x1.8bf166p+5,
+ 0x1p+0,
+ 0x1.000168p+0,
+ 0x1.06c69cp+0,
+ 0x1.900166p+4,
+ 0x1.621b64p+12,
+ 0x1.b142eep+0,
+ 0x1p+0,
+ 0x1.31c642p-1,
+ 0x1p+0,
+ 0x1.65b9cap+0,
+ 0x1.4adbbep+0,
+ 0x1p+0,
+ 0x1.858ea2p+0,
+ 0x1.076d06p+0,
+ 0x1.000dap+0,
+ 0x1.70cd96p+2,
+ 0x1.347a2p-1,
+ 0x1.73c75cp+2,
+ 0x1p+0,
+ 0x1.180c6ep+8,
+ 0x1p+0,
+ 0x1.1a32dcp+5,
+ 0x1.342abp-1,
+ 0x1.4a08p+5,
+ 0x1.000484p+0,
+ 0x1.e498b4p+7,
+ 0x1.91e072p+0,
+ 0x1p+0,
+ 0x1.9ab2a8p+0,
+ 0x1.0001dp+0,
+ 0x1.6ab22p+0,
+ 0x1.00036p+0,
+ 0x1.00042cp+0,
+ 0x1.0012a2p+0,
+ 0x1.f2b45cp+0,
+ 0x1.31b8fep-1,
+ 0x1.2a3f48p+1,
+ 0x1p+0,
+ 0x1.d8ecc8p+49,
+ 0x1.b143b2p+0,
+ 0x1.4f7516p+0,
+ 0x1.09a35cp+0,
+ 0x1.000ap+0,
+ 0x1.ad259ap+5,
+ 0x1.8d9b38p-18,
+ 0x1.92ef44p+0,
+ 0x1.7407ep+3,
+ 0x1.bcb74cp+7,
+ 0x1.57d22p+0,
+ 0x1.610e16p+0,
+ 0x1.2ff3fap-1,
+ 0x1.00aefcp+0,
+ 0x1.6aaf1cp+0,
+ 0x1.000298p+0,
+ 0x1.10b236p+0,
+ 0x1.2b6a4p+0,
+ 0x1.25c852p+3,
+ 0x1.000354p+0,
+ 0x1p+0,
+ 0x1.4fe4c2p+2,
+ 0x1.8ea358p+6,
+ 0x1.cd77f6p+2,
+ 0x1.0000aap+0,
+ 0x1.8c2a1ep-19,
+ 0x1.000264p+0,
+ 0x1.03001p+0,
+ 0x1.0c772cp+0,
+ 0x1.daea4p+4,
+ 0x1p+0,
+ 0x1.0f2d5ep+0,
+ 0x1p+0,
+ 0x1.1604d6p+0,
+ 0x1.2f7b08p-1,
+ 0x1.0002f4p+0,
+ 0x1p+0,
+ 0x1.91aaf8p+1,
+ 0x1.896624p+0,
+ 0x1.0024c2p+0,
+ 0x1.0fde8cp+1,
+ 0x1.3a7214p+16,
+ 0x1.01ff8p+0,
+ 0x1.02458p+1,
+ 0x1.1d3f4cp+4,
+ 0x1p+0,
+ 0x1.c0d546p+1,
+ 0x1.0ac2d4p+54,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.75e65p+55,
+ 0x1p+0,
+ 0x1.010256p+0,
+ 0x1.68165p+53,
+ 0x1p+0,
+ 0x1.013c3p+0,
+ 0x1.bc712ep+13,
+ 0x1p+0,
+ 0x1.71d1cp+5,
+ 0x1.49c482p+0,
+ 0x1.00665p+0,
+ 0x1.386324p+1,
+ 0x1.385c4ap-1,
+ 0x1p+0,
+ 0x1.379e5p+0,
+ 0x1.232592p+8,
+ 0x1p+0,
+ 0x1.000338p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.055404p+0,
+ 0x1.208ef8p+1,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.015d52p+0,
+ 0x1.9ea35cp+1,
+ 0x1.dc7eb4p+18,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.b3d24ep+7,
+ 0x1.fba328p+8,
+ 0x1.00c7fp+0,
+ 0x1.0d1acep+8,
+ 0x1.779a24p+2,
+ 0x1p+0,
+ 0x1.19499ep+0,
+ 0x1.25ddcep+3,
+ 0x1.78346cp+3,
+ 0x1.428e7ap+49,
+ 0x1.003dp+0,
+ 0x1p+0,
+ 0x1.313dbcp-1,
+ 0x1.6fef7p+1,
+ 0x1p+0,
+ 0x1.2ff116p-1,
+ 0x1.00f598p+0,
+ 0x1.45ab88p+0,
+ 0x1p+0,
+ 0x1.a93a36p+2,
+ 0x1p+0,
+ 0x1.54bb7p+2,
+ 0x1p+0,
+ 0x1.00004cp+0,
+ 0x1.edac12p+0,
+ 0x1.40f4fap+0,
+ 0x1.45c0bcp+0,
+ 0x1.0a2626p+0,
+ 0x1.bfa67ap+51,
+ 0x1.933f18p+0,
+ 0x1p+0,
+ 0x1.3f3fe8p+0,
+ 0x1.006fc8p+0,
+ 0x1.c04aecp+1,
+ 0x1.0afc4p+0,
+ 0x1.9b2f1ep+3,
+ 0x1.11a134p+3,
+ 0x1.0624dep-11,
+ 0x1.eabf94p+0,
+ 0x1.8950d8p+1,
+ 0x1.35eba2p-1,
+ 0x1.11c438p+0,
+ 0x1.02073p+0,
+ 0x1.483096p+0,
+ 0x1.484bf4p+2,
+ 0x1.1b86dcp+0,
+ 0x1.0d3c56p+0,
+ 0x1.0000e4p+0,
+ 0x1.a93b64p+2,
+ 0x1.b8db1cp+1,
+ 0x1.308c0ep-1,
+ 0x1p+0,
+ 0x1.1e84fp+0,
+ 0x1.3fc808p+0,
+ 0x1.19179ap+4,
+ 0x1p+0,
+ 0x1.f1d3a4p+7,
+ 0x1.273d1ep+1,
+ 0x1.000a16p+0,
+ 0x1.42ead6p+0,
+ 0x1.b8c318p+1,
+ 0x1.7226dp+1,
+ 0x1.43af5cp+0,
+ 0x1.450224p+0,
+ 0x1.000234p+0,
+ 0x1.358bc4p-1,
+ 0x1.0000acp+0,
+ 0x1.02ef5cp+0,
+ 0x1.1d16fap+8,
+ 0x1p+0,
+ 0x1.0a9be6p+0,
+ 0x1.2221d2p+8,
+ 0x1.45abbp+0,
+ 0x1p+0,
+ 0x1.b787f6p-12,
+ 0x1.960416p+0,
+ 0x1.0af8b6p+1,
+ 0x1.232048p+64,
+ 0x1.f6b2fp+0,
+ 0x1p+0,
+ 0x1.02fc3ep+0,
+ 0x1.19292ep+5,
+ 0x1.00fdcap+0,
+ 0x1.51ac2p+1,
+ 0x1.020b04p+0,
+ 0x1.3fe772p+1,
+ 0x1p+0,
+ 0x1.3a87dap+0,
+ 0x1.00dbf8p+0,
+ 0x1.dc825cp+1,
+ 0x1.051eap+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000bp+0,
+ 0x1.004874p+0,
+ 0x1.ed7906p+14,
+ 0x1.ba64fcp+12,
+ 0x1.03e86ap+0,
+ 0x1.5cdd2p+2,
+ 0x1.2fc1c6p-1,
+ 0x1.08a1b8p+0,
+ 0x1p+0,
+ 0x1.4e97bp+62,
+ 0x1.364392p+0,
+ 0x1.000236p+0,
+ 0x1.32f478p-1,
+ 0x1.362732p+4,
+ 0x1.1d3f0ep+4,
+ 0x1.205236p+44,
+ 0x1p+0,
+ 0x1.93afd4p+2,
+ 0x1.2f40ecp-1,
+ 0x1p+0,
+ 0x1.0fe4a4p+1,
+ 0x1.9975e8p+64,
+ 0x1.4a93fap+1,
+ 0x1.259756p+3,
+ 0x1.1e1e64p+8,
+ 0x1.000048p+0,
+ 0x1p+0,
+ 0x1.2f1f74p-1,
+ 0x1.7a124ap+0,
+ 0x1.5e3f8ep+2,
+ 0x1.e58cd8p-1,
+ 0x1.b3857ep+0,
+ 0x1.6f4da4p+0,
+ 0x1p+0,
+ 0x1.44caaep+0,
+ 0x1.6831b2p+0,
+ 0x1.7537bep+1,
+ 0x1p+0,
+ 0x1.003054p+0,
+ 0x1.4934p+2,
+ 0x1.00005p+0,
+ 0x1.000098p+0,
+ 0x1.091ebcp+0,
+ 0x1.465e2cp+9,
+ 0x1.00017p+0,
+ 0x1p+0,
+ 0x1.31ab6cp-1,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.f2386ep+57,
+ 0x1.147d32p+3,
+ 0x1.e480eep+7,
+ 0x1.03b3b2p+0,
+ 0x1.02035cp+0,
+ 0x1.11d934p+3,
+ 0x1.5776d8p+53,
+ 0x1.2c73p+0,
+ 0x1.63073ap+9,
+ 0x1.2041aep+8,
+ 0x1p+0,
+ 0x1.00594cp+0,
+ 0x1.3ee136p+0,
+ 0x1p+0,
+ 0x1.09548p+1,
+ 0x1.05f1f4p-11,
+ 0x1.0002a4p+0,
+ 0x1.16ac18p+3,
+ 0x1.b8531ep+7,
+ 0x1.0fd73cp+1,
+ 0x1.011f64p+0,
+ 0x1.0ff65ep+0,
+ 0x1.b1ecfp+4,
+ 0x1.8f0888p+0,
+ 0x1.f95e02p-1,
+ 0x1p+0,
+ 0x1.9000cep+0,
+ 0x1.e9b4fep+52,
+ 0x1.009838p+0,
+ 0x1.5ef598p+1,
+ 0x1.a6ad24p+7,
+ 0x1.4913c6p+0,
+ 0x1p+0,
+ 0x1.3d7314p+0,
+ 0x1p+0,
+ 0x1.a591c8p+0,
+ 0x1.017966p-13,
+ 0x1.9825cep+3,
+ 0x1.192898p+5,
+ 0x1.cddc2p+42,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.0dde0ap+8,
+ 0x1.0e56e8p+1,
+ 0x1.a6fbcep+3,
+ 0x1.b92cc8p+7,
+ 0x1.d57268p+0,
+ 0x1.b8f132p+1,
+ 0x1.4c257ap+0,
+ 0x1.00000ap+0,
+ 0x1.38635p+1,
+ 0x1.1cc07ap+45,
+ 0x1.71ff7ep+1,
+ 0x1.ef8b44p+0,
+ 0x1.6cf93ep+51,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.11f506p+8,
+ 0x1.77844ap+0,
+ 0x1p+0,
+ 0x1.bdd978p+7,
+ 0x1.00006ap+0,
+ 0x1.0e2602p+1,
+ 0x1.045486p+0,
+ 0x1.0002c8p+0,
+ 0x1.4d67c8p+1,
+ 0x1.e5b314p-1,
+ 0x1.6a374cp+0,
+ 0x1.99db52p+0,
+ 0x1.f9eeap-1,
+ 0x1.bf7f2cp+5,
+ 0x1.da61b4p+4,
+ 0x1.488ff4p+0,
+ 0x1.003p+0,
+ 0x1p+0,
+ 0x1.02ffcp+0,
+ 0x1.d09a76p+1,
+ 0x1.225a2cp+0,
+ 0x1.0637f2p+0,
+ 0x1.b3893p+0,
+ 0x1.00005p+0,
+ 0x1.bcc5ccp+59,
+ 0x1p+0,
+ 0x1.01f38ep+0,
+ 0x1.a720ecp+7,
+ 0x1.05390cp+1,
+ 0x1.bf3ffep+2,
+ 0x1.6b9574p+0,
+ 0x1.388f0cp+11,
+ 0x1.29a6aap+0,
+ 0x1.31e90ep-1,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.2f1498p-1,
+ 0x1.0000eep+0,
+ 0x1p+0,
+ 0x1.3190e2p-1,
+ 0x1p+0,
+ 0x1.7703c2p+1,
+ 0x1.0ffd1cp-24,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.f5c25p-24,
+ 0x1.7407c8p+3,
+ 0x1.45abd2p+0,
+ 0x1.1304ecp+0,
+ 0x1p+0,
+ 0x1.0002f4p+0,
+ 0x1.cd1cdap+1,
+ 0x1.6ef2fp+15,
+ 0x1.0002cap+0,
+ 0x1.dc83cp+1,
+ 0x1.0000ccp+0,
+ 0x1.0093cep+0,
+ 0x1.0066bap+0,
+ 0x1.002dp+0,
+ 0x1.0e6c8p+0,
+ 0x1.7be50ap+16,
+ 0x1.00b348p+0,
+ 0x1.089b3p+16,
+ 0x1.98b07cp+2,
+ 0x1.3389b2p+0,
+ 0x1.a41e1ep+7,
+ 0x1.7195dep+5,
+ 0x1.08b45cp+0,
+ 0x1.29c1eap+56,
+ 0x1.740b96p+3,
+ 0x1.71fef4p+1,
+ 0x1.07ba2cp+0,
+ 0x1.5ee4a2p+1,
+ 0x1p+0,
+ 0x1.f9599cp-1,
+ 0x1.b9154ep+14,
+ 0x1.f8911cp+0,
+ 0x1p+0,
+ 0x1.373e1p+4,
+ 0x1p+0,
+ 0x1.00146cp+0,
+ 0x1.4a05acp+5,
+ 0x1.1928aap+5,
+ 0x1.060cecp+0,
+ 0x1.773996p+0,
+ 0x1.af11c2p-11,
+ 0x1p+0,
+ 0x1.3f7d98p+7,
+ 0x1.1361ep+52,
+ 0x1.f9f064p+0,
+ 0x1p+0,
+ 0x1.a9b908p+7,
+ 0x1.c55b46p+0,
+ 0x1p+0,
+ 0x1.682ec4p+46,
+ 0x1.00003p+0,
+ 0x1p+0,
+ 0x1.2fdba4p-1,
+ 0x1.9beca4p+0,
+ 0x1.0004a8p+0,
+ 0x1.2fb262p-1,
+ 0x1.8bf118p+5,
+ 0x1.0001aap+0,
+ 0x1.31a74p-1,
+ 0x1.25db7ep+3,
+ 0x1p+0,
+ 0x1.197a7cp+1,
+ 0x1p+0,
+ 0x1.2d315cp+0,
+ 0x1.0024f8p+0,
+ 0x1.2a7f04p+1,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.01211cp+0,
+ 0x1.f11d7ep-1,
+ 0x1.d4f718p+2,
+ 0x1.b233dep+0,
+ 0x1.6d6b1cp+5,
+ 0x1.7724fep+15,
+ 0x1p+0,
+ 0x1.a86fbap+7,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.4aa984p+49,
+ 0x1.000054p+0,
+ 0x1p+0,
+ 0x1.33d3f4p-1,
+ 0x1p+0,
+ 0x1.1b0cd8p+6,
+ 0x1.000958p+0,
+ 0x1p+0,
+ 0x1.49ef4ep+4,
+ 0x1.7cc648p+1,
+ 0x1p+0,
+ 0x1.23470ap+0,
+ 0x1.3223a4p+0,
+ 0x1p+0,
+ 0x1.4d6912p+0,
+ 0x1.51e25p+0,
+ 0x1p+0,
+ 0x1.34962cp+0,
+ 0x1.0fdd0cp+1,
+ 0x1.0001d8p+0,
+ 0x1.38637cp+1,
+ 0x1.9de754p+3,
+ 0x1.8e020cp+5,
+ 0x1.ad9158p+4,
+ 0x1.094afap+0,
+ 0x1.ea949ep+52,
+ 0x1.ec6aa4p+1,
+ 0x1.1a5e6cp+4,
+ 0x1.07ed56p+0,
+ 0x1.711ffp+0,
+ 0x1p+0,
+ 0x1.062702p+8,
+ 0x1.233ffap+18,
+ 0x1.10c252p+7,
+ 0x1.002a14p+0,
+ 0x1.98f468p+0,
+ 0x1.833884p+0,
+ 0x1p+0,
+ 0x1.9179acp+4,
+ 0x1.d944c4p-1,
+ 0x1.00bc84p+0,
+ 0x1p+0,
+ 0x1.46c0aep+0,
+ 0x1.ad157p+4,
+ 0x1.13492cp+1,
+ 0x1.4b0ceep+0,
+ 0x1.000246p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.176dbep+0,
+ 0x1.52e1b8p+0,
+ 0x1.050ab8p+0,
+ 0x1p+0,
+ 0x1.ef2d1p-84,
+ 0x1.d0999p+1,
+ 0x1.00b594p+0,
+ 0x1.19ae42p+54,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.bf05cap-56,
+ 0x1.fba48p+0,
+ 0x1.19a5ecp+4,
+ 0x1.000518p+0,
+ 0x1.cd1cc6p+1,
+ 0x1.0008d2p+0,
+ 0x1.00291cp+0,
+ 0x1.01ae5cp+0,
+ 0x1.18229cp+0,
+ 0x1.0000d6p+0,
+ 0x1.00017p+0,
+ 0x1.1083fep-25,
+ 0x1p+0,
+ 0x1.7d379ap+9,
+ 0x1.2f5e0ep-1,
+ 0x1.365e38p+0,
+ 0x1.000912p+0,
+ 0x1.8p+3,
+ 0x1.13e39cp+1,
+ 0x1p+0,
+ 0x1.0ba4aep+0,
+ 0x1.9deafcp+3,
+ 0x1.2fead4p-1,
+ 0x1p+0,
+ 0x1.11a49cp+16,
+ 0x1.968f3ap+62,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.b85f8ep+6,
+ 0x1.141a8ep+8,
+ 0x1.0564ecp+0,
+ 0x1.c6b168p+2,
+ 0x1.05b106p+8,
+ 0x1.000298p+0,
+ 0x1p+0,
+ 0x1.0001fap+0,
+ 0x1.000164p+0,
+ 0x1.31a84p+0,
+ 0x1p+0,
+ 0x1.403f5cp+5,
+ 0x1.ea62dep-1,
+ 0x1p+0,
+ 0x1.131eeep+1,
+ 0x1.3625d8p+4,
+ 0x1.066f0cp+0,
+ 0x1.e7a64p+7,
+ 0x1.047e06p+0,
+ 0x1p+0,
+ 0x1.32aad8p-1,
+ 0x1p+0,
+ 0x1.000118p+0,
+ 0x1.1b0d0cp+6,
+ 0x1.a11c9p+0,
+ 0x1.a2588ep+54,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.09ffa8p+8,
+ 0x1.bb2a7cp+5,
+ 0x1p+0,
+ 0x1.a1f9p+0,
+ 0x1p+0,
+ 0x1.f3d4b4p-1,
+ 0x1.4dc16ap+5,
+ 0x1.3b2274p+4,
+ 0x1.457d56p+0,
+ 0x1.01cfcp+0,
+ 0x1p+0,
+ 0x1.a93982p+2,
+ 0x1.04054cp+0,
+ 0x1.0080fap+0,
+ 0x1.dc801cp+0,
+ 0x1.0b77bep+1,
+ 0x1.013094p+0,
+ 0x1.0001e8p+0,
+ 0x1.02e2ep+0,
+ 0x1p+0,
+ 0x1.000094p+0,
+ 0x1.fb4382p-1,
+ 0x1.00019p+0,
+ 0x1.0007b8p+0,
+ 0x1.127e1ap+8,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.0e25cp+1,
+ 0x1.2f4b78p+1,
+ 0x1.015b26p+8,
+ 0x1.0eb20cp+0,
+ 0x1.081558p+7,
+ 0x1.42ff58p+0,
+ 0x1.1c5d1p+6,
+ 0x1.887b42p+14,
+ 0x1.02904p+1,
+ 0x1.7ce25ap+1,
+ 0x1.f96d6p-1,
+ 0x1.5c64f4p+0,
+ 0x1.0005c8p+0,
+ 0x1.78e9d4p-33,
+ 0x1.da628ep+4,
+ 0x1.003634p+0,
+ 0x1.3184d6p-1,
+ 0x1.bd96f4p+6,
+ 0x1.ba5156p+12,
+ 0x1.8df4acp+0,
+ 0x1p+0,
+ 0x1.a3b92p+7,
+ 0x1.3e4f26p+11,
+ 0x1.543868p+4,
+ 0x1.eabfe6p+0,
+ 0x1.0073e6p+0,
+ 0x1.0f2bdep+8,
+ 0x1.3e3c3ep+13,
+ 0x1.3884dp+6,
+ 0x1p+0,
+ 0x1.690fecp+0,
+ 0x1.dfa074p-1,
+ 0x1.000638p+0,
+ 0x1.4a93acp+1,
+ 0x1.8dd68ap+0,
+ 0x1.0048dcp+0,
+ 0x1.002f8ep+0,
+ 0x1.00015p+0,
+ 0x1.45abbcp+0,
+ 0x1.f3f306p-1,
+ 0x1.1b639p+0,
+ 0x1.ef2d1p-84,
+ 0x1.abd54p+0,
+ 0x1.36f8aap+2,
+ 0x1.e317cep-1,
+ 0x1.36f9cap+2,
+ 0x1.530ddp+0,
+ 0x1.2f74bp+0,
+ 0x1.3c4448p+0,
+ 0x1.0718dcp+0,
+ 0x1.0001bp+0,
+ 0x1p+0,
+ 0x1.1d3ebap+4,
+ 0x1.42e55ap+0,
+ 0x1.3ace3ep+50,
+ 0x1.5b5108p+1,
+ 0x1.13527cp+3,
+ 0x1.0002ap+0,
+ 0x1.6f3ebcp+2,
+ 0x1.b0af06p+7,
+ 0x1.016c28p+0,
+ 0x1p+0,
+ 0x1.4542a6p+0,
+ 0x1p+0,
+ 0x1.6120cep+55,
+ 0x1.02a2p+0,
+ 0x1.0714d6p+15,
+ 0x1.21293ep+0,
+ 0x1.023b38p+0,
+ 0x1.000d12p+0,
+ 0x1.4d9f06p+15,
+ 0x1p+0,
+ 0x1.dd3bb4p-1,
+ 0x1p+0,
+ 0x1.00029ep+0,
+ 0x1.eabfa8p+0,
+ 0x1.362a2ep+0,
+ 0x1.000a5ap+48,
+ 0x1.dfbac8p+4,
+ 0x1.259742p+3,
+ 0x1.0000acp+0,
+ 0x1.00cc58p+1,
+ 0x1.49155ep+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.30d9ap-1,
+ 0x1.02fc6p+0,
+ 0x1.3cac76p+0,
+ 0x1.b8c472p+1,
+ 0x1.8bf1bcp+5,
+ 0x1.2cd56p+0,
+ 0x1.1d37a6p+0,
+ 0x1p+0,
+ 0x1.6b03dep+2,
+ 0x1p+0,
+ 0x1.4bc794p+0,
+ 0x1.dc56e6p+1,
+ 0x1.b1432ap+0,
+ 0x1.5a6574p+2,
+ 0x1.a21356p+4,
+ 0x1.6269ep+64,
+ 0x1.0000dp+0,
+ 0x1.10766cp+7,
+ 0x1.0096e6p+0,
+ 0x1.adf486p+0,
+ 0x1.309de8p-1,
+ 0x1.085fb4p+0,
+ 0x1.3afb0ep+0,
+ 0x1.0002a2p+0,
+ 0x1.085208p+0,
+ 0x1.213daap+8,
+ 0x1.000a5ap+0,
+ 0x1.503f0cp+0,
+ 0x1.000428p+0,
+ 0x1.7ee7d4p+16,
+ 0x1.8e5064p+61,
+ 0x1.3f6054p+7,
+ 0x1.3a78a6p+0,
+ 0x1.0a197ap+0,
+ 0x1.016ea8p+0,
+ 0x1.0bbb28p+8,
+ 0x1.000014p+0,
+ 0x1.0010d4p+0,
+ 0x1.5983f8p-26,
+ 0x1.2dddep+0,
+ 0x1.3f4af4p+0,
+ 0x1.15f078p+0,
+ 0x1p+0,
+ 0x1.8ffae8p-20,
+ 0x1.0000a4p+0,
+ 0x1.4f32a8p+0,
+ 0x1.8bf1f2p+5,
+ 0x1.0000fp+0,
+ 0x1.1e9612p+0,
+ 0x1.000512p+0,
+ 0x1.000184p+0,
+ 0x1p+0,
+ 0x1.4a071ap+5,
+ 0x1.316586p-1,
+ 0x1.026922p+0,
+ 0x1.9323dcp+3,
+ 0x1.0530acp+0,
+ 0x1.18125p+0,
+ 0x1.e39054p-1,
+ 0x1.3ad2p+11,
+ 0x1.005ad4p+0,
+ 0x1.000208p+0,
+ 0x1.b85f4cp+6,
+ 0x1.002d02p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.da3556p+8,
+ 0x1p+0,
+ 0x1.02c298p+0,
+ 0x1.11a35ep+3,
+ 0x1.4a0a02p+1,
+ 0x1.02741p+2,
+ 0x1p+0,
+ 0x1.2749a2p+0,
+ 0x1.45abacp+0,
+ 0x1p+0,
+ 0x1.3920bcp+13,
+ 0x1.000054p+0,
+ 0x1.4ceda8p+0,
+ 0x1p+0,
+ 0x1.390b2p+7,
+ 0x1.66764ep+7,
+ 0x1p+0,
+ 0x1.e11478p+7,
+ 0x1.0f264cp+0,
+ 0x1p+0,
+ 0x1.2f7ec2p-1,
+ 0x1p+0,
+ 0x1.0ac6fcp+8,
+ 0x1.3ca396p+0,
+ 0x1.9ad138p+5,
+ 0x1.e5b8acp+7,
+ 0x1.0000b8p+0,
+ 0x1.f14fd6p-11,
+ 0x1.00009p+0,
+ 0x1.01571ep+0,
+ 0x1.17c726p+0,
+ 0x1.00019p+0,
+ 0x1.362514p+4,
+ 0x1.004efp+0,
+ 0x1.003f5cp+0,
+ 0x1.43c41cp+0,
+ 0x1p+0,
+ 0x1.3e6c78p+12,
+ 0x1.000c5cp+0,
+ 0x1.3e795cp+6,
+ 0x1.b825a6p+7,
+ 0x1.ace64p+1,
+ 0x1.36f8dp+2,
+ 0x1.587484p+0,
+ 0x1.94967ap+14,
+ 0x1.af98e6p+17,
+ 0x1.6488b6p+0,
+ 0x1.1d3e98p+4,
+ 0x1.009978p+0,
+ 0x1.377d08p+0,
+ 0x1.2fdc0ep+0,
+ 0x1.045768p+0,
+ 0x1.f9ef1ap+0,
+ 0x1.003e4ap+0,
+ 0x1.3e825p+9,
+ 0x1.38da1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.00d4a2p+0,
+ 0x1.3e6838p+12,
+ 0x1.0c24a8p+0,
+ 0x1.00012cp+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.001188p+0,
+ 0x1.30be32p-1,
+ 0x1.d20bfcp+0,
+ 0x1.000314p+0,
+ 0x1.467b6ap+1,
+ 0x1.b14436p+0,
+ 0x1.be3eccp+7,
+ 0x1.035cc4p+0,
+ 0x1p+0,
+ 0x1.358ca4p+7,
+ 0x1p+0,
+ 0x1.052ef8p+8,
+ 0x1.08ac7ep+0,
+ 0x1p+0,
+ 0x1.ef2d1p-84,
+ 0x1p+0,
+ 0x1.388d04p+56,
+ 0x1.003836p+0,
+ 0x1.65f1ecp+0,
+ 0x1.5b141p+47,
+ 0x1.fadea2p+0,
+ 0x1.d1e872p+59,
+ 0x1p+0,
+ 0x1.acd704p+0,
+ 0x1.d46c0ap-34,
+ 0x1p+0,
+ 0x1.015a84p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.02161ep+0,
+ 0x1p+0,
+ 0x1.02283cp+0,
+ 0x1.2fb3d8p+2,
+ 0x1.3b1854p+4,
+ 0x1.9a69d8p+48,
+ 0x1.f9ef08p+0,
+ 0x1.7e849cp+3,
+ 0x1.eabffp+0,
+ 0x1.054884p+0,
+ 0x1.9faadcp+7,
+ 0x1.01dbfep+0,
+ 0x1.a9a6aap+1,
+ 0x1p+0,
+ 0x1.ae82b2p+5,
+ 0x1.423f6p-20,
+ 0x1.42e57p+0,
+ 0x1.41466p+2,
+ 0x1p+0,
+ 0x1.49ef3ep+4,
+ 0x1.f264ccp-1,
+ 0x1.0084dap+0,
+ 0x1.07aabap+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.009f06p+0,
+ 0x1.008b44p+0,
+ 0x1.3e2b8cp+5,
+ 0x1.000324p+0,
+ 0x1.0c4158p+0,
+ 0x1.32644cp-1,
+ 0x1.1929dp+5,
+ 0x1.8ac548p+4,
+ 0x1.01b036p+0,
+ 0x1.7e3a98p+5,
+ 0x1.34bc8p-1,
+ 0x1.b14336p+0,
+ 0x1.0cb4e2p+0,
+ 0x1.b931bp+12,
+ 0x1.2358fp+1,
+ 0x1.f23b6cp+51,
+ 0x1p+0,
+ 0x1.16fa4cp+4,
+ 0x1.0baf84p+0,
+ 0x1.a856a8p+5,
+ 0x1.066f6p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.20b7bp+0,
+ 0x1.3fe392p+0,
+ 0x1.388ae2p+0,
+ 0x1.00035cp+0,
+ 0x1.3adcf2p+12,
+ 0x1.30393p-1,
+ 0x1.e17338p+1,
+ 0x1.aa6b1ap+7,
+ 0x1.0000b6p+0,
+ 0x1p+0,
+ 0x1.345b46p-1,
+ 0x1.74921cp+8,
+ 0x1.b29bd6p+7,
+ 0x1p+0,
+ 0x1.77c706p+2,
+ 0x1.c4d8ecp+65,
+ 0x1.8d98bp+0,
+ 0x1.8b8002p-6,
+ 0x1.3881ecp+15,
+ 0x1.010cd4p+0,
+ 0x1.c8fdaap+7,
+ 0x1.72b958p+2,
+ 0x1.965c1cp+3,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.2a515cp+0,
+ 0x1.cd1e9p+1,
+ 0x1.006674p+0,
+ 0x1p+0,
+ 0x1.66e4cp+2,
+ 0x1.13aa9ep+8,
+ 0x1p+0,
+ 0x1.13101cp+1,
+ 0x1.0004ecp+0,
+ 0x1p+0,
+ 0x1.c51ad2p+7,
+ 0x1p+0,
+ 0x1.2a0908p+8,
+ 0x1.000182p+0,
+ 0x1.ac40fcp+2,
+ 0x1.30f308p-1,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.1ceeaep+7,
+ 0x1.0000a4p+0,
+ 0x1.f407acp+7,
+ 0x1.36f98ep+2,
+ 0x1.1c60a8p+10,
+ 0x1.617238p+12,
+ 0x1p+0,
+ 0x1.48fb3ap+0,
+ 0x1p+0,
+ 0x1.000d5p+0,
+ 0x1.33833cp-1,
+ 0x1p+0,
+ 0x1.41be46p+51,
+ 0x1.238e58p+0,
+ 0x1.00266cp+0,
+ 0x1.9fc4bp+58,
+ 0x1.000618p+0,
+ 0x1.88a592p+48,
+ 0x1.0001c8p+0,
+ 0x1p+0,
+ 0x1.51c89cp+0,
+ 0x1.317344p+7,
+ 0x1.308e8ap-1,
+ 0x1p+0,
+ 0x1.0387e6p+0,
+ 0x1.454a32p+0,
+ 0x1.74a828p+7,
+ 0x1.f57daep-8,
+ 0x1.287a44p+0,
+ 0x1.b84b08p+2,
+ 0x1.27fc5ap+0,
+ 0x1p+0,
+ 0x1.0e423p+1,
+ 0x1p+0,
+ 0x1.079ddp+0,
+ 0x1.f49a74p+14,
+ 0x1.0f47bp+0,
+ 0x1.9000bap+4,
+ 0x1.000244p+0,
+ 0x1p+0,
+ 0x1.4a38ep+0,
+ 0x1.36f8bp+2,
+ 0x1.6bf43cp+0,
+ 0x1.a3a9f4p+1,
+ 0x1.001d24p+0,
+ 0x1.106f8ap+0,
+ 0x1.0003ep+0,
+ 0x1.00025p+0,
+ 0x1.89be24p+0,
+ 0x1.3d65b4p+6,
+ 0x1.44b46ep+0,
+ 0x1.5caecap+1,
+ 0x1.00327cp+2,
+ 0x1.54bbep+2,
+ 0x1.2597aap+3,
+ 0x1.059a5ap-11,
+ 0x1.43884ep+2,
+ 0x1p+0,
+ 0x1.c04628p+9,
+ 0x1p+0,
+ 0x1.c1b9bp-49,
+ 0x1.73ed24p+2,
+ 0x1.000598p+0,
+ 0x1.44105p+0,
+ 0x1.b7c192p+5,
+ 0x1.312178p-1,
+ 0x1p+0,
+ 0x1.f9efc2p+0,
+ 0x1.014252p-51,
+ 0x1.017a66p+0,
+ 0x1.1f3de4p+8,
+ 0x1.02b182p+0,
+ 0x1.257372p+0,
+ 0x1.93944ap+48,
+ 0x1.e2305cp+1,
+ 0x1.3e0ee6p-8,
+ 0x1.00011ep+0,
+ 0x1.a31448p+5,
+ 0x1.8c9ca6p+48,
+ 0x1.194216p+0,
+ 0x1p+0,
+ 0x1.5cc2ap+2,
+ 0x1p+0,
+ 0x1.506fe6p+49,
+ 0x1.2588fp+0,
+ 0x1.26ffaep+1,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.4ff01ap+66,
+ 0x1.00009cp+0,
+ 0x1.000f38p+0,
+ 0x1.00e4d6p+0,
+ 0x1.001d5cp+0,
+ 0x1.02b29cp+50,
+ 0x1.358d1p+7,
+ 0x1.3eff02p+8,
+ 0x1.900058p+4,
+ 0x1.3ae0bcp+13,
+ 0x1.034d3ep+0,
+ 0x1.b9346p+5,
+ 0x1p+0,
+ 0x1.71b9cp+0,
+ 0x1.2f7456p+0,
+ 0x1.47ccf2p+0,
+ 0x1.498974p+0,
+ 0x1.046cb8p+0,
+ 0x1.458c62p+1,
+ 0x1.a93bf4p+2,
+ 0x1.0f113ap+8,
+ 0x1p+0,
+ 0x1.04ae52p+0,
+ 0x1.7c2a68p+0,
+ 0x1.3b24fep+9,
+ 0x1.04ef5p-11,
+ 0x1.11a28ap+3,
+ 0x1p+0,
+ 0x1.056b24p+1,
+ 0x1.0000e4p+0,
+ 0x1.2c01cap+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.c61f72p+15,
+ 0x1p+0,
+ 0x1.02fc2ap+0,
+ 0x1p+0,
+ 0x1.093acep+0,
+ 0x1.5643eap+53,
+ 0x1p+0,
+ 0x1.0087a8p-47,
+ 0x1.2f5868p+0,
+ 0x1.38e848p+10,
+ 0x1.e5c11cp+7,
+ 0x1p+0,
+ 0x1.129e64p+8,
+ 0x1.5c6c98p+1,
+ 0x1.00015ap+0,
+ 0x1.b745e2p+48,
+ 0x1.1bfb08p+0,
+ 0x1.a92b86p+5,
+ 0x1.7c2a54p+0,
+ 0x1p+0,
+ 0x1.3334b6p+0,
+ 0x1.b5c006p+5,
+ 0x1p+0,
+ 0x1.bec8c6p+16,
+ 0x1p+0,
+ 0x1.dc5496p-1,
+ 0x1.0a88ep+0,
+ 0x1.f95e78p+1,
+ 0x1p+0,
+ 0x1.0037b4p+0,
+ 0x1.1eaf62p+8,
+ 0x1p+0,
+ 0x1.43bfcp+5,
+ 0x1.3af986p+15,
+ 0x1.03dbf4p+0,
+ 0x1.b1b5a8p-12,
+ 0x1p+0,
+ 0x1.90007ep+0,
+ 0x1.0003b4p+0,
+ 0x1p+0,
+ 0x1.f8f086p-12,
+ 0x1.dd7178p+4,
+ 0x1.00207p+0,
+ 0x1.118916p+0,
+ 0x1p+0,
+ 0x1.a298c4p+7,
+ 0x1.006a6cp+0,
+ 0x1.1dfa5p+0,
+ 0x1.327c54p-1,
+ 0x1p+0,
+ 0x1.f7e922p-1,
+ 0x1.3e365ap+13,
+ 0x1p+0,
+ 0x1.04318ap+0,
+ 0x1.52381cp+0,
+ 0x1.60a298p-1,
+ 0x1.000076p+0,
+ 0x1.977c42p+14,
+ 0x1.a8cb5cp+7,
+ 0x1.1b0d18p+6,
+ 0x1.29cedp+0,
+ 0x1.15a46ap+1,
+ 0x1p+0,
+ 0x1.639aaep-12,
+ 0x1.004a8cp+0,
+ 0x1.0ab1bcp+1,
+ 0x1.b85ecp+6,
+ 0x1.36279ep+4,
+ 0x1.22ae32p+8,
+ 0x1.615228p+1,
+ 0x1.000898p+0,
+ 0x1.001968p+0,
+ 0x1p+0,
+ 0x1.2f791ap-1,
+ 0x1.00001cp+0,
+ 0x1p+0,
+ 0x1.0627aep+0,
+ 0x1.0e38d4p+5,
+ 0x1.490936p+57,
+ 0x1p+0,
+ 0x1.000358p+0,
+ 0x1.57b4bp+7,
+ 0x1.4b4766p+0,
+ 0x1.26da06p+0,
+ 0x1.cd1ec6p+1,
+ 0x1.38ee44p+15,
+ 0x1.c0ffbcp+15,
+ 0x1.01caacp+0,
+ 0x1.e2a336p-1,
+ 0x1p+0,
+ 0x1.0c69f4p+2,
+ 0x1.50a08cp+55,
+ 0x1.10d0b8p+0,
+ 0x1.1eed7p+1,
+ 0x1.b14428p+0,
+ 0x1.004f94p+0,
+ 0x1.31c2acp-1,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.b47948p+0,
+ 0x1.78d5eap+51,
+ 0x1.01316ep+0,
+ 0x1.4a937cp+0,
+ 0x1.1ba54ap+1,
+ 0x1.6ba304p+0,
+ 0x1.3591c6p-1,
+ 0x1p+0,
+ 0x1.08a91ap+8,
+ 0x1.19ade8p+0,
+ 0x1.01535ap+0,
+ 0x1.317184p-1,
+ 0x1.36f9a4p+2,
+ 0x1.7f08a8p+0,
+ 0x1p+0,
+ 0x1.00013p+0,
+ 0x1.ff478p-1,
+ 0x1.27e0d2p+0,
+ 0x1.0ecbacp+7,
+ 0x1.8dd6acp+0,
+ 0x1.100ecep+0,
+ 0x1.25edd8p+8,
+ 0x1.198a9p+0,
+ 0x1p+0,
+ 0x1.5c6cc2p+1,
+ 0x1.016276p+0,
+ 0x1.329f88p-1,
+ 0x1.9e35ap+0,
+ 0x1.004612p+0,
+ 0x1.fb9b82p-1,
+ 0x1.000d84p+0,
+ 0x1.43e8a8p+0,
+ 0x1.57e548p+1,
+ 0x1.057f18p+0,
+ 0x1.a6dfbep+7,
+ 0x1p+0,
+ 0x1.341ce2p-1,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.fcbce2p+56,
+ 0x1.004454p+0,
+ 0x1.909ec2p-6,
+ 0x1p+0,
+ 0x1.58649p+9,
+ 0x1.4b96e6p+49,
+ 0x1.3ca38cp+0,
+ 0x1.00033ep+0,
+ 0x1.0099f4p+0,
+ 0x1p+0,
+ 0x1.21869p+8,
+ 0x1p+0,
+ 0x1.65b514p+16,
+ 0x1p+0,
+ 0x1.740878p+3,
+ 0x1.a4cea2p+43,
+ 0x1.b143fep+0,
+ 0x1.25ed36p+4,
+ 0x1.003d7ap+0,
+ 0x1.0d82d4p+1,
+ 0x1.3389ap-1,
+ 0x1p+0,
+ 0x1.11a222p+3,
+ 0x1.983f38p+3,
+ 0x1.000162p+0,
+ 0x1.46b986p+0,
+ 0x1.3e3e9cp+8,
+ 0x1.58747p+0,
+ 0x1.45632cp+0,
+ 0x1.3f738cp+3,
+ 0x1.00d0bp+0,
+ 0x1.5dca1p+0,
+ 0x1p+0,
+ 0x1.43257p+0,
+ 0x1.0b38fap+0,
+ 0x1.1ca4aep+8,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.319a2p-1,
+ 0x1.2d4fd4p+5,
+ 0x1.02f006p+0,
+ 0x1.e0c05ap+4,
+ 0x1.98f464p+0,
+ 0x1.05db3ap+8,
+ 0x1.a2bd9ep+2,
+ 0x1.a05a58p+0,
+ 0x1.8bf254p+5,
+ 0x1.3eb04cp+4,
+ 0x1.3140a6p-1,
+ 0x1.011d98p+0,
+ 0x1p+0,
+ 0x1.000ac8p+0,
+ 0x1.3b2774p+10,
+ 0x1.44d29p+0,
+ 0x1p+0,
+ 0x1.009f9ep+0,
+ 0x1.0a8702p+2,
+ 0x1.1349bep+1,
+ 0x1.a585b4p+7,
+ 0x1.00f23cp+0,
+ 0x1.338168p+0,
+ 0x1p+0,
+ 0x1.3e7816p+14,
+ 0x1.0e9d14p+0,
+ 0x1.8f53ccp+1,
+ 0x1.28c922p+0,
+ 0x1.6bb30ep+15,
+ 0x1.b58932p+14,
+ 0x1.1c682p+0,
+ 0x1.00846p+0,
+ 0x1.00240cp+0,
+ 0x1.000674p+0,
+ 0x1.2c71ep+3,
+ 0x1.750298p+67,
+ 0x1.364684p+0,
+ 0x1.134676p+16,
+ 0x1.47a244p+0,
+ 0x1p+0,
+ 0x1.dee22ep-1,
+ 0x1.3e8204p+9,
+ 0x1.00007p+0,
+ 0x1.31f1e6p-1,
+ 0x1p+0,
+ 0x1.a187f8p+7,
+ 0x1.0097e4p+0,
+ 0x1.08e1b2p+0,
+ 0x1.0e3e7ap+0,
+ 0x1.0006fap+0,
+ 0x1p+0,
+ 0x1.358ca6p+7,
+ 0x1.83bcacp+3,
+ 0x1.4603f4p+0,
+ 0x1.3093c8p+0,
+ 0x1.5c6cap+1,
+ 0x1.1f5efcp+0,
+ 0x1.6ba3e8p+0,
+ 0x1.cba7b2p+7,
+ 0x1.015e1ep+0,
+ 0x1.b85f58p+6,
+ 0x1.dc835ep+1,
+ 0x1.000598p+0,
+ 0x1.f9551ap-1,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.0a67fp+0,
+ 0x1.1bdf58p+0,
+ 0x1.f75026p-1,
+ 0x1.5e3b5p+1,
+ 0x1.3f9b72p+0,
+ 0x1.8ff798p-51,
+ 0x1.0115bap+0,
+ 0x1.4e13fcp+0,
+ 0x1.6d6c54p+5,
+ 0x1.0e7538p+0,
+ 0x1.dcf5d8p-12,
+ 0x1.134aa6p+1,
+ 0x1.b7cc8p+12,
+ 0x1.3e46dap+12,
+ 0x1p+0,
+ 0x1.3fb2fep+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.0f8834p+0,
+ 0x1p+0,
+ 0x1.2f8fc8p-1,
+ 0x1.0032aap+0,
+ 0x1.0134d4p+0,
+ 0x1.0006ecp+0,
+ 0x1.36f9b8p+2,
+ 0x1.d32d7p+43,
+ 0x1.65f516p+1,
+ 0x1.a71662p+5,
+ 0x1.02731cp+2,
+ 0x1.00002cp+0,
+ 0x1.090ap+0,
+ 0x1.8ce46ep+6,
+ 0x1.0001bp+0,
+ 0x1.003c82p+0,
+ 0x1.a2cb78p+5,
+ 0x1.1b3cc6p+0,
+ 0x1p+0,
+ 0x1.000698p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.0a01d2p+50,
+ 0x1.000b52p+0,
+ 0x1.63092ep+0,
+ 0x1.0011fcp+0,
+ 0x1.684b74p+2,
+ 0x1.782834p+49,
+ 0x1.213286p+0,
+ 0x1.2b13b6p+9,
+ 0x1.383ep+0,
+ 0x1.f91f5cp+2,
+ 0x1.bf1f3cp+7,
+ 0x1.3e44f4p+7,
+ 0x1p+0,
+ 0x1.4637a4p+0,
+ 0x1.3e8c48p+12,
+ 0x1.192a3cp+8,
+ 0x1.0008c2p+0,
+ 0x1p+0,
+ 0x1.01a4b6p+8,
+ 0x1.0002d8p+0,
+ 0x1.001054p-6,
+ 0x1p+0,
+ 0x1.275d2cp+0,
+ 0x1.320582p-1,
+ 0x1.02643ep+0,
+ 0x1.aa4074p+5,
+ 0x1.02528cp+0,
+ 0x1.0adc1p+7,
+ 0x1.e25f42p-1,
+ 0x1p+0,
+ 0x1.0076ap+0,
+ 0x1.0008acp+0,
+ 0x1.783ba4p+3,
+ 0x1.01af66p+0,
+ 0x1.192eep+0,
+ 0x1.132ea6p+7,
+ 0x1.a93964p+2,
+ 0x1.9bc85p+14,
+ 0x1.1e3f46p+8,
+ 0x1.1d8db6p+13,
+ 0x1.0007cap+0,
+ 0x1.2fa568p-1,
+ 0x1.3e8fd4p+12,
+ 0x1.2f5bf6p-1,
+ 0x1.a0994cp+14,
+ 0x1.7ed6b2p+0,
+ 0x1.0f2b1ap+0,
+ 0x1.4ab6e6p+1,
+ 0x1.04c838p+8,
+ 0x1.000034p+0,
+ 0x1p+0,
+ 0x1.eadcd6p-1,
+ 0x1.00008p+0,
+ 0x1.12103cp-1,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.2f93bp-1,
+ 0x1.7b4b16p+5,
+ 0x1.38fe8cp+6,
+ 0x1p+0,
+ 0x1.36f96cp+2,
+ 0x1.716462p+39,
+ 0x1.000048p+0,
+ 0x1.7c680ep+4,
+ 0x1p+0,
+ 0x1.28cbfap+0,
+ 0x1.a416eap+41,
+ 0x1p+0,
+ 0x1.57e51p+1,
+ 0x1.0004f4p+0,
+ 0x1p+0,
+ 0x1.3167b6p-1,
+ 0x1.984032p+3,
+ 0x1.04f21ep+0,
+ 0x1p+0,
+ 0x1.73ed4p+2,
+ 0x1.0f4eb8p+8,
+ 0x1p+0,
+ 0x1.2df9p+5,
+ 0x1.54bbf8p+2,
+ 0x1.0bf9a4p+0,
+ 0x1.a91d34p+63,
+ 0x1.130ed8p+0,
+ 0x1p+0,
+ 0x1.00036ap+0,
+ 0x1.3ae7aep+8,
+ 0x1.16524ap+8,
+ 0x1.9f774ap+0,
+ 0x1.ba601cp+2,
+ 0x1.bb2f0cp+12,
+ 0x1.a93bd4p+2,
+ 0x1.32e318p+0,
+ 0x1.0ab44ap+0,
+ 0x1p+0,
+ 0x1.2f871ep-1,
+ 0x1p+0,
+ 0x1.a78356p+7,
+ 0x1.001e8cp+0,
+ 0x1.4a08dap+5,
+ 0x1.069e1cp+0,
+ 0x1.e3e184p+1,
+ 0x1.f60012p+18,
+ 0x1p+0,
+ 0x1.b8600ep+6,
+ 0x1.300bc6p-1,
+ 0x1.76f83cp+6,
+ 0x1.16f978p+0,
+ 0x1.0003a4p+0,
+ 0x1.0b4f22p+7,
+ 0x1.37409cp+0,
+ 0x1p+0,
+ 0x1.3e95dp+12,
+ 0x1.00098p+0,
+ 0x1.004038p+0,
+ 0x1.301bfep-1,
+ 0x1p+0,
+ 0x1.9c872ep+0,
+ 0x1.378344p+16,
+ 0x1.18c55cp+0,
+ 0x1.274a0ep-20,
+ 0x1.2811b2p+0,
+ 0x1p+0,
+ 0x1.ba668cp+12,
+ 0x1.7f2c8ap+13,
+ 0x1.0f72fcp+8,
+ 0x1.6308a6p+0,
+ 0x1.b0cac6p+13,
+ 0x1.4837p+0,
+ 0x1p+0,
+ 0x1.40bd6cp+0,
+ 0x1p+0,
+ 0x1.39133p+12,
+ 0x1.c62f4cp+46,
+ 0x1.0004bcp+0,
+ 0x1.12257ap+8,
+ 0x1p+0,
+ 0x1.85645cp+9,
+ 0x1.4cb85ep+0,
+ 0x1p+0,
+ 0x1.a234a8p-1,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.3cf408p-27,
+ 0x1.0e263ep+1,
+ 0x1.00026p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.332f2cp-1,
+ 0x1.04bb28p+0,
+ 0x1.4a67cap+0,
+ 0x1.0003dcp+0,
+ 0x1p+0,
+ 0x1.3482d4p-1,
+ 0x1.134a04p+1,
+ 0x1p+0,
+ 0x1.9000ecp+4,
+ 0x1p+0,
+ 0x1.2f4e26p-1,
+ 0x1.0395dp+9,
+ 0x1.38dbb4p+11,
+ 0x1p+0,
+ 0x1.049432p+0,
+ 0x1.1a9a96p+8,
+ 0x1.54bcd2p+2,
+ 0x1.14487cp+0,
+ 0x1.020458p+0,
+ 0x1.000b9p+0,
+ 0x1.32254cp-1,
+ 0x1.73ed2ep+2,
+ 0x1p+0,
+ 0x1.3d8be4p+0,
+ 0x1.3e96d4p+15,
+ 0x1.ffa44cp-1,
+ 0x1.11a334p+3,
+ 0x1.08317p+0,
+ 0x1.000238p+0,
+ 0x1.3e498p+9,
+ 0x1.3389eap-1,
+ 0x1.36f9ccp+2,
+ 0x1.0bbe0ap+0,
+ 0x1.0b53f4p+8,
+ 0x1p+0,
+ 0x1.0e42d2p+0,
+ 0x1.d22332p+18,
+ 0x1p+0,
+ 0x1.05197ep+0,
+ 0x1.205a74p+1,
+ 0x1p+0,
+ 0x1.0086dp+0,
+ 0x1p+0,
+ 0x1.296a6cp+0,
+ 0x1.7ced1p+2,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.0053eep+0,
+ 0x1.09c5dcp+0,
+ 0x1p+0,
+ 0x1.a07194p+9,
+ 0x1.0a151ap+0,
+ 0x1.01e6ccp+0,
+ 0x1.ef2d1p-84,
+ 0x1.8eb89cp+3,
+ 0x1.15dbb6p+0,
+ 0x1.00307ap+0,
+ 0x1.03571ep+0,
+ 0x1.f5292ep-1,
+ 0x1.59f064p+0,
+ 0x1.0e26a8p+1,
+ 0x1.6d6ab4p+5,
+ 0x1.7ad0fcp+6,
+ 0x1.40fc28p+0,
+ 0x1.c6b9p+14,
+ 0x1.071bfcp+0,
+ 0x1.b0cb28p+7,
+ 0x1.1614b2p+1,
+ 0x1.4bdc7ep+0,
+ 0x1.358db8p+7,
+ 0x1.405dp+3,
+ 0x1.0461d4p+0,
+ 0x1p+0,
+ 0x1.a8b5b2p+7,
+ 0x1.130dbap+7,
+ 0x1.259792p+3,
+ 0x1.2fcf92p-1,
+ 0x1.0092d2p+0,
+ 0x1.0fea96p+0,
+ 0x1.000024p+0,
+ 0x1.a0abccp+5,
+ 0x1.3b1076p+0,
+ 0x1.192914p+5,
+ 0x1.85f5dap-9,
+ 0x1.0b2ae8p+0,
+ 0x1.dc84ap+1,
+ 0x1.2121acp+8,
+ 0x1.b144fep+0,
+ 0x1.131a68p+1,
+ 0x1.28131p+0,
+ 0x1.35dc48p+5,
+ 0x1.b81b5p-51,
+ 0x1.0a1caep+0,
+ 0x1.f9ef34p+0,
+ 0x1.95da52p+0,
+ 0x1p+0,
+ 0x1.3032a2p-1,
+ 0x1.1cc56ep+0,
+ 0x1.c77bfcp+0,
+ 0x1.05370ep+0,
+ 0x1.d6d0c6p+2,
+ 0x1.2fbfap-1,
+ 0x1p+0,
+ 0x1.0000b8p+2,
+ 0x1.b8c316p+1,
+ 0x1.00010cp+0,
+ 0x1.028104p+0,
+ 0x1p+0,
+ 0x1.13f12cp+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.fb7e4ep+53,
+ 0x1p+0,
+ 0x1.780d04p+9,
+ 0x1.1973c4p+6,
+ 0x1.b09184p+0,
+ 0x1.b4ed32p+51,
+ 0x1p+0,
+ 0x1.00b82p+0,
+ 0x1.198ba4p+0,
+ 0x1.57b63cp+7,
+ 0x1.0016d4p+0,
+ 0x1p+0,
+ 0x1.01a3e4p+0,
+ 0x1.e8d11ep+44,
+ 0x1.b7e5d4p+13,
+ 0x1.00667cp+0,
+ 0x1.06ed08p+0,
+ 0x1.05f47ap+0,
+ 0x1.4aa86ap+0,
+ 0x1.04aeap+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.3b13a8p+11,
+ 0x1.596846p+47,
+ 0x1.0d8c64p+0,
+ 0x1.0012aap+0,
+ 0x1p+0,
+};
diff --git a/benchmarks/math_benchmark.cpp b/benchmarks/math_benchmark.cpp
index ccb3555..d64830a 100644
--- a/benchmarks/math_benchmark.cpp
+++ b/benchmarks/math_benchmark.cpp
@@ -23,7 +23,6 @@
static const double values[] = { 1234.0, nan(""), HUGE_VAL, 0.0 };
static const char* names[] = { "1234.0", "nan", "HUGE_VAL", "0.0" };
-
static void SetLabel(benchmark::State& state) {
state.SetLabel(names[state.range(0)]);
}
@@ -31,6 +30,9 @@
// Avoid optimization.
volatile double d;
volatile double v;
+volatile float f;
+
+static float zero = 0.0f;
static void BM_math_sqrt(benchmark::State& state) {
d = 0.0;
@@ -230,3 +232,213 @@
}
}
BIONIC_BENCHMARK(BM_math_sincos);
+
+#include "expf_input.cpp"
+
+static void BM_math_expf_speccpu2017(benchmark::State& state) {
+ f = 0.0;
+ auto cin = expf_input.cbegin();
+ for (auto _ : state) {
+ f = expf(*cin);
+ if (++cin == expf_input.cend())
+ cin = expf_input.cbegin();
+ }
+}
+BIONIC_BENCHMARK(BM_math_expf_speccpu2017);
+
+static void BM_math_expf_speccpu2017_latency(benchmark::State& state) {
+ f = 0.0;
+ auto cin = expf_input.cbegin();
+ for (auto _ : state) {
+ f = expf(f * zero + *cin);
+ if (++cin == expf_input.cend())
+ cin = expf_input.cbegin();
+ }
+}
+BIONIC_BENCHMARK(BM_math_expf_speccpu2017_latency);
+
+static void BM_math_exp2f_speccpu2017(benchmark::State& state) {
+ f = 0.0;
+ auto cin = expf_input.cbegin();
+ for (auto _ : state) {
+ f = exp2f(*cin);
+ if (++cin == expf_input.cend())
+ cin = expf_input.cbegin();
+ }
+}
+BIONIC_BENCHMARK(BM_math_exp2f_speccpu2017);
+
+static void BM_math_exp2f_speccpu2017_latency(benchmark::State& state) {
+ f = 0.0;
+ auto cin = expf_input.cbegin();
+ for (auto _ : state) {
+ f = exp2f(f * zero + *cin);
+ if (++cin == expf_input.cend())
+ cin = expf_input.cbegin();
+ }
+}
+BIONIC_BENCHMARK(BM_math_exp2f_speccpu2017_latency);
+
+#include "powf_input.cpp"
+
+static void BM_math_powf_speccpu2006(benchmark::State& state) {
+ f = 0.0;
+ auto cin = powf_input.cbegin();
+ for (auto _ : state) {
+ f = powf(cin->first, cin->second);
+ if (++cin == powf_input.cend())
+ cin = powf_input.cbegin();
+ }
+}
+BIONIC_BENCHMARK(BM_math_powf_speccpu2006);
+
+static void BM_math_powf_speccpu2017_latency(benchmark::State& state) {
+ f = 0.0;
+ auto cin = powf_input.cbegin();
+ for (auto _ : state) {
+ f = powf(f * zero + cin->first, cin->second);
+ if (++cin == powf_input.cend())
+ cin = powf_input.cbegin();
+ }
+}
+BIONIC_BENCHMARK(BM_math_powf_speccpu2017_latency);
+
+#include "logf_input.cpp"
+
+static void BM_math_logf_speccpu2017(benchmark::State& state) {
+ f = 0.0;
+ auto cin = logf_input.cbegin();
+ for (auto _ : state) {
+ f = logf(*cin);
+ if (++cin == logf_input.cend())
+ cin = logf_input.cbegin();
+ }
+}
+BIONIC_BENCHMARK(BM_math_logf_speccpu2017);
+
+static void BM_math_logf_speccpu2017_latency(benchmark::State& state) {
+ f = 0.0;
+ auto cin = logf_input.cbegin();
+ for (auto _ : state) {
+ f = logf(f * zero + *cin);
+ if (++cin == logf_input.cend())
+ cin = logf_input.cbegin();
+ }
+}
+BIONIC_BENCHMARK(BM_math_logf_speccpu2017_latency);
+
+static void BM_math_log2f_speccpu2017(benchmark::State& state) {
+ f = 0.0;
+ auto cin = logf_input.cbegin();
+ for (auto _ : state) {
+ f = log2f(*cin);
+ if (++cin == logf_input.cend())
+ cin = logf_input.cbegin();
+ }
+}
+BIONIC_BENCHMARK(BM_math_log2f_speccpu2017);
+
+static void BM_math_log2f_speccpu2017_latency(benchmark::State& state) {
+ f = 0.0;
+ auto cin = logf_input.cbegin();
+ for (auto _ : state) {
+ f = log2f(f * zero + *cin);
+ if (++cin == logf_input.cend())
+ cin = logf_input.cbegin();
+ }
+}
+BIONIC_BENCHMARK(BM_math_log2f_speccpu2017_latency);
+
+// Four ranges of values are checked:
+// * 0.0 <= x < 0.1
+// * 0.1 <= x < 0.7
+// * 0.7 <= x < 3.1
+// * -3.1 <= x < 3.1
+// * 3.3 <= x < 33.3
+// * 100.0 <= x < 1000.0
+// * 1e6 <= x < 1e32
+// * 1e32 < x < FLT_MAX
+
+#include "sincosf_input.cpp"
+
+static void BM_math_sinf(benchmark::State& state) {
+ auto range = sincosf_input[state.range(0)];
+ auto cin = range.values.cbegin();
+ f = 0.0;
+ for (auto _ : state) {
+ f = sinf(*cin);
+ if (++cin == range.values.cend())
+ cin = range.values.cbegin();
+ }
+ state.SetLabel(range.label);
+}
+BIONIC_BENCHMARK_WITH_ARG(BM_math_sinf, "MATH_SINCOS_COMMON");
+
+static void BM_math_sinf_latency(benchmark::State& state) {
+ auto range = sincosf_input[state.range(0)];
+ auto cin = range.values.cbegin();
+ f = 0.0;
+ for (auto _ : state) {
+ f = sinf(f * zero + *cin);
+ if (++cin == range.values.cend())
+ cin = range.values.cbegin();
+ }
+ state.SetLabel(range.label);
+}
+BIONIC_BENCHMARK_WITH_ARG(BM_math_sinf_latency, "MATH_SINCOS_COMMON");
+
+static void BM_math_cosf(benchmark::State& state) {
+ auto range = sincosf_input[state.range(0)];
+ auto cin = range.values.cbegin();
+ f = 0.0;
+ for (auto _ : state) {
+ f = cosf(*cin);
+ if (++cin == range.values.cend())
+ cin = range.values.cbegin();
+ }
+ state.SetLabel(range.label);
+}
+BIONIC_BENCHMARK_WITH_ARG(BM_math_cosf, "MATH_SINCOS_COMMON");
+
+static void BM_math_cosf_latency(benchmark::State& state) {
+ auto range = sincosf_input[state.range(0)];
+ auto cin = range.values.cbegin();
+ f = 0.0;
+ for (auto _ : state) {
+ f = cosf(f * zero + *cin);
+ if (++cin == range.values.cend())
+ cin = range.values.cbegin();
+ }
+ state.SetLabel(range.label);
+}
+BIONIC_BENCHMARK_WITH_ARG(BM_math_cosf_latency, "MATH_SINCOS_COMMON");
+
+static void BM_math_sincosf(benchmark::State& state) {
+ auto range = sincosf_input[state.range(0)];
+ auto cin = range.values.cbegin();
+ f = 0.0;
+ for (auto _ : state) {
+ float s, c;
+ sincosf(*cin, &s, &c);
+ f += s;
+ if (++cin == range.values.cend())
+ cin = range.values.cbegin();
+ }
+ state.SetLabel(range.label);
+}
+BIONIC_BENCHMARK_WITH_ARG(BM_math_sincosf, "MATH_SINCOS_COMMON");
+
+static void BM_math_sincosf_latency(benchmark::State& state) {
+ auto range = sincosf_input[state.range(0)];
+ auto cin = range.values.cbegin();
+ f = 0.0;
+ for (auto _ : state) {
+ float s, c;
+ sincosf(f * zero + *cin, &s, &c);
+ f += s;
+ if (++cin == range.values.cend())
+ cin = range.values.cbegin();
+ }
+ state.SetLabel(range.label);
+}
+BIONIC_BENCHMARK_WITH_ARG(BM_math_sincosf_latency, "MATH_SINCOS_COMMON");
diff --git a/benchmarks/powf_input.cpp b/benchmarks/powf_input.cpp
new file mode 100644
index 0000000..f28cc79
--- /dev/null
+++ b/benchmarks/powf_input.cpp
@@ -0,0 +1,2218 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+// Reduced trace based on 2.3 billion samples extracted from specpu2017
+// 521.wrf_r benchmark.
+static const std::vector<std::pair<float, float>> powf_input = {
+ {0x1.00daap+0, 0x1.249236p-2},
+ {0x1.3e510ap-4, 0x1.19999ap+0},
+ {0x1.66c872p-3, 0x1.666666p+0},
+ {0x1.897858p+1, 0x1.19999ap+0},
+ {0x1.a6efc4p-2, 0x1.666666p+0},
+ {0x1.3fc088p+8, 0x1.51eb86p-2},
+ {0x1.03e8bcp-1, 0x1.666666p+0},
+ {0x1.3f0094p+10, 0x1.51eb86p-2},
+ {0x1.f6c41ep-1, 0x1.249236p-2},
+ {0x1.3880bap+12, 0x1.19999ap+0},
+ {0x1.003a1p+0, 0x1.d1746p-1},
+ {0x1.391bc6p-2, 0x1.19999ap+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.0005c4p+0, 0x1.51eb86p-2},
+ {0x1.7800b4p+8, 0x1.51eb86p-2},
+ {0x1.06db5p-3, 0x1.666666p+0},
+ {0x1.6e98b2p+5, 0x1.51eb86p-2},
+ {0x1.8c241cp-1, 0x1.249236p-2},
+ {0x1.970124p+3, 0x1.51eb86p-2},
+ {0x1.9dadfcp-3, 0x1.666666p+0},
+ {0x1.8700f8p+4, 0x1.51eb86p-2},
+ {0x1.a3269ep-2, 0x1.666666p+0},
+ {0x1.00258ep+0, 0x1.d1746p-1},
+ {0x1.e80102p+6, 0x1.d1746p-1},
+ {0x1.000d5ep+0, 0x1.51eb86p-2},
+ {0x1.3f4104p+9, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.e7e468p+6, 0x1.d1746p-1},
+ {0x1.ef66e8p-1, 0x1.249236p-2},
+ {0x1.778238p+9, 0x1.51eb86p-2},
+ {0x1.9a0caep-1, 0x1.249236p-2},
+ {0x1.00013ep+0, 0x1.99999ap-2},
+ {0x1.5ae57ap-1, 0x1.666666p+0},
+ {0x1.3e4dcap+11, 0x1.19999ap+0},
+ {0x1.97e8acp-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.0dd4ccp+5, 0x1.19999ap+0},
+ {0x1.60dfdep-3, 0x1.19999ap+0},
+ {0x1.c99286p-4, 0x1.19999ap+0},
+ {0x1.0001d6p+0, 0x1.51eb86p-2},
+ {0x1.917594p+5, 0x1.51eb86p-2},
+ {0x1.3c751cp-1, 0x1.666666p+0},
+ {0x1.318c4cp+0, 0x1.51eb86p-2},
+ {0x1.d25376p-1, 0x1.249236p-2},
+ {0x1.ad4ddep+15, 0x1.d1746p-1},
+ {0x1.ce1da8p-2, 0x1.666666p+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.d4a4f4p-1, 0x1.666666p+0},
+ {0x1.058d04p+5, 0x1.d1746p-1},
+ {0x1.607416p+6, 0x1.99999ap-2},
+ {0x1.000326p+0, 0x1.51eb86p-2},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.bca0c2p-2, 0x1.249236p-2},
+ {0x1.3b4dcep-3, 0x1.19999ap+0},
+ {0x1.3fd0dp-12, 0x1.4f5c28p+0},
+ {0x1.3e6644p-1, 0x1.19999ap+0},
+ {0x1.656bcap-3, 0x1.666666p+0},
+ {0x1.018384p+0, 0x1.d1746p-1},
+ {0x1.959ba2p-1, 0x1.666666p+0},
+ {0x1.46c044p+5, 0x1.51eb86p-2},
+ {0x1.321426p-1, 0x1.d51eb8p+2},
+ {0x1.001606p+0, 0x1.d1746p-1},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.391dbep+7, 0x1.19999ap+0},
+ {0x1.00001p+0, 0x1.99999ap-2},
+ {0x1.9787aep-1, 0x1.666666p+0},
+ {0x1.00112cp+0, 0x1.51eb86p-2},
+ {0x1.6738a4p-3, 0x1.666666p+0},
+ {0x1.42367cp+8, 0x1.51eb86p-2},
+ {0x1.2eafeep-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.0a95p-2, 0x1.666666p+0},
+ {0x1.5dedaep+0, 0x1.51eb86p-2},
+ {0x1.98ebaap-1, 0x1.666666p+0},
+ {0x1.5debb8p+0, 0x1.51eb86p-2},
+ {0x1.1a21fap+0, 0x1.249236p-2},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.05c316p+0, 0x1.51eb86p-2},
+ {0x1.bf03bap+4, 0x1.99999ap-2},
+ {0x1.bea6ap-1, 0x1.249236p-2},
+ {0x1.382992p+33, 0x1.99999ap-2},
+ {0x1.8aa716p-2, 0x1.249236p-2},
+ {0x1.0009b4p+0, 0x1.51eb86p-2},
+ {0x1.fa4b76p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.66afccp-4, 0x1.249236p-2},
+ {0x1.001908p+0, 0x1.51eb86p-2},
+ {0x1.9aa4fcp-3, 0x1.666666p+0},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.381eeep-1, 0x1.666666p+0},
+ {0x1.00169cp+0, 0x1.d1746p-1},
+ {0x1.075e64p-3, 0x1.666666p+0},
+ {0x1.3e17f4p+2, 0x1.19999ap+0},
+ {0x1.60d52p-2, 0x1.b51eb8p+3},
+ {0x1.1ba56ap+9, 0x1.d1746p-1},
+ {0x1.011d04p+0, 0x1.51eb86p-2},
+ {0x1.0d5beep+0, 0x1.51eb86p-2},
+ {0x1.348b22p+0, 0x1.d1746p-1},
+ {0x1.0067fp+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.ceca68p-1, 0x1.249236p-2},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.2ce5b4p-2, 0x1.666666p+0},
+ {0x1.0ea8a8p+2, 0x1.d1746p-1},
+ {0x1.25eedcp-2, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.ab0c24p-1, 0x1.666666p+0},
+ {0x1.aa822p-9, 0x1.19999ap+0},
+ {0x1.f667d8p-1, 0x1.666666p+0},
+ {0x1.77106p+12, 0x1.51eb86p-2},
+ {0x1.2b18dap-2, 0x1.666666p+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.833312p-1, 0x1.af5c28p+2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.a53368p+15, 0x1.d1746p-1},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.e075fep+18, 0x1.99999ap-2},
+ {0x1.036976p-3, 0x1.249236p-2},
+ {0x1.5f2a72p+3, 0x1.19999ap+0},
+ {0x1.06c764p-3, 0x1.666666p+0},
+ {0x1.000064p+0, 0x1.99999ap-2},
+ {0x1.528912p-2, 0x1.666666p+0},
+ {0x1.3b34bp+12, 0x1.19999ap+0},
+ {0x1.a3941p-1, 0x1.249236p-2},
+ {0x1.6c61dp+21, 0x1.99999ap-2},
+ {0x1.042ce4p-1, 0x1.666666p+0},
+ {0x1.004d34p+0, 0x1.51eb86p-2},
+ {0x1.d61ed6p-3, 0x1.666666p+0},
+ {0x1.4c0832p-3, 0x1.19999ap+0},
+ {0x1.9029aep-8, 0x1.19999ap+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.000032p+0, 0x1.99999ap-2},
+ {0x1.d7c4dap+2, 0x1.19999ap+0},
+ {0x1.102a24p+0, 0x1.51eb86p-2},
+ {0x1.0149d8p+0, 0x1.51eb86p-2},
+ {0x1.61be2cp-4, 0x1.249236p-2},
+ {0x1.905a2ep+1, 0x1.d1746p-1},
+ {0x1.d4d4ccp-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.baed36p-1, 0x1.249236p-2},
+ {0x1.0001b4p+0, 0x1.51eb86p-2},
+ {0x1.bad278p-1, 0x1.249236p-2},
+ {0x1.03ccf2p+0, 0x1.51eb86p-2},
+ {0x1.fe2974p-1, 0x1.666666p+0},
+ {0x1.3ec326p+15, 0x1.51eb86p-2},
+ {0x1.1b7b08p-1, 0x1.666666p+0},
+ {0x1.3e5ddap+8, 0x1.19999ap+0},
+ {0x1.fe95fap-1, 0x1.666666p+0},
+ {0x1.ae340ap+2, 0x1.d1746p-1},
+ {0x1.9a18bep-1, 0x1.af5c28p+2},
+ {0x1.005436p+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.9701eap+3, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.febf22p-3, 0x1.249236p-2},
+ {0x1.0a0408p+0, 0x1.51eb86p-2},
+ {0x1.f8a58cp-1, 0x1.666666p+0},
+ {0x1.300fd2p+10, 0x1.d1746p-1},
+ {0x1.b36cep-3, 0x1.249236p-2},
+ {0x1.7ebcc4p+9, 0x1.51eb86p-2},
+ {0x1.091cd2p-2, 0x1.666666p+0},
+ {0x1.a79de6p+3, 0x1.51eb86p-2},
+ {0x1.f80b88p-1, 0x1.666666p+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.959c06p-1, 0x1.666666p+0},
+ {0x1.7f668p+2, 0x1.51eb86p-2},
+ {0x1.2f8fbcp+0, 0x1.23bc4ep-2},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.cb633ep+5, 0x1.d1746p-1},
+ {0x1.00a30ep+0, 0x1.d1746p-1},
+ {0x1.55ab4cp+0, 0x1.d1746p-1},
+ {0x1.0001d6p+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.866e44p-1, 0x1.249236p-2},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.a67a1p-1, 0x1.666666p+0},
+ {0x1.fbc1cep-1, 0x1.249236p-2},
+ {0x1.b46e4cp-3, 0x1.249236p-2},
+ {0x1.127514p+5, 0x1.51eb86p-2},
+ {0x1.53c42ap-2, 0x1.666666p+0},
+ {0x1.12018ap-8, 0x1.19999ap+0},
+ {0x1.c821f2p-1, 0x1.666666p+0},
+ {0x1.21086p+0, 0x1.d1746p-1},
+ {0x1.7c3654p-2, 0x1.666666p+0},
+ {0x1.2a0884p+28, 0x1.99999ap-2},
+ {0x1.04f7cap+0, 0x1.249236p-2},
+ {0x1.70344cp+0, 0x1.99999ap-2},
+ {0x1.83fbfp+1, 0x1.d1746p-1},
+ {0x1.c1131p+4, 0x1.451eb8p-1},
+ {0x1.0004a8p+0, 0x1.51eb86p-2},
+ {0x1.e0678cp-1, 0x1.666666p+0},
+ {0x1.6a9884p+6, 0x1.51eb86p-2},
+ {0x1.a42742p-1, 0x1.249236p-2},
+ {0x1.2c396p+8, 0x1.99999ap-2},
+ {0x1.d0c6f8p-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.fa604ep-2, 0x1.249236p-2},
+ {0x1.9de0b4p+0, 0x1.51eb86p-2},
+ {0x1.8d5066p-2, 0x1.249236p-2},
+ {0x1.00001p+0, 0x1.99999ap-2},
+ {0x1.03f9e8p+0, 0x1.51eb86p-2},
+ {0x1.0a392ep+0, 0x1.d1746p-1},
+ {0x1.000acp+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.000c42p+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.000368p+0, 0x1.51eb86p-2},
+ {0x1.c4bed8p+1, 0x1.51eb86p-2},
+ {0x1.391a6p+9, 0x1.19999ap+0},
+ {0x1.c641ep+18, 0x1.99999ap-2},
+ {0x1.01ebb8p+0, 0x1.51eb86p-2},
+ {0x1.272b24p-1, 0x1.70a3d8p+3},
+ {0x1.5f7c02p+0, 0x1.51eb86p-2},
+ {0x1.d86552p-3, 0x1.666666p+0},
+ {0x1.0b5696p+0, 0x1.51eb86p-2},
+ {0x1.74fdbp-2, 0x1.666666p+0},
+ {0x1.0003bcp+0, 0x1.51eb86p-2},
+ {0x1.eac86p-1, 0x1.666666p+0},
+ {0x1.a57cd6p+15, 0x1.99999ap-2},
+ {0x1.53b602p-2, 0x1.666666p+0},
+ {0x1.4dfbe8p+0, 0x1.99999ap-2},
+ {0x1.a79aaep-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.3cc9eap-1, 0x1.666666p+0},
+ {0x1.00016p+0, 0x1.51eb86p-2},
+ {0x1.c5c466p-2, 0x1.666666p+0},
+ {0x1.071a4cp+0, 0x1.d1746p-1},
+ {0x1.9d81f2p-3, 0x1.666666p+0},
+ {0x1.c1286cp+1, 0x1.51eb86p-2},
+ {0x1.67c06ep-3, 0x1.666666p+0},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.211b6p-1, 0x1.666666p+0},
+ {0x1.57f68p+0, 0x1.51eb86p-2},
+ {0x1.fc6412p-1, 0x1.666666p+0},
+ {0x1.79009p+7, 0x1.51eb86p-2},
+ {0x1.573472p-2, 0x1.249236p-2},
+ {0x1.bb80ecp+0, 0x1.51eb86p-2},
+ {0x1.65a576p-3, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.e6fe2ep-1, 0x1.249236p-2},
+ {0x1.3ed034p+12, 0x1.51eb86p-2},
+ {0x1.d002e2p-5, 0x1.249236p-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.fb24a6p-2, 0x1.249236p-2},
+ {0x1.070f4ap+0, 0x1.d1746p-1},
+ {0x1.0624dep-11, 0x1.4f5c28p+0},
+ {0x1.46ded2p+7, 0x1.51eb86p-2},
+ {0x1.7b95a2p-12, 0x1.a3d70ap-2},
+ {0x1.37fb26p+0, 0x1.99999ap-2},
+ {0x1.e6696ap-1, 0x1.249236p-2},
+ {0x1.000852p+0, 0x1.51eb86p-2},
+ {0x1.1f26dp-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.50f474p-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.f91be6p-1, 0x1.249236p-2},
+ {0x1.006b38p+0, 0x1.99999ap-2},
+ {0x1.d402d2p-3, 0x1.666666p+0},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.74810ap-1, 0x1.666666p+0},
+ {0x1.87002ap+4, 0x1.51eb86p-2},
+ {0x1.544decp-1, 0x1.249236p-2},
+ {0x1.188bp+0, 0x1.51eb86p-2},
+ {0x1.fb9p-1, 0x1.666666p+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.1b393ap-1, 0x1.666666p+0},
+ {0x1.a8e8ecp+3, 0x1.d1746p-1},
+ {0x1.7b002cp+6, 0x1.51eb86p-2},
+ {0x1.e6206ep+5, 0x1.51eb86p-2},
+ {0x1.3ab324p+1, 0x1.19999ap+0},
+ {0x1.8d48ccp-2, 0x1.666666p+0},
+ {0x1.711948p-17, 0x1.19999ap+0},
+ {0x1.a2e48ep-2, 0x1.666666p+0},
+ {0x1.0016bep+0, 0x1.51eb86p-2},
+ {0x1.095422p-2, 0x1.666666p+0},
+ {0x1.00c0ep+0, 0x1.51eb86p-2},
+ {0x1.f68858p-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.eb630ap-1, 0x1.666666p+0},
+ {0x1.f1a0aap+4, 0x1.51eb86p-2},
+ {0x1.f98266p+0, 0x1.51eb86p-2},
+ {0x1.4ec144p+4, 0x1.51eb86p-2},
+ {0x1.5f88fcp-10, 0x1.19999ap+0},
+ {0x1.10cbcp+0, 0x1.236e72p-2},
+ {0x1.7eead2p+8, 0x1.51eb86p-2},
+ {0x1.0b3312p-2, 0x1.666666p+0},
+ {0x1.037a8p+0, 0x1.51eb86p-2},
+ {0x1.3b3d08p-1, 0x1.666666p+0},
+ {0x1.1ce79ap+0, 0x1.51eb86p-2},
+ {0x1.82fcfp-1, 0x1.249236p-2},
+ {0x1.41c992p+9, 0x1.51eb86p-2},
+ {0x1.eb6bd2p-1, 0x1.666666p+0},
+ {0x1.01f2ccp+0, 0x1.51eb86p-2},
+ {0x1.05cabp-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.77114cp+12, 0x1.51eb86p-2},
+ {0x1.4a0e62p-1, 0x1.b51eb8p+3},
+ {0x1.7c5b96p+6, 0x1.51eb86p-2},
+ {0x1.36d0b4p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.03bc2cp-1, 0x1.666666p+0},
+ {0x1.1db456p+0, 0x1.51eb86p-2},
+ {0x1.65f41ap-3, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.79fd36p-1, 0x1.666666p+0},
+ {0x1.9e712ep+4, 0x1.51eb86p-2},
+ {0x1.f31f46p-14, 0x1.a3d70ap-2},
+ {0x1.4f0d9ap+4, 0x1.51eb86p-2},
+ {0x1.02c798p-1, 0x1.249236p-2},
+ {0x1.0354e2p+0, 0x1.51eb86p-2},
+ {0x1.94f484p-5, 0x1.19999ap+0},
+ {0x1.3ea4cap-1, 0x1.666666p+0},
+ {0x1.0011c2p+0, 0x1.51eb86p-2},
+ {0x1.0c3a42p-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.b0f17p-3, 0x1.249236p-2},
+ {0x1.0021f2p+0, 0x1.51eb86p-2},
+ {0x1.e3d4aep-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.001d2ap+0, 0x1.51eb86p-2},
+ {0x1.47557ap-1, 0x1.a1999ap+4},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.a60daap-1, 0x1.666666p+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.666cb2p-3, 0x1.666666p+0},
+ {0x1.5132e8p+4, 0x1.51eb86p-2},
+ {0x1.b10774p-4, 0x1.249236p-2},
+ {0x1.802022p+7, 0x1.51eb86p-2},
+ {0x1.fcd3ep-3, 0x1.249236p-2},
+ {0x1.b7011p+2, 0x1.51eb86p-2},
+ {0x1.ae70dp+3, 0x1.51eb86p-2},
+ {0x1.fcfe7ap-1, 0x1.249236p-2},
+ {0x1.d1985cp+3, 0x1.51eb86p-2},
+ {0x1.d70de8p-3, 0x1.666666p+0},
+ {0x1.7a5234p+9, 0x1.51eb86p-2},
+ {0x1.ee9d0ep-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.b97354p-12, 0x1.4f5c28p+0},
+ {0x1.000496p+0, 0x1.51eb86p-2},
+ {0x1.32021p-3, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.4p+2, 0x1.51eb86p-2},
+ {0x1.18b7f6p+0, 0x1.249236p-2},
+ {0x1.000304p+0, 0x1.51eb86p-2},
+ {0x1.ffc372p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.721bc2p-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.5a07b4p-11, 0x1.a3d70ap-2},
+ {0x1.790194p+7, 0x1.51eb86p-2},
+ {0x1.c5bc02p-2, 0x1.249236p-2},
+ {0x1.97015p+3, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.f49c4ep-1, 0x1.666666p+0},
+ {0x1.4c9e84p+5, 0x1.51eb86p-2},
+ {0x1.ae008ep-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.b39864p-3, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.cf5b1cp-5, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.bef1bap-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.0001b4p+0, 0x1.51eb86p-2},
+ {0x1.cf3fdap-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.bad5bep-1, 0x1.666666p+0},
+ {0x1.b7b9f2p+2, 0x1.51eb86p-2},
+ {0x1.b6d58cp-1, 0x1.666666p+0},
+ {0x1.7f4544p+8, 0x1.51eb86p-2},
+ {0x1.ed10b2p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.47b56cp-1, 0x1.249236p-2},
+ {0x1.89a996p+5, 0x1.51eb86p-2},
+ {0x1.ef689cp+1, 0x1.51eb86p-2},
+ {0x1.d2c9f2p-1, 0x1.666666p+0},
+ {0x1.3eed58p+11, 0x1.d1746p-1},
+ {0x1.0042d8p+0, 0x1.666666p+0},
+ {0x1.0001b4p+0, 0x1.51eb86p-2},
+ {0x1.60525p-12, 0x1.99999ap-1},
+ {0x1.b7b89ep+2, 0x1.51eb86p-2},
+ {0x1.b37436p-3, 0x1.249236p-2},
+ {0x1.403fe2p+8, 0x1.51eb86p-2},
+ {0x1.ae746ap+3, 0x1.51eb86p-2},
+ {0x1.5a6938p-1, 0x1.666666p+0},
+ {0x1.0535fcp+0, 0x1.51eb86p-2},
+ {0x1.b75b3ep-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.cf2496p-5, 0x1.249236p-2},
+ {0x1.4134ap+15, 0x1.51eb86p-2},
+ {0x1.f6bca6p-1, 0x1.666666p+0},
+ {0x1.055a8ep+0, 0x1.51eb86p-2},
+ {0x1.78029p+8, 0x1.51eb86p-2},
+ {0x1.1a1cacp+0, 0x1.238de6p-2},
+ {0x1.7abbe2p+8, 0x1.51eb86p-2},
+ {0x1.d96e58p-2, 0x1.666666p+0},
+ {0x1.000d9p+0, 0x1.51eb86p-2},
+ {0x1.79207ep-1, 0x1.666666p+0},
+ {0x1.f701b8p+1, 0x1.51eb86p-2},
+ {0x1.fd330ap-1, 0x1.666666p+0},
+ {0x1.0b8e34p+5, 0x1.51eb86p-2},
+ {0x1.026752p+0, 0x1.249236p-2},
+ {0x1.07ab1p+0, 0x1.51eb86p-2},
+ {0x1.1afdcap+0, 0x1.51eb86p-2},
+ {0x1.9a4fp-2, 0x1.666666p+0},
+ {0x1.000076p+0, 0x1.d1746p-1},
+ {0x1.ce3b26p-1, 0x1.666666p+0},
+ {0x1.28244ep+1, 0x1.51eb86p-2},
+ {0x1.8c5c9ap-13, 0x1.a3d70ap-2},
+ {0x1.47376p+5, 0x1.51eb86p-2},
+ {0x1.5640eap-2, 0x1.249236p-2},
+ {0x1.0020b4p+0, 0x1.51eb86p-2},
+ {0x1.64e27cp+9, 0x1.451eb8p-1},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.8702bep+4, 0x1.51eb86p-2},
+ {0x1.f64ffcp-1, 0x1.666666p+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.c8474ep-1, 0x1.666666p+0},
+ {0x1.794446p+4, 0x1.51eb86p-2},
+ {0x1.9b0ab2p-11, 0x1.a3d70ap-2},
+ {0x1.7b007cp+6, 0x1.51eb86p-2},
+ {0x1.e9adc8p-1, 0x1.666666p+0},
+ {0x1.96af1cp+1, 0x1.51eb86p-2},
+ {0x1.c94d2p+4, 0x1.51eb86p-2},
+ {0x1.965f1p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.0450cep-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.63a8e8p-4, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.d38da4p-1, 0x1.666666p+0},
+ {0x1.4c687p+4, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.ae4086p-4, 0x1.d51eb8p+2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.f13512p-1, 0x1.666666p+0},
+ {0x1.3f017ep+10, 0x1.51eb86p-2},
+ {0x1.3b71fcp-3, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.67abfcp-3, 0x1.666666p+0},
+ {0x1.77c84cp+11, 0x1.51eb86p-2},
+ {0x1.f551d6p-2, 0x1.249236p-2},
+ {0x1.29ce6cp+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.d6441p-2, 0x1.666666p+0},
+ {0x1.bd3996p+0, 0x1.51eb86p-2},
+ {0x1.99c9d6p-3, 0x1.666666p+0},
+ {0x1.6c1672p+1, 0x1.51eb86p-2},
+ {0x1.0624dep-11, 0x1.4f5c28p+0},
+ {0x1.000314p+0, 0x1.51eb86p-2},
+ {0x1.03bd16p-1, 0x1.249236p-2},
+ {0x1.877e74p+4, 0x1.51eb86p-2},
+ {0x1.786616p+2, 0x1.51eb86p-2},
+ {0x1.36aa2ap-1, 0x1.666666p+0},
+ {0x1.3ec82cp+13, 0x1.51eb86p-2},
+ {0x1.fea3ep-2, 0x1.666666p+0},
+ {0x1.3522b6p+5, 0x1.51eb86p-2},
+ {0x1.013122p-2, 0x1.249236p-2},
+ {0x1.89b86p+4, 0x1.51eb86p-2},
+ {0x1.d02752p-1, 0x1.249236p-2},
+ {0x1.3ee112p+11, 0x1.51eb86p-2},
+ {0x1.8702e4p+4, 0x1.51eb86p-2},
+ {0x1.34762ap-3, 0x1.666666p+0},
+ {0x1.01fd6ap+0, 0x1.51eb86p-2},
+ {0x1.071ac2p-3, 0x1.666666p+0},
+ {0x1.87010cp+4, 0x1.51eb86p-2},
+ {0x1.f06a9p-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.cd5f9ap-12, 0x1.4f5c28p+0},
+ {0x1.e846fap+4, 0x1.51eb86p-2},
+ {0x1.00635ap+0, 0x1.249236p-2},
+ {0x1.7720d4p+11, 0x1.51eb86p-2},
+ {0x1.d4bf0ap-6, 0x1.19999ap+0},
+ {0x1.ac115ep-1, 0x1.666666p+0},
+ {0x1.000edp+0, 0x1.51eb86p-2},
+ {0x1.ce1bbp-1, 0x1.666666p+0},
+ {0x1.99afbp+0, 0x1.51eb86p-2},
+ {0x1.a12e84p-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.f129ccp-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.2f1094p+2, 0x1.51eb86p-2},
+ {0x1.7a31a4p-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.32db1ep-3, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.a303cp-1, 0x1.249236p-2},
+ {0x1.0b2fcap+0, 0x1.51eb86p-2},
+ {0x1.f69b9ep-1, 0x1.666666p+0},
+ {0x1.77d424p+9, 0x1.51eb86p-2},
+ {0x1.000736p+0, 0x1.51eb86p-2},
+ {0x1.de90bcp-1, 0x1.666666p+0},
+ {0x1.5e3c0cp+2, 0x1.51eb86p-2},
+ {0x1.9a6e76p-3, 0x1.666666p+0},
+ {0x1.3aa8f4p+5, 0x1.51eb86p-2},
+ {0x1.2188b2p-4, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.7a979ep-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.377836p+0, 0x1.51eb86p-2},
+ {0x1.c9ab2ap-2, 0x1.d51eb8p+2},
+ {0x1.0057f4p+0, 0x1.d1746p-1},
+ {0x1.de18cep-1, 0x1.666666p+0},
+ {0x1.7dc354p+7, 0x1.51eb86p-2},
+ {0x1.3c2e78p-1, 0x1.666666p+0},
+ {0x1.e99f7cp+3, 0x1.51eb86p-2},
+ {0x1.2eb5f6p-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.491bc6p-1, 0x1.249236p-2},
+ {0x1.2f679p-1, 0x1.bp+3},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.caef92p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.d66f94p-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.c4fc1ep-16, 0x1.a3d70ap-2},
+ {0x1.000e5ap+0, 0x1.51eb86p-2},
+ {0x1.4bdab6p-1, 0x1.249236p-2},
+ {0x1.186aacp+6, 0x1.51eb86p-2},
+ {0x1.01b436p+0, 0x1.51eb86p-2},
+ {0x1.cf1306p-1, 0x1.666666p+0},
+ {0x1.ba6794p+0, 0x1.51eb86p-2},
+ {0x1.2e718ap-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.069dfap-3, 0x1.666666p+0},
+ {0x1.eb3ae6p+6, 0x1.51eb86p-2},
+ {0x1.1d73eap-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.00c4fp+0, 0x1.51eb86p-2},
+ {0x1.c872bp-2, 0x1.b51eb8p+3},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.f0e15p-1, 0x1.666666p+0},
+ {0x1.b70226p+2, 0x1.51eb86p-2},
+ {0x1.cc2892p-1, 0x1.666666p+0},
+ {0x1.55692cp+0, 0x1.51eb86p-2},
+ {0x1.7d1654p-1, 0x1.666666p+0},
+ {0x1.781dbap+9, 0x1.51eb86p-2},
+ {0x1.d77708p-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.3dfde2p+9, 0x1.19999ap+0},
+ {0x1.aa5c1cp-1, 0x1.666666p+0},
+ {0x1.931c18p+3, 0x1.51eb86p-2},
+ {0x1.a25204p-2, 0x1.666666p+0},
+ {0x1.05409ap+0, 0x1.51eb86p-2},
+ {0x1.60525p-16, 0x1.99999ap-1},
+ {0x1.fa083ap-1, 0x1.249236p-2},
+ {0x1.34751cp-3, 0x1.249236p-2},
+ {0x1.1ee8e2p+5, 0x1.51eb86p-2},
+ {0x1.02eafap+0, 0x1.51eb86p-2},
+ {0x1.d52652p-3, 0x1.666666p+0},
+ {0x1.7740eep+10, 0x1.51eb86p-2},
+ {0x1.e731f4p-1, 0x1.666666p+0},
+ {0x1.7e3748p+12, 0x1.51eb86p-2},
+ {0x1.abd1aap-15, 0x1.a3d70ap-2},
+ {0x1.d75a54p+3, 0x1.51eb86p-2},
+ {0x1.27cd46p-2, 0x1.249236p-2},
+ {0x1.0014d8p+0, 0x1.51eb86p-2},
+ {0x1.5940e2p+2, 0x1.51eb86p-2},
+ {0x1.1e951p-1, 0x1.666666p+0},
+ {0x1.3ee078p+11, 0x1.51eb86p-2},
+ {0x1.670b06p-3, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.a36e2ep-14, 0x1.a3d70ap-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.cff1b6p-1, 0x1.249236p-2},
+ {0x1.21d0bcp+3, 0x1.51eb86p-2},
+ {0x1.00815ep+0, 0x1.51eb86p-2},
+ {0x1.bb1316p-1, 0x1.666666p+0},
+ {0x1.ae7168p+3, 0x1.51eb86p-2},
+ {0x1.7cbea4p-2, 0x1.666666p+0},
+ {0x1.452ea6p+6, 0x1.51eb86p-2},
+ {0x1.5d5b04p-1, 0x1.249236p-2},
+ {0x1.46c07ap+5, 0x1.51eb86p-2},
+ {0x1.3a860ep-3, 0x1.249236p-2},
+ {0x1.366f5cp+4, 0x1.51eb86p-2},
+ {0x1.66682ep+9, 0x1.451eb8p-1},
+ {0x1.02d612p+0, 0x1.51eb86p-2},
+ {0x1.3fc2e8p+8, 0x1.51eb86p-2},
+ {0x1.e4c188p-1, 0x1.666666p+0},
+ {0x1.5ef72cp+0, 0x1.51eb86p-2},
+ {0x1.03604ap-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.a5870ep-12, 0x1.4f5c28p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.db541ap-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.001f76p+0, 0x1.51eb86p-2},
+ {0x1.2916p-1, 0x1.666666p+0},
+ {0x1.24094ep+0, 0x1.51eb86p-2},
+ {0x1.5221p-2, 0x1.666666p+0},
+ {0x1.000076p+0, 0x1.51eb86p-2},
+ {0x1.908e58p-12, 0x1.4f5c28p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.55377ep-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.01521ap+0, 0x1.51eb86p-2},
+ {0x1.9bdc6ap-3, 0x1.666666p+0},
+ {0x1.bef1bap+0, 0x1.51eb86p-2},
+ {0x1.e4256cp-1, 0x1.666666p+0},
+ {0x1.7b026ap+6, 0x1.51eb86p-2},
+ {0x1.f75104p-15, 0x1.4f5c28p+0},
+ {0x1.001e14p+0, 0x1.51eb86p-2},
+ {0x1.f5330ap-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.5ec246p+3, 0x1.51eb86p-2},
+ {0x1.9de376p-3, 0x1.666666p+0},
+ {0x1.c1f738p+4, 0x1.51eb86p-2},
+ {0x1.bd4b6ap-1, 0x1.666666p+0},
+ {0x1.7dd4fp+6, 0x1.51eb86p-2},
+ {0x1.6ef262p-1, 0x1.249236p-2},
+ {0x1.0011b2p+0, 0x1.51eb86p-2},
+ {0x1.a67104p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.502ddp+0, 0x1.51eb86p-2},
+ {0x1.e7735cp-1, 0x1.666666p+0},
+ {0x1.00ff64p+0, 0x1.51eb86p-2},
+ {0x1.9e08aep-2, 0x1.666666p+0},
+ {0x1.44d47p+12, 0x1.51eb86p-2},
+ {0x1.ba4dd2p-1, 0x1.249236p-2},
+ {0x1.b58b58p+1, 0x1.51eb86p-2},
+ {0x1.f456d6p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.00257cp+0, 0x1.51eb86p-2},
+ {0x1.005836p+0, 0x1.666666p+0},
+ {0x1.3ed086p+12, 0x1.51eb86p-2},
+ {0x1.971994p-1, 0x1.666666p+0},
+ {0x1.00013ep+0, 0x1.51eb86p-2},
+ {0x1.39a7c2p-3, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.1bdb8p-1, 0x1.666666p+0},
+ {0x1.a9f66p+7, 0x1.51eb86p-2},
+ {0x1.bdff6p-1, 0x1.249236p-2},
+ {0x1.015dd4p+0, 0x1.51eb86p-2},
+ {0x1.3f0262p+10, 0x1.51eb86p-2},
+ {0x1.515fccp-2, 0x1.666666p+0},
+ {0x1.ddb004p+0, 0x1.51eb86p-2},
+ {0x1.f23cc8p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.e8e5e6p-1, 0x1.249236p-2},
+ {0x1.6b50f2p+7, 0x1.51eb86p-2},
+ {0x1.7cda6ep-2, 0x1.666666p+0},
+ {0x1.4p+2, 0x1.51eb86p-2},
+ {0x1.77428ap+10, 0x1.51eb86p-2},
+ {0x1.fb24a6p-1, 0x1.666666p+0},
+ {0x1.7fe282p+7, 0x1.51eb86p-2},
+ {0x1.a7f3dp-1, 0x1.666666p+0},
+ {0x1.f701b8p+1, 0x1.51eb86p-2},
+ {0x1.049fd8p-3, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.e2656ap-1, 0x1.666666p+0},
+ {0x1.040bfp+4, 0x1.51eb86p-2},
+ {0x1.0013dcp+0, 0x1.d1746p-1},
+ {0x1.7cd74ap-2, 0x1.666666p+0},
+ {0x1.075bf6p+0, 0x1.51eb86p-2},
+ {0x1.2a81dcp-2, 0x1.666666p+0},
+ {0x1.2e62bap+0, 0x1.51eb86p-2},
+ {0x1.cf2cfap-1, 0x1.249236p-2},
+ {0x1.267946p+0, 0x1.51eb86p-2},
+ {0x1.67b17cp-2, 0x1.666666p+0},
+ {0x1.87017cp+4, 0x1.51eb86p-2},
+ {0x1.ae33bap+2, 0x1.d1746p-1},
+ {0x1.9e1fcp-3, 0x1.666666p+0},
+ {0x1.0c17d8p+3, 0x1.51eb86p-2},
+ {0x1.a735c2p-2, 0x1.666666p+0},
+ {0x1.2d70d6p+0, 0x1.51eb86p-2},
+ {0x1.965a9ap-3, 0x1.666666p+0},
+ {0x1.7f72d2p+6, 0x1.51eb86p-2},
+ {0x1.0725c4p-3, 0x1.666666p+0},
+ {0x1.29406ap+4, 0x1.51eb86p-2},
+ {0x1.00193cp+0, 0x1.51eb86p-2},
+ {0x1.ae4086p-4, 0x1.d51eb8p+2},
+ {0x1.6ffa14p+7, 0x1.51eb86p-2},
+ {0x1.fc1616p-1, 0x1.666666p+0},
+ {0x1.a46d82p+0, 0x1.51eb86p-2},
+ {0x1.97d19ap-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.39e5cp-1, 0x1.666666p+0},
+ {0x1.f9fcdep+2, 0x1.51eb86p-2},
+ {0x1.f4202ep-1, 0x1.249236p-2},
+ {0x1.cec7a8p-1, 0x1.328f5cp+2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.7d15aep-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.a67276p-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.214f06p-4, 0x1.249236p-2},
+ {0x1.257abcp+0, 0x1.51eb86p-2},
+ {0x1.51793ap-2, 0x1.666666p+0},
+ {0x1.2893f4p+6, 0x1.51eb86p-2},
+ {0x1.000582p+0, 0x1.51eb86p-2},
+ {0x1.fcfb34p-1, 0x1.249236p-2},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.d96638p-3, 0x1.666666p+0},
+ {0x1.000ef2p+0, 0x1.51eb86p-2},
+ {0x1.0357c4p+0, 0x1.249236p-2},
+ {0x1.034d1ep+1, 0x1.51eb86p-2},
+ {0x1.941afp-1, 0x1.666666p+0},
+ {0x1.231c54p+0, 0x1.51eb86p-2},
+ {0x1.0014e8p+0, 0x1.51eb86p-2},
+ {0x1.83211cp-2, 0x1.d51eb8p+2},
+ {0x1.7724b8p+11, 0x1.51eb86p-2},
+ {0x1.bf8f8ap-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.f1aed6p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.e5ce5cp-1, 0x1.666666p+0},
+ {0x1.00140ep+0, 0x1.51eb86p-2},
+ {0x1.f775f6p+2, 0x1.51eb86p-2},
+ {0x1.fe9a4ep-1, -0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.fd27a2p-1, 0x1.666666p+0},
+ {0x1.000746p+0, 0x1.51eb86p-2},
+ {0x1.f90c4ep-1, 0x1.666666p+0},
+ {0x1.426272p+8, 0x1.51eb86p-2},
+ {0x1.f75104p-17, 0x1.99999ap-1},
+ {0x1.facabep+5, 0x1.51eb86p-2},
+ {0x1.e1db44p-1, 0x1.249236p-2},
+ {0x1.42c0b4p+6, 0x1.51eb86p-2},
+ {0x1.7744d4p+10, 0x1.51eb86p-2},
+ {0x1.0739bp-3, 0x1.666666p+0},
+ {0x1.25b1c8p+0, 0x1.51eb86p-2},
+ {0x1.665732p-3, 0x1.666666p+0},
+ {0x1.00010cp+0, 0x1.51eb86p-2},
+ {0x1.3cab82p-12, 0x1.4f5c28p+0},
+ {0x1.f856ccp+3, 0x1.51eb86p-2},
+ {0x1.204d12p-4, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.13bb2p+0, 0x1.51eb86p-2},
+ {0x1.0730c6p-3, 0x1.666666p+0},
+ {0x1.3ee06ep+11, 0x1.51eb86p-2},
+ {0x1.ba5722p-1, 0x1.666666p+0},
+ {0x1.46bed6p+7, 0x1.51eb86p-2},
+ {0x1.b14a2cp-1, 0x1.249236p-2},
+ {0x1.0001e6p+0, 0x1.51eb86p-2},
+ {0x1.26b11cp-2, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.f00beep-1, 0x1.666666p+0},
+ {0x1.1f6bf4p+5, 0x1.51eb86p-2},
+ {0x1.a59ab6p-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.7bf5d8p-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.f969e4p-13, 0x1.4f5c28p+0},
+ {0x1.d74108p+1, 0x1.51eb86p-2},
+ {0x1.f00c96p-1, 0x1.249236p-2},
+ {0x1.ed68e8p-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.5a4fcap-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.fe2282p-1, 0x1.666666p+0},
+ {0x1.e920ccp+7, 0x1.51eb86p-2},
+ {0x1.0c6f7ap-17, 0x1.a3d70ap-2},
+ {0x1.abfd2cp+3, 0x1.51eb86p-2},
+ {0x1.c57f74p-2, 0x1.249236p-2},
+ {0x1.b790f8p+2, 0x1.51eb86p-2},
+ {0x1.bec1ap+1, 0x1.51eb86p-2},
+ {0x1.5251c2p-2, 0x1.666666p+0},
+ {0x1.79021cp+7, 0x1.51eb86p-2},
+ {0x1.f503b8p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.af3d3ap-3, 0x1.249236p-2},
+ {0x1.428256p+8, 0x1.51eb86p-2},
+ {0x1.f8f3ecp-1, 0x1.249236p-2},
+ {0x1.001334p+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.00e486p+0, 0x1.249236p-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.fc8dap-2, 0x1.666666p+0},
+ {0x1.5755e6p+1, 0x1.51eb86p-2},
+ {0x1.009d4ap-2, 0x1.249236p-2},
+ {0x1.259c06p+0, 0x1.51eb86p-2},
+ {0x1.377dd8p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.2a0f6ep+13, 0x1.99999ap-2},
+ {0x1.139de4p-1, 0x1.dp+2},
+ {0x1.5d0ad4p+1, 0x1.51eb86p-2},
+ {0x1.ed133p-1, 0x1.666666p+0},
+ {0x1.3374eep+0, 0x1.51eb86p-2},
+ {0x1.21f3a6p-4, 0x1.249236p-2},
+ {0x1.01618p+0, 0x1.51eb86p-2},
+ {0x1.65553ep-3, 0x1.666666p+0},
+ {0x1.88ffe2p+1, 0x1.51eb86p-2},
+ {0x1.a56a38p-1, 0x1.249236p-2},
+ {0x1.9df9fp+3, 0x1.51eb86p-2},
+ {0x1.7e4fc4p+9, 0x1.51eb86p-2},
+ {0x1.ffd156p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.a25354p-1, 0x1.666666p+0},
+ {0x1.03f8bap+0, 0x1.51eb86p-2},
+ {0x1.f9187ep-1, 0x1.666666p+0},
+ {0x1.06bf66p+0, 0x1.51eb86p-2},
+ {0x1.8ca57ap-2, 0x1.249236p-2},
+ {0x1.4004a6p+8, 0x1.51eb86p-2},
+ {0x1.00da6ep+0, 0x1.51eb86p-2},
+ {0x1.3a6eap+1, 0x1.551eb8p+2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.7b2874p-1, 0x1.666666p+0},
+ {0x1.0003eep+0, 0x1.51eb86p-2},
+ {0x1.217d28p-4, 0x1.249236p-2},
+ {0x1.12748p+5, 0x1.51eb86p-2},
+ {0x1.060ccp-1, 0x1.666666p+0},
+ {0x1.80bf9cp+3, 0x1.51eb86p-2},
+ {0x1.a06e5cp-1, 0x1.249236p-2},
+ {0x1.0014c6p+0, 0x1.51eb86p-2},
+ {0x1.72be26p+8, 0x1.51eb86p-2},
+ {0x1.ed51d6p-1, 0x1.666666p+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.5487fcp-1, 0x1.666666p+0},
+ {0x1.376694p+0, 0x1.51eb86p-2},
+ {0x1.0624dep-11, 0x1.4f5c28p+0},
+ {0x1.7514bcp+7, 0x1.51eb86p-2},
+ {0x1.afba02p-4, 0x1.249236p-2},
+ {0x1.001798p+0, 0x1.51eb86p-2},
+ {0x1.0000a8p+0, 0x1.51eb86p-2},
+ {0x1.d3b42cp-3, 0x1.666666p+0},
+ {0x1.0003dep+0, 0x1.51eb86p-2},
+ {0x1.e28134p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.9efd22p-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.8df548p-2, 0x1.249236p-2},
+ {0x1.20c89cp+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.fd786p-1, 0x1.666666p+0},
+ {0x1.bef61ep+0, 0x1.51eb86p-2},
+ {0x1.52ccb4p-2, 0x1.666666p+0},
+ {0x1.5ec068p+3, 0x1.51eb86p-2},
+ {0x1.9618acp-1, 0x1.249236p-2},
+ {0x1.b60a44p+3, 0x1.51eb86p-2},
+ {0x1.e728a6p-1, 0x1.666666p+0},
+ {0x1.42c036p+6, 0x1.51eb86p-2},
+ {0x1.00c73ap+0, 0x1.51eb86p-2},
+ {0x1.9ecbb8p-3, 0x1.666666p+0},
+ {0x1.2d7d66p+5, 0x1.51eb86p-2},
+ {0x1.d6f4bep-2, 0x1.666666p+0},
+ {0x1.7d5396p+7, 0x1.51eb86p-2},
+ {0x1.76616cp-3, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.3bfb58p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.019f9p+0, 0x1.51eb86p-2},
+ {0x1.d479e6p+0, 0x1.551eb8p+2},
+ {0x1.002d5ap+0, 0x1.51eb86p-2},
+ {0x1.9baf54p-1, 0x1.666666p+0},
+ {0x1.46c138p+5, 0x1.51eb86p-2},
+ {0x1.76ba8cp-2, 0x1.666666p+0},
+ {0x1.79d43p+13, 0x1.51eb86p-2},
+ {0x1.21ef74p-4, 0x1.249236p-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.9cd574p-3, 0x1.666666p+0},
+ {0x1.12e636p+6, 0x1.51eb86p-2},
+ {0x1.870302p+4, 0x1.51eb86p-2},
+ {0x1.fba86p-1, 0x1.249236p-2},
+ {0x1.000096p+0, 0x1.99999ap-2},
+ {0x1.551938p-2, 0x1.666666p+0},
+ {0x1.780188p+8, 0x1.51eb86p-2},
+ {0x1.f81776p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.ba6bf8p-1, 0x1.666666p+0},
+ {0x1.085826p+0, 0x1.51eb86p-2},
+ {0x1.d3c382p-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.ba732ep-2, 0x1.666666p+0},
+ {0x1.7ec812p+5, 0x1.51eb86p-2},
+ {0x1.ecb4aep-1, 0x1.666666p+0},
+ {0x1.84892p+5, 0x1.51eb86p-2},
+ {0x1.8635e8p-1, 0x1.249236p-2},
+ {0x1.7b4364p+0, 0x1.51eb86p-2},
+ {0x1.05efeap-3, 0x1.249236p-2},
+ {0x1.f9a16ep+2, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.11d92cp+0, 0x1.23a322p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.038b48p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.ed89acp-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.e27a42p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.0007dep+0, 0x1.51eb86p-2},
+ {0x1.7aaf6p+1, 0x1.5p+2},
+ {0x1.b45554p+0, 0x1.51eb86p-2},
+ {0x1.a903a8p-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.a32d2cp-2, 0x1.666666p+0},
+ {0x1.3ad024p+2, 0x1.19999ap+0},
+ {0x1.f60dccp-1, 0x1.666666p+0},
+ {0x1.040b8ep+4, 0x1.51eb86p-2},
+ {0x1.23d35ep-2, 0x1.249236p-2},
+ {0x1.c8d466p+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.f98d48p-1, 0x1.666666p+0},
+ {0x1.5ec606p+3, 0x1.51eb86p-2},
+ {0x1.f298ccp-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.ae76p-3, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.9f310ap-1, 0x1.249236p-2},
+ {0x1.171db4p+0, 0x1.51eb86p-2},
+ {0x1.a8c33p+5, 0x1.451eb8p-1},
+ {0x1.54a9c2p+4, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.cfdbb2p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.0cb536p-2, 0x1.666666p+0},
+ {0x1.5f8712p+2, 0x1.51eb86p-2},
+ {0x1.c2511ap-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.f84ee8p-1, 0x1.666666p+0},
+ {0x1.2aca7ep+2, 0x1.51eb86p-2},
+ {0x1.c621b8p-2, 0x1.249236p-2},
+ {0x1.7b873ap+6, 0x1.51eb86p-2},
+ {0x1.002278p+0, 0x1.51eb86p-2},
+ {0x1.3a0902p-1, 0x1.666666p+0},
+ {0x1.028522p+0, 0x1.51eb86p-2},
+ {0x1.ed61b2p-1, 0x1.666666p+0},
+ {0x1.50e05cp+7, 0x1.51eb86p-2},
+ {0x1.cfe26p-1, 0x1.666666p+0},
+ {0x1.9f234cp+3, 0x1.51eb86p-2},
+ {0x1.cfa44p-1, 0x1.666666p+0},
+ {0x1.f9c79cp+1, 0x1.51eb86p-2},
+ {0x1.ee8d1p-2, 0x1.249236p-2},
+ {0x1.0011b2p+0, 0x1.51eb86p-2},
+ {0x1.92a738p-19, 0x1.19999ap+0},
+ {0x1.599bf6p-1, 0x1.666666p+0},
+ {0x1.bace3p+6, 0x1.51eb86p-2},
+ {0x1.b19f3cp-1, 0x1.666666p+0},
+ {0x1.46c118p+5, 0x1.51eb86p-2},
+ {0x1.8a09aap-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.dbacf8p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.b1d92cp-4, 0x1.249236p-2},
+ {0x1.566e34p+3, 0x1.51eb86p-2},
+ {0x1.a83c34p+6, 0x1.51eb86p-2},
+ {0x1.7df97ap-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.d53d64p-3, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.762f9cp-3, 0x1.249236p-2},
+ {0x1.3ec6a2p+14, 0x1.51eb86p-2},
+ {0x1.db293ep-1, 0x1.666666p+0},
+ {0x1.0f9fdcp+0, 0x1.51eb86p-2},
+ {0x1.c22d0ep-2, 0x1.249236p-2},
+ {0x1.001494p+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.079896p-3, 0x1.666666p+0},
+ {0x1.0000dap+0, 0x1.51eb86p-2},
+ {0x1.ff6ec6p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.02528ap-1, 0x1.249236p-2},
+ {0x1.029802p+0, 0x1.51eb86p-2},
+ {0x1.f26784p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.2254a4p-2, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.28dde8p-2, 0x1.249236p-2},
+ {0x1.1e354p+0, 0x1.51eb86p-2},
+ {0x1.8880dap+14, 0x1.d1746p-1},
+ {0x1.34db5ap-3, 0x1.666666p+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.0b9aep-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.3ba216p-1, 0x1.666666p+0},
+ {0x1.01d93cp+0, 0x1.d1746p-1},
+ {0x1.cef36ep-1, 0x1.249236p-2},
+ {0x1.000e8cp+0, 0x1.51eb86p-2},
+ {0x1.dfd7e4p-1, 0x1.666666p+0},
+ {0x1.5cb568p+12, 0x1.d1746p-1},
+ {0x1.694e5ep-3, 0x1.249236p-2},
+ {0x1.779a84p+12, 0x1.51eb86p-2},
+ {0x1.77829p+9, 0x1.51eb86p-2},
+ {0x1.eceeep-2, 0x1.b51eb8p+3},
+ {0x1.52bd6ep+1, 0x1.99999ap-2},
+ {0x1.362de8p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.59bb8cp-1, 0x1.666666p+0},
+ {0x1.46c56ep+5, 0x1.51eb86p-2},
+ {0x1.78ec52p-1, 0x1.666666p+0},
+ {0x1.41a93ap+9, 0x1.51eb86p-2},
+ {0x1.8e757ap-13, 0x1.99999ap-1},
+ {0x1.0004b8p+0, 0x1.51eb86p-2},
+ {0x1.353cdep-3, 0x1.666666p+0},
+ {0x1.016894p+0, 0x1.51eb86p-2},
+ {0x1.4d104ep-1, 0x1.249236p-2},
+ {0x1.8dd6e8p+3, 0x1.19999ap+0},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.7f707ap-1, 0x1.af5c28p+2},
+ {0x1.848798p+2, 0x1.51eb86p-2},
+ {0x1.df3084p-1, 0x1.666666p+0},
+ {0x1.7800f2p+8, 0x1.51eb86p-2},
+ {0x1.081ba8p-2, 0x1.666666p+0},
+ {0x1.512bc2p+0, 0x1.51eb86p-2},
+ {0x1.defb9p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.b00368p-13, 0x1.a3d70ap-2},
+ {0x1.000182p+0, 0x1.51eb86p-2},
+ {0x1.3c1fp-1, 0x1.666666p+0},
+ {0x1.00a02cp+0, 0x1.99999ap-2},
+ {0x1.0168f8p+0, 0x1.51eb86p-2},
+ {0x1.0005c4p+0, 0x1.51eb86p-2},
+ {0x1.4fae58p+0, 0x1.51eb86p-2},
+ {0x1.c44242p-2, 0x1.b51eb8p+3},
+ {0x1.890a52p+3, 0x1.51eb86p-2},
+ {0x1.591dbcp-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.3ac9d2p-1, 0x1.666666p+0},
+ {0x1.281b86p+0, 0x1.51eb86p-2},
+ {0x1.50bd24p-1, 0x1.249236p-2},
+ {0x1.0c240cp+3, 0x1.51eb86p-2},
+ {0x1.3a0c6cp-11, 0x1.a3d70ap-2},
+ {0x1.08cc9ap+0, 0x1.51eb86p-2},
+ {0x1.2be48ap-12, 0x1.99999ap-1},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.b09a68p-3, 0x1.249236p-2},
+ {0x1.002246p+0, 0x1.51eb86p-2},
+ {0x1.000192p+0, 0x1.51eb86p-2},
+ {0x1.00054ep+0, 0x1.51eb86p-2},
+ {0x1.772292p+11, 0x1.51eb86p-2},
+ {0x1.81c5dep+11, 0x1.99999ap-2},
+ {0x1.b3e708p+0, 0x1.51eb86p-2},
+ {0x1.3940ep+3, 0x1.51eb86p-2},
+ {0x1.5f2cd8p+6, 0x1.51eb86p-2},
+ {0x1.ae4086p-4, 0x1.d51eb8p+2},
+ {0x1.85f58ap+3, 0x1.51eb86p-2},
+ {0x1.0afbc2p-2, 0x1.666666p+0},
+ {0x1.0000fcp+0, 0x1.51eb86p-2},
+ {0x1.4da016p-1, 0x1.666666p+0},
+ {0x1.0604bp+0, 0x1.51eb86p-2},
+ {0x1.d1ca18p-1, 0x1.666666p+0},
+ {0x1.3f0136p+10, 0x1.51eb86p-2},
+ {0x1.dae77p-1, 0x1.666666p+0},
+ {0x1.5dc066p+0, 0x1.51eb86p-2},
+ {0x1.7e15a8p-1, 0x1.666666p+0},
+ {0x1.0004dap+0, 0x1.d1746p-1},
+ {0x1.bd3868p-1, 0x1.666666p+0},
+ {0x1.3f41ccp+9, 0x1.51eb86p-2},
+ {0x1.22717ap-4, 0x1.249236p-2},
+ {0x1.24244ep+0, 0x1.51eb86p-2},
+ {0x1.574d9cp-2, 0x1.249236p-2},
+ {0x1.b047e2p+3, 0x1.d1746p-1},
+ {0x1.d734d6p-1, 0x1.249236p-2},
+ {0x1.422444p+8, 0x1.51eb86p-2},
+ {0x1.f75104p-16, 0x1.99999ap-1},
+ {0x1.ac0ef2p+3, 0x1.d1746p-1},
+ {0x1.feb2f2p-1, 0x1.666666p+0},
+ {0x1.1ee88cp+5, 0x1.51eb86p-2},
+ {0x1.a4341ap-1, 0x1.249236p-2},
+ {0x1.27cebp+1, 0x1.51eb86p-2},
+ {0x1.c65776p-2, 0x1.249236p-2},
+ {0x1.0f43a6p+0, 0x1.d1746p-1},
+ {0x1.f1f46ep-1, 0x1.249236p-2},
+ {0x1.3fc02cp+8, 0x1.51eb86p-2},
+ {0x1.ae72f4p+3, 0x1.51eb86p-2},
+ {0x1.0014f8p+0, 0x1.51eb86p-2},
+ {0x1.27cd68p+0, 0x1.51eb86p-2},
+ {0x1.0012aep+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.3d1c5cp+1, 0x1.551eb8p+2},
+ {0x1.000778p+0, 0x1.51eb86p-2},
+ {0x1.ae4086p-4, 0x1.d51eb8p+2},
+ {0x1.3b8138p+1, 0x1.51eb86p-2},
+ {0x1.014e3cp-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.52e44cp-2, 0x1.666666p+0},
+ {0x1.9eb2e2p+0, 0x1.51eb86p-2},
+ {0x1.6670e2p-3, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.b63348p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.7a2596p-2, 0x1.666666p+0},
+ {0x1.bf64a6p+1, 0x1.51eb86p-2},
+ {0x1.d709fap-2, 0x1.666666p+0},
+ {0x1.3b80e4p+1, 0x1.51eb86p-2},
+ {0x1.5452c6p-2, 0x1.666666p+0},
+ {0x1.104524p+0, 0x1.51eb86p-2},
+ {0x1.a445eep-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.e9d10cp-1, 0x1.666666p+0},
+ {0x1.00ef24p+0, 0x1.51eb86p-2},
+ {0x1.98769ep-3, 0x1.666666p+0},
+ {0x1.000346p+0, 0x1.51eb86p-2},
+ {0x1.a8c9fcp-2, 0x1.666666p+0},
+ {0x1.2e38p+0, 0x1.51eb86p-2},
+ {0x1.01c0a8p-1, 0x1.666666p+0},
+ {0x1.9f60cp+0, 0x1.51eb86p-2},
+ {0x1.a1e732p-1, 0x1.666666p+0},
+ {0x1.bcabcep+1, 0x1.51eb86p-2},
+ {0x1.1ca7f8p-1, 0x1.666666p+0},
+ {0x1.f704ccp+1, 0x1.51eb86p-2},
+ {0x1.04f312p-1, 0x1.666666p+0},
+ {0x1.000358p+0, 0x1.51eb86p-2},
+ {0x1.2cd184p-2, 0x1.666666p+0},
+ {0x1.ce7a8cp+4, 0x1.51eb86p-2},
+ {0x1.59d388p-1, 0x1.666666p+0},
+ {0x1.b1fc54p+1, 0x1.51eb86p-2},
+ {0x1.dac51ap-1, 0x1.666666p+0},
+ {0x1.7225b8p-8, 0x1.19999ap+0},
+ {0x1.a6c11ap-1, 0x1.666666p+0},
+ {0x1.7f01ap+5, 0x1.51eb86p-2},
+ {0x1.e6a29p-1, 0x1.666666p+0},
+ {0x1.12ecaep+0, 0x1.51eb86p-2},
+ {0x1.5dd852p-1, 0x1.666666p+0},
+ {0x1.7851c6p+9, 0x1.51eb86p-2},
+ {0x1.7aebe6p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.9d2e0ep-3, 0x1.666666p+0},
+ {0x1.7b7596p+7, 0x1.51eb86p-2},
+ {0x1.e1decep-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.7797ccp-1, 0x1.666666p+0},
+ {0x1.42c15p+6, 0x1.51eb86p-2},
+ {0x1.cfef7cp-2, 0x1.666666p+0},
+ {0x1.bdf6cep+6, 0x1.51eb86p-2},
+ {0x1.fbc4d2p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.d45bf2p-2, 0x1.666666p+0},
+ {0x1.53eda6p+0, 0x1.51eb86p-2},
+ {0x1.02abfp+0, 0x1.666666p+0},
+ {0x1.78013cp+8, 0x1.51eb86p-2},
+ {0x1.9d0d06p-3, 0x1.666666p+0},
+ {0x1.5336dep-11, 0x1.19999ap+0},
+ {0x1.6691eap-3, 0x1.666666p+0},
+ {0x1.488ea4p+6, 0x1.51eb86p-2},
+ {0x1.e42edcp-1, 0x1.666666p+0},
+ {0x1.02b97p+0, 0x1.51eb86p-2},
+ {0x1.39e98ep-1, 0x1.666666p+0},
+ {0x1.9421f2p+2, 0x1.51eb86p-2},
+ {0x1.ddfb72p-1, 0x1.666666p+0},
+ {0x1.7b0224p+6, 0x1.51eb86p-2},
+ {0x1.aeb32cp+1, 0x1.d1746p-1},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.51f7d8p-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.04767ep+0, 0x1.d1746p-1},
+ {0x1.6f1402p+1, 0x1.51eb86p-2},
+ {0x1.bd4862p+4, 0x1.d1746p-1},
+ {0x1.4ec1eap+4, 0x1.51eb86p-2},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.df2da2p-1, 0x1.249236p-2},
+ {0x1.8e61f2p+10, 0x1.99999ap-2},
+ {0x1.c34e76p-1, 0x1.666666p+0},
+ {0x1.00119p+0, 0x1.51eb86p-2},
+ {0x1.f3213ep-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.f1181ap-1, 0x1.249236p-2},
+ {0x1.000e18p+0, 0x1.51eb86p-2},
+ {0x1.ff2842p-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.d2f3c2p-2, 0x1.666666p+0},
+ {0x1.9701b6p+3, 0x1.51eb86p-2},
+ {0x1.015592p+0, 0x1.666666p+0},
+ {0x1.3e449ap+9, 0x1.19999ap+0},
+ {0x1.58a82ap-1, 0x1.666666p+0},
+ {0x1.970292p+3, 0x1.51eb86p-2},
+ {0x1.975d56p-2, 0x1p-1},
+ {0x1.7e0e04p+10, 0x1.51eb86p-2},
+ {0x0p+0, 0x1.51eb86p-2},
+ {0x1.02684cp+0, 0x1.51eb86p-2},
+ {0x1.48f286p+4, 0x1.d1746p-1},
+ {0x1.eb3f64p-1, 0x1.249236p-2},
+ {0x1.0601f4p+8, 0x1.d1746p-1},
+ {0x1.bd2ac8p-1, 0x1.249236p-2},
+ {0x1.33354cp-4, 0x1.19999ap+0},
+ {0x1.e7662p-1, 0x1.666666p+0},
+ {0x1.3f02c8p+10, 0x1.51eb86p-2},
+ {0x1.c4fc1ep-16, 0x1.4f5c28p+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.53ac5p-2, 0x1.249236p-2},
+ {0x1.2f6014p+3, 0x1.19999ap+0},
+ {0x1.9d07c8p-3, 0x1.666666p+0},
+ {0x1.98d53p+0, 0x1.51eb86p-2},
+ {0x1.e20792p-1, 0x1.666666p+0},
+ {0x1.028a4p+0, 0x1.249236p-2},
+ {0x1.7b9842p-2, 0x1.666666p+0},
+ {0x1.fdf5fp+1, 0x1.51eb86p-2},
+ {0x1.bcfc62p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.771258p+12, 0x1.51eb86p-2},
+ {0x1.00057p+0, 0x1.51eb86p-2},
+ {0x1.3ee1ecp+11, 0x1.51eb86p-2},
+ {0x1.5c5292p+3, 0x1.d1746p-1},
+ {0x1.aee41ap-4, 0x1.249236p-2},
+ {0x1.7ec31ap+2, 0x1.51eb86p-2},
+ {0x1.93b96ap-3, 0x1.666666p+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.e54994p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.30d49ap-3, 0x1.249236p-2},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.a9027ap-1, 0x1.666666p+0},
+ {0x1.8621b8p+5, 0x1.51eb86p-2},
+ {0x1.cba2ep-1, 0x1.666666p+0},
+ {0x1.00a256p+0, 0x1.d1746p-1},
+ {0x1.66d72p-3, 0x1.666666p+0},
+ {0x1.000022p+0, 0x1.51eb86p-2},
+ {0x1.a6bb98p-2, 0x1.666666p+0},
+ {0x1.3e30b2p+6, 0x1.19999ap+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.8a85ep+4, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.8aa822p-2, 0x1.249236p-2},
+ {0x1.a91de2p+4, 0x1.d1746p-1},
+ {0x1.a36e2ep-16, 0x1.99999ap-1},
+ {0x1.94e454p+0, 0x1.51eb86p-2},
+ {0x1.5348f6p-2, 0x1.666666p+0},
+ {0x1.b5b33p+5, 0x1.99999ap-2},
+ {0x1.ea0dbap-1, 0x1.666666p+0},
+ {0x1.728e92p-4, 0x1.19999ap+0},
+ {0x1.d5cfeep-2, 0x1.666666p+0},
+ {0x1.ce725cp+2, 0x1.51eb86p-2},
+ {0x1.790186p+7, 0x1.51eb86p-2},
+ {0x1.00062ap+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.5cc272p-1, 0x1.666666p+0},
+ {0x1.395fd6p+8, 0x1.99999ap-2},
+ {0x1.1fefcp-2, 0x1.249236p-2},
+ {0x1.a8bf32p+4, 0x1.d1746p-1},
+ {0x1.b3994ep-1, 0x1.666666p+0},
+ {0x1.00727ep+0, 0x1.51eb86p-2},
+ {0x1.d2cd3ap-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.768c48p-1, 0x1.d51eb8p+2},
+ {0x1.813fep+4, 0x1.51eb86p-2},
+ {0x1.17a55ep+6, 0x1.d1746p-1},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.86bc5cp+5, 0x1.99999ap-2},
+ {0x1.06d8b2p-3, 0x1.666666p+0},
+ {0x1.79049cp+7, 0x1.51eb86p-2},
+ {0x1.f42c8p-1, 0x1.249236p-2},
+ {0x1.a7297p-2, 0x1.19999ap+0},
+ {0x1.eb8b26p-1, 0x1.666666p+0},
+ {0x1.989286p+9, 0x1.99999ap-2},
+ {0x1.9b54ap-3, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.03e864p+3, 0x1.d1746p-1},
+ {0x1.014da4p+0, 0x1.51eb86p-2},
+ {0x1.1613d4p-3, 0x1.19999ap+0},
+ {0x1.00180ep+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.cdd872p-1, 0x1.666666p+0},
+ {0x1.3e7fcp+10, 0x1.19999ap+0},
+ {0x1.c51b5p-2, 0x1.249236p-2},
+ {0x1.08988p+0, 0x1.99999ap-2},
+ {0x1.55ec3ep-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.9b706ap-3, 0x1.666666p+0},
+ {0x1.dd566cp-3, 0x1.19999ap+0},
+ {0x1.38c95ap+9, 0x1.19999ap+0},
+ {0x1.0011c2p+0, 0x1.51eb86p-2},
+ {0x1.51d54ep+0, 0x1.99999ap-2},
+ {0x1.d902dep-1, 0x1.249236p-2},
+ {0x1.508eb6p+3, 0x1.99999ap-2},
+ {0x1.cdd7ecp-1, 0x1.666666p+0},
+ {0x1.020b2cp+0, 0x1.51eb86p-2},
+ {0x1.d10bc8p-1, 0x1.249236p-2},
+ {0x1.870154p+4, 0x1.51eb86p-2},
+ {0x1.7d6a9cp-1, 0x1.666666p+0},
+ {0x1.7712p+12, 0x1.51eb86p-2},
+ {0x1.bb4c8p-1, 0x1.666666p+0},
+ {0x1.5c772ep+1, 0x1.99999ap-2},
+ {0x1.000adp+0, 0x1.99999ap-2},
+ {0x1.768e2ap+2, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.50af1cp-1, 0x1.249236p-2},
+ {0x1.00711ep+0, 0x1.51eb86p-2},
+ {0x1.afb6dcp-4, 0x1.249236p-2},
+ {0x1.571422p+6, 0x1.99999ap-2},
+ {0x1.523358p-2, 0x1.666666p+0},
+ {0x1.e9059ep+3, 0x1.99999ap-2},
+ {0x1.5232f4p-1, 0x1.666666p+0},
+ {0x1.221414p+7, 0x1.d1746p-1},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.3fc0e8p+8, 0x1.51eb86p-2},
+ {0x1.1a7c18p-5, 0x1.19999ap+0},
+ {0x1.bffde8p-2, 0x1.249236p-2},
+ {0x1.42c3aep+6, 0x1.51eb86p-2},
+ {0x1.df3776p-1, 0x1.249236p-2},
+ {0x1.2eeca6p+1, 0x1.19999ap+0},
+ {0x1.7b482cp-1, 0x1.666666p+0},
+ {0x1.26e908p+4, 0x1.51eb86p-2},
+ {0x1.3a5c1cp-1, 0x1.666666p+0},
+ {0x1.6adf2ep+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.0069e8p+0, 0x1.99999ap-2},
+ {0x1.3ac936p+2, 0x1.19999ap+0},
+ {0x1.5a14cep-2, 0x1.249236p-2},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.1f0c34p-10, 0x1.a3d70ap-2},
+ {0x1.d3b928p-2, 0x1.19999ap+0},
+ {0x1.b85122p-1, 0x1.666666p+0},
+ {0x1.76a5fp+1, 0x1.19999ap+0},
+ {0x1.bacba8p-1, 0x1.666666p+0},
+ {0x1.3e400ep+14, 0x1.19999ap+0},
+ {0x1.05243ap+0, 0x1.249236p-2},
+ {0x1.01cf36p+0, 0x1.d1746p-1},
+ {0x1.7d4174p-5, 0x1.19999ap+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.efcb2ep-1, 0x1.666666p+0},
+ {0x1.01cc2p+0, 0x1.d1746p-1},
+ {0x1.861c36p-1, 0x1.666666p+0},
+ {0x1.11d15ap+2, 0x1.d1746p-1},
+ {0x1.cb267cp-1, 0x1.666666p+0},
+ {0x1.0074c8p+0, 0x1.51eb86p-2},
+ {0x1.7773ap-2, 0x1.d51eb8p+2},
+ {0x1.000064p+0, 0x1.99999ap-2},
+ {0x1.04669p+0, 0x1.d1746p-1},
+ {0x1.4ec128p+4, 0x1.51eb86p-2},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.ed6d3cp-1, 0x1.666666p+0},
+ {0x1.7711f2p+12, 0x1.51eb86p-2},
+ {0x1.cebbfep-1, 0x1.249236p-2},
+ {0x1.4115e2p+11, 0x1.d1746p-1},
+ {0x1.03828p-1, 0x1.666666p+0},
+ {0x1.774322p+10, 0x1.51eb86p-2},
+ {0x1.7be1a8p-1, 0x1.666666p+0},
+ {0x1.870414p+4, 0x1.51eb86p-2},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.1907bcp+3, 0x1.51eb86p-2},
+ {0x1.00069ep+0, 0x1.51eb86p-2},
+ {0x1.0aa4bap-2, 0x1.666666p+0},
+ {0x1.001f1p+0, 0x1.99999ap-2},
+ {0x1.b97c8p-1, 0x1.249236p-2},
+ {0x1.adbcap+10, 0x1.99999ap-2},
+ {0x1.ef29d4p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.34df8cp-3, 0x1.666666p+0},
+ {0x1.b9ab88p+3, 0x1.d1746p-1},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.3ec5f4p+14, 0x1.51eb86p-2},
+ {0x1.2a90e4p+3, 0x1.19999ap+0},
+ {0x1.c9d798p-1, 0x1.666666p+0},
+ {0x1.7a17dcp+5, 0x1.19999ap+0},
+ {0x1.e4dd94p-1, 0x1.249236p-2},
+ {0x1.007044p+0, 0x1.99999ap-2},
+ {0x1.070196p-3, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.9a133cp-3, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.3f40cap+9, 0x1.51eb86p-2},
+ {0x1.df6c9cp+0, 0x1.19999ap+0},
+ {0x1.0ed528p+0, 0x1.99999ap-2},
+ {0x1.064eaep-1, 0x1.249236p-2},
+ {0x1.4940bcp-12, 0x1.19999ap+0},
+ {0x1.b5e4c6p-1, 0x1.249236p-2},
+ {0x1.00e5d6p+0, 0x1.d1746p-1},
+ {0x1.66ce36p-3, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.3bf50ep-1, 0x1.666666p+0},
+ {0x1.3ec8d4p+14, 0x1.51eb86p-2},
+ {0x1.2c247cp+8, 0x1.99999ap-2},
+ {0x1.510c14p+4, 0x1.51eb86p-2},
+ {0x1.00c038p+0, 0x1.d1746p-1},
+ {0x1.cf2192p-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.01f32p-11, 0x1.4f5c28p+0},
+ {0x1.149796p+0, 0x1.99999ap-2},
+ {0x1.39c13p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.92ef7p-1, 0x1.666666p+0},
+ {0x1.b129a2p+2, 0x1.d1746p-1},
+ {0x1.2f2644p+13, 0x1.99999ap-2},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.7f01b6p+5, 0x1.51eb86p-2},
+ {0x1.b1012ap-3, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.a79fecp-13, 0x1.99999ap-1},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.2e008ep-2, 0x1.666666p+0},
+ {0x1.33c1cep-8, 0x1.19999ap+0},
+ {0x1.aa60d4p-1, 0x1.666666p+0},
+ {0x1.3ad252p+11, 0x1.19999ap+0},
+ {0x1.f7cd04p-1, -0x1.249236p-2},
+ {0x1.b83e86p+1, 0x1.99999ap-2},
+ {0x1.00050cp+0, 0x1.51eb86p-2},
+ {0x1.8a13ap-1, 0x1.249236p-2},
+ {0x1.7903bep+7, 0x1.51eb86p-2},
+ {0x1.20f58p-1, 0x1.666666p+0},
+ {0x1.20a02cp+0, 0x1.d1746p-1},
+ {0x1.cf78fep-3, 0x1.666666p+0},
+ {0x1.1c2f52p+2, 0x1.d1746p-1},
+ {0x1.a849ecp-1, 0x1.666666p+0},
+ {0x1.bd3b2ap+4, 0x1.d1746p-1},
+ {0x1.ae4086p-4, 0x1.d51eb8p+2},
+ {0x1.b93c7ep+10, 0x1.99999ap-2},
+ {0x1.007304p+0, 0x1.51eb86p-2},
+ {0x1.ec3222p-1, 0x1.249236p-2},
+ {0x1.3e97c6p+5, 0x1.19999ap+0},
+ {0x1.65dd9p-3, 0x1.666666p+0},
+ {0x1.048f22p+0, 0x1.d1746p-1},
+ {0x1.06b7aap-3, 0x1.666666p+0},
+ {0x1.b958d8p+30, 0x1.99999ap-2},
+ {0x1.f00842p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.696638p-2, 0x1.dp+2},
+ {0x1.005718p+0, 0x1.51eb86p-2},
+ {0x1.4ec176p+4, 0x1.51eb86p-2},
+ {0x1.e82f94p-1, 0x1.249236p-2},
+ {0x1.82a95p+0, 0x1.99999ap-2},
+ {0x1.d5d91ap-3, 0x1.666666p+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.cf2cfap-5, 0x1.249236p-2},
+ {0x1.00b33ep+0, 0x1.d1746p-1},
+ {0x1.d230bap-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.7b9736p-2, 0x1.666666p+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.770a96p+13, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.000b34p+0, 0x1.51eb86p-2},
+ {0x1.eba45p-1, 0x1.666666p+0},
+ {0x1.017fb6p+0, 0x1.d1746p-1},
+ {0x1.263348p-2, 0x1.249236p-2},
+ {0x1.00ab72p+0, 0x1.51eb86p-2},
+ {0x1.ed41d8p-1, 0x1.666666p+0},
+ {0x1.05683p+0, 0x1.99999ap-2},
+ {0x1.0cc74cp-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.c22026p+0, 0x1.19999ap+0},
+ {0x1.000208p+0, 0x1.51eb86p-2},
+ {0x1.9eee2cp+4, 0x1.d1746p-1},
+ {0x1.508aacp-2, 0x1.666666p+0},
+ {0x1.31ffe6p+0, 0x1.19999ap+0},
+ {0x1.cc63f2p-5, 0x1.249236p-2},
+ {0x1.c718bp+8, 0x1.99999ap-2},
+ {0x1.ab2e38p-1, 0x1.666666p+0},
+ {0x1.126d9cp+0, 0x1.d1746p-1},
+ {0x1.06f60ep-3, 0x1.666666p+0},
+ {0x1.34b6b8p+8, 0x1.d1746p-1},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.771204p+12, 0x1.51eb86p-2},
+ {0x1.38e07cp+6, 0x1.19999ap+0},
+ {0x1.7bb01cp-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.387724p-3, 0x1.249236p-2},
+ {0x1.0080b6p+0, 0x1.99999ap-2},
+ {0x1.a9e6acp-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.f2a3aep-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.002364p+0, 0x1.51eb86p-2},
+ {0x1.0009a2p+0, 0x1.51eb86p-2},
+ {0x1.16df4ep+3, 0x1.19999ap+0},
+ {0x1.8bd5fep-1, 0x1.249236p-2},
+ {0x1.0d71bp+0, 0x1.99999ap-2},
+ {0x1.6c588ap-1, 0x1.249236p-2},
+ {0x1.56c7cap+1, 0x1.99999ap-2},
+ {0x1.d7f6b2p-3, 0x1.666666p+0},
+ {0x1.fff738p-1, 0x1.249236p-2},
+ {0x1.7a9542p-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.77218ep+11, 0x1.51eb86p-2},
+ {0x1.30555p+8, 0x1.99999ap-2},
+ {0x1.38f81ep-3, 0x1.249236p-2},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.232442p-1, 0x1.249236p-2},
+ {0x1.001c5p+0, 0x1.51eb86p-2},
+ {0x1.33f6c2p-3, 0x1.666666p+0},
+ {0x1.015182p+0, 0x1.d1746p-1},
+ {0x1.a39326p-2, 0x1.666666p+0},
+ {0x1.8df676p+4, 0x1.51eb86p-2},
+ {0x1.384adcp+28, 0x1.99999ap-2},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.3acb16p+11, 0x1.19999ap+0},
+ {0x1.88891ap-1, 0x1.249236p-2},
+ {0x1.06b638p+4, 0x1.d1746p-1},
+ {0x1.ce6c0ap-12, 0x1.4f5c28p+0},
+ {0x1.a8ae02p+6, 0x1.d1746p-1},
+ {0x1.2ca46ep-2, 0x1.666666p+0},
+ {0x1.5dc0a8p+0, 0x1.51eb86p-2},
+ {0x1.ac200cp-1, 0x1.666666p+0},
+ {0x1.73639p-1, 0x1.19999ap+0},
+ {0x1.fac216p-1, -0x1.249236p-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.ac8a38p-8, 0x1.19999ap+0},
+ {0x1.f22a0ap-1, 0x1.249236p-2},
+ {0x1.cf8962p+0, 0x1.d1746p-1},
+ {0x1.301b44p-2, 0x1.666666p+0},
+ {0x1.b702b8p+2, 0x1.51eb86p-2},
+ {0x1.3cea08p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.e19f5ep-1, 0x1.666666p+0},
+ {0x1.d76fa6p+9, 0x1.99999ap-2},
+ {0x1.ae4086p-4, 0x1.d51eb8p+2},
+ {0x1.6d4212p+5, 0x1.19999ap+0},
+ {0x1.05eabcp+0, 0x1.51eb86p-2},
+ {0x1.000778p+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.776c6ap-1, 0x1.666666p+0},
+ {0x1.46dacap+0, 0x1.d1746p-1},
+ {0x1.f6c28cp-1, 0x1.249236p-2},
+ {0x1.2f6a4ap+4, 0x1.19999ap+0},
+ {0x1.d760cp-3, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.1db1fap+0, 0x1.23586cp-2},
+ {0x1.37d09p+33, 0x1.99999ap-2},
+ {0x1.150374p+0, 0x1.99999ap-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.1b91d2p+4, 0x1.19999ap+0},
+ {0x1.d64778p-2, 0x1.666666p+0},
+ {0x1.2fc746p+33, 0x1.99999ap-2},
+ {0x1.73f9a4p-2, 0x1.249236p-2},
+ {0x1.010a24p+0, 0x1.51eb86p-2},
+ {0x1.ea4314p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.04e336p-1, 0x1.666666p+0},
+ {0x1.c12de4p+5, 0x1.99999ap-2},
+ {0x1.3e75b2p+12, 0x1.19999ap+0},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.19111ap+4, 0x1.19999ap+0},
+ {0x1.b481b2p-3, 0x1.249236p-2},
+ {0x1.712c3p+13, 0x1.d1746p-1},
+ {0x1.1904b4p-13, 0x1.99999ap-1},
+ {0x1.40c14ap+7, 0x1.51eb86p-2},
+ {0x1.3b7198p-1, 0x1.666666p+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.d06034p-2, 0x1.666666p+0},
+ {0x1.05307ap+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.01849p+0, 0x1.51eb86p-2},
+ {0x1.12fc6cp+4, 0x1.51eb86p-2},
+ {0x1.fc1e7ap-1, 0x1.249236p-2},
+ {0x1.000f24p+0, 0x1.51eb86p-2},
+ {0x1.9d3dc8p-3, 0x1.666666p+0},
+ {0x1.3ac6fp-1, 0x1.19999ap+0},
+ {0x1.cb34e8p-3, 0x1.666666p+0},
+ {0x1.380f14p+13, 0x1.99999ap-2},
+ {0x1.04611p-1, 0x1.666666p+0},
+ {0x1.00051cp+0, 0x1.99999ap-2},
+ {0x1.a6dd2ap+25, 0x1.99999ap-2},
+ {0x1.2dedaep-4, 0x1.19999ap+0},
+ {0x1.007768p+0, 0x1.d1746p-1},
+ {0x1.97012ap+3, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.e303cp-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.8a72eap-2, 0x1.249236p-2},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.50ae54p-2, 0x1.666666p+0},
+ {0x1.8b9278p+4, 0x1.51eb86p-2},
+ {0x1.056474p+0, -0x1.249236p-2},
+ {0x1.77858ap+9, 0x1.51eb86p-2},
+ {0x1.3ee07ep+11, 0x1.51eb86p-2},
+ {0x1.0f11p+3, 0x1.51eb86p-2},
+ {0x1.032f34p+0, 0x1.99999ap-2},
+ {0x1.5b24a6p-2, 0x1.249236p-2},
+ {0x1.2dfd6ap-12, 0x1.19999ap+0},
+ {0x1.7c3c18p-1, 0x1.249236p-2},
+ {0x1.07d392p+0, 0x1.d1746p-1},
+ {0x1.cde00ep-3, 0x1.666666p+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.d7d8fp-1, 0x1.666666p+0},
+ {0x1.b9eacp+2, 0x1.51eb86p-2},
+ {0x1.38d998p+8, 0x1.19999ap+0},
+ {0x1.05b26p+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.b01754p-4, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.358538p-3, 0x1.666666p+0},
+ {0x1.1842dep+9, 0x1.d1746p-1},
+ {0x1.e4016p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.a8ebccp-2, 0x1.666666p+0},
+ {0x1.9efa1p+5, 0x1.99999ap-2},
+ {0x1.ba088ep+0, 0x1.d1746p-1},
+ {0x1.000bccp+0, 0x1.51eb86p-2},
+ {0x1.3e8d88p+5, 0x1.19999ap+0},
+ {0x1.46c16p+5, 0x1.51eb86p-2},
+ {0x1.287dc4p+0, 0x1.d1746p-1},
+ {0x1.4ab474p-1, 0x1.666666p+0},
+ {0x1.32c51ap-4, 0x1.19999ap+0},
+ {0x1.abe166p-1, 0x1.666666p+0},
+ {0x1.070f8cp+0, 0x1.d1746p-1},
+ {0x1.f75a54p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.2dd5d4p-2, 0x1.666666p+0},
+ {0x1.0c5bbp+0, 0x1.51eb86p-2},
+ {0x1.004674p+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.d594bp-1, 0x1.249236p-2},
+ {0x1.0ea476p+0, 0x1.d1746p-1},
+ {0x1.f7bf84p-1, 0x1.249236p-2},
+ {0x1.1b2764p+2, 0x1.51eb86p-2},
+ {0x1.0c675ap-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.fe0ac8p-1, 0x1.666666p+0},
+ {0x1.737542p-5, 0x1.19999ap+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.352008p-3, 0x1.249236p-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.0624dep-11, 0x1.4f5c28p+0},
+ {0x1.b703a8p+2, 0x1.51eb86p-2},
+ {0x1.192c28p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.544028p-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.804e4p-1, 0x1.af5c28p+2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.90b4fap+14, 0x1.d1746p-1},
+ {0x1.00025cp+0, 0x1.51eb86p-2},
+ {0x1.7f0292p+5, 0x1.51eb86p-2},
+ {0x1.569446p-1, 0x1.666666p+0},
+ {0x1.282c2cp+0, 0x1.d1746p-1},
+ {0x1.211234p-4, 0x1.249236p-2},
+ {0x1.3e69e6p+4, 0x1.19999ap+0},
+ {0x1.cdde38p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.bb68aep-1, 0x1.666666p+0},
+ {0x1.002fc6p+0, 0x1.d1746p-1},
+ {0x1.0017p+0, 0x1.51eb86p-2},
+ {0x1.00e26ep+0, 0x1.51eb86p-2},
+ {0x1.36e9aep+3, 0x1.51eb86p-2},
+ {0x1.284fb2p-1, 0x1.249236p-2},
+ {0x1.e9aa68p+16, 0x1.99999ap-2},
+ {0x1.cdfce4p-5, 0x1.249236p-2},
+ {0x1.cf67b2p-6, 0x1.19999ap+0},
+ {0x1.e4f638p-1, 0x1.666666p+0},
+ {0x1.3ae36p+13, 0x1.19999ap+0},
+ {0x1.fbc622p-1, 0x1.666666p+0},
+ {0x1.004fap+0, 0x1.51eb86p-2},
+ {0x1.0082aep+0, 0x1.249236p-2},
+ {0x1.3e4086p-1, 0x1.19999ap+0},
+ {0x1.10483cp+3, 0x1.51eb86p-2},
+ {0x1.6e9a2cp-3, 0x1.249236p-2},
+ {0x1.7543aep-4, 0x1.19999ap+0},
+ {0x1.1f4fb6p-1, 0x1.666666p+0},
+ {0x1.4fc866p+3, 0x1.99999ap-2},
+ {0x1.013fdp-2, 0x1.249236p-2},
+ {0x1.486e7ep-2, 0x1.19999ap+0},
+ {0x1.2fa4a4p-1, 0x1.666666p+0},
+ {0x1.00053ep+0, 0x1.99999ap-2},
+ {0x1.f63f78p-1, 0x1.666666p+0},
+ {0x1.771366p+12, 0x1.51eb86p-2},
+ {0x1.007d4ep+0, 0x1.d1746p-1},
+ {0x1.416ae2p+11, 0x1.d1746p-1},
+ {0x1.0ab628p+0, 0x1.d1746p-1},
+ {0x1.67297p-3, 0x1.666666p+0},
+ {0x1.3e8e5p+2, 0x1.19999ap+0},
+ {0x1.4f0542p-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.7a03e6p-1, 0x1.666666p+0},
+ {0x1.0515e6p+6, 0x1.d1746p-1},
+ {0x1.a3443ep-2, 0x1.666666p+0},
+ {0x1.72b452p-3, 0x1.19999ap+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.8f7fp+4, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.fd3c36p-3, 0x1.249236p-2},
+ {0x1.3445bap+0, 0x1.19999ap+0},
+ {0x1.2be48ap-12, 0x1.4f5c28p+0},
+ {0x1.5262acp+6, 0x1.19999ap+0},
+ {0x1.fbc3c6p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.fcbfb2p-1, 0x1.666666p+0},
+ {0x1.392556p+6, 0x1.19999ap+0},
+ {0x1.fd22c8p-1, 0x1.249236p-2},
+ {0x1.015572p+0, 0x1.d1746p-1},
+ {0x1.5d17e8p+1, 0x1.99999ap-2},
+ {0x1.8700f8p+4, 0x1.51eb86p-2},
+ {0x1.0b19bcp+4, 0x1.d1746p-1},
+ {0x1.7f4b4p-1, 0x1.666666p+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.c52ac8p-2, 0x1.249236p-2},
+ {0x1.b146a6p+2, 0x1.d1746p-1},
+ {0x1.be4474p-1, 0x1.666666p+0},
+ {0x1.801afap+7, 0x1.51eb86p-2},
+ {0x1.0d3f18p-2, 0x1.666666p+0},
+ {0x1.0cc672p+0, 0x1.51eb86p-2},
+ {0x1.0270f4p+0, 0x1.99999ap-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.c363f6p-2, 0x1.249236p-2},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.0c6f7ap-18, 0x1.4f5c28p+0},
+ {0x1.349386p-6, 0x1.19999ap+0},
+ {0x1.d78f8ap-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.5680ep-1, 0x1.666666p+0},
+ {0x1.3e472cp+2, 0x1.19999ap+0},
+ {0x1.b70186p+2, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.7ec27ap+2, 0x1.51eb86p-2},
+ {0x1.42c14cp+6, 0x1.51eb86p-2},
+ {0x1.4ba366p+0, 0x1.51eb86p-2},
+ {0x1.3af0cp-1, 0x1.666666p+0},
+ {0x1.6a6a1ap+1, 0x1.51eb86p-2},
+ {0x1.9de00ep-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.a2b778p-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.0095bp+0, 0x1.249236p-2},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.0011f4p+0, 0x1.d1746p-1},
+ {0x1.1b8d92p+0, 0x1.51eb86p-2},
+ {0x1.874774p-1, 0x1.19999ap+0},
+ {0x1.dbbc0ap-1, 0x1.249236p-2},
+ {0x1.0c52a4p+0, 0x1.99999ap-2},
+ {0x1.29cbacp-10, 0x1.a3d70ap-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.f63de6p-1, 0x1.666666p+0},
+ {0x1.55b308p+0, 0x1.d1746p-1},
+ {0x1.973cb4p-1, 0x1.666666p+0},
+ {0x1.bb80fep+0, 0x1.51eb86p-2},
+ {0x1.3ac3fp+3, 0x1.19999ap+0},
+ {0x1.000992p+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.fd5498p-2, 0x1.249236p-2},
+ {0x1.88fc6ep+14, 0x1.d1746p-1},
+ {0x1.d23c42p-3, 0x1.666666p+0},
+ {0x1.27f4f4p+17, 0x1.99999ap-2},
+ {0x1.c83794p-1, 0x1.666666p+0},
+ {0x1.39218ap+9, 0x1.19999ap+0},
+ {0x1.2d0072p-2, 0x1.666666p+0},
+ {0x1.3f7836p+0, 0x1.51eb86p-2},
+ {0x1.3a7654p-3, 0x1p-1},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.1f9ea6p+1, 0x1.d1746p-1},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.aee194p+2, 0x1.d1746p-1},
+ {0x1.8a4cc6p-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.64096p-4, 0x1.249236p-2},
+ {0x1.1bb116p+9, 0x1.d1746p-1},
+ {0x1.d83d7ap-3, 0x1.666666p+0},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.c5de9cp-3, 0x1.666666p+0},
+ {0x1.001052p+0, 0x1.99999ap-2},
+ {0x1.ba177p+10, 0x1.99999ap-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.97dd22p+0, 0x1.d1746p-1},
+ {0x1.513404p-2, 0x1.249236p-2},
+ {0x1.45fecap+0, 0x1.d1746p-1},
+ {0x1.92a738p-19, 0x1.4f5c28p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.072218p-3, 0x1.666666p+0},
+ {0x1.b0296cp+1, 0x1.d1746p-1},
+ {0x1.a76d12p-2, 0x1.666666p+0},
+ {0x1.7b02b2p+6, 0x1.51eb86p-2},
+ {0x1.3cfa48p-1, 0x1.b51eb8p+3},
+ {0x1.3e43ccp-1, 0x1.19999ap+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.168b3ap+9, 0x1.d1746p-1},
+ {0x1.01a9dap+0, 0x1.666666p+0},
+ {0x1.0008b8p+0, 0x1.99999ap-2},
+ {0x1.24e3dep-1, 0x1.249236p-2},
+ {0x1.62fdp+0, 0x1.99999ap-2},
+ {0x1.15c7cep-1, 0x1.666666p+0},
+ {0x1.12aee2p+0, 0x1.d1746p-1},
+ {0x1.959b3ep-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.433c3ep-1, 0x1.19999ap+0},
+ {0x1.007f66p+0, 0x1.51eb86p-2},
+ {0x1.1848eep+9, 0x1.d1746p-1},
+ {0x1.743a64p-3, 0x1.249236p-2},
+ {0x1.771704p+12, 0x1.51eb86p-2},
+ {0x1.c4fc1ep-14, 0x1.a3d70ap-2},
+ {0x1.1b840ap+9, 0x1.d1746p-1},
+ {0x1.c97daep-1, 0x1.666666p+0},
+ {0x1.5e806cp+16, 0x1.99999ap-2},
+ {0x1.cccfaep-1, 0x1.666666p+0},
+ {0x1.7e173p+11, 0x1.51eb86p-2},
+ {0x1.ab69dcp-2, 0x1.bp+3},
+ {0x1.3acc74p+9, 0x1.19999ap+0},
+ {0x1.46c2ep+5, 0x1.51eb86p-2},
+ {0x1.630faep-1, 0x1.249236p-2},
+ {0x1.4f5de6p+15, 0x1.99999ap-2},
+ {0x1.3422ccp-3, 0x1.666666p+0},
+ {0x1.855cfap-1, 0x1.19999ap+0},
+ {0x1.bbab44p-1, 0x1.249236p-2},
+ {0x1.00151ap+0, 0x1.d1746p-1},
+ {0x1.d6277cp-2, 0x1.666666p+0},
+ {0x1.7b5aeap-6, 0x1.19999ap+0},
+ {0x1.51c9b4p-2, 0x1.666666p+0},
+ {0x1.00028ep+0, 0x1.51eb86p-2},
+ {0x1.001dbp+0, 0x1.51eb86p-2},
+ {0x1.447e4ap-5, 0x1.19999ap+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.380992p-3, 0x1.249236p-2},
+ {0x1.4fc0b2p+3, 0x1.99999ap-2},
+ {0x1.f75104p-16, 0x1.a3d70ap-2},
+ {0x1.47c18cp+0, 0x1.99999ap-2},
+ {0x1.f7a1c2p-1, 0x1.666666p+0},
+ {0x1.26d7a6p+0, 0x1.d1746p-1},
+ {0x1.7d145ep-2, 0x1.666666p+0},
+ {0x1.005e1cp+0, 0x1.99999ap-2},
+ {0x1.6633fp-1, 0x1.90a3d8p+2},
+ {0x1.3c2a78p+2, 0x1.19999ap+0},
+ {0x1.79c5f8p+10, 0x1.99999ap-2},
+ {0x1.b1b8aap-4, 0x1.249236p-2},
+ {0x1.000b78p+0, 0x1.d1746p-1},
+ {0x1.a65c0cp-1, 0x1.666666p+0},
+ {0x1.265c7p+0, 0x1.19999ap+0},
+ {0x1.c08df4p-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.4eeccp-2, 0x1.666666p+0},
+ {0x1.002b84p+0, 0x1.51eb86p-2},
+ {0x1.818b94p+1, 0x1.243808p-2},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.aecbacp+2, 0x1.d1746p-1},
+ {0x1.3fc19cp+8, 0x1.51eb86p-2},
+ {0x1.9a1912p+0, 0x1.d1746p-1},
+ {0x1.00781p-2, 0x1.249236p-2},
+ {0x1.8e448ep+15, 0x1.99999ap-2},
+ {0x1.f4b556p-1, 0x1.249236p-2},
+ {0x1.4ee8d2p-4, 0x1.19999ap+0},
+ {0x1.b66948p-1, 0x1.666666p+0},
+ {0x1.f7810ep+2, 0x1.d1746p-1},
+ {0x1.d728a6p-3, 0x1.666666p+0},
+ {0x1.9e1b2ap+1, 0x1.99999ap-2},
+ {0x1.00c2f8p+0, 0x1.d1746p-1},
+ {0x1.e92694p+4, 0x1.51eb86p-2},
+ {0x1.5ec3d2p+3, 0x1.51eb86p-2},
+ {0x1.cfa072p-1, 0x1.249236p-2},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.f9ea36p-1, 0x1.666666p+0},
+ {0x1.012c38p+0, 0x1.99999ap-2},
+ {0x1.b0ac3ap-4, 0x1.249236p-2},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.02f48cp-1, 0x1.666666p+0},
+ {0x1.4b9a2p+3, 0x1.99999ap-2},
+ {0x1.ae4086p-4, 0x1.d51eb8p+2},
+ {0x1.d64c3cp+3, 0x1.51eb86p-2},
+ {0x1.7d0054p+4, 0x1.19999ap+0},
+ {0x1.fb73f4p-1, 0x1.249236p-2},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.217f42p-4, 0x1.249236p-2},
+ {0x1.bec29cp+1, 0x1.51eb86p-2},
+ {0x1.c15098p-11, 0x1.a3d70ap-2},
+ {0x1.1f61ccp+1, 0x1.51eb86p-2},
+ {0x1.5a02fcp-1, 0x1.666666p+0},
+ {0x1.4cd49p+5, 0x1.51eb86p-2},
+ {0x1.9a964ep-3, 0x1.666666p+0},
+ {0x1.40c1b4p+7, 0x1.51eb86p-2},
+ {0x1.45a44cp+11, 0x1.d1746p-1},
+ {0x1.46c16ep+5, 0x1.51eb86p-2},
+ {0x1.0953ecp+8, 0x1.d1746p-1},
+ {0x1.b07d0ap-4, 0x1.249236p-2},
+ {0x1.79035ap+7, 0x1.51eb86p-2},
+ {0x1.f2e276p-1, 0x1.666666p+0},
+ {0x1.3b81d8p+1, 0x1.51eb86p-2},
+ {0x1.4ec8d6p-2, 0x1.666666p+0},
+ {0x1.3e3582p+0, 0x1.d1746p-1},
+ {0x1.77ee2cp-1, 0x1.666666p+0},
+ {0x1.000314p+0, 0x1.51eb86p-2},
+ {0x1.bf5ba2p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.00001p+0, 0x1.99999ap-2},
+ {0x1.1d8876p+4, 0x1.51eb86p-2},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.f8d5a6p-1, 0x1.249236p-2},
+ {0x1.16d7fap+0, 0x1.99999ap-2},
+ {0x1.aaed9ap-3, 0x1.249236p-2},
+ {0x1.029446p+0, 0x1.d1746p-1},
+ {0x1.0cf0b6p-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.e6f9fcp-1, 0x1.666666p+0},
+ {0x1.32b074p+0, 0x1.d1746p-1},
+ {0x1.2a9e6p+18, 0x1.99999ap-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.4f36acp+0, 0x1.d1746p-1},
+ {0x1.a7659p+15, 0x1.99999ap-2},
+ {0x1.b91298p-1, 0x1.19999ap+0},
+ {0x1.058b6p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.f6d9bep-1, 0x1.666666p+0},
+ {0x1.4f8b58p-10, 0x1.19999ap+0},
+ {0x1.fdb2b4p-3, 0x1.666666p+0},
+ {0x1.003e86p+0, 0x1.d1746p-1},
+ {0x1.1ec4e8p-1, 0x1.666666p+0},
+ {0x1.001c82p+0, 0x1.99999ap-2},
+ {0x1.870276p+4, 0x1.51eb86p-2},
+ {0x1.000f66p+0, 0x1.51eb86p-2},
+ {0x1.000d5ep+0, 0x1.51eb86p-2},
+ {0x1.1ba3ecp-1, 0x1.666666p+0},
+ {0x1.03eb4ap+0, 0x1.99999ap-2},
+ {0x1.190b64p-1, 0x1.249236p-2},
+ {0x1.3e8d38p+3, 0x1.19999ap+0},
+ {0x1.9cba3p-3, 0x1.666666p+0},
+ {0x1.00001p+0, 0x1.99999ap-2},
+ {0x1.38c0aep-1, 0x1.666666p+0},
+ {0x1.a8082cp+4, 0x1.19999ap+0},
+ {0x1.507704p+1, 0x1.d1746p-1},
+ {0x1.90646cp+14, 0x1.d1746p-1},
+ {0x1.00ae74p+0, 0x1.99999ap-2},
+ {0x1.c5714cp-2, 0x1.249236p-2},
+ {0x1.00577ep+0, 0x1.d1746p-1},
+ {0x1.d87012p-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.05aa2ep-3, 0x1.249236p-2},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.f548ccp-1, 0x1.666666p+0},
+ {0x1.51c5c6p-8, 0x1.19999ap+0},
+ {0x1.f2717ap-1, 0x1.666666p+0},
+ {0x1.0ca148p+1, 0x1.51eb86p-2},
+ {0x1.3884c4p+18, 0x1.99999ap-2},
+ {0x1.000fecp+0, 0x1.51eb86p-2},
+ {0x1.000022p+0, 0x1.99999ap-2},
+ {0x1.292428p-2, 0x1.249236p-2},
+ {0x1.ad8caap+25, 0x1.99999ap-2},
+ {0x1.a5b27p-1, 0x1.249236p-2},
+ {0x1.f1886ep-2, 0x1.19999ap+0},
+ {0x1.b87486p-1, 0x1.666666p+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.bda598p-1, 0x1.666666p+0},
+ {0x1.29f40ap-2, 0x1.19999ap+0},
+ {0x1.c2d2bcp-2, 0x1.d51eb8p+2},
+ {0x1.019568p+0, 0x1.d1746p-1},
+ {0x1.062318p+0, 0x1.d1746p-1},
+ {0x1.b23a2ap-3, 0x1.249236p-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.0432a8p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.0642cp-3, 0x1.249236p-2},
+ {0x1.00463p+0, 0x1.51eb86p-2},
+ {0x1.651ap-3, 0x1.666666p+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.142adcp+0, 0x1.23ea2ep-2},
+ {0x0p+0, 0x1.51eb86p-2},
+ {0x1.000608p+0, 0x1.51eb86p-2},
+ {0x1.0008b8p+0, 0x1.51eb86p-2},
+ {0x1.b702acp+2, 0x1.51eb86p-2},
+ {0x1.50eb24p-1, 0x1.249236p-2},
+ {0x1.0581ecp+3, 0x1.d1746p-1},
+ {0x1.6f5cbp-3, 0x1.249236p-2},
+ {0x1.12cdf2p+0, 0x1.d1746p-1},
+ {0x1.6678cp-3, 0x1.666666p+0},
+ {0x1.032faap+0, 0x1.d1746p-1},
+ {0x1.a112fep-2, 0x1.666666p+0},
+ {0x1.594296p+2, 0x1.51eb86p-2},
+ {0x1.262026p-8, 0x1.19999ap+0},
+ {0x1.02bdc2p+0, 0x1.51eb86p-2},
+ {0x1.c400aep+3, 0x1.d1746p-1},
+ {0x1.da454ep-1, 0x1.249236p-2},
+ {0x1.184adap+9, 0x1.d1746p-1},
+ {0x1.5c5a3ep-1, 0x1.666666p+0},
+ {0x1.ceada6p+5, 0x1.d1746p-1},
+ {0x1.8cf03p-1, 0x1.249236p-2},
+ {0x1.569b5ep+12, 0x1.d1746p-1},
+ {0x1.7d028ap-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.4a7b4ep-1, 0x1.8f5c28p+3},
+ {0x1.031972p+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.b701dap+2, 0x1.51eb86p-2},
+ {0x1.3ed14p+12, 0x1.51eb86p-2},
+ {0x1.04052ep+0, 0x1.249236p-2},
+ {0x1.00521ep+0, 0x1.51eb86p-2},
+ {0x1.d094e6p-1, 0x1.249236p-2},
+ {0x1.1715cp+5, 0x1.d1746p-1},
+ {0x1.3a08cp-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.661c7ap-3, 0x1.666666p+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.017e02p+0, 0x1.d1746p-1},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.ae8e8ep+2, 0x1.d1746p-1},
+ {0x1.d58212p-1, 0x1.249236p-2},
+ {0x1.7abca6p+7, 0x1.d1746p-1},
+ {0x1.f0eb68p-1, 0x1.666666p+0},
+ {0x1.2c3a1ep+10, 0x1.d1746p-1},
+ {0x1.09af18p-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.543e1p-2, 0x1.666666p+0},
+ {0x1.3e5f32p+9, 0x1.19999ap+0},
+ {0x1.4d3112p-1, 0x1.8f5c28p+3},
+ {0x1.000874p+0, 0x1.51eb86p-2},
+ {0x1.7f7af6p-1, 0x1.19999ap+0},
+ {0x1.7ca2p+3, 0x1.51eb86p-2},
+ {0x1.56a6e4p+1, 0x1.99999ap-2},
+ {0x1.3bedfap-1, 0x1.666666p+0},
+ {0x1.00a2ap+1, 0x1.51eb86p-2},
+ {0x1.8a0b1cp-1, 0x1.249236p-2},
+ {0x1.744728p+5, 0x1.19999ap+0},
+ {0x1.071f7ap-3, 0x1.666666p+0},
+ {0x1.97d2a6p+0, 0x1.d1746p-1},
+ {0x1.a52c9ep-2, 0x1.666666p+0},
+ {0x1.4p+2, 0x1.51eb86p-2},
+ {0x1.0f6b1ap+0, 0x1.d1746p-1},
+ {0x1.0e630ep+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.6a2d72p-1, 0x1.249236p-2},
+ {0x1.0001a4p+0, 0x1.51eb86p-2},
+ {0x1.a5c358p-3, 0x1.249236p-2},
+ {0x1.2fb7c8p+28, 0x1.99999ap-2},
+ {0x1.65eaacp-3, 0x1.666666p+0},
+ {0x1.59a30ap-8, 0x1.19999ap+0},
+ {0x1.3539fcp-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.fb851ep-1, -0x1.249236p-2},
+ {0x1.000032p+0, 0x1.99999ap-2},
+ {0x1.358666p+0, 0x1.99999ap-2},
+ {0x1.0014c6p+0, 0x1.51eb86p-2},
+ {0x1.02eeb8p+0, 0x1.d1746p-1},
+ {0x1.348776p-3, 0x1.666666p+0},
+ {0x1.3293d2p-9, 0x1.19999ap+0},
+ {0x1.00d1d8p+0, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.796bdcp-1, 0x1.666666p+0},
+ {0x1.006888p+0, 0x1.d1746p-1},
+ {0x1.396872p-1, 0x1.666666p+0},
+ {0x1.6318c2p+2, 0x1.d1746p-1},
+ {0x1.001398p+0, 0x1.51eb86p-2},
+ {0x1.e37a7p+0, 0x1.d1746p-1},
+ {0x1.99413ap+1, 0x1.51eb86p-2},
+ {0x1.29fep-1, 0x1.249236p-2},
+ {0x1.3ae404p+8, 0x1.19999ap+0},
+ {0x1.06937ep-3, 0x1.249236p-2},
+ {0x1.208dacp+13, 0x1.99999ap-2},
+ {0x1.d4039ap-2, 0x1.666666p+0},
+ {0x1.7e5aaap+6, 0x1.19999ap+0},
+ {0x1.5385c6p-2, 0x1.666666p+0},
+ {0x1.00042p+0, 0x1.51eb86p-2},
+ {0x1.fca516p-1, -0x1.249236p-2},
+ {0x1.713616p+13, 0x1.d1746p-1},
+ {0x1.0030c2p+0, 0x1.99999ap-2},
+ {0x1.cee0f4p-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.071ac2p-3, 0x1.666666p+0},
+ {0x1.970316p+3, 0x1.51eb86p-2},
+ {0x1.284f0ap-2, 0x1.249236p-2},
+ {0x1.8bd418p+14, 0x1.d1746p-1},
+ {0x1.94432cp-1, 0x1.666666p+0},
+ {0x1.398fd6p+0, 0x1.51eb86p-2},
+ {0x1.33aa36p-3, 0x1.666666p+0},
+ {0x1.8f27bcp+1, 0x1.51eb86p-2},
+ {0x1.36dfb6p+5, 0x1.99999ap-2},
+ {0x1.5ea8b8p+1, 0x1.51eb86p-2},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.e5dbfcp-1, 0x1.249236p-2},
+ {0x1.778264p+9, 0x1.51eb86p-2},
+ {0x1.53bd16p-13, 0x1.99999ap-1},
+ {0x1.968e32p+3, 0x1.d1746p-1},
+ {0x1.e38066p-1, 0x1.666666p+0},
+ {0x1.1bcf06p+13, 0x1.99999ap-2},
+ {0x1.5c5308p-1, 0x1.666666p+0},
+ {0x1.00096p+0, 0x1.51eb86p-2},
+ {0x1.0494e6p+0, 0x1.249236p-2},
+ {0x1.001b32p+0, 0x1.51eb86p-2},
+ {0x1.3ee508p+11, 0x1.51eb86p-2},
+ {0x1.af2d8p-4, 0x1.249236p-2},
+ {0x1.00547ap+0, 0x1.d1746p-1},
+ {0x1.eaa5e8p-1, 0x1.666666p+0},
+ {0x1.ae62a6p+8, 0x1.99999ap-2},
+ {0x1.013c04p-1, 0x1.249236p-2},
+ {0x1.3e527p+12, 0x1.19999ap+0},
+ {0x1.754f5ap-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.1f05eap+0, 0x1.2360dp-2},
+ {0x1.f7037ep+1, 0x1.51eb86p-2},
+ {0x1.2fd448p+10, 0x1.d1746p-1},
+ {0x1.001cd6p+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.289daep-2, 0x1.249236p-2},
+ {0x1.1f6d34p+0, 0x1.d1746p-1},
+ {0x1.3cab82p-13, 0x1.99999ap-1},
+ {0x1.ba54e4p+20, 0x1.99999ap-2},
+ {0x1.2ce1c6p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.8af3c2p-1, 0x1.666666p+0},
+ {0x1.d57ffap-8, 0x1.19999ap+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.a7290ep+30, 0x1.99999ap-2},
+ {0x1.02c1b2p+0, 0x1.99999ap-2},
+ {0x1.fc2706p+1, 0x1.d1746p-1},
+ {0x1.06ba4ap-3, 0x1.666666p+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.f30036p-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.4f34d6p-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.7b431p-2, 0x1.666666p+0},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.a72726p+15, 0x1.99999ap-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.4f92bp-4, 0x1.19999ap+0},
+ {0x1.f740a2p-1, 0x1.249236p-2},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.7b6aa4p-1, 0x1.666666p+0},
+ {0x1.4e0382p+0, 0x1.99999ap-2},
+ {0x1.e80b46p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.b4c122p-1, 0x1.666666p+0},
+ {0x1.391bc6p+1, 0x1.19999ap+0},
+ {0x1.02e4cp+0, 0x1.249236p-2},
+ {0x1.cc610ep+8, 0x1.99999ap-2},
+ {0x1.0017dap+0, 0x1.51eb86p-2},
+ {0x1.0005c4p+0, 0x1.51eb86p-2},
+ {0x1.4d716ep-4, 0x1.19999ap+0},
+ {0x1.29746p-2, 0x1.666666p+0},
+ {0x1.3aefeap+13, 0x1.19999ap+0},
+ {0x1.8e395p-1, 0x1.249236p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.d4727ep-3, 0x1.666666p+0},
+ {0x1.eb4cfep+1, 0x1.51eb86p-2},
+ {0x1.fb3a48p-1, 0x1.666666p+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.39092ap+5, 0x1.19999ap+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.003904p+0, 0x1.d1746p-1},
+ {0x1.ce50c6p-5, 0x1.249236p-2},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.52b0a6p-12, 0x1.4f5c28p+0},
+ {0x1.2f8d58p+13, 0x1.99999ap-2},
+ {0x1.d28178p-3, 0x1.666666p+0},
+ {0x1.3ee4a4p+11, 0x1.51eb86p-2},
+ {0x1.3cb38p-1, 0x1.666666p+0},
+ {0x1.6847c4p+0, 0x1.d1746p-1},
+ {0x1.dd7d3ap-2, 0x1.b51eb8p+3},
+ {0x1.b704a2p+2, 0x1.51eb86p-2},
+ {0x1.40c324p+7, 0x1.51eb86p-2},
+ {0x1.7900dep+7, 0x1.51eb86p-2},
+ {0x1.000758p+0, 0x1.51eb86p-2},
+ {0x1.65460ap-3, 0x1.666666p+0},
+ {0x1.7e1fcp-3, 0x1.19999ap+0},
+ {0x1.649d38p-4, 0x1.249236p-2},
+ {0x1.186cbp+9, 0x1.d1746p-1},
+ {0x1.d63886p-3, 0x1.666666p+0},
+ {0x1.3b814p+1, 0x1.51eb86p-2},
+ {0x1.d5c854p-3, 0x1.666666p+0},
+ {0x1.11e27ap+0, 0x1.d1746p-1},
+ {0x1.aed4ep+5, 0x1.99999ap-2},
+ {0x1.7f023cp+5, 0x1.51eb86p-2},
+ {0x1.000032p+0, 0x1.99999ap-2},
+ {0x1.22089ep-4, 0x1.249236p-2},
+ {0x1.ad8b4p+4, 0x1.d1746p-1},
+ {0x1.6ee41ap-3, 0x1.249236p-2},
+ {0x1.1e27f2p+0, 0x1.d1746p-1},
+ {0x1.fa8a62p-1, 0x1.666666p+0},
+ {0x1.38c468p+8, 0x1.d1746p-1},
+ {0x1.d6ce36p-2, 0x1.666666p+0},
+ {0x1.037ec4p+0, 0x1.51eb86p-2},
+ {0x1.16d1cp-1, 0x1.70a3d8p+3},
+ {0x1.25c456p+4, 0x1.19999ap+0},
+ {0x1.870122p+4, 0x1.51eb86p-2},
+ {0x1.365fd8p-3, 0x1.249236p-2},
+ {0x1.fbdc8cp-1, 0x1.19999ap+0},
+ {0x1.d56756p-3, 0x1.666666p+0},
+ {0x1.cf888p+5, 0x1.d1746p-1},
+ {0x1.70b9bap-1, 0x1.249236p-2},
+ {0x1.391ddep-3, 0x1.19999ap+0},
+ {0x1.a7a9e2p-1, 0x1.666666p+0},
+ {0x1.a6de18p+4, 0x1.d1746p-1},
+ {0x1.02ad6p-1, 0x1.666666p+0},
+ {0x1.06e01ap+0, 0x1.51eb86p-2},
+ {0x1.3fb284p+3, 0x1.d1746p-1},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.00062ap+0, 0x1.51eb86p-2},
+ {0x1.f41e14p-1, 0x1.666666p+0},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.fa07b4p-3, 0x1.249236p-2},
+ {0x0p+0, 0x1.19999ap+0},
+ {0x1.d84ad8p-2, 0x1.666666p+0},
+ {0x1.bec366p+1, 0x1.51eb86p-2},
+ {0x1.e7d6d8p-1, 0x1.666666p+0},
+ {0x1.3e5eaap-3, 0x1.19999ap+0},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.001d7ep+0, 0x1.51eb86p-2},
+ {0x1p+0, 0x1.99999ap-2},
+ {0x1.05681ep-3, 0x1.249236p-2},
+ {0x1.01a05ap+0, 0x1.99999ap-2},
+ {0x1.355f78p-3, 0x1.666666p+0},
+ {0x1.3ae4e6p+12, 0x1.19999ap+0},
+ {0x1.06d938p-3, 0x1.249236p-2},
+ {0x1p+0, 0x1.d1746p-1},
+ {0x1.e50fe8p-1, 0x1.666666p+0},
+ {0x1.631f36p+0, 0x1.51eb86p-2},
+ {0x1.39a36ep+0, 0x1.23e9a6p-2},
+ {0x1p+0, 0x1.51eb86p-2},
+ {0x1.01d0d8p+0, 0x1.51eb86p-2},
+ {0x1.a94b56p+3, 0x1.d1746p-1},
+ {0x1.1a689p+1, 0x1.99999ap-2},
+};
diff --git a/benchmarks/sincosf_input.cpp b/benchmarks/sincosf_input.cpp
new file mode 100644
index 0000000..2d05259
--- /dev/null
+++ b/benchmarks/sincosf_input.cpp
@@ -0,0 +1,4156 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+static const std::vector<float> sincosf_input0 = {
+ 0x1.459afcp-4,
+ 0x1.59abp-5,
+ 0x1.446ee6p-7,
+ 0x1.97d07ap-7,
+ 0x1.b03726p-5,
+ 0x1.1f609ap-8,
+ 0x1.85ffd8p-6,
+ 0x1.2e341p-5,
+ 0x1.d49c2p-7,
+ 0x1.a7d716p-6,
+ 0x1.8240e6p-7,
+ 0x1.58c1f6p-4,
+ 0x1.616cbep-5,
+ 0x1.98133ap-5,
+ 0x1.dcca54p-7,
+ 0x1.2a152ap-6,
+ 0x1.f6894ep-8,
+ 0x1.33ca2ap-4,
+ 0x1.5ae214p-5,
+ 0x1.b12626p-5,
+ 0x1.7d1e4cp-5,
+ 0x1.175212p-4,
+ 0x1.0ec2e6p-10,
+ 0x1.a9c074p-12,
+ 0x1.e1a29p-6,
+ 0x1.c5fd4p-7,
+ 0x1.1dcd4ep-4,
+ 0x1.9372c6p-8,
+ 0x1.0af046p-4,
+ 0x1.67b5e4p-4,
+ 0x1.fba9eep-6,
+ 0x1.0537a6p-4,
+ 0x1.c4376ep-5,
+ 0x1.7f9a5cp-5,
+ 0x1.9bb62p-6,
+ 0x1.b2a32ap-5,
+ 0x1.5b2058p-6,
+ 0x1.3ba422p-4,
+ 0x1.c66dc4p-5,
+ 0x1.30b1dap-6,
+ 0x1.64463cp-4,
+ 0x1.d3224ap-7,
+ 0x1.c111b6p-5,
+ 0x1.a8b876p-5,
+ 0x1.ea528ap-6,
+ 0x1.94b15ap-5,
+ 0x1.181806p-5,
+ 0x1.91fp-4,
+ 0x1.773656p-4,
+ 0x1.40272cp-7,
+ 0x1.e3b15ap-5,
+ 0x1.385f2ap-5,
+ 0x1.809466p-4,
+ 0x1.567efcp-5,
+ 0x1.0f722cp-4,
+ 0x1.4ffb48p-4,
+ 0x1.b37876p-6,
+ 0x1.4a32e8p-9,
+ 0x1.74b446p-4,
+ 0x1.f0ba44p-5,
+ 0x1.f0157p-6,
+ 0x1.172bfcp-6,
+ 0x1.650236p-5,
+ 0x1.31539ap-6,
+ 0x1.eda106p-5,
+ 0x1.8ed322p-4,
+ 0x1.4f016ep-5,
+ 0x1.6edfcep-7,
+ 0x1.f13d4p-6,
+ 0x1.188416p-4,
+ 0x1.ad35a6p-6,
+ 0x1.38c4f6p-7,
+ 0x1.fb2f56p-6,
+ 0x1.0ba31cp-6,
+ 0x1.4db74p-8,
+ 0x1.7ce126p-4,
+ 0x1.f1c1e6p-5,
+ 0x1.3049c2p-4,
+ 0x1.9d91c6p-5,
+ 0x1.e81efep-6,
+ 0x1.da11ep-5,
+ 0x1.bb9026p-5,
+ 0x1.dc4d4ep-5,
+ 0x1.d02f2p-6,
+ 0x1.8401b6p-4,
+ 0x1.f9c19ep-5,
+ 0x1.4b59d8p-6,
+ 0x1.64a4eep-4,
+ 0x1.ff6f94p-5,
+ 0x1.79d102p-5,
+ 0x1.78f09ep-6,
+ 0x1.79b4e8p-4,
+ 0x1.12e79ep-4,
+ 0x1.1e7c9p-5,
+ 0x1.100d5ap-4,
+ 0x1.2cfc6ep-7,
+ 0x1.f7d13ap-5,
+ 0x1.7d5eacp-5,
+ 0x1.24b4acp-4,
+ 0x1.98213ep-5,
+ 0x1.472d6cp-9,
+ 0x1.a5ce6ap-5,
+ 0x1.c88b8ap-6,
+ 0x1.1cdcfap-5,
+ 0x1.0c2cf2p-4,
+ 0x1.f38a4p-5,
+ 0x1.001742p-7,
+ 0x1.8b0f1p-5,
+ 0x1.30a95p-4,
+ 0x1.dde28ep-5,
+ 0x1.133a3cp-5,
+ 0x1.86af2p-7,
+ 0x1.47352ap-4,
+ 0x1.2c5f3p-4,
+ 0x1.b582bep-10,
+ 0x1.48acbp-5,
+ 0x1.399514p-4,
+ 0x1.36eb06p-5,
+ 0x1.0b3556p-7,
+ 0x1.6419eep-4,
+ 0x1.878de2p-4,
+ 0x1.74863p-4,
+ 0x1.eaf13p-6,
+ 0x1.8b5976p-5,
+ 0x1.443812p-4,
+ 0x1.07023ep-6,
+ 0x1.f732c4p-8,
+ 0x1.37bad4p-4,
+ 0x1.2ed27p-4,
+ 0x1.78e61ap-4,
+ 0x1.ffbeeep-5,
+ 0x1.74a066p-4,
+ 0x1.f637ep-5,
+ 0x1.6d472ep-4,
+ 0x1.3582fep-4,
+ 0x1.d99544p-5,
+ 0x1.17be36p-8,
+ 0x1.6a1f26p-4,
+ 0x1.df4a3ap-5,
+ 0x1.6edb54p-4,
+ 0x1.755816p-5,
+ 0x1.4f0adep-5,
+ 0x1.be03ep-6,
+ 0x1.46c94ap-5,
+ 0x1.86237ep-5,
+ 0x1.667686p-4,
+ 0x1.669efcp-4,
+ 0x1.21624ep-5,
+ 0x1.f11174p-7,
+ 0x1.ddb66ap-7,
+ 0x1.efd4dap-7,
+ 0x1.d012e6p-5,
+ 0x1.1a082ep-4,
+ 0x1.c70534p-6,
+ 0x1.ced2dap-5,
+ 0x1.9b4934p-8,
+ 0x1.8fa3ecp-4,
+ 0x1.a458dep-7,
+ 0x1.ef29c6p-6,
+ 0x1.ee9f1p-6,
+ 0x1.6cf89p-4,
+ 0x1.5d1e4p-5,
+ 0x1.11154cp-4,
+ 0x1.600fe4p-4,
+ 0x1.e8dd76p-5,
+ 0x1.1a6f38p-4,
+ 0x1.3cfcbep-4,
+ 0x1.59372p-5,
+ 0x1.2114d2p-4,
+ 0x1.f4347ap-7,
+ 0x1.07d586p-4,
+ 0x1.865ae8p-4,
+ 0x1.87f3e4p-4,
+ 0x1.34d92ep-4,
+ 0x1.024cd4p-6,
+ 0x1.51b154p-5,
+ 0x1.602f06p-4,
+ 0x1.0cc1fep-6,
+ 0x1.00bff8p-5,
+ 0x1.6a3cf4p-4,
+ 0x1.6aeba6p-5,
+ 0x1.047078p-4,
+ 0x1.f12fe6p-10,
+ 0x1.9c5776p-9,
+ 0x1.8b73a4p-5,
+ 0x1.1bb78cp-7,
+ 0x1.694cc2p-5,
+ 0x1.3f149ap-4,
+ 0x1.1058dp-4,
+ 0x1.6d45b6p-5,
+ 0x1.23daa6p-4,
+ 0x1.015308p-4,
+ 0x1.6a7506p-4,
+ 0x1.73314ep-6,
+ 0x1.c80b24p-5,
+ 0x1.b25a2p-7,
+ 0x1.3cfc88p-5,
+ 0x1.998078p-5,
+ 0x1.fe3c4ep-11,
+ 0x1.806876p-6,
+ 0x1.dc44bp-5,
+ 0x1.b93836p-5,
+ 0x1.811c4cp-5,
+ 0x1.a95a2p-5,
+ 0x1.c9b6fep-5,
+ 0x1.be8a14p-6,
+ 0x1.06867ep-4,
+ 0x1.557f24p-4,
+ 0x1.95c78ep-4,
+ 0x1.aaaa6ep-5,
+ 0x1.2487a8p-4,
+ 0x1.2c000ep-6,
+ 0x1.9279c4p-5,
+ 0x1.9753c6p-6,
+ 0x1.d3544p-5,
+ 0x1.354a76p-5,
+ 0x1.b9f544p-5,
+ 0x1.08f782p-9,
+ 0x1.6c41p-5,
+ 0x1.1fdc9p-4,
+ 0x1.40beap-4,
+ 0x1.2b358ep-5,
+ 0x1.247e5ap-4,
+ 0x1.db7916p-6,
+ 0x1.7c4a2cp-7,
+ 0x1.5aafe4p-4,
+ 0x1.46e4ecp-5,
+ 0x1.30a74ep-4,
+ 0x1.093388p-4,
+ 0x1.d75e96p-5,
+ 0x1.52839p-4,
+ 0x1.4d3adep-4,
+ 0x1.0c02cep-5,
+ 0x1.30cc2p-9,
+ 0x1.83d762p-6,
+ 0x1.5b2848p-7,
+ 0x1.82b852p-5,
+ 0x1.7e2c88p-4,
+ 0x1.8afb06p-4,
+ 0x1.a45806p-6,
+ 0x1.d9b764p-7,
+ 0x1.6fe366p-5,
+ 0x1.9ae58ap-5,
+ 0x1.201ce4p-5,
+ 0x1.05fb7ap-5,
+ 0x1.aed9eap-5,
+ 0x1.4f37b4p-6,
+ 0x1.233a3ap-4,
+ 0x1.475b46p-5,
+ 0x1.0fa902p-4,
+ 0x1.0afbacp-4,
+ 0x1.4cb46p-6,
+ 0x1.5f14a8p-4,
+ 0x1.0e1fcep-4,
+ 0x1.73f4e6p-4,
+ 0x1.167076p-5,
+ 0x1.1cc472p-6,
+ 0x1.8af546p-4,
+ 0x1.0b1a86p-4,
+ 0x1.f8476ap-5,
+ 0x1.ca82fap-7,
+ 0x1.1af77ep-4,
+ 0x1.cc9aa6p-5,
+ 0x1.344876p-5,
+ 0x1.379a8ep-7,
+ 0x1.17f1eep-6,
+ 0x1.9655b6p-6,
+ 0x1.8460e8p-4,
+ 0x1.13cfc2p-8,
+ 0x1.d6621ap-5,
+ 0x1.7f3374p-4,
+ 0x1.0e27b8p-6,
+ 0x1.20f2b6p-4,
+ 0x1.d14cbp-6,
+ 0x1.a5bc3ep-6,
+ 0x1.970eb6p-9,
+ 0x1.2c74f6p-4,
+ 0x1.9350a6p-4,
+ 0x1.6ed0a8p-4,
+ 0x1.a1b104p-5,
+ 0x1.9e69bep-5,
+ 0x1.53e41p-4,
+ 0x1.82c90ep-15,
+ 0x1.925566p-5,
+ 0x1.67707ep-4,
+ 0x1.656e26p-4,
+ 0x1.5813cep-5,
+ 0x1.aaf276p-7,
+ 0x1.4f6d6p-4,
+ 0x1.b0b68p-6,
+ 0x1.537cd2p-6,
+ 0x1.88474ep-4,
+ 0x1.2c4bfep-6,
+ 0x1.5a1412p-6,
+ 0x1.371b5cp-5,
+ 0x1.620588p-4,
+ 0x1.0fc7eep-4,
+ 0x1.a10ad6p-10,
+ 0x1.5c502ep-4,
+ 0x1.17f6f6p-12,
+ 0x1.b43b36p-6,
+ 0x1.3b77acp-9,
+ 0x1.c6d36ap-5,
+ 0x1.cf0e6p-5,
+ 0x1.2288e2p-6,
+ 0x1.669acep-4,
+ 0x1.07548p-9,
+ 0x1.dee49ep-7,
+ 0x1.ab6cdap-7,
+ 0x1.975b6cp-5,
+ 0x1.32e408p-4,
+ 0x1.cfb5bap-6,
+ 0x1.b7841ep-6,
+ 0x1.c39f6ep-5,
+ 0x1.3602d2p-6,
+ 0x1.f8aa26p-5,
+ 0x1.824ac6p-4,
+ 0x1.6a3a2ap-4,
+ 0x1.5b319p-4,
+ 0x1.c821c4p-5,
+ 0x1.f919eap-8,
+ 0x1.88cd0cp-7,
+ 0x1.59ec98p-6,
+ 0x1.342db8p-4,
+ 0x1.83581cp-5,
+ 0x1.afeeaap-8,
+ 0x1.058496p-4,
+ 0x1.11a38ep-15,
+ 0x1.2542f4p-4,
+ 0x1.e5e0dp-8,
+ 0x1.8db9cep-5,
+ 0x1.758012p-4,
+ 0x1.d6ee9ep-6,
+ 0x1.3ed86cp-4,
+ 0x1.a77584p-6,
+ 0x1.7ddee6p-5,
+ 0x1.77bd66p-5,
+ 0x1.347638p-6,
+ 0x1.fb3ffap-5,
+ 0x1.ffe06p-7,
+ 0x1.8f0976p-5,
+ 0x1.8b773ap-4,
+ 0x1.83285ep-4,
+ 0x1.fe767ep-7,
+ 0x1.f5748ep-5,
+ 0x1.93c3eap-6,
+ 0x1.4f772ep-5,
+ 0x1.0b51aep-7,
+ 0x1.5efc64p-10,
+ 0x1.3f02p-5,
+ 0x1.61d4bep-8,
+ 0x1.264688p-4,
+ 0x1.85681ap-5,
+ 0x1.396aa2p-4,
+ 0x1.1c1bcep-7,
+ 0x1.bce02ap-5,
+ 0x1.df8f1ap-11,
+ 0x1.2ede78p-5,
+ 0x1.96220ep-5,
+ 0x1.5aef2cp-5,
+ 0x1.c14106p-5,
+ 0x1.1cfc82p-6,
+ 0x1.1e3b9ap-5,
+ 0x1.302d5p-5,
+ 0x1.59b9d8p-4,
+ 0x1.e1491ep-5,
+ 0x1.fd6b1p-5,
+ 0x1.6e6abp-6,
+ 0x1.69a978p-6,
+ 0x1.05166p-4,
+ 0x1.5158ccp-4,
+ 0x1.17ae4ap-6,
+ 0x1.750996p-4,
+ 0x1.4e2d9ap-5,
+ 0x1.5c792ap-4,
+ 0x1.468d7ep-7,
+ 0x1.5a0cbep-6,
+ 0x1.1be7b2p-4,
+ 0x1.b97d06p-5,
+ 0x1.9165f8p-10,
+ 0x1.6bf068p-4,
+ 0x1.6f991cp-4,
+ 0x1.cdeeap-8,
+ 0x1.0e3e6ap-5,
+ 0x1.a9b8f6p-5,
+ 0x1.2882ccp-4,
+ 0x1.e87436p-7,
+ 0x1.9cdf6ep-5,
+ 0x1.2f18dep-7,
+ 0x1.4de616p-9,
+ 0x1.6a9554p-4,
+ 0x1.a1a8ap-5,
+ 0x1.8301e8p-4,
+ 0x1.76fdeap-6,
+ 0x1.20367ep-4,
+ 0x1.137d0cp-5,
+ 0x1.0911cep-4,
+ 0x1.f6c27ep-5,
+ 0x1.ccf49ep-5,
+ 0x1.4efd48p-5,
+ 0x1.9408c8p-4,
+ 0x1.fbbe3ep-5,
+ 0x1.210dcap-4,
+ 0x1.1a7786p-7,
+ 0x1.6fb552p-4,
+ 0x1.4a435ep-4,
+ 0x1.937036p-5,
+ 0x1.6ee204p-4,
+ 0x1.8639bep-4,
+ 0x1.50b8aep-4,
+ 0x1.54e32p-8,
+ 0x1.4ba9fep-4,
+ 0x1.1a9c5p-4,
+ 0x1.6ea838p-4,
+ 0x1.94622ap-4,
+ 0x1.7fd3aep-4,
+ 0x1.45fb3ep-6,
+ 0x1.88fec2p-6,
+ 0x1.3103c6p-5,
+ 0x1.da44c6p-5,
+ 0x1.4b3eb8p-5,
+ 0x1.4dbd88p-7,
+ 0x1.93d294p-7,
+ 0x1.b1c6cap-6,
+ 0x1.1e1324p-5,
+ 0x1.9c0a5p-13,
+ 0x1.83542ep-4,
+ 0x1.b0636p-9,
+ 0x1.b1ea2ap-6,
+ 0x1.c66f04p-6,
+ 0x1.5b2cbcp-5,
+ 0x1.8cfb36p-4,
+ 0x1.846eeep-4,
+ 0x1.07e2bep-5,
+ 0x1.9b6406p-5,
+ 0x1.db943ap-9,
+ 0x1.cb3e26p-5,
+ 0x1.095ddep-4,
+ 0x1.5ae608p-5,
+ 0x1.40ee8ap-5,
+ 0x1.a0268ep-6,
+ 0x1.e74ecp-6,
+ 0x1.554a44p-4,
+ 0x1.8a38p-8,
+ 0x1.e9cd2ap-6,
+ 0x1.a10374p-5,
+ 0x1.90ea2ep-4,
+ 0x1.0564b6p-5,
+ 0x1.83fac6p-4,
+ 0x1.bb7f86p-5,
+ 0x1.6c83dap-6,
+ 0x1.bd50fep-5,
+ 0x1.33e4fcp-4,
+ 0x1.df8124p-6,
+ 0x1.c9b6fp-5,
+ 0x1.4ff75ap-4,
+ 0x1.3d5356p-4,
+ 0x1.80fcc4p-4,
+ 0x1.8e4c7ep-6,
+ 0x1.94cbbap-5,
+ 0x1.da5cf6p-5,
+ 0x1.400d5cp-4,
+ 0x1.b70786p-6,
+ 0x1.d7895p-10,
+ 0x1.a53c84p-7,
+ 0x1.1a3b8p-4,
+ 0x1.55e476p-4,
+ 0x1.d3a11p-5,
+ 0x1.4ad8c8p-4,
+ 0x1.39b0aep-4,
+ 0x1.6452bcp-5,
+ 0x1.34bae2p-9,
+ 0x1.10a36ap-5,
+ 0x1.e6f4dp-7,
+ 0x1.56dc64p-5,
+ 0x1.dc63p-6,
+ 0x1.a0d92ep-6,
+ 0x1.66b49ap-6,
+ 0x1.4cea18p-5,
+ 0x1.3b7526p-4,
+ 0x1.0497ecp-4,
+ 0x1.2825fep-4,
+ 0x1.9b23cep-7,
+ 0x1.4300d6p-4,
+ 0x1.899a26p-6,
+ 0x1.1090fep-4,
+ 0x1.13912ep-4,
+ 0x1.01726ap-4,
+ 0x1.443886p-4,
+ 0x1.d20b86p-5,
+ 0x1.13fe36p-4,
+ 0x1.25db14p-5,
+ 0x1.9dcb6p-6,
+ 0x1.7002ep-4,
+ 0x1.08bfc8p-6,
+ 0x1.9536dap-4,
+ 0x1.6bdfaep-6,
+ 0x1.172e76p-4,
+ 0x1.6fa03p-4,
+ 0x1.e5ccfap-6,
+ 0x1.3a7106p-4,
+ 0x1.35a09ep-4,
+ 0x1.7da25ep-4,
+ 0x1.f9749ep-6,
+ 0x1.d889p-8,
+ 0x1.3b7ab2p-7,
+ 0x1.0c464cp-4,
+ 0x1.814c0ep-4,
+ 0x1.30b25ap-4,
+ 0x1.80f212p-10,
+ 0x1.c301fp-5,
+ 0x1.21fb16p-4,
+};
+static const std::vector<float> sincosf_input1 = {
+ 0x1.3abdd4p-2,
+ 0x1.5f3bcap-2,
+ 0x1.a6afd4p-3,
+ 0x1.137a5ep-2,
+ 0x1.ad273p-2,
+ 0x1.8033fcp-3,
+ 0x1.030016p-2,
+ 0x1.48f07ap-1,
+ 0x1.5bc7c8p-1,
+ 0x1.41605ap-2,
+ 0x1.47d10cp-1,
+ 0x1.4094a4p-1,
+ 0x1.2ac11p-2,
+ 0x1.7c23p-2,
+ 0x1.8bc87cp-2,
+ 0x1.d66c0cp-3,
+ 0x1.4a34aap-1,
+ 0x1.e10218p-2,
+ 0x1.31e672p-2,
+ 0x1.1770f2p-3,
+ 0x1.2879dep-2,
+ 0x1.be261ep-3,
+ 0x1.565cfcp-3,
+ 0x1.e1d7bp-3,
+ 0x1.2246a6p-1,
+ 0x1.c49eecp-3,
+ 0x1.e9e46ep-2,
+ 0x1.482cbcp-1,
+ 0x1.959cdcp-2,
+ 0x1.20be2p-2,
+ 0x1.90410ap-2,
+ 0x1.9ca6ccp-4,
+ 0x1.5a5d0cp-1,
+ 0x1.8f2042p-2,
+ 0x1.51cd86p-1,
+ 0x1.4178a2p-2,
+ 0x1.5b9516p-1,
+ 0x1.0fe872p-1,
+ 0x1.0412c8p-1,
+ 0x1.18c058p-1,
+ 0x1.1b902p-3,
+ 0x1.363d0ap-1,
+ 0x1.3d3352p-3,
+ 0x1.2a7b02p-1,
+ 0x1.3299d6p-1,
+ 0x1.a2638p-2,
+ 0x1.94b1c2p-3,
+ 0x1.4a819ep-3,
+ 0x1.c224a6p-2,
+ 0x1.6fb556p-2,
+ 0x1.fa9ceap-2,
+ 0x1.3c8d82p-1,
+ 0x1.54b60cp-1,
+ 0x1.ca258ap-4,
+ 0x1.d45be4p-3,
+ 0x1.39ec8ep-1,
+ 0x1.b5abep-3,
+ 0x1.965b6cp-3,
+ 0x1.a326fp-2,
+ 0x1.4eb8fcp-1,
+ 0x1.dc9d7p-2,
+ 0x1.165044p-1,
+ 0x1.c6a0e6p-4,
+ 0x1.6d1326p-2,
+ 0x1.10e5p-1,
+ 0x1.54f77cp-1,
+ 0x1.f433e2p-2,
+ 0x1.ef71ccp-3,
+ 0x1.88083ep-3,
+ 0x1.30927ap-1,
+ 0x1.005594p-1,
+ 0x1.8741b6p-2,
+ 0x1.1c42fp-3,
+ 0x1.e7acdep-2,
+ 0x1.05addep-3,
+ 0x1.7b88b4p-2,
+ 0x1.534638p-1,
+ 0x1.ff31acp-2,
+ 0x1.1ffd52p-1,
+ 0x1.a840ap-3,
+ 0x1.1e0264p-2,
+ 0x1.298abep-2,
+ 0x1.45e47cp-1,
+ 0x1.dd28f8p-3,
+ 0x1.480552p-2,
+ 0x1.0a3298p-1,
+ 0x1.537fc4p-1,
+ 0x1.4839d6p-2,
+ 0x1.048ed6p-1,
+ 0x1.3a9f1cp-3,
+ 0x1.30c616p-1,
+ 0x1.41c0e6p-1,
+ 0x1.63d6a2p-1,
+ 0x1.7e65f4p-3,
+ 0x1.3928a4p-1,
+ 0x1.2407c4p-1,
+ 0x1.836478p-2,
+ 0x1.3ffc1ap-1,
+ 0x1.1b5c8ep-2,
+ 0x1.f5d7f2p-2,
+ 0x1.7ff8dp-3,
+ 0x1.985f78p-3,
+ 0x1.b4bbbp-2,
+ 0x1.3db736p-2,
+ 0x1.5ec1fcp-2,
+ 0x1.3cde1p-1,
+ 0x1.33db4ap-2,
+ 0x1.ce8c1cp-2,
+ 0x1.1d2b86p-3,
+ 0x1.124382p-3,
+ 0x1.d04c2p-3,
+ 0x1.387104p-1,
+ 0x1.4c2048p-1,
+ 0x1.5bb824p-2,
+ 0x1.0ccfe2p-1,
+ 0x1.17d232p-1,
+ 0x1.4e5778p-1,
+ 0x1.01ebd4p-3,
+ 0x1.4d1fcp-2,
+ 0x1.06fabep-1,
+ 0x1.98352cp-3,
+ 0x1.4b23bep-2,
+ 0x1.d3dcdcp-3,
+ 0x1.1d406ap-3,
+ 0x1.0f8c18p-3,
+ 0x1.affb4ep-2,
+ 0x1.1153bap-1,
+ 0x1.1f881p-3,
+ 0x1.f4e204p-2,
+ 0x1.1c374ep-1,
+ 0x1.65246p-1,
+ 0x1.9a3b78p-2,
+ 0x1.2623p-1,
+ 0x1.755afap-3,
+ 0x1.86965ep-3,
+ 0x1.8fddc4p-3,
+ 0x1.9e5462p-2,
+ 0x1.e6c75ep-2,
+ 0x1.15f3b8p-1,
+ 0x1.5e26b6p-1,
+ 0x1.cd645ep-2,
+ 0x1.1d23ep-2,
+ 0x1.03edd6p-1,
+ 0x1.0f14dp-1,
+ 0x1.94b5b8p-2,
+ 0x1.3c3f98p-1,
+ 0x1.93d104p-3,
+ 0x1.b477d6p-4,
+ 0x1.44bc34p-3,
+ 0x1.d4dbcep-2,
+ 0x1.f6f502p-4,
+ 0x1.9d4676p-2,
+ 0x1.079638p-2,
+ 0x1.ef7f1cp-4,
+ 0x1.07cfb2p-1,
+ 0x1.b51fap-3,
+ 0x1.5ece0ep-1,
+ 0x1.1da3a2p-2,
+ 0x1.679c66p-2,
+ 0x1.1fb512p-1,
+ 0x1.201234p-1,
+ 0x1.93165ep-2,
+ 0x1.6c9bep-2,
+ 0x1.2ff44cp-3,
+ 0x1.3ee1e4p-1,
+ 0x1.0d1ddap-1,
+ 0x1.75c5acp-2,
+ 0x1.e05368p-2,
+ 0x1.66e30ep-2,
+ 0x1.3ce67p-1,
+ 0x1.b51598p-2,
+ 0x1.61f6f2p-1,
+ 0x1.0799b2p-1,
+ 0x1.53871p-2,
+ 0x1.5ce61p-1,
+ 0x1.5ff6c2p-1,
+ 0x1.0178a4p-1,
+ 0x1.0826e8p-2,
+ 0x1.4264bep-2,
+ 0x1.0ee04ap-2,
+ 0x1.8c43acp-2,
+ 0x1.4cf434p-3,
+ 0x1.029decp-1,
+ 0x1.5a48p-1,
+ 0x1.3f0a4ap-1,
+ 0x1.47f17cp-1,
+ 0x1.066be2p-2,
+ 0x1.4505cp-1,
+ 0x1.02ca14p-1,
+ 0x1.1c552ap-3,
+ 0x1.a3a7d4p-3,
+ 0x1.2984f8p-3,
+ 0x1.a3e09cp-2,
+ 0x1.6a4534p-2,
+ 0x1.9dac9p-3,
+ 0x1.c0f7c8p-3,
+ 0x1.39c1bp-2,
+ 0x1.be501ap-4,
+ 0x1.dd4edp-2,
+ 0x1.009c34p-3,
+ 0x1.2f4cecp-1,
+ 0x1.b70a1ep-2,
+ 0x1.59485ap-1,
+ 0x1.37f36ap-1,
+ 0x1.faef0ep-2,
+ 0x1.36f514p-1,
+ 0x1.4fc098p-1,
+ 0x1.ee479p-4,
+ 0x1.1f3a4ep-2,
+ 0x1.04ff68p-3,
+ 0x1.7f0a6ep-3,
+ 0x1.ed3544p-3,
+ 0x1.0762eep-1,
+ 0x1.a31526p-2,
+ 0x1.c4a2f2p-2,
+ 0x1.30f7aap-1,
+ 0x1.cdae98p-2,
+ 0x1.4207f6p-1,
+ 0x1.56d3c8p-3,
+ 0x1.4a60fcp-1,
+ 0x1.49a194p-1,
+ 0x1.ed6a6ap-4,
+ 0x1.5b3d5ap-1,
+ 0x1.7c913cp-3,
+ 0x1.ba8444p-3,
+ 0x1.9f2f82p-3,
+ 0x1.03d10ap-2,
+ 0x1.57980cp-3,
+ 0x1.e36694p-2,
+ 0x1.fb703ep-2,
+ 0x1.43bcb4p-2,
+ 0x1.2473c4p-2,
+ 0x1.0d055cp-1,
+ 0x1.3e7f28p-2,
+ 0x1.ec6568p-2,
+ 0x1.89cd6cp-2,
+ 0x1.e589cp-2,
+ 0x1.38a12cp-1,
+ 0x1.7b565p-2,
+ 0x1.c7a51cp-2,
+ 0x1.de2fdp-2,
+ 0x1.086912p-1,
+ 0x1.02bccp-2,
+ 0x1.4a6ab2p-2,
+ 0x1.e7da24p-2,
+ 0x1.ddbd4ep-2,
+ 0x1.b0764ap-4,
+ 0x1.412088p-1,
+ 0x1.22495p-2,
+ 0x1.4842b6p-1,
+ 0x1.05ddb8p-1,
+ 0x1.272adap-2,
+ 0x1.705bdcp-2,
+ 0x1.97e43ep-2,
+ 0x1.a7157p-3,
+ 0x1.29dc14p-2,
+ 0x1.6d86a6p-3,
+ 0x1.b9b73ap-2,
+ 0x1.9f6856p-2,
+ 0x1.4bac5p-1,
+ 0x1.76824ap-2,
+ 0x1.47d44ap-1,
+ 0x1.a9bc5ap-2,
+ 0x1.bf0f9ap-4,
+ 0x1.66182ap-3,
+ 0x1.e0d3e4p-3,
+ 0x1.19b42p-3,
+ 0x1.211852p-2,
+ 0x1.10232ap-2,
+ 0x1.047802p-2,
+ 0x1.ad73e8p-2,
+ 0x1.1b08cp-1,
+ 0x1.1aae46p-3,
+ 0x1.eda112p-2,
+ 0x1.0b6f0cp-1,
+ 0x1.293bp-3,
+ 0x1.1d27aep-3,
+ 0x1.55fd08p-3,
+ 0x1.3df3eep-2,
+ 0x1.3cea2ap-1,
+ 0x1.9ea864p-2,
+ 0x1.439accp-2,
+ 0x1.5f73dap-2,
+ 0x1.aa0578p-2,
+ 0x1.4832d4p-1,
+ 0x1.1dd3f4p-1,
+ 0x1.cb0caap-2,
+ 0x1.4955fep-1,
+ 0x1.9a4a2p-3,
+ 0x1.1749e4p-1,
+ 0x1.07f5ccp-3,
+ 0x1.f4d53ep-4,
+ 0x1.15b3dcp-2,
+ 0x1.31a292p-3,
+ 0x1.88b318p-3,
+ 0x1.f27bccp-2,
+ 0x1.542fa4p-1,
+ 0x1.28ee5p-1,
+ 0x1.252b68p-3,
+ 0x1.4855c6p-1,
+ 0x1.1571eep-2,
+ 0x1.1a0954p-2,
+ 0x1.b5df64p-4,
+ 0x1.ace87cp-3,
+ 0x1.6e7c98p-2,
+ 0x1.61453ap-2,
+ 0x1.bb34bcp-2,
+ 0x1.40f6a4p-2,
+ 0x1.4eaaeep-1,
+ 0x1.bf7c1ep-3,
+ 0x1.c4067p-2,
+ 0x1.2a8f7p-3,
+ 0x1.6c728ep-3,
+ 0x1.d8ebcp-3,
+ 0x1.0cbc88p-2,
+ 0x1.577044p-1,
+ 0x1.19da2p-2,
+ 0x1.25353cp-1,
+ 0x1.bfd288p-2,
+ 0x1.2521f6p-1,
+ 0x1.1feed6p-1,
+ 0x1.597c02p-1,
+ 0x1.215726p-1,
+ 0x1.5de45ap-2,
+ 0x1.7326bp-3,
+ 0x1.ae373p-2,
+ 0x1.dc8146p-2,
+ 0x1.dd88c4p-3,
+ 0x1.6e21ecp-3,
+ 0x1.d9a508p-3,
+ 0x1.0f4a18p-1,
+ 0x1.21b28ep-2,
+ 0x1.514f1p-3,
+ 0x1.77317p-2,
+ 0x1.66eafp-2,
+ 0x1.a370ap-2,
+ 0x1.518098p-1,
+ 0x1.d7a58cp-3,
+ 0x1.149e12p-1,
+ 0x1.6449f6p-1,
+ 0x1.3b4dbcp-3,
+ 0x1.1a68ecp-1,
+ 0x1.2a3188p-1,
+ 0x1.3fbb6p-1,
+ 0x1.1be802p-1,
+ 0x1.43937ap-2,
+ 0x1.1feee8p-1,
+ 0x1.c5b228p-4,
+ 0x1.02b5dep-1,
+ 0x1.3532e6p-2,
+ 0x1.2dee7ap-2,
+ 0x1.1766fcp-3,
+ 0x1.6576b2p-1,
+ 0x1.cd11c4p-3,
+ 0x1.153fap-2,
+ 0x1.25f1p-1,
+ 0x1.9cc1e8p-2,
+ 0x1.1f0db6p-1,
+ 0x1.11cb62p-1,
+ 0x1.5451fep-1,
+ 0x1.337948p-1,
+ 0x1.b6096ap-2,
+ 0x1.5fcb46p-1,
+ 0x1.cb2e2p-2,
+ 0x1.403324p-1,
+ 0x1.3f51f2p-1,
+ 0x1.38425ep-1,
+ 0x1.6ce2bp-2,
+ 0x1.5ded7p-3,
+ 0x1.3a863p-2,
+ 0x1.5cb812p-1,
+ 0x1.8733e4p-2,
+ 0x1.fe185ap-2,
+ 0x1.5e26fep-1,
+ 0x1.7903f6p-3,
+ 0x1.5caa1ap-1,
+ 0x1.403acp-3,
+ 0x1.fb7a7p-2,
+ 0x1.cf6826p-2,
+ 0x1.55bb42p-1,
+ 0x1.886722p-2,
+ 0x1.2c1a8cp-2,
+ 0x1.352d72p-1,
+ 0x1.5e54eep-1,
+ 0x1.4dcf6cp-3,
+ 0x1.5414d2p-2,
+ 0x1.025726p-3,
+ 0x1.59c5fep-2,
+ 0x1.03a8f8p-1,
+ 0x1.4ae814p-2,
+ 0x1.911578p-2,
+ 0x1.7927aep-2,
+ 0x1.606bcap-2,
+ 0x1.0dc9eap-1,
+ 0x1.5eeeeap-1,
+ 0x1.bba8d2p-2,
+ 0x1.9048d6p-2,
+ 0x1.7a71bap-2,
+ 0x1.00458cp-1,
+ 0x1.01935ep-1,
+ 0x1.1984e2p-1,
+ 0x1.bc48fp-2,
+ 0x1.973882p-2,
+ 0x1.3c11bcp-1,
+ 0x1.bf9532p-2,
+ 0x1.b60134p-2,
+ 0x1.4dc5d8p-1,
+ 0x1.178a7ep-2,
+ 0x1.4abdeap-1,
+ 0x1.40b534p-2,
+ 0x1.025ad2p-1,
+ 0x1.1f7abap-2,
+ 0x1.111b9ep-2,
+ 0x1.7548b4p-2,
+ 0x1.31de0cp-1,
+ 0x1.038b9p-3,
+ 0x1.f3e4bep-2,
+ 0x1.c1810cp-2,
+ 0x1.4086ecp-2,
+ 0x1.d44d8p-2,
+ 0x1.be8594p-3,
+ 0x1.d344cep-2,
+ 0x1.4f8b16p-2,
+ 0x1.0b5afep-1,
+ 0x1.eb93dp-4,
+ 0x1.f10c04p-3,
+ 0x1.1f3dd8p-1,
+ 0x1.de9618p-3,
+ 0x1.990718p-3,
+ 0x1.792208p-3,
+ 0x1.5d3566p-3,
+ 0x1.289946p-2,
+ 0x1.275e14p-2,
+ 0x1.3abd28p-1,
+ 0x1.d1abccp-2,
+ 0x1.ae4618p-2,
+ 0x1.5f36fp-3,
+ 0x1.537a32p-1,
+ 0x1.a736fcp-2,
+ 0x1.ff71dap-2,
+ 0x1.2acf36p-1,
+ 0x1.211884p-3,
+ 0x1.571022p-1,
+ 0x1.edebc4p-2,
+ 0x1.5a3d3cp-1,
+ 0x1.5d7bbcp-3,
+ 0x1.5dc9acp-1,
+ 0x1.5f9e76p-1,
+ 0x1.f6f9d4p-2,
+ 0x1.1fbc22p-1,
+ 0x1.c9c98cp-2,
+ 0x1.e89a16p-2,
+ 0x1.2c2b54p-1,
+ 0x1.0edc5ep-1,
+ 0x1.378564p-1,
+ 0x1.1b4b74p-2,
+ 0x1.5924ap-1,
+ 0x1.02a6a6p-1,
+ 0x1.128d5cp-1,
+ 0x1.64cc2cp-1,
+ 0x1.8bf11p-2,
+ 0x1.5e99eep-1,
+ 0x1.5c3748p-3,
+ 0x1.561be8p-1,
+ 0x1.f9df26p-2,
+ 0x1.29a93ap-1,
+ 0x1.0c6e12p-1,
+ 0x1.aa8798p-3,
+ 0x1.cb94f4p-2,
+ 0x1.4bd17cp-1,
+ 0x1.a562f4p-2,
+ 0x1.0fb314p-2,
+ 0x1.2718e6p-1,
+ 0x1.5b2926p-1,
+ 0x1.9729a8p-2,
+ 0x1.11a214p-1,
+ 0x1.402b36p-1,
+ 0x1.740468p-3,
+ 0x1.64107p-2,
+ 0x1.cf7db8p-3,
+ 0x1.5f708p-1,
+ 0x1.776634p-3,
+ 0x1.dcff5ap-2,
+ 0x1.f531f8p-3,
+ 0x1.1e6282p-1,
+ 0x1.1b59ecp-3,
+ 0x1.2ae8c2p-1,
+ 0x1.7a2dacp-2,
+ 0x1.23272ap-1,
+ 0x1.7902eep-3,
+ 0x1.58fb54p-1,
+ 0x1.04e27cp-3,
+ 0x1.391a04p-2,
+ 0x1.40f028p-1,
+ 0x1.f4b874p-3,
+ 0x1.bfd764p-3,
+ 0x1.4e31d2p-2,
+ 0x1.df3e56p-2,
+ 0x1.399a12p-2,
+ 0x1.9b53ecp-4,
+ 0x1.29ac24p-3,
+ 0x1.2b8e6ap-2,
+ 0x1.3bfaaep-1,
+ 0x1.46d9aep-2,
+ 0x1.2e9d12p-2,
+ 0x1.77c946p-3,
+ 0x1.51719p-1,
+ 0x1.44341ap-3,
+ 0x1.15aa4ap-1,
+ 0x1.79c7e2p-2,
+ 0x1.f9a8acp-3,
+ 0x1.522b2p-1,
+};
+static const std::vector<float> sincosf_input2 = {
+ 0x1.8b375p+0,
+ 0x1.7934c8p+1,
+ 0x1.249b4p+1,
+ 0x1.29d862p+0,
+ 0x1.cac54p+0,
+ 0x1.47c65cp+0,
+ 0x1.d45198p+0,
+ 0x1.36ac4p+1,
+ 0x1.635158p+1,
+ 0x1.6e833ap+1,
+ 0x1.8748b8p+0,
+ 0x1.3add66p+1,
+ 0x1.59a6e2p+0,
+ 0x1.5051d2p+1,
+ 0x1.2194b4p+0,
+ 0x1.b3343cp+0,
+ 0x1.58ff86p+1,
+ 0x1.3ac5fp+1,
+ 0x1.4f91bcp+1,
+ 0x1.363504p+1,
+ 0x1.650e8cp+1,
+ 0x1.0eb71p+1,
+ 0x1.176054p+1,
+ 0x1.0406c4p+1,
+ 0x1.2778acp+1,
+ 0x1.b24b94p+0,
+ 0x1.550c8cp+0,
+ 0x1.acc1c4p+0,
+ 0x1.c8df1p+0,
+ 0x1.e14e9p+0,
+ 0x1.ce7ae8p-1,
+ 0x1.368262p+1,
+ 0x1.6800dp-1,
+ 0x1.60480cp+0,
+ 0x1.158fecp+1,
+ 0x1.01c81cp+0,
+ 0x1.c1da44p+0,
+ 0x1.d46cdap-1,
+ 0x1.526d44p+1,
+ 0x1.1e8f76p+1,
+ 0x1.b7efc4p+0,
+ 0x1.57ec4p+1,
+ 0x1.5d1f04p+0,
+ 0x1.eb9008p+0,
+ 0x1.8685b8p+1,
+ 0x1.3e21d4p+1,
+ 0x1.003256p+1,
+ 0x1.94cd7p+0,
+ 0x1.89965p+0,
+ 0x1.599b7ep+1,
+ 0x1.05f5acp+1,
+ 0x1.5fa12cp+1,
+ 0x1.8f92fcp-1,
+ 0x1.611928p+1,
+ 0x1.77dc74p+1,
+ 0x1.13b3b6p+0,
+ 0x1.17ab6cp+1,
+ 0x1.a8b84ap+0,
+ 0x1.5c46e6p+0,
+ 0x1.e45686p-1,
+ 0x1.4b231cp+0,
+ 0x1.1ebb3ap+1,
+ 0x1.5b6414p+1,
+ 0x1.1e1898p+1,
+ 0x1.4a2448p+1,
+ 0x1.29dba4p+0,
+ 0x1.13d0c4p+1,
+ 0x1.5fb6cap+0,
+ 0x1.18e392p+1,
+ 0x1.5680b8p+0,
+ 0x1.23df18p+0,
+ 0x1.aa8068p+0,
+ 0x1.838278p+0,
+ 0x1.1af3fap+1,
+ 0x1.b46eep+0,
+ 0x1.c9ab6p-1,
+ 0x1.8b988cp+1,
+ 0x1.80736ep+1,
+ 0x1.e231f8p-1,
+ 0x1.e8e76p+0,
+ 0x1.0b31b2p+0,
+ 0x1.5e1b8p+0,
+ 0x1.41c05cp+0,
+ 0x1.9158c4p+0,
+ 0x1.648b6p+1,
+ 0x1.590752p+1,
+ 0x1.264b64p+0,
+ 0x1.4c1522p+1,
+ 0x1.903aacp+0,
+ 0x1.822d6p+0,
+ 0x1.6f1924p+1,
+ 0x1.d27174p+0,
+ 0x1.f8f43ap-1,
+ 0x1.70164ap+0,
+ 0x1.099638p+0,
+ 0x1.34e26ap+1,
+ 0x1.b20748p+0,
+ 0x1.60ff7ep+0,
+ 0x1.5819fcp+1,
+ 0x1.33901cp+0,
+ 0x1.73d868p+0,
+ 0x1.f289b4p-1,
+ 0x1.28f63p+1,
+ 0x1.df3a54p-1,
+ 0x1.3a3314p+1,
+ 0x1.5df792p+1,
+ 0x1.3ab4f8p+0,
+ 0x1.7c2ec4p+0,
+ 0x1.155e4ap+1,
+ 0x1.4b3a94p+0,
+ 0x1.192324p+1,
+ 0x1.c8dc4cp-1,
+ 0x1.852e68p+1,
+ 0x1.8c71ecp+0,
+ 0x1.14ca54p+1,
+ 0x1.eee1d4p+0,
+ 0x1.e19248p+0,
+ 0x1.7eae7cp+1,
+ 0x1.36bfa6p+1,
+ 0x1.2b96c4p+0,
+ 0x1.5ae652p+1,
+ 0x1.715bp+1,
+ 0x1.2facdp+1,
+ 0x1.1a3aa8p+0,
+ 0x1.5f2714p+1,
+ 0x1.499ce6p+1,
+ 0x1.1330aap+1,
+ 0x1.388ffcp+1,
+ 0x1.155fcap+1,
+ 0x1.d7684p+0,
+ 0x1.f78bf4p+0,
+ 0x1.16ee2p+1,
+ 0x1.48bc88p+0,
+ 0x1.dda62ap-1,
+ 0x1.0f071cp+0,
+ 0x1.c79d28p+0,
+ 0x1.5c007cp+1,
+ 0x1.775db8p+0,
+ 0x1.852138p+1,
+ 0x1.3ef1d8p+0,
+ 0x1.761a18p+1,
+ 0x1.1d74bcp+1,
+ 0x1.bfc0f4p-1,
+ 0x1.a8dec2p+0,
+ 0x1.451508p+0,
+ 0x1.2d928cp+1,
+ 0x1.1f6be8p+0,
+ 0x1.f365bp+0,
+ 0x1.f65878p+0,
+ 0x1.21b78ep+1,
+ 0x1.423694p+0,
+ 0x1.72ef86p+1,
+ 0x1.6b4204p+1,
+ 0x1.51a18ep+0,
+ 0x1.e6d964p+0,
+ 0x1.13e846p+0,
+ 0x1.10794p+1,
+ 0x1.ca122p+0,
+ 0x1.7f9a58p+1,
+ 0x1.d4de7p-1,
+ 0x1.3eda4cp+0,
+ 0x1.7ce822p+0,
+ 0x1.1e4814p+0,
+ 0x1.e64644p-1,
+ 0x1.3ec4b4p+0,
+ 0x1.1b300ap+1,
+ 0x1.6c19c8p+0,
+ 0x1.908198p+0,
+ 0x1.889fb2p+1,
+ 0x1.4b3836p+1,
+ 0x1.5b6d1p+1,
+ 0x1.86fa5ap+1,
+ 0x1.47fc78p+0,
+ 0x1.c33794p-1,
+ 0x1.e3cc34p+0,
+ 0x1.4273acp+0,
+ 0x1.3ee3acp+0,
+ 0x1.299234p+0,
+ 0x1.c96806p-1,
+ 0x1.ae356cp+0,
+ 0x1.60bcbcp+1,
+ 0x1.a58304p+0,
+ 0x1.5971b8p+1,
+ 0x1.7dd6d4p+1,
+ 0x1.77fd6cp-1,
+ 0x1.edabb4p-1,
+ 0x1.a40ce6p-1,
+ 0x1.53f0fep+1,
+ 0x1.9d26p-1,
+ 0x1.348a14p+0,
+ 0x1.b79146p-1,
+ 0x1.0c68a8p+1,
+ 0x1.3ade08p+0,
+ 0x1.3176p+0,
+ 0x1.f0abap-1,
+ 0x1.f4eccp+0,
+ 0x1.274d1ap+0,
+ 0x1.8bbb1p+0,
+ 0x1.b855a8p+0,
+ 0x1.50ad34p+0,
+ 0x1.6ab944p-1,
+ 0x1.6e7c86p+1,
+ 0x1.0ba982p+1,
+ 0x1.615e32p+0,
+ 0x1.e994e4p+0,
+ 0x1.d687b8p+0,
+ 0x1.7b694cp+0,
+ 0x1.9aa51cp-1,
+ 0x1.7a6eeap+1,
+ 0x1.1f9f4ep+1,
+ 0x1.ae6144p+0,
+ 0x1.d45678p+0,
+ 0x1.8afb76p+1,
+ 0x1.5f7132p+1,
+ 0x1.41a4e2p+1,
+ 0x1.b79f5p-1,
+ 0x1.0d5c7ep+1,
+ 0x1.946746p-1,
+ 0x1.27a60cp+1,
+ 0x1.2f5c76p+1,
+ 0x1.378fd6p+1,
+ 0x1.f6304cp+0,
+ 0x1.8359f8p+0,
+ 0x1.df19d2p-1,
+ 0x1.691898p+0,
+ 0x1.0247a2p+0,
+ 0x1.6e9ffep+1,
+ 0x1.356714p+0,
+ 0x1.15a8bap+0,
+ 0x1.ea52cp+0,
+ 0x1.2cc33p+0,
+ 0x1.2028f8p+1,
+ 0x1.f70354p+0,
+ 0x1.54b8f2p+0,
+ 0x1.98907cp+0,
+ 0x1.b32f2ap+0,
+ 0x1.131e9p+1,
+ 0x1.9980a8p+0,
+ 0x1.7f473p+0,
+ 0x1.921924p+0,
+ 0x1.e98a7cp-1,
+ 0x1.77e7ap+1,
+ 0x1.dd7b24p+0,
+ 0x1.4532cap+1,
+ 0x1.aad424p-1,
+ 0x1.1a2388p+1,
+ 0x1.7f38e2p+1,
+ 0x1.35e8cp+0,
+ 0x1.2c1e22p+1,
+ 0x1.f31538p+0,
+ 0x1.a288b2p+0,
+ 0x1.fdab5cp+0,
+ 0x1.a7c286p-1,
+ 0x1.41a39p+1,
+ 0x1.31f6b4p+1,
+ 0x1.6ac718p-1,
+ 0x1.04cc02p+0,
+ 0x1.09264ap+1,
+ 0x1.91cc0ap-1,
+ 0x1.e073b4p+0,
+ 0x1.136804p+0,
+ 0x1.5dd99ep+1,
+ 0x1.b9ad38p+0,
+ 0x1.856b16p+1,
+ 0x1.5ac3bcp+0,
+ 0x1.a878fap+0,
+ 0x1.645cd6p+1,
+ 0x1.d13df8p-1,
+ 0x1.07b234p+0,
+ 0x1.7bc346p+1,
+ 0x1.56b4a4p+0,
+ 0x1.cd24acp+0,
+ 0x1.198a2ep+1,
+ 0x1.b79484p+0,
+ 0x1.8b8f1p+1,
+ 0x1.50aa7ep+1,
+ 0x1.aabb3cp+0,
+ 0x1.2594a4p+1,
+ 0x1.c9f48p-1,
+ 0x1.3de0c8p+1,
+ 0x1.08e46p+0,
+ 0x1.93c88cp+0,
+ 0x1.d22162p-1,
+ 0x1.1cf8c6p+0,
+ 0x1.4faap+1,
+ 0x1.172c9cp+1,
+ 0x1.07bb2cp+0,
+ 0x1.028826p+0,
+ 0x1.80d69ep+1,
+ 0x1.ccaaecp+0,
+ 0x1.155c1ap+1,
+ 0x1.419c54p+0,
+ 0x1.928a9p-1,
+ 0x1.3287ccp+1,
+ 0x1.db5388p-1,
+ 0x1.0f3f52p+1,
+ 0x1.f70638p-1,
+ 0x1.cd2784p+0,
+ 0x1.358b6cp+1,
+ 0x1.f8dd74p+0,
+ 0x1.43012ep+1,
+ 0x1.5f422cp+0,
+ 0x1.72545cp+0,
+ 0x1.633b5ep+1,
+ 0x1.609868p+1,
+ 0x1.1ea412p+1,
+ 0x1.09e0bcp+1,
+ 0x1.36546ap+1,
+ 0x1.85b4b4p+0,
+ 0x1.dbcc3cp-1,
+ 0x1.9627c4p+0,
+ 0x1.803f74p-1,
+ 0x1.f625ap+0,
+ 0x1.c948ap+0,
+ 0x1.200fa2p+0,
+ 0x1.682c4p-1,
+ 0x1.88d3ap+1,
+ 0x1.2e6bfap+1,
+ 0x1.739f98p+1,
+ 0x1.3876cp+1,
+ 0x1.70f35ap+0,
+ 0x1.46691cp+1,
+ 0x1.40e0b6p+1,
+ 0x1.242c56p+1,
+ 0x1.0218bep+1,
+ 0x1.aa771p-1,
+ 0x1.7058fcp+1,
+ 0x1.1220a4p+1,
+ 0x1.3e8c5ap+1,
+ 0x1.27786ap+0,
+ 0x1.649aap+0,
+ 0x1.5f8d86p+1,
+ 0x1.4f78d6p+1,
+ 0x1.c3f9e4p-1,
+ 0x1.7f0cccp+0,
+ 0x1.b41548p-1,
+ 0x1.0ecfd2p+1,
+ 0x1.549cf4p+1,
+ 0x1.326bcp+1,
+ 0x1.40e388p+1,
+ 0x1.8a4a44p+1,
+ 0x1.8510aep+1,
+ 0x1.446f9p+1,
+ 0x1.7ee668p+0,
+ 0x1.a7de4p+0,
+ 0x1.fbe78p-1,
+ 0x1.5e3858p+1,
+ 0x1.a564f2p+0,
+ 0x1.07ed14p+0,
+ 0x1.9a3218p+0,
+ 0x1.bd36bp+0,
+ 0x1.6d860cp+1,
+ 0x1.ace02ap+0,
+ 0x1.45f40cp+0,
+ 0x1.2c1488p+0,
+ 0x1.41d564p+0,
+ 0x1.c25e68p+0,
+ 0x1.26e5d2p+1,
+ 0x1.950208p+0,
+ 0x1.0609cap+0,
+ 0x1.8ca2bp+0,
+ 0x1.35c56p+1,
+ 0x1.1aec24p+1,
+ 0x1.1fecb8p+1,
+ 0x1.aaaf18p-1,
+ 0x1.7b9fbap+1,
+ 0x1.7b41dp+0,
+ 0x1.0d44d6p+1,
+ 0x1.a6c594p+0,
+ 0x1.0aeb1cp+0,
+ 0x1.b70e5p+0,
+ 0x1.7be6e6p+0,
+ 0x1.56b2bep+1,
+ 0x1.84d292p+1,
+ 0x1.b25194p+0,
+ 0x1.d5c03p+0,
+ 0x1.0add6p+0,
+ 0x1.81a6b6p+1,
+ 0x1.ef097cp+0,
+ 0x1.789936p+0,
+ 0x1.232542p+0,
+ 0x1.8bede8p+1,
+ 0x1.be12b8p-1,
+ 0x1.8c9e3cp+1,
+ 0x1.594ccep+1,
+ 0x1.655492p+1,
+ 0x1.66682p+1,
+ 0x1.3aff58p+1,
+ 0x1.0d4c64p+1,
+ 0x1.84ff5ap+1,
+ 0x1.0ff04ep+1,
+ 0x1.83cef8p+1,
+ 0x1.a1d71p+0,
+ 0x1.8af7f8p+0,
+ 0x1.decd14p+0,
+ 0x1.73bf84p+0,
+ 0x1.4060eep+1,
+ 0x1.72d01ap+1,
+ 0x1.633c28p+0,
+ 0x1.7971a8p+0,
+ 0x1.4b837cp+0,
+ 0x1.46cfb6p+1,
+ 0x1.7e7dcap-1,
+ 0x1.4a33acp+1,
+ 0x1.fc34d8p+0,
+ 0x1.6aa758p+1,
+ 0x1.8fc4c8p+0,
+ 0x1.4fcfe6p+0,
+ 0x1.107894p+1,
+ 0x1.20742cp+1,
+ 0x1.573234p+1,
+ 0x1.1694f6p+1,
+ 0x1.9e11fcp+0,
+ 0x1.89f23p+0,
+ 0x1.823edap+1,
+ 0x1.7d36a6p+0,
+ 0x1.8089aap+1,
+ 0x1.6c5ca6p+0,
+ 0x1.525caep+1,
+ 0x1.2a98ap+1,
+ 0x1.40babp+1,
+ 0x1.863184p+1,
+ 0x1.73ad9p+0,
+ 0x1.864228p+1,
+ 0x1.989dacp+0,
+ 0x1.5bc018p+0,
+ 0x1.77b2ap-1,
+ 0x1.48ac6ep+1,
+ 0x1.4de9e6p+1,
+ 0x1.f6debcp+0,
+ 0x1.3054dap+0,
+ 0x1.624e22p+1,
+ 0x1.7cc9bp+1,
+ 0x1.a2afep+0,
+ 0x1.50da12p+1,
+ 0x1.2ee28p+1,
+ 0x1.7ef39cp+0,
+ 0x1.6a84fap-1,
+ 0x1.87e3c8p+0,
+ 0x1.5659p+1,
+ 0x1.1e4d68p+1,
+ 0x1.721042p+1,
+ 0x1.02b17cp+1,
+ 0x1.5c0182p+1,
+ 0x1.0d58c8p+0,
+ 0x1.a2a4fp+0,
+ 0x1.023084p+1,
+ 0x1.fe4b94p+0,
+ 0x1.cba3dp+0,
+ 0x1.2237e2p+0,
+ 0x1.0f0a4ap+1,
+ 0x1.97ddbep-1,
+ 0x1.d2ea7cp+0,
+ 0x1.53901ap+0,
+ 0x1.442cf6p+1,
+ 0x1.ddc894p-1,
+ 0x1.67e182p+1,
+ 0x1.bea10cp+0,
+ 0x1.2d5d6cp+1,
+ 0x1.62ed22p+1,
+ 0x1.393d42p+1,
+ 0x1.3ba55cp+0,
+ 0x1.fd8f6p-1,
+ 0x1.3ba084p+1,
+ 0x1.605e2cp+1,
+ 0x1.48ee46p+1,
+ 0x1.d4081p+0,
+ 0x1.011e1cp+0,
+ 0x1.42efcp+1,
+ 0x1.2ab478p+1,
+ 0x1.14b37ap+1,
+ 0x1.fb7f9p+0,
+ 0x1.b2697ep-1,
+ 0x1.8475cep-1,
+ 0x1.73a9c6p+1,
+ 0x1.d781p+0,
+ 0x1.2e7ecp+1,
+ 0x1.520c3ep+1,
+ 0x1.7c8568p+1,
+ 0x1.884fep+1,
+ 0x1.338194p+0,
+ 0x1.166f44p+0,
+ 0x1.1cd13ep+0,
+ 0x1.6d9e3p+1,
+ 0x1.227428p+1,
+ 0x1.61f258p+0,
+ 0x1.f224aap-1,
+ 0x1.5619ecp+0,
+ 0x1.28b934p+1,
+ 0x1.acd044p-1,
+ 0x1.b5de1ep-1,
+ 0x1.438e6ap+1,
+ 0x1.819dfp+1,
+ 0x1.2d7698p+0,
+ 0x1.e70ffp+0,
+ 0x1.0096fcp+0,
+ 0x1.7abf42p-1,
+ 0x1.0e9fa4p+0,
+ 0x1.a8f2e6p+0,
+ 0x1.7d3eep+1,
+ 0x1.472354p+1,
+ 0x1.88103p+0,
+ 0x1.4b6626p+1,
+ 0x1.0e2e1p+1,
+ 0x1.95a0fcp+0,
+ 0x1.64c654p+1,
+ 0x1.0feeaep+0,
+ 0x1.5f99eep+1,
+ 0x1.7cfa14p+1,
+ 0x1.e30e7ap-1,
+ 0x1.ebaf94p+0,
+ 0x1.be7a4p+0,
+};
+static const std::vector<float> sincosf_input3 = {
+ 0x1.1f54a8p-1,
+ -0x1.5d0396p+1,
+ 0x1.acaf58p+0,
+ -0x1.830ffcp+1,
+ 0x1.75597cp+1,
+ 0x1.cbe7ap-1,
+ -0x1.5ac992p+1,
+ -0x1.19d22ap+1,
+ 0x1.1525e8p+0,
+ 0x1.65aa3cp+1,
+ 0x1.fbd83p+0,
+ 0x1.383624p+1,
+ 0x1.acebp-3,
+ 0x1.2287c4p+1,
+ -0x1.6f431ap+1,
+ -0x1.81f15cp+1,
+ 0x1.3850bp+1,
+ 0x1.0fff88p+1,
+ -0x1.5cec62p+1,
+ -0x1.6afa66p+0,
+ -0x1.850ca4p+0,
+ -0x1.35b79cp+1,
+ -0x1.23c13ep+0,
+ 0x1.41a1e4p+1,
+ 0x1.0dbdd8p+1,
+ 0x1.58fcc8p+1,
+ -0x1.e71b6ep+0,
+ 0x1.706a6p+0,
+ 0x1.821798p+1,
+ 0x1.49e628p+1,
+ -0x1.b06dbcp+0,
+ 0x1.8c8a98p+0,
+ 0x1.169aep-1,
+ 0x1.5e207cp+1,
+ -0x1.4d98b8p-1,
+ 0x1.aa7098p+0,
+ 0x1.e3f38p-3,
+ 0x1.54ed24p+1,
+ -0x1.134794p+1,
+ -0x1.2fbf1p-2,
+ -0x1.87f6f2p+1,
+ 0x1.323e08p+1,
+ -0x1.0fdf5ep+1,
+ -0x1.6e299ap+0,
+ 0x1.090ec4p+1,
+ 0x1.affc6p-1,
+ 0x1.fecacp+0,
+ 0x1.7dd14p-2,
+ -0x1.3d876cp+0,
+ -0x1.2c7bdap+1,
+ 0x1.d08d1p-1,
+ -0x1.2dff78p-1,
+ -0x1.8a524ep+1,
+ 0x1.23a0cp-1,
+ 0x1.72a08p-3,
+ 0x1.5539b4p+1,
+ -0x1.339bfp+1,
+ -0x1.54d41p-1,
+ 0x1.6fef74p+1,
+ -0x1.f5134p-4,
+ 0x1.8811bp-2,
+ -0x1.33188ap+1,
+ 0x1.246cap+0,
+ 0x1.299938p-1,
+ -0x1.685f04p+0,
+ 0x1.3a92ep+0,
+ -0x1.cd8a2ap+0,
+ 0x1.340a1cp+1,
+ 0x1.eadebp-1,
+ -0x1.1497fp-1,
+ 0x1.1d6ecp-4,
+ 0x1.d5f288p+0,
+ 0x1.6aa3cp-1,
+ -0x1.224e2p+1,
+ 0x1.c3fb3p+0,
+ -0x1.1a591cp+1,
+ -0x1.224cap+0,
+ 0x1.b06358p+0,
+ -0x1.5b448cp+0,
+ -0x1.4c6dbp-2,
+ -0x1.7c58ap-3,
+ 0x1.341e2cp+1,
+ 0x1.88b9d8p-1,
+ -0x1.42c1aep+0,
+ -0x1.c274cp-3,
+ -0x1.739d68p-1,
+ 0x1.a7879p-1,
+ 0x1.d1052p+0,
+ -0x1.61bb6ap+1,
+ -0x1.a795ep-1,
+ 0x1.322ccp-4,
+ 0x1.77e08cp+1,
+ 0x1.03e8c8p+0,
+ 0x1.450c38p+1,
+ 0x1.fca76p-2,
+ -0x1.0795ep-3,
+ 0x1.72e598p-1,
+ -0x1.38fd08p+0,
+ 0x1.5d406cp+1,
+ -0x1.2ea498p+1,
+ 0x1.90eap-3,
+ -0x1.3643bcp+0,
+ 0x1.5081e4p+1,
+ -0x1.581978p+1,
+ 0x1.a57e5p-1,
+ 0x1.49f4dp+0,
+ 0x1.8f076p-1,
+ 0x1.fc9088p+0,
+ 0x1.04d154p+1,
+ -0x1.0f095cp+1,
+ 0x1.3559c4p+1,
+ -0x1.3b3dap-2,
+ -0x1.383858p-1,
+ 0x1.e8af5p+0,
+ 0x1.df5438p+0,
+ 0x1.691e08p+0,
+ 0x1.87b4b8p+0,
+ -0x1.7325d6p+1,
+ 0x1.c7d2a8p+0,
+ 0x1.0e6d14p+1,
+ -0x1.98c98p-3,
+ -0x1.63200ep+1,
+ -0x1.914f8p+0,
+ 0x1.71a138p+0,
+ -0x1.4844e4p+1,
+ 0x1.98fe4p-1,
+ 0x1.0a9174p+1,
+ -0x1.773fcap+1,
+ -0x1.a37bap-1,
+ -0x1.50472cp+1,
+ -0x1.cfb2p-2,
+ -0x1.b2169p-2,
+ -0x1.1117bcp+0,
+ 0x1.557e88p+0,
+ 0x1.2f009p+0,
+ 0x1.069704p+1,
+ -0x1.cff21ap+0,
+ -0x1.58a0fp-1,
+ 0x1.670ab8p+0,
+ 0x1.32afep+0,
+ -0x1.0c8c98p+0,
+ -0x1.2ffaecp+0,
+ 0x1.889dc8p+0,
+ -0x1.b7175ep+0,
+ -0x1.3d6a5cp+1,
+ 0x1.4d3p+1,
+ 0x1.72e144p+1,
+ -0x1.2a458p+0,
+ 0x1.5480ap+0,
+ -0x1.97978p-4,
+ -0x1.4653fp-2,
+ 0x1.735498p+0,
+ -0x1.51ce4cp+1,
+ -0x1.16ec58p+0,
+ 0x1.59bb6p+1,
+ 0x1.4d0138p-1,
+ -0x1.4e8ebcp+1,
+ 0x1.d301dp+0,
+ -0x1.2fec26p+0,
+ 0x1.7d63dp-1,
+ -0x1.824af2p+1,
+ 0x1.47c7ccp+1,
+ -0x1.10ae18p+1,
+ -0x1.76da6p-3,
+ -0x1.12bp-5,
+ 0x1.06b7dp+0,
+ -0x1.8be0bep+1,
+ -0x1.86db4ap+0,
+ -0x1.24088ap+0,
+ -0x1.f6ada8p+0,
+ -0x1.27b592p+0,
+ 0x1.8ca0e8p+1,
+ -0x1.dbcd74p+0,
+ -0x1.e9d71cp+0,
+ 0x1.0126ep+1,
+ 0x1.54ec1p+0,
+ 0x1.1aca5p+0,
+ 0x1.51ff6p-2,
+ -0x1.8b89ccp+1,
+ -0x1.bd81bcp+0,
+ -0x1.43a74p-1,
+ 0x1.041dep+0,
+ 0x1.69da1p+1,
+ -0x1.3d563cp+0,
+ 0x1.7449dp-1,
+ -0x1.60ff4p+0,
+ 0x1.37dcbp+1,
+ 0x1.79795cp+1,
+ -0x1.4caa3p-1,
+ 0x1.5b8494p+1,
+ -0x1.789a08p+1,
+ -0x1.139294p+0,
+ -0x1.082698p-1,
+ -0x1.b2389p-1,
+ -0x1.76f8dep+0,
+ 0x1.080f2p+1,
+ 0x1.a5a428p-1,
+ 0x1.e5383p+0,
+ 0x1.42f8acp+1,
+ -0x1.32929p-1,
+ 0x1.e2806p+0,
+ 0x1.f1a09p+0,
+ -0x1.0bb5ep+1,
+ 0x1.1513dp+1,
+ -0x1.25e4cp-1,
+ 0x1.562044p+1,
+ -0x1.ad366p-1,
+ 0x1.0d837p+0,
+ 0x1.88067p+0,
+ 0x1.2b5c5p-1,
+ -0x1.682fcp+0,
+ -0x1.d1585p-2,
+ 0x1.3ce41p+0,
+ -0x1.4f7b9ap+1,
+ -0x1.a0544p-4,
+ 0x1.5996acp+1,
+ 0x1.87b24p-1,
+ -0x1.f90d38p-1,
+ -0x1.ae695p+0,
+ 0x1.26e51p-2,
+ -0x1.6a81eap+0,
+ -0x1.805584p+1,
+ -0x1.cc051p-2,
+ -0x1.0483cap+1,
+ 0x1.4af66cp+1,
+ -0x1.3e46a2p+0,
+ -0x1.79abaep+1,
+ -0x1.331aeep+0,
+ -0x1.62b68ap+1,
+ 0x1.634ba8p+0,
+ -0x1.d5d34p+0,
+ -0x1.145a64p+0,
+ -0x1.4f6a58p+1,
+ -0x1.70478p-1,
+ 0x1.520074p+1,
+ 0x1.759054p+1,
+ -0x1.ad80ap-3,
+ -0x1.4b2688p-1,
+ -0x1.7fe8f4p+1,
+ 0x1.6cb374p+1,
+ -0x1.91ea46p+0,
+ -0x1.a4f1dap+0,
+ -0x1.09dd6cp+0,
+ -0x1.1bc55cp+0,
+ 0x1.f98de8p+0,
+ 0x1.77acc8p+1,
+ 0x1.0801cp-4,
+ 0x1.6b8aa4p+1,
+ -0x1.69b1b8p-1,
+ -0x1.0cebdap+1,
+ -0x1.45fa3p+1,
+ 0x1.bb2f8p-3,
+ 0x1.c931p-2,
+ 0x1.01ea3p+1,
+ 0x1.585e78p+1,
+ 0x1.2dc148p-1,
+ -0x1.2e5dp-6,
+ 0x1.46e12p+1,
+ 0x1.41866p+1,
+ 0x1.e4ec3p+0,
+ -0x1.9f5588p-1,
+ 0x1.4611d8p+0,
+ 0x1.8745p-2,
+ -0x1.718da2p+1,
+ 0x1.e60d2p-1,
+ -0x1.45c4bap+1,
+ 0x1.418decp+1,
+ 0x1.389fap-2,
+ -0x1.338224p+1,
+ 0x1.6bcdc8p+0,
+ -0x1.15dd54p+0,
+ -0x1.20a04p-3,
+ -0x1.bae08p-5,
+ 0x1.874ac8p+0,
+ -0x1.efe266p+0,
+ -0x1.53e424p+0,
+ -0x1.289dc8p-1,
+ -0x1.86015cp+1,
+ -0x1.ebc568p-1,
+ 0x1.fbf8bp-1,
+ 0x1.f7c4ep+0,
+ 0x1.855ffp+1,
+ -0x1.a8a47p-1,
+ 0x1.074fe8p+1,
+ 0x1.091608p+0,
+ 0x1.f2117p-1,
+ 0x1.194f04p+1,
+ -0x1.0dc22p+1,
+ -0x1.1e8604p+1,
+ 0x1.826b08p-1,
+ 0x1.569874p+1,
+ 0x1.3c77p+0,
+ 0x1.787a28p+1,
+ 0x1.9e41d8p+0,
+ -0x1.43a58p+0,
+ 0x1.fa373p+0,
+ -0x1.2e9abp-2,
+ -0x1.420f92p+0,
+ -0x1.1a674ep+0,
+ -0x1.9f2fb2p+0,
+ 0x1.18948p-5,
+ 0x1.80d89p+0,
+ 0x1.ae3e4p-4,
+ 0x1.e72fb8p+0,
+ 0x1.291cf8p-1,
+ -0x1.2f28ep+0,
+ -0x1.0dd378p-1,
+ 0x1.f9025p-2,
+ -0x1.7261ecp+1,
+ 0x1.712fap+0,
+ -0x1.73dc7cp+1,
+ 0x1.4738p-2,
+ -0x1.e2bbdcp+0,
+ 0x1.36ae2cp+1,
+ -0x1.3a571ep+0,
+ -0x1.6b098ap+0,
+ -0x1.af94dp-2,
+ -0x1.86d746p+1,
+ 0x1.648c7cp+1,
+ 0x1.73d13cp+1,
+ -0x1.19f07ap+0,
+ 0x1.64f48p+0,
+ 0x1.6c2868p+0,
+ 0x1.5f1a24p+1,
+ -0x1.75b9fp-2,
+ -0x1.1e1816p+1,
+ 0x1.28d11p-1,
+ 0x1.ecc608p+0,
+ 0x1.ee0b68p+0,
+ -0x1.1d455p+0,
+ -0x1.410ad2p+0,
+ -0x1.df3bf8p-1,
+ -0x1.808182p+0,
+ -0x1.c7ddc2p+0,
+ -0x1.28e568p+1,
+ 0x1.09c6d4p+1,
+ 0x1.ffdd3p-2,
+ 0x1.78e464p+1,
+ 0x1.400a2p-3,
+ 0x1.c1f868p-1,
+ 0x1.4d5b4p-2,
+ -0x1.2c0d26p+1,
+ 0x1.860a5p+0,
+ -0x1.7abbd8p+1,
+ 0x1.8f99ep+0,
+ 0x1.53f29p+0,
+ -0x1.13b214p+1,
+ 0x1.250f1p-1,
+ 0x1.79318p-2,
+ 0x1.db6328p+0,
+ -0x1.1c2a16p+1,
+ 0x1.993e48p+0,
+ 0x1.67863p+0,
+ -0x1.49303cp+0,
+ -0x1.02ee9cp+1,
+ -0x1.265eccp+1,
+ -0x1.25ee6p-2,
+ -0x1.6aef76p+1,
+ 0x1.a3594p-3,
+ 0x1.78d8e8p+0,
+ 0x1.87e704p+1,
+ -0x1.1b0454p+1,
+ 0x1.613c8p+0,
+ -0x1.8ac80cp+1,
+ 0x1.7761ap-3,
+ -0x1.647314p+0,
+ -0x1.7e2d3p+1,
+ -0x1.d666d8p+0,
+ 0x1.53d94p-1,
+ 0x1.30a9c4p+1,
+ 0x1.0e03b8p+0,
+ -0x1.5d5476p+0,
+ -0x1.c8eeep-3,
+ 0x1.9a54p-4,
+ -0x1.0f0e48p+0,
+ -0x1.737a88p+1,
+ -0x1.6e3c18p-1,
+ 0x1.659998p+1,
+ -0x1.523e82p+1,
+ -0x1.75837p-2,
+ 0x1.fe4dep-3,
+ -0x1.956686p+0,
+ -0x1.61ed52p+0,
+ -0x1.a4f31cp+0,
+ -0x1.5f9914p+0,
+ 0x1.9bd8d8p+0,
+ -0x1.68f8cep+0,
+ 0x1.e62e6p-1,
+ -0x1.82bfd6p+1,
+ 0x1.ac9fap-2,
+ -0x1.1bac64p+1,
+ -0x1.8266e8p-1,
+ -0x1.594b78p-1,
+ 0x1.d8c11p-2,
+ -0x1.4c64cp+1,
+ 0x1.54aacp+0,
+ 0x1.0645a8p+1,
+ 0x1.43259p+1,
+ 0x1.faeb8p-5,
+ -0x1.bd663p-2,
+ -0x1.4093cap+1,
+ -0x1.4cb9d2p+1,
+ 0x1.66f2f4p+1,
+ -0x1.ee153p-2,
+ -0x1.0d02fcp+1,
+ -0x1.979bcp-3,
+ -0x1.0a78ep+0,
+ -0x1.6e2fbcp+1,
+ 0x1.3c94d8p+1,
+ -0x1.7ceef4p+1,
+ 0x1.551db8p+1,
+ 0x1.d731e8p+0,
+ -0x1.4866d8p+1,
+ 0x1.83d774p+1,
+ 0x1.6425d4p+1,
+ -0x1.51a138p-1,
+ 0x1.0a1d18p+1,
+ 0x1.7a1ea8p+0,
+ 0x1.3ddf3p-2,
+ 0x1.d3379p-1,
+ 0x1.5d4ccp-1,
+ 0x1.d6e2d8p+0,
+ 0x1.057938p+0,
+ 0x1.7f026cp+1,
+ 0x1.60e43cp+1,
+ -0x1.61f53ep+1,
+ 0x1.ef0e18p+0,
+ -0x1.76bbfep+0,
+ 0x1.f8cbep-1,
+ 0x1.bc07cp+0,
+ -0x1.4c154p-4,
+ -0x1.c3ba48p-1,
+ 0x1.b3fbbp-2,
+ -0x1.0cd0b4p+1,
+ -0x1.202a72p+0,
+ 0x1.8867bp+1,
+ 0x1.29cd1p+1,
+ 0x1.8175p+1,
+ 0x1.31375p-1,
+ 0x1.c921b8p-1,
+ -0x1.5321c4p+1,
+ -0x1.22e46ap+0,
+ 0x1.1970ap+1,
+ 0x1.df02ap+0,
+ -0x1.4d2cbcp+1,
+ -0x1.b43e02p+0,
+ 0x1.13f444p+1,
+ -0x1.5efb9p-2,
+ -0x1.0289fp+0,
+ -0x1.8e818p-5,
+ -0x1.44336p+1,
+ 0x1.1f6c2p+1,
+ 0x1.866dc4p+1,
+ -0x1.60688ep+1,
+ -0x1.158eep-1,
+ -0x1.f348a6p+0,
+ 0x1.5c19f8p-1,
+ -0x1.bf6ee8p-1,
+ -0x1.87416p-1,
+ 0x1.0fc118p-1,
+ -0x1.a98e6ep+0,
+ 0x1.97ba88p+0,
+ 0x1.e8d7p-4,
+ 0x1.03d5f8p+0,
+ -0x1.7a04dep+0,
+ 0x1.ab6d38p+0,
+ 0x1.0ad864p+1,
+ 0x1.5be57p+0,
+ -0x1.381208p+1,
+ 0x1.60a12p-1,
+ 0x1.9a852p+0,
+ 0x1.02821p-1,
+ -0x1.7aa292p+1,
+ 0x1.e195b8p+0,
+ -0x1.4aae72p+0,
+ 0x1.3c3568p+1,
+ 0x1.3a51c8p-1,
+ 0x1.7c1934p+1,
+ -0x1.41d9d8p+1,
+ 0x1.eabd4p+0,
+ 0x1.0c237cp+1,
+ 0x1.e3de18p+0,
+ 0x1.470f74p+1,
+ 0x1.40bc4cp+1,
+ -0x1.4605b8p+0,
+ -0x1.9de34ap+0,
+ 0x1.c7c3c8p+0,
+ 0x1.1ed6cp+0,
+ 0x1.0df5p+1,
+ -0x1.67529cp+1,
+ 0x1.373fc8p-1,
+ -0x1.9edda6p+0,
+ 0x1.8fe2dp-2,
+ -0x1.88ce9ep+1,
+ 0x1.70db3p-2,
+ -0x1.d877dp-1,
+ -0x1.fb6dep-3,
+ -0x1.1b10ccp+1,
+ 0x1.896ee8p+1,
+ -0x1.ae6fep-3,
+ 0x1.6fac38p-1,
+ -0x1.5e8adep+1,
+ 0x1.2239cp+1,
+ -0x1.50ba38p+1,
+ -0x1.45bb58p-1,
+ -0x1.f66d72p+0,
+ -0x1.cbf28p-2,
+ 0x1.03b9d8p+0,
+ 0x1.795158p+0,
+ -0x1.3898d8p-1,
+ -0x1.0b3f08p+1,
+ -0x1.003636p+1,
+};
+static const std::vector<float> sincosf_input4 = {
+ 0x1.d9b006p+4,
+ 0x1.21f776p+4,
+ 0x1.d78bf2p+4,
+ 0x1.d01f9cp+4,
+ 0x1.febap+4,
+ 0x1.0347eep+5,
+ 0x1.c6a5ep+3,
+ 0x1.cb9c1cp+4,
+ 0x1.e22748p+4,
+ 0x1.093644p+5,
+ 0x1.9c9e18p+4,
+ 0x1.b8408p+3,
+ 0x1.f005fcp+4,
+ 0x1.dafbcep+4,
+ 0x1.079p+5,
+ 0x1.0271bcp+3,
+ 0x1.038e2ep+4,
+ 0x1.9a2e88p+4,
+ 0x1.df39cp+2,
+ 0x1.f5f49ap+4,
+ 0x1.14c78p+4,
+ 0x1.71158ap+4,
+ 0x1.785988p+2,
+ 0x1.b5e23cp+3,
+ 0x1.e29e8cp+2,
+ 0x1.f0f57ap+3,
+ 0x1.f38858p+3,
+ 0x1.a10754p+4,
+ 0x1.625cdcp+2,
+ 0x1.92c832p+4,
+ 0x1.baf03cp+4,
+ 0x1.669e62p+3,
+ 0x1.a69232p+4,
+ 0x1.442e7ep+2,
+ 0x1.481d76p+4,
+ 0x1.3054f4p+2,
+ 0x1.bba956p+3,
+ 0x1.4b457ap+4,
+ 0x1.74d012p+4,
+ 0x1.4bf2ap+4,
+ 0x1.d9667ep+4,
+ 0x1.8a658p+3,
+ 0x1.0eb286p+4,
+ 0x1.d00eap+2,
+ 0x1.03eeeep+5,
+ 0x1.8648dap+2,
+ 0x1.48b3bcp+4,
+ 0x1.110e8cp+4,
+ 0x1.0b478ep+3,
+ 0x1.745e64p+4,
+ 0x1.394c0ep+2,
+ 0x1.f391fep+3,
+ 0x1.a22588p+4,
+ 0x1.0b707ap+4,
+ 0x1.99f6fcp+4,
+ 0x1.f2f446p+3,
+ 0x1.8be6a6p+3,
+ 0x1.b644p+4,
+ 0x1.964954p+4,
+ 0x1.9d3dep+2,
+ 0x1.c510f2p+3,
+ 0x1.7fa968p+4,
+ 0x1.082516p+4,
+ 0x1.aa925p+4,
+ 0x1.3e5572p+3,
+ 0x1.c69b1ep+2,
+ 0x1.6af1e6p+3,
+ 0x1.64fa8cp+3,
+ 0x1.aa928cp+4,
+ 0x1.2a9efap+3,
+ 0x1.d30044p+4,
+ 0x1.f82834p+1,
+ 0x1.3e9f2ap+4,
+ 0x1.a9d3c8p+4,
+ 0x1.19d32p+3,
+ 0x1.0ea6f2p+4,
+ 0x1.00b9bcp+2,
+ 0x1.06f3acp+5,
+ 0x1.a8addap+4,
+ 0x1.75f7c4p+4,
+ 0x1.a2275cp+4,
+ 0x1.9379fcp+4,
+ 0x1.ca327cp+4,
+ 0x1.b713eap+3,
+ 0x1.90f2f4p+3,
+ 0x1.8cee9p+2,
+ 0x1.e56ce2p+3,
+ 0x1.472eecp+3,
+ 0x1.f9bbp+4,
+ 0x1.9039c4p+4,
+ 0x1.d7b0b4p+2,
+ 0x1.cb606ap+4,
+ 0x1.719b04p+3,
+ 0x1.151dcep+2,
+ 0x1.a2c4fp+2,
+ 0x1.e6a9b6p+4,
+ 0x1.c87b9cp+3,
+ 0x1.00142ap+4,
+ 0x1.b6bba4p+4,
+ 0x1.aa339p+4,
+ 0x1.3e524p+3,
+ 0x1.814514p+4,
+ 0x1.02c3cep+2,
+ 0x1.2d1f72p+3,
+ 0x1.93219ap+3,
+ 0x1.e83158p+1,
+ 0x1.c00772p+4,
+ 0x1.6779bap+3,
+ 0x1.cac1fp+3,
+ 0x1.aff6b6p+4,
+ 0x1.0ca9cep+4,
+ 0x1.581194p+3,
+ 0x1.60f9dcp+4,
+ 0x1.2f19e6p+3,
+ 0x1.245b84p+3,
+ 0x1.261c1ep+3,
+ 0x1.d60db8p+3,
+ 0x1.a30f2ap+4,
+ 0x1.ca4a26p+4,
+ 0x1.bf5d58p+3,
+ 0x1.69282p+4,
+ 0x1.4c6456p+4,
+ 0x1.b604b2p+4,
+ 0x1.ee5b12p+4,
+ 0x1.99d6e6p+4,
+ 0x1.478e32p+4,
+ 0x1.5b51acp+2,
+ 0x1.6a44a2p+3,
+ 0x1.c657c2p+4,
+ 0x1.dfc308p+4,
+ 0x1.fc88ccp+3,
+ 0x1.140ccap+4,
+ 0x1.47ce8cp+4,
+ 0x1.6f3f48p+4,
+ 0x1.5fc7f8p+4,
+ 0x1.1724cap+4,
+ 0x1.91891cp+4,
+ 0x1.3e6506p+4,
+ 0x1.8656bcp+3,
+ 0x1.c5f82ep+3,
+ 0x1.965e0cp+3,
+ 0x1.5cf48ap+4,
+ 0x1.932c7p+3,
+ 0x1.0a2962p+4,
+ 0x1.88bcc4p+4,
+ 0x1.b18a3cp+4,
+ 0x1.68e42p+4,
+ 0x1.85b798p+2,
+ 0x1.e8bc72p+3,
+ 0x1.81fedep+3,
+ 0x1.918042p+4,
+ 0x1.7c3728p+3,
+ 0x1.174ad4p+4,
+ 0x1.582e72p+4,
+ 0x1.af735ep+4,
+ 0x1.3f8476p+2,
+ 0x1.fde618p+3,
+ 0x1.e4d202p+3,
+ 0x1.750cb2p+3,
+ 0x1.071d9cp+5,
+ 0x1.3826f4p+3,
+ 0x1.e8e456p+4,
+ 0x1.662342p+4,
+ 0x1.d2a076p+3,
+ 0x1.d2f50ep+3,
+ 0x1.ecd11cp+4,
+ 0x1.fc5542p+3,
+ 0x1.f92eb4p+4,
+ 0x1.2166ep+2,
+ 0x1.0045dap+4,
+ 0x1.09b87cp+5,
+ 0x1.b427ecp+4,
+ 0x1.e51fc8p+4,
+ 0x1.f690eap+3,
+ 0x1.083d52p+5,
+ 0x1.7d15bp+4,
+ 0x1.ce6fbep+2,
+ 0x1.a6a036p+3,
+ 0x1.8a9ea4p+3,
+ 0x1.1098b6p+4,
+ 0x1.dd452cp+2,
+ 0x1.ca0608p+3,
+ 0x1.c3609p+2,
+ 0x1.358da6p+4,
+ 0x1.20c3c8p+3,
+ 0x1.9bd816p+4,
+ 0x1.02033ap+5,
+ 0x1.e3a1dep+4,
+ 0x1.a544fep+3,
+ 0x1.038cc6p+5,
+ 0x1.35d3e6p+4,
+ 0x1.5ec00ep+4,
+ 0x1.afa608p+3,
+ 0x1.16712ep+4,
+ 0x1.3de652p+4,
+ 0x1.5009dep+4,
+ 0x1.3574f4p+4,
+ 0x1.d7be58p+3,
+ 0x1.bc68e8p+2,
+ 0x1.095f3cp+5,
+ 0x1.79ae08p+4,
+ 0x1.c8733cp+3,
+ 0x1.53bf98p+3,
+ 0x1.c8968ep+3,
+ 0x1.ccf14cp+4,
+ 0x1.a75d54p+4,
+ 0x1.eb9c28p+4,
+ 0x1.9f6f94p+4,
+ 0x1.e8ac94p+2,
+ 0x1.a13bdep+2,
+ 0x1.d8268ap+3,
+ 0x1.399b68p+4,
+ 0x1.510a16p+4,
+ 0x1.bce66ap+4,
+ 0x1.4f90aep+4,
+ 0x1.f50a16p+4,
+ 0x1.36da48p+3,
+ 0x1.1b6eb8p+2,
+ 0x1.4c3ee8p+4,
+ 0x1.fd7ee8p+3,
+ 0x1.81a422p+4,
+ 0x1.ecd51ap+3,
+ 0x1.ebf874p+4,
+ 0x1.4e644p+3,
+ 0x1.98754ep+4,
+ 0x1.22c8d4p+3,
+ 0x1.b45e62p+4,
+ 0x1.c96f5p+4,
+ 0x1.42fdap+2,
+ 0x1.20228ep+4,
+ 0x1.da26f2p+3,
+ 0x1.7207e8p+4,
+ 0x1.8c7f4ep+4,
+ 0x1.29c686p+3,
+ 0x1.bec8f6p+4,
+ 0x1.bcd07cp+1,
+ 0x1.b84222p+3,
+ 0x1.dc4b4ap+4,
+ 0x1.f7bf54p+4,
+ 0x1.4d4adcp+4,
+ 0x1.53ec6ap+4,
+ 0x1.53bc8p+3,
+ 0x1.ff15cp+4,
+ 0x1.f0a64cp+4,
+ 0x1.eb078ap+4,
+ 0x1.0ab37cp+2,
+ 0x1.6d385ep+4,
+ 0x1.f7aa4ap+4,
+ 0x1.83d21cp+4,
+ 0x1.06c1aap+5,
+ 0x1.31ac66p+3,
+ 0x1.42b3fp+3,
+ 0x1.b345fcp+2,
+ 0x1.fabcbep+3,
+ 0x1.95f77p+4,
+ 0x1.16080ap+4,
+ 0x1.dea248p+4,
+ 0x1.0546a6p+5,
+ 0x1.b97b28p+4,
+ 0x1.e45098p+4,
+ 0x1.c929bp+3,
+ 0x1.28fe9ap+4,
+ 0x1.9af9e8p+2,
+ 0x1.b788fp+4,
+ 0x1.8e02c4p+4,
+ 0x1.755dfp+3,
+ 0x1.dfaec2p+4,
+ 0x1.aab09p+3,
+ 0x1.8079c6p+4,
+ 0x1.be8d54p+4,
+ 0x1.eca9aap+4,
+ 0x1.fca4d8p+3,
+ 0x1.9b096cp+3,
+ 0x1.1c290ap+4,
+ 0x1.01a39p+4,
+ 0x1.8f59c4p+4,
+ 0x1.03b19p+3,
+ 0x1.1e2d5p+4,
+ 0x1.6f1cbp+3,
+ 0x1.c93c1ep+3,
+ 0x1.9191aep+4,
+ 0x1.c14772p+2,
+ 0x1.cd788p+1,
+ 0x1.ca4074p+4,
+ 0x1.6a98fcp+3,
+ 0x1.fde204p+4,
+ 0x1.3c59ap+4,
+ 0x1.35125cp+3,
+ 0x1.b74914p+4,
+ 0x1.2eb1a8p+4,
+ 0x1.f57cfp+3,
+ 0x1.0a334ap+3,
+ 0x1.1ecf72p+4,
+ 0x1.e1214cp+4,
+ 0x1.73c0bp+3,
+ 0x1.823b22p+3,
+ 0x1.7156b8p+3,
+ 0x1.894a2ap+4,
+ 0x1.a58e6p+2,
+ 0x1.6e8994p+3,
+ 0x1.c32e84p+4,
+ 0x1.89e944p+3,
+ 0x1.8d77fp+2,
+ 0x1.6e0f5cp+4,
+ 0x1.0f7998p+2,
+ 0x1.bfcf76p+3,
+ 0x1.2872b2p+3,
+ 0x1.3c4abcp+3,
+ 0x1.ac2caap+4,
+ 0x1.078762p+5,
+ 0x1.a5fd0ep+4,
+ 0x1.3400a4p+4,
+ 0x1.b583c4p+4,
+ 0x1.1af9f4p+4,
+ 0x1.b0d008p+4,
+ 0x1.f2e008p+1,
+ 0x1.4e47eap+4,
+ 0x1.9d7c24p+4,
+ 0x1.99fdep+3,
+ 0x1.4243cp+3,
+ 0x1.3ad2a6p+3,
+ 0x1.b415f2p+3,
+ 0x1.100638p+3,
+ 0x1.a7879ap+4,
+ 0x1.b02518p+4,
+ 0x1.a5d3fep+3,
+ 0x1.5fedfcp+3,
+ 0x1.01756ap+5,
+ 0x1.fb27fap+4,
+ 0x1.3bcdcp+2,
+ 0x1.80311ap+4,
+ 0x1.f33ed2p+4,
+ 0x1.02dc32p+5,
+ 0x1.7685fap+3,
+ 0x1.d235e8p+3,
+ 0x1.7e562p+4,
+ 0x1.3cf0b2p+2,
+ 0x1.acf6ap+3,
+ 0x1.a42964p+3,
+ 0x1.178948p+3,
+ 0x1.46f674p+3,
+ 0x1.8b7f02p+2,
+ 0x1.a1f042p+3,
+ 0x1.fe4758p+1,
+ 0x1.5e217cp+4,
+ 0x1.400002p+4,
+ 0x1.da4dacp+4,
+ 0x1.5a8792p+4,
+ 0x1.72d808p+4,
+ 0x1.065256p+5,
+ 0x1.8bcc9ap+4,
+ 0x1.5a0eecp+4,
+ 0x1.7ea664p+2,
+ 0x1.6853b6p+4,
+ 0x1.f9077ap+4,
+ 0x1.ac2286p+4,
+ 0x1.ceeceap+3,
+ 0x1.f29254p+4,
+ 0x1.aaca38p+2,
+ 0x1.fbf222p+1,
+ 0x1.d33954p+1,
+ 0x1.6e6c58p+4,
+ 0x1.7e6b5cp+4,
+ 0x1.7c55b4p+3,
+ 0x1.e4371ep+4,
+ 0x1.e02304p+2,
+ 0x1.1e7092p+4,
+ 0x1.48e24cp+3,
+ 0x1.4fcbb6p+3,
+ 0x1.da9748p+4,
+ 0x1.aa8dcap+4,
+ 0x1.0a73d2p+4,
+ 0x1.b05c22p+4,
+ 0x1.f9e69p+4,
+ 0x1.41421ap+4,
+ 0x1.2004a6p+4,
+ 0x1.f7e3a2p+4,
+ 0x1.6daee4p+4,
+ 0x1.f505dcp+1,
+ 0x1.188de4p+3,
+ 0x1.4b1e08p+4,
+ 0x1.5a884ap+3,
+ 0x1.636968p+3,
+ 0x1.c63146p+4,
+ 0x1.8d75dcp+3,
+ 0x1.f57fc8p+4,
+ 0x1.422f22p+4,
+ 0x1.4a4648p+4,
+ 0x1.97b3e4p+2,
+ 0x1.aac73p+1,
+ 0x1.9b9edcp+4,
+ 0x1.888fb6p+4,
+ 0x1.21cbf2p+4,
+ 0x1.40a17p+3,
+ 0x1.df3d74p+4,
+ 0x1.e8acccp+4,
+ 0x1.84b146p+4,
+ 0x1.ca295p+4,
+ 0x1.20c3c8p+4,
+ 0x1.215d5ap+3,
+ 0x1.c54f64p+3,
+ 0x1.10fab6p+4,
+ 0x1.022ca8p+5,
+ 0x1.96c25cp+4,
+ 0x1.22c034p+3,
+ 0x1.c14e3ep+3,
+ 0x1.9288e4p+3,
+ 0x1.61481ap+4,
+ 0x1.167068p+3,
+ 0x1.a9809p+4,
+ 0x1.55fbf6p+3,
+ 0x1.196bc8p+2,
+ 0x1.1fc4ep+3,
+ 0x1.be704cp+3,
+ 0x1.ad1edcp+4,
+ 0x1.54bd56p+4,
+ 0x1.e85e14p+4,
+ 0x1.13b4c8p+3,
+ 0x1.7b4b1ep+4,
+ 0x1.8f19dcp+4,
+ 0x1.2e3b88p+4,
+ 0x1.9b9566p+3,
+ 0x1.013aa6p+5,
+ 0x1.15f566p+4,
+ 0x1.d3d786p+3,
+ 0x1.2bb3a4p+4,
+ 0x1.d0c012p+4,
+ 0x1.947eb8p+4,
+ 0x1.f47356p+4,
+ 0x1.30c408p+4,
+ 0x1.40abbep+3,
+ 0x1.5dfd3ap+3,
+ 0x1.3fd38p+3,
+ 0x1.0830c6p+3,
+ 0x1.47fb02p+4,
+ 0x1.9e73ep+2,
+ 0x1.f5c8f4p+1,
+ 0x1.7d004cp+2,
+ 0x1.cb6c52p+4,
+ 0x1.7b3a8p+4,
+ 0x1.0cf8d4p+3,
+ 0x1.ac16fep+4,
+ 0x1.a7ece4p+2,
+ 0x1.31558ep+4,
+ 0x1.616cfap+4,
+ 0x1.568cfcp+3,
+ 0x1.728ba4p+2,
+ 0x1.f7a77p+2,
+ 0x1.3bfap+4,
+ 0x1.bdcfc4p+3,
+ 0x1.0a9e4p+4,
+ 0x1.2acd32p+4,
+ 0x1.0194c2p+4,
+ 0x1.69b6bp+4,
+ 0x1.8739c2p+4,
+ 0x1.d0649p+3,
+ 0x1.d5fd24p+4,
+ 0x1.59ffc2p+4,
+ 0x1.1db42cp+3,
+ 0x1.04edfp+5,
+ 0x1.478eb8p+4,
+ 0x1.41e26ap+4,
+ 0x1.43b74ep+2,
+ 0x1.6b0c6ap+2,
+ 0x1.3a712p+4,
+ 0x1.a2cf0ep+4,
+ 0x1.46a6cep+3,
+ 0x1.723e36p+4,
+ 0x1.03c712p+4,
+ 0x1.feccdcp+4,
+ 0x1.378e1ep+4,
+ 0x1.36db7ap+4,
+ 0x1.38b218p+3,
+ 0x1.8788dap+4,
+ 0x1.24b5d2p+4,
+ 0x1.205a46p+2,
+ 0x1.480e56p+3,
+ 0x1.5b846ap+3,
+ 0x1.b4a0b8p+4,
+ 0x1.f1cfeep+3,
+ 0x1.ad833p+4,
+ 0x1.50a87p+4,
+ 0x1.28a382p+4,
+ 0x1.7d753ep+3,
+ 0x1.11e73cp+2,
+ 0x1.137bf8p+2,
+ 0x1.ffe5a6p+3,
+ 0x1.efab38p+3,
+ 0x1.8add74p+4,
+ 0x1.cdc3f6p+3,
+ 0x1.24b0e6p+3,
+ 0x1.9ee018p+4,
+ 0x1.7906f2p+4,
+ 0x1.1690bcp+4,
+ 0x1.5feadap+3,
+ 0x1.a58552p+2,
+ 0x1.95347ap+3,
+ 0x1.a2563ap+4,
+ 0x1.7889a8p+3,
+ 0x1.08137cp+4,
+ 0x1.a87f4cp+1,
+ 0x1.9840ecp+2,
+ 0x1.4de56ep+4,
+ 0x1.62b97ep+3,
+ 0x1.b4187ap+3,
+ 0x1.1b8f58p+3,
+ 0x1.aeb858p+4,
+ 0x1.b7b1bap+4,
+ 0x1.7ceb72p+4,
+ 0x1.fbb328p+4,
+ 0x1.74178ap+3,
+ 0x1.03b668p+4,
+};
+static const std::vector<float> sincosf_input5 = {
+ 0x1.a58d5p+9,
+ 0x1.438348p+8,
+ 0x1.a70332p+9,
+ 0x1.03e326p+9,
+ 0x1.d0eb62p+9,
+ 0x1.d73d76p+9,
+ 0x1.bdc7f6p+9,
+ 0x1.0e2808p+8,
+ 0x1.c8c1dap+9,
+ 0x1.55c5f6p+9,
+ 0x1.f0c75cp+6,
+ 0x1.12b71cp+7,
+ 0x1.cf863ep+8,
+ 0x1.6cbf66p+9,
+ 0x1.5b0cb8p+7,
+ 0x1.55a5c2p+9,
+ 0x1.2fbedp+7,
+ 0x1.7b3208p+8,
+ 0x1.85ceb4p+8,
+ 0x1.65ae0ep+8,
+ 0x1.e8014p+9,
+ 0x1.c68b08p+9,
+ 0x1.de043cp+9,
+ 0x1.85858cp+9,
+ 0x1.d82842p+8,
+ 0x1.beae4cp+9,
+ 0x1.2ec9dep+9,
+ 0x1.1fe07p+9,
+ 0x1.e57a3cp+6,
+ 0x1.21d12ep+8,
+ 0x1.d3b106p+9,
+ 0x1.172896p+7,
+ 0x1.7fd932p+7,
+ 0x1.ccb13cp+9,
+ 0x1.d85418p+9,
+ 0x1.dc8cd2p+8,
+ 0x1.db05bcp+9,
+ 0x1.f79c9p+8,
+ 0x1.ab3906p+7,
+ 0x1.27603cp+9,
+ 0x1.b59372p+9,
+ 0x1.190414p+7,
+ 0x1.7bd034p+9,
+ 0x1.62fb2cp+9,
+ 0x1.ad3ed6p+8,
+ 0x1.8f0ddcp+9,
+ 0x1.2c8cc8p+9,
+ 0x1.f10002p+8,
+ 0x1.ceeb9cp+9,
+ 0x1.56cea8p+8,
+ 0x1.4cb9f2p+8,
+ 0x1.e24fa2p+6,
+ 0x1.6e11p+9,
+ 0x1.9164dp+8,
+ 0x1.08d868p+9,
+ 0x1.35dedp+8,
+ 0x1.2bfbcp+9,
+ 0x1.3290f6p+9,
+ 0x1.878d1ap+8,
+ 0x1.405b0ep+9,
+ 0x1.b9a5b4p+9,
+ 0x1.bd96eap+8,
+ 0x1.61b97ap+9,
+ 0x1.143eb8p+9,
+ 0x1.06a794p+9,
+ 0x1.9287bcp+6,
+ 0x1.52b45p+9,
+ 0x1.e5a1fp+7,
+ 0x1.de9484p+7,
+ 0x1.beb85ap+9,
+ 0x1.0fef88p+7,
+ 0x1.9dfa7ep+9,
+ 0x1.66afa2p+8,
+ 0x1.8a2f5ep+7,
+ 0x1.9011f2p+9,
+ 0x1.6a0aap+9,
+ 0x1.03553cp+9,
+ 0x1.01086cp+8,
+ 0x1.d98c62p+7,
+ 0x1.04bc3ep+8,
+ 0x1.a790e8p+7,
+ 0x1.643b7ep+9,
+ 0x1.ee6e7ap+8,
+ 0x1.a39d52p+8,
+ 0x1.816d88p+7,
+ 0x1.d7e4dcp+8,
+ 0x1.a86616p+9,
+ 0x1.227074p+7,
+ 0x1.3f0f04p+8,
+ 0x1.3b6378p+7,
+ 0x1.47fcb6p+7,
+ 0x1.a15942p+9,
+ 0x1.1275c4p+9,
+ 0x1.964c26p+8,
+ 0x1.c86162p+9,
+ 0x1.61ae1cp+8,
+ 0x1.bd6c34p+9,
+ 0x1.e9c03ep+7,
+ 0x1.0bf7bep+7,
+ 0x1.e6d2e4p+9,
+ 0x1.d1490cp+8,
+ 0x1.c10be6p+9,
+ 0x1.7d42c4p+9,
+ 0x1.43ae2cp+8,
+ 0x1.82ccfp+9,
+ 0x1.ca5528p+9,
+ 0x1.1a3198p+9,
+ 0x1.98dd9cp+9,
+ 0x1.35e072p+9,
+ 0x1.23edaep+9,
+ 0x1.be91b4p+7,
+ 0x1.3c2016p+9,
+ 0x1.44b1dp+8,
+ 0x1.7a648ap+9,
+ 0x1.447abap+7,
+ 0x1.547fb8p+9,
+ 0x1.76ab38p+9,
+ 0x1.f8c2c6p+8,
+ 0x1.68a83cp+9,
+ 0x1.56f30ep+9,
+ 0x1.9b79bp+9,
+ 0x1.488772p+8,
+ 0x1.14c354p+9,
+ 0x1.baafb6p+9,
+ 0x1.a05d9ep+7,
+ 0x1.2ddc9cp+9,
+ 0x1.5a5376p+9,
+ 0x1.4b52cp+8,
+ 0x1.168e1ep+7,
+ 0x1.e2dec8p+9,
+ 0x1.41e5c8p+9,
+ 0x1.0b51dap+9,
+ 0x1.ca1244p+9,
+ 0x1.69b2dp+9,
+ 0x1.db8942p+9,
+ 0x1.84cdd8p+9,
+ 0x1.2399ap+9,
+ 0x1.8a3554p+8,
+ 0x1.df01aap+8,
+ 0x1.e03b4ep+7,
+ 0x1.f1591ep+6,
+ 0x1.257d02p+7,
+ 0x1.c8cae6p+7,
+ 0x1.17647ep+9,
+ 0x1.f0fdeep+9,
+ 0x1.d02362p+6,
+ 0x1.b8d7fep+9,
+ 0x1.a649cp+8,
+ 0x1.1cc578p+8,
+ 0x1.34508cp+7,
+ 0x1.d330ap+9,
+ 0x1.a2a332p+9,
+ 0x1.5cfaa4p+9,
+ 0x1.a0b3dep+9,
+ 0x1.5f06e8p+9,
+ 0x1.5b039ap+9,
+ 0x1.9fcd3ep+9,
+ 0x1.44a582p+9,
+ 0x1.74be88p+7,
+ 0x1.619a8cp+8,
+ 0x1.cedca6p+9,
+ 0x1.f6bfe2p+8,
+ 0x1.b0b69ep+9,
+ 0x1.b6fc96p+9,
+ 0x1.393de8p+9,
+ 0x1.4a59b2p+9,
+ 0x1.205de8p+9,
+ 0x1.0b7fb4p+9,
+ 0x1.9362ep+8,
+ 0x1.99e7f2p+7,
+ 0x1.2fb1a4p+8,
+ 0x1.2222d4p+9,
+ 0x1.b7009ap+9,
+ 0x1.23dd5cp+8,
+ 0x1.8bf2fap+9,
+ 0x1.a2418p+9,
+ 0x1.28ab3p+9,
+ 0x1.20ef26p+8,
+ 0x1.d6e53p+8,
+ 0x1.43808ap+9,
+ 0x1.99fdd4p+9,
+ 0x1.c28ep+7,
+ 0x1.b1c144p+8,
+ 0x1.2b1fa4p+7,
+ 0x1.1003cp+7,
+ 0x1.bcf53p+9,
+ 0x1.e9339ap+9,
+ 0x1.7820cp+9,
+ 0x1.bb7e5ap+9,
+ 0x1.350d5ap+7,
+ 0x1.745a32p+9,
+ 0x1.4358ap+9,
+ 0x1.dce282p+6,
+ 0x1.91dbaep+9,
+ 0x1.d90cf4p+8,
+ 0x1.11a80ap+8,
+ 0x1.986538p+8,
+ 0x1.06ea9ep+8,
+ 0x1.a0d218p+9,
+ 0x1.d03902p+9,
+ 0x1.a1fa7p+9,
+ 0x1.300118p+9,
+ 0x1.e99d7ap+9,
+ 0x1.644b1cp+9,
+ 0x1.e41afep+8,
+ 0x1.334a38p+7,
+ 0x1.6d70dap+8,
+ 0x1.d2d868p+9,
+ 0x1.c08c7ep+9,
+ 0x1.5539b4p+9,
+ 0x1.e39a9ep+8,
+ 0x1.37b61cp+9,
+ 0x1.a4d3aap+9,
+ 0x1.7555d6p+9,
+ 0x1.431de8p+7,
+ 0x1.d5fc94p+9,
+ 0x1.28092cp+9,
+ 0x1.93a8fp+9,
+ 0x1.9f55a8p+9,
+ 0x1.4643d2p+8,
+ 0x1.260698p+9,
+ 0x1.0616cap+9,
+ 0x1.3c171ep+9,
+ 0x1.a8c48p+9,
+ 0x1.c9a5bcp+9,
+ 0x1.a1bd8ep+8,
+ 0x1.0db7b2p+9,
+ 0x1.dc4d06p+6,
+ 0x1.56f8f8p+8,
+ 0x1.1e031p+9,
+ 0x1.ae95f6p+9,
+ 0x1.4eeb3p+8,
+ 0x1.c6b798p+9,
+ 0x1.97aadep+8,
+ 0x1.4e35d8p+8,
+ 0x1.abc94ep+9,
+ 0x1.f81574p+8,
+ 0x1.51843ep+7,
+ 0x1.437464p+8,
+ 0x1.7ef9ccp+9,
+ 0x1.910f5ap+9,
+ 0x1.416f9p+8,
+ 0x1.c9b2bp+9,
+ 0x1.547214p+9,
+ 0x1.a04846p+8,
+ 0x1.325306p+9,
+ 0x1.8d3a34p+7,
+ 0x1.7b5d48p+9,
+ 0x1.c7f67ep+9,
+ 0x1.ea508cp+7,
+ 0x1.87df1p+8,
+ 0x1.d28b56p+9,
+ 0x1.7cb404p+9,
+ 0x1.2a2c44p+8,
+ 0x1.f0c13p+8,
+ 0x1.8d211cp+9,
+ 0x1.b76e66p+8,
+ 0x1.385fa2p+9,
+ 0x1.c3fe6ap+9,
+ 0x1.4c26a4p+8,
+ 0x1.f4fbd4p+6,
+ 0x1.c8f658p+9,
+ 0x1.bef93cp+9,
+ 0x1.e2434ep+9,
+ 0x1.05d374p+9,
+ 0x1.c252c2p+6,
+ 0x1.6e4b62p+8,
+ 0x1.3f8a4p+7,
+ 0x1.93da56p+8,
+ 0x1.19831cp+9,
+ 0x1.138e7cp+9,
+ 0x1.237afp+8,
+ 0x1.cf3dbap+9,
+ 0x1.7e8c48p+7,
+ 0x1.481ccep+9,
+ 0x1.9cc84ap+9,
+ 0x1.0d9dcp+9,
+ 0x1.654dep+9,
+ 0x1.168e28p+9,
+ 0x1.c4e90ep+7,
+ 0x1.2d7d38p+9,
+ 0x1.3c52aap+9,
+ 0x1.745912p+7,
+ 0x1.5ef9bcp+8,
+ 0x1.d22404p+9,
+ 0x1.83a49p+8,
+ 0x1.18c9cep+7,
+ 0x1.176b2p+9,
+ 0x1.7d5684p+9,
+ 0x1.1fc3f4p+9,
+ 0x1.058e7p+7,
+ 0x1.86aa68p+7,
+ 0x1.1a4d58p+9,
+ 0x1.5de8bap+8,
+ 0x1.8b975p+9,
+ 0x1.8cea7p+7,
+ 0x1.debe9cp+7,
+ 0x1.0ed648p+8,
+ 0x1.f60024p+8,
+ 0x1.3157a4p+9,
+ 0x1.e1be62p+9,
+ 0x1.b9ed12p+9,
+ 0x1.bf1442p+8,
+ 0x1.1d1f7cp+9,
+ 0x1.7a16cep+7,
+ 0x1.046208p+9,
+ 0x1.4acb8cp+7,
+ 0x1.03db5ap+8,
+ 0x1.e51724p+9,
+ 0x1.71b228p+8,
+ 0x1.67219p+8,
+ 0x1.640e06p+9,
+ 0x1.f1ccaep+7,
+ 0x1.3efddp+7,
+ 0x1.4b8e38p+9,
+ 0x1.33782p+9,
+ 0x1.b3e11cp+9,
+ 0x1.284d4ep+9,
+ 0x1.58c496p+8,
+ 0x1.e074e4p+9,
+ 0x1.b9f05cp+9,
+ 0x1.622fa2p+9,
+ 0x1.88ff0cp+9,
+ 0x1.5461p+8,
+ 0x1.091de8p+9,
+ 0x1.9727fcp+9,
+ 0x1.1807cep+9,
+ 0x1.10e93p+8,
+ 0x1.90232ap+8,
+ 0x1.5813bap+9,
+ 0x1.0edc58p+9,
+ 0x1.99e58ep+9,
+ 0x1.086858p+8,
+ 0x1.d01232p+9,
+ 0x1.e9c72cp+8,
+ 0x1.8bc82cp+8,
+ 0x1.e43a8cp+8,
+ 0x1.f1e7ap+9,
+ 0x1.d49c7ep+9,
+ 0x1.3f9788p+9,
+ 0x1.728016p+9,
+ 0x1.56e6fcp+9,
+ 0x1.ee6ffep+9,
+ 0x1.053452p+8,
+ 0x1.46273p+8,
+ 0x1.50e7fap+7,
+ 0x1.287256p+8,
+ 0x1.5a9836p+9,
+ 0x1.b0ed0ep+9,
+ 0x1.320a22p+9,
+ 0x1.de35ccp+6,
+ 0x1.3a8ad8p+8,
+ 0x1.947d04p+9,
+ 0x1.ceb7ccp+8,
+ 0x1.d810dep+8,
+ 0x1.2ab464p+8,
+ 0x1.08b8d8p+9,
+ 0x1.8b8a4ap+9,
+ 0x1.6051f8p+9,
+ 0x1.df991ep+9,
+ 0x1.b467f8p+7,
+ 0x1.3be4b6p+8,
+ 0x1.587794p+9,
+ 0x1.9be00ap+7,
+ 0x1.54bb18p+9,
+ 0x1.95ad08p+9,
+ 0x1.e48a12p+7,
+ 0x1.87716ep+9,
+ 0x1.9aa8dap+9,
+ 0x1.33e4acp+8,
+ 0x1.9a013cp+7,
+ 0x1.fa74bp+7,
+ 0x1.16a6ap+9,
+ 0x1.832c46p+9,
+ 0x1.13cca4p+9,
+ 0x1.189dfep+9,
+ 0x1.a837fp+7,
+ 0x1.e61fecp+9,
+ 0x1.daf868p+6,
+ 0x1.08f726p+9,
+ 0x1.7e404cp+9,
+ 0x1.865fb4p+7,
+ 0x1.4e6adp+9,
+ 0x1.af287ap+8,
+ 0x1.f4904ep+8,
+ 0x1.9a0786p+8,
+ 0x1.df8514p+7,
+ 0x1.b91148p+8,
+ 0x1.170dp+7,
+ 0x1.11e8dp+7,
+ 0x1.df9d2p+9,
+ 0x1.17217ep+8,
+ 0x1.7d9408p+9,
+ 0x1.7ba4b8p+9,
+ 0x1.8f652ep+9,
+ 0x1.aa5444p+7,
+ 0x1.6da108p+7,
+ 0x1.6ec024p+7,
+ 0x1.f4733ep+8,
+ 0x1.af3bcp+9,
+ 0x1.c0b2b8p+8,
+ 0x1.c3ef32p+9,
+ 0x1.5e4c42p+9,
+ 0x1.8c2518p+7,
+ 0x1.c63a78p+7,
+ 0x1.ba0b02p+7,
+ 0x1.4df914p+9,
+ 0x1.01f2dp+9,
+ 0x1.76ac44p+9,
+ 0x1.76845p+7,
+ 0x1.f0b86p+8,
+ 0x1.def1b2p+9,
+ 0x1.54f5e8p+8,
+ 0x1.2aea6cp+8,
+ 0x1.5e8f2cp+9,
+ 0x1.e06afcp+7,
+ 0x1.dd7188p+9,
+ 0x1.a87494p+8,
+ 0x1.9a6a04p+8,
+ 0x1.3bb6cp+9,
+ 0x1.b5df6ap+9,
+ 0x1.eac37cp+9,
+ 0x1.3e471cp+7,
+ 0x1.457958p+9,
+ 0x1.84b278p+9,
+ 0x1.505a1p+9,
+ 0x1.7043f4p+7,
+ 0x1.11cfp+9,
+ 0x1.a26364p+8,
+ 0x1.eb975ap+9,
+ 0x1.e3b906p+6,
+ 0x1.2b92b8p+9,
+ 0x1.d1079ep+9,
+ 0x1.6e795cp+9,
+ 0x1.279da8p+8,
+ 0x1.3de18ap+9,
+ 0x1.5b33ecp+8,
+ 0x1.ca3058p+9,
+ 0x1.3bb5cep+9,
+ 0x1.bc3a3ep+9,
+ 0x1.d7c70ap+9,
+ 0x1.3562d6p+9,
+ 0x1.09d65cp+8,
+ 0x1.cc57ecp+9,
+ 0x1.8dac24p+9,
+ 0x1.23c146p+9,
+ 0x1.a1138p+8,
+ 0x1.456378p+7,
+ 0x1.f609b6p+7,
+ 0x1.6f0538p+9,
+ 0x1.ed2512p+9,
+ 0x1.0be67ep+7,
+ 0x1.1ceb8ap+9,
+ 0x1.caa9a6p+9,
+ 0x1.9d7336p+7,
+ 0x1.35a1c8p+9,
+ 0x1.e6b7ap+8,
+ 0x1.6595e2p+9,
+ 0x1.0ab05p+9,
+ 0x1.adb8ccp+7,
+ 0x1.aea1fcp+9,
+ 0x1.2ac79cp+9,
+ 0x1.bcc348p+9,
+ 0x1.6a0e52p+8,
+ 0x1.70eec2p+9,
+ 0x1.7a41c4p+7,
+ 0x1.598196p+9,
+ 0x1.9cb7ccp+9,
+ 0x1.675a3ep+9,
+ 0x1.4a69eap+9,
+ 0x1.bd07aep+6,
+ 0x1.0c9bp+8,
+ 0x1.1cf0d2p+7,
+ 0x1.3b711cp+9,
+ 0x1.25a83p+9,
+ 0x1.97acep+9,
+ 0x1.15eadp+9,
+ 0x1.55f7b4p+9,
+ 0x1.9b3d86p+9,
+ 0x1.257628p+9,
+ 0x1.5f96b8p+8,
+ 0x1.991ad4p+9,
+ 0x1.f48576p+8,
+ 0x1.6ea988p+8,
+ 0x1.6af9bap+8,
+ 0x1.7ceecp+9,
+ 0x1.f31982p+9,
+ 0x1.7c52cap+8,
+ 0x1.a9fc42p+8,
+ 0x1.2f641p+9,
+ 0x1.b4fde2p+6,
+ 0x1.8d06fap+9,
+ 0x1.0708a8p+8,
+ 0x1.9760fap+8,
+ 0x1.1cc328p+7,
+ 0x1.e819b4p+9,
+ 0x1.9c5e7ap+7,
+ 0x1.266414p+9,
+ 0x1.bd7a1cp+8,
+ 0x1.3dc13ap+8,
+ 0x1.26a3cap+9,
+ 0x1.53052ep+9,
+ 0x1.3ab898p+8,
+ 0x1.ce9b96p+9,
+ 0x1.90ec7p+9,
+ 0x1.4b0576p+7,
+ 0x1.f752acp+7,
+ 0x1.b6cdecp+9,
+ 0x1.83968p+9,
+ 0x1.15a5e8p+9,
+ 0x1.e9c90ap+7,
+ 0x1.9b097ep+9,
+};
+static const std::vector<float> sincosf_input6 = {
+ 0x1.e44094p+100,
+ 0x1.36e29p+106,
+ 0x1.b2e762p+105,
+ 0x1.b0674ap+102,
+ 0x1.e54982p+103,
+ 0x1.2c1c92p+106,
+ 0x1.167bfap+105,
+ 0x1.25bea6p+106,
+ 0x1.1681a6p+106,
+ 0x1.51c39cp+105,
+ 0x1.026514p+106,
+ 0x1.cc029ep+105,
+ 0x1.3372c8p+105,
+ 0x1.cb9c58p+104,
+ 0x1.219dccp+104,
+ 0x1.2b67bap+106,
+ 0x1.632382p+102,
+ 0x1.72928cp+104,
+ 0x1.28e0dep+106,
+ 0x1.637182p+105,
+ 0x1.4e0cdcp+105,
+ 0x1.65938ap+103,
+ 0x1.cba67ep+105,
+ 0x1.b99b64p+104,
+ 0x1.6f0626p+104,
+ 0x1.0917dep+106,
+ 0x1.4c4408p+104,
+ 0x1.9ddc02p+104,
+ 0x1.379e7ap+106,
+ 0x1.fece04p+104,
+ 0x1.05c4p+105,
+ 0x1.d331b8p+105,
+ 0x1.ec2b84p+103,
+ 0x1.bb2a04p+103,
+ 0x1.09a25ep+105,
+ 0x1.727284p+105,
+ 0x1.ab8524p+104,
+ 0x1.3ef73ep+103,
+ 0x1.36bfc4p+106,
+ 0x1.f98c64p+104,
+ 0x1.ca43e8p+105,
+ 0x1.1962c4p+105,
+ 0x1.9e160ep+103,
+ 0x1.ce05a2p+105,
+ 0x1.5daaacp+105,
+ 0x1.9721c2p+103,
+ 0x1.2ed026p+106,
+ 0x1.58bc64p+105,
+ 0x1.22707p+105,
+ 0x1.27d7bap+106,
+ 0x1.3b13dap+105,
+ 0x1.26c74ap+104,
+ 0x1.525ff8p+103,
+ 0x1.320bap+106,
+ 0x1.30ffc6p+105,
+ 0x1.d96674p+103,
+ 0x1.156f56p+105,
+ 0x1.341346p+102,
+ 0x1.664daep+105,
+ 0x1.83d14ep+105,
+ 0x1.b64312p+104,
+ 0x1.f150a6p+105,
+ 0x1.932fp+105,
+ 0x1.7a93aap+104,
+ 0x1.2d30a4p+106,
+ 0x1.11b068p+106,
+ 0x1.1906fp+106,
+ 0x1.e1c876p+105,
+ 0x1.24d782p+104,
+ 0x1.d03706p+102,
+ 0x1.28a0bcp+105,
+ 0x1.50f4bap+102,
+ 0x1.ef3a8ep+104,
+ 0x1.ff694ep+105,
+ 0x1.16f6dp+105,
+ 0x1.9bffep+104,
+ 0x1.afb792p+105,
+ 0x1.acb788p+105,
+ 0x1.022e76p+106,
+ 0x1.3cfa2ep+105,
+ 0x1.ba48p+101,
+ 0x1.8b2e0cp+104,
+ 0x1.5f220ep+104,
+ 0x1.0bd75ap+105,
+ 0x1.feef2ap+105,
+ 0x1.2557f4p+106,
+ 0x1.eaa76cp+101,
+ 0x1.58d384p+105,
+ 0x1.d9274p+105,
+ 0x1.d29002p+105,
+ 0x1.c16p+105,
+ 0x1.d2b92ep+105,
+ 0x1.5de6f2p+105,
+ 0x1.4301eep+104,
+ 0x1.519696p+105,
+ 0x1.7de692p+105,
+ 0x1.c4969cp+102,
+ 0x1.850e38p+105,
+ 0x1.410278p+104,
+ 0x1.e4bcacp+104,
+ 0x1.720d2p+105,
+ 0x1.281d2p+106,
+ 0x1.203418p+105,
+ 0x1.c143a4p+105,
+ 0x1.137ac2p+106,
+ 0x1.23164p+105,
+ 0x1.d28ab4p+105,
+ 0x1.6c19f2p+105,
+ 0x1.dcea32p+101,
+ 0x1.c1474ep+105,
+ 0x1.3490bap+104,
+ 0x1.43bd62p+105,
+ 0x1.d44c0cp+103,
+ 0x1.9ba2e6p+104,
+ 0x1.d59aecp+102,
+ 0x1.e2f2ecp+103,
+ 0x1.636b9ep+103,
+ 0x1.117c6p+106,
+ 0x1.d597ccp+101,
+ 0x1.37c64p+106,
+ 0x1.6d4b2cp+105,
+ 0x1.c8b9bap+105,
+ 0x1.33d526p+106,
+ 0x1.daa2d6p+103,
+ 0x1.3f44eep+104,
+ 0x1.1638aep+105,
+ 0x1.049f98p+104,
+ 0x1.024a7ap+106,
+ 0x1.968f4ap+104,
+ 0x1.35ddp+106,
+ 0x1.c6466cp+102,
+ 0x1.3040dap+106,
+ 0x1.12a0f2p+105,
+ 0x1.27dafp+104,
+ 0x1.97a38p+103,
+ 0x1.b7d40ap+104,
+ 0x1.2f4a7cp+105,
+ 0x1.a06d54p+102,
+ 0x1.35d068p+104,
+ 0x1.8f6a3p+105,
+ 0x1.2c402p+106,
+ 0x1.1e9296p+106,
+ 0x1.476236p+104,
+ 0x1.07efep+106,
+ 0x1.3baf24p+102,
+ 0x1.16e86ap+106,
+ 0x1.2e2d92p+105,
+ 0x1.1e5ce4p+105,
+ 0x1.39c434p+104,
+ 0x1.6a969ep+104,
+ 0x1.a58e42p+103,
+ 0x1.287decp+105,
+ 0x1.8b4de2p+104,
+ 0x1.e88492p+104,
+ 0x1.4ea74p+103,
+ 0x1.819808p+105,
+ 0x1.3dd952p+105,
+ 0x1.2ef72cp+106,
+ 0x1.468e02p+105,
+ 0x1.3d9472p+105,
+ 0x1.52e8d4p+103,
+ 0x1.f1936ap+103,
+ 0x1.72da8ep+105,
+ 0x1.9201a6p+105,
+ 0x1.27d542p+106,
+ 0x1.25a0d2p+106,
+ 0x1.b8e7aap+105,
+ 0x1.1095b2p+105,
+ 0x1.37ed0cp+106,
+ 0x1.b4ba18p+105,
+ 0x1.0540cp+105,
+ 0x1.2d27eep+106,
+ 0x1.ab11eep+105,
+ 0x1.ecff5cp+105,
+ 0x1.33b81ap+102,
+ 0x1.a1407ap+105,
+ 0x1.1d595ep+106,
+ 0x1.0170d2p+105,
+ 0x1.cad076p+105,
+ 0x1.2df588p+98,
+ 0x1.2e6fb8p+106,
+ 0x1.5d4988p+104,
+ 0x1.989c9ep+103,
+ 0x1.efc2b2p+104,
+ 0x1.907232p+105,
+ 0x1.2acedp+106,
+ 0x1.6a980cp+100,
+ 0x1.b5be2p+105,
+ 0x1.7df524p+105,
+ 0x1.64d5c8p+105,
+ 0x1.b47b72p+105,
+ 0x1.0c173ep+106,
+ 0x1.23b1c6p+105,
+ 0x1.ee66a8p+104,
+ 0x1.de04acp+103,
+ 0x1.409b3cp+105,
+ 0x1.48ddcap+105,
+ 0x1.346d2p+104,
+ 0x1.d1f64cp+105,
+ 0x1.7344ap+105,
+ 0x1.ed81dep+104,
+ 0x1.f1130ap+104,
+ 0x1.d9ba56p+105,
+ 0x1.77bcd4p+105,
+ 0x1.712286p+105,
+ 0x1.3a5ab8p+104,
+ 0x1.38e2f2p+106,
+ 0x1.f38da2p+105,
+ 0x1.a8e58ep+104,
+ 0x1.179e9ap+103,
+ 0x1.1766e2p+106,
+ 0x1.13e6dep+103,
+ 0x1.dc5c32p+105,
+ 0x1.838808p+105,
+ 0x1.68309ap+105,
+ 0x1.244118p+106,
+ 0x1.638aecp+105,
+ 0x1.1bc956p+105,
+ 0x1.5c377cp+104,
+ 0x1.694c12p+105,
+ 0x1.cfc0ccp+105,
+ 0x1.f3519ap+105,
+ 0x1.904b44p+104,
+ 0x1.0bcf8p+105,
+ 0x1.34a3f8p+106,
+ 0x1.35a37p+104,
+ 0x1.14c3e8p+106,
+ 0x1.232b32p+106,
+ 0x1.7c919ep+102,
+ 0x1.8574dp+105,
+ 0x1.88227ap+105,
+ 0x1.2d80d8p+106,
+ 0x1.08c13ap+105,
+ 0x1.169998p+104,
+ 0x1.da388ep+105,
+ 0x1.687abcp+103,
+ 0x1.bad1e4p+104,
+ 0x1.6b6cbep+105,
+ 0x1.0eac8p+106,
+ 0x1.08fa92p+105,
+ 0x1.a3eb14p+104,
+ 0x1.ab1c7cp+105,
+ 0x1.208244p+106,
+ 0x1.28bf0ap+106,
+ 0x1.b1825ep+105,
+ 0x1.cb61ecp+105,
+ 0x1.23bb2cp+105,
+ 0x1.390a8cp+106,
+ 0x1.77d34ap+105,
+ 0x1.283caep+106,
+ 0x1.2b735p+105,
+ 0x1.0db8ccp+106,
+ 0x1.e5f18ep+104,
+ 0x1.18fbdcp+105,
+ 0x1.a13adep+105,
+ 0x1.fa6be6p+105,
+ 0x1.df4596p+101,
+ 0x1.18bdep+105,
+ 0x1.08fc4ap+105,
+ 0x1.0fcb06p+105,
+ 0x1.04e53ap+106,
+ 0x1.b9452ap+104,
+ 0x1.183e32p+106,
+ 0x1.ca9258p+104,
+ 0x1.4bae9ap+103,
+ 0x1.fb1314p+104,
+ 0x1.9fe296p+105,
+ 0x1.131252p+106,
+ 0x1.b110acp+105,
+ 0x1.173b9ap+105,
+ 0x1.dcc2p+105,
+ 0x1.06f73p+105,
+ 0x1.e3dfbcp+104,
+ 0x1.d350cap+104,
+ 0x1.04bbfp+106,
+ 0x1.09012ep+105,
+ 0x1.419e9ep+105,
+ 0x1.8dacc6p+105,
+ 0x1.25592cp+105,
+ 0x1.d5a028p+103,
+ 0x1.cf753ep+103,
+ 0x1.e8167p+105,
+ 0x1.8ef30ap+105,
+ 0x1.1f49bap+104,
+ 0x1.5b6ca6p+103,
+ 0x1.78b72ep+104,
+ 0x1.c6b838p+105,
+ 0x1.2fb342p+106,
+ 0x1.08dfaap+103,
+ 0x1.23c0e6p+106,
+ 0x1.a2dc96p+105,
+ 0x1.6a428ap+103,
+ 0x1.25911ap+105,
+ 0x1.a1148cp+105,
+ 0x1.296faap+101,
+ 0x1.374b22p+104,
+ 0x1.c8795p+103,
+ 0x1.55b9c8p+100,
+ 0x1.a9e658p+105,
+ 0x1.77a89ep+104,
+ 0x1.c61a1ep+105,
+ 0x1.b60f42p+105,
+ 0x1.0dac4p+106,
+ 0x1.a1fc54p+103,
+ 0x1.ba77a4p+105,
+ 0x1.47c172p+103,
+ 0x1.e97d82p+105,
+ 0x1.548f34p+105,
+ 0x1.515ecap+105,
+ 0x1.346956p+105,
+ 0x1.3aaafap+105,
+ 0x1.08f86p+105,
+ 0x1.5ea00cp+105,
+ 0x1.202cfp+103,
+ 0x1.296e08p+105,
+ 0x1.62eb88p+103,
+ 0x1.45e7c8p+105,
+ 0x1.70f9bap+101,
+ 0x1.f19c74p+103,
+ 0x1.f9378p+97,
+ 0x1.d787cep+104,
+ 0x1.0ea13cp+105,
+ 0x1.105d84p+106,
+ 0x1.31aa4p+105,
+ 0x1.41344p+105,
+ 0x1.44d736p+103,
+ 0x1.ec3ccep+105,
+ 0x1.22fd5p+106,
+ 0x1.d3f69ep+105,
+ 0x1.1397c6p+106,
+ 0x1.1b8bp+106,
+ 0x1.1e9814p+105,
+ 0x1.5d79cap+104,
+ 0x1.194776p+103,
+ 0x1.a480f2p+105,
+ 0x1.69dfb6p+104,
+ 0x1.150dcp+105,
+ 0x1.48acfep+103,
+ 0x1.751852p+104,
+ 0x1.f595dep+104,
+ 0x1.eac8f2p+104,
+ 0x1.e873aap+102,
+ 0x1.948426p+104,
+ 0x1.33346cp+104,
+ 0x1.36b74p+104,
+ 0x1.33e9dp+106,
+ 0x1.4b602cp+105,
+ 0x1.b6297cp+102,
+ 0x1.4217e4p+103,
+ 0x1.a8ff48p+105,
+ 0x1.0eb3bap+106,
+ 0x1.8cd95p+104,
+ 0x1.060b48p+106,
+ 0x1.5aa7c4p+103,
+ 0x1.e5517ep+105,
+ 0x1.63db1ep+105,
+ 0x1.1d1d08p+106,
+ 0x1.9022e2p+105,
+ 0x1.0ddc18p+105,
+ 0x1.b4208cp+104,
+ 0x1.f0c21ap+100,
+ 0x1.07548cp+106,
+ 0x1.602328p+105,
+ 0x1.a2d1c6p+102,
+ 0x1.ab8df2p+104,
+ 0x1.374eep+106,
+ 0x1.fd98b2p+104,
+ 0x1.b08f78p+104,
+ 0x1.b2384ap+103,
+ 0x1.1b9308p+106,
+ 0x1.5837fep+105,
+ 0x1.8abba2p+103,
+ 0x1.0b54fap+106,
+ 0x1.2e41bp+106,
+ 0x1.470d88p+104,
+ 0x1.c6d472p+105,
+ 0x1.e98c34p+105,
+ 0x1.4691c8p+103,
+ 0x1.fb9258p+105,
+ 0x1.3adc78p+105,
+ 0x1.1aa5b4p+104,
+ 0x1.32d54ap+103,
+ 0x1.b4052ep+103,
+ 0x1.bab582p+104,
+ 0x1.c50892p+104,
+ 0x1.1383aep+106,
+ 0x1.460f9ep+104,
+ 0x1.2db9dcp+106,
+ 0x1.890a5ep+103,
+ 0x1.374a56p+106,
+ 0x1.35a3fep+106,
+ 0x1.d6e912p+104,
+ 0x1.a10c38p+104,
+ 0x1.267e56p+106,
+ 0x1.df0826p+105,
+ 0x1.b06af8p+105,
+ 0x1.517d2ap+104,
+ 0x1.c94678p+105,
+ 0x1.dd534p+102,
+ 0x1.d9b082p+103,
+ 0x1.a658d8p+103,
+ 0x1.9a1044p+105,
+ 0x1.8ceedap+104,
+ 0x1.0d811ep+106,
+ 0x1.d458p+104,
+ 0x1.8ed3c2p+104,
+ 0x1.deb20ap+104,
+ 0x1.bbd5bap+101,
+ 0x1.3a96cp+106,
+ 0x1.23d73ep+104,
+ 0x1.6b1f0ap+105,
+ 0x1.2355c4p+103,
+ 0x1.66ed88p+104,
+ 0x1.07c8acp+106,
+ 0x1.8a57bap+103,
+ 0x1.b69f3ap+104,
+ 0x1.d90426p+105,
+ 0x1.ca83b2p+105,
+ 0x1.7e159ap+104,
+ 0x1.1bc50cp+106,
+ 0x1.7c780cp+103,
+ 0x1.6a43fcp+105,
+ 0x1.8183e8p+105,
+ 0x1.b05838p+104,
+ 0x1.a9ab56p+104,
+ 0x1.fb30fep+103,
+ 0x1.4c0594p+101,
+ 0x1.871912p+103,
+ 0x1.175b1cp+105,
+ 0x1.8a5146p+105,
+ 0x1.29f71cp+106,
+ 0x1.b3bd0ap+105,
+ 0x1.16df22p+106,
+ 0x1.c1e5dap+105,
+ 0x1.c17e7ap+105,
+ 0x1.83d568p+104,
+ 0x1.0523ep+105,
+ 0x1.e6ae42p+104,
+ 0x1.b417fap+105,
+ 0x1.e9be28p+105,
+ 0x1.dc8cdp+104,
+ 0x1.8dc59ep+105,
+ 0x1.fc29a8p+103,
+ 0x1.ac20f4p+104,
+ 0x1.18241ap+105,
+ 0x1.f5e8cp+104,
+ 0x1.de7f5cp+105,
+ 0x1.4912p+103,
+ 0x1.d93e88p+103,
+ 0x1.17f482p+106,
+ 0x1.2ebe88p+105,
+ 0x1.0bebacp+103,
+ 0x1.c048cp+105,
+ 0x1.20e728p+106,
+ 0x1.f4e3b2p+105,
+ 0x1.2000b4p+104,
+ 0x1.d6e18ep+103,
+ 0x1.e12f5p+105,
+ 0x1.7b88d6p+105,
+ 0x1.73aa0cp+102,
+ 0x1.3be4d2p+105,
+ 0x1.63e1fap+105,
+ 0x1.1d1652p+104,
+ 0x1.3befap+102,
+ 0x1.c4fee6p+104,
+ 0x1.bf3abap+102,
+ 0x1.d12a76p+105,
+ 0x1.3e262p+103,
+ 0x1.9eddfap+104,
+ 0x1.389c76p+104,
+ 0x1.229d4p+106,
+ 0x1.01e9ecp+105,
+ 0x1.77f092p+104,
+ 0x1.a45126p+103,
+ 0x1.9eacdep+105,
+ 0x1.10e51cp+105,
+ 0x1.dd815p+103,
+ 0x1.7e13bp+105,
+ 0x1.455734p+105,
+ 0x1.1dd5eap+103,
+ 0x1.57394cp+105,
+ 0x1.278256p+106,
+ 0x1.b519fp+105,
+ 0x1.144998p+106,
+ 0x1.221f1cp+106,
+ 0x1.352638p+106,
+ 0x1.ef39f6p+105,
+ 0x1.a8af4p+105,
+ 0x1.2708a8p+104,
+ 0x1.200884p+106,
+ 0x1.c45f8ap+105,
+ 0x1.1d07ep+106,
+ 0x1.16422p+102,
+ 0x1.07234ap+106,
+ 0x1.343d5cp+105,
+ 0x1.08154ap+106,
+ 0x1.166866p+105,
+ 0x1.d4b9a2p+99,
+ 0x1.2661fap+106,
+ 0x1.29ba9cp+106,
+ 0x1.01938ep+105,
+ 0x1.18302cp+105,
+ 0x1.31b5d8p+104,
+ 0x1.89775cp+97,
+ 0x1.accdfep+103,
+ 0x1.ebc352p+102,
+ 0x1.21b17p+106,
+ 0x1.8559c6p+105,
+ 0x1.0837a6p+106,
+ 0x1.0c5fbap+106,
+ 0x1.15541ap+106,
+ 0x1.17e162p+106,
+};
+static const std::vector<float> sincosf_input7 = {
+ 0x1.66823p+127,
+ 0x1.cdee8ep+125,
+ 0x1.3241f6p+127,
+ 0x1.0bab12p+125,
+ 0x1.47c142p+126,
+ 0x1.18237ap+125,
+ 0x1.aa230ap+127,
+ 0x1.19f854p+126,
+ 0x1.9d7a76p+127,
+ 0x1.971a86p+124,
+ 0x1.00bf28p+123,
+ 0x1.a2eedap+126,
+ 0x1.760244p+127,
+ 0x1.50e15ap+126,
+ 0x1.c4d462p+127,
+ 0x1.10a28cp+127,
+ 0x1.433a4ap+127,
+ 0x1.0a4d6ep+127,
+ 0x1.fd76a4p+124,
+ 0x1.3c8582p+127,
+ 0x1.5e556p+126,
+ 0x1.ffb8b6p+125,
+ 0x1.0f81eap+126,
+ 0x1.368c2ep+126,
+ 0x1.0f1ac4p+127,
+ 0x1.27796p+127,
+ 0x1.50373ep+126,
+ 0x1.1299c6p+127,
+ 0x1.34b33ap+127,
+ 0x1.c31d06p+122,
+ 0x1.a31c84p+127,
+ 0x1.28aedap+126,
+ 0x1.fda94ep+126,
+ 0x1.12c172p+126,
+ 0x1.ca2bcap+127,
+ 0x1.f9079cp+126,
+ 0x1.dc5c18p+126,
+ 0x1.5d8066p+127,
+ 0x1.2dbb12p+125,
+ 0x1.09ca5ap+127,
+ 0x1.db67cep+125,
+ 0x1.b5755ap+127,
+ 0x1.99f6p+126,
+ 0x1.90e684p+127,
+ 0x1.510c5cp+127,
+ 0x1.726daap+125,
+ 0x1.e7de06p+127,
+ 0x1.f6c18ep+127,
+ 0x1.c1eafp+126,
+ 0x1.86ef0cp+126,
+ 0x1.051402p+127,
+ 0x1.ca4d9ep+127,
+ 0x1.7e9f9ap+120,
+ 0x1.e2e4p+126,
+ 0x1.da1834p+126,
+ 0x1.99ae12p+125,
+ 0x1.171bfap+124,
+ 0x1.0a84f6p+122,
+ 0x1.b9d428p+127,
+ 0x1.e27144p+125,
+ 0x1.1f754ap+127,
+ 0x1.b23d7ep+127,
+ 0x1.c56878p+126,
+ 0x1.ca196cp+127,
+ 0x1.7e16a4p+127,
+ 0x1.ef7446p+127,
+ 0x1.ddd388p+125,
+ 0x1.7e18cep+126,
+ 0x1.edf5bp+127,
+ 0x1.917ebap+124,
+ 0x1.0920f6p+126,
+ 0x1.9c225cp+127,
+ 0x1.e88c72p+123,
+ 0x1.19da36p+127,
+ 0x1.12f618p+127,
+ 0x1.79244ap+127,
+ 0x1.1c2cbcp+126,
+ 0x1.c0e9dep+127,
+ 0x1.f217ap+127,
+ 0x1.ed5a78p+127,
+ 0x1.39e9eap+126,
+ 0x1.37169cp+127,
+ 0x1.db789cp+127,
+ 0x1.36deccp+121,
+ 0x1.76a81cp+123,
+ 0x1.022b6cp+127,
+ 0x1.1462bp+127,
+ 0x1.c26bd6p+126,
+ 0x1.d63826p+125,
+ 0x1.28846p+127,
+ 0x1.59ae48p+126,
+ 0x1.d1f348p+127,
+ 0x1.0e90b2p+127,
+ 0x1.26dc72p+126,
+ 0x1.d9afbep+126,
+ 0x1.f2bba6p+126,
+ 0x1.28b52cp+126,
+ 0x1.adabbp+123,
+ 0x1.28a332p+125,
+ 0x1.4309e6p+127,
+ 0x1.ed2c1cp+126,
+ 0x1.433eccp+127,
+ 0x1.ebb6eep+127,
+ 0x1.830fbp+126,
+ 0x1.a0ac4p+124,
+ 0x1.9f7342p+124,
+ 0x1.7bef98p+126,
+ 0x1.1281cap+127,
+ 0x1.a653f6p+122,
+ 0x1.329328p+127,
+ 0x1.76bb3cp+124,
+ 0x1.7292d6p+125,
+ 0x1.e36fe8p+127,
+ 0x1.089b3ep+127,
+ 0x1.450b34p+126,
+ 0x1.77b268p+125,
+ 0x1.cb018ep+126,
+ 0x1.8c8c2ep+124,
+ 0x1.a06c4cp+127,
+ 0x1.461f2ep+126,
+ 0x1.03f9bep+126,
+ 0x1.fd18a6p+127,
+ 0x1.afa5f4p+127,
+ 0x1.1b5642p+126,
+ 0x1.c096b4p+123,
+ 0x1.e7d78p+127,
+ 0x1.6e2fcap+127,
+ 0x1.66067ep+126,
+ 0x1.d251f8p+127,
+ 0x1.439466p+127,
+ 0x1.1dc904p+126,
+ 0x1.79bbe6p+127,
+ 0x1.52a2bap+127,
+ 0x1.399754p+125,
+ 0x1.b22b3ap+125,
+ 0x1.83fea6p+124,
+ 0x1.d90378p+125,
+ 0x1.9e8dc8p+127,
+ 0x1.5e4b2p+127,
+ 0x1.72387ep+126,
+ 0x1.79b6acp+126,
+ 0x1.cefefp+127,
+ 0x1.caa272p+122,
+ 0x1.40a71ep+125,
+ 0x1.bde272p+126,
+ 0x1.08ff4cp+127,
+ 0x1.0ba12ap+126,
+ 0x1.df8588p+124,
+ 0x1.76f3dp+125,
+ 0x1.f71cf6p+127,
+ 0x1.c65e7cp+127,
+ 0x1.1b9ef6p+126,
+ 0x1.87492ap+127,
+ 0x1.222382p+126,
+ 0x1.5b8b52p+126,
+ 0x1.d17fb8p+125,
+ 0x1.d75a96p+124,
+ 0x1.c30d16p+127,
+ 0x1.e7bdd4p+125,
+ 0x1.83d51cp+127,
+ 0x1.a2a116p+127,
+ 0x1.cd4302p+127,
+ 0x1.9a8598p+126,
+ 0x1.b970e8p+126,
+ 0x1.d7876ap+127,
+ 0x1.74717ep+127,
+ 0x1.1fcf9ap+126,
+ 0x1.af6684p+125,
+ 0x1.b1df4ap+127,
+ 0x1.8725bcp+127,
+ 0x1.ab4962p+126,
+ 0x1.2fb354p+127,
+ 0x1.c3e7cep+123,
+ 0x1.d9e8fcp+125,
+ 0x1.a09a8cp+126,
+ 0x1.8e18dep+126,
+ 0x1.e80d9p+126,
+ 0x1.3cadf4p+127,
+ 0x1.3bc8ccp+127,
+ 0x1.50343p+127,
+ 0x1.336d7cp+126,
+ 0x1.e2c9aep+127,
+ 0x1.5dae1ap+124,
+ 0x1.83978ep+125,
+ 0x1.2c773ep+127,
+ 0x1.749a88p+127,
+ 0x1.173132p+127,
+ 0x1.be29c8p+127,
+ 0x1.8e5086p+127,
+ 0x1.f72e64p+126,
+ 0x1.3eca7p+126,
+ 0x1.f0a142p+126,
+ 0x1.5b3f8p+126,
+ 0x1.d55e42p+127,
+ 0x1.c81a8cp+127,
+ 0x1.b79606p+127,
+ 0x1.fc6f04p+127,
+ 0x1.58063ap+127,
+ 0x1.0d1a22p+127,
+ 0x1.069758p+126,
+ 0x1.62cd96p+126,
+ 0x1.281e62p+127,
+ 0x1.ce0452p+127,
+ 0x1.96091ep+127,
+ 0x1.aaf09cp+127,
+ 0x1.396d14p+127,
+ 0x1.22b532p+127,
+ 0x1.96bef6p+126,
+ 0x1.133f7ap+127,
+ 0x1.56a378p+127,
+ 0x1.4cac76p+124,
+ 0x1.5a9982p+127,
+ 0x1.1fec6cp+126,
+ 0x1.617aep+127,
+ 0x1.fb6e1ap+125,
+ 0x1.fbf4c2p+127,
+ 0x1.682c3ap+127,
+ 0x1.1b423ep+126,
+ 0x1.54b2a8p+127,
+ 0x1.220266p+126,
+ 0x1.28a24ep+127,
+ 0x1.0e7a56p+127,
+ 0x1.31abbap+126,
+ 0x1.1751b4p+127,
+ 0x1.ecfebap+125,
+ 0x1.f4bb3p+127,
+ 0x1.82e5ap+127,
+ 0x1.42668p+127,
+ 0x1.68f3fp+126,
+ 0x1.bcad04p+127,
+ 0x1.8d1a48p+127,
+ 0x1.d89f28p+125,
+ 0x1.14ed08p+127,
+ 0x1.b1e278p+126,
+ 0x1.aabd4ep+126,
+ 0x1.bb2f9ep+126,
+ 0x1.e3a244p+125,
+ 0x1.74b5e8p+126,
+ 0x1.4bb0ap+126,
+ 0x1.d306d8p+126,
+ 0x1.f9ccc4p+127,
+ 0x1.457a3p+126,
+ 0x1.3e3f22p+127,
+ 0x1.d2c572p+125,
+ 0x1.06614p+127,
+ 0x1.d620fep+127,
+ 0x1.edeedep+126,
+ 0x1.f38ebcp+124,
+ 0x1.d4c7d6p+124,
+ 0x1.2c215ep+125,
+ 0x1.82a0cp+127,
+ 0x1.374cc4p+127,
+ 0x1.6b78d6p+127,
+ 0x1.ec3888p+124,
+ 0x1.13ff7cp+125,
+ 0x1.fe7da4p+127,
+ 0x1.fe2b78p+127,
+ 0x1.93caa6p+127,
+ 0x1.9bfb5cp+126,
+ 0x1.d429cep+127,
+ 0x1.bac4eep+126,
+ 0x1.65e5c4p+127,
+ 0x1.b4c75p+127,
+ 0x1.005f34p+127,
+ 0x1.62c18p+127,
+ 0x1.2bb578p+126,
+ 0x1.5819d4p+127,
+ 0x1.f14b7ep+125,
+ 0x1.c12884p+127,
+ 0x1.ea20e4p+127,
+ 0x1.b39a3p+125,
+ 0x1.d1484cp+125,
+ 0x1.4a010ep+127,
+ 0x1.f61a9p+125,
+ 0x1.eba3f8p+127,
+ 0x1.c44ac2p+127,
+ 0x1.c85236p+126,
+ 0x1.373ef6p+126,
+ 0x1.b65944p+127,
+ 0x1.dfd602p+122,
+ 0x1.d1182ap+123,
+ 0x1.2e5376p+127,
+ 0x1.8719d6p+127,
+ 0x1.bc20eep+124,
+ 0x1.d275a6p+126,
+ 0x1.1ef032p+126,
+ 0x1.c50fb4p+127,
+ 0x1.34195cp+126,
+ 0x1.a0d1d6p+127,
+ 0x1.e5ee3ap+127,
+ 0x1.4c6afp+126,
+ 0x1.1c5a1cp+126,
+ 0x1.e4113p+124,
+ 0x1.ab666p+127,
+ 0x1.2ca26ap+124,
+ 0x1.86565cp+122,
+ 0x1.ba16ep+126,
+ 0x1.f21cd2p+126,
+ 0x1.f53658p+125,
+ 0x1.e5e022p+124,
+ 0x1.b070dap+125,
+ 0x1.7b9098p+127,
+ 0x1.b1ad22p+124,
+ 0x1.742ee6p+126,
+ 0x1.dcf93ep+127,
+ 0x1.c1ac14p+127,
+ 0x1.f81038p+124,
+ 0x1.4d8ffap+125,
+ 0x1.a8fdf4p+125,
+ 0x1.d4332ap+127,
+ 0x1.78dbacp+126,
+ 0x1.7cfcfp+125,
+ 0x1.464bcep+127,
+ 0x1.171a04p+123,
+ 0x1.fb2d7ep+127,
+ 0x1.2340bep+123,
+ 0x1.a53a92p+127,
+ 0x1.d0daaap+127,
+ 0x1.ba199cp+123,
+ 0x1.9c7d52p+126,
+ 0x1.a928ep+126,
+ 0x1.9fa44ep+127,
+ 0x1.8d2d1ap+127,
+ 0x1.81fdb6p+126,
+ 0x1.54129ep+126,
+ 0x1.e976f8p+126,
+ 0x1.bc0c0cp+127,
+ 0x1.42729cp+126,
+ 0x1.a24a0cp+125,
+ 0x1.170858p+125,
+ 0x1.66fa7ep+125,
+ 0x1.2007e2p+121,
+ 0x1.83ab7cp+127,
+ 0x1.dfe674p+127,
+ 0x1.1de1c4p+124,
+ 0x1.d19682p+127,
+ 0x1.e7e5f4p+126,
+ 0x1.638758p+127,
+ 0x1.49092p+127,
+ 0x1.fb0d18p+125,
+ 0x1.cca50ep+127,
+ 0x1.abc118p+127,
+ 0x1.e4d062p+127,
+ 0x1.abc75p+127,
+ 0x1.b0b0aep+127,
+ 0x1.2c9a02p+125,
+ 0x1.0ead8p+126,
+ 0x1.9cca28p+126,
+ 0x1.55554p+127,
+ 0x1.0c3d7ep+126,
+ 0x1.ef554p+126,
+ 0x1.ae6b4p+127,
+ 0x1.c48e9p+126,
+ 0x1.c4852p+127,
+ 0x1.f3e0ap+126,
+ 0x1.995e64p+127,
+ 0x1.3d5c84p+126,
+ 0x1.e9d07cp+125,
+ 0x1.13b1c4p+125,
+ 0x1.3102d4p+127,
+ 0x1.6b21b6p+127,
+ 0x1.73214ep+125,
+ 0x1.2a1bdcp+126,
+ 0x1.9deacep+126,
+ 0x1.8dfd08p+126,
+ 0x1.3e2074p+126,
+ 0x1.a6a1dap+127,
+ 0x1.45f596p+126,
+ 0x1.7a8c1p+126,
+ 0x1.b44ee4p+123,
+ 0x1.36b1a6p+125,
+ 0x1.cd9f7ap+125,
+ 0x1.55782ep+126,
+ 0x1.39db98p+127,
+ 0x1.d02d7p+127,
+ 0x1.b7d9d6p+127,
+ 0x1.51885cp+126,
+ 0x1.42465cp+127,
+ 0x1.9cdb78p+127,
+ 0x1.a112p+127,
+ 0x1.3f6248p+124,
+ 0x1.d926cep+124,
+ 0x1.c7058ep+126,
+ 0x1.f70d24p+127,
+ 0x1.df4ef2p+127,
+ 0x1.f1cafp+123,
+ 0x1.52ee0ap+127,
+ 0x1.48ed9ap+127,
+ 0x1.16408p+127,
+ 0x1.af82b2p+127,
+ 0x1.c37f68p+127,
+ 0x1.1b503ap+124,
+ 0x1.abde4p+127,
+ 0x1.8f1a12p+127,
+ 0x1.306a8ap+127,
+ 0x1.edee2p+125,
+ 0x1.da924ep+125,
+ 0x1.b4f604p+126,
+ 0x1.c0e08ep+127,
+ 0x1.f4f7d2p+126,
+ 0x1.555576p+127,
+ 0x1.aea3e8p+125,
+ 0x1.ca5122p+126,
+ 0x1.60b16p+127,
+ 0x1.d8b02p+125,
+ 0x1.96786ap+126,
+ 0x1.25c324p+127,
+ 0x1.aa5fd8p+124,
+ 0x1.c0ae5ap+127,
+ 0x1.fbc3cp+125,
+ 0x1.3f976ep+126,
+ 0x1.2995cep+127,
+ 0x1.a0f2a8p+127,
+ 0x1.7f21bcp+126,
+ 0x1.aab454p+127,
+ 0x1.45d4bep+124,
+ 0x1.d80dd4p+127,
+ 0x1.48884ep+126,
+ 0x1.90647ap+126,
+ 0x1.81aa7cp+125,
+ 0x1.29cdcep+126,
+ 0x1.bb5cd4p+125,
+ 0x1.b0b04ep+126,
+ 0x1.1d6ea8p+127,
+ 0x1.65a3d4p+127,
+ 0x1.ac1d1ep+126,
+ 0x1.83abf4p+127,
+ 0x1.79669ep+126,
+ 0x1.6e405ap+127,
+ 0x1.00c8e4p+124,
+ 0x1.cb928ep+125,
+ 0x1.5a588p+126,
+ 0x1.128eecp+126,
+ 0x1.c71488p+127,
+ 0x1.a9e0bap+127,
+ 0x1.895c98p+127,
+ 0x1.090fcp+127,
+ 0x1.3bf3eep+125,
+ 0x1.03fa94p+125,
+ 0x1.c0da42p+126,
+ 0x1.f2066cp+126,
+ 0x1.1d3bdcp+127,
+ 0x1.5d19fcp+124,
+ 0x1.2abe36p+127,
+ 0x1.ffd886p+127,
+ 0x1.82fdb2p+125,
+ 0x1.9b47ecp+124,
+ 0x1.85087p+127,
+ 0x1.fe5428p+127,
+ 0x1.fe18dcp+127,
+ 0x1.bf922ap+126,
+ 0x1.bb3ccep+127,
+ 0x1.c16f2ep+124,
+ 0x1.04d8f8p+127,
+ 0x1.29647p+127,
+ 0x1.1cedc2p+127,
+ 0x1.125f86p+126,
+ 0x1.c11efcp+124,
+ 0x1.7deff6p+124,
+ 0x1.9e7ccp+126,
+ 0x1.4f74ap+126,
+ 0x1.a7c806p+126,
+ 0x1.1ad406p+127,
+ 0x1.c149f8p+127,
+ 0x1.9d425ap+125,
+ 0x1.5ee562p+127,
+ 0x1.6c4072p+126,
+ 0x1.b2297cp+126,
+ 0x1.2c16bap+126,
+ 0x1.110888p+126,
+ 0x1.e65c8cp+125,
+ 0x1.aeb1f4p+126,
+ 0x1.3276cap+123,
+ 0x1.088156p+123,
+ 0x1.ea93fap+127,
+ 0x1.305792p+127,
+ 0x1.c5f63p+127,
+ 0x1.d4c652p+125,
+ 0x1.be1e4ap+126,
+ 0x1.50ae42p+127,
+ 0x1.0b6732p+124,
+ 0x1.70f1aap+125,
+ 0x1.6d715p+127,
+ 0x1.9edc2p+127,
+ 0x1.9c5ffcp+124,
+ 0x1.b60a9ap+127,
+ 0x1.53de68p+127,
+ 0x1.8388dp+127,
+ 0x1.4391d6p+124,
+ 0x1.e9c01ap+127,
+ 0x1.a4f264p+127,
+ 0x1.e94ab4p+126,
+ 0x1.9368c4p+127,
+ 0x1.19d3f2p+124,
+ 0x1.5dbe48p+126,
+ 0x1.85d08ep+127,
+ 0x1.9fcd96p+125,
+ 0x1.e69374p+126,
+ 0x1.6dc07p+127,
+ 0x1.8147c6p+124,
+ 0x1.4af02p+127,
+ 0x1.bac7p+127,
+ 0x1.0e6264p+127,
+ 0x1.5a8062p+127,
+ 0x1.9085dcp+127,
+ 0x1.9d2418p+126,
+ 0x1.56f498p+127,
+ 0x1.18d804p+127,
+ 0x1.5ecb68p+126,
+ 0x1.852936p+124,
+ 0x1.5132a8p+127,
+ 0x1.5557f6p+127,
+};
+
+struct sincosf_range {
+ const char *label;
+ std::vector<float> values;
+};
+
+static const std::vector<sincosf_range> sincosf_input = {
+ {"0.0 <= x < 0.1", sincosf_input0},
+ {"0.1 <= x < 0.7", sincosf_input1},
+ {"0.7 <= x < 3.1", sincosf_input2},
+ {"-3.1 <= x < 3.1", sincosf_input3},
+ {"3.3 <= x < 33.3", sincosf_input4},
+ {"100.0 <= x < 1000.0", sincosf_input5},
+ {"1e6 <= x < 1e32", sincosf_input6},
+ {"1e32 <= x < inf", sincosf_input7},
+};
diff --git a/libc/Android.bp b/libc/Android.bp
index c6991d8..212a1b1 100644
--- a/libc/Android.bp
+++ b/libc/Android.bp
@@ -333,7 +333,6 @@
srcs: [
"upstream-netbsd/common/lib/libc/stdlib/random.c",
"upstream-netbsd/lib/libc/gen/nice.c",
- "upstream-netbsd/lib/libc/gen/popen.c",
"upstream-netbsd/lib/libc/gen/psignal.c",
"upstream-netbsd/lib/libc/gen/utime.c",
"upstream-netbsd/lib/libc/gen/utmp.c",
@@ -450,7 +449,6 @@
"upstream-openbsd/lib/libc/stdio/fputwc.c",
"upstream-openbsd/lib/libc/stdio/fputws.c",
"upstream-openbsd/lib/libc/stdio/fvwrite.c",
- "upstream-openbsd/lib/libc/stdio/fwalk.c",
"upstream-openbsd/lib/libc/stdio/fwide.c",
"upstream-openbsd/lib/libc/stdio/getdelim.c",
"upstream-openbsd/lib/libc/stdio/gets.c",
diff --git a/libc/Android.mk b/libc/Android.mk
deleted file mode 100644
index 888404c..0000000
--- a/libc/Android.mk
+++ /dev/null
@@ -1,4 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
-
diff --git a/libc/NOTICE b/libc/NOTICE
index ae7da18..744f42b 100644
--- a/libc/NOTICE
+++ b/libc/NOTICE
@@ -1813,38 +1813,6 @@
-------------------------------------------------------------------
-Copyright (c) 1988, 1993
- The Regents of the University of California. All rights reserved.
-
-This code is derived from software written by Ken Arnold and
-published in UNIX Review, Vol. 6, No. 8.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
--------------------------------------------------------------------
-
Copyright (c) 1989 The Regents of the University of California.
All rights reserved.
diff --git a/libc/arch-arm/bionic/__aeabi.c b/libc/arch-arm/bionic/__aeabi.c
index 1620d45..c82f56d 100644
--- a/libc/arch-arm/bionic/__aeabi.c
+++ b/libc/arch-arm/bionic/__aeabi.c
@@ -26,13 +26,11 @@
* SUCH DAMAGE.
*/
-#if defined(__clang__)
// clang interprets -fno-builtin more loosely than you might expect,
// and thinks it's okay to still substitute builtins as long as they're
// named __aeabi_* rather than __builtin_*, which causes infinite
// recursion if we have the fortified memcpy visible in this file.
#undef _FORTIFY_SOURCE
-#endif
#include <stddef.h>
#include <string.h>
diff --git a/libc/bionic/mbrtoc32.cpp b/libc/bionic/mbrtoc32.cpp
index f004b78..88a077c 100644
--- a/libc/bionic/mbrtoc32.cpp
+++ b/libc/bionic/mbrtoc32.cpp
@@ -127,7 +127,7 @@
// Malformed input; redundant encoding.
return mbstate_reset_and_return_illegal(EILSEQ, state);
}
- if ((c32 >= 0xd800 && c32 <= 0xdfff) || c32 == 0xfffe || c32 == 0xffff) {
+ if ((c32 >= 0xd800 && c32 <= 0xdfff) || (c32 > 0x10ffff)) {
// Malformed input; invalid code points.
return mbstate_reset_and_return_illegal(EILSEQ, state);
}
diff --git a/libc/bionic/thread_private.cpp b/libc/bionic/thread_private.cpp
index 1c04019..94fb8bb 100644
--- a/libc/bionic/thread_private.cpp
+++ b/libc/bionic/thread_private.cpp
@@ -31,16 +31,6 @@
// Some simple glue used to make BSD code thread-safe.
-static pthread_mutex_t g_atexit_lock = PTHREAD_MUTEX_INITIALIZER;
-
-void _thread_atexit_lock() {
- pthread_mutex_lock(&g_atexit_lock);
-}
-
-void _thread_atexit_unlock() {
- pthread_mutex_unlock(&g_atexit_lock);
-}
-
static pthread_mutex_t g_arc4_lock = PTHREAD_MUTEX_INITIALIZER;
void _thread_arc4_lock() {
diff --git a/libc/dns/resolv/res_send.c b/libc/dns/resolv/res_send.c
index 18bb752..cc09238 100644
--- a/libc/dns/resolv/res_send.c
+++ b/libc/dns/resolv/res_send.c
@@ -97,6 +97,7 @@
#include <errno.h>
#include <fcntl.h>
#include <netdb.h>
+#include <poll.h>
#ifdef ANDROID_CHANGES
#include "resolv_netid.h"
#include "resolv_private.h"
@@ -133,8 +134,6 @@
#define EXT(res) ((res)->_u._ext)
#define DBG 0
-static const int highestFD = FD_SETSIZE - 1;
-
/* Forward. */
static int get_salen __P((const struct sockaddr *));
@@ -150,16 +149,10 @@
const struct sockaddr *, int);
static void Perror(const res_state, FILE *, const char *, int);
static int sock_eq(struct sockaddr *, struct sockaddr *);
-#ifdef NEED_PSELECT
-static int pselect(int, void *, void *, void *,
- struct timespec *,
- const sigset_t *);
-#endif
void res_pquery(const res_state, const u_char *, int, FILE *);
static int connect_with_timeout(int sock, const struct sockaddr *nsap,
socklen_t salen, int sec);
-static int retrying_select(const int sock, fd_set *readset, fd_set *writeset,
- const struct timespec *finish);
+static int retrying_poll(const int sock, short events, const struct timespec* finish);
/* BIONIC-BEGIN: implement source port randomization */
typedef union {
@@ -802,10 +795,6 @@
res_nclose(statp);
statp->_vcsock = socket(nsap->sa_family, SOCK_STREAM | SOCK_CLOEXEC, 0);
- if (statp->_vcsock > highestFD) {
- res_nclose(statp);
- errno = ENOTSOCK;
- }
if (statp->_vcsock < 0) {
switch (errno) {
case EPROTONOSUPPORT:
@@ -849,7 +838,7 @@
* determining whether this was really a timeout or e.g. ECONNREFUSED. Since
* currently both cases are handled in the same way, there is no need to
* change this (yet). If we ever need to reliably distinguish between these
- * cases, both connect_with_timeout() and retrying_select() need to be
+ * cases, both connect_with_timeout() and retrying_poll() need to be
* modified, though.
*/
*rcode = RCODE_TIMEOUT;
@@ -983,8 +972,6 @@
connect_with_timeout(int sock, const struct sockaddr *nsap, socklen_t salen, int sec)
{
int res, origflags;
- fd_set rset, wset;
- struct timespec now, timeout, finish;
origflags = fcntl(sock, F_GETFL, 0);
fcntl(sock, F_SETFL, origflags | O_NONBLOCK);
@@ -995,14 +982,14 @@
goto done;
}
if (res != 0) {
- now = evNowTime();
- timeout = evConsTime((long)sec, 0L);
- finish = evAddTime(now, timeout);
+ struct timespec now = evNowTime();
+ struct timespec timeout = evConsTime((long)sec, 0L);
+ struct timespec finish = evAddTime(now, timeout);
if (DBG) {
async_safe_format_log(ANDROID_LOG_DEBUG, "libc", " %d send_vc\n", sock);
}
- res = retrying_select(sock, &rset, &wset, &finish);
+ res = retrying_poll(sock, POLLIN | POLLOUT, &finish);
if (res <= 0) {
res = -1;
}
@@ -1017,37 +1004,25 @@
}
static int
-retrying_select(const int sock, fd_set *readset, fd_set *writeset, const struct timespec *finish)
-{
+retrying_poll(const int sock, const short events, const struct timespec* finish) {
struct timespec now, timeout;
- int n, error;
- socklen_t len;
-
retry:
if (DBG) {
- async_safe_format_log(ANDROID_LOG_DEBUG, "libc", " %d retrying_select\n", sock);
+ async_safe_format_log(ANDROID_LOG_DEBUG, "libc", " %d retrying_poll\n", sock);
}
now = evNowTime();
- if (readset) {
- FD_ZERO(readset);
- FD_SET(sock, readset);
- }
- if (writeset) {
- FD_ZERO(writeset);
- FD_SET(sock, writeset);
- }
if (evCmpTime(*finish, now) > 0)
timeout = evSubTime(*finish, now);
else
timeout = evConsTime(0L, 0L);
-
- n = pselect(sock + 1, readset, writeset, NULL, &timeout, NULL);
+ struct pollfd fds = { .fd = sock, .events = events };
+ int n = ppoll(&fds, 1, &timeout, /*sigmask=*/NULL);
if (n == 0) {
if (DBG) {
async_safe_format_log(ANDROID_LOG_DEBUG, " libc",
- " %d retrying_select timeout\n", sock);
+ " %d retrying_poll timeout\n", sock);
}
errno = ETIMEDOUT;
return 0;
@@ -1057,17 +1032,18 @@
goto retry;
if (DBG) {
async_safe_format_log(ANDROID_LOG_DEBUG, "libc",
- " %d retrying_select got error %d\n",sock, n);
+ " %d retrying_poll got error %d\n",sock, n);
}
return n;
}
- if ((readset && FD_ISSET(sock, readset)) || (writeset && FD_ISSET(sock, writeset))) {
- len = sizeof(error);
+ if (fds.revents & (POLLIN | POLLOUT | POLLERR)) {
+ int error;
+ socklen_t len = sizeof(error);
if (getsockopt(sock, SOL_SOCKET, SO_ERROR, &error, &len) < 0 || error) {
errno = error;
if (DBG) {
async_safe_format_log(ANDROID_LOG_DEBUG, "libc",
- " %d retrying_select dot error2 %d\n", sock, errno);
+ " %d retrying_poll dot error2 %d\n", sock, errno);
}
return -1;
@@ -1075,7 +1051,7 @@
}
if (DBG) {
async_safe_format_log(ANDROID_LOG_DEBUG, "libc",
- " %d retrying_select returning %d\n",sock, n);
+ " %d retrying_poll returning %d\n",sock, n);
}
return n;
@@ -1095,7 +1071,6 @@
const struct sockaddr *nsap;
int nsaplen;
struct timespec now, timeout, finish, done;
- fd_set dsmask;
struct sockaddr_storage from;
socklen_t fromlen;
int resplen, seconds, n, s;
@@ -1104,10 +1079,6 @@
nsaplen = get_salen(nsap);
if (EXT(statp).nssocks[ns] == -1) {
EXT(statp).nssocks[ns] = socket(nsap->sa_family, SOCK_DGRAM | SOCK_CLOEXEC, 0);
- if (EXT(statp).nssocks[ns] > highestFD) {
- res_nclose(statp);
- errno = ENOTSOCK;
- }
if (EXT(statp).nssocks[ns] < 0) {
switch (errno) {
case EPROTONOSUPPORT:
@@ -1185,7 +1156,7 @@
timeout = evConsTime((long)seconds, 0L);
finish = evAddTime(now, timeout);
retry:
- n = retrying_select(s, &dsmask, NULL, &finish);
+ n = retrying_poll(s, POLLIN, &finish);
if (n == 0) {
*rcode = RCODE_TIMEOUT;
@@ -1194,7 +1165,7 @@
return (0);
}
if (n < 0) {
- Perror(statp, stderr, "select", errno);
+ Perror(statp, stderr, "poll", errno);
res_nclose(statp);
return (0);
}
@@ -1367,29 +1338,3 @@
return 0;
}
}
-
-#ifdef NEED_PSELECT
-/* XXX needs to move to the porting library. */
-static int
-pselect(int nfds, void *rfds, void *wfds, void *efds,
- struct timespec *tsp, const sigset_t *sigmask)
-{
- struct timeval tv, *tvp;
- sigset_t sigs;
- int n;
-
- if (tsp) {
- tvp = &tv;
- tv = evTimeVal(*tsp);
- } else
- tvp = NULL;
- if (sigmask)
- sigprocmask(SIG_SETMASK, sigmask, &sigs);
- n = select(nfds, rfds, wfds, efds, tvp);
- if (sigmask)
- sigprocmask(SIG_SETMASK, &sigs, NULL);
- if (tsp)
- *tsp = evTimeSpec(tv);
- return (n);
-}
-#endif
diff --git a/libc/include/bits/glibc-syscalls.h b/libc/include/bits/glibc-syscalls.h
index f08c614..ffd92cc 100644
--- a/libc/include/bits/glibc-syscalls.h
+++ b/libc/include/bits/glibc-syscalls.h
@@ -640,9 +640,6 @@
#if defined(__NR_olduname)
#define SYS_olduname __NR_olduname
#endif
-#if defined(__NR_oldwait4)
- #define SYS_oldwait4 __NR_oldwait4
-#endif
#if defined(__NR_open)
#define SYS_open __NR_open
#endif
diff --git a/libc/include/netinet/ip_icmp.h b/libc/include/netinet/ip_icmp.h
index 7510592..d6f89bc 100644
--- a/libc/include/netinet/ip_icmp.h
+++ b/libc/include/netinet/ip_icmp.h
@@ -35,9 +35,11 @@
#ifndef _NETINET_IP_ICMP_H_
#define _NETINET_IP_ICMP_H_
-#include <netinet/ip.h>
#include <sys/cdefs.h>
+#include <linux/icmp.h>
+#include <netinet/ip.h>
+
__BEGIN_DECLS
/*
diff --git a/libc/include/stdatomic.h b/libc/include/stdatomic.h
index 8d573b2..013407e 100644
--- a/libc/include/stdatomic.h
+++ b/libc/include/stdatomic.h
@@ -143,10 +143,10 @@
#include <stddef.h> /* For ptrdiff_t. */
#include <stdint.h> /* TODO: don't drag in all the macros, just the types. */
-// Include uchar.h only when needed. Bionic's stdatomic.h is also used for the
-// host (via a copy in prebuilts/clang) and uchar.h is not available in the
+// Include uchar.h only when available. Bionic's stdatomic.h is also used for
+// the host (via a copy in prebuilts/clang) and uchar.h is not available in the
// glibc used for the host.
-#if __STDC_VERSION__ >= 201112L
+#if defined(__BIONIC__)
# include <uchar.h> /* For char16_t and char32_t. */
#endif
@@ -327,7 +327,7 @@
typedef _Atomic(unsigned long) atomic_ulong;
typedef _Atomic(long long) atomic_llong;
typedef _Atomic(unsigned long long) atomic_ullong;
-#if __STDC_VERSION__ >= 201112L || __cplusplus >= 201103L
+#if defined(__BIONIC__) || (defined(__cplusplus) && __cplusplus >= 201103L)
typedef _Atomic(char16_t) atomic_char16_t;
typedef _Atomic(char32_t) atomic_char32_t;
#endif
diff --git a/libc/include/sys/un.h b/libc/include/sys/un.h
index 3e1c429..03ef5e4 100644
--- a/libc/include/sys/un.h
+++ b/libc/include/sys/un.h
@@ -33,4 +33,9 @@
#include <linux/un.h>
#include <sys/cdefs.h>
+#if defined(__USE_BSD) || defined(__USE_GNU)
+#include <string.h>
+#define SUN_LEN(__ptr) (offsetof(struct sockaddr_un, sun_path) + strlen((__ptr)->sun_path))
+#endif
+
#endif
diff --git a/libc/kernel/android/scsi/scsi/scsi_proto.h b/libc/kernel/android/scsi/scsi/scsi_proto.h
index 1b56ecb..a77eded 100644
--- a/libc/kernel/android/scsi/scsi/scsi_proto.h
+++ b/libc/kernel/android/scsi/scsi/scsi_proto.h
@@ -145,6 +145,7 @@
#define UNIT_ATTENTION 0x06
#define DATA_PROTECT 0x07
#define BLANK_CHECK 0x08
+#define VENDOR_SPECIFIC 0x09
#define COPY_ABORTED 0x0a
#define ABORTED_COMMAND 0x0b
#define VOLUME_OVERFLOW 0x0d
diff --git a/libc/kernel/uapi/asm-arm/asm/kvm.h b/libc/kernel/uapi/asm-arm/asm/kvm.h
index 448a773..6cbc533 100644
--- a/libc/kernel/uapi/asm-arm/asm/kvm.h
+++ b/libc/kernel/uapi/asm-arm/asm/kvm.h
@@ -101,6 +101,8 @@
#define KVM_REG_ARM_CRM_SHIFT 7
#define KVM_REG_ARM_32_CRN_MASK 0x0000000000007800
#define KVM_REG_ARM_32_CRN_SHIFT 11
+#define KVM_REG_ARM_SECURE_MASK 0x0000000010000000
+#define KVM_REG_ARM_SECURE_SHIFT 28
#define ARM_CP15_REG_SHIFT_MASK(x,n) (((x) << KVM_REG_ARM_ ##n ##_SHIFT) & KVM_REG_ARM_ ##n ##_MASK)
#define __ARM_CP15_REG(op1,crn,crm,op2) (KVM_REG_ARM | (15 << KVM_REG_ARM_COPROC_SHIFT) | ARM_CP15_REG_SHIFT_MASK(op1, OPC1) | ARM_CP15_REG_SHIFT_MASK(crn, 32_CRN) | ARM_CP15_REG_SHIFT_MASK(crm, CRM) | ARM_CP15_REG_SHIFT_MASK(op2, 32_OPC2))
#define ARM_CP15_REG32(...) (__ARM_CP15_REG(__VA_ARGS__) | KVM_REG_SIZE_U32)
@@ -130,6 +132,9 @@
#define KVM_REG_ARM_VFP_FPEXC 0x1008
#define KVM_REG_ARM_VFP_FPINST 0x1009
#define KVM_REG_ARM_VFP_FPINST2 0x100A
+#define KVM_REG_ARM_FW (0x0014 << KVM_REG_ARM_COPROC_SHIFT)
+#define KVM_REG_ARM_FW_REG(r) (KVM_REG_ARM | KVM_REG_SIZE_U64 | KVM_REG_ARM_FW | ((r) & 0xffff))
+#define KVM_REG_ARM_PSCI_VERSION KVM_REG_ARM_FW_REG(0)
#define KVM_DEV_ARM_VGIC_GRP_ADDR 0
#define KVM_DEV_ARM_VGIC_GRP_DIST_REGS 1
#define KVM_DEV_ARM_VGIC_GRP_CPU_REGS 2
diff --git a/libc/kernel/uapi/asm-arm64/asm/hwcap.h b/libc/kernel/uapi/asm-arm64/asm/hwcap.h
index 4e95b95..a7cd560 100644
--- a/libc/kernel/uapi/asm-arm64/asm/hwcap.h
+++ b/libc/kernel/uapi/asm-arm64/asm/hwcap.h
@@ -41,4 +41,9 @@
#define HWCAP_ASIMDDP (1 << 20)
#define HWCAP_SHA512 (1 << 21)
#define HWCAP_SVE (1 << 22)
+#define HWCAP_ASIMDFHM (1 << 23)
+#define HWCAP_DIT (1 << 24)
+#define HWCAP_USCAT (1 << 25)
+#define HWCAP_ILRCPC (1 << 26)
+#define HWCAP_FLAGM (1 << 27)
#endif
diff --git a/libc/kernel/uapi/asm-arm64/asm/kvm.h b/libc/kernel/uapi/asm-arm64/asm/kvm.h
index c4178a1..167d811 100644
--- a/libc/kernel/uapi/asm-arm64/asm/kvm.h
+++ b/libc/kernel/uapi/asm-arm64/asm/kvm.h
@@ -123,6 +123,9 @@
#define KVM_REG_ARM_TIMER_CTL ARM64_SYS_REG(3, 3, 14, 3, 1)
#define KVM_REG_ARM_TIMER_CNT ARM64_SYS_REG(3, 3, 14, 3, 2)
#define KVM_REG_ARM_TIMER_CVAL ARM64_SYS_REG(3, 3, 14, 0, 2)
+#define KVM_REG_ARM_FW (0x0014 << KVM_REG_ARM_COPROC_SHIFT)
+#define KVM_REG_ARM_FW_REG(r) (KVM_REG_ARM64 | KVM_REG_SIZE_U64 | KVM_REG_ARM_FW | ((r) & 0xffff))
+#define KVM_REG_ARM_PSCI_VERSION KVM_REG_ARM_FW_REG(0)
#define KVM_DEV_ARM_VGIC_GRP_ADDR 0
#define KVM_DEV_ARM_VGIC_GRP_DIST_REGS 1
#define KVM_DEV_ARM_VGIC_GRP_CPU_REGS 2
diff --git a/libc/kernel/uapi/asm-generic/mman-common.h b/libc/kernel/uapi/asm-generic/mman-common.h
index e752bb6..6f688a1 100644
--- a/libc/kernel/uapi/asm-generic/mman-common.h
+++ b/libc/kernel/uapi/asm-generic/mman-common.h
@@ -32,6 +32,7 @@
#define MAP_FIXED 0x10
#define MAP_ANONYMOUS 0x20
#define MAP_UNINITIALIZED 0x0
+#define MAP_FIXED_NOREPLACE 0x100000
#define MLOCK_ONFAULT 0x01
#define MS_ASYNC 1
#define MS_INVALIDATE 2
diff --git a/libc/kernel/uapi/asm-generic/poll.h b/libc/kernel/uapi/asm-generic/poll.h
index 11c43df..372bc77 100644
--- a/libc/kernel/uapi/asm-generic/poll.h
+++ b/libc/kernel/uapi/asm-generic/poll.h
@@ -41,8 +41,8 @@
#ifndef POLLRDHUP
#define POLLRDHUP 0x2000
#endif
-#define POLLFREE 0x4000
-#define POLL_BUSY_LOOP 0x8000
+#define POLLFREE (__force __poll_t) 0x4000
+#define POLL_BUSY_LOOP (__force __poll_t) 0x8000
struct pollfd {
int fd;
short events;
diff --git a/libc/kernel/uapi/asm-generic/siginfo.h b/libc/kernel/uapi/asm-generic/siginfo.h
index 669c9d4..af3d98e 100644
--- a/libc/kernel/uapi/asm-generic/siginfo.h
+++ b/libc/kernel/uapi/asm-generic/siginfo.h
@@ -31,9 +31,6 @@
#ifndef SI_PAD_SIZE
#define SI_PAD_SIZE ((SI_MAX_SIZE - __ARCH_SI_PREAMBLE_SIZE) / sizeof(int))
#endif
-#ifndef __ARCH_SI_UID_T
-#define __ARCH_SI_UID_T __kernel_uid32_t
-#endif
#ifndef __ARCH_SI_BAND_T
#define __ARCH_SI_BAND_T long
#endif
@@ -43,32 +40,35 @@
#ifndef __ARCH_SI_ATTRIBUTES
#define __ARCH_SI_ATTRIBUTES
#endif
-#ifndef HAVE_ARCH_SIGINFO_T
typedef struct siginfo {
int si_signo;
+#ifndef __ARCH_HAS_SWAPPED_SIGINFO
int si_errno;
int si_code;
+#else
+ int si_code;
+ int si_errno;
+#endif
union {
int _pad[SI_PAD_SIZE];
struct {
__kernel_pid_t _pid;
- __ARCH_SI_UID_T _uid;
+ __kernel_uid32_t _uid;
} _kill;
struct {
__kernel_timer_t _tid;
int _overrun;
- char _pad[sizeof(__ARCH_SI_UID_T) - sizeof(int)];
sigval_t _sigval;
int _sys_private;
} _timer;
struct {
__kernel_pid_t _pid;
- __ARCH_SI_UID_T _uid;
+ __kernel_uid32_t _uid;
sigval_t _sigval;
} _rt;
struct {
__kernel_pid_t _pid;
- __ARCH_SI_UID_T _uid;
+ __kernel_uid32_t _uid;
int _status;
__ARCH_SI_CLOCK_T _utime;
__ARCH_SI_CLOCK_T _stime;
@@ -78,13 +78,23 @@
#ifdef __ARCH_SI_TRAPNO
int _trapno;
#endif
- short _addr_lsb;
+#ifdef __ia64__
+ int _imm;
+ unsigned int _flags;
+ unsigned long _isr;
+#endif
+#define __ADDR_BND_PKEY_PAD (__alignof__(void *) < sizeof(short) ? sizeof(short) : __alignof__(void *))
union {
+ short _addr_lsb;
struct {
+ char _dummy_bnd[__ADDR_BND_PKEY_PAD];
void __user * _lower;
void __user * _upper;
} _addr_bnd;
- __u32 _pkey;
+ struct {
+ char _dummy_pkey[__ADDR_BND_PKEY_PAD];
+ __u32 _pkey;
+ } _addr_pkey;
};
} _sigfault;
struct {
@@ -98,8 +108,6 @@
} _sigsys;
} _sifields;
} __ARCH_SI_ATTRIBUTES siginfo_t;
-#define __ARCH_SIGSYS
-#endif
#define si_pid _sifields._kill._pid
#define si_uid _sifields._kill._uid
#define si_tid _sifields._timer._tid
@@ -118,14 +126,12 @@
#define si_addr_lsb _sifields._sigfault._addr_lsb
#define si_lower _sifields._sigfault._addr_bnd._lower
#define si_upper _sifields._sigfault._addr_bnd._upper
-#define si_pkey _sifields._sigfault._pkey
+#define si_pkey _sifields._sigfault._addr_pkey._pkey
#define si_band _sifields._sigpoll._band
#define si_fd _sifields._sigpoll._fd
-#ifdef __ARCH_SIGSYS
#define si_call_addr _sifields._sigsys._call_addr
#define si_syscall _sifields._sigsys._syscall
#define si_arch _sifields._sigsys._arch
-#endif
#define SI_USER 0
#define SI_KERNEL 0x80
#define SI_QUEUE - 1
@@ -135,6 +141,7 @@
#define SI_SIGIO - 5
#define SI_TKILL - 6
#define SI_DETHREAD - 7
+#define SI_ASYNCNL - 60
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
#define ILL_ILLOPC 1
@@ -145,7 +152,10 @@
#define ILL_PRVREG 6
#define ILL_COPROC 7
#define ILL_BADSTK 8
-#define NSIGILL 8
+#define ILL_BADIADDR 9
+#define __ILL_BREAK 10
+#define __ILL_BNDMOD 11
+#define NSIGILL 11
#define FPE_INTDIV 1
#define FPE_INTOVF 2
#define FPE_FLTDIV 3
@@ -154,12 +164,26 @@
#define FPE_FLTRES 6
#define FPE_FLTINV 7
#define FPE_FLTSUB 8
-#define NSIGFPE 8
+#define __FPE_DECOVF 9
+#define __FPE_DECDIV 10
+#define __FPE_DECERR 11
+#define __FPE_INVASC 12
+#define __FPE_INVDEC 13
+#define FPE_FLTUNK 14
+#define FPE_CONDTRAP 15
+#define NSIGFPE 15
#define SEGV_MAPERR 1
#define SEGV_ACCERR 2
#define SEGV_BNDERR 3
+#ifdef __ia64__
+#define __SEGV_PSTKOVF 4
+#else
#define SEGV_PKUERR 4
-#define NSIGSEGV 4
+#endif
+#define SEGV_ACCADI 5
+#define SEGV_ADIDERR 6
+#define SEGV_ADIPERR 7
+#define NSIGSEGV 7
#define BUS_ADRALN 1
#define BUS_ADRERR 2
#define BUS_OBJERR 3
diff --git a/libc/kernel/uapi/asm-generic/unistd.h b/libc/kernel/uapi/asm-generic/unistd.h
index 83c41f9..39b7c1a 100644
--- a/libc/kernel/uapi/asm-generic/unistd.h
+++ b/libc/kernel/uapi/asm-generic/unistd.h
@@ -319,89 +319,6 @@
#define __NR_statx 291
#undef __NR_syscalls
#define __NR_syscalls 292
-#ifdef __ARCH_WANT_SYSCALL_NO_AT
-#define __NR_open 1024
-#define __NR_link 1025
-#define __NR_unlink 1026
-#define __NR_mknod 1027
-#define __NR_chmod 1028
-#define __NR_chown 1029
-#define __NR_mkdir 1030
-#define __NR_rmdir 1031
-#define __NR_lchown 1032
-#define __NR_access 1033
-#define __NR_rename 1034
-#define __NR_readlink 1035
-#define __NR_symlink 1036
-#define __NR_utimes 1037
-#define __NR3264_stat 1038
-#define __NR3264_lstat 1039
-#undef __NR_syscalls
-#define __NR_syscalls (__NR3264_lstat + 1)
-#endif
-#ifdef __ARCH_WANT_SYSCALL_NO_FLAGS
-#define __NR_pipe 1040
-#define __NR_dup2 1041
-#define __NR_epoll_create 1042
-#define __NR_inotify_init 1043
-#define __NR_eventfd 1044
-#define __NR_signalfd 1045
-#undef __NR_syscalls
-#define __NR_syscalls (__NR_signalfd + 1)
-#endif
-#if (__BITS_PER_LONG == 32 || defined(__SYSCALL_COMPAT)) && defined(__ARCH_WANT_SYSCALL_OFF_T)
-#define __NR_sendfile 1046
-#define __NR_ftruncate 1047
-#define __NR_truncate 1048
-#define __NR_stat 1049
-#define __NR_lstat 1050
-#define __NR_fstat 1051
-#define __NR_fcntl 1052
-#define __NR_fadvise64 1053
-#define __ARCH_WANT_SYS_FADVISE64
-#define __NR_newfstatat 1054
-#define __ARCH_WANT_SYS_NEWFSTATAT
-#define __NR_fstatfs 1055
-#define __NR_statfs 1056
-#define __NR_lseek 1057
-#define __NR_mmap 1058
-#undef __NR_syscalls
-#define __NR_syscalls (__NR_mmap + 1)
-#endif
-#ifdef __ARCH_WANT_SYSCALL_DEPRECATED
-#define __NR_alarm 1059
-#define __ARCH_WANT_SYS_ALARM
-#define __NR_getpgrp 1060
-#define __ARCH_WANT_SYS_GETPGRP
-#define __NR_pause 1061
-#define __ARCH_WANT_SYS_PAUSE
-#define __NR_time 1062
-#define __ARCH_WANT_SYS_TIME
-#define __ARCH_WANT_COMPAT_SYS_TIME
-#define __NR_utime 1063
-#define __ARCH_WANT_SYS_UTIME
-#define __NR_creat 1064
-#define __NR_getdents 1065
-#define __ARCH_WANT_SYS_GETDENTS
-#define __NR_futimesat 1066
-#define __NR_select 1067
-#define __ARCH_WANT_SYS_SELECT
-#define __NR_poll 1068
-#define __NR_epoll_wait 1069
-#define __NR_ustat 1070
-#define __NR_vfork 1071
-#define __NR_oldwait4 1072
-#define __NR_recv 1073
-#define __NR_send 1074
-#define __NR_bdflush 1075
-#define __NR_umount 1076
-#define __ARCH_WANT_SYS_OLDUMOUNT
-#define __NR_uselib 1077
-#define __NR__sysctl 1078
-#define __NR_fork 1079
-#undef __NR_syscalls
-#define __NR_syscalls (__NR_fork + 1)
-#endif
#if __BITS_PER_LONG == 64 && !defined(__SYSCALL_COMPAT)
#define __NR_fcntl __NR3264_fcntl
#define __NR_statfs __NR3264_statfs
diff --git a/libc/kernel/uapi/asm-mips/asm/hwcap.h b/libc/kernel/uapi/asm-mips/asm/hwcap.h
index 638017e..6151555 100644
--- a/libc/kernel/uapi/asm-mips/asm/hwcap.h
+++ b/libc/kernel/uapi/asm-mips/asm/hwcap.h
@@ -20,4 +20,5 @@
#define _UAPI_ASM_HWCAP_H
#define HWCAP_MIPS_R6 (1 << 0)
#define HWCAP_MIPS_MSA (1 << 1)
+#define HWCAP_MIPS_CRC32 (1 << 2)
#endif
diff --git a/libc/kernel/uapi/asm-mips/asm/mman.h b/libc/kernel/uapi/asm-mips/asm/mman.h
index 5e8e28a..7ca4a99 100644
--- a/libc/kernel/uapi/asm-mips/asm/mman.h
+++ b/libc/kernel/uapi/asm-mips/asm/mman.h
@@ -44,6 +44,7 @@
#define MAP_NONBLOCK 0x20000
#define MAP_STACK 0x40000
#define MAP_HUGETLB 0x80000
+#define MAP_FIXED_NOREPLACE 0x100000
#define MS_ASYNC 0x0001
#define MS_INVALIDATE 0x0002
#define MS_SYNC 0x0004
diff --git a/libc/kernel/uapi/asm-mips/asm/siginfo.h b/libc/kernel/uapi/asm-mips/asm/siginfo.h
index 413abd9..c37107b 100644
--- a/libc/kernel/uapi/asm-mips/asm/siginfo.h
+++ b/libc/kernel/uapi/asm-mips/asm/siginfo.h
@@ -20,7 +20,6 @@
#define _UAPI_ASM_SIGINFO_H
#define __ARCH_SIGEV_PREAMBLE_SIZE (sizeof(long) + 2 * sizeof(int))
#undef __ARCH_SI_TRAPNO
-#define HAVE_ARCH_SIGINFO_T
#if _MIPS_SZLONG == 32
#define __ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int))
#elif _MIPS_SZLONG==64
@@ -28,69 +27,8 @@
#else
#error _MIPS_SZLONG neither 32 nor 64
#endif
-#define __ARCH_SIGSYS
+#define __ARCH_HAS_SWAPPED_SIGINFO
#include <asm-generic/siginfo.h>
-typedef struct siginfo {
- int si_signo;
- int si_code;
- int si_errno;
- int __pad0[SI_MAX_SIZE / sizeof(int) - SI_PAD_SIZE - 3];
- union {
- int _pad[SI_PAD_SIZE];
- struct {
- __kernel_pid_t _pid;
- __ARCH_SI_UID_T _uid;
- } _kill;
- struct {
- __kernel_timer_t _tid;
- int _overrun;
- char _pad[sizeof(__ARCH_SI_UID_T) - sizeof(int)];
- sigval_t _sigval;
- int _sys_private;
- } _timer;
- struct {
- __kernel_pid_t _pid;
- __ARCH_SI_UID_T _uid;
- sigval_t _sigval;
- } _rt;
- struct {
- __kernel_pid_t _pid;
- __ARCH_SI_UID_T _uid;
- int _status;
- __kernel_clock_t _utime;
- __kernel_clock_t _stime;
- } _sigchld;
- struct {
- __kernel_pid_t _pid;
- __kernel_clock_t _utime;
- int _status;
- __kernel_clock_t _stime;
- } _irix_sigchld;
- struct {
- void __user * _addr;
-#ifdef __ARCH_SI_TRAPNO
- int _trapno;
-#endif
- short _addr_lsb;
- union {
- struct {
- void __user * _lower;
- void __user * _upper;
- } _addr_bnd;
- __u32 _pkey;
- };
- } _sigfault;
- struct {
- __ARCH_SI_BAND_T _band;
- int _fd;
- } _sigpoll;
- struct {
- void __user * _call_addr;
- int _syscall;
- unsigned int _arch;
- } _sigsys;
- } _sifields;
-} siginfo_t;
#undef SI_ASYNCIO
#undef SI_TIMER
#undef SI_MESGQ
diff --git a/libc/kernel/uapi/asm-x86/asm/bootparam.h b/libc/kernel/uapi/asm-x86/asm/bootparam.h
index 772f552..b010277 100644
--- a/libc/kernel/uapi/asm-x86/asm/bootparam.h
+++ b/libc/kernel/uapi/asm-x86/asm/bootparam.h
@@ -24,6 +24,7 @@
#define SETUP_PCI 3
#define SETUP_EFI 4
#define SETUP_APPLE_PROPERTIES 5
+#define SETUP_JAILHOUSE 6
#define RAMDISK_IMAGE_START_MASK 0x07FF
#define RAMDISK_PROMPT_FLAG 0x8000
#define RAMDISK_LOAD_FLAG 0x4000
@@ -116,6 +117,18 @@
__u64 size;
__u32 type;
} __attribute__((packed));
+#define JAILHOUSE_SETUP_REQUIRED_VERSION 1
+struct jailhouse_setup_data {
+ __u16 version;
+ __u16 compatible_version;
+ __u16 pm_timer_address;
+ __u16 num_cpus;
+ __u64 pci_mmconfig_base;
+ __u32 tsc_khz;
+ __u32 apic_khz;
+ __u8 standard_ioapic;
+ __u8 cpu_ids[255];
+} __attribute__((packed));
struct boot_params {
struct screen_info screen_info;
struct apm_bios_info apm_bios_info;
diff --git a/libc/kernel/uapi/asm-x86/asm/hyperv.h b/libc/kernel/uapi/asm-x86/asm/hyperv.h
deleted file mode 100644
index d5c9b19..0000000
--- a/libc/kernel/uapi/asm-x86/asm/hyperv.h
+++ /dev/null
@@ -1,234 +0,0 @@
-/****************************************************************************
- ****************************************************************************
- ***
- *** This header was automatically generated from a Linux kernel header
- *** of the same name, to make information necessary for userspace to
- *** call into the kernel available to libc. It contains only constants,
- *** structures, and macros generated from the original header, and thus,
- *** contains no copyrightable information.
- ***
- *** To edit the content of this header, modify the corresponding
- *** source file (e.g. under external/kernel-headers/original/) then
- *** run bionic/libc/kernel/tools/update_all.py
- ***
- *** Any manual change here will be lost the next time this script will
- *** be run. You've been warned!
- ***
- ****************************************************************************
- ****************************************************************************/
-#ifndef _ASM_X86_HYPERV_H
-#define _ASM_X86_HYPERV_H
-#include <linux/types.h>
-#define HYPERV_CPUID_VENDOR_AND_MAX_FUNCTIONS 0x40000000
-#define HYPERV_CPUID_INTERFACE 0x40000001
-#define HYPERV_CPUID_VERSION 0x40000002
-#define HYPERV_CPUID_FEATURES 0x40000003
-#define HYPERV_CPUID_ENLIGHTMENT_INFO 0x40000004
-#define HYPERV_CPUID_IMPLEMENT_LIMITS 0x40000005
-#define HYPERV_HYPERVISOR_PRESENT_BIT 0x80000000
-#define HYPERV_CPUID_MIN 0x40000005
-#define HYPERV_CPUID_MAX 0x4000ffff
-#define HV_X64_MSR_VP_RUNTIME_AVAILABLE (1 << 0)
-#define HV_X64_MSR_TIME_REF_COUNT_AVAILABLE (1 << 1)
-#define HV_X64_MSR_REFERENCE_TSC_AVAILABLE (1 << 9)
-#define HV_X64_MSR_REFERENCE_TSC 0x40000021
-#define HV_X64_ACCESS_FREQUENCY_MSRS (1 << 11)
-#define HV_X64_MSR_SYNIC_AVAILABLE (1 << 2)
-#define HV_X64_MSR_SYNTIMER_AVAILABLE (1 << 3)
-#define HV_X64_MSR_APIC_ACCESS_AVAILABLE (1 << 4)
-#define HV_X64_MSR_HYPERCALL_AVAILABLE (1 << 5)
-#define HV_X64_MSR_VP_INDEX_AVAILABLE (1 << 6)
-#define HV_X64_MSR_RESET_AVAILABLE (1 << 7)
-#define HV_X64_MSR_STAT_PAGES_AVAILABLE (1 << 8)
-#define HV_FEATURE_FREQUENCY_MSRS_AVAILABLE (1 << 8)
-#define HV_FEATURE_GUEST_CRASH_MSR_AVAILABLE (1 << 10)
-#define HV_X64_CREATE_PARTITIONS (1 << 0)
-#define HV_X64_ACCESS_PARTITION_ID (1 << 1)
-#define HV_X64_ACCESS_MEMORY_POOL (1 << 2)
-#define HV_X64_ADJUST_MESSAGE_BUFFERS (1 << 3)
-#define HV_X64_POST_MESSAGES (1 << 4)
-#define HV_X64_SIGNAL_EVENTS (1 << 5)
-#define HV_X64_CREATE_PORT (1 << 6)
-#define HV_X64_CONNECT_PORT (1 << 7)
-#define HV_X64_ACCESS_STATS (1 << 8)
-#define HV_X64_DEBUGGING (1 << 11)
-#define HV_X64_CPU_POWER_MANAGEMENT (1 << 12)
-#define HV_X64_CONFIGURE_PROFILER (1 << 13)
-#define HV_X64_MWAIT_AVAILABLE (1 << 0)
-#define HV_X64_GUEST_DEBUGGING_AVAILABLE (1 << 1)
-#define HV_X64_PERF_MONITOR_AVAILABLE (1 << 2)
-#define HV_X64_CPU_DYNAMIC_PARTITIONING_AVAILABLE (1 << 3)
-#define HV_X64_HYPERCALL_PARAMS_XMM_AVAILABLE (1 << 4)
-#define HV_X64_GUEST_IDLE_STATE_AVAILABLE (1 << 5)
-#define HV_X64_GUEST_CRASH_MSR_AVAILABLE (1 << 10)
-#define HV_X64_AS_SWITCH_RECOMMENDED (1 << 0)
-#define HV_X64_LOCAL_TLB_FLUSH_RECOMMENDED (1 << 1)
-#define HV_X64_REMOTE_TLB_FLUSH_RECOMMENDED (1 << 2)
-#define HV_X64_APIC_ACCESS_RECOMMENDED (1 << 3)
-#define HV_X64_SYSTEM_RESET_RECOMMENDED (1 << 4)
-#define HV_X64_RELAXED_TIMING_RECOMMENDED (1 << 5)
-#define HV_X64_DEPRECATING_AEOI_RECOMMENDED (1 << 9)
-#define HV_X64_EX_PROCESSOR_MASKS_RECOMMENDED (1 << 11)
-#define HV_CRASH_CTL_CRASH_NOTIFY (1ULL << 63)
-#define HV_X64_MSR_GUEST_OS_ID 0x40000000
-#define HV_X64_MSR_HYPERCALL 0x40000001
-#define HV_X64_MSR_VP_INDEX 0x40000002
-#define HV_X64_MSR_RESET 0x40000003
-#define HV_X64_MSR_VP_RUNTIME 0x40000010
-#define HV_X64_MSR_TIME_REF_COUNT 0x40000020
-#define HV_X64_MSR_TSC_FREQUENCY 0x40000022
-#define HV_X64_MSR_APIC_FREQUENCY 0x40000023
-#define HV_X64_MSR_EOI 0x40000070
-#define HV_X64_MSR_ICR 0x40000071
-#define HV_X64_MSR_TPR 0x40000072
-#define HV_X64_MSR_APIC_ASSIST_PAGE 0x40000073
-#define HV_X64_MSR_SCONTROL 0x40000080
-#define HV_X64_MSR_SVERSION 0x40000081
-#define HV_X64_MSR_SIEFP 0x40000082
-#define HV_X64_MSR_SIMP 0x40000083
-#define HV_X64_MSR_EOM 0x40000084
-#define HV_X64_MSR_SINT0 0x40000090
-#define HV_X64_MSR_SINT1 0x40000091
-#define HV_X64_MSR_SINT2 0x40000092
-#define HV_X64_MSR_SINT3 0x40000093
-#define HV_X64_MSR_SINT4 0x40000094
-#define HV_X64_MSR_SINT5 0x40000095
-#define HV_X64_MSR_SINT6 0x40000096
-#define HV_X64_MSR_SINT7 0x40000097
-#define HV_X64_MSR_SINT8 0x40000098
-#define HV_X64_MSR_SINT9 0x40000099
-#define HV_X64_MSR_SINT10 0x4000009A
-#define HV_X64_MSR_SINT11 0x4000009B
-#define HV_X64_MSR_SINT12 0x4000009C
-#define HV_X64_MSR_SINT13 0x4000009D
-#define HV_X64_MSR_SINT14 0x4000009E
-#define HV_X64_MSR_SINT15 0x4000009F
-#define HV_X64_MSR_STIMER0_CONFIG 0x400000B0
-#define HV_X64_MSR_STIMER0_COUNT 0x400000B1
-#define HV_X64_MSR_STIMER1_CONFIG 0x400000B2
-#define HV_X64_MSR_STIMER1_COUNT 0x400000B3
-#define HV_X64_MSR_STIMER2_CONFIG 0x400000B4
-#define HV_X64_MSR_STIMER2_COUNT 0x400000B5
-#define HV_X64_MSR_STIMER3_CONFIG 0x400000B6
-#define HV_X64_MSR_STIMER3_COUNT 0x400000B7
-#define HV_X64_MSR_CRASH_P0 0x40000100
-#define HV_X64_MSR_CRASH_P1 0x40000101
-#define HV_X64_MSR_CRASH_P2 0x40000102
-#define HV_X64_MSR_CRASH_P3 0x40000103
-#define HV_X64_MSR_CRASH_P4 0x40000104
-#define HV_X64_MSR_CRASH_CTL 0x40000105
-#define HV_X64_MSR_CRASH_CTL_NOTIFY (1ULL << 63)
-#define HV_X64_MSR_CRASH_PARAMS (1 + (HV_X64_MSR_CRASH_P4 - HV_X64_MSR_CRASH_P0))
-#define HV_X64_MSR_HYPERCALL_ENABLE 0x00000001
-#define HV_X64_MSR_HYPERCALL_PAGE_ADDRESS_SHIFT 12
-#define HV_X64_MSR_HYPERCALL_PAGE_ADDRESS_MASK (~((1ull << HV_X64_MSR_HYPERCALL_PAGE_ADDRESS_SHIFT) - 1))
-#define HVCALL_FLUSH_VIRTUAL_ADDRESS_SPACE 0x0002
-#define HVCALL_FLUSH_VIRTUAL_ADDRESS_LIST 0x0003
-#define HVCALL_NOTIFY_LONG_SPIN_WAIT 0x0008
-#define HVCALL_FLUSH_VIRTUAL_ADDRESS_SPACE_EX 0x0013
-#define HVCALL_FLUSH_VIRTUAL_ADDRESS_LIST_EX 0x0014
-#define HVCALL_POST_MESSAGE 0x005c
-#define HVCALL_SIGNAL_EVENT 0x005d
-#define HV_X64_MSR_APIC_ASSIST_PAGE_ENABLE 0x00000001
-#define HV_X64_MSR_APIC_ASSIST_PAGE_ADDRESS_SHIFT 12
-#define HV_X64_MSR_APIC_ASSIST_PAGE_ADDRESS_MASK (~((1ull << HV_X64_MSR_APIC_ASSIST_PAGE_ADDRESS_SHIFT) - 1))
-#define HV_X64_MSR_TSC_REFERENCE_ENABLE 0x00000001
-#define HV_X64_MSR_TSC_REFERENCE_ADDRESS_SHIFT 12
-#define HV_PROCESSOR_POWER_STATE_C0 0
-#define HV_PROCESSOR_POWER_STATE_C1 1
-#define HV_PROCESSOR_POWER_STATE_C2 2
-#define HV_PROCESSOR_POWER_STATE_C3 3
-#define HV_FLUSH_ALL_PROCESSORS BIT(0)
-#define HV_FLUSH_ALL_VIRTUAL_ADDRESS_SPACES BIT(1)
-#define HV_FLUSH_NON_GLOBAL_MAPPINGS_ONLY BIT(2)
-#define HV_FLUSH_USE_EXTENDED_RANGE_FORMAT BIT(3)
-enum HV_GENERIC_SET_FORMAT {
- HV_GENERIC_SET_SPARCE_4K,
- HV_GENERIC_SET_ALL,
-};
-#define HV_STATUS_SUCCESS 0
-#define HV_STATUS_INVALID_HYPERCALL_CODE 2
-#define HV_STATUS_INVALID_HYPERCALL_INPUT 3
-#define HV_STATUS_INVALID_ALIGNMENT 4
-#define HV_STATUS_INSUFFICIENT_MEMORY 11
-#define HV_STATUS_INVALID_CONNECTION_ID 18
-#define HV_STATUS_INSUFFICIENT_BUFFERS 19
-typedef struct _HV_REFERENCE_TSC_PAGE {
- __u32 tsc_sequence;
- __u32 res1;
- __u64 tsc_scale;
- __s64 tsc_offset;
-} HV_REFERENCE_TSC_PAGE, * PHV_REFERENCE_TSC_PAGE;
-#define HV_SYNIC_SINT_COUNT (16)
-#define HV_SYNIC_VERSION_1 (0x1)
-#define HV_SYNIC_CONTROL_ENABLE (1ULL << 0)
-#define HV_SYNIC_SIMP_ENABLE (1ULL << 0)
-#define HV_SYNIC_SIEFP_ENABLE (1ULL << 0)
-#define HV_SYNIC_SINT_MASKED (1ULL << 16)
-#define HV_SYNIC_SINT_AUTO_EOI (1ULL << 17)
-#define HV_SYNIC_SINT_VECTOR_MASK (0xFF)
-#define HV_SYNIC_STIMER_COUNT (4)
-#define HV_MESSAGE_SIZE (256)
-#define HV_MESSAGE_PAYLOAD_BYTE_COUNT (240)
-#define HV_MESSAGE_PAYLOAD_QWORD_COUNT (30)
-enum hv_message_type {
- HVMSG_NONE = 0x00000000,
- HVMSG_UNMAPPED_GPA = 0x80000000,
- HVMSG_GPA_INTERCEPT = 0x80000001,
- HVMSG_TIMER_EXPIRED = 0x80000010,
- HVMSG_INVALID_VP_REGISTER_VALUE = 0x80000020,
- HVMSG_UNRECOVERABLE_EXCEPTION = 0x80000021,
- HVMSG_UNSUPPORTED_FEATURE = 0x80000022,
- HVMSG_EVENTLOG_BUFFERCOMPLETE = 0x80000040,
- HVMSG_X64_IOPORT_INTERCEPT = 0x80010000,
- HVMSG_X64_MSR_INTERCEPT = 0x80010001,
- HVMSG_X64_CPUID_INTERCEPT = 0x80010002,
- HVMSG_X64_EXCEPTION_INTERCEPT = 0x80010003,
- HVMSG_X64_APIC_EOI = 0x80010004,
- HVMSG_X64_LEGACY_FP_ERROR = 0x80010005
-};
-union hv_message_flags {
- __u8 asu8;
- struct {
- __u8 msg_pending : 1;
- __u8 reserved : 7;
- };
-};
-union hv_port_id {
- __u32 asu32;
- struct {
- __u32 id : 24;
- __u32 reserved : 8;
- } u;
-};
-struct hv_message_header {
- __u32 message_type;
- __u8 payload_size;
- union hv_message_flags message_flags;
- __u8 reserved[2];
- union {
- __u64 sender;
- union hv_port_id port;
- };
-};
-struct hv_message {
- struct hv_message_header header;
- union {
- __u64 payload[HV_MESSAGE_PAYLOAD_QWORD_COUNT];
- } u;
-};
-struct hv_message_page {
- struct hv_message sint_message[HV_SYNIC_SINT_COUNT];
-};
-struct hv_timer_message_payload {
- __u32 timer_index;
- __u32 reserved;
- __u64 expiration_time;
- __u64 delivery_time;
-};
-#define HV_STIMER_ENABLE (1ULL << 0)
-#define HV_STIMER_PERIODIC (1ULL << 1)
-#define HV_STIMER_LAZY (1ULL << 2)
-#define HV_STIMER_AUTOENABLE (1ULL << 3)
-#define HV_STIMER_SINT(config) (__u8) (((config) >> 16) & 0x0F)
-#endif
diff --git a/libc/kernel/uapi/asm-x86/asm/kvm.h b/libc/kernel/uapi/asm-x86/asm/kvm.h
index 913d4bc..df1b396 100644
--- a/libc/kernel/uapi/asm-x86/asm/kvm.h
+++ b/libc/kernel/uapi/asm-x86/asm/kvm.h
@@ -302,7 +302,14 @@
struct kvm_xcr xcrs[KVM_MAX_XCRS];
__u64 padding[16];
};
+#define KVM_SYNC_X86_REGS (1UL << 0)
+#define KVM_SYNC_X86_SREGS (1UL << 1)
+#define KVM_SYNC_X86_EVENTS (1UL << 2)
+#define KVM_SYNC_X86_VALID_FIELDS (KVM_SYNC_X86_REGS | KVM_SYNC_X86_SREGS | KVM_SYNC_X86_EVENTS)
struct kvm_sync_regs {
+ struct kvm_regs regs;
+ struct kvm_sregs sregs;
+ struct kvm_vcpu_events events;
};
#define KVM_X86_QUIRK_LINT0_REENABLED (1 << 0)
#define KVM_X86_QUIRK_CD_NW_CLEARED (1 << 1)
diff --git a/libc/kernel/uapi/asm-x86/asm/kvm_para.h b/libc/kernel/uapi/asm-x86/asm/kvm_para.h
index b7635cb..0e4f2e0 100644
--- a/libc/kernel/uapi/asm-x86/asm/kvm_para.h
+++ b/libc/kernel/uapi/asm-x86/asm/kvm_para.h
@@ -19,7 +19,6 @@
#ifndef _UAPI_ASM_X86_KVM_PARA_H
#define _UAPI_ASM_X86_KVM_PARA_H
#include <linux/types.h>
-#include <asm/hyperv.h>
#define KVM_CPUID_SIGNATURE 0x40000000
#define KVM_CPUID_FEATURES 0x40000001
#define KVM_FEATURE_CLOCKSOURCE 0
@@ -30,6 +29,9 @@
#define KVM_FEATURE_STEAL_TIME 5
#define KVM_FEATURE_PV_EOI 6
#define KVM_FEATURE_PV_UNHALT 7
+#define KVM_FEATURE_PV_TLB_FLUSH 9
+#define KVM_FEATURE_ASYNC_PF_VMEXIT 10
+#define KVM_HINTS_REALTIME 0
#define KVM_FEATURE_CLOCKSOURCE_STABLE_BIT 24
#define MSR_KVM_WALL_CLOCK 0x11
#define MSR_KVM_SYSTEM_TIME 0x12
@@ -47,6 +49,8 @@
__u8 u8_pad[3];
__u32 pad[11];
};
+#define KVM_VCPU_PREEMPTED (1 << 0)
+#define KVM_VCPU_FLUSH_TLB (1 << 1)
#define KVM_CLOCK_PAIRING_WALLCLOCK 0
struct kvm_clock_pairing {
__s64 sec;
diff --git a/libc/kernel/uapi/asm-x86/asm/mce.h b/libc/kernel/uapi/asm-x86/asm/mce.h
index 9448a61..4a3230c 100644
--- a/libc/kernel/uapi/asm-x86/asm/mce.h
+++ b/libc/kernel/uapi/asm-x86/asm/mce.h
@@ -44,6 +44,7 @@
__u64 synd;
__u64 ipid;
__u64 ppin;
+ __u32 microcode;
};
#define MCE_GET_RECORD_LEN _IOR('M', 1, int)
#define MCE_GET_LOG_LEN _IOR('M', 2, int)
diff --git a/libc/kernel/uapi/asm-x86/asm/msgbuf.h b/libc/kernel/uapi/asm-x86/asm/msgbuf.h
index 7809e3c..92ab491 100644
--- a/libc/kernel/uapi/asm-x86/asm/msgbuf.h
+++ b/libc/kernel/uapi/asm-x86/asm/msgbuf.h
@@ -16,4 +16,23 @@
***
****************************************************************************
****************************************************************************/
+#ifndef __ASM_X64_MSGBUF_H
+#define __ASM_X64_MSGBUF_H
+#if !defined(__x86_64__) || !defined(__ILP32__)
#include <asm-generic/msgbuf.h>
+#else
+struct msqid64_ds {
+ struct ipc64_perm msg_perm;
+ __kernel_time_t msg_stime;
+ __kernel_time_t msg_rtime;
+ __kernel_time_t msg_ctime;
+ __kernel_ulong_t msg_cbytes;
+ __kernel_ulong_t msg_qnum;
+ __kernel_ulong_t msg_qbytes;
+ __kernel_pid_t msg_lspid;
+ __kernel_pid_t msg_lrpid;
+ __kernel_ulong_t __unused4;
+ __kernel_ulong_t __unused5;
+};
+#endif
+#endif
diff --git a/libc/kernel/uapi/asm-x86/asm/shmbuf.h b/libc/kernel/uapi/asm-x86/asm/shmbuf.h
index fe8b1be..4486c7b 100644
--- a/libc/kernel/uapi/asm-x86/asm/shmbuf.h
+++ b/libc/kernel/uapi/asm-x86/asm/shmbuf.h
@@ -16,4 +16,33 @@
***
****************************************************************************
****************************************************************************/
+#ifndef __ASM_X86_SHMBUF_H
+#define __ASM_X86_SHMBUF_H
+#if !defined(__x86_64__) || !defined(__ILP32__)
#include <asm-generic/shmbuf.h>
+#else
+struct shmid64_ds {
+ struct ipc64_perm shm_perm;
+ size_t shm_segsz;
+ __kernel_time_t shm_atime;
+ __kernel_time_t shm_dtime;
+ __kernel_time_t shm_ctime;
+ __kernel_pid_t shm_cpid;
+ __kernel_pid_t shm_lpid;
+ __kernel_ulong_t shm_nattch;
+ __kernel_ulong_t __unused4;
+ __kernel_ulong_t __unused5;
+};
+struct shminfo64 {
+ __kernel_ulong_t shmmax;
+ __kernel_ulong_t shmmin;
+ __kernel_ulong_t shmmni;
+ __kernel_ulong_t shmseg;
+ __kernel_ulong_t shmall;
+ __kernel_ulong_t __unused1;
+ __kernel_ulong_t __unused2;
+ __kernel_ulong_t __unused3;
+ __kernel_ulong_t __unused4;
+};
+#endif
+#endif
diff --git a/libc/kernel/uapi/drm/amdgpu_drm.h b/libc/kernel/uapi/drm/amdgpu_drm.h
index 1cdae16..59f5260 100644
--- a/libc/kernel/uapi/drm/amdgpu_drm.h
+++ b/libc/kernel/uapi/drm/amdgpu_drm.h
@@ -106,10 +106,14 @@
#define AMDGPU_CTX_OP_ALLOC_CTX 1
#define AMDGPU_CTX_OP_FREE_CTX 2
#define AMDGPU_CTX_OP_QUERY_STATE 3
+#define AMDGPU_CTX_OP_QUERY_STATE2 4
#define AMDGPU_CTX_NO_RESET 0
#define AMDGPU_CTX_GUILTY_RESET 1
#define AMDGPU_CTX_INNOCENT_RESET 2
#define AMDGPU_CTX_UNKNOWN_RESET 3
+#define AMDGPU_CTX_QUERY2_FLAGS_RESET (1 << 0)
+#define AMDGPU_CTX_QUERY2_FLAGS_VRAMLOST (1 << 1)
+#define AMDGPU_CTX_QUERY2_FLAGS_GUILTY (1 << 2)
#define AMDGPU_CTX_PRIORITY_UNSET - 2048
#define AMDGPU_CTX_PRIORITY_VERY_LOW - 1023
#define AMDGPU_CTX_PRIORITY_LOW - 512
@@ -392,6 +396,7 @@
#define AMDGPU_INFO_FW_SDMA 0x0b
#define AMDGPU_INFO_FW_SOS 0x0c
#define AMDGPU_INFO_FW_ASD 0x0d
+#define AMDGPU_INFO_FW_VCN 0x0e
#define AMDGPU_INFO_NUM_BYTES_MOVED 0x0f
#define AMDGPU_INFO_VRAM_USAGE 0x10
#define AMDGPU_INFO_GTT_USAGE 0x11
@@ -415,6 +420,8 @@
#define AMDGPU_INFO_SENSOR_GPU_AVG_POWER 0x5
#define AMDGPU_INFO_SENSOR_VDDNB 0x6
#define AMDGPU_INFO_SENSOR_VDDGFX 0x7
+#define AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_SCLK 0x8
+#define AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_MCLK 0x9
#define AMDGPU_INFO_NUM_VRAM_CPU_PAGE_FAULTS 0x1E
#define AMDGPU_INFO_VRAM_LOST_COUNTER 0x1F
#define AMDGPU_INFO_MMR_SE_INDEX_SHIFT 0
@@ -494,6 +501,7 @@
#define AMDGPU_VRAM_TYPE_GDDR5 5
#define AMDGPU_VRAM_TYPE_HBM 6
#define AMDGPU_VRAM_TYPE_DDR3 7
+#define AMDGPU_VRAM_TYPE_DDR4 8
struct drm_amdgpu_info_device {
__u32 device_id;
__u32 chip_rev;
@@ -540,6 +548,8 @@
__u32 max_gs_waves_per_vgt;
__u32 _pad1;
__u32 cu_ao_bitmap[4][4];
+ __u64 high_va_offset;
+ __u64 high_va_max;
};
struct drm_amdgpu_info_hw_ip {
__u32 hw_ip_version_major;
diff --git a/libc/kernel/uapi/drm/drm_fourcc.h b/libc/kernel/uapi/drm/drm_fourcc.h
index da416cf..d5fb055 100644
--- a/libc/kernel/uapi/drm/drm_fourcc.h
+++ b/libc/kernel/uapi/drm/drm_fourcc.h
@@ -101,13 +101,13 @@
#define DRM_FORMAT_MOD_VENDOR_NONE 0
#define DRM_FORMAT_MOD_VENDOR_INTEL 0x01
#define DRM_FORMAT_MOD_VENDOR_AMD 0x02
-#define DRM_FORMAT_MOD_VENDOR_NV 0x03
+#define DRM_FORMAT_MOD_VENDOR_NVIDIA 0x03
#define DRM_FORMAT_MOD_VENDOR_SAMSUNG 0x04
#define DRM_FORMAT_MOD_VENDOR_QCOM 0x05
#define DRM_FORMAT_MOD_VENDOR_VIVANTE 0x06
#define DRM_FORMAT_MOD_VENDOR_BROADCOM 0x07
#define DRM_FORMAT_RESERVED ((1ULL << 56) - 1)
-#define fourcc_mod_code(vendor,val) ((((__u64) DRM_FORMAT_MOD_VENDOR_ ##vendor) << 56) | (val & 0x00ffffffffffffffULL))
+#define fourcc_mod_code(vendor,val) ((((__u64) DRM_FORMAT_MOD_VENDOR_ ##vendor) << 56) | ((val) & 0x00ffffffffffffffULL))
#define DRM_FORMAT_MOD_INVALID fourcc_mod_code(NONE, DRM_FORMAT_RESERVED)
#define DRM_FORMAT_MOD_LINEAR fourcc_mod_code(NONE, 0)
#define I915_FORMAT_MOD_X_TILED fourcc_mod_code(INTEL, 1)
@@ -120,12 +120,14 @@
#define DRM_FORMAT_MOD_VIVANTE_SUPER_TILED fourcc_mod_code(VIVANTE, 2)
#define DRM_FORMAT_MOD_VIVANTE_SPLIT_TILED fourcc_mod_code(VIVANTE, 3)
#define DRM_FORMAT_MOD_VIVANTE_SPLIT_SUPER_TILED fourcc_mod_code(VIVANTE, 4)
-#define __fourcc_mod_tegra_mode_shift 32
-#define fourcc_mod_tegra_code(val,params) fourcc_mod_code(NV, ((((__u64) val) << __fourcc_mod_tegra_mode_shift) | params))
-#define fourcc_mod_tegra_mod(m) (m & ~((1ULL << __fourcc_mod_tegra_mode_shift) - 1))
-#define fourcc_mod_tegra_param(m) (m & ((1ULL << __fourcc_mod_tegra_mode_shift) - 1))
-#define NV_FORMAT_MOD_TEGRA_TILED fourcc_mod_tegra_code(1, 0)
-#define NV_FORMAT_MOD_TEGRA_16BX2_BLOCK(v) fourcc_mod_tegra_code(2, v)
+#define DRM_FORMAT_MOD_NVIDIA_TEGRA_TILED fourcc_mod_code(NVIDIA, 1)
+#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(v) fourcc_mod_code(NVIDIA, 0x10 | ((v) & 0xf))
+#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_ONE_GOB fourcc_mod_code(NVIDIA, 0x10)
+#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_TWO_GOB fourcc_mod_code(NVIDIA, 0x11)
+#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_FOUR_GOB fourcc_mod_code(NVIDIA, 0x12)
+#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_EIGHT_GOB fourcc_mod_code(NVIDIA, 0x13)
+#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_SIXTEEN_GOB fourcc_mod_code(NVIDIA, 0x14)
+#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_THIRTYTWO_GOB fourcc_mod_code(NVIDIA, 0x15)
#define DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED fourcc_mod_code(BROADCOM, 1)
#ifdef __cplusplus
#endif
diff --git a/libc/kernel/uapi/drm/drm_mode.h b/libc/kernel/uapi/drm/drm_mode.h
index 2c9defb..b91f161 100644
--- a/libc/kernel/uapi/drm/drm_mode.h
+++ b/libc/kernel/uapi/drm/drm_mode.h
@@ -32,6 +32,7 @@
#define DRM_MODE_TYPE_DEFAULT (1 << 4)
#define DRM_MODE_TYPE_USERDEF (1 << 5)
#define DRM_MODE_TYPE_DRIVER (1 << 6)
+#define DRM_MODE_TYPE_ALL (DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_USERDEF | DRM_MODE_TYPE_DRIVER)
#define DRM_MODE_FLAG_PHSYNC (1 << 0)
#define DRM_MODE_FLAG_NHSYNC (1 << 1)
#define DRM_MODE_FLAG_PVSYNC (1 << 2)
@@ -63,6 +64,7 @@
#define DRM_MODE_FLAG_PIC_AR_NONE (DRM_MODE_PICTURE_ASPECT_NONE << 19)
#define DRM_MODE_FLAG_PIC_AR_4_3 (DRM_MODE_PICTURE_ASPECT_4_3 << 19)
#define DRM_MODE_FLAG_PIC_AR_16_9 (DRM_MODE_PICTURE_ASPECT_16_9 << 19)
+#define DRM_MODE_FLAG_ALL (DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLSCAN | DRM_MODE_FLAG_CSYNC | DRM_MODE_FLAG_PCSYNC | DRM_MODE_FLAG_NCSYNC | DRM_MODE_FLAG_HSKEW | DRM_MODE_FLAG_DBLCLK | DRM_MODE_FLAG_CLKDIV2 | DRM_MODE_FLAG_3D_MASK)
#define DRM_MODE_DPMS_ON 0
#define DRM_MODE_DPMS_STANDBY 1
#define DRM_MODE_DPMS_SUSPEND 2
@@ -87,6 +89,9 @@
#define DRM_MODE_REFLECT_X (1 << 4)
#define DRM_MODE_REFLECT_Y (1 << 5)
#define DRM_MODE_REFLECT_MASK (DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y)
+#define DRM_MODE_CONTENT_PROTECTION_UNDESIRED 0
+#define DRM_MODE_CONTENT_PROTECTION_DESIRED 1
+#define DRM_MODE_CONTENT_PROTECTION_ENABLED 2
struct drm_mode_modeinfo {
__u32 clock;
__u16 hdisplay;
@@ -345,7 +350,7 @@
__u64 blue;
};
struct drm_color_ctm {
- __s64 matrix[9];
+ __u64 matrix[9];
};
struct drm_color_lut {
__u16 red;
diff --git a/libc/kernel/uapi/drm/etnaviv_drm.h b/libc/kernel/uapi/drm/etnaviv_drm.h
index 58bd536..bb502d9 100644
--- a/libc/kernel/uapi/drm/etnaviv_drm.h
+++ b/libc/kernel/uapi/drm/etnaviv_drm.h
@@ -34,6 +34,12 @@
#define ETNAVIV_PARAM_GPU_FEATURES_4 0x07
#define ETNAVIV_PARAM_GPU_FEATURES_5 0x08
#define ETNAVIV_PARAM_GPU_FEATURES_6 0x09
+#define ETNAVIV_PARAM_GPU_FEATURES_7 0x0a
+#define ETNAVIV_PARAM_GPU_FEATURES_8 0x0b
+#define ETNAVIV_PARAM_GPU_FEATURES_9 0x0c
+#define ETNAVIV_PARAM_GPU_FEATURES_10 0x0d
+#define ETNAVIV_PARAM_GPU_FEATURES_11 0x0e
+#define ETNAVIV_PARAM_GPU_FEATURES_12 0x0f
#define ETNAVIV_PARAM_GPU_STREAM_COUNT 0x10
#define ETNAVIV_PARAM_GPU_REGISTER_MAX 0x11
#define ETNAVIV_PARAM_GPU_THREAD_COUNT 0x12
diff --git a/libc/kernel/uapi/drm/exynos_drm.h b/libc/kernel/uapi/drm/exynos_drm.h
index 9514d75..ed9022b 100644
--- a/libc/kernel/uapi/drm/exynos_drm.h
+++ b/libc/kernel/uapi/drm/exynos_drm.h
@@ -80,103 +80,6 @@
struct drm_exynos_g2d_exec {
__u64 async;
};
-enum drm_exynos_ops_id {
- EXYNOS_DRM_OPS_SRC,
- EXYNOS_DRM_OPS_DST,
- EXYNOS_DRM_OPS_MAX,
-};
-struct drm_exynos_sz {
- __u32 hsize;
- __u32 vsize;
-};
-struct drm_exynos_pos {
- __u32 x;
- __u32 y;
- __u32 w;
- __u32 h;
-};
-enum drm_exynos_flip {
- EXYNOS_DRM_FLIP_NONE = (0 << 0),
- EXYNOS_DRM_FLIP_VERTICAL = (1 << 0),
- EXYNOS_DRM_FLIP_HORIZONTAL = (1 << 1),
- EXYNOS_DRM_FLIP_BOTH = EXYNOS_DRM_FLIP_VERTICAL | EXYNOS_DRM_FLIP_HORIZONTAL,
-};
-enum drm_exynos_degree {
- EXYNOS_DRM_DEGREE_0,
- EXYNOS_DRM_DEGREE_90,
- EXYNOS_DRM_DEGREE_180,
- EXYNOS_DRM_DEGREE_270,
-};
-enum drm_exynos_planer {
- EXYNOS_DRM_PLANAR_Y,
- EXYNOS_DRM_PLANAR_CB,
- EXYNOS_DRM_PLANAR_CR,
- EXYNOS_DRM_PLANAR_MAX,
-};
-struct drm_exynos_ipp_prop_list {
- __u32 version;
- __u32 ipp_id;
- __u32 count;
- __u32 writeback;
- __u32 flip;
- __u32 degree;
- __u32 csc;
- __u32 crop;
- __u32 scale;
- __u32 refresh_min;
- __u32 refresh_max;
- __u32 reserved;
- struct drm_exynos_sz crop_min;
- struct drm_exynos_sz crop_max;
- struct drm_exynos_sz scale_min;
- struct drm_exynos_sz scale_max;
-};
-struct drm_exynos_ipp_config {
- __u32 ops_id;
- __u32 flip;
- __u32 degree;
- __u32 fmt;
- struct drm_exynos_sz sz;
- struct drm_exynos_pos pos;
-};
-enum drm_exynos_ipp_cmd {
- IPP_CMD_NONE,
- IPP_CMD_M2M,
- IPP_CMD_WB,
- IPP_CMD_OUTPUT,
- IPP_CMD_MAX,
-};
-struct drm_exynos_ipp_property {
- struct drm_exynos_ipp_config config[EXYNOS_DRM_OPS_MAX];
- __u32 cmd;
- __u32 ipp_id;
- __u32 prop_id;
- __u32 refresh_rate;
-};
-enum drm_exynos_ipp_buf_type {
- IPP_BUF_ENQUEUE,
- IPP_BUF_DEQUEUE,
-};
-struct drm_exynos_ipp_queue_buf {
- __u32 ops_id;
- __u32 buf_type;
- __u32 prop_id;
- __u32 buf_id;
- __u32 handle[EXYNOS_DRM_PLANAR_MAX];
- __u32 reserved;
- __u64 user_data;
-};
-enum drm_exynos_ipp_ctrl {
- IPP_CTRL_PLAY,
- IPP_CTRL_STOP,
- IPP_CTRL_PAUSE,
- IPP_CTRL_RESUME,
- IPP_CTRL_MAX,
-};
-struct drm_exynos_ipp_cmd_ctrl {
- __u32 prop_id;
- __u32 ctrl;
-};
#define DRM_EXYNOS_GEM_CREATE 0x00
#define DRM_EXYNOS_GEM_MAP 0x01
#define DRM_EXYNOS_GEM_GET 0x04
@@ -184,10 +87,6 @@
#define DRM_EXYNOS_G2D_GET_VER 0x20
#define DRM_EXYNOS_G2D_SET_CMDLIST 0x21
#define DRM_EXYNOS_G2D_EXEC 0x22
-#define DRM_EXYNOS_IPP_GET_PROPERTY 0x30
-#define DRM_EXYNOS_IPP_SET_PROPERTY 0x31
-#define DRM_EXYNOS_IPP_QUEUE_BUF 0x32
-#define DRM_EXYNOS_IPP_CMD_CTRL 0x33
#define DRM_IOCTL_EXYNOS_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_GEM_CREATE, struct drm_exynos_gem_create)
#define DRM_IOCTL_EXYNOS_GEM_MAP DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_GEM_MAP, struct drm_exynos_gem_map)
#define DRM_IOCTL_EXYNOS_GEM_GET DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_GEM_GET, struct drm_exynos_gem_info)
@@ -195,12 +94,7 @@
#define DRM_IOCTL_EXYNOS_G2D_GET_VER DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_G2D_GET_VER, struct drm_exynos_g2d_get_ver)
#define DRM_IOCTL_EXYNOS_G2D_SET_CMDLIST DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_G2D_SET_CMDLIST, struct drm_exynos_g2d_set_cmdlist)
#define DRM_IOCTL_EXYNOS_G2D_EXEC DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_G2D_EXEC, struct drm_exynos_g2d_exec)
-#define DRM_IOCTL_EXYNOS_IPP_GET_PROPERTY DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_IPP_GET_PROPERTY, struct drm_exynos_ipp_prop_list)
-#define DRM_IOCTL_EXYNOS_IPP_SET_PROPERTY DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_IPP_SET_PROPERTY, struct drm_exynos_ipp_property)
-#define DRM_IOCTL_EXYNOS_IPP_QUEUE_BUF DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_IPP_QUEUE_BUF, struct drm_exynos_ipp_queue_buf)
-#define DRM_IOCTL_EXYNOS_IPP_CMD_CTRL DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_IPP_CMD_CTRL, struct drm_exynos_ipp_cmd_ctrl)
#define DRM_EXYNOS_G2D_EVENT 0x80000000
-#define DRM_EXYNOS_IPP_EVENT 0x80000001
struct drm_exynos_g2d_event {
struct drm_event base;
__u64 user_data;
@@ -209,15 +103,6 @@
__u32 cmdlist_no;
__u32 reserved;
};
-struct drm_exynos_ipp_event {
- struct drm_event base;
- __u64 user_data;
- __u32 tv_sec;
- __u32 tv_usec;
- __u32 prop_id;
- __u32 reserved;
- __u32 buf_id[EXYNOS_DRM_OPS_MAX];
-};
#ifdef __cplusplus
#endif
#endif
diff --git a/libc/kernel/uapi/drm/i915_drm.h b/libc/kernel/uapi/drm/i915_drm.h
index 34342bf..4c1d87f 100644
--- a/libc/kernel/uapi/drm/i915_drm.h
+++ b/libc/kernel/uapi/drm/i915_drm.h
@@ -29,6 +29,32 @@
I915_MOCS_PTE,
I915_MOCS_CACHED,
};
+enum drm_i915_gem_engine_class {
+ I915_ENGINE_CLASS_RENDER = 0,
+ I915_ENGINE_CLASS_COPY = 1,
+ I915_ENGINE_CLASS_VIDEO = 2,
+ I915_ENGINE_CLASS_VIDEO_ENHANCE = 3,
+ I915_ENGINE_CLASS_INVALID = - 1
+};
+enum drm_i915_pmu_engine_sample {
+ I915_SAMPLE_BUSY = 0,
+ I915_SAMPLE_WAIT = 1,
+ I915_SAMPLE_SEMA = 2
+};
+#define I915_PMU_SAMPLE_BITS (4)
+#define I915_PMU_SAMPLE_MASK (0xf)
+#define I915_PMU_SAMPLE_INSTANCE_BITS (8)
+#define I915_PMU_CLASS_SHIFT (I915_PMU_SAMPLE_BITS + I915_PMU_SAMPLE_INSTANCE_BITS)
+#define __I915_PMU_ENGINE(class,instance,sample) ((class) << I915_PMU_CLASS_SHIFT | (instance) << I915_PMU_SAMPLE_BITS | (sample))
+#define I915_PMU_ENGINE_BUSY(class,instance) __I915_PMU_ENGINE(class, instance, I915_SAMPLE_BUSY)
+#define I915_PMU_ENGINE_WAIT(class,instance) __I915_PMU_ENGINE(class, instance, I915_SAMPLE_WAIT)
+#define I915_PMU_ENGINE_SEMA(class,instance) __I915_PMU_ENGINE(class, instance, I915_SAMPLE_SEMA)
+#define __I915_PMU_OTHER(x) (__I915_PMU_ENGINE(0xff, 0xff, 0xf) + 1 + (x))
+#define I915_PMU_ACTUAL_FREQUENCY __I915_PMU_OTHER(0)
+#define I915_PMU_REQUESTED_FREQUENCY __I915_PMU_OTHER(1)
+#define I915_PMU_INTERRUPTS __I915_PMU_OTHER(2)
+#define I915_PMU_RC6_RESIDENCY __I915_PMU_OTHER(3)
+#define I915_PMU_LAST I915_PMU_RC6_RESIDENCY
#define I915_NR_TEX_REGIONS 255
#define I915_LOG_MIN_TEX_REGION_SIZE 14
typedef struct _drm_i915_init {
@@ -174,6 +200,7 @@
#define DRM_I915_PERF_OPEN 0x36
#define DRM_I915_PERF_ADD_CONFIG 0x37
#define DRM_I915_PERF_REMOVE_CONFIG 0x38
+#define DRM_I915_QUERY 0x39
#define DRM_IOCTL_I915_INIT DRM_IOW(DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
#define DRM_IOCTL_I915_FLUSH DRM_IO(DRM_COMMAND_BASE + DRM_I915_FLUSH)
#define DRM_IOCTL_I915_FLIP DRM_IO(DRM_COMMAND_BASE + DRM_I915_FLIP)
@@ -230,6 +257,7 @@
#define DRM_IOCTL_I915_PERF_OPEN DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_OPEN, struct drm_i915_perf_open_param)
#define DRM_IOCTL_I915_PERF_ADD_CONFIG DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_ADD_CONFIG, struct drm_i915_perf_oa_config)
#define DRM_IOCTL_I915_PERF_REMOVE_CONFIG DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_REMOVE_CONFIG, __u64)
+#define DRM_IOCTL_I915_QUERY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_QUERY, struct drm_i915_query)
typedef struct drm_i915_batchbuffer {
int start;
int used;
@@ -304,6 +332,8 @@
#define I915_PARAM_SUBSLICE_MASK 47
#define I915_PARAM_HAS_EXEC_BATCH_FIRST 48
#define I915_PARAM_HAS_EXEC_FENCE_ARRAY 49
+#define I915_PARAM_HAS_CONTEXT_ISOLATION 50
+#define I915_PARAM_CS_TIMESTAMP_FREQUENCY 51
typedef struct drm_i915_getparam {
__s32 param;
int __user * value;
@@ -721,6 +751,29 @@
__u64 boolean_regs_ptr;
__u64 flex_regs_ptr;
};
+struct drm_i915_query_item {
+ __u64 query_id;
+#define DRM_I915_QUERY_TOPOLOGY_INFO 1
+ __s32 length;
+ __u32 flags;
+ __u64 data_ptr;
+};
+struct drm_i915_query {
+ __u32 num_items;
+ __u32 flags;
+ __u64 items_ptr;
+};
+struct drm_i915_query_topology_info {
+ __u16 flags;
+ __u16 max_slices;
+ __u16 max_subslices;
+ __u16 max_eus_per_subslice;
+ __u16 subslice_offset;
+ __u16 subslice_stride;
+ __u16 eu_offset;
+ __u16 eu_stride;
+ __u8 data[];
+};
#ifdef __cplusplus
#endif
#endif
diff --git a/libc/kernel/uapi/drm/msm_drm.h b/libc/kernel/uapi/drm/msm_drm.h
index d2f1b57..1d53c5d 100644
--- a/libc/kernel/uapi/drm/msm_drm.h
+++ b/libc/kernel/uapi/drm/msm_drm.h
@@ -105,7 +105,8 @@
#define MSM_SUBMIT_NO_IMPLICIT 0x80000000
#define MSM_SUBMIT_FENCE_FD_IN 0x40000000
#define MSM_SUBMIT_FENCE_FD_OUT 0x20000000
-#define MSM_SUBMIT_FLAGS (MSM_SUBMIT_NO_IMPLICIT | MSM_SUBMIT_FENCE_FD_IN | MSM_SUBMIT_FENCE_FD_OUT | 0)
+#define MSM_SUBMIT_SUDO 0x10000000
+#define MSM_SUBMIT_FLAGS (MSM_SUBMIT_NO_IMPLICIT | MSM_SUBMIT_FENCE_FD_IN | MSM_SUBMIT_FENCE_FD_OUT | MSM_SUBMIT_SUDO | 0)
struct drm_msm_gem_submit {
__u32 flags;
__u32 fence;
diff --git a/libc/kernel/uapi/drm/vc4_drm.h b/libc/kernel/uapi/drm/vc4_drm.h
index 3ca378f..05ed172 100644
--- a/libc/kernel/uapi/drm/vc4_drm.h
+++ b/libc/kernel/uapi/drm/vc4_drm.h
@@ -33,6 +33,9 @@
#define DRM_VC4_GET_TILING 0x09
#define DRM_VC4_LABEL_BO 0x0a
#define DRM_VC4_GEM_MADVISE 0x0b
+#define DRM_VC4_PERFMON_CREATE 0x0c
+#define DRM_VC4_PERFMON_DESTROY 0x0d
+#define DRM_VC4_PERFMON_GET_VALUES 0x0e
#define DRM_IOCTL_VC4_SUBMIT_CL DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_SUBMIT_CL, struct drm_vc4_submit_cl)
#define DRM_IOCTL_VC4_WAIT_SEQNO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_WAIT_SEQNO, struct drm_vc4_wait_seqno)
#define DRM_IOCTL_VC4_WAIT_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_WAIT_BO, struct drm_vc4_wait_bo)
@@ -45,6 +48,9 @@
#define DRM_IOCTL_VC4_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GET_TILING, struct drm_vc4_get_tiling)
#define DRM_IOCTL_VC4_LABEL_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_LABEL_BO, struct drm_vc4_label_bo)
#define DRM_IOCTL_VC4_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GEM_MADVISE, struct drm_vc4_gem_madvise)
+#define DRM_IOCTL_VC4_PERFMON_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_CREATE, struct drm_vc4_perfmon_create)
+#define DRM_IOCTL_VC4_PERFMON_DESTROY DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_DESTROY, struct drm_vc4_perfmon_destroy)
+#define DRM_IOCTL_VC4_PERFMON_GET_VALUES DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_GET_VALUES, struct drm_vc4_perfmon_get_values)
struct drm_vc4_submit_rcl_surface {
__u32 hindex;
__u32 offset;
@@ -84,6 +90,8 @@
#define VC4_SUBMIT_CL_RCL_ORDER_INCREASING_Y (1 << 3)
__u32 flags;
__u64 seqno;
+ __u32 perfmonid;
+ __u32 pad2;
};
struct drm_vc4_wait_seqno {
__u64 seqno;
@@ -145,6 +153,7 @@
#define DRM_VC4_PARAM_SUPPORTS_THREADED_FS 5
#define DRM_VC4_PARAM_SUPPORTS_FIXED_RCL_ORDER 6
#define DRM_VC4_PARAM_SUPPORTS_MADVISE 7
+#define DRM_VC4_PARAM_SUPPORTS_PERFMON 8
struct drm_vc4_get_param {
__u32 param;
__u32 pad;
@@ -175,6 +184,52 @@
__u32 retained;
__u32 pad;
};
+enum {
+ VC4_PERFCNT_FEP_VALID_PRIMS_NO_RENDER,
+ VC4_PERFCNT_FEP_VALID_PRIMS_RENDER,
+ VC4_PERFCNT_FEP_CLIPPED_QUADS,
+ VC4_PERFCNT_FEP_VALID_QUADS,
+ VC4_PERFCNT_TLB_QUADS_NOT_PASSING_STENCIL,
+ VC4_PERFCNT_TLB_QUADS_NOT_PASSING_Z_AND_STENCIL,
+ VC4_PERFCNT_TLB_QUADS_PASSING_Z_AND_STENCIL,
+ VC4_PERFCNT_TLB_QUADS_ZERO_COVERAGE,
+ VC4_PERFCNT_TLB_QUADS_NON_ZERO_COVERAGE,
+ VC4_PERFCNT_TLB_QUADS_WRITTEN_TO_COLOR_BUF,
+ VC4_PERFCNT_PLB_PRIMS_OUTSIDE_VIEWPORT,
+ VC4_PERFCNT_PLB_PRIMS_NEED_CLIPPING,
+ VC4_PERFCNT_PSE_PRIMS_REVERSED,
+ VC4_PERFCNT_QPU_TOTAL_IDLE_CYCLES,
+ VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_VERTEX_COORD_SHADING,
+ VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_FRAGMENT_SHADING,
+ VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_EXEC_VALID_INST,
+ VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_TMUS,
+ VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_SCOREBOARD,
+ VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_VARYINGS,
+ VC4_PERFCNT_QPU_TOTAL_INST_CACHE_HIT,
+ VC4_PERFCNT_QPU_TOTAL_INST_CACHE_MISS,
+ VC4_PERFCNT_QPU_TOTAL_UNIFORM_CACHE_HIT,
+ VC4_PERFCNT_QPU_TOTAL_UNIFORM_CACHE_MISS,
+ VC4_PERFCNT_TMU_TOTAL_TEXT_QUADS_PROCESSED,
+ VC4_PERFCNT_TMU_TOTAL_TEXT_CACHE_MISS,
+ VC4_PERFCNT_VPM_TOTAL_CLK_CYCLES_VDW_STALLED,
+ VC4_PERFCNT_VPM_TOTAL_CLK_CYCLES_VCD_STALLED,
+ VC4_PERFCNT_L2C_TOTAL_L2_CACHE_HIT,
+ VC4_PERFCNT_L2C_TOTAL_L2_CACHE_MISS,
+ VC4_PERFCNT_NUM_EVENTS,
+};
+#define DRM_VC4_MAX_PERF_COUNTERS 16
+struct drm_vc4_perfmon_create {
+ __u32 id;
+ __u32 ncounters;
+ __u8 events[DRM_VC4_MAX_PERF_COUNTERS];
+};
+struct drm_vc4_perfmon_destroy {
+ __u32 id;
+};
+struct drm_vc4_perfmon_get_values {
+ __u32 id;
+ __u64 values_ptr;
+};
#ifdef __cplusplus
#endif
#endif
diff --git a/libc/kernel/uapi/drm/virtgpu_drm.h b/libc/kernel/uapi/drm/virtgpu_drm.h
index 31e6715..6b7fb0b 100644
--- a/libc/kernel/uapi/drm/virtgpu_drm.h
+++ b/libc/kernel/uapi/drm/virtgpu_drm.h
@@ -44,6 +44,7 @@
__u32 pad;
};
#define VIRTGPU_PARAM_3D_FEATURES 1
+#define VIRTGPU_PARAM_CAPSET_QUERY_FIX 2
struct drm_virtgpu_getparam {
__u64 param;
__u64 value;
diff --git a/libc/kernel/uapi/linux/arm_sdei.h b/libc/kernel/uapi/linux/arm_sdei.h
new file mode 100644
index 0000000..4ec9294
--- /dev/null
+++ b/libc/kernel/uapi/linux/arm_sdei.h
@@ -0,0 +1,72 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _UAPI_LINUX_ARM_SDEI_H
+#define _UAPI_LINUX_ARM_SDEI_H
+#define SDEI_1_0_FN_BASE 0xC4000020
+#define SDEI_1_0_MASK 0xFFFFFFE0
+#define SDEI_1_0_FN(n) (SDEI_1_0_FN_BASE + (n))
+#define SDEI_1_0_FN_SDEI_VERSION SDEI_1_0_FN(0x00)
+#define SDEI_1_0_FN_SDEI_EVENT_REGISTER SDEI_1_0_FN(0x01)
+#define SDEI_1_0_FN_SDEI_EVENT_ENABLE SDEI_1_0_FN(0x02)
+#define SDEI_1_0_FN_SDEI_EVENT_DISABLE SDEI_1_0_FN(0x03)
+#define SDEI_1_0_FN_SDEI_EVENT_CONTEXT SDEI_1_0_FN(0x04)
+#define SDEI_1_0_FN_SDEI_EVENT_COMPLETE SDEI_1_0_FN(0x05)
+#define SDEI_1_0_FN_SDEI_EVENT_COMPLETE_AND_RESUME SDEI_1_0_FN(0x06)
+#define SDEI_1_0_FN_SDEI_EVENT_UNREGISTER SDEI_1_0_FN(0x07)
+#define SDEI_1_0_FN_SDEI_EVENT_STATUS SDEI_1_0_FN(0x08)
+#define SDEI_1_0_FN_SDEI_EVENT_GET_INFO SDEI_1_0_FN(0x09)
+#define SDEI_1_0_FN_SDEI_EVENT_ROUTING_SET SDEI_1_0_FN(0x0A)
+#define SDEI_1_0_FN_SDEI_PE_MASK SDEI_1_0_FN(0x0B)
+#define SDEI_1_0_FN_SDEI_PE_UNMASK SDEI_1_0_FN(0x0C)
+#define SDEI_1_0_FN_SDEI_INTERRUPT_BIND SDEI_1_0_FN(0x0D)
+#define SDEI_1_0_FN_SDEI_INTERRUPT_RELEASE SDEI_1_0_FN(0x0E)
+#define SDEI_1_0_FN_SDEI_PRIVATE_RESET SDEI_1_0_FN(0x11)
+#define SDEI_1_0_FN_SDEI_SHARED_RESET SDEI_1_0_FN(0x12)
+#define SDEI_VERSION_MAJOR_SHIFT 48
+#define SDEI_VERSION_MAJOR_MASK 0x7fff
+#define SDEI_VERSION_MINOR_SHIFT 32
+#define SDEI_VERSION_MINOR_MASK 0xffff
+#define SDEI_VERSION_VENDOR_SHIFT 0
+#define SDEI_VERSION_VENDOR_MASK 0xffffffff
+#define SDEI_VERSION_MAJOR(x) (x >> SDEI_VERSION_MAJOR_SHIFT & SDEI_VERSION_MAJOR_MASK)
+#define SDEI_VERSION_MINOR(x) (x >> SDEI_VERSION_MINOR_SHIFT & SDEI_VERSION_MINOR_MASK)
+#define SDEI_VERSION_VENDOR(x) (x >> SDEI_VERSION_VENDOR_SHIFT & SDEI_VERSION_VENDOR_MASK)
+#define SDEI_SUCCESS 0
+#define SDEI_NOT_SUPPORTED - 1
+#define SDEI_INVALID_PARAMETERS - 2
+#define SDEI_DENIED - 3
+#define SDEI_PENDING - 5
+#define SDEI_OUT_OF_RESOURCE - 10
+#define SDEI_EVENT_REGISTER_RM_ANY 0
+#define SDEI_EVENT_REGISTER_RM_PE 1
+#define SDEI_EVENT_STATUS_RUNNING 2
+#define SDEI_EVENT_STATUS_ENABLED 1
+#define SDEI_EVENT_STATUS_REGISTERED 0
+#define SDEI_EV_HANDLED 0
+#define SDEI_EV_FAILED 1
+#define SDEI_EVENT_INFO_EV_TYPE 0
+#define SDEI_EVENT_INFO_EV_SIGNALED 1
+#define SDEI_EVENT_INFO_EV_PRIORITY 2
+#define SDEI_EVENT_INFO_EV_ROUTING_MODE 3
+#define SDEI_EVENT_INFO_EV_ROUTING_AFF 4
+#define SDEI_EVENT_TYPE_PRIVATE 0
+#define SDEI_EVENT_TYPE_SHARED 1
+#define SDEI_EVENT_PRIORITY_NORMAL 0
+#define SDEI_EVENT_PRIORITY_CRITICAL 1
+#endif
diff --git a/libc/kernel/uapi/linux/batadv_packet.h b/libc/kernel/uapi/linux/batadv_packet.h
new file mode 100644
index 0000000..6d5226c
--- /dev/null
+++ b/libc/kernel/uapi/linux/batadv_packet.h
@@ -0,0 +1,280 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _UAPI_LINUX_BATADV_PACKET_H_
+#define _UAPI_LINUX_BATADV_PACKET_H_
+#include <asm/byteorder.h>
+#include <linux/if_ether.h>
+#include <linux/types.h>
+#define batadv_tp_is_error(n) ((__u8) (n) > 127 ? 1 : 0)
+enum batadv_packettype {
+ BATADV_IV_OGM = 0x00,
+ BATADV_BCAST = 0x01,
+ BATADV_CODED = 0x02,
+ BATADV_ELP = 0x03,
+ BATADV_OGM2 = 0x04,
+#define BATADV_UNICAST_MIN 0x40
+ BATADV_UNICAST = 0x40,
+ BATADV_UNICAST_FRAG = 0x41,
+ BATADV_UNICAST_4ADDR = 0x42,
+ BATADV_ICMP = 0x43,
+ BATADV_UNICAST_TVLV = 0x44,
+#define BATADV_UNICAST_MAX 0x7f
+};
+enum batadv_subtype {
+ BATADV_P_DATA = 0x01,
+ BATADV_P_DAT_DHT_GET = 0x02,
+ BATADV_P_DAT_DHT_PUT = 0x03,
+ BATADV_P_DAT_CACHE_REPLY = 0x04,
+};
+#define BATADV_COMPAT_VERSION 15
+enum batadv_iv_flags {
+ BATADV_NOT_BEST_NEXT_HOP = 1UL << 0,
+ BATADV_PRIMARIES_FIRST_HOP = 1UL << 1,
+ BATADV_DIRECTLINK = 1UL << 2,
+};
+enum batadv_icmp_packettype {
+ BATADV_ECHO_REPLY = 0,
+ BATADV_DESTINATION_UNREACHABLE = 3,
+ BATADV_ECHO_REQUEST = 8,
+ BATADV_TTL_EXCEEDED = 11,
+ BATADV_PARAMETER_PROBLEM = 12,
+ BATADV_TP = 15,
+};
+enum batadv_mcast_flags {
+ BATADV_MCAST_WANT_ALL_UNSNOOPABLES = 1UL << 0,
+ BATADV_MCAST_WANT_ALL_IPV4 = 1UL << 1,
+ BATADV_MCAST_WANT_ALL_IPV6 = 1UL << 2,
+};
+#define BATADV_TT_DATA_TYPE_MASK 0x0F
+enum batadv_tt_data_flags {
+ BATADV_TT_OGM_DIFF = 1UL << 0,
+ BATADV_TT_REQUEST = 1UL << 1,
+ BATADV_TT_RESPONSE = 1UL << 2,
+ BATADV_TT_FULL_TABLE = 1UL << 4,
+};
+enum batadv_vlan_flags {
+ BATADV_VLAN_HAS_TAG = 1UL << 15,
+};
+enum batadv_bla_claimframe {
+ BATADV_CLAIM_TYPE_CLAIM = 0x00,
+ BATADV_CLAIM_TYPE_UNCLAIM = 0x01,
+ BATADV_CLAIM_TYPE_ANNOUNCE = 0x02,
+ BATADV_CLAIM_TYPE_REQUEST = 0x03,
+ BATADV_CLAIM_TYPE_LOOPDETECT = 0x04,
+};
+enum batadv_tvlv_type {
+ BATADV_TVLV_GW = 0x01,
+ BATADV_TVLV_DAT = 0x02,
+ BATADV_TVLV_NC = 0x03,
+ BATADV_TVLV_TT = 0x04,
+ BATADV_TVLV_ROAM = 0x05,
+ BATADV_TVLV_MCAST = 0x06,
+};
+#pragma pack(2)
+struct batadv_bla_claim_dst {
+ __u8 magic[3];
+ __u8 type;
+ __be16 group;
+};
+struct batadv_ogm_packet {
+ __u8 packet_type;
+ __u8 version;
+ __u8 ttl;
+ __u8 flags;
+ __be32 seqno;
+ __u8 orig[ETH_ALEN];
+ __u8 prev_sender[ETH_ALEN];
+ __u8 reserved;
+ __u8 tq;
+ __be16 tvlv_len;
+};
+#define BATADV_OGM_HLEN sizeof(struct batadv_ogm_packet)
+struct batadv_ogm2_packet {
+ __u8 packet_type;
+ __u8 version;
+ __u8 ttl;
+ __u8 flags;
+ __be32 seqno;
+ __u8 orig[ETH_ALEN];
+ __be16 tvlv_len;
+ __be32 throughput;
+};
+#define BATADV_OGM2_HLEN sizeof(struct batadv_ogm2_packet)
+struct batadv_elp_packet {
+ __u8 packet_type;
+ __u8 version;
+ __u8 orig[ETH_ALEN];
+ __be32 seqno;
+ __be32 elp_interval;
+};
+#define BATADV_ELP_HLEN sizeof(struct batadv_elp_packet)
+struct batadv_icmp_header {
+ __u8 packet_type;
+ __u8 version;
+ __u8 ttl;
+ __u8 msg_type;
+ __u8 dst[ETH_ALEN];
+ __u8 orig[ETH_ALEN];
+ __u8 uid;
+ __u8 align[3];
+};
+struct batadv_icmp_packet {
+ __u8 packet_type;
+ __u8 version;
+ __u8 ttl;
+ __u8 msg_type;
+ __u8 dst[ETH_ALEN];
+ __u8 orig[ETH_ALEN];
+ __u8 uid;
+ __u8 reserved;
+ __be16 seqno;
+};
+struct batadv_icmp_tp_packet {
+ __u8 packet_type;
+ __u8 version;
+ __u8 ttl;
+ __u8 msg_type;
+ __u8 dst[ETH_ALEN];
+ __u8 orig[ETH_ALEN];
+ __u8 uid;
+ __u8 subtype;
+ __u8 session[2];
+ __be32 seqno;
+ __be32 timestamp;
+};
+enum batadv_icmp_tp_subtype {
+ BATADV_TP_MSG = 0,
+ BATADV_TP_ACK,
+};
+#define BATADV_RR_LEN 16
+struct batadv_icmp_packet_rr {
+ __u8 packet_type;
+ __u8 version;
+ __u8 ttl;
+ __u8 msg_type;
+ __u8 dst[ETH_ALEN];
+ __u8 orig[ETH_ALEN];
+ __u8 uid;
+ __u8 rr_cur;
+ __be16 seqno;
+ __u8 rr[BATADV_RR_LEN][ETH_ALEN];
+};
+#define BATADV_ICMP_MAX_PACKET_SIZE sizeof(struct batadv_icmp_packet_rr)
+struct batadv_unicast_packet {
+ __u8 packet_type;
+ __u8 version;
+ __u8 ttl;
+ __u8 ttvn;
+ __u8 dest[ETH_ALEN];
+};
+struct batadv_unicast_4addr_packet {
+ struct batadv_unicast_packet u;
+ __u8 src[ETH_ALEN];
+ __u8 subtype;
+ __u8 reserved;
+};
+struct batadv_frag_packet {
+ __u8 packet_type;
+ __u8 version;
+ __u8 ttl;
+#ifdef __BIG_ENDIAN_BITFIELD
+ __u8 no : 4;
+ __u8 priority : 3;
+ __u8 reserved : 1;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+ __u8 reserved : 1;
+ __u8 priority : 3;
+ __u8 no : 4;
+#else
+#error "unknown bitfield endianness"
+#endif
+ __u8 dest[ETH_ALEN];
+ __u8 orig[ETH_ALEN];
+ __be16 seqno;
+ __be16 total_size;
+};
+struct batadv_bcast_packet {
+ __u8 packet_type;
+ __u8 version;
+ __u8 ttl;
+ __u8 reserved;
+ __be32 seqno;
+ __u8 orig[ETH_ALEN];
+};
+struct batadv_coded_packet {
+ __u8 packet_type;
+ __u8 version;
+ __u8 ttl;
+ __u8 first_ttvn;
+ __u8 first_source[ETH_ALEN];
+ __u8 first_orig_dest[ETH_ALEN];
+ __be32 first_crc;
+ __u8 second_ttl;
+ __u8 second_ttvn;
+ __u8 second_dest[ETH_ALEN];
+ __u8 second_source[ETH_ALEN];
+ __u8 second_orig_dest[ETH_ALEN];
+ __be32 second_crc;
+ __be16 coded_len;
+};
+struct batadv_unicast_tvlv_packet {
+ __u8 packet_type;
+ __u8 version;
+ __u8 ttl;
+ __u8 reserved;
+ __u8 dst[ETH_ALEN];
+ __u8 src[ETH_ALEN];
+ __be16 tvlv_len;
+ __u16 align;
+};
+struct batadv_tvlv_hdr {
+ __u8 type;
+ __u8 version;
+ __be16 len;
+};
+struct batadv_tvlv_gateway_data {
+ __be32 bandwidth_down;
+ __be32 bandwidth_up;
+};
+struct batadv_tvlv_tt_data {
+ __u8 flags;
+ __u8 ttvn;
+ __be16 num_vlan;
+};
+struct batadv_tvlv_tt_vlan_data {
+ __be32 crc;
+ __be16 vid;
+ __u16 reserved;
+};
+struct batadv_tvlv_tt_change {
+ __u8 flags;
+ __u8 reserved[3];
+ __u8 addr[ETH_ALEN];
+ __be16 vid;
+};
+struct batadv_tvlv_roam_adv {
+ __u8 client[ETH_ALEN];
+ __be16 vid;
+};
+struct batadv_tvlv_mcast_data {
+ __u8 flags;
+ __u8 reserved[3];
+};
+#pragma pack()
+#endif
diff --git a/libc/kernel/uapi/linux/batman_adv.h b/libc/kernel/uapi/linux/batman_adv.h
index 65568f9..efec2bb 100644
--- a/libc/kernel/uapi/linux/batman_adv.h
+++ b/libc/kernel/uapi/linux/batman_adv.h
@@ -30,6 +30,13 @@
BATADV_TT_CLIENT_PENDING = (1 << 10),
BATADV_TT_CLIENT_TEMP = (1 << 11),
};
+enum batadv_mcast_flags_priv {
+ BATADV_MCAST_FLAGS_BRIDGED = (1 << 0),
+ BATADV_MCAST_FLAGS_QUERIER_IPV4_EXISTS = (1 << 1),
+ BATADV_MCAST_FLAGS_QUERIER_IPV6_EXISTS = (1 << 2),
+ BATADV_MCAST_FLAGS_QUERIER_IPV4_SHADOWING = (1 << 3),
+ BATADV_MCAST_FLAGS_QUERIER_IPV6_SHADOWING = (1 << 4),
+};
enum batadv_nl_attrs {
BATADV_ATTR_UNSPEC,
BATADV_ATTR_VERSION,
@@ -66,6 +73,11 @@
BATADV_ATTR_BLA_VID,
BATADV_ATTR_BLA_BACKBONE,
BATADV_ATTR_BLA_CRC,
+ BATADV_ATTR_DAT_CACHE_IP4ADDRESS,
+ BATADV_ATTR_DAT_CACHE_HWADDRESS,
+ BATADV_ATTR_DAT_CACHE_VID,
+ BATADV_ATTR_MCAST_FLAGS,
+ BATADV_ATTR_MCAST_FLAGS_PRIV,
__BATADV_ATTR_AFTER_LAST,
NUM_BATADV_ATTR = __BATADV_ATTR_AFTER_LAST,
BATADV_ATTR_MAX = __BATADV_ATTR_AFTER_LAST - 1
@@ -84,6 +96,8 @@
BATADV_CMD_GET_GATEWAYS,
BATADV_CMD_GET_BLA_CLAIM,
BATADV_CMD_GET_BLA_BACKBONE,
+ BATADV_CMD_GET_DAT_CACHE,
+ BATADV_CMD_GET_MCAST_FLAGS,
__BATADV_CMD_AFTER_LAST,
BATADV_CMD_MAX = __BATADV_CMD_AFTER_LAST - 1
};
diff --git a/libc/kernel/uapi/linux/bpf.h b/libc/kernel/uapi/linux/bpf.h
index 9ac0729..0eb0d45 100644
--- a/libc/kernel/uapi/linux/bpf.h
+++ b/libc/kernel/uapi/linux/bpf.h
@@ -83,6 +83,7 @@
BPF_MAP_GET_FD_BY_ID,
BPF_OBJ_GET_INFO_BY_FD,
BPF_PROG_QUERY,
+ BPF_RAW_TRACEPOINT_OPEN,
};
enum bpf_map_type {
BPF_MAP_TYPE_UNSPEC,
@@ -120,6 +121,9 @@
BPF_PROG_TYPE_SOCK_OPS,
BPF_PROG_TYPE_SK_SKB,
BPF_PROG_TYPE_CGROUP_DEVICE,
+ BPF_PROG_TYPE_SK_MSG,
+ BPF_PROG_TYPE_RAW_TRACEPOINT,
+ BPF_PROG_TYPE_CGROUP_SOCK_ADDR,
};
enum bpf_attach_type {
BPF_CGROUP_INET_INGRESS,
@@ -129,6 +133,13 @@
BPF_SK_SKB_STREAM_PARSER,
BPF_SK_SKB_STREAM_VERDICT,
BPF_CGROUP_DEVICE,
+ BPF_SK_MSG_VERDICT,
+ BPF_CGROUP_INET4_BIND,
+ BPF_CGROUP_INET6_BIND,
+ BPF_CGROUP_INET4_CONNECT,
+ BPF_CGROUP_INET6_CONNECT,
+ BPF_CGROUP_INET4_POST_BIND,
+ BPF_CGROUP_INET6_POST_BIND,
__MAX_BPF_ATTACH_TYPE
};
#define MAX_BPF_ATTACH_TYPE __MAX_BPF_ATTACH_TYPE
@@ -136,6 +147,7 @@
#define BPF_F_ALLOW_MULTI (1U << 1)
#define BPF_F_STRICT_ALIGNMENT (1U << 0)
#define BPF_PSEUDO_MAP_FD 1
+#define BPF_PSEUDO_CALL 1
#define BPF_ANY 0
#define BPF_NOEXIST 1
#define BPF_EXIST 2
@@ -146,6 +158,21 @@
#define BPF_OBJ_NAME_LEN 16U
#define BPF_F_RDONLY (1U << 3)
#define BPF_F_WRONLY (1U << 4)
+#define BPF_F_STACK_BUILD_ID (1U << 5)
+enum bpf_stack_build_id_status {
+ BPF_STACK_BUILD_ID_EMPTY = 0,
+ BPF_STACK_BUILD_ID_VALID = 1,
+ BPF_STACK_BUILD_ID_IP = 2,
+};
+#define BPF_BUILD_ID_SIZE 20
+struct bpf_stack_build_id {
+ __s32 status;
+ unsigned char build_id[BPF_BUILD_ID_SIZE];
+ union {
+ __u64 offset;
+ __u64 ip;
+ };
+};
union bpf_attr {
struct {
__u32 map_type;
@@ -156,6 +183,7 @@
__u32 inner_map_fd;
__u32 numa_node;
char map_name[BPF_OBJ_NAME_LEN];
+ __u32 map_ifindex;
};
struct {
__u32 map_fd;
@@ -178,6 +206,7 @@
__u32 prog_flags;
char prog_name[BPF_OBJ_NAME_LEN];
__u32 prog_ifindex;
+ __u32 expected_attach_type;
};
struct {
__aligned_u64 pathname;
@@ -222,8 +251,12 @@
__aligned_u64 prog_ids;
__u32 prog_cnt;
} query;
+ struct {
+ __u64 name;
+ __u32 prog_fd;
+ } raw_tracepoint;
} __attribute__((aligned(8)));
-#define __BPF_FUNC_MAPPER(FN) FN(unspec), FN(map_lookup_elem), FN(map_update_elem), FN(map_delete_elem), FN(probe_read), FN(ktime_get_ns), FN(trace_printk), FN(get_prandom_u32), FN(get_smp_processor_id), FN(skb_store_bytes), FN(l3_csum_replace), FN(l4_csum_replace), FN(tail_call), FN(clone_redirect), FN(get_current_pid_tgid), FN(get_current_uid_gid), FN(get_current_comm), FN(get_cgroup_classid), FN(skb_vlan_push), FN(skb_vlan_pop), FN(skb_get_tunnel_key), FN(skb_set_tunnel_key), FN(perf_event_read), FN(redirect), FN(get_route_realm), FN(perf_event_output), FN(skb_load_bytes), FN(get_stackid), FN(csum_diff), FN(skb_get_tunnel_opt), FN(skb_set_tunnel_opt), FN(skb_change_proto), FN(skb_change_type), FN(skb_under_cgroup), FN(get_hash_recalc), FN(get_current_task), FN(probe_write_user), FN(current_task_under_cgroup), FN(skb_change_tail), FN(skb_pull_data), FN(csum_update), FN(set_hash_invalid), FN(get_numa_node_id), FN(skb_change_head), FN(xdp_adjust_head), FN(probe_read_str), FN(get_socket_cookie), FN(get_socket_uid), FN(set_hash), FN(setsockopt), FN(skb_adjust_room), FN(redirect_map), FN(sk_redirect_map), FN(sock_map_update), FN(xdp_adjust_meta), FN(perf_event_read_value), FN(perf_prog_read_value), FN(getsockopt),
+#define __BPF_FUNC_MAPPER(FN) FN(unspec), FN(map_lookup_elem), FN(map_update_elem), FN(map_delete_elem), FN(probe_read), FN(ktime_get_ns), FN(trace_printk), FN(get_prandom_u32), FN(get_smp_processor_id), FN(skb_store_bytes), FN(l3_csum_replace), FN(l4_csum_replace), FN(tail_call), FN(clone_redirect), FN(get_current_pid_tgid), FN(get_current_uid_gid), FN(get_current_comm), FN(get_cgroup_classid), FN(skb_vlan_push), FN(skb_vlan_pop), FN(skb_get_tunnel_key), FN(skb_set_tunnel_key), FN(perf_event_read), FN(redirect), FN(get_route_realm), FN(perf_event_output), FN(skb_load_bytes), FN(get_stackid), FN(csum_diff), FN(skb_get_tunnel_opt), FN(skb_set_tunnel_opt), FN(skb_change_proto), FN(skb_change_type), FN(skb_under_cgroup), FN(get_hash_recalc), FN(get_current_task), FN(probe_write_user), FN(current_task_under_cgroup), FN(skb_change_tail), FN(skb_pull_data), FN(csum_update), FN(set_hash_invalid), FN(get_numa_node_id), FN(skb_change_head), FN(xdp_adjust_head), FN(probe_read_str), FN(get_socket_cookie), FN(get_socket_uid), FN(set_hash), FN(setsockopt), FN(skb_adjust_room), FN(redirect_map), FN(sk_redirect_map), FN(sock_map_update), FN(xdp_adjust_meta), FN(perf_event_read_value), FN(perf_prog_read_value), FN(getsockopt), FN(override_return), FN(sock_ops_cb_flags_set), FN(msg_redirect_map), FN(msg_apply_bytes), FN(msg_cork_bytes), FN(msg_pull_data), FN(bind),
#define __BPF_ENUM_FN(x) BPF_FUNC_ ##x
enum bpf_func_id {
__BPF_FUNC_MAPPER(__BPF_ENUM_FN) __BPF_FUNC_MAX_ID,
@@ -243,6 +276,7 @@
#define BPF_F_REUSE_STACKID (1ULL << 10)
#define BPF_F_ZERO_CSUM_TX (1ULL << 1)
#define BPF_F_DONT_FRAGMENT (1ULL << 2)
+#define BPF_F_SEQ_NUMBER (1ULL << 3)
#define BPF_F_INDEX_MASK 0xffffffffULL
#define BPF_F_CURRENT_CPU BPF_F_INDEX_MASK
#define BPF_F_CTXLEN_MASK (0xfffffULL << 32)
@@ -300,6 +334,9 @@
__u32 protocol;
__u32 mark;
__u32 priority;
+ __u32 src_ip4;
+ __u32 src_ip6[4];
+ __u32 src_port;
};
#define XDP_PACKET_HEADROOM 256
enum xdp_action {
@@ -313,11 +350,17 @@
__u32 data;
__u32 data_end;
__u32 data_meta;
+ __u32 ingress_ifindex;
+ __u32 rx_queue_index;
};
enum sk_action {
SK_DROP = 0,
SK_PASS,
};
+struct sk_msg_md {
+ void * data;
+ void * data_end;
+};
#define BPF_TAG_SIZE 8
struct bpf_prog_info {
__u32 type;
@@ -332,6 +375,10 @@
__u32 nr_map_ids;
__aligned_u64 map_ids;
char name[BPF_OBJ_NAME_LEN];
+ __u32 ifindex;
+ __u32 : 32;
+ __u64 netns_dev;
+ __u64 netns_ino;
} __attribute__((aligned(8)));
struct bpf_map_info {
__u32 type;
@@ -341,10 +388,24 @@
__u32 max_entries;
__u32 map_flags;
char name[BPF_OBJ_NAME_LEN];
+ __u32 ifindex;
+ __u32 : 32;
+ __u64 netns_dev;
+ __u64 netns_ino;
} __attribute__((aligned(8)));
+struct bpf_sock_addr {
+ __u32 user_family;
+ __u32 user_ip4;
+ __u32 user_ip6[4];
+ __u32 user_port;
+ __u32 family;
+ __u32 type;
+ __u32 protocol;
+};
struct bpf_sock_ops {
__u32 op;
union {
+ __u32 args[4];
__u32 reply;
__u32 replylong[4];
};
@@ -355,7 +416,37 @@
__u32 local_ip6[4];
__u32 remote_port;
__u32 local_port;
+ __u32 is_fullsock;
+ __u32 snd_cwnd;
+ __u32 srtt_us;
+ __u32 bpf_sock_ops_cb_flags;
+ __u32 state;
+ __u32 rtt_min;
+ __u32 snd_ssthresh;
+ __u32 rcv_nxt;
+ __u32 snd_nxt;
+ __u32 snd_una;
+ __u32 mss_cache;
+ __u32 ecn_flags;
+ __u32 rate_delivered;
+ __u32 rate_interval_us;
+ __u32 packets_out;
+ __u32 retrans_out;
+ __u32 total_retrans;
+ __u32 segs_in;
+ __u32 data_segs_in;
+ __u32 segs_out;
+ __u32 data_segs_out;
+ __u32 lost_out;
+ __u32 sacked_out;
+ __u32 sk_txhash;
+ __u64 bytes_received;
+ __u64 bytes_acked;
};
+#define BPF_SOCK_OPS_RTO_CB_FLAG (1 << 0)
+#define BPF_SOCK_OPS_RETRANS_CB_FLAG (1 << 1)
+#define BPF_SOCK_OPS_STATE_CB_FLAG (1 << 2)
+#define BPF_SOCK_OPS_ALL_CB_FLAGS 0x7
enum {
BPF_SOCK_OPS_VOID,
BPF_SOCK_OPS_TIMEOUT_INIT,
@@ -365,6 +456,24 @@
BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB,
BPF_SOCK_OPS_NEEDS_ECN,
BPF_SOCK_OPS_BASE_RTT,
+ BPF_SOCK_OPS_RTO_CB,
+ BPF_SOCK_OPS_RETRANS_CB,
+ BPF_SOCK_OPS_STATE_CB,
+};
+enum {
+ BPF_TCP_ESTABLISHED = 1,
+ BPF_TCP_SYN_SENT,
+ BPF_TCP_SYN_RECV,
+ BPF_TCP_FIN_WAIT1,
+ BPF_TCP_FIN_WAIT2,
+ BPF_TCP_TIME_WAIT,
+ BPF_TCP_CLOSE,
+ BPF_TCP_CLOSE_WAIT,
+ BPF_TCP_LAST_ACK,
+ BPF_TCP_LISTEN,
+ BPF_TCP_CLOSING,
+ BPF_TCP_NEW_SYN_RECV,
+ BPF_TCP_MAX_STATES
};
#define TCP_BPF_IW 1001
#define TCP_BPF_SNDCWND_CLAMP 1002
@@ -383,4 +492,7 @@
__u32 major;
__u32 minor;
};
+struct bpf_raw_tracepoint_args {
+ __u64 args[0];
+};
#endif
diff --git a/libc/kernel/uapi/linux/bpf_perf_event.h b/libc/kernel/uapi/linux/bpf_perf_event.h
index 7a8d212..190b916 100644
--- a/libc/kernel/uapi/linux/bpf_perf_event.h
+++ b/libc/kernel/uapi/linux/bpf_perf_event.h
@@ -22,5 +22,6 @@
struct bpf_perf_event_data {
bpf_user_pt_regs_t regs;
__u64 sample_period;
+ __u64 addr;
};
#endif
diff --git a/libc/kernel/uapi/linux/btrfs.h b/libc/kernel/uapi/linux/btrfs.h
index aa7c105..a162bb0 100644
--- a/libc/kernel/uapi/linux/btrfs.h
+++ b/libc/kernel/uapi/linux/btrfs.h
@@ -29,6 +29,10 @@
char name[BTRFS_PATH_NAME_MAX + 1];
};
#define BTRFS_DEVICE_PATH_NAME_MAX 1024
+#define BTRFS_SUBVOL_NAME_MAX 4039
+#define BTRFS_SUBVOL_CREATE_ASYNC (1ULL << 0)
+#define BTRFS_SUBVOL_RDONLY (1ULL << 1)
+#define BTRFS_SUBVOL_QGROUP_INHERIT (1ULL << 2)
#define BTRFS_DEVICE_SPEC_BY_ID (1ULL << 3)
#define BTRFS_VOL_ARG_V2_FLAGS_SUPPORTED (BTRFS_SUBVOL_CREATE_ASYNC | BTRFS_SUBVOL_RDONLY | BTRFS_SUBVOL_QGROUP_INHERIT | BTRFS_DEVICE_SPEC_BY_ID)
#define BTRFS_FSID_SIZE 16
@@ -60,10 +64,6 @@
__u64 qgroupid;
struct btrfs_qgroup_limit lim;
};
-#define BTRFS_SUBVOL_CREATE_ASYNC (1ULL << 0)
-#define BTRFS_SUBVOL_RDONLY (1ULL << 1)
-#define BTRFS_SUBVOL_QGROUP_INHERIT (1ULL << 2)
-#define BTRFS_SUBVOL_NAME_MAX 4039
struct btrfs_ioctl_vol_args_v2 {
__s64 fd;
__u64 transid;
diff --git a/libc/kernel/uapi/linux/btrfs_tree.h b/libc/kernel/uapi/linux/btrfs_tree.h
index c2fbd40..6a461ec 100644
--- a/libc/kernel/uapi/linux/btrfs_tree.h
+++ b/libc/kernel/uapi/linux/btrfs_tree.h
@@ -164,6 +164,8 @@
#define BTRFS_SUPER_FLAG_ERROR (1ULL << 2)
#define BTRFS_SUPER_FLAG_SEEDING (1ULL << 32)
#define BTRFS_SUPER_FLAG_METADUMP (1ULL << 33)
+#define BTRFS_SUPER_FLAG_METADUMP_V2 (1ULL << 34)
+#define BTRFS_SUPER_FLAG_CHANGING_FSID (1ULL << 35)
struct btrfs_extent_item {
__le64 refs;
__le64 generation;
diff --git a/libc/kernel/uapi/linux/can/netlink.h b/libc/kernel/uapi/linux/can/netlink.h
index 7df626d..ddf9058 100644
--- a/libc/kernel/uapi/linux/can/netlink.h
+++ b/libc/kernel/uapi/linux/can/netlink.h
@@ -92,6 +92,7 @@
IFLA_CAN_TERMINATION_CONST,
IFLA_CAN_BITRATE_CONST,
IFLA_CAN_DATA_BITRATE_CONST,
+ IFLA_CAN_BITRATE_MAX,
__IFLA_CAN_MAX
};
#define IFLA_CAN_MAX (__IFLA_CAN_MAX - 1)
diff --git a/libc/kernel/uapi/linux/const.h b/libc/kernel/uapi/linux/const.h
index 82b8bcd..6a4c1f7 100644
--- a/libc/kernel/uapi/linux/const.h
+++ b/libc/kernel/uapi/linux/const.h
@@ -16,8 +16,8 @@
***
****************************************************************************
****************************************************************************/
-#ifndef _LINUX_CONST_H
-#define _LINUX_CONST_H
+#ifndef _UAPI_LINUX_CONST_H
+#define _UAPI_LINUX_CONST_H
#ifdef __ASSEMBLY__
#define _AC(X,Y) X
#define _AT(T,X) X
@@ -26,6 +26,8 @@
#define _AC(X,Y) __AC(X, Y)
#define _AT(T,X) ((T) (X))
#endif
-#define _BITUL(x) (_AC(1, UL) << (x))
-#define _BITULL(x) (_AC(1, ULL) << (x))
+#define _UL(x) (_AC(x, UL))
+#define _ULL(x) (_AC(x, ULL))
+#define _BITUL(x) (_UL(1) << (x))
+#define _BITULL(x) (_ULL(1) << (x))
#endif
diff --git a/libc/kernel/uapi/linux/devlink.h b/libc/kernel/uapi/linux/devlink.h
index 1d5c43c..07c5752 100644
--- a/libc/kernel/uapi/linux/devlink.h
+++ b/libc/kernel/uapi/linux/devlink.h
@@ -59,6 +59,9 @@
DEVLINK_CMD_DPIPE_ENTRIES_GET,
DEVLINK_CMD_DPIPE_HEADERS_GET,
DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET,
+ DEVLINK_CMD_RESOURCE_SET,
+ DEVLINK_CMD_RESOURCE_DUMP,
+ DEVLINK_CMD_RELOAD,
__DEVLINK_CMD_MAX,
DEVLINK_CMD_MAX = __DEVLINK_CMD_MAX - 1
};
@@ -155,6 +158,20 @@
DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE,
DEVLINK_ATTR_PAD,
DEVLINK_ATTR_ESWITCH_ENCAP_MODE,
+ DEVLINK_ATTR_RESOURCE_LIST,
+ DEVLINK_ATTR_RESOURCE,
+ DEVLINK_ATTR_RESOURCE_NAME,
+ DEVLINK_ATTR_RESOURCE_ID,
+ DEVLINK_ATTR_RESOURCE_SIZE,
+ DEVLINK_ATTR_RESOURCE_SIZE_NEW,
+ DEVLINK_ATTR_RESOURCE_SIZE_VALID,
+ DEVLINK_ATTR_RESOURCE_SIZE_MIN,
+ DEVLINK_ATTR_RESOURCE_SIZE_MAX,
+ DEVLINK_ATTR_RESOURCE_SIZE_GRAN,
+ DEVLINK_ATTR_RESOURCE_UNIT,
+ DEVLINK_ATTR_RESOURCE_OCC,
+ DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID,
+ DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS,
__DEVLINK_ATTR_MAX,
DEVLINK_ATTR_MAX = __DEVLINK_ATTR_MAX - 1
};
@@ -182,4 +199,7 @@
DEVLINK_DPIPE_HEADER_IPV4,
DEVLINK_DPIPE_HEADER_IPV6,
};
+enum devlink_resource_unit {
+ DEVLINK_RESOURCE_UNIT_ENTRY,
+};
#endif
diff --git a/libc/kernel/uapi/linux/dm-ioctl.h b/libc/kernel/uapi/linux/dm-ioctl.h
index cc340b5..05847a7 100644
--- a/libc/kernel/uapi/linux/dm-ioctl.h
+++ b/libc/kernel/uapi/linux/dm-ioctl.h
@@ -102,9 +102,9 @@
#define DM_TARGET_MSG _IOWR(DM_IOCTL, DM_TARGET_MSG_CMD, struct dm_ioctl)
#define DM_DEV_SET_GEOMETRY _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl)
#define DM_VERSION_MAJOR 4
-#define DM_VERSION_MINOR 37
+#define DM_VERSION_MINOR 39
#define DM_VERSION_PATCHLEVEL 0
-#define DM_VERSION_EXTRA "-ioctl(2017-09-20)"
+#define DM_VERSION_EXTRA "-ioctl(2018-04-03)"
#define DM_READONLY_FLAG (1 << 0)
#define DM_SUSPEND_FLAG (1 << 1)
#define DM_PERSISTENT_DEV_FLAG (1 << 3)
diff --git a/libc/kernel/uapi/linux/dvb/dmx.h b/libc/kernel/uapi/linux/dvb/dmx.h
index d4ea26e..e142e57 100644
--- a/libc/kernel/uapi/linux/dvb/dmx.h
+++ b/libc/kernel/uapi/linux/dvb/dmx.h
@@ -85,6 +85,30 @@
unsigned int base;
__u64 stc;
};
+enum dmx_buffer_flags {
+ DMX_BUFFER_FLAG_HAD_CRC32_DISCARD = 1 << 0,
+ DMX_BUFFER_FLAG_TEI = 1 << 1,
+ DMX_BUFFER_PKT_COUNTER_MISMATCH = 1 << 2,
+ DMX_BUFFER_FLAG_DISCONTINUITY_DETECTED = 1 << 3,
+ DMX_BUFFER_FLAG_DISCONTINUITY_INDICATOR = 1 << 4,
+};
+struct dmx_buffer {
+ __u32 index;
+ __u32 bytesused;
+ __u32 offset;
+ __u32 length;
+ __u32 flags;
+ __u32 count;
+};
+struct dmx_requestbuffers {
+ __u32 count;
+ __u32 size;
+};
+struct dmx_exportbuffer {
+ __u32 index;
+ __u32 flags;
+ __s32 fd;
+};
#define DMX_START _IO('o', 41)
#define DMX_STOP _IO('o', 42)
#define DMX_SET_FILTER _IOW('o', 43, struct dmx_sct_filter_params)
@@ -98,4 +122,9 @@
typedef enum dmx_input dmx_input_t;
typedef enum dmx_ts_pes dmx_pes_type_t;
typedef struct dmx_filter dmx_filter_t;
+#define DMX_REQBUFS _IOWR('o', 60, struct dmx_requestbuffers)
+#define DMX_QUERYBUF _IOWR('o', 61, struct dmx_buffer)
+#define DMX_EXPBUF _IOWR('o', 62, struct dmx_exportbuffer)
+#define DMX_QBUF _IOWR('o', 63, struct dmx_buffer)
+#define DMX_DQBUF _IOWR('o', 64, struct dmx_buffer)
#endif
diff --git a/libc/kernel/uapi/linux/dvb/frontend.h b/libc/kernel/uapi/linux/dvb/frontend.h
index c8a48c1..d060138 100644
--- a/libc/kernel/uapi/linux/dvb/frontend.h
+++ b/libc/kernel/uapi/linux/dvb/frontend.h
@@ -247,7 +247,8 @@
#define DTV_STAT_POST_TOTAL_BIT_COUNT 67
#define DTV_STAT_ERROR_BLOCK_COUNT 68
#define DTV_STAT_TOTAL_BLOCK_COUNT 69
-#define DTV_MAX_COMMAND DTV_STAT_TOTAL_BLOCK_COUNT
+#define DTV_SCRAMBLING_SEQUENCE_INDEX 70
+#define DTV_MAX_COMMAND DTV_SCRAMBLING_SEQUENCE_INDEX
enum fe_pilot {
PILOT_ON,
PILOT_OFF,
diff --git a/libc/kernel/uapi/linux/dvb/version.h b/libc/kernel/uapi/linux/dvb/version.h
index 35cbfb1..47c8c74 100644
--- a/libc/kernel/uapi/linux/dvb/version.h
+++ b/libc/kernel/uapi/linux/dvb/version.h
@@ -19,5 +19,5 @@
#ifndef _DVBVERSION_H_
#define _DVBVERSION_H_
#define DVB_API_VERSION 5
-#define DVB_API_VERSION_MINOR 10
+#define DVB_API_VERSION_MINOR 11
#endif
diff --git a/libc/kernel/uapi/linux/elf.h b/libc/kernel/uapi/linux/elf.h
index bf35f6c..195ef09 100644
--- a/libc/kernel/uapi/linux/elf.h
+++ b/libc/kernel/uapi/linux/elf.h
@@ -331,6 +331,7 @@
#define NT_PPC_TM_CTAR 0x10d
#define NT_PPC_TM_CPPR 0x10e
#define NT_PPC_TM_CDSCR 0x10f
+#define NT_PPC_PKEY 0x110
#define NT_386_TLS 0x200
#define NT_386_IOPERM 0x201
#define NT_X86_XSTATE 0x202
@@ -354,9 +355,6 @@
#define NT_ARM_HW_WATCH 0x403
#define NT_ARM_SYSTEM_CALL 0x404
#define NT_ARM_SVE 0x405
-#define NT_METAG_CBUF 0x500
-#define NT_METAG_RPIPE 0x501
-#define NT_METAG_TLS 0x502
#define NT_ARC_V2 0x600
typedef struct elf32_note {
Elf32_Word n_namesz;
diff --git a/libc/kernel/uapi/linux/erspan.h b/libc/kernel/uapi/linux/erspan.h
new file mode 100644
index 0000000..790a85e
--- /dev/null
+++ b/libc/kernel/uapi/linux/erspan.h
@@ -0,0 +1,43 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _UAPI_ERSPAN_H
+#define _UAPI_ERSPAN_H
+#include <linux/types.h>
+#include <asm/byteorder.h>
+struct erspan_md2 {
+ __be32 timestamp;
+ __be16 sgt;
+#ifdef __LITTLE_ENDIAN_BITFIELD
+ __u8 hwid_upper : 2, ft : 5, p : 1;
+ __u8 o : 1, gra : 2, dir : 1, hwid : 4;
+#elif defined(__BIG_ENDIAN_BITFIELD)
+ __u8 p : 1, ft : 5, hwid_upper : 2;
+ __u8 hwid : 4, dir : 1, gra : 2, o : 1;
+#else
+#error "Please fix <asm/byteorder.h>"
+#endif
+};
+struct erspan_metadata {
+ int version;
+ union {
+ __be32 index;
+ struct erspan_md2 md2;
+ } u;
+};
+#endif
diff --git a/libc/kernel/uapi/linux/ethtool.h b/libc/kernel/uapi/linux/ethtool.h
index 6f1c0f3..92607f9 100644
--- a/libc/kernel/uapi/linux/ethtool.h
+++ b/libc/kernel/uapi/linux/ethtool.h
@@ -71,10 +71,13 @@
__u32 cmd;
__u32 data;
};
+#define PFC_STORM_PREVENTION_AUTO 0xffff
+#define PFC_STORM_PREVENTION_DISABLE 0
enum tunable_id {
ETHTOOL_ID_UNSPEC,
ETHTOOL_RX_COPYBREAK,
ETHTOOL_TX_COPYBREAK,
+ ETHTOOL_PFC_PREVENTION_TOUT,
__ETHTOOL_TUNABLE_COUNT,
};
enum tunable_type_id {
@@ -332,6 +335,7 @@
__u32 rsvd32;
__u32 rss_config[0];
};
+#define ETH_RXFH_CONTEXT_ALLOC 0xffffffff
#define ETH_RXFH_INDIR_NO_CHANGE 0xffffffff
struct ethtool_rx_ntuple_flow_spec {
__u32 flow_type;
@@ -699,6 +703,7 @@
#define ETHER_FLOW 0x12
#define FLOW_EXT 0x80000000
#define FLOW_MAC_EXT 0x40000000
+#define FLOW_RSS 0x20000000
#define RXH_L2DA (1 << 1)
#define RXH_VLAN (1 << 2)
#define RXH_L3_PROTO (1 << 3)
@@ -729,6 +734,7 @@
ETH_RESET_MAC = 1 << 5,
ETH_RESET_PHY = 1 << 6,
ETH_RESET_RAM = 1 << 7,
+ ETH_RESET_AP = 1 << 8,
ETH_RESET_DEDICATED = 0x0000ffff,
ETH_RESET_ALL = 0xffffffff,
};
diff --git a/libc/kernel/uapi/linux/eventpoll.h b/libc/kernel/uapi/linux/eventpoll.h
index eec1077..2e5ba8e 100644
--- a/libc/kernel/uapi/linux/eventpoll.h
+++ b/libc/kernel/uapi/linux/eventpoll.h
@@ -25,21 +25,22 @@
#define EPOLL_CTL_ADD 1
#define EPOLL_CTL_DEL 2
#define EPOLL_CTL_MOD 3
-#define EPOLLIN 0x00000001
-#define EPOLLPRI 0x00000002
-#define EPOLLOUT 0x00000004
-#define EPOLLERR 0x00000008
-#define EPOLLHUP 0x00000010
-#define EPOLLRDNORM 0x00000040
-#define EPOLLRDBAND 0x00000080
-#define EPOLLWRNORM 0x00000100
-#define EPOLLWRBAND 0x00000200
-#define EPOLLMSG 0x00000400
-#define EPOLLRDHUP 0x00002000
-#define EPOLLEXCLUSIVE (1U << 28)
-#define EPOLLWAKEUP (1U << 29)
-#define EPOLLONESHOT (1U << 30)
-#define EPOLLET (1U << 31)
+#define EPOLLIN (__force __poll_t) 0x00000001
+#define EPOLLPRI (__force __poll_t) 0x00000002
+#define EPOLLOUT (__force __poll_t) 0x00000004
+#define EPOLLERR (__force __poll_t) 0x00000008
+#define EPOLLHUP (__force __poll_t) 0x00000010
+#define EPOLLNVAL (__force __poll_t) 0x00000020
+#define EPOLLRDNORM (__force __poll_t) 0x00000040
+#define EPOLLRDBAND (__force __poll_t) 0x00000080
+#define EPOLLWRNORM (__force __poll_t) 0x00000100
+#define EPOLLWRBAND (__force __poll_t) 0x00000200
+#define EPOLLMSG (__force __poll_t) 0x00000400
+#define EPOLLRDHUP (__force __poll_t) 0x00002000
+#define EPOLLEXCLUSIVE (__force __poll_t) (1U << 28)
+#define EPOLLWAKEUP (__force __poll_t) (1U << 29)
+#define EPOLLONESHOT (__force __poll_t) (1U << 30)
+#define EPOLLET (__force __poll_t) (1U << 31)
#ifdef __x86_64__
#define EPOLL_PACKED __attribute__((packed))
#else
diff --git a/libc/kernel/uapi/linux/fib_rules.h b/libc/kernel/uapi/linux/fib_rules.h
index 6b2a06f..733c1b1 100644
--- a/libc/kernel/uapi/linux/fib_rules.h
+++ b/libc/kernel/uapi/linux/fib_rules.h
@@ -42,6 +42,10 @@
__u32 start;
__u32 end;
};
+struct fib_rule_port_range {
+ __u16 start;
+ __u16 end;
+};
enum {
FRA_UNSPEC,
FRA_DST,
@@ -65,6 +69,10 @@
FRA_PAD,
FRA_L3MDEV,
FRA_UID_RANGE,
+ FRA_PROTOCOL,
+ FRA_IP_PROTO,
+ FRA_SPORT_RANGE,
+ FRA_DPORT_RANGE,
__FRA_MAX
};
#define FRA_MAX (__FRA_MAX - 1)
diff --git a/libc/kernel/uapi/linux/fs.h b/libc/kernel/uapi/linux/fs.h
index f4e74cd..77c45c8 100644
--- a/libc/kernel/uapi/linux/fs.h
+++ b/libc/kernel/uapi/linux/fs.h
@@ -250,5 +250,6 @@
#define RWF_DSYNC ((__force __kernel_rwf_t) 0x00000002)
#define RWF_SYNC ((__force __kernel_rwf_t) 0x00000004)
#define RWF_NOWAIT ((__force __kernel_rwf_t) 0x00000008)
-#define RWF_SUPPORTED (RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT)
+#define RWF_APPEND ((__force __kernel_rwf_t) 0x00000010)
+#define RWF_SUPPORTED (RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT | RWF_APPEND)
#endif
diff --git a/libc/kernel/uapi/linux/gfs2_ondisk.h b/libc/kernel/uapi/linux/gfs2_ondisk.h
index 60a6a26..7d03ba5 100644
--- a/libc/kernel/uapi/linux/gfs2_ondisk.h
+++ b/libc/kernel/uapi/linux/gfs2_ondisk.h
@@ -131,9 +131,16 @@
__be32 rg_flags;
__be32 rg_free;
__be32 rg_dinodes;
- __be32 __pad;
+ union {
+ __be32 __pad;
+ __be32 rg_skip;
+ };
__be64 rg_igeneration;
- __u8 rg_reserved[80];
+ __be64 rg_data0;
+ __be32 rg_data;
+ __be32 rg_bitbytes;
+ __be32 rg_crc;
+ __u8 rg_reserved[60];
};
struct gfs2_quota {
__be64 qu_limit;
@@ -261,6 +268,32 @@
__u32 __pad;
};
#define GFS2_LOG_HEAD_UNMOUNT 0x00000001
+#define GFS2_LOG_HEAD_FLUSH_NORMAL 0x00000002
+#define GFS2_LOG_HEAD_FLUSH_SYNC 0x00000004
+#define GFS2_LOG_HEAD_FLUSH_SHUTDOWN 0x00000008
+#define GFS2_LOG_HEAD_FLUSH_FREEZE 0x00000010
+#define GFS2_LOG_HEAD_RECOVERY 0x00000020
+#define GFS2_LOG_HEAD_USERSPACE 0x80000000
+#define GFS2_LFC_SHUTDOWN 0x00000100
+#define GFS2_LFC_JDATA_WPAGES 0x00000200
+#define GFS2_LFC_SET_FLAGS 0x00000400
+#define GFS2_LFC_AIL_EMPTY_GL 0x00000800
+#define GFS2_LFC_AIL_FLUSH 0x00001000
+#define GFS2_LFC_RGRP_GO_SYNC 0x00002000
+#define GFS2_LFC_INODE_GO_SYNC 0x00004000
+#define GFS2_LFC_INODE_GO_INVAL 0x00008000
+#define GFS2_LFC_FREEZE_GO_SYNC 0x00010000
+#define GFS2_LFC_KILL_SB 0x00020000
+#define GFS2_LFC_DO_SYNC 0x00040000
+#define GFS2_LFC_INPLACE_RESERVE 0x00080000
+#define GFS2_LFC_WRITE_INODE 0x00100000
+#define GFS2_LFC_MAKE_FS_RO 0x00200000
+#define GFS2_LFC_SYNC_FS 0x00400000
+#define GFS2_LFC_EVICT_INODE 0x00800000
+#define GFS2_LFC_TRANS_END 0x01000000
+#define GFS2_LFC_LOGD_JFLUSH_REQD 0x02000000
+#define GFS2_LFC_LOGD_AIL_FLUSH_REQD 0x04000000
+#define LH_V1_SIZE (offsetofend(struct gfs2_log_header, lh_hash))
struct gfs2_log_header {
struct gfs2_meta_header lh_header;
__be64 lh_sequence;
@@ -268,6 +301,16 @@
__be32 lh_tail;
__be32 lh_blkno;
__be32 lh_hash;
+ __be32 lh_crc;
+ __be32 lh_nsec;
+ __be64 lh_sec;
+ __be64 lh_addr;
+ __be64 lh_jinode;
+ __be64 lh_statfs_addr;
+ __be64 lh_quota_addr;
+ __be64 lh_local_total;
+ __be64 lh_local_free;
+ __be64 lh_local_dinodes;
};
#define GFS2_LOG_DESC_METADATA 300
#define GFS2_LOG_DESC_REVOKE 301
diff --git a/libc/kernel/uapi/linux/i2c.h b/libc/kernel/uapi/linux/i2c.h
index bb8f4f5..dc1e96a 100644
--- a/libc/kernel/uapi/linux/i2c.h
+++ b/libc/kernel/uapi/linux/i2c.h
@@ -24,6 +24,7 @@
__u16 flags;
#define I2C_M_RD 0x0001
#define I2C_M_TEN 0x0010
+#define I2C_M_DMA_SAFE 0x0200
#define I2C_M_RECV_LEN 0x0400
#define I2C_M_NO_RD_ACK 0x0800
#define I2C_M_IGNORE_NAK 0x1000
diff --git a/libc/kernel/uapi/linux/if_ether.h b/libc/kernel/uapi/linux/if_ether.h
index 04b6dae..4fb58f1 100644
--- a/libc/kernel/uapi/linux/if_ether.h
+++ b/libc/kernel/uapi/linux/if_ether.h
@@ -19,8 +19,8 @@
#ifndef _UAPI_LINUX_IF_ETHER_H
#define _UAPI_LINUX_IF_ETHER_H
#include <linux/types.h>
-#include <linux/libc-compat.h>
#define ETH_ALEN 6
+#define ETH_TLEN 2
#define ETH_HLEN 14
#define ETH_ZLEN 60
#define ETH_DATA_LEN 1500
@@ -32,6 +32,7 @@
#define ETH_P_PUP 0x0200
#define ETH_P_PUPAT 0x0201
#define ETH_P_TSN 0x22F0
+#define ETH_P_ERSPAN2 0x22EB
#define ETH_P_IP 0x0800
#define ETH_P_X25 0x0805
#define ETH_P_ARP 0x0806
@@ -69,6 +70,7 @@
#define ETH_P_AOE 0x88A2
#define ETH_P_8021AD 0x88A8
#define ETH_P_802_EX1 0x88B5
+#define ETH_P_PREAUTH 0x88C7
#define ETH_P_TIPC 0x88CA
#define ETH_P_MACSEC 0x88E5
#define ETH_P_8021AH 0x88E7
@@ -117,6 +119,9 @@
#define ETH_P_CAIF 0x00F7
#define ETH_P_XDSA 0x00F8
#define ETH_P_MAP 0x00F9
+#ifndef __UAPI_DEF_ETHHDR
+#define __UAPI_DEF_ETHHDR 1
+#endif
#if __UAPI_DEF_ETHHDR
struct ethhdr {
unsigned char h_dest[ETH_ALEN];
diff --git a/libc/kernel/uapi/linux/if_link.h b/libc/kernel/uapi/linux/if_link.h
index a43eaf7..8a9993b 100644
--- a/libc/kernel/uapi/linux/if_link.h
+++ b/libc/kernel/uapi/linux/if_link.h
@@ -138,6 +138,9 @@
IFLA_EVENT,
IFLA_NEW_NETNSID,
IFLA_IF_NETNSID,
+ IFLA_CARRIER_UP_COUNT,
+ IFLA_CARRIER_DOWN_COUNT,
+ IFLA_NEW_IFINDEX,
__IFLA_MAX
};
#define IFLA_MAX (__IFLA_MAX - 1)
@@ -590,6 +593,8 @@
IFLA_VF_STATS_BROADCAST,
IFLA_VF_STATS_MULTICAST,
IFLA_VF_STATS_PAD,
+ IFLA_VF_STATS_RX_DROPPED,
+ IFLA_VF_STATS_TX_DROPPED,
__IFLA_VF_STATS_MAX,
};
#define IFLA_VF_STATS_MAX (__IFLA_VF_STATS_MAX - 1)
@@ -728,4 +733,33 @@
IFLA_EVENT_IGMP_RESEND,
IFLA_EVENT_BONDING_OPTIONS,
};
+enum {
+ IFLA_TUN_UNSPEC,
+ IFLA_TUN_OWNER,
+ IFLA_TUN_GROUP,
+ IFLA_TUN_TYPE,
+ IFLA_TUN_PI,
+ IFLA_TUN_VNET_HDR,
+ IFLA_TUN_PERSIST,
+ IFLA_TUN_MULTI_QUEUE,
+ IFLA_TUN_NUM_QUEUES,
+ IFLA_TUN_NUM_DISABLED_QUEUES,
+ __IFLA_TUN_MAX,
+};
+#define IFLA_TUN_MAX (__IFLA_TUN_MAX - 1)
+#define RMNET_FLAGS_INGRESS_DEAGGREGATION (1U << 0)
+#define RMNET_FLAGS_INGRESS_MAP_COMMANDS (1U << 1)
+#define RMNET_FLAGS_INGRESS_MAP_CKSUMV4 (1U << 2)
+#define RMNET_FLAGS_EGRESS_MAP_CKSUMV4 (1U << 3)
+enum {
+ IFLA_RMNET_UNSPEC,
+ IFLA_RMNET_MUX_ID,
+ IFLA_RMNET_FLAGS,
+ __IFLA_RMNET_MAX,
+};
+#define IFLA_RMNET_MAX (__IFLA_RMNET_MAX - 1)
+struct ifla_rmnet_flags {
+ __u32 flags;
+ __u32 mask;
+};
#endif
diff --git a/libc/kernel/uapi/linux/if_macsec.h b/libc/kernel/uapi/linux/if_macsec.h
index 0031f7d..a58f531 100644
--- a/libc/kernel/uapi/linux/if_macsec.h
+++ b/libc/kernel/uapi/linux/if_macsec.h
@@ -23,8 +23,10 @@
#define MACSEC_GENL_VERSION 1
#define MACSEC_MAX_KEY_LEN 128
#define MACSEC_KEYID_LEN 16
+#define MACSEC_CIPHER_ID_GCM_AES_128 0x0080C20001000001ULL
+#define MACSEC_CIPHER_ID_GCM_AES_256 0x0080C20001000002ULL
#define MACSEC_DEFAULT_CIPHER_ID 0x0080020001000001ULL
-#define MACSEC_DEFAULT_CIPHER_ALT 0x0080C20001000001ULL
+#define MACSEC_DEFAULT_CIPHER_ALT MACSEC_CIPHER_ID_GCM_AES_128
#define MACSEC_MIN_ICV_LEN 8
#define MACSEC_MAX_ICV_LEN 32
#define MACSEC_STD_ICV_LEN 16
diff --git a/libc/kernel/uapi/linux/if_tun.h b/libc/kernel/uapi/linux/if_tun.h
index d8757a1..6a3c75e 100644
--- a/libc/kernel/uapi/linux/if_tun.h
+++ b/libc/kernel/uapi/linux/if_tun.h
@@ -49,6 +49,8 @@
#define TUNGETVNETLE _IOR('T', 221, int)
#define TUNSETVNETBE _IOW('T', 222, int)
#define TUNGETVNETBE _IOR('T', 223, int)
+#define TUNSETSTEERINGEBPF _IOR('T', 224, int)
+#define TUNSETFILTEREBPF _IOR('T', 225, int)
#define IFF_TUN 0x0001
#define IFF_TAP 0x0002
#define IFF_NAPI 0x0010
diff --git a/libc/kernel/uapi/linux/if_tunnel.h b/libc/kernel/uapi/linux/if_tunnel.h
index 8edc956..d41dc49 100644
--- a/libc/kernel/uapi/linux/if_tunnel.h
+++ b/libc/kernel/uapi/linux/if_tunnel.h
@@ -136,6 +136,9 @@
IFLA_GRE_IGNORE_DF,
IFLA_GRE_FWMARK,
IFLA_GRE_ERSPAN_INDEX,
+ IFLA_GRE_ERSPAN_VER,
+ IFLA_GRE_ERSPAN_DIR,
+ IFLA_GRE_ERSPAN_HWID,
__IFLA_GRE_MAX,
};
#define IFLA_GRE_MAX (__IFLA_GRE_MAX - 1)
diff --git a/libc/kernel/uapi/linux/inet_diag.h b/libc/kernel/uapi/linux/inet_diag.h
index 47a3b34..eb9b712 100644
--- a/libc/kernel/uapi/linux/inet_diag.h
+++ b/libc/kernel/uapi/linux/inet_diag.h
@@ -78,6 +78,8 @@
INET_DIAG_BC_D_COND,
INET_DIAG_BC_DEV_COND,
INET_DIAG_BC_MARK_COND,
+ INET_DIAG_BC_S_EQ,
+ INET_DIAG_BC_D_EQ,
};
struct inet_diag_hostcond {
__u8 family;
diff --git a/libc/kernel/uapi/linux/inotify.h b/libc/kernel/uapi/linux/inotify.h
index 0736bd7..653dc07 100644
--- a/libc/kernel/uapi/linux/inotify.h
+++ b/libc/kernel/uapi/linux/inotify.h
@@ -53,4 +53,5 @@
#define IN_ALL_EVENTS (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE | IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM | IN_MOVED_TO | IN_DELETE | IN_CREATE | IN_DELETE_SELF | IN_MOVE_SELF)
#define IN_CLOEXEC O_CLOEXEC
#define IN_NONBLOCK O_NONBLOCK
+#define INOTIFY_IOC_SETNEXTWD _IOW('I', 0, __s32)
#endif
diff --git a/libc/kernel/uapi/linux/input-event-codes.h b/libc/kernel/uapi/linux/input-event-codes.h
index da90f1c..d8ae4c8 100644
--- a/libc/kernel/uapi/linux/input-event-codes.h
+++ b/libc/kernel/uapi/linux/input-event-codes.h
@@ -532,6 +532,7 @@
#define BTN_DPAD_LEFT 0x222
#define BTN_DPAD_RIGHT 0x223
#define KEY_ALS_TOGGLE 0x230
+#define KEY_ROTATE_LOCK_TOGGLE 0x231
#define KEY_BUTTONCONFIG 0x240
#define KEY_TASKMANAGER 0x241
#define KEY_JOURNAL 0x242
diff --git a/libc/kernel/uapi/linux/input.h b/libc/kernel/uapi/linux/input.h
index 9014059..298e2a3 100644
--- a/libc/kernel/uapi/linux/input.h
+++ b/libc/kernel/uapi/linux/input.h
@@ -24,7 +24,16 @@
#include <linux/types.h>
#include "input-event-codes.h"
struct input_event {
+#if (__BITS_PER_LONG != 32 || !defined(__USE_TIME_BITS64)) && !defined(__KERNEL)
struct timeval time;
+#define input_event_sec time.tv_sec
+#define input_event_usec time.tv_usec
+#else
+ __kernel_ulong_t __sec;
+ __kernel_ulong_t __usec;
+#define input_event_sec __sec
+#define input_event_usec __usec
+#endif
__u16 type;
__u16 code;
__s32 value;
diff --git a/libc/kernel/uapi/linux/ipmi_bmc.h b/libc/kernel/uapi/linux/ipmi_bmc.h
new file mode 100644
index 0000000..18f8b9d
--- /dev/null
+++ b/libc/kernel/uapi/linux/ipmi_bmc.h
@@ -0,0 +1,26 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _UAPI_LINUX_IPMI_BMC_H
+#define _UAPI_LINUX_IPMI_BMC_H
+#include <linux/ioctl.h>
+#define __IPMI_BMC_IOCTL_MAGIC 0xB1
+#define IPMI_BMC_IOCTL_SET_SMS_ATN _IO(__IPMI_BMC_IOCTL_MAGIC, 0x00)
+#define IPMI_BMC_IOCTL_CLEAR_SMS_ATN _IO(__IPMI_BMC_IOCTL_MAGIC, 0x01)
+#define IPMI_BMC_IOCTL_FORCE_ABORT _IO(__IPMI_BMC_IOCTL_MAGIC, 0x02)
+#endif
diff --git a/libc/kernel/uapi/linux/irda.h b/libc/kernel/uapi/linux/irda.h
deleted file mode 100644
index c2dffea..0000000
--- a/libc/kernel/uapi/linux/irda.h
+++ /dev/null
@@ -1,192 +0,0 @@
-/****************************************************************************
- ****************************************************************************
- ***
- *** This header was automatically generated from a Linux kernel header
- *** of the same name, to make information necessary for userspace to
- *** call into the kernel available to libc. It contains only constants,
- *** structures, and macros generated from the original header, and thus,
- *** contains no copyrightable information.
- ***
- *** To edit the content of this header, modify the corresponding
- *** source file (e.g. under external/kernel-headers/original/) then
- *** run bionic/libc/kernel/tools/update_all.py
- ***
- *** Any manual change here will be lost the next time this script will
- *** be run. You've been warned!
- ***
- ****************************************************************************
- ****************************************************************************/
-#ifndef KERNEL_IRDA_H
-#define KERNEL_IRDA_H
-#include <linux/types.h>
-#include <linux/socket.h>
-#define HINT_PNP 0x01
-#define HINT_PDA 0x02
-#define HINT_COMPUTER 0x04
-#define HINT_PRINTER 0x08
-#define HINT_MODEM 0x10
-#define HINT_FAX 0x20
-#define HINT_LAN 0x40
-#define HINT_EXTENSION 0x80
-#define HINT_TELEPHONY 0x01
-#define HINT_FILE_SERVER 0x02
-#define HINT_COMM 0x04
-#define HINT_MESSAGE 0x08
-#define HINT_HTTP 0x10
-#define HINT_OBEX 0x20
-#define CS_ASCII 0x00
-#define CS_ISO_8859_1 0x01
-#define CS_ISO_8859_2 0x02
-#define CS_ISO_8859_3 0x03
-#define CS_ISO_8859_4 0x04
-#define CS_ISO_8859_5 0x05
-#define CS_ISO_8859_6 0x06
-#define CS_ISO_8859_7 0x07
-#define CS_ISO_8859_8 0x08
-#define CS_ISO_8859_9 0x09
-#define CS_UNICODE 0xff
-typedef enum {
- IRDA_TEKRAM_DONGLE = 0,
- IRDA_ESI_DONGLE = 1,
- IRDA_ACTISYS_DONGLE = 2,
- IRDA_ACTISYS_PLUS_DONGLE = 3,
- IRDA_GIRBIL_DONGLE = 4,
- IRDA_LITELINK_DONGLE = 5,
- IRDA_AIRPORT_DONGLE = 6,
- IRDA_OLD_BELKIN_DONGLE = 7,
- IRDA_EP7211_IR = 8,
- IRDA_MCP2120_DONGLE = 9,
- IRDA_ACT200L_DONGLE = 10,
- IRDA_MA600_DONGLE = 11,
- IRDA_TOIM3232_DONGLE = 12,
- IRDA_EP7211_DONGLE = 13,
-} IRDA_DONGLE;
-enum {
- IRDAPROTO_UNITDATA = 0,
- IRDAPROTO_ULTRA = 1,
- IRDAPROTO_MAX
-};
-#define SOL_IRLMP 266
-#define SOL_IRTTP 266
-#define IRLMP_ENUMDEVICES 1
-#define IRLMP_IAS_SET 2
-#define IRLMP_IAS_QUERY 3
-#define IRLMP_HINTS_SET 4
-#define IRLMP_QOS_SET 5
-#define IRLMP_QOS_GET 6
-#define IRLMP_MAX_SDU_SIZE 7
-#define IRLMP_IAS_GET 8
-#define IRLMP_IAS_DEL 9
-#define IRLMP_HINT_MASK_SET 10
-#define IRLMP_WAITDEVICE 11
-#define IRTTP_MAX_SDU_SIZE IRLMP_MAX_SDU_SIZE
-#define IAS_MAX_STRING 256
-#define IAS_MAX_OCTET_STRING 1024
-#define IAS_MAX_CLASSNAME 60
-#define IAS_MAX_ATTRIBNAME 60
-#define IAS_MAX_ATTRIBNUMBER 256
-#define IAS_EXPORT_CLASSNAME 64
-#define IAS_EXPORT_ATTRIBNAME 256
-#define IAS_MISSING 0
-#define IAS_INTEGER 1
-#define IAS_OCT_SEQ 2
-#define IAS_STRING 3
-#define LSAP_ANY 0xff
-struct sockaddr_irda {
- __kernel_sa_family_t sir_family;
- __u8 sir_lsap_sel;
- __u32 sir_addr;
- char sir_name[25];
-};
-struct irda_device_info {
- __u32 saddr;
- __u32 daddr;
- char info[22];
- __u8 charset;
- __u8 hints[2];
-};
-struct irda_device_list {
- __u32 len;
- struct irda_device_info dev[1];
-};
-struct irda_ias_set {
- char irda_class_name[IAS_EXPORT_CLASSNAME];
- char irda_attrib_name[IAS_EXPORT_ATTRIBNAME];
- unsigned int irda_attrib_type;
- union {
- unsigned int irda_attrib_int;
- struct {
- unsigned short len;
- __u8 octet_seq[IAS_MAX_OCTET_STRING];
- } irda_attrib_octet_seq;
- struct {
- __u8 len;
- __u8 charset;
- __u8 string[IAS_MAX_STRING];
- } irda_attrib_string;
- } attribute;
- __u32 daddr;
-};
-#define SIOCSDONGLE (SIOCDEVPRIVATE + 0)
-#define SIOCGDONGLE (SIOCDEVPRIVATE + 1)
-#define SIOCSBANDWIDTH (SIOCDEVPRIVATE + 2)
-#define SIOCSMEDIABUSY (SIOCDEVPRIVATE + 3)
-#define SIOCGMEDIABUSY (SIOCDEVPRIVATE + 4)
-#define SIOCGRECEIVING (SIOCDEVPRIVATE + 5)
-#define SIOCSMODE (SIOCDEVPRIVATE + 6)
-#define SIOCGMODE (SIOCDEVPRIVATE + 7)
-#define SIOCSDTRRTS (SIOCDEVPRIVATE + 8)
-#define SIOCGQOS (SIOCDEVPRIVATE + 9)
-#define IRNAMSIZ 16
-struct if_irda_qos {
- unsigned long baudrate;
- unsigned short data_size;
- unsigned short window_size;
- unsigned short min_turn_time;
- unsigned short max_turn_time;
- unsigned char add_bofs;
- unsigned char link_disc;
-};
-struct if_irda_line {
- __u8 dtr;
- __u8 rts;
-};
-struct if_irda_req {
- union {
- char ifrn_name[IRNAMSIZ];
- } ifr_ifrn;
- union {
- struct if_irda_line ifru_line;
- struct if_irda_qos ifru_qos;
- unsigned short ifru_flags;
- unsigned int ifru_receiving;
- unsigned int ifru_mode;
- unsigned int ifru_dongle;
- } ifr_ifru;
-};
-#define ifr_baudrate ifr_ifru.ifru_qos.baudrate
-#define ifr_receiving ifr_ifru.ifru_receiving
-#define ifr_dongle ifr_ifru.ifru_dongle
-#define ifr_mode ifr_ifru.ifru_mode
-#define ifr_dtr ifr_ifru.ifru_line.dtr
-#define ifr_rts ifr_ifru.ifru_line.rts
-#define IRDA_NL_NAME "irda"
-#define IRDA_NL_VERSION 1
-enum irda_nl_commands {
- IRDA_NL_CMD_UNSPEC,
- IRDA_NL_CMD_SET_MODE,
- IRDA_NL_CMD_GET_MODE,
- __IRDA_NL_CMD_AFTER_LAST
-};
-#define IRDA_NL_CMD_MAX (__IRDA_NL_CMD_AFTER_LAST - 1)
-enum nl80211_attrs {
- IRDA_NL_ATTR_UNSPEC,
- IRDA_NL_ATTR_IFNAME,
- IRDA_NL_ATTR_MODE,
- __IRDA_NL_ATTR_AFTER_LAST
-};
-#define IRDA_NL_ATTR_MAX (__IRDA_NL_ATTR_AFTER_LAST - 1)
-#define IRDA_MODE_PRIMARY 0x1
-#define IRDA_MODE_SECONDARY 0x2
-#define IRDA_MODE_MONITOR 0x4
-#endif
diff --git a/libc/kernel/uapi/linux/ixjuser.h b/libc/kernel/uapi/linux/ixjuser.h
deleted file mode 100644
index fe89d0c..0000000
--- a/libc/kernel/uapi/linux/ixjuser.h
+++ /dev/null
@@ -1,486 +0,0 @@
-/****************************************************************************
- ****************************************************************************
- ***
- *** This header was automatically generated from a Linux kernel header
- *** of the same name, to make information necessary for userspace to
- *** call into the kernel available to libc. It contains only constants,
- *** structures, and macros generated from the original header, and thus,
- *** contains no copyrightable information.
- ***
- *** To edit the content of this header, modify the corresponding
- *** source file (e.g. under external/kernel-headers/original/) then
- *** run bionic/libc/kernel/tools/update_all.py
- ***
- *** Any manual change here will be lost the next time this script will
- *** be run. You've been warned!
- ***
- ****************************************************************************
- ****************************************************************************/
-#ifndef __LINUX_IXJUSER_H
-#define __LINUX_IXJUSER_H
-#include <linux/telephony.h>
-#define IXJCTL_DSP_RESET _IO('q', 0xC0)
-#define IXJCTL_RING PHONE_RING
-#define IXJCTL_HOOKSTATE PHONE_HOOKSTATE
-#define IXJCTL_MAXRINGS PHONE_MAXRINGS
-#define IXJCTL_RING_CADENCE PHONE_RING_CADENCE
-#define IXJCTL_RING_START PHONE_RING_START
-#define IXJCTL_RING_STOP PHONE_RING_STOP
-#define IXJCTL_CARDTYPE _IOR('q', 0xC1, int)
-#define IXJCTL_SERIAL _IOR('q', 0xC2, int)
-#define IXJCTL_DSP_TYPE _IOR('q', 0xC3, int)
-#define IXJCTL_DSP_VERSION _IOR('q', 0xC4, int)
-#define IXJCTL_VERSION _IOR('q', 0xDA, char *)
-#define IXJCTL_DSP_IDLE _IO('q', 0xC5)
-#define IXJCTL_TESTRAM _IO('q', 0xC6)
-#define IXJCTL_REC_CODEC PHONE_REC_CODEC
-#define IXJCTL_REC_START PHONE_REC_START
-#define IXJCTL_REC_STOP PHONE_REC_STOP
-#define IXJCTL_REC_DEPTH PHONE_REC_DEPTH
-#define IXJCTL_FRAME PHONE_FRAME
-#define IXJCTL_REC_VOLUME PHONE_REC_VOLUME
-#define IXJCTL_REC_LEVEL PHONE_REC_LEVEL
-typedef enum {
- f300_640 = 4,
- f300_500,
- f1100,
- f350,
- f400,
- f480,
- f440,
- f620,
- f20_50,
- f133_200,
- f300,
- f300_420,
- f330,
- f300_425,
- f330_440,
- f340,
- f350_400,
- f350_440,
- f350_450,
- f360,
- f380_420,
- f392,
- f400_425,
- f400_440,
- f400_450,
- f420,
- f425,
- f425_450,
- f425_475,
- f435,
- f440_450,
- f440_480,
- f445,
- f450,
- f452,
- f475,
- f480_620,
- f494,
- f500,
- f520,
- f523,
- f525,
- f540_660,
- f587,
- f590,
- f600,
- f660,
- f700,
- f740,
- f750,
- f750_1450,
- f770,
- f800,
- f816,
- f850,
- f857_1645,
- f900,
- f900_1300,
- f935_1215,
- f941_1477,
- f942,
- f950,
- f950_1400,
- f975,
- f1000,
- f1020,
- f1050,
- f1100_1750,
- f1140,
- f1200,
- f1209,
- f1330,
- f1336,
- lf1366,
- f1380,
- f1400,
- f1477,
- f1600,
- f1633_1638,
- f1800,
- f1860
-} IXJ_FILTER_FREQ;
-typedef struct {
- unsigned int filter;
- IXJ_FILTER_FREQ freq;
- char enable;
-} IXJ_FILTER;
-typedef struct {
- char enable;
- char en_filter;
- unsigned int filter;
- unsigned int on1;
- unsigned int off1;
- unsigned int on2;
- unsigned int off2;
- unsigned int on3;
- unsigned int off3;
-} IXJ_FILTER_CADENCE;
-#define IXJCTL_SET_FILTER _IOW('q', 0xC7, IXJ_FILTER *)
-#define IXJCTL_SET_FILTER_RAW _IOW('q', 0xDD, IXJ_FILTER_RAW *)
-#define IXJCTL_GET_FILTER_HIST _IOW('q', 0xC8, int)
-#define IXJCTL_FILTER_CADENCE _IOW('q', 0xD6, IXJ_FILTER_CADENCE *)
-#define IXJCTL_PLAY_CID _IO('q', 0xD7)
-typedef enum {
- hz20 = 0x7ffa,
- hz50 = 0x7fe5,
- hz133 = 0x7f4c,
- hz200 = 0x7e6b,
- hz261 = 0x7d50,
- hz277 = 0x7cfa,
- hz293 = 0x7c9f,
- hz300 = 0x7c75,
- hz311 = 0x7c32,
- hz329 = 0x7bbf,
- hz330 = 0x7bb8,
- hz340 = 0x7b75,
- hz349 = 0x7b37,
- hz350 = 0x7b30,
- hz360 = 0x7ae9,
- hz369 = 0x7aa8,
- hz380 = 0x7a56,
- hz392 = 0x79fa,
- hz400 = 0x79bb,
- hz415 = 0x7941,
- hz420 = 0x7918,
- hz425 = 0x78ee,
- hz435 = 0x7899,
- hz440 = 0x786d,
- hz445 = 0x7842,
- hz450 = 0x7815,
- hz452 = 0x7803,
- hz466 = 0x7784,
- hz475 = 0x7731,
- hz480 = 0x7701,
- hz493 = 0x7685,
- hz494 = 0x767b,
- hz500 = 0x7640,
- hz520 = 0x7578,
- hz523 = 0x7559,
- hz525 = 0x7544,
- hz540 = 0x74a7,
- hz554 = 0x7411,
- hz587 = 0x72a1,
- hz590 = 0x727f,
- hz600 = 0x720b,
- hz620 = 0x711e,
- hz622 = 0x7106,
- hz659 = 0x6f3b,
- hz660 = 0x6f2e,
- hz698 = 0x6d3d,
- hz700 = 0x6d22,
- hz739 = 0x6b09,
- hz740 = 0x6afa,
- hz750 = 0x6a6c,
- hz770 = 0x694b,
- hz783 = 0x688b,
- hz800 = 0x678d,
- hz816 = 0x6698,
- hz830 = 0x65bf,
- hz850 = 0x6484,
- hz857 = 0x6414,
- hz880 = 0x629f,
- hz900 = 0x6154,
- hz932 = 0x5f35,
- hz935 = 0x5f01,
- hz941 = 0x5e9a,
- hz942 = 0x5e88,
- hz950 = 0x5dfd,
- hz975 = 0x5c44,
- hz1000 = 0x5a81,
- hz1020 = 0x5912,
- hz1050 = 0x56e2,
- hz1100 = 0x5320,
- hz1140 = 0x5007,
- hz1200 = 0x4b3b,
- hz1209 = 0x4a80,
- hz1215 = 0x4a02,
- hz1250 = 0x471c,
- hz1300 = 0x42e0,
- hz1330 = 0x4049,
- hz1336 = 0x3fc4,
- hz1366 = 0x3d22,
- hz1380 = 0x3be4,
- hz1400 = 0x3a1b,
- hz1450 = 0x3596,
- hz1477 = 0x331c,
- hz1500 = 0x30fb,
- hz1600 = 0x278d,
- hz1633 = 0x2462,
- hz1638 = 0x23e7,
- hz1645 = 0x233a,
- hz1750 = 0x18f8,
- hz1800 = 0x1405,
- hz1860 = 0xe0b,
- hz2100 = 0xf5f6,
- hz2130 = 0xf2f5,
- hz2450 = 0xd3b3,
- hz2750 = 0xb8e4
-} IXJ_FREQ;
-typedef enum {
- C1 = hz261,
- CS1 = hz277,
- D1 = hz293,
- DS1 = hz311,
- E1 = hz329,
- F1 = hz349,
- FS1 = hz369,
- G1 = hz392,
- GS1 = hz415,
- A1 = hz440,
- AS1 = hz466,
- B1 = hz493,
- C2 = hz523,
- CS2 = hz554,
- D2 = hz587,
- DS2 = hz622,
- E2 = hz659,
- F2 = hz698,
- FS2 = hz739,
- G2 = hz783,
- GS2 = hz830,
- A2 = hz880,
- AS2 = hz932,
-} IXJ_NOTE;
-typedef struct {
- int tone_index;
- int freq0;
- int gain0;
- int freq1;
- int gain1;
-} IXJ_TONE;
-#define IXJCTL_INIT_TONE _IOW('q', 0xC9, IXJ_TONE *)
-typedef struct {
- int index;
- int tone_on_time;
- int tone_off_time;
- int freq0;
- int gain0;
- int freq1;
- int gain1;
-} IXJ_CADENCE_ELEMENT;
-typedef enum {
- PLAY_ONCE,
- REPEAT_LAST_ELEMENT,
- REPEAT_ALL
-} IXJ_CADENCE_TERM;
-typedef struct {
- int elements_used;
- IXJ_CADENCE_TERM termination;
- IXJ_CADENCE_ELEMENT __user * ce;
-} IXJ_CADENCE;
-#define IXJCTL_TONE_CADENCE _IOW('q', 0xCA, IXJ_CADENCE *)
-#define IXJCTL_PLAY_CODEC PHONE_PLAY_CODEC
-#define IXJCTL_PLAY_START PHONE_PLAY_START
-#define IXJCTL_PLAY_STOP PHONE_PLAY_STOP
-#define IXJCTL_PLAY_DEPTH PHONE_PLAY_DEPTH
-#define IXJCTL_PLAY_VOLUME PHONE_PLAY_VOLUME
-#define IXJCTL_PLAY_LEVEL PHONE_PLAY_LEVEL
-#define IXJCTL_AEC_START _IOW('q', 0xCB, int)
-#define IXJCTL_AEC_STOP _IO('q', 0xCC)
-#define IXJCTL_AEC_GET_LEVEL _IO('q', 0xCD)
-#define AEC_OFF 0
-#define AEC_LOW 1
-#define AEC_MED 2
-#define AEC_HIGH 3
-#define AEC_AUTO 4
-#define AEC_AGC 5
-#define IXJCTL_DTMF_READY PHONE_DTMF_READY
-#define IXJCTL_GET_DTMF PHONE_GET_DTMF
-#define IXJCTL_GET_DTMF_ASCII PHONE_GET_DTMF_ASCII
-#define IXJCTL_DTMF_OOB PHONE_DTMF_OOB
-#define IXJCTL_EXCEPTION PHONE_EXCEPTION
-#define IXJCTL_PLAY_TONE PHONE_PLAY_TONE
-#define IXJCTL_SET_TONE_ON_TIME PHONE_SET_TONE_ON_TIME
-#define IXJCTL_SET_TONE_OFF_TIME PHONE_SET_TONE_OFF_TIME
-#define IXJCTL_GET_TONE_ON_TIME PHONE_GET_TONE_ON_TIME
-#define IXJCTL_GET_TONE_OFF_TIME PHONE_GET_TONE_OFF_TIME
-#define IXJCTL_GET_TONE_STATE PHONE_GET_TONE_STATE
-#define IXJCTL_BUSY PHONE_BUSY
-#define IXJCTL_RINGBACK PHONE_RINGBACK
-#define IXJCTL_DIALTONE PHONE_DIALTONE
-#define IXJCTL_CPT_STOP PHONE_CPT_STOP
-#define IXJCTL_SET_LED _IOW('q', 0xCE, int)
-#define IXJCTL_MIXER _IOW('q', 0xCF, int)
-#define MIXER_MASTER_L 0x0000
-#define MIXER_MASTER_R 0x0100
-#define ATT00DB 0x00
-#define ATT02DB 0x01
-#define ATT04DB 0x02
-#define ATT06DB 0x03
-#define ATT08DB 0x04
-#define ATT10DB 0x05
-#define ATT12DB 0x06
-#define ATT14DB 0x07
-#define ATT16DB 0x08
-#define ATT18DB 0x09
-#define ATT20DB 0x0A
-#define ATT22DB 0x0B
-#define ATT24DB 0x0C
-#define ATT26DB 0x0D
-#define ATT28DB 0x0E
-#define ATT30DB 0x0F
-#define ATT32DB 0x10
-#define ATT34DB 0x11
-#define ATT36DB 0x12
-#define ATT38DB 0x13
-#define ATT40DB 0x14
-#define ATT42DB 0x15
-#define ATT44DB 0x16
-#define ATT46DB 0x17
-#define ATT48DB 0x18
-#define ATT50DB 0x19
-#define ATT52DB 0x1A
-#define ATT54DB 0x1B
-#define ATT56DB 0x1C
-#define ATT58DB 0x1D
-#define ATT60DB 0x1E
-#define ATT62DB 0x1F
-#define MASTER_MUTE 0x80
-#define MIXER_PORT_CD_L 0x0600
-#define MIXER_PORT_CD_R 0x0700
-#define MIXER_PORT_LINE_IN_L 0x0800
-#define MIXER_PORT_LINE_IN_R 0x0900
-#define MIXER_PORT_POTS_REC 0x0C00
-#define MIXER_PORT_MIC 0x0E00
-#define GAIN12DB 0x00
-#define GAIN10DB 0x01
-#define GAIN08DB 0x02
-#define GAIN06DB 0x03
-#define GAIN04DB 0x04
-#define GAIN02DB 0x05
-#define GAIN00DB 0x06
-#define GAIN_02DB 0x07
-#define GAIN_04DB 0x08
-#define GAIN_06DB 0x09
-#define GAIN_08DB 0x0A
-#define GAIN_10DB 0x0B
-#define GAIN_12DB 0x0C
-#define GAIN_14DB 0x0D
-#define GAIN_16DB 0x0E
-#define GAIN_18DB 0x0F
-#define GAIN_20DB 0x10
-#define GAIN_22DB 0x11
-#define GAIN_24DB 0x12
-#define GAIN_26DB 0x13
-#define GAIN_28DB 0x14
-#define GAIN_30DB 0x15
-#define GAIN_32DB 0x16
-#define GAIN_34DB 0x17
-#define GAIN_36DB 0x18
-#define GAIN_38DB 0x19
-#define GAIN_40DB 0x1A
-#define GAIN_42DB 0x1B
-#define GAIN_44DB 0x1C
-#define GAIN_46DB 0x1D
-#define GAIN_48DB 0x1E
-#define GAIN_50DB 0x1F
-#define INPUT_MUTE 0x80
-#define MIXER_PORT_POTS_PLAY 0x0F00
-#define POTS_ATT_00DB 0x00
-#define POTS_ATT_04DB 0x01
-#define POTS_ATT_08DB 0x02
-#define POTS_ATT_12DB 0x03
-#define POTS_ATT_16DB 0x04
-#define POTS_ATT_20DB 0x05
-#define POTS_ATT_24DB 0x06
-#define POTS_ATT_28DB 0x07
-#define POTS_MUTE 0x80
-#define IXJCTL_DAA_COEFF_SET _IOW('q', 0xD0, int)
-#define DAA_US 1
-#define DAA_UK 2
-#define DAA_FRANCE 3
-#define DAA_GERMANY 4
-#define DAA_AUSTRALIA 5
-#define DAA_JAPAN 6
-#define IXJCTL_PORT _IOW('q', 0xD1, int)
-#define PORT_QUERY 0
-#define PORT_POTS 1
-#define PORT_PSTN 2
-#define PORT_SPEAKER 3
-#define PORT_HANDSET 4
-#define IXJCTL_PSTN_SET_STATE PHONE_PSTN_SET_STATE
-#define IXJCTL_PSTN_GET_STATE PHONE_PSTN_GET_STATE
-#define PSTN_ON_HOOK 0
-#define PSTN_RINGING 1
-#define PSTN_OFF_HOOK 2
-#define PSTN_PULSE_DIAL 3
-#define IXJCTL_DAA_AGAIN _IOW('q', 0xD2, int)
-#define AGRR00DB 0x00
-#define AGRR3_5DB 0x10
-#define AGRR06DB 0x30
-#define AGX00DB 0x00
-#define AGX_6DB 0x04
-#define AGX3_5DB 0x08
-#define AGX_2_5B 0x0C
-#define IXJCTL_PSTN_LINETEST _IO('q', 0xD3)
-#define IXJCTL_CID _IOR('q', 0xD4, PHONE_CID *)
-#define IXJCTL_VMWI _IOR('q', 0xD8, int)
-#define IXJCTL_CIDCW _IOW('q', 0xD9, PHONE_CID *)
-#define IXJCTL_WINK_DURATION PHONE_WINK_DURATION
-#define IXJCTL_POTS_PSTN _IOW('q', 0xD5, int)
-#define IXJCTL_HZ _IOW('q', 0xE0, int)
-#define IXJCTL_RATE _IOW('q', 0xE1, int)
-#define IXJCTL_FRAMES_READ _IOR('q', 0xE2, unsigned long)
-#define IXJCTL_FRAMES_WRITTEN _IOR('q', 0xE3, unsigned long)
-#define IXJCTL_READ_WAIT _IOR('q', 0xE4, unsigned long)
-#define IXJCTL_WRITE_WAIT _IOR('q', 0xE5, unsigned long)
-#define IXJCTL_DRYBUFFER_READ _IOR('q', 0xE6, unsigned long)
-#define IXJCTL_DRYBUFFER_CLEAR _IO('q', 0xE7)
-#define IXJCTL_DTMF_PRESCALE _IOW('q', 0xE8, int)
-typedef enum {
- SIG_DTMF_READY,
- SIG_HOOKSTATE,
- SIG_FLASH,
- SIG_PSTN_RING,
- SIG_CALLER_ID,
- SIG_PSTN_WINK,
- SIG_F0,
- SIG_F1,
- SIG_F2,
- SIG_F3,
- SIG_FC0,
- SIG_FC1,
- SIG_FC2,
- SIG_FC3,
- SIG_READ_READY = 33,
- SIG_WRITE_READY = 34
-} IXJ_SIGEVENT;
-typedef struct {
- unsigned int event;
- int signal;
-} IXJ_SIGDEF;
-#define IXJCTL_SIGCTL _IOW('q', 0xE9, IXJ_SIGDEF *)
-#define IXJCTL_SC_RXG _IOW('q', 0xEA, int)
-#define IXJCTL_SC_TXG _IOW('q', 0xEB, int)
-#define IXJCTL_INTERCOM_START _IOW('q', 0xFD, int)
-#define IXJCTL_INTERCOM_STOP _IOW('q', 0xFE, int)
-typedef struct {
- unsigned int filter;
- char enable;
- unsigned int coeff[19];
-} IXJ_FILTER_RAW;
-#endif
diff --git a/libc/kernel/uapi/linux/kfd_ioctl.h b/libc/kernel/uapi/linux/kfd_ioctl.h
index d4582a1..05db3fb 100644
--- a/libc/kernel/uapi/linux/kfd_ioctl.h
+++ b/libc/kernel/uapi/linux/kfd_ioctl.h
@@ -45,7 +45,8 @@
__u64 eop_buffer_address;
__u64 eop_buffer_size;
__u64 ctx_save_restore_address;
- __u64 ctx_save_restore_size;
+ __u32 ctx_save_restore_size;
+ __u32 ctl_stack_size;
};
struct kfd_ioctl_destroy_queue_args {
__u32 queue_id;
@@ -76,7 +77,6 @@
__u32 gpu_id;
__u32 pad;
};
-#define NUM_OF_SUPPORTED_GPUS 7
struct kfd_process_device_apertures {
__u64 lds_base;
__u64 lds_limit;
@@ -87,11 +87,17 @@
__u32 gpu_id;
__u32 pad;
};
+#define NUM_OF_SUPPORTED_GPUS 7
struct kfd_ioctl_get_process_apertures_args {
struct kfd_process_device_apertures process_apertures[NUM_OF_SUPPORTED_GPUS];
__u32 num_of_nodes;
__u32 pad;
};
+struct kfd_ioctl_get_process_apertures_new_args {
+ __u64 kfd_process_device_apertures_ptr;
+ __u32 num_of_nodes;
+ __u32 pad;
+};
#define MAX_ALLOWED_NUM_POINTS 100
#define MAX_ALLOWED_AW_BUFF_SIZE 4096
#define MAX_ALLOWED_WAC_BUFF_SIZE 128
@@ -189,6 +195,49 @@
__u32 num_banks;
__u32 num_ranks;
};
+struct kfd_ioctl_set_trap_handler_args {
+ __u64 tba_addr;
+ __u64 tma_addr;
+ __u32 gpu_id;
+ __u32 pad;
+};
+struct kfd_ioctl_acquire_vm_args {
+ __u32 drm_fd;
+ __u32 gpu_id;
+};
+#define KFD_IOC_ALLOC_MEM_FLAGS_VRAM (1 << 0)
+#define KFD_IOC_ALLOC_MEM_FLAGS_GTT (1 << 1)
+#define KFD_IOC_ALLOC_MEM_FLAGS_USERPTR (1 << 2)
+#define KFD_IOC_ALLOC_MEM_FLAGS_DOORBELL (1 << 3)
+#define KFD_IOC_ALLOC_MEM_FLAGS_WRITABLE (1 << 31)
+#define KFD_IOC_ALLOC_MEM_FLAGS_EXECUTABLE (1 << 30)
+#define KFD_IOC_ALLOC_MEM_FLAGS_PUBLIC (1 << 29)
+#define KFD_IOC_ALLOC_MEM_FLAGS_NO_SUBSTITUTE (1 << 28)
+#define KFD_IOC_ALLOC_MEM_FLAGS_AQL_QUEUE_MEM (1 << 27)
+#define KFD_IOC_ALLOC_MEM_FLAGS_COHERENT (1 << 26)
+struct kfd_ioctl_alloc_memory_of_gpu_args {
+ __u64 va_addr;
+ __u64 size;
+ __u64 handle;
+ __u64 mmap_offset;
+ __u32 gpu_id;
+ __u32 flags;
+};
+struct kfd_ioctl_free_memory_of_gpu_args {
+ __u64 handle;
+};
+struct kfd_ioctl_map_memory_to_gpu_args {
+ __u64 handle;
+ __u64 device_ids_array_ptr;
+ __u32 n_devices;
+ __u32 n_success;
+};
+struct kfd_ioctl_unmap_memory_from_gpu_args {
+ __u64 handle;
+ __u64 device_ids_array_ptr;
+ __u32 n_devices;
+ __u32 n_success;
+};
#define AMDKFD_IOCTL_BASE 'K'
#define AMDKFD_IO(nr) _IO(AMDKFD_IOCTL_BASE, nr)
#define AMDKFD_IOR(nr,type) _IOR(AMDKFD_IOCTL_BASE, nr, type)
@@ -212,6 +261,13 @@
#define AMDKFD_IOC_DBG_WAVE_CONTROL AMDKFD_IOW(0x10, struct kfd_ioctl_dbg_wave_control_args)
#define AMDKFD_IOC_SET_SCRATCH_BACKING_VA AMDKFD_IOWR(0x11, struct kfd_ioctl_set_scratch_backing_va_args)
#define AMDKFD_IOC_GET_TILE_CONFIG AMDKFD_IOWR(0x12, struct kfd_ioctl_get_tile_config_args)
+#define AMDKFD_IOC_SET_TRAP_HANDLER AMDKFD_IOW(0x13, struct kfd_ioctl_set_trap_handler_args)
+#define AMDKFD_IOC_GET_PROCESS_APERTURES_NEW AMDKFD_IOWR(0x14, struct kfd_ioctl_get_process_apertures_new_args)
+#define AMDKFD_IOC_ACQUIRE_VM AMDKFD_IOW(0x15, struct kfd_ioctl_acquire_vm_args)
+#define AMDKFD_IOC_ALLOC_MEMORY_OF_GPU AMDKFD_IOWR(0x16, struct kfd_ioctl_alloc_memory_of_gpu_args)
+#define AMDKFD_IOC_FREE_MEMORY_OF_GPU AMDKFD_IOW(0x17, struct kfd_ioctl_free_memory_of_gpu_args)
+#define AMDKFD_IOC_MAP_MEMORY_TO_GPU AMDKFD_IOWR(0x18, struct kfd_ioctl_map_memory_to_gpu_args)
+#define AMDKFD_IOC_UNMAP_MEMORY_FROM_GPU AMDKFD_IOWR(0x19, struct kfd_ioctl_unmap_memory_from_gpu_args)
#define AMDKFD_COMMAND_START 0x01
-#define AMDKFD_COMMAND_END 0x13
+#define AMDKFD_COMMAND_END 0x1A
#endif
diff --git a/libc/kernel/uapi/linux/kvm.h b/libc/kernel/uapi/linux/kvm.h
index d04832a..6c8ae61 100644
--- a/libc/kernel/uapi/linux/kvm.h
+++ b/libc/kernel/uapi/linux/kvm.h
@@ -305,11 +305,12 @@
struct kvm_hyperv_exit hyperv;
char padding[256];
};
+#define SYNC_REGS_SIZE_BYTES 2048
__u64 kvm_valid_regs;
__u64 kvm_dirty_regs;
union {
struct kvm_sync_regs regs;
- char padding[2048];
+ char padding[SYNC_REGS_SIZE_BYTES];
} s;
};
struct kvm_coalesced_mmio_zone {
@@ -510,6 +511,10 @@
__u32 flags;
__u8 pad[36];
};
+#define KVM_X86_DISABLE_EXITS_MWAIT (1 << 0)
+#define KVM_X86_DISABLE_EXITS_HLT (1 << 1)
+#define KVM_X86_DISABLE_EXITS_PAUSE (1 << 2)
+#define KVM_X86_DISABLE_VALID_EXITS (KVM_X86_DISABLE_EXITS_MWAIT | KVM_X86_DISABLE_EXITS_HLT | KVM_X86_DISABLE_EXITS_PAUSE)
struct kvm_enable_cap {
__u32 cap;
__u32 flags;
@@ -564,6 +569,7 @@
#define KVM_TRACE_PAUSE __KVM_DEPRECATED_MAIN_0x07
#define KVM_TRACE_DISABLE __KVM_DEPRECATED_MAIN_0x08
#define KVM_GET_EMULATED_CPUID _IOWR(KVMIO, 0x09, struct kvm_cpuid2)
+#define KVM_GET_MSR_FEATURE_INDEX_LIST _IOWR(KVMIO, 0x0a, struct kvm_msr_list)
#define KVM_CAP_IRQCHIP 0
#define KVM_CAP_HLT 1
#define KVM_CAP_MMU_SHADOW_CACHE_CONTROL 2
@@ -721,7 +727,7 @@
#define KVM_CAP_S390_GS 140
#define KVM_CAP_S390_AIS 141
#define KVM_CAP_SPAPR_TCE_VFIO 142
-#define KVM_CAP_X86_GUEST_MWAIT 143
+#define KVM_CAP_X86_DISABLE_EXITS 143
#define KVM_CAP_ARM_USER_IRQ 144
#define KVM_CAP_S390_CMMA_MIGRATION 145
#define KVM_CAP_PPC_FWNMI 146
@@ -731,6 +737,8 @@
#define KVM_CAP_S390_AIS_MIGRATION 150
#define KVM_CAP_PPC_GET_CPU_CHAR 151
#define KVM_CAP_S390_BPB 152
+#define KVM_CAP_GET_MSR_FEATURES 153
+#define KVM_CAP_HYPERV_EVENTFD 154
#ifdef KVM_CAP_IRQ_ROUTING
struct kvm_irq_routing_irqchip {
__u32 irqchip;
@@ -1032,6 +1040,77 @@
#define KVM_SMI _IO(KVMIO, 0xb7)
#define KVM_S390_GET_CMMA_BITS _IOWR(KVMIO, 0xb8, struct kvm_s390_cmma_log)
#define KVM_S390_SET_CMMA_BITS _IOW(KVMIO, 0xb9, struct kvm_s390_cmma_log)
+#define KVM_MEMORY_ENCRYPT_OP _IOWR(KVMIO, 0xba, unsigned long)
+struct kvm_enc_region {
+ __u64 addr;
+ __u64 size;
+};
+#define KVM_MEMORY_ENCRYPT_REG_REGION _IOR(KVMIO, 0xbb, struct kvm_enc_region)
+#define KVM_MEMORY_ENCRYPT_UNREG_REGION _IOR(KVMIO, 0xbc, struct kvm_enc_region)
+#define KVM_HYPERV_EVENTFD _IOW(KVMIO, 0xbd, struct kvm_hyperv_eventfd)
+enum sev_cmd_id {
+ KVM_SEV_INIT = 0,
+ KVM_SEV_ES_INIT,
+ KVM_SEV_LAUNCH_START,
+ KVM_SEV_LAUNCH_UPDATE_DATA,
+ KVM_SEV_LAUNCH_UPDATE_VMSA,
+ KVM_SEV_LAUNCH_SECRET,
+ KVM_SEV_LAUNCH_MEASURE,
+ KVM_SEV_LAUNCH_FINISH,
+ KVM_SEV_SEND_START,
+ KVM_SEV_SEND_UPDATE_DATA,
+ KVM_SEV_SEND_UPDATE_VMSA,
+ KVM_SEV_SEND_FINISH,
+ KVM_SEV_RECEIVE_START,
+ KVM_SEV_RECEIVE_UPDATE_DATA,
+ KVM_SEV_RECEIVE_UPDATE_VMSA,
+ KVM_SEV_RECEIVE_FINISH,
+ KVM_SEV_GUEST_STATUS,
+ KVM_SEV_DBG_DECRYPT,
+ KVM_SEV_DBG_ENCRYPT,
+ KVM_SEV_CERT_EXPORT,
+ KVM_SEV_NR_MAX,
+};
+struct kvm_sev_cmd {
+ __u32 id;
+ __u64 data;
+ __u32 error;
+ __u32 sev_fd;
+};
+struct kvm_sev_launch_start {
+ __u32 handle;
+ __u32 policy;
+ __u64 dh_uaddr;
+ __u32 dh_len;
+ __u64 session_uaddr;
+ __u32 session_len;
+};
+struct kvm_sev_launch_update_data {
+ __u64 uaddr;
+ __u32 len;
+};
+struct kvm_sev_launch_secret {
+ __u64 hdr_uaddr;
+ __u32 hdr_len;
+ __u64 guest_uaddr;
+ __u32 guest_len;
+ __u64 trans_uaddr;
+ __u32 trans_len;
+};
+struct kvm_sev_launch_measure {
+ __u64 uaddr;
+ __u32 len;
+};
+struct kvm_sev_guest_status {
+ __u32 handle;
+ __u32 policy;
+ __u32 state;
+};
+struct kvm_sev_dbg {
+ __u64 src_uaddr;
+ __u64 dst_uaddr;
+ __u32 len;
+};
#define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0)
#define KVM_DEV_ASSIGN_PCI_2_3 (1 << 1)
#define KVM_DEV_ASSIGN_MASK_INTX (1 << 2)
@@ -1079,4 +1158,12 @@
#define KVM_ARM_DEV_EL1_VTIMER (1 << 0)
#define KVM_ARM_DEV_EL1_PTIMER (1 << 1)
#define KVM_ARM_DEV_PMU (1 << 2)
+struct kvm_hyperv_eventfd {
+ __u32 conn_id;
+ __s32 fd;
+ __u32 flags;
+ __u32 padding[3];
+};
+#define KVM_HYPERV_CONN_ID_MASK 0x00ffffff
+#define KVM_HYPERV_EVENTFD_DEASSIGN (1 << 0)
#endif
diff --git a/libc/kernel/uapi/linux/libc-compat.h b/libc/kernel/uapi/linux/libc-compat.h
index c9a8b74..447a46a 100644
--- a/libc/kernel/uapi/linux/libc-compat.h
+++ b/libc/kernel/uapi/linux/libc-compat.h
@@ -169,7 +169,4 @@
#define __UAPI_DEF_XATTR 1
#endif
#endif
-#ifndef __UAPI_DEF_ETHHDR
-#define __UAPI_DEF_ETHHDR 1
-#endif
#endif
diff --git a/libc/kernel/uapi/linux/lightnvm.h b/libc/kernel/uapi/linux/lightnvm.h
index 996d873..b3ac317 100644
--- a/libc/kernel/uapi/linux/lightnvm.h
+++ b/libc/kernel/uapi/linux/lightnvm.h
@@ -58,13 +58,21 @@
__u32 lun_begin;
__u32 lun_end;
};
+struct nvm_ioctl_create_extended {
+ __u16 lun_begin;
+ __u16 lun_end;
+ __u16 op;
+ __u16 rsv;
+};
enum {
NVM_CONFIG_TYPE_SIMPLE = 0,
+ NVM_CONFIG_TYPE_EXTENDED = 1,
};
struct nvm_ioctl_create_conf {
__u32 type;
union {
struct nvm_ioctl_create_simple s;
+ struct nvm_ioctl_create_extended e;
};
};
enum {
diff --git a/libc/kernel/uapi/linux/lirc.h b/libc/kernel/uapi/linux/lirc.h
index d7dfa76..3dfb6d0 100644
--- a/libc/kernel/uapi/linux/lirc.h
+++ b/libc/kernel/uapi/linux/lirc.h
@@ -46,6 +46,7 @@
#define LIRC_MODE_RAW 0x00000001
#define LIRC_MODE_PULSE 0x00000002
#define LIRC_MODE_MODE2 0x00000004
+#define LIRC_MODE_SCANCODE 0x00000008
#define LIRC_MODE_LIRCCODE 0x00000010
#define LIRC_CAN_SEND_RAW LIRC_MODE2SEND(LIRC_MODE_RAW)
#define LIRC_CAN_SEND_PULSE LIRC_MODE2SEND(LIRC_MODE_PULSE)
@@ -58,6 +59,7 @@
#define LIRC_CAN_REC_RAW LIRC_MODE2REC(LIRC_MODE_RAW)
#define LIRC_CAN_REC_PULSE LIRC_MODE2REC(LIRC_MODE_PULSE)
#define LIRC_CAN_REC_MODE2 LIRC_MODE2REC(LIRC_MODE_MODE2)
+#define LIRC_CAN_REC_SCANCODE LIRC_MODE2REC(LIRC_MODE_SCANCODE)
#define LIRC_CAN_REC_LIRCCODE LIRC_MODE2REC(LIRC_MODE_LIRCCODE)
#define LIRC_CAN_REC_MASK LIRC_MODE2REC(LIRC_CAN_SEND_MASK)
#define LIRC_CAN_SET_REC_CARRIER (LIRC_CAN_SET_SEND_CARRIER << 16)
@@ -90,4 +92,39 @@
#define LIRC_SET_MEASURE_CARRIER_MODE _IOW('i', 0x0000001d, __u32)
#define LIRC_SET_REC_CARRIER_RANGE _IOW('i', 0x0000001f, __u32)
#define LIRC_SET_WIDEBAND_RECEIVER _IOW('i', 0x00000023, __u32)
+struct lirc_scancode {
+ __u64 timestamp;
+ __u16 flags;
+ __u16 rc_proto;
+ __u32 keycode;
+ __u64 scancode;
+};
+#define LIRC_SCANCODE_FLAG_TOGGLE 1
+#define LIRC_SCANCODE_FLAG_REPEAT 2
+enum rc_proto {
+ RC_PROTO_UNKNOWN = 0,
+ RC_PROTO_OTHER = 1,
+ RC_PROTO_RC5 = 2,
+ RC_PROTO_RC5X_20 = 3,
+ RC_PROTO_RC5_SZ = 4,
+ RC_PROTO_JVC = 5,
+ RC_PROTO_SONY12 = 6,
+ RC_PROTO_SONY15 = 7,
+ RC_PROTO_SONY20 = 8,
+ RC_PROTO_NEC = 9,
+ RC_PROTO_NECX = 10,
+ RC_PROTO_NEC32 = 11,
+ RC_PROTO_SANYO = 12,
+ RC_PROTO_MCIR2_KBD = 13,
+ RC_PROTO_MCIR2_MSE = 14,
+ RC_PROTO_RC6_0 = 15,
+ RC_PROTO_RC6_6A_20 = 16,
+ RC_PROTO_RC6_6A_24 = 17,
+ RC_PROTO_RC6_6A_32 = 18,
+ RC_PROTO_RC6_MCE = 19,
+ RC_PROTO_SHARP = 20,
+ RC_PROTO_XMP = 21,
+ RC_PROTO_CEC = 22,
+ RC_PROTO_IMON = 23,
+};
#endif
diff --git a/libc/kernel/uapi/linux/lp.h b/libc/kernel/uapi/linux/lp.h
index b3504f0..35d5d5a 100644
--- a/libc/kernel/uapi/linux/lp.h
+++ b/libc/kernel/uapi/linux/lp.h
@@ -18,6 +18,8 @@
****************************************************************************/
#ifndef _UAPI_LINUX_LP_H
#define _UAPI_LINUX_LP_H
+#include <linux/types.h>
+#include <linux/ioctl.h>
#define LP_EXIST 0x0001
#define LP_SELEC 0x0002
#define LP_BUSY 0x0004
@@ -53,7 +55,13 @@
#define LPGETSTATS 0x060d
#endif
#define LPGETFLAGS 0x060e
-#define LPSETTIMEOUT 0x060f
+#define LPSETTIMEOUT_OLD 0x060f
+#define LPSETTIMEOUT_NEW _IOW(0x6, 0xf, __s64[2])
+#if __BITS_PER_LONG == 64
+#define LPSETTIMEOUT LPSETTIMEOUT_OLD
+#else
+#define LPSETTIMEOUT (sizeof(time_t) > sizeof(__kernel_long_t) ? LPSETTIMEOUT_NEW : LPSETTIMEOUT_OLD)
+#endif
#define LP_TIMEOUT_INTERRUPT (60 * HZ)
#define LP_TIMEOUT_POLLED (10 * HZ)
#endif
diff --git a/libc/kernel/uapi/linux/media.h b/libc/kernel/uapi/linux/media.h
index b24d616..e6236f9 100644
--- a/libc/kernel/uapi/linux/media.h
+++ b/libc/kernel/uapi/linux/media.h
@@ -32,18 +32,25 @@
__u32 driver_version;
__u32 reserved[31];
};
-#define MEDIA_ENT_ID_FLAG_NEXT (1 << 31)
-#define MEDIA_ENT_F_UNKNOWN 0x00000000
#define MEDIA_ENT_F_BASE 0x00000000
#define MEDIA_ENT_F_OLD_BASE 0x00010000
#define MEDIA_ENT_F_OLD_SUBDEV_BASE 0x00020000
+#define MEDIA_ENT_F_UNKNOWN MEDIA_ENT_F_BASE
+#define MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN MEDIA_ENT_F_OLD_SUBDEV_BASE
#define MEDIA_ENT_F_DTV_DEMOD (MEDIA_ENT_F_BASE + 0x00001)
#define MEDIA_ENT_F_TS_DEMUX (MEDIA_ENT_F_BASE + 0x00002)
#define MEDIA_ENT_F_DTV_CA (MEDIA_ENT_F_BASE + 0x00003)
#define MEDIA_ENT_F_DTV_NET_DECAP (MEDIA_ENT_F_BASE + 0x00004)
+#define MEDIA_ENT_F_IO_V4L (MEDIA_ENT_F_OLD_BASE + 1)
#define MEDIA_ENT_F_IO_DTV (MEDIA_ENT_F_BASE + 0x01001)
#define MEDIA_ENT_F_IO_VBI (MEDIA_ENT_F_BASE + 0x01002)
#define MEDIA_ENT_F_IO_SWRADIO (MEDIA_ENT_F_BASE + 0x01003)
+#define MEDIA_ENT_F_CAM_SENSOR (MEDIA_ENT_F_OLD_SUBDEV_BASE + 1)
+#define MEDIA_ENT_F_FLASH (MEDIA_ENT_F_OLD_SUBDEV_BASE + 2)
+#define MEDIA_ENT_F_LENS (MEDIA_ENT_F_OLD_SUBDEV_BASE + 3)
+#define MEDIA_ENT_F_ATV_DECODER (MEDIA_ENT_F_OLD_SUBDEV_BASE + 4)
+#define MEDIA_ENT_F_DTV_DECODER (MEDIA_ENT_F_BASE + 0x6001)
+#define MEDIA_ENT_F_TUNER (MEDIA_ENT_F_OLD_SUBDEV_BASE + 5)
#define MEDIA_ENT_F_IF_VID_DECODER (MEDIA_ENT_F_BASE + 0x02001)
#define MEDIA_ENT_F_IF_AUD_DECODER (MEDIA_ENT_F_BASE + 0x02002)
#define MEDIA_ENT_F_AUDIO_CAPTURE (MEDIA_ENT_F_BASE + 0x03001)
@@ -57,33 +64,9 @@
#define MEDIA_ENT_F_PROC_VIDEO_STATISTICS (MEDIA_ENT_F_BASE + 0x4006)
#define MEDIA_ENT_F_VID_MUX (MEDIA_ENT_F_BASE + 0x5001)
#define MEDIA_ENT_F_VID_IF_BRIDGE (MEDIA_ENT_F_BASE + 0x5002)
-#define MEDIA_ENT_F_IO_V4L (MEDIA_ENT_F_OLD_BASE + 1)
-#define MEDIA_ENT_F_CAM_SENSOR (MEDIA_ENT_F_OLD_SUBDEV_BASE + 1)
-#define MEDIA_ENT_F_FLASH (MEDIA_ENT_F_OLD_SUBDEV_BASE + 2)
-#define MEDIA_ENT_F_LENS (MEDIA_ENT_F_OLD_SUBDEV_BASE + 3)
-#define MEDIA_ENT_F_ATV_DECODER (MEDIA_ENT_F_OLD_SUBDEV_BASE + 4)
-#define MEDIA_ENT_F_TUNER (MEDIA_ENT_F_OLD_SUBDEV_BASE + 5)
-#define MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN MEDIA_ENT_F_OLD_SUBDEV_BASE
-#define MEDIA_ENT_TYPE_SHIFT 16
-#define MEDIA_ENT_TYPE_MASK 0x00ff0000
-#define MEDIA_ENT_SUBTYPE_MASK 0x0000ffff
-#define MEDIA_ENT_T_DEVNODE_UNKNOWN (MEDIA_ENT_T_DEVNODE | MEDIA_ENT_SUBTYPE_MASK)
-#define MEDIA_ENT_T_DEVNODE MEDIA_ENT_F_OLD_BASE
-#define MEDIA_ENT_T_DEVNODE_V4L MEDIA_ENT_F_IO_V4L
-#define MEDIA_ENT_T_DEVNODE_FB (MEDIA_ENT_T_DEVNODE + 2)
-#define MEDIA_ENT_T_DEVNODE_ALSA (MEDIA_ENT_T_DEVNODE + 3)
-#define MEDIA_ENT_T_DEVNODE_DVB (MEDIA_ENT_T_DEVNODE + 4)
-#define MEDIA_ENT_T_UNKNOWN MEDIA_ENT_F_UNKNOWN
-#define MEDIA_ENT_T_V4L2_VIDEO MEDIA_ENT_F_IO_V4L
-#define MEDIA_ENT_T_V4L2_SUBDEV MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN
-#define MEDIA_ENT_T_V4L2_SUBDEV_SENSOR MEDIA_ENT_F_CAM_SENSOR
-#define MEDIA_ENT_T_V4L2_SUBDEV_FLASH MEDIA_ENT_F_FLASH
-#define MEDIA_ENT_T_V4L2_SUBDEV_LENS MEDIA_ENT_F_LENS
-#define MEDIA_ENT_T_V4L2_SUBDEV_DECODER MEDIA_ENT_F_ATV_DECODER
-#define MEDIA_ENT_T_V4L2_SUBDEV_TUNER MEDIA_ENT_F_TUNER
-#define MEDIA_API_VERSION KERNEL_VERSION(0, 1, 0)
#define MEDIA_ENT_FL_DEFAULT (1 << 0)
#define MEDIA_ENT_FL_CONNECTOR (1 << 1)
+#define MEDIA_ENT_ID_FLAG_NEXT (1 << 31)
struct media_entity_desc {
__u32 id;
char name[32];
@@ -145,7 +128,6 @@
};
#define MEDIA_INTF_T_DVB_BASE 0x00000100
#define MEDIA_INTF_T_V4L_BASE 0x00000200
-#define MEDIA_INTF_T_ALSA_BASE 0x00000300
#define MEDIA_INTF_T_DVB_FE (MEDIA_INTF_T_DVB_BASE)
#define MEDIA_INTF_T_DVB_DEMUX (MEDIA_INTF_T_DVB_BASE + 1)
#define MEDIA_INTF_T_DVB_DVR (MEDIA_INTF_T_DVB_BASE + 2)
@@ -157,14 +139,6 @@
#define MEDIA_INTF_T_V4L_SUBDEV (MEDIA_INTF_T_V4L_BASE + 3)
#define MEDIA_INTF_T_V4L_SWRADIO (MEDIA_INTF_T_V4L_BASE + 4)
#define MEDIA_INTF_T_V4L_TOUCH (MEDIA_INTF_T_V4L_BASE + 5)
-#define MEDIA_INTF_T_ALSA_PCM_CAPTURE (MEDIA_INTF_T_ALSA_BASE)
-#define MEDIA_INTF_T_ALSA_PCM_PLAYBACK (MEDIA_INTF_T_ALSA_BASE + 1)
-#define MEDIA_INTF_T_ALSA_CONTROL (MEDIA_INTF_T_ALSA_BASE + 2)
-#define MEDIA_INTF_T_ALSA_COMPRESS (MEDIA_INTF_T_ALSA_BASE + 3)
-#define MEDIA_INTF_T_ALSA_RAWMIDI (MEDIA_INTF_T_ALSA_BASE + 4)
-#define MEDIA_INTF_T_ALSA_HWDEP (MEDIA_INTF_T_ALSA_BASE + 5)
-#define MEDIA_INTF_T_ALSA_SEQUENCER (MEDIA_INTF_T_ALSA_BASE + 6)
-#define MEDIA_INTF_T_ALSA_TIMER (MEDIA_INTF_T_ALSA_BASE + 7)
struct media_v2_entity {
__u32 id;
char name[64];
@@ -218,4 +192,31 @@
#define MEDIA_IOC_ENUM_LINKS _IOWR('|', 0x02, struct media_links_enum)
#define MEDIA_IOC_SETUP_LINK _IOWR('|', 0x03, struct media_link_desc)
#define MEDIA_IOC_G_TOPOLOGY _IOWR('|', 0x04, struct media_v2_topology)
+#define MEDIA_ENT_TYPE_SHIFT 16
+#define MEDIA_ENT_TYPE_MASK 0x00ff0000
+#define MEDIA_ENT_SUBTYPE_MASK 0x0000ffff
+#define MEDIA_ENT_T_DEVNODE_UNKNOWN (MEDIA_ENT_F_OLD_BASE | MEDIA_ENT_SUBTYPE_MASK)
+#define MEDIA_ENT_T_DEVNODE MEDIA_ENT_F_OLD_BASE
+#define MEDIA_ENT_T_DEVNODE_V4L MEDIA_ENT_F_IO_V4L
+#define MEDIA_ENT_T_DEVNODE_FB (MEDIA_ENT_F_OLD_BASE + 2)
+#define MEDIA_ENT_T_DEVNODE_ALSA (MEDIA_ENT_F_OLD_BASE + 3)
+#define MEDIA_ENT_T_DEVNODE_DVB (MEDIA_ENT_F_OLD_BASE + 4)
+#define MEDIA_ENT_T_UNKNOWN MEDIA_ENT_F_UNKNOWN
+#define MEDIA_ENT_T_V4L2_VIDEO MEDIA_ENT_F_IO_V4L
+#define MEDIA_ENT_T_V4L2_SUBDEV MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN
+#define MEDIA_ENT_T_V4L2_SUBDEV_SENSOR MEDIA_ENT_F_CAM_SENSOR
+#define MEDIA_ENT_T_V4L2_SUBDEV_FLASH MEDIA_ENT_F_FLASH
+#define MEDIA_ENT_T_V4L2_SUBDEV_LENS MEDIA_ENT_F_LENS
+#define MEDIA_ENT_T_V4L2_SUBDEV_DECODER MEDIA_ENT_F_ATV_DECODER
+#define MEDIA_ENT_T_V4L2_SUBDEV_TUNER MEDIA_ENT_F_TUNER
+#define MEDIA_INTF_T_ALSA_BASE 0x00000300
+#define MEDIA_INTF_T_ALSA_PCM_CAPTURE (MEDIA_INTF_T_ALSA_BASE)
+#define MEDIA_INTF_T_ALSA_PCM_PLAYBACK (MEDIA_INTF_T_ALSA_BASE + 1)
+#define MEDIA_INTF_T_ALSA_CONTROL (MEDIA_INTF_T_ALSA_BASE + 2)
+#define MEDIA_INTF_T_ALSA_COMPRESS (MEDIA_INTF_T_ALSA_BASE + 3)
+#define MEDIA_INTF_T_ALSA_RAWMIDI (MEDIA_INTF_T_ALSA_BASE + 4)
+#define MEDIA_INTF_T_ALSA_HWDEP (MEDIA_INTF_T_ALSA_BASE + 5)
+#define MEDIA_INTF_T_ALSA_SEQUENCER (MEDIA_INTF_T_ALSA_BASE + 6)
+#define MEDIA_INTF_T_ALSA_TIMER (MEDIA_INTF_T_ALSA_BASE + 7)
+#define MEDIA_API_VERSION KERNEL_VERSION(0, 1, 0)
#endif
diff --git a/libc/kernel/uapi/linux/membarrier.h b/libc/kernel/uapi/linux/membarrier.h
index 2f5ea7d..19cfeb2 100644
--- a/libc/kernel/uapi/linux/membarrier.h
+++ b/libc/kernel/uapi/linux/membarrier.h
@@ -20,8 +20,13 @@
#define _UAPI_LINUX_MEMBARRIER_H
enum membarrier_cmd {
MEMBARRIER_CMD_QUERY = 0,
- MEMBARRIER_CMD_SHARED = (1 << 0),
+ MEMBARRIER_CMD_GLOBAL = (1 << 0),
+ MEMBARRIER_CMD_GLOBAL_EXPEDITED = (1 << 1),
+ MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED = (1 << 2),
MEMBARRIER_CMD_PRIVATE_EXPEDITED = (1 << 3),
MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED = (1 << 4),
+ MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE = (1 << 5),
+ MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE = (1 << 6),
+ MEMBARRIER_CMD_SHARED = MEMBARRIER_CMD_GLOBAL,
};
#endif
diff --git a/libc/kernel/uapi/linux/msdos_fs.h b/libc/kernel/uapi/linux/msdos_fs.h
index 9daf251..60ee22a 100644
--- a/libc/kernel/uapi/linux/msdos_fs.h
+++ b/libc/kernel/uapi/linux/msdos_fs.h
@@ -21,7 +21,9 @@
#include <linux/types.h>
#include <linux/magic.h>
#include <asm/byteorder.h>
+#ifndef SECTOR_SIZE
#define SECTOR_SIZE 512
+#endif
#define SECTOR_BITS 9
#define MSDOS_DPB (MSDOS_DPS)
#define MSDOS_DPB_BITS 4
diff --git a/libc/kernel/uapi/linux/msg.h b/libc/kernel/uapi/linux/msg.h
index 89d8d38..20d8d4f 100644
--- a/libc/kernel/uapi/linux/msg.h
+++ b/libc/kernel/uapi/linux/msg.h
@@ -21,6 +21,7 @@
#include <linux/ipc.h>
#define MSG_STAT 11
#define MSG_INFO 12
+#define MSG_STAT_ANY 13
#define MSG_NOERROR 010000
#define MSG_EXCEPT 020000
#define MSG_COPY 040000
diff --git a/libc/kernel/uapi/linux/ncsi.h b/libc/kernel/uapi/linux/ncsi.h
new file mode 100644
index 0000000..6b128e4
--- /dev/null
+++ b/libc/kernel/uapi/linux/ncsi.h
@@ -0,0 +1,62 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef __UAPI_NCSI_NETLINK_H__
+#define __UAPI_NCSI_NETLINK_H__
+enum ncsi_nl_commands {
+ NCSI_CMD_UNSPEC,
+ NCSI_CMD_PKG_INFO,
+ NCSI_CMD_SET_INTERFACE,
+ NCSI_CMD_CLEAR_INTERFACE,
+ __NCSI_CMD_AFTER_LAST,
+ NCSI_CMD_MAX = __NCSI_CMD_AFTER_LAST - 1
+};
+enum ncsi_nl_attrs {
+ NCSI_ATTR_UNSPEC,
+ NCSI_ATTR_IFINDEX,
+ NCSI_ATTR_PACKAGE_LIST,
+ NCSI_ATTR_PACKAGE_ID,
+ NCSI_ATTR_CHANNEL_ID,
+ __NCSI_ATTR_AFTER_LAST,
+ NCSI_ATTR_MAX = __NCSI_ATTR_AFTER_LAST - 1
+};
+enum ncsi_nl_pkg_attrs {
+ NCSI_PKG_ATTR_UNSPEC,
+ NCSI_PKG_ATTR,
+ NCSI_PKG_ATTR_ID,
+ NCSI_PKG_ATTR_FORCED,
+ NCSI_PKG_ATTR_CHANNEL_LIST,
+ __NCSI_PKG_ATTR_AFTER_LAST,
+ NCSI_PKG_ATTR_MAX = __NCSI_PKG_ATTR_AFTER_LAST - 1
+};
+enum ncsi_nl_channel_attrs {
+ NCSI_CHANNEL_ATTR_UNSPEC,
+ NCSI_CHANNEL_ATTR,
+ NCSI_CHANNEL_ATTR_ID,
+ NCSI_CHANNEL_ATTR_VERSION_MAJOR,
+ NCSI_CHANNEL_ATTR_VERSION_MINOR,
+ NCSI_CHANNEL_ATTR_VERSION_STR,
+ NCSI_CHANNEL_ATTR_LINK_STATE,
+ NCSI_CHANNEL_ATTR_ACTIVE,
+ NCSI_CHANNEL_ATTR_FORCED,
+ NCSI_CHANNEL_ATTR_VLAN_LIST,
+ NCSI_CHANNEL_ATTR_VLAN_ID,
+ __NCSI_CHANNEL_ATTR_AFTER_LAST,
+ NCSI_CHANNEL_ATTR_MAX = __NCSI_CHANNEL_ATTR_AFTER_LAST - 1
+};
+#endif
diff --git a/libc/kernel/uapi/linux/ndctl.h b/libc/kernel/uapi/linux/ndctl.h
index 44c9ee0..bee0b1c 100644
--- a/libc/kernel/uapi/linux/ndctl.h
+++ b/libc/kernel/uapi/linux/ndctl.h
@@ -19,49 +19,6 @@
#ifndef __NDCTL_H__
#define __NDCTL_H__
#include <linux/types.h>
-struct nd_cmd_smart {
- __u32 status;
- __u8 data[128];
-} __packed;
-#define ND_SMART_HEALTH_VALID (1 << 0)
-#define ND_SMART_SPARES_VALID (1 << 1)
-#define ND_SMART_USED_VALID (1 << 2)
-#define ND_SMART_TEMP_VALID (1 << 3)
-#define ND_SMART_CTEMP_VALID (1 << 4)
-#define ND_SMART_ALARM_VALID (1 << 9)
-#define ND_SMART_SHUTDOWN_VALID (1 << 10)
-#define ND_SMART_VENDOR_VALID (1 << 11)
-#define ND_SMART_SPARE_TRIP (1 << 0)
-#define ND_SMART_TEMP_TRIP (1 << 1)
-#define ND_SMART_CTEMP_TRIP (1 << 2)
-#define ND_SMART_NON_CRITICAL_HEALTH (1 << 0)
-#define ND_SMART_CRITICAL_HEALTH (1 << 1)
-#define ND_SMART_FATAL_HEALTH (1 << 2)
-struct nd_smart_payload {
- __u32 flags;
- __u8 reserved0[4];
- __u8 health;
- __u8 spares;
- __u8 life_used;
- __u8 alarm_flags;
- __u16 temperature;
- __u16 ctrl_temperature;
- __u8 reserved1[15];
- __u8 shutdown_state;
- __u32 vendor_size;
- __u8 vendor_data[92];
-} __packed;
-struct nd_cmd_smart_threshold {
- __u32 status;
- __u8 data[8];
-} __packed;
-struct nd_smart_threshold_payload {
- __u8 alarm_control;
- __u8 reserved0;
- __u16 temperature;
- __u8 spares;
- __u8 reserved[3];
-} __packed;
struct nd_cmd_dimm_flags {
__u32 status;
__u32 flags;
@@ -158,8 +115,6 @@
ND_CONFIG_LOCKED = 1,
};
#define ND_IOCTL 'N'
-#define ND_IOCTL_SMART _IOWR(ND_IOCTL, ND_CMD_SMART, struct nd_cmd_smart)
-#define ND_IOCTL_SMART_THRESHOLD _IOWR(ND_IOCTL, ND_CMD_SMART_THRESHOLD, struct nd_cmd_smart_threshold)
#define ND_IOCTL_DIMM_FLAGS _IOWR(ND_IOCTL, ND_CMD_DIMM_FLAGS, struct nd_cmd_dimm_flags)
#define ND_IOCTL_GET_CONFIG_SIZE _IOWR(ND_IOCTL, ND_CMD_GET_CONFIG_SIZE, struct nd_cmd_get_config_size)
#define ND_IOCTL_GET_CONFIG_DATA _IOWR(ND_IOCTL, ND_CMD_GET_CONFIG_DATA, struct nd_cmd_get_config_data_hdr)
@@ -186,7 +141,7 @@
ND_DRIVER_DAX_PMEM = 1 << ND_DEVICE_DAX_PMEM,
};
enum {
- ND_MIN_NAMESPACE_SIZE = 0x00400000,
+ ND_MIN_NAMESPACE_SIZE = PAGE_SIZE,
};
enum ars_masks {
ARS_STATUS_MASK = 0x0000FFFF,
diff --git a/libc/kernel/uapi/linux/netfilter/nf_conntrack_common.h b/libc/kernel/uapi/linux/netfilter/nf_conntrack_common.h
index 0d35c15..2259e09 100644
--- a/libc/kernel/uapi/linux/netfilter/nf_conntrack_common.h
+++ b/libc/kernel/uapi/linux/netfilter/nf_conntrack_common.h
@@ -62,7 +62,9 @@
IPS_UNTRACKED = (1 << IPS_UNTRACKED_BIT),
IPS_HELPER_BIT = 13,
IPS_HELPER = (1 << IPS_HELPER_BIT),
- IPS_UNCHANGEABLE_MASK = (IPS_NAT_DONE_MASK | IPS_NAT_MASK | IPS_EXPECTED | IPS_CONFIRMED | IPS_DYING | IPS_SEQ_ADJUST | IPS_TEMPLATE),
+ IPS_OFFLOAD_BIT = 14,
+ IPS_OFFLOAD = (1 << IPS_OFFLOAD_BIT),
+ IPS_UNCHANGEABLE_MASK = (IPS_NAT_DONE_MASK | IPS_NAT_MASK | IPS_EXPECTED | IPS_CONFIRMED | IPS_DYING | IPS_SEQ_ADJUST | IPS_TEMPLATE | IPS_OFFLOAD),
__IPS_MAX_BIT = 14,
};
enum ip_conntrack_events {
@@ -78,6 +80,7 @@
IPCT_NATSEQADJ = IPCT_SEQADJ,
IPCT_SECMARK,
IPCT_LABEL,
+ IPCT_SYNPROXY,
};
enum ip_conntrack_expect_events {
IPEXP_NEW,
diff --git a/libc/kernel/uapi/linux/netfilter/nf_conntrack_tcp.h b/libc/kernel/uapi/linux/netfilter/nf_conntrack_tcp.h
index e76aa9b..8894aa1 100644
--- a/libc/kernel/uapi/linux/netfilter/nf_conntrack_tcp.h
+++ b/libc/kernel/uapi/linux/netfilter/nf_conntrack_tcp.h
@@ -44,6 +44,7 @@
#define IP_CT_TCP_FLAG_DATA_UNACKNOWLEDGED 0x10
#define IP_CT_TCP_FLAG_MAXACK_SET 0x20
#define IP_CT_EXP_CHALLENGE_ACK 0x40
+#define IP_CT_TCP_SIMULTANEOUS_OPEN 0x80
struct nf_ct_tcp_flags {
__u8 flags;
__u8 mask;
diff --git a/libc/kernel/uapi/linux/netfilter/nf_tables.h b/libc/kernel/uapi/linux/netfilter/nf_tables.h
index 169fb33..610594c 100644
--- a/libc/kernel/uapi/linux/netfilter/nf_tables.h
+++ b/libc/kernel/uapi/linux/netfilter/nf_tables.h
@@ -81,6 +81,9 @@
NFT_MSG_GETOBJ,
NFT_MSG_DELOBJ,
NFT_MSG_GETOBJ_RESET,
+ NFT_MSG_NEWFLOWTABLE,
+ NFT_MSG_GETFLOWTABLE,
+ NFT_MSG_DELFLOWTABLE,
NFT_MSG_MAX,
};
enum nft_list_attributes {
@@ -105,6 +108,8 @@
NFTA_TABLE_NAME,
NFTA_TABLE_FLAGS,
NFTA_TABLE_USE,
+ NFTA_TABLE_HANDLE,
+ NFTA_TABLE_PAD,
__NFTA_TABLE_MAX
};
#define NFTA_TABLE_MAX (__NFTA_TABLE_MAX - 1)
@@ -183,6 +188,7 @@
NFTA_SET_USERDATA,
NFTA_SET_PAD,
NFTA_SET_OBJ_TYPE,
+ NFTA_SET_HANDLE,
__NFTA_SET_MAX
};
#define NFTA_SET_MAX (__NFTA_SET_MAX - 1)
@@ -405,6 +411,7 @@
NFT_META_OIFGROUP,
NFT_META_CGROUP,
NFT_META_PRANDOM,
+ NFT_META_SECPATH,
};
enum nft_rt_keys {
NFT_RT_CLASSID,
@@ -463,6 +470,10 @@
NFT_CT_AVGPKT,
NFT_CT_ZONE,
NFT_CT_EVENTMASK,
+ NFT_CT_SRC_IP,
+ NFT_CT_DST_IP,
+ NFT_CT_SRC_IP6,
+ NFT_CT_DST_IP6,
};
enum nft_ct_attributes {
NFTA_CT_UNSPEC,
@@ -473,6 +484,12 @@
__NFTA_CT_MAX
};
#define NFTA_CT_MAX (__NFTA_CT_MAX - 1)
+enum nft_offload_attributes {
+ NFTA_FLOW_UNSPEC,
+ NFTA_FLOW_TABLE_NAME,
+ __NFTA_FLOW_MAX,
+};
+#define NFTA_FLOW_MAX (__NFTA_FLOW_MAX - 1)
enum nft_limit_type {
NFT_LIMIT_PKTS,
NFT_LIMIT_PKT_BYTES
@@ -664,9 +681,36 @@
NFTA_OBJ_TYPE,
NFTA_OBJ_DATA,
NFTA_OBJ_USE,
+ NFTA_OBJ_HANDLE,
+ NFTA_OBJ_PAD,
__NFTA_OBJ_MAX
};
#define NFTA_OBJ_MAX (__NFTA_OBJ_MAX - 1)
+enum nft_flowtable_attributes {
+ NFTA_FLOWTABLE_UNSPEC,
+ NFTA_FLOWTABLE_TABLE,
+ NFTA_FLOWTABLE_NAME,
+ NFTA_FLOWTABLE_HOOK,
+ NFTA_FLOWTABLE_USE,
+ NFTA_FLOWTABLE_HANDLE,
+ NFTA_FLOWTABLE_PAD,
+ __NFTA_FLOWTABLE_MAX
+};
+#define NFTA_FLOWTABLE_MAX (__NFTA_FLOWTABLE_MAX - 1)
+enum nft_flowtable_hook_attributes {
+ NFTA_FLOWTABLE_HOOK_UNSPEC,
+ NFTA_FLOWTABLE_HOOK_NUM,
+ NFTA_FLOWTABLE_HOOK_PRIORITY,
+ NFTA_FLOWTABLE_HOOK_DEVS,
+ __NFTA_FLOWTABLE_HOOK_MAX
+};
+#define NFTA_FLOWTABLE_HOOK_MAX (__NFTA_FLOWTABLE_HOOK_MAX - 1)
+enum nft_devices_attributes {
+ NFTA_DEVICE_UNSPEC,
+ NFTA_DEVICE_NAME,
+ __NFTA_DEVICE_MAX
+};
+#define NFTA_DEVICE_MAX (__NFTA_DEVICE_MAX - 1)
enum nft_trace_attributes {
NFTA_TRACE_UNSPEC,
NFTA_TRACE_TABLE,
diff --git a/libc/kernel/uapi/linux/netfilter/nfnetlink_conntrack.h b/libc/kernel/uapi/linux/netfilter/nfnetlink_conntrack.h
index a961723..1347820 100644
--- a/libc/kernel/uapi/linux/netfilter/nfnetlink_conntrack.h
+++ b/libc/kernel/uapi/linux/netfilter/nfnetlink_conntrack.h
@@ -65,6 +65,7 @@
CTA_MARK_MASK,
CTA_LABELS,
CTA_LABELS_MASK,
+ CTA_SYNPROXY,
__CTA_MAX
};
#define CTA_MAX (__CTA_MAX - 1)
@@ -187,6 +188,14 @@
__CTA_NAT_SEQ_MAX
};
#define CTA_NAT_SEQ_MAX (__CTA_NAT_SEQ_MAX - 1)
+enum ctattr_synproxy {
+ CTA_SYNPROXY_UNSPEC,
+ CTA_SYNPROXY_ISN,
+ CTA_SYNPROXY_ITS,
+ CTA_SYNPROXY_TSOFF,
+ __CTA_SYNPROXY_MAX,
+};
+#define CTA_SYNPROXY_MAX (__CTA_SYNPROXY_MAX - 1)
enum ctattr_expect {
CTA_EXPECT_UNSPEC,
CTA_EXPECT_MASTER,
diff --git a/libc/kernel/uapi/linux/netfilter/xt_connlimit.h b/libc/kernel/uapi/linux/netfilter/xt_connlimit.h
index 262bc2a..9ff2de9 100644
--- a/libc/kernel/uapi/linux/netfilter/xt_connlimit.h
+++ b/libc/kernel/uapi/linux/netfilter/xt_connlimit.h
@@ -35,6 +35,6 @@
};
unsigned int limit;
__u32 flags;
- struct xt_connlimit_data * data __attribute__((aligned(8)));
+ struct nf_conncount_data * data __attribute__((aligned(8)));
};
#endif
diff --git a/libc/kernel/uapi/linux/netfilter/xt_connmark.h b/libc/kernel/uapi/linux/netfilter/xt_connmark.h
index ef4c1d0..f14474f 100644
--- a/libc/kernel/uapi/linux/netfilter/xt_connmark.h
+++ b/libc/kernel/uapi/linux/netfilter/xt_connmark.h
@@ -24,10 +24,18 @@
XT_CONNMARK_SAVE,
XT_CONNMARK_RESTORE
};
+enum {
+ D_SHIFT_LEFT = 0,
+ D_SHIFT_RIGHT,
+};
struct xt_connmark_tginfo1 {
__u32 ctmark, ctmask, nfmask;
__u8 mode;
};
+struct xt_connmark_tginfo2 {
+ __u32 ctmark, ctmask, nfmask;
+ __u8 shift_dir, shift_bits, mode;
+};
struct xt_connmark_mtinfo1 {
__u32 mark, mask;
__u8 invert;
diff --git a/libc/kernel/uapi/linux/netfilter_bridge/ebt_ip.h b/libc/kernel/uapi/linux/netfilter_bridge/ebt_ip.h
index ef8edab..6ee8afb 100644
--- a/libc/kernel/uapi/linux/netfilter_bridge/ebt_ip.h
+++ b/libc/kernel/uapi/linux/netfilter_bridge/ebt_ip.h
@@ -25,7 +25,9 @@
#define EBT_IP_PROTO 0x08
#define EBT_IP_SPORT 0x10
#define EBT_IP_DPORT 0x20
-#define EBT_IP_MASK (EBT_IP_SOURCE | EBT_IP_DEST | EBT_IP_TOS | EBT_IP_PROTO | EBT_IP_SPORT | EBT_IP_DPORT)
+#define EBT_IP_ICMP 0x40
+#define EBT_IP_IGMP 0x80
+#define EBT_IP_MASK (EBT_IP_SOURCE | EBT_IP_DEST | EBT_IP_TOS | EBT_IP_PROTO | EBT_IP_SPORT | EBT_IP_DPORT | EBT_IP_ICMP | EBT_IP_IGMP)
#define EBT_IP_MATCH "ip"
struct ebt_ip_info {
__be32 saddr;
@@ -36,7 +38,14 @@
__u8 protocol;
__u8 bitmask;
__u8 invflags;
- __u16 sport[2];
- __u16 dport[2];
+ union {
+ __u16 sport[2];
+ __u8 icmp_type[2];
+ __u8 igmp_type[2];
+ };
+ union {
+ __u16 dport[2];
+ __u8 icmp_code[2];
+ };
};
#endif
diff --git a/libc/kernel/uapi/linux/netfilter_bridge/ebtables.h b/libc/kernel/uapi/linux/netfilter_bridge/ebtables.h
index ba6ce91..e102756 100644
--- a/libc/kernel/uapi/linux/netfilter_bridge/ebtables.h
+++ b/libc/kernel/uapi/linux/netfilter_bridge/ebtables.h
@@ -24,6 +24,7 @@
#define EBT_TABLE_MAXNAMELEN 32
#define EBT_CHAIN_MAXNAMELEN EBT_TABLE_MAXNAMELEN
#define EBT_FUNCTION_MAXNAMELEN EBT_TABLE_MAXNAMELEN
+#define EBT_EXTENSION_MAXNAMELEN 31
#define EBT_ACCEPT - 1
#define EBT_DROP - 2
#define EBT_CONTINUE - 3
@@ -80,7 +81,10 @@
#define EBT_INV_MASK (EBT_IPROTO | EBT_IIN | EBT_IOUT | EBT_ILOGICALIN | EBT_ILOGICALOUT | EBT_ISOURCE | EBT_IDEST)
struct ebt_entry_match {
union {
- char name[EBT_FUNCTION_MAXNAMELEN];
+ struct {
+ char name[EBT_EXTENSION_MAXNAMELEN];
+ uint8_t revision;
+ };
struct xt_match * match;
} u;
unsigned int match_size;
@@ -88,7 +92,10 @@
};
struct ebt_entry_watcher {
union {
- char name[EBT_FUNCTION_MAXNAMELEN];
+ struct {
+ char name[EBT_EXTENSION_MAXNAMELEN];
+ uint8_t revision;
+ };
struct xt_target * watcher;
} u;
unsigned int watcher_size;
@@ -96,7 +103,10 @@
};
struct ebt_entry_target {
union {
- char name[EBT_FUNCTION_MAXNAMELEN];
+ struct {
+ char name[EBT_EXTENSION_MAXNAMELEN];
+ uint8_t revision;
+ };
struct xt_target * target;
} u;
unsigned int target_size;
diff --git a/libc/kernel/uapi/linux/netfilter_decnet.h b/libc/kernel/uapi/linux/netfilter_decnet.h
index cde4645..a9dcdd3 100644
--- a/libc/kernel/uapi/linux/netfilter_decnet.h
+++ b/libc/kernel/uapi/linux/netfilter_decnet.h
@@ -24,6 +24,7 @@
#define NFC_DN_DST 0x0002
#define NFC_DN_IF_IN 0x0004
#define NFC_DN_IF_OUT 0x0008
+#define NF_DN_NUMHOOKS 7
#define NF_DN_PRE_ROUTING 0
#define NF_DN_LOCAL_IN 1
#define NF_DN_FORWARD 2
@@ -31,7 +32,6 @@
#define NF_DN_POST_ROUTING 4
#define NF_DN_HELLO 5
#define NF_DN_ROUTE 6
-#define NF_DN_NUMHOOKS 7
enum nf_dn_hook_priorities {
NF_DN_PRI_FIRST = INT_MIN,
NF_DN_PRI_CONNTRACK = - 200,
diff --git a/libc/kernel/uapi/linux/netfilter_ipv4.h b/libc/kernel/uapi/linux/netfilter_ipv4.h
index 06a6247..7eed768 100644
--- a/libc/kernel/uapi/linux/netfilter_ipv4.h
+++ b/libc/kernel/uapi/linux/netfilter_ipv4.h
@@ -40,6 +40,7 @@
#define NF_IP_NUMHOOKS 5
enum nf_ip_hook_priorities {
NF_IP_PRI_FIRST = INT_MIN,
+ NF_IP_PRI_RAW_BEFORE_DEFRAG = - 450,
NF_IP_PRI_CONNTRACK_DEFRAG = - 400,
NF_IP_PRI_RAW = - 300,
NF_IP_PRI_SELINUX_FIRST = - 225,
diff --git a/libc/kernel/uapi/linux/netfilter_ipv6.h b/libc/kernel/uapi/linux/netfilter_ipv6.h
index d81134f..2054532 100644
--- a/libc/kernel/uapi/linux/netfilter_ipv6.h
+++ b/libc/kernel/uapi/linux/netfilter_ipv6.h
@@ -40,6 +40,7 @@
#define NF_IP6_NUMHOOKS 5
enum nf_ip6_hook_priorities {
NF_IP6_PRI_FIRST = INT_MIN,
+ NF_IP6_PRI_RAW_BEFORE_DEFRAG = - 450,
NF_IP6_PRI_CONNTRACK_DEFRAG = - 400,
NF_IP6_PRI_RAW = - 300,
NF_IP6_PRI_SELINUX_FIRST = - 225,
diff --git a/libc/kernel/uapi/linux/netfilter_ipv6/ip6t_srh.h b/libc/kernel/uapi/linux/netfilter_ipv6/ip6t_srh.h
new file mode 100644
index 0000000..70fd3e4
--- /dev/null
+++ b/libc/kernel/uapi/linux/netfilter_ipv6/ip6t_srh.h
@@ -0,0 +1,56 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _IP6T_SRH_H
+#define _IP6T_SRH_H
+#include <linux/types.h>
+#include <linux/netfilter.h>
+#define IP6T_SRH_NEXTHDR 0x0001
+#define IP6T_SRH_LEN_EQ 0x0002
+#define IP6T_SRH_LEN_GT 0x0004
+#define IP6T_SRH_LEN_LT 0x0008
+#define IP6T_SRH_SEGS_EQ 0x0010
+#define IP6T_SRH_SEGS_GT 0x0020
+#define IP6T_SRH_SEGS_LT 0x0040
+#define IP6T_SRH_LAST_EQ 0x0080
+#define IP6T_SRH_LAST_GT 0x0100
+#define IP6T_SRH_LAST_LT 0x0200
+#define IP6T_SRH_TAG 0x0400
+#define IP6T_SRH_MASK 0x07FF
+#define IP6T_SRH_INV_NEXTHDR 0x0001
+#define IP6T_SRH_INV_LEN_EQ 0x0002
+#define IP6T_SRH_INV_LEN_GT 0x0004
+#define IP6T_SRH_INV_LEN_LT 0x0008
+#define IP6T_SRH_INV_SEGS_EQ 0x0010
+#define IP6T_SRH_INV_SEGS_GT 0x0020
+#define IP6T_SRH_INV_SEGS_LT 0x0040
+#define IP6T_SRH_INV_LAST_EQ 0x0080
+#define IP6T_SRH_INV_LAST_GT 0x0100
+#define IP6T_SRH_INV_LAST_LT 0x0200
+#define IP6T_SRH_INV_TAG 0x0400
+#define IP6T_SRH_INV_MASK 0x07FF
+struct ip6t_srh {
+ __u8 next_hdr;
+ __u8 hdr_len;
+ __u8 segs_left;
+ __u8 last_entry;
+ __u16 tag;
+ __u16 mt_flags;
+ __u16 mt_invflags;
+};
+#endif
diff --git a/libc/kernel/uapi/linux/nfs.h b/libc/kernel/uapi/linux/nfs.h
index ac11084..e8c0499 100644
--- a/libc/kernel/uapi/linux/nfs.h
+++ b/libc/kernel/uapi/linux/nfs.h
@@ -21,6 +21,7 @@
#include <linux/types.h>
#define NFS_PROGRAM 100003
#define NFS_PORT 2049
+#define NFS_RDMA_PORT 20049
#define NFS_MAXDATA 8192
#define NFS_MAXPATHLEN 1024
#define NFS_MAXNAMLEN 255
diff --git a/libc/kernel/uapi/linux/nl80211.h b/libc/kernel/uapi/linux/nl80211.h
index ebf9448..349b471 100644
--- a/libc/kernel/uapi/linux/nl80211.h
+++ b/libc/kernel/uapi/linux/nl80211.h
@@ -160,6 +160,9 @@
NL80211_CMD_DEL_PMK,
NL80211_CMD_PORT_AUTHORIZED,
NL80211_CMD_RELOAD_REGDB,
+ NL80211_CMD_EXTERNAL_AUTH,
+ NL80211_CMD_STA_OPMODE_CHANGED,
+ NL80211_CMD_CONTROL_PORT_FRAME,
__NL80211_CMD_AFTER_LAST,
NL80211_CMD_MAX = __NL80211_CMD_AFTER_LAST - 1
};
@@ -436,6 +439,11 @@
NL80211_ATTR_WANT_1X_4WAY_HS,
NL80211_ATTR_PMKR0_NAME,
NL80211_ATTR_PORT_AUTHORIZED,
+ NL80211_ATTR_EXTERNAL_AUTH_ACTION,
+ NL80211_ATTR_EXTERNAL_AUTH_SUPPORT,
+ NL80211_ATTR_NSS,
+ NL80211_ATTR_ACK_SIGNAL,
+ NL80211_ATTR_CONTROL_PORT_OVER_NL80211,
__NL80211_ATTR_AFTER_LAST,
NUM_NL80211_ATTR = __NL80211_ATTR_AFTER_LAST,
NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1
@@ -465,6 +473,7 @@
#define NL80211_ATTR_KEY NL80211_ATTR_KEY
#define NL80211_ATTR_KEYS NL80211_ATTR_KEYS
#define NL80211_ATTR_FEATURE_FLAGS NL80211_ATTR_FEATURE_FLAGS
+#define NL80211_WIPHY_NAME_MAXLEN 64
#define NL80211_MAX_SUPP_RATES 32
#define NL80211_MAX_SUPP_HT_RATES 77
#define NL80211_MAX_SUPP_REG_RULES 64
@@ -579,6 +588,7 @@
NL80211_STA_INFO_TID_STATS,
NL80211_STA_INFO_RX_DURATION,
NL80211_STA_INFO_PAD,
+ NL80211_STA_INFO_ACK_SIGNAL,
__NL80211_STA_INFO_AFTER_LAST,
NL80211_STA_INFO_MAX = __NL80211_STA_INFO_AFTER_LAST - 1
};
@@ -876,6 +886,7 @@
NL80211_BSS_PAD,
NL80211_BSS_PARENT_TSF,
NL80211_BSS_PARENT_BSSID,
+ NL80211_BSS_CHAIN_SIGNAL,
__NL80211_BSS_AFTER_LAST,
NL80211_BSS_MAX = __NL80211_BSS_AFTER_LAST - 1
};
@@ -1202,6 +1213,11 @@
NL80211_EXT_FEATURE_OCE_PROBE_REQ_HIGH_TX_RATE,
NL80211_EXT_FEATURE_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION,
NL80211_EXT_FEATURE_MFP_OPTIONAL,
+ NL80211_EXT_FEATURE_LOW_SPAN_SCAN,
+ NL80211_EXT_FEATURE_LOW_POWER_SCAN,
+ NL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN,
+ NL80211_EXT_FEATURE_DFS_OFFLOAD,
+ NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211,
NUM_NL80211_EXT_FEATURES,
MAX_NL80211_EXT_FEATURES = NUM_NL80211_EXT_FEATURES - 1
};
@@ -1230,6 +1246,9 @@
NL80211_SCAN_FLAG_ACCEPT_BCAST_PROBE_RESP = 1 << 5,
NL80211_SCAN_FLAG_OCE_PROBE_REQ_HIGH_TX_RATE = 1 << 6,
NL80211_SCAN_FLAG_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION = 1 << 7,
+ NL80211_SCAN_FLAG_LOW_SPAN = 1 << 8,
+ NL80211_SCAN_FLAG_LOW_POWER = 1 << 9,
+ NL80211_SCAN_FLAG_HIGH_ACCURACY = 1 << 10,
};
enum nl80211_acl_policy {
NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED,
@@ -1248,6 +1267,7 @@
NL80211_RADAR_CAC_ABORTED,
NL80211_RADAR_NOP_FINISHED,
NL80211_RADAR_PRE_CAC_EXPIRED,
+ NL80211_RADAR_CAC_STARTED,
};
enum nl80211_dfs_state {
NL80211_DFS_USABLE,
@@ -1353,4 +1373,8 @@
NUM_NL80211_NAN_MATCH_ATTR,
NL80211_NAN_MATCH_ATTR_MAX = NUM_NL80211_NAN_MATCH_ATTR - 1
};
+enum nl80211_external_auth_action {
+ NL80211_EXTERNAL_AUTH_START,
+ NL80211_EXTERNAL_AUTH_ABORT,
+};
#endif
diff --git a/libc/kernel/uapi/linux/nubus.h b/libc/kernel/uapi/linux/nubus.h
index 530005b..141c2f2 100644
--- a/libc/kernel/uapi/linux/nubus.h
+++ b/libc/kernel/uapi/linux/nubus.h
@@ -155,16 +155,4 @@
NUBUS_RESID_FIFTHMODE = 0x0084,
NUBUS_RESID_SIXTHMODE = 0x0085
};
-struct nubus_dir {
- unsigned char * base;
- unsigned char * ptr;
- int done;
- int mask;
-};
-struct nubus_dirent {
- unsigned char * base;
- unsigned char type;
- __u32 data;
- int mask;
-};
#endif
diff --git a/libc/kernel/uapi/linux/openvswitch.h b/libc/kernel/uapi/linux/openvswitch.h
index bea44d0..1dba16e 100644
--- a/libc/kernel/uapi/linux/openvswitch.h
+++ b/libc/kernel/uapi/linux/openvswitch.h
@@ -204,6 +204,7 @@
OVS_TUNNEL_KEY_ATTR_IPV6_SRC,
OVS_TUNNEL_KEY_ATTR_IPV6_DST,
OVS_TUNNEL_KEY_ATTR_PAD,
+ OVS_TUNNEL_KEY_ATTR_ERSPAN_OPTS,
__OVS_TUNNEL_KEY_ATTR_MAX
};
#define OVS_TUNNEL_KEY_ATTR_MAX (__OVS_TUNNEL_KEY_ATTR_MAX - 1)
diff --git a/libc/kernel/uapi/linux/pci_regs.h b/libc/kernel/uapi/linux/pci_regs.h
index 148f2b4..4ef3837 100644
--- a/libc/kernel/uapi/linux/pci_regs.h
+++ b/libc/kernel/uapi/linux/pci_regs.h
@@ -430,6 +430,7 @@
#define PCI_EXP_LNKCAP_SLS_2_5GB 0x00000001
#define PCI_EXP_LNKCAP_SLS_5_0GB 0x00000002
#define PCI_EXP_LNKCAP_SLS_8_0GB 0x00000003
+#define PCI_EXP_LNKCAP_SLS_16_0GB 0x00000004
#define PCI_EXP_LNKCAP_MLW 0x000003f0
#define PCI_EXP_LNKCAP_ASPMS 0x00000c00
#define PCI_EXP_LNKCAP_L0SEL 0x00007000
@@ -457,6 +458,7 @@
#define PCI_EXP_LNKSTA_CLS_2_5GB 0x0001
#define PCI_EXP_LNKSTA_CLS_5_0GB 0x0002
#define PCI_EXP_LNKSTA_CLS_8_0GB 0x0003
+#define PCI_EXP_LNKSTA_CLS_16_0GB 0x0004
#define PCI_EXP_LNKSTA_NLW 0x03f0
#define PCI_EXP_LNKSTA_NLW_X1 0x0010
#define PCI_EXP_LNKSTA_NLW_X2 0x0020
@@ -524,15 +526,19 @@
#define PCI_EXP_RTSTA_PME 0x00010000
#define PCI_EXP_RTSTA_PENDING 0x00020000
#define PCI_EXP_DEVCAP2 36
+#define PCI_EXP_DEVCAP2_COMP_TMOUT_DIS 0x00000010
#define PCI_EXP_DEVCAP2_ARI 0x00000020
#define PCI_EXP_DEVCAP2_ATOMIC_ROUTE 0x00000040
+#define PCI_EXP_DEVCAP2_ATOMIC_COMP32 0x00000080
#define PCI_EXP_DEVCAP2_ATOMIC_COMP64 0x00000100
+#define PCI_EXP_DEVCAP2_ATOMIC_COMP128 0x00000200
#define PCI_EXP_DEVCAP2_LTR 0x00000800
#define PCI_EXP_DEVCAP2_OBFF_MASK 0x000c0000
#define PCI_EXP_DEVCAP2_OBFF_MSG 0x00040000
#define PCI_EXP_DEVCAP2_OBFF_WAKE 0x00080000
#define PCI_EXP_DEVCTL2 40
#define PCI_EXP_DEVCTL2_COMP_TIMEOUT 0x000f
+#define PCI_EXP_DEVCTL2_COMP_TMOUT_DIS 0x0010
#define PCI_EXP_DEVCTL2_ARI 0x0020
#define PCI_EXP_DEVCTL2_ATOMIC_REQ 0x0040
#define PCI_EXP_DEVCTL2_ATOMIC_EGRESS_BLOCK 0x0080
@@ -548,6 +554,7 @@
#define PCI_EXP_LNKCAP2_SLS_2_5GB 0x00000002
#define PCI_EXP_LNKCAP2_SLS_5_0GB 0x00000004
#define PCI_EXP_LNKCAP2_SLS_8_0GB 0x00000008
+#define PCI_EXP_LNKCAP2_SLS_16_0GB 0x00000010
#define PCI_EXP_LNKCAP2_CROSSLINK 0x00000100
#define PCI_EXP_LNKCTL2 48
#define PCI_EXP_LNKSTA2 50
@@ -819,19 +826,21 @@
#define PCI_TPH_CAP_ST_SHIFT 16
#define PCI_TPH_BASE_SIZEOF 12
#define PCI_EXP_DPC_CAP 4
-#define PCI_EXP_DPC_IRQ 0x1f
-#define PCI_EXP_DPC_CAP_RP_EXT 0x20
-#define PCI_EXP_DPC_CAP_POISONED_TLP 0x40
-#define PCI_EXP_DPC_CAP_SW_TRIGGER 0x80
-#define PCI_EXP_DPC_RP_PIO_LOG_SIZE 0xF00
+#define PCI_EXP_DPC_IRQ 0x001F
+#define PCI_EXP_DPC_CAP_RP_EXT 0x0020
+#define PCI_EXP_DPC_CAP_POISONED_TLP 0x0040
+#define PCI_EXP_DPC_CAP_SW_TRIGGER 0x0080
+#define PCI_EXP_DPC_RP_PIO_LOG_SIZE 0x0F00
#define PCI_EXP_DPC_CAP_DL_ACTIVE 0x1000
#define PCI_EXP_DPC_CTL 6
-#define PCI_EXP_DPC_CTL_EN_NONFATAL 0x02
-#define PCI_EXP_DPC_CTL_INT_EN 0x08
+#define PCI_EXP_DPC_CTL_EN_NONFATAL 0x0002
+#define PCI_EXP_DPC_CTL_INT_EN 0x0008
#define PCI_EXP_DPC_STATUS 8
-#define PCI_EXP_DPC_STATUS_TRIGGER 0x01
-#define PCI_EXP_DPC_STATUS_INTERRUPT 0x08
-#define PCI_EXP_DPC_RP_BUSY 0x10
+#define PCI_EXP_DPC_STATUS_TRIGGER 0x0001
+#define PCI_EXP_DPC_STATUS_TRIGGER_RSN 0x0006
+#define PCI_EXP_DPC_STATUS_INTERRUPT 0x0008
+#define PCI_EXP_DPC_RP_BUSY 0x0010
+#define PCI_EXP_DPC_STATUS_TRIGGER_RSN_EXT 0x0060
#define PCI_EXP_DPC_SOURCE_ID 10
#define PCI_EXP_DPC_RP_PIO_STATUS 0x0C
#define PCI_EXP_DPC_RP_PIO_MASK 0x10
diff --git a/libc/kernel/uapi/linux/perf_event.h b/libc/kernel/uapi/linux/perf_event.h
index 97a2e99..dc1e32c 100644
--- a/libc/kernel/uapi/linux/perf_event.h
+++ b/libc/kernel/uapi/linux/perf_event.h
@@ -205,10 +205,14 @@
__u32 bp_type;
union {
__u64 bp_addr;
+ __u64 kprobe_func;
+ __u64 uprobe_path;
__u64 config1;
};
union {
__u64 bp_len;
+ __u64 kprobe_addr;
+ __u64 probe_offset;
__u64 config2;
};
__u64 branch_sample_type;
@@ -220,6 +224,11 @@
__u16 sample_max_stack;
__u16 __reserved_2;
};
+struct perf_event_query_bpf {
+ __u32 ids_len;
+ __u32 prog_cnt;
+ __u32 ids[0];
+};
#define perf_flags(attr) (* (& (attr)->read_format + 1))
#define PERF_EVENT_IOC_ENABLE _IO('$', 0)
#define PERF_EVENT_IOC_DISABLE _IO('$', 1)
@@ -231,6 +240,8 @@
#define PERF_EVENT_IOC_ID _IOR('$', 7, __u64 *)
#define PERF_EVENT_IOC_SET_BPF _IOW('$', 8, __u32)
#define PERF_EVENT_IOC_PAUSE_OUTPUT _IOW('$', 9, __u32)
+#define PERF_EVENT_IOC_QUERY_BPF _IOWR('$', 10, struct perf_event_query_bpf *)
+#define PERF_EVENT_IOC_MODIFY_ATTRIBUTES _IOW('$', 11, struct perf_event_attr *)
enum perf_event_ioc_flags {
PERF_IOC_FLAG_GROUP = 1U << 0,
};
@@ -276,6 +287,7 @@
#define PERF_RECORD_MISC_COMM_EXEC (1 << 13)
#define PERF_RECORD_MISC_SWITCH_OUT (1 << 13)
#define PERF_RECORD_MISC_EXACT_IP (1 << 14)
+#define PERF_RECORD_MISC_SWITCH_OUT_PREEMPT (1 << 14)
#define PERF_RECORD_MISC_EXT_RESERVED (1 << 15)
struct perf_event_header {
__u32 type;
diff --git a/libc/kernel/uapi/linux/pkt_cls.h b/libc/kernel/uapi/linux/pkt_cls.h
index 4bac8f9..113469c 100644
--- a/libc/kernel/uapi/linux/pkt_cls.h
+++ b/libc/kernel/uapi/linux/pkt_cls.h
@@ -380,6 +380,7 @@
#define TCA_FLOWER_MAX (__TCA_FLOWER_MAX - 1)
enum {
TCA_FLOWER_KEY_FLAGS_IS_FRAGMENT = (1 << 0),
+ TCA_FLOWER_KEY_FLAGS_FRAG_IS_FIRST = (1 << 1),
};
enum {
TCA_MATCHALL_UNSPEC,
@@ -429,7 +430,8 @@
#define TCF_EM_VLAN 6
#define TCF_EM_CANID 7
#define TCF_EM_IPSET 8
-#define TCF_EM_MAX 8
+#define TCF_EM_IPT 9
+#define TCF_EM_MAX 9
enum {
TCF_EM_PROG_TC
};
diff --git a/libc/kernel/uapi/linux/prctl.h b/libc/kernel/uapi/linux/prctl.h
index 55098f5..ba50b14 100644
--- a/libc/kernel/uapi/linux/prctl.h
+++ b/libc/kernel/uapi/linux/prctl.h
@@ -134,4 +134,12 @@
#define PR_SVE_GET_VL 51
#define PR_SVE_VL_LEN_MASK 0xffff
#define PR_SVE_VL_INHERIT (1 << 17)
+#define PR_GET_SPECULATION_CTRL 52
+#define PR_SET_SPECULATION_CTRL 53
+#define PR_SPEC_STORE_BYPASS 0
+#define PR_SPEC_NOT_AFFECTED 0
+#define PR_SPEC_PRCTL (1UL << 0)
+#define PR_SPEC_ENABLE (1UL << 1)
+#define PR_SPEC_DISABLE (1UL << 2)
+#define PR_SPEC_FORCE_DISABLE (1UL << 3)
#endif
diff --git a/libc/kernel/uapi/linux/psci.h b/libc/kernel/uapi/linux/psci.h
index 37d811e..658552a 100644
--- a/libc/kernel/uapi/linux/psci.h
+++ b/libc/kernel/uapi/linux/psci.h
@@ -62,6 +62,7 @@
#define PSCI_VERSION_MAJOR_MASK ~PSCI_VERSION_MINOR_MASK
#define PSCI_VERSION_MAJOR(ver) (((ver) & PSCI_VERSION_MAJOR_MASK) >> PSCI_VERSION_MAJOR_SHIFT)
#define PSCI_VERSION_MINOR(ver) ((ver) & PSCI_VERSION_MINOR_MASK)
+#define PSCI_VERSION(maj,min) ((((maj) << PSCI_VERSION_MAJOR_SHIFT) & PSCI_VERSION_MAJOR_MASK) | ((min) & PSCI_VERSION_MINOR_MASK))
#define PSCI_1_0_FEATURES_CPU_SUSPEND_PF_SHIFT 1
#define PSCI_1_0_FEATURES_CPU_SUSPEND_PF_MASK (0x1 << PSCI_1_0_FEATURES_CPU_SUSPEND_PF_SHIFT)
#define PSCI_RET_SUCCESS 0
diff --git a/libc/kernel/uapi/linux/psp-sev.h b/libc/kernel/uapi/linux/psp-sev.h
new file mode 100644
index 0000000..5f59330
--- /dev/null
+++ b/libc/kernel/uapi/linux/psp-sev.h
@@ -0,0 +1,88 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef __PSP_SEV_USER_H__
+#define __PSP_SEV_USER_H__
+#include <linux/types.h>
+enum {
+ SEV_FACTORY_RESET = 0,
+ SEV_PLATFORM_STATUS,
+ SEV_PEK_GEN,
+ SEV_PEK_CSR,
+ SEV_PDH_GEN,
+ SEV_PDH_CERT_EXPORT,
+ SEV_PEK_CERT_IMPORT,
+ SEV_MAX,
+};
+typedef enum {
+ SEV_RET_SUCCESS = 0,
+ SEV_RET_INVALID_PLATFORM_STATE,
+ SEV_RET_INVALID_GUEST_STATE,
+ SEV_RET_INAVLID_CONFIG,
+ SEV_RET_INVALID_LEN,
+ SEV_RET_ALREADY_OWNED,
+ SEV_RET_INVALID_CERTIFICATE,
+ SEV_RET_POLICY_FAILURE,
+ SEV_RET_INACTIVE,
+ SEV_RET_INVALID_ADDRESS,
+ SEV_RET_BAD_SIGNATURE,
+ SEV_RET_BAD_MEASUREMENT,
+ SEV_RET_ASID_OWNED,
+ SEV_RET_INVALID_ASID,
+ SEV_RET_WBINVD_REQUIRED,
+ SEV_RET_DFFLUSH_REQUIRED,
+ SEV_RET_INVALID_GUEST,
+ SEV_RET_INVALID_COMMAND,
+ SEV_RET_ACTIVE,
+ SEV_RET_HWSEV_RET_PLATFORM,
+ SEV_RET_HWSEV_RET_UNSAFE,
+ SEV_RET_UNSUPPORTED,
+ SEV_RET_MAX,
+} sev_ret_code;
+struct sev_user_data_status {
+ __u8 api_major;
+ __u8 api_minor;
+ __u8 state;
+ __u32 flags;
+ __u8 build;
+ __u32 guest_count;
+} __packed;
+struct sev_user_data_pek_csr {
+ __u64 address;
+ __u32 length;
+} __packed;
+struct sev_user_data_pek_cert_import {
+ __u64 pek_cert_address;
+ __u32 pek_cert_len;
+ __u64 oca_cert_address;
+ __u32 oca_cert_len;
+} __packed;
+struct sev_user_data_pdh_cert_export {
+ __u64 pdh_cert_address;
+ __u32 pdh_cert_len;
+ __u64 cert_chain_address;
+ __u32 cert_chain_len;
+} __packed;
+struct sev_issue_cmd {
+ __u32 cmd;
+ __u64 data;
+ __u32 error;
+} __packed;
+#define SEV_IOC_TYPE 'S'
+#define SEV_ISSUE_CMD _IOWR(SEV_IOC_TYPE, 0x0, struct sev_issue_cmd)
+#endif
diff --git a/libc/kernel/uapi/linux/ptrace.h b/libc/kernel/uapi/linux/ptrace.h
index 7c39b5b..4a68738 100644
--- a/libc/kernel/uapi/linux/ptrace.h
+++ b/libc/kernel/uapi/linux/ptrace.h
@@ -50,6 +50,11 @@
#define PTRACE_GETSIGMASK 0x420a
#define PTRACE_SETSIGMASK 0x420b
#define PTRACE_SECCOMP_GET_FILTER 0x420c
+#define PTRACE_SECCOMP_GET_METADATA 0x420d
+struct seccomp_metadata {
+ __u64 filter_off;
+ __u64 flags;
+};
#define PTRACE_PEEKSIGINFO_SHARED (1 << 0)
#define PTRACE_EVENT_FORK 1
#define PTRACE_EVENT_VFORK 2
diff --git a/libc/kernel/uapi/linux/qemu_fw_cfg.h b/libc/kernel/uapi/linux/qemu_fw_cfg.h
new file mode 100644
index 0000000..173af1f
--- /dev/null
+++ b/libc/kernel/uapi/linux/qemu_fw_cfg.h
@@ -0,0 +1,86 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _LINUX_FW_CFG_H
+#define _LINUX_FW_CFG_H
+#include <linux/types.h>
+#define FW_CFG_ACPI_DEVICE_ID "QEMU0002"
+#define FW_CFG_SIGNATURE 0x00
+#define FW_CFG_ID 0x01
+#define FW_CFG_UUID 0x02
+#define FW_CFG_RAM_SIZE 0x03
+#define FW_CFG_NOGRAPHIC 0x04
+#define FW_CFG_NB_CPUS 0x05
+#define FW_CFG_MACHINE_ID 0x06
+#define FW_CFG_KERNEL_ADDR 0x07
+#define FW_CFG_KERNEL_SIZE 0x08
+#define FW_CFG_KERNEL_CMDLINE 0x09
+#define FW_CFG_INITRD_ADDR 0x0a
+#define FW_CFG_INITRD_SIZE 0x0b
+#define FW_CFG_BOOT_DEVICE 0x0c
+#define FW_CFG_NUMA 0x0d
+#define FW_CFG_BOOT_MENU 0x0e
+#define FW_CFG_MAX_CPUS 0x0f
+#define FW_CFG_KERNEL_ENTRY 0x10
+#define FW_CFG_KERNEL_DATA 0x11
+#define FW_CFG_INITRD_DATA 0x12
+#define FW_CFG_CMDLINE_ADDR 0x13
+#define FW_CFG_CMDLINE_SIZE 0x14
+#define FW_CFG_CMDLINE_DATA 0x15
+#define FW_CFG_SETUP_ADDR 0x16
+#define FW_CFG_SETUP_SIZE 0x17
+#define FW_CFG_SETUP_DATA 0x18
+#define FW_CFG_FILE_DIR 0x19
+#define FW_CFG_FILE_FIRST 0x20
+#define FW_CFG_FILE_SLOTS_MIN 0x10
+#define FW_CFG_WRITE_CHANNEL 0x4000
+#define FW_CFG_ARCH_LOCAL 0x8000
+#define FW_CFG_ENTRY_MASK (~(FW_CFG_WRITE_CHANNEL | FW_CFG_ARCH_LOCAL))
+#define FW_CFG_INVALID 0xffff
+#define FW_CFG_CTL_SIZE 0x02
+#define FW_CFG_MAX_FILE_PATH 56
+#define FW_CFG_SIG_SIZE 4
+#define FW_CFG_VERSION 0x01
+#define FW_CFG_VERSION_DMA 0x02
+struct fw_cfg_file {
+ __be32 size;
+ __be16 select;
+ __u16 reserved;
+ char name[FW_CFG_MAX_FILE_PATH];
+};
+#define FW_CFG_DMA_CTL_ERROR 0x01
+#define FW_CFG_DMA_CTL_READ 0x02
+#define FW_CFG_DMA_CTL_SKIP 0x04
+#define FW_CFG_DMA_CTL_SELECT 0x08
+#define FW_CFG_DMA_CTL_WRITE 0x10
+#define FW_CFG_DMA_SIGNATURE 0x51454d5520434647ULL
+struct fw_cfg_dma_access {
+ __be32 control;
+ __be32 length;
+ __be64 address;
+};
+#define FW_CFG_VMCOREINFO_FILENAME "etc/vmcoreinfo"
+#define FW_CFG_VMCOREINFO_FORMAT_NONE 0x0
+#define FW_CFG_VMCOREINFO_FORMAT_ELF 0x1
+struct fw_cfg_vmcoreinfo {
+ __le16 host_format;
+ __le16 guest_format;
+ __le32 size;
+ __le64 paddr;
+};
+#endif
diff --git a/libc/kernel/uapi/linux/random.h b/libc/kernel/uapi/linux/random.h
index 6ad4f75..3a5fbfd 100644
--- a/libc/kernel/uapi/linux/random.h
+++ b/libc/kernel/uapi/linux/random.h
@@ -27,6 +27,7 @@
#define RNDADDENTROPY _IOW('R', 0x03, int[2])
#define RNDZAPENTCNT _IO('R', 0x04)
#define RNDCLEARPOOL _IO('R', 0x06)
+#define RNDRESEEDCRNG _IO('R', 0x07)
struct rand_pool_info {
int entropy_count;
int buf_size;
diff --git a/libc/kernel/uapi/linux/rds.h b/libc/kernel/uapi/linux/rds.h
index cfb0a3b..c726f54 100644
--- a/libc/kernel/uapi/linux/rds.h
+++ b/libc/kernel/uapi/linux/rds.h
@@ -45,6 +45,8 @@
#define RDS_CMSG_MASKED_ATOMIC_FADD 8
#define RDS_CMSG_MASKED_ATOMIC_CSWP 9
#define RDS_CMSG_RXPATH_LATENCY 11
+#define RDS_CMSG_ZCOPY_COOKIE 12
+#define RDS_CMSG_ZCOPY_COMPLETION 13
#define RDS_INFO_FIRST 10000
#define RDS_INFO_COUNTERS 10000
#define RDS_INFO_CONNECTIONS 10001
@@ -197,6 +199,11 @@
#define RDS_RDMA_CANCELED 2
#define RDS_RDMA_DROPPED 3
#define RDS_RDMA_OTHER_ERROR 4
+#define RDS_MAX_ZCOOKIES 8
+struct rds_zcopy_cookies {
+ __u32 num;
+ __u32 cookies[RDS_MAX_ZCOOKIES];
+};
#define RDS_RDMA_READWRITE 0x0001
#define RDS_RDMA_FENCE 0x0002
#define RDS_RDMA_INVALIDATE 0x0004
diff --git a/libc/kernel/uapi/linux/rtnetlink.h b/libc/kernel/uapi/linux/rtnetlink.h
index 80ba16e..6fffcd3 100644
--- a/libc/kernel/uapi/linux/rtnetlink.h
+++ b/libc/kernel/uapi/linux/rtnetlink.h
@@ -389,8 +389,10 @@
int tcm_ifindex;
__u32 tcm_handle;
__u32 tcm_parent;
+#define tcm_block_index tcm_parent
__u32 tcm_info;
};
+#define TCM_IFINDEX_MAGIC_BLOCK (0xFFFFFFFFU)
enum {
TCA_UNSPEC,
TCA_KIND,
@@ -405,6 +407,8 @@
TCA_DUMP_INVISIBLE,
TCA_CHAIN,
TCA_HW_OFFLOAD,
+ TCA_INGRESS_BLOCK,
+ TCA_EGRESS_BLOCK,
__TCA_MAX
};
#define TCA_MAX (__TCA_MAX - 1)
diff --git a/libc/kernel/uapi/linux/sched.h b/libc/kernel/uapi/linux/sched.h
index 9958fba..20d4956 100644
--- a/libc/kernel/uapi/linux/sched.h
+++ b/libc/kernel/uapi/linux/sched.h
@@ -51,4 +51,6 @@
#define SCHED_RESET_ON_FORK 0x40000000
#define SCHED_FLAG_RESET_ON_FORK 0x01
#define SCHED_FLAG_RECLAIM 0x02
+#define SCHED_FLAG_DL_OVERRUN 0x04
+#define SCHED_FLAG_ALL (SCHED_FLAG_RESET_ON_FORK | SCHED_FLAG_RECLAIM | SCHED_FLAG_DL_OVERRUN)
#endif
diff --git a/libc/kernel/uapi/linux/sctp.h b/libc/kernel/uapi/linux/sctp.h
index cc714ff..1f7fed1 100644
--- a/libc/kernel/uapi/linux/sctp.h
+++ b/libc/kernel/uapi/linux/sctp.h
@@ -58,6 +58,7 @@
#define SCTP_RECVRCVINFO 32
#define SCTP_RECVNXTINFO 33
#define SCTP_DEFAULT_SNDINFO 34
+#define SCTP_AUTH_DEACTIVATE_KEY 35
#define SCTP_SOCKOPT_BINDX_ADD 100
#define SCTP_SOCKOPT_BINDX_REM 101
#define SCTP_SOCKOPT_PEELOFF 102
@@ -79,6 +80,8 @@
#define SCTP_SOCKOPT_PEELOFF_FLAGS 122
#define SCTP_STREAM_SCHEDULER 123
#define SCTP_STREAM_SCHEDULER_VALUE 124
+#define SCTP_INTERLEAVING_SUPPORTED 125
+#define SCTP_SENDMSG_CONNECT 126
#define SCTP_PR_SCTP_NONE 0x0000
#define SCTP_PR_SCTP_TTL 0x0010
#define SCTP_PR_SCTP_RTX 0x0020
@@ -143,11 +146,19 @@
__u32 nxt_length;
sctp_assoc_t nxt_assoc_id;
};
+struct sctp_prinfo {
+ __u16 pr_policy;
+ __u32 pr_value;
+};
+struct sctp_authinfo {
+ __u16 auth_keynumber;
+};
enum sctp_sinfo_flags {
SCTP_UNORDERED = (1 << 0),
SCTP_ADDR_OVER = (1 << 1),
SCTP_ABORT = (1 << 2),
SCTP_SACK_IMMEDIATELY = (1 << 3),
+ SCTP_SENDALL = (1 << 6),
SCTP_NOTIFICATION = MSG_NOTIFICATION,
SCTP_EOF = MSG_FIN,
};
@@ -167,6 +178,14 @@
#define SCTP_RCVINFO SCTP_RCVINFO
SCTP_NXTINFO,
#define SCTP_NXTINFO SCTP_NXTINFO
+ SCTP_PRINFO,
+#define SCTP_PRINFO SCTP_PRINFO
+ SCTP_AUTHINFO,
+#define SCTP_AUTHINFO SCTP_AUTHINFO
+ SCTP_DSTADDRV4,
+#define SCTP_DSTADDRV4 SCTP_DSTADDRV4
+ SCTP_DSTADDRV6,
+#define SCTP_DSTADDRV6 SCTP_DSTADDRV6
} sctp_cmsg_t;
struct sctp_assoc_change {
__u16 sac_type;
@@ -243,6 +262,8 @@
__u32 pdapi_length;
__u32 pdapi_indication;
sctp_assoc_t pdapi_assoc_id;
+ __u32 pdapi_stream;
+ __u32 pdapi_seq;
};
enum {
SCTP_PARTIAL_DELIVERY_ABORTED = 0,
@@ -257,7 +278,10 @@
sctp_assoc_t auth_assoc_id;
};
enum {
- SCTP_AUTH_NEWKEY = 0,
+ SCTP_AUTH_NEW_KEY,
+#define SCTP_AUTH_NEWKEY SCTP_AUTH_NEW_KEY
+ SCTP_AUTH_FREE_KEY,
+ SCTP_AUTH_NO_AUTH,
};
struct sctp_sender_dry_event {
__u16 sender_dry_type;
diff --git a/libc/kernel/uapi/linux/seccomp.h b/libc/kernel/uapi/linux/seccomp.h
index 1fd53fc..fe63789 100644
--- a/libc/kernel/uapi/linux/seccomp.h
+++ b/libc/kernel/uapi/linux/seccomp.h
@@ -26,8 +26,9 @@
#define SECCOMP_SET_MODE_STRICT 0
#define SECCOMP_SET_MODE_FILTER 1
#define SECCOMP_GET_ACTION_AVAIL 2
-#define SECCOMP_FILTER_FLAG_TSYNC 1
-#define SECCOMP_FILTER_FLAG_LOG 2
+#define SECCOMP_FILTER_FLAG_TSYNC (1UL << 0)
+#define SECCOMP_FILTER_FLAG_LOG (1UL << 1)
+#define SECCOMP_FILTER_FLAG_SPEC_ALLOW (1UL << 2)
#define SECCOMP_RET_KILL_PROCESS 0x80000000U
#define SECCOMP_RET_KILL_THREAD 0x00000000U
#define SECCOMP_RET_KILL SECCOMP_RET_KILL_THREAD
diff --git a/libc/kernel/uapi/linux/sem.h b/libc/kernel/uapi/linux/sem.h
index 91b1941..552be4a 100644
--- a/libc/kernel/uapi/linux/sem.h
+++ b/libc/kernel/uapi/linux/sem.h
@@ -29,6 +29,7 @@
#define SETALL 17
#define SEM_STAT 18
#define SEM_INFO 19
+#define SEM_STAT_ANY 20
struct __kernel_legacy_semid_ds {
struct __kernel_legacy_ipc_perm sem_perm;
__kernel_time_t sem_otime;
diff --git a/libc/kernel/uapi/linux/serial_core.h b/libc/kernel/uapi/linux/serial_core.h
index 68d2dcb..f0f464b 100644
--- a/libc/kernel/uapi/linux/serial_core.h
+++ b/libc/kernel/uapi/linux/serial_core.h
@@ -59,6 +59,7 @@
#define PORT_21285 37
#define PORT_SUNZILOG 38
#define PORT_SUNSAB 39
+#define PORT_NPCM 40
#define PORT_PCH_8LINE 44
#define PORT_PCH_2LINE 45
#define PORT_DZ 46
diff --git a/libc/kernel/uapi/linux/shm.h b/libc/kernel/uapi/linux/shm.h
index a3071e7..a30a089 100644
--- a/libc/kernel/uapi/linux/shm.h
+++ b/libc/kernel/uapi/linux/shm.h
@@ -65,6 +65,7 @@
#define SHM_UNLOCK 12
#define SHM_STAT 13
#define SHM_INFO 14
+#define SHM_STAT_ANY 15
struct shminfo {
int shmmax;
int shmmin;
diff --git a/libc/kernel/uapi/linux/stm.h b/libc/kernel/uapi/linux/stm.h
index 497d674..1c7f7f3 100644
--- a/libc/kernel/uapi/linux/stm.h
+++ b/libc/kernel/uapi/linux/stm.h
@@ -19,6 +19,8 @@
#ifndef _UAPI_LINUX_STM_H
#define _UAPI_LINUX_STM_H
#include <linux/types.h>
+#define STP_MASTER_MAX 0xffff
+#define STP_CHANNEL_MAX 0xffff
struct stp_policy_id {
__u32 size;
__u16 master;
diff --git a/libc/kernel/uapi/linux/switchtec_ioctl.h b/libc/kernel/uapi/linux/switchtec_ioctl.h
index 9337be6..09cf9cd 100644
--- a/libc/kernel/uapi/linux/switchtec_ioctl.h
+++ b/libc/kernel/uapi/linux/switchtec_ioctl.h
@@ -83,7 +83,8 @@
#define SWITCHTEC_IOCTL_EVENT_FORCE_SPEED 26
#define SWITCHTEC_IOCTL_EVENT_CREDIT_TIMEOUT 27
#define SWITCHTEC_IOCTL_EVENT_LINK_STATE 28
-#define SWITCHTEC_IOCTL_MAX_EVENTS 29
+#define SWITCHTEC_IOCTL_EVENT_GFMS 29
+#define SWITCHTEC_IOCTL_MAX_EVENTS 30
#define SWITCHTEC_IOCTL_EVENT_LOCAL_PART_IDX - 1
#define SWITCHTEC_IOCTL_EVENT_IDX_ALL - 2
#define SWITCHTEC_IOCTL_EVENT_FLAG_CLEAR (1 << 0)
diff --git a/libc/kernel/uapi/linux/sysctl.h b/libc/kernel/uapi/linux/sysctl.h
index 47c39fc..eb6e61f 100644
--- a/libc/kernel/uapi/linux/sysctl.h
+++ b/libc/kernel/uapi/linux/sysctl.h
@@ -656,22 +656,6 @@
NET_BRIDGE_NF_FILTER_PPPOE_TAGGED = 5,
};
enum {
- NET_IRDA_DISCOVERY = 1,
- NET_IRDA_DEVNAME = 2,
- NET_IRDA_DEBUG = 3,
- NET_IRDA_FAST_POLL = 4,
- NET_IRDA_DISCOVERY_SLOTS = 5,
- NET_IRDA_DISCOVERY_TIMEOUT = 6,
- NET_IRDA_SLOT_TIMEOUT = 7,
- NET_IRDA_MAX_BAUD_RATE = 8,
- NET_IRDA_MIN_TX_TURN_TIME = 9,
- NET_IRDA_MAX_TX_DATA_SIZE = 10,
- NET_IRDA_MAX_TX_WINDOW = 11,
- NET_IRDA_MAX_NOREPLY_TIME = 12,
- NET_IRDA_WARN_NOREPLY_TIME = 13,
- NET_IRDA_LAP_KEEPALIVE_TIME = 14,
-};
-enum {
FS_NRINODE = 1,
FS_STATINODE = 2,
FS_MAXINODE = 3,
diff --git a/libc/kernel/uapi/linux/tc_ematch/tc_em_ipt.h b/libc/kernel/uapi/linux/tc_ematch/tc_em_ipt.h
new file mode 100644
index 0000000..8cd06ee
--- /dev/null
+++ b/libc/kernel/uapi/linux/tc_ematch/tc_em_ipt.h
@@ -0,0 +1,33 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef __LINUX_TC_EM_IPT_H
+#define __LINUX_TC_EM_IPT_H
+#include <linux/types.h>
+#include <linux/pkt_cls.h>
+enum {
+ TCA_EM_IPT_UNSPEC,
+ TCA_EM_IPT_HOOK,
+ TCA_EM_IPT_MATCH_NAME,
+ TCA_EM_IPT_MATCH_REVISION,
+ TCA_EM_IPT_NFPROTO,
+ TCA_EM_IPT_MATCH_DATA,
+ __TCA_EM_IPT_MAX
+};
+#define TCA_EM_IPT_MAX (__TCA_EM_IPT_MAX - 1)
+#endif
diff --git a/libc/kernel/uapi/linux/tcp.h b/libc/kernel/uapi/linux/tcp.h
index 0bf9559..8b73119 100644
--- a/libc/kernel/uapi/linux/tcp.h
+++ b/libc/kernel/uapi/linux/tcp.h
@@ -186,6 +186,9 @@
TCP_NLA_MIN_RTT,
TCP_NLA_RECUR_RETRANS,
TCP_NLA_DELIVERY_RATE_APP_LMT,
+ TCP_NLA_SNDQ_SIZE,
+ TCP_NLA_CA_STATE,
+ TCP_NLA_SND_SSTHRESH,
};
#define TCP_MD5SIG_MAXKEYLEN 80
#define TCP_MD5SIG_FLAG_PREFIX 1
diff --git a/libc/kernel/uapi/linux/tee.h b/libc/kernel/uapi/linux/tee.h
index 20d0d80..e13c231 100644
--- a/libc/kernel/uapi/linux/tee.h
+++ b/libc/kernel/uapi/linux/tee.h
@@ -27,6 +27,7 @@
#define TEE_MAX_ARG_SIZE 1024
#define TEE_GEN_CAP_GP (1 << 0)
#define TEE_GEN_CAP_PRIVILEGED (1 << 1)
+#define TEE_GEN_CAP_REG_MEM (1 << 2)
#define TEE_IMPL_ID_OPTEE 1
#define TEE_OPTEE_CAP_TZ (1 << 0)
struct tee_ioctl_version_data {
@@ -53,6 +54,8 @@
#define TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_OUTPUT 6
#define TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INOUT 7
#define TEE_IOCTL_PARAM_ATTR_TYPE_MASK 0xff
+#define TEE_IOCTL_PARAM_ATTR_META 0x100
+#define TEE_IOCTL_PARAM_ATTR_MASK (TEE_IOCTL_PARAM_ATTR_TYPE_MASK | TEE_IOCTL_PARAM_ATTR_META)
#define TEE_IOCTL_LOGIN_PUBLIC 0
#define TEE_IOCTL_LOGIN_USER 1
#define TEE_IOCTL_LOGIN_GROUP 2
@@ -109,4 +112,11 @@
struct tee_ioctl_param params[];
};
#define TEE_IOC_SUPPL_SEND _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 7, struct tee_ioctl_buf_data)
+struct tee_ioctl_shm_register_data {
+ __u64 addr;
+ __u64 length;
+ __u32 flags;
+ __s32 id;
+};
+#define TEE_IOC_SHM_REGISTER _IOWR(TEE_IOC_MAGIC, TEE_IOC_BASE + 9, struct tee_ioctl_shm_register_data)
#endif
diff --git a/libc/kernel/uapi/linux/telephony.h b/libc/kernel/uapi/linux/telephony.h
deleted file mode 100644
index c20eb11..0000000
--- a/libc/kernel/uapi/linux/telephony.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/****************************************************************************
- ****************************************************************************
- ***
- *** This header was automatically generated from a Linux kernel header
- *** of the same name, to make information necessary for userspace to
- *** call into the kernel available to libc. It contains only constants,
- *** structures, and macros generated from the original header, and thus,
- *** contains no copyrightable information.
- ***
- *** To edit the content of this header, modify the corresponding
- *** source file (e.g. under external/kernel-headers/original/) then
- *** run bionic/libc/kernel/tools/update_all.py
- ***
- *** Any manual change here will be lost the next time this script will
- *** be run. You've been warned!
- ***
- ****************************************************************************
- ****************************************************************************/
-#ifndef TELEPHONY_H
-#define TELEPHONY_H
-#define TELEPHONY_VERSION 3013
-#define PHONE_VENDOR_IXJ 1
-#define PHONE_VENDOR_QUICKNET PHONE_VENDOR_IXJ
-#define PHONE_VENDOR_VOICETRONIX 2
-#define PHONE_VENDOR_ACULAB 3
-#define PHONE_VENDOR_DIGI 4
-#define PHONE_VENDOR_FRANKLIN 5
-#define QTI_PHONEJACK 100
-#define QTI_LINEJACK 300
-#define QTI_PHONEJACK_LITE 400
-#define QTI_PHONEJACK_PCI 500
-#define QTI_PHONECARD 600
-typedef enum {
- vendor = 0,
- device,
- port,
- codec,
- dsp
-} phone_cap;
-struct phone_capability {
- char desc[80];
- phone_cap captype;
- int cap;
- int handle;
-};
-typedef enum {
- pots = 0,
- pstn,
- handset,
- speaker
-} phone_ports;
-#define PHONE_CAPABILITIES _IO('q', 0x80)
-#define PHONE_CAPABILITIES_LIST _IOR('q', 0x81, struct phone_capability *)
-#define PHONE_CAPABILITIES_CHECK _IOW('q', 0x82, struct phone_capability *)
-typedef struct {
- char month[3];
- char day[3];
- char hour[3];
- char min[3];
- int numlen;
- char number[11];
- int namelen;
- char name[80];
-} PHONE_CID;
-#define PHONE_RING _IO('q', 0x83)
-#define PHONE_HOOKSTATE _IO('q', 0x84)
-#define PHONE_MAXRINGS _IOW('q', 0x85, char)
-#define PHONE_RING_CADENCE _IOW('q', 0x86, short)
-#define OLD_PHONE_RING_START _IO('q', 0x87)
-#define PHONE_RING_START _IOW('q', 0x87, PHONE_CID *)
-#define PHONE_RING_STOP _IO('q', 0x88)
-#define USA_RING_CADENCE 0xC0C0
-#define PHONE_REC_CODEC _IOW('q', 0x89, int)
-#define PHONE_REC_START _IO('q', 0x8A)
-#define PHONE_REC_STOP _IO('q', 0x8B)
-#define PHONE_REC_DEPTH _IOW('q', 0x8C, int)
-#define PHONE_FRAME _IOW('q', 0x8D, int)
-#define PHONE_REC_VOLUME _IOW('q', 0x8E, int)
-#define PHONE_REC_VOLUME_LINEAR _IOW('q', 0xDB, int)
-#define PHONE_REC_LEVEL _IO('q', 0x8F)
-#define PHONE_PLAY_CODEC _IOW('q', 0x90, int)
-#define PHONE_PLAY_START _IO('q', 0x91)
-#define PHONE_PLAY_STOP _IO('q', 0x92)
-#define PHONE_PLAY_DEPTH _IOW('q', 0x93, int)
-#define PHONE_PLAY_VOLUME _IOW('q', 0x94, int)
-#define PHONE_PLAY_VOLUME_LINEAR _IOW('q', 0xDC, int)
-#define PHONE_PLAY_LEVEL _IO('q', 0x95)
-#define PHONE_DTMF_READY _IOR('q', 0x96, int)
-#define PHONE_GET_DTMF _IOR('q', 0x97, int)
-#define PHONE_GET_DTMF_ASCII _IOR('q', 0x98, int)
-#define PHONE_DTMF_OOB _IOW('q', 0x99, int)
-#define PHONE_EXCEPTION _IOR('q', 0x9A, int)
-#define PHONE_PLAY_TONE _IOW('q', 0x9B, char)
-#define PHONE_SET_TONE_ON_TIME _IOW('q', 0x9C, int)
-#define PHONE_SET_TONE_OFF_TIME _IOW('q', 0x9D, int)
-#define PHONE_GET_TONE_ON_TIME _IO('q', 0x9E)
-#define PHONE_GET_TONE_OFF_TIME _IO('q', 0x9F)
-#define PHONE_GET_TONE_STATE _IO('q', 0xA0)
-#define PHONE_BUSY _IO('q', 0xA1)
-#define PHONE_RINGBACK _IO('q', 0xA2)
-#define PHONE_DIALTONE _IO('q', 0xA3)
-#define PHONE_CPT_STOP _IO('q', 0xA4)
-#define PHONE_PSTN_SET_STATE _IOW('q', 0xA4, int)
-#define PHONE_PSTN_GET_STATE _IO('q', 0xA5)
-#define PSTN_ON_HOOK 0
-#define PSTN_RINGING 1
-#define PSTN_OFF_HOOK 2
-#define PSTN_PULSE_DIAL 3
-#define PHONE_WINK_DURATION _IOW('q', 0xA6, int)
-#define PHONE_WINK _IOW('q', 0xAA, int)
-typedef enum {
- G723_63 = 1,
- G723_53 = 2,
- TS85 = 3,
- TS48 = 4,
- TS41 = 5,
- G728 = 6,
- G729 = 7,
- ULAW = 8,
- ALAW = 9,
- LINEAR16 = 10,
- LINEAR8 = 11,
- WSS = 12,
- G729B = 13
-} phone_codec;
-struct phone_codec_data {
- phone_codec type;
- unsigned short buf_min, buf_opt, buf_max;
-};
-#define PHONE_QUERY_CODEC _IOWR('q', 0xA7, struct phone_codec_data *)
-#define PHONE_PSTN_LINETEST _IO('q', 0xA8)
-#define PHONE_VAD _IOW('q', 0xA9, int)
-struct phone_except {
- unsigned int dtmf_ready : 1;
- unsigned int hookstate : 1;
- unsigned int pstn_ring : 1;
- unsigned int caller_id : 1;
- unsigned int pstn_wink : 1;
- unsigned int f0 : 1;
- unsigned int f1 : 1;
- unsigned int f2 : 1;
- unsigned int f3 : 1;
- unsigned int flash : 1;
- unsigned int fc0 : 1;
- unsigned int fc1 : 1;
- unsigned int fc2 : 1;
- unsigned int fc3 : 1;
- unsigned int reserved : 18;
-};
-union telephony_exception {
- struct phone_except bits;
- unsigned int bytes;
-};
-#endif
diff --git a/libc/kernel/uapi/linux/time.h b/libc/kernel/uapi/linux/time.h
index 59e3160..b75d2dc 100644
--- a/libc/kernel/uapi/linux/time.h
+++ b/libc/kernel/uapi/linux/time.h
@@ -45,6 +45,10 @@
struct timeval it_interval;
struct timeval it_value;
};
+struct __kernel_old_timeval {
+ __kernel_long_t tv_sec;
+ __kernel_long_t tv_usec;
+};
#define CLOCK_REALTIME 0
#define CLOCK_MONOTONIC 1
#define CLOCK_PROCESS_CPUTIME_ID 2
diff --git a/libc/kernel/uapi/linux/tipc.h b/libc/kernel/uapi/linux/tipc.h
index b8b4965..603c58f 100644
--- a/libc/kernel/uapi/linux/tipc.h
+++ b/libc/kernel/uapi/linux/tipc.h
@@ -20,39 +20,27 @@
#define _LINUX_TIPC_H_
#include <linux/types.h>
#include <linux/sockios.h>
-struct tipc_portid {
+struct tipc_socket_addr {
__u32 ref;
__u32 node;
};
-struct tipc_name {
+struct tipc_service_addr {
__u32 type;
__u32 instance;
};
-struct tipc_name_seq {
+struct tipc_service_range {
__u32 type;
__u32 lower;
__u32 upper;
};
-#define TIPC_NODE_BITS 12
-#define TIPC_CLUSTER_BITS 12
-#define TIPC_ZONE_BITS 8
-#define TIPC_NODE_OFFSET 0
-#define TIPC_CLUSTER_OFFSET TIPC_NODE_BITS
-#define TIPC_ZONE_OFFSET (TIPC_CLUSTER_OFFSET + TIPC_CLUSTER_BITS)
-#define TIPC_NODE_SIZE ((1UL << TIPC_NODE_BITS) - 1)
-#define TIPC_CLUSTER_SIZE ((1UL << TIPC_CLUSTER_BITS) - 1)
-#define TIPC_ZONE_SIZE ((1UL << TIPC_ZONE_BITS) - 1)
-#define TIPC_NODE_MASK (TIPC_NODE_SIZE << TIPC_NODE_OFFSET)
-#define TIPC_CLUSTER_MASK (TIPC_CLUSTER_SIZE << TIPC_CLUSTER_OFFSET)
-#define TIPC_ZONE_MASK (TIPC_ZONE_SIZE << TIPC_ZONE_OFFSET)
-#define TIPC_ZONE_CLUSTER_MASK (TIPC_ZONE_MASK | TIPC_CLUSTER_MASK)
-#define TIPC_CFG_SRV 0
+#define TIPC_NODE_STATE 0
#define TIPC_TOP_SRV 1
#define TIPC_LINK_STATE 2
#define TIPC_RESERVED_TYPES 64
-#define TIPC_ZONE_SCOPE 1
-#define TIPC_CLUSTER_SCOPE 2
-#define TIPC_NODE_SCOPE 3
+enum tipc_scope {
+ TIPC_CLUSTER_SCOPE = 2,
+ TIPC_NODE_SCOPE = 3
+};
#define TIPC_MAX_USER_MSG_SIZE 66000U
#define TIPC_LOW_IMPORTANCE 0
#define TIPC_MEDIUM_IMPORTANCE 1
@@ -69,7 +57,7 @@
#define TIPC_SUB_CANCEL 0x04
#define TIPC_WAIT_FOREVER (~0)
struct tipc_subscr {
- struct tipc_name_seq seq;
+ struct tipc_service_range seq;
__u32 timeout;
__u32 filter;
char usr_handle[8];
@@ -81,7 +69,7 @@
__u32 event;
__u32 found_lower;
__u32 found_upper;
- struct tipc_portid port;
+ struct tipc_socket_addr port;
struct tipc_subscr s;
};
#ifndef AF_TIPC
@@ -93,19 +81,19 @@
#ifndef SOL_TIPC
#define SOL_TIPC 271
#endif
-#define TIPC_ADDR_NAMESEQ 1
#define TIPC_ADDR_MCAST 1
-#define TIPC_ADDR_NAME 2
-#define TIPC_ADDR_ID 3
+#define TIPC_SERVICE_RANGE 1
+#define TIPC_SERVICE_ADDR 2
+#define TIPC_SOCKET_ADDR 3
struct sockaddr_tipc {
unsigned short family;
unsigned char addrtype;
signed char scope;
union {
- struct tipc_portid id;
- struct tipc_name_seq nameseq;
+ struct tipc_socket_addr id;
+ struct tipc_service_range nameseq;
struct {
- struct tipc_name name;
+ struct tipc_service_addr name;
__u32 domain;
} name;
} addr;
@@ -134,11 +122,32 @@
#define TIPC_MAX_MEDIA_NAME 16
#define TIPC_MAX_IF_NAME 16
#define TIPC_MAX_BEARER_NAME 32
-#define TIPC_MAX_LINK_NAME 60
+#define TIPC_MAX_LINK_NAME 68
#define SIOCGETLINKNAME SIOCPROTOPRIVATE
struct tipc_sioc_ln_req {
__u32 peer;
__u32 bearer_id;
char linkname[TIPC_MAX_LINK_NAME];
};
+#define TIPC_CFG_SRV 0
+#define TIPC_ZONE_SCOPE 1
+#define TIPC_ADDR_NAMESEQ 1
+#define TIPC_ADDR_NAME 2
+#define TIPC_ADDR_ID 3
+#define TIPC_NODE_BITS 12
+#define TIPC_CLUSTER_BITS 12
+#define TIPC_ZONE_BITS 8
+#define TIPC_NODE_OFFSET 0
+#define TIPC_CLUSTER_OFFSET TIPC_NODE_BITS
+#define TIPC_ZONE_OFFSET (TIPC_CLUSTER_OFFSET + TIPC_CLUSTER_BITS)
+#define TIPC_NODE_SIZE ((1UL << TIPC_NODE_BITS) - 1)
+#define TIPC_CLUSTER_SIZE ((1UL << TIPC_CLUSTER_BITS) - 1)
+#define TIPC_ZONE_SIZE ((1UL << TIPC_ZONE_BITS) - 1)
+#define TIPC_NODE_MASK (TIPC_NODE_SIZE << TIPC_NODE_OFFSET)
+#define TIPC_CLUSTER_MASK (TIPC_CLUSTER_SIZE << TIPC_CLUSTER_OFFSET)
+#define TIPC_ZONE_MASK (TIPC_ZONE_SIZE << TIPC_ZONE_OFFSET)
+#define TIPC_ZONE_CLUSTER_MASK (TIPC_ZONE_MASK | TIPC_CLUSTER_MASK)
+#define tipc_portid tipc_socket_addr
+#define tipc_name tipc_service_addr
+#define tipc_name_seq tipc_service_range
#endif
diff --git a/libc/kernel/uapi/linux/tipc_netlink.h b/libc/kernel/uapi/linux/tipc_netlink.h
index 5a49b24..ce77441 100644
--- a/libc/kernel/uapi/linux/tipc_netlink.h
+++ b/libc/kernel/uapi/linux/tipc_netlink.h
@@ -85,6 +85,13 @@
TIPC_NLA_SOCK_REF,
TIPC_NLA_SOCK_CON,
TIPC_NLA_SOCK_HAS_PUBL,
+ TIPC_NLA_SOCK_STAT,
+ TIPC_NLA_SOCK_TYPE,
+ TIPC_NLA_SOCK_INO,
+ TIPC_NLA_SOCK_UID,
+ TIPC_NLA_SOCK_TIPC_STATE,
+ TIPC_NLA_SOCK_COOKIE,
+ TIPC_NLA_SOCK_PAD,
__TIPC_NLA_SOCK_MAX,
TIPC_NLA_SOCK_MAX = __TIPC_NLA_SOCK_MAX - 1
};
@@ -121,6 +128,8 @@
TIPC_NLA_NET_UNSPEC,
TIPC_NLA_NET_ID,
TIPC_NLA_NET_ADDR,
+ TIPC_NLA_NET_NODEID,
+ TIPC_NLA_NET_NODEID_W1,
__TIPC_NLA_NET_MAX,
TIPC_NLA_NET_MAX = __TIPC_NLA_NET_MAX - 1
};
@@ -178,6 +187,15 @@
TIPC_NLA_CON_MAX = __TIPC_NLA_CON_MAX - 1
};
enum {
+ TIPC_NLA_SOCK_STAT_RCVQ,
+ TIPC_NLA_SOCK_STAT_SENDQ,
+ TIPC_NLA_SOCK_STAT_LINK_CONG,
+ TIPC_NLA_SOCK_STAT_CONN_CONG,
+ TIPC_NLA_SOCK_STAT_DROP,
+ __TIPC_NLA_SOCK_STAT_MAX,
+ TIPC_NLA_SOCK_STAT_MAX = __TIPC_NLA_SOCK_STAT_MAX - 1
+};
+enum {
TIPC_NLA_PROP_UNSPEC,
TIPC_NLA_PROP_PRIO,
TIPC_NLA_PROP_TOL,
diff --git a/libc/kernel/uapi/linux/tipc_sockets_diag.h b/libc/kernel/uapi/linux/tipc_sockets_diag.h
new file mode 100644
index 0000000..7d7d016
--- /dev/null
+++ b/libc/kernel/uapi/linux/tipc_sockets_diag.h
@@ -0,0 +1,29 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _UAPI__TIPC_SOCKETS_DIAG_H__
+#define _UAPI__TIPC_SOCKETS_DIAG_H__
+#include <linux/types.h>
+#include <linux/sock_diag.h>
+struct tipc_sock_diag_req {
+ __u8 sdiag_family;
+ __u8 sdiag_protocol;
+ __u16 pad;
+ __u32 tidiag_states;
+};
+#endif
diff --git a/libc/kernel/uapi/linux/tls.h b/libc/kernel/uapi/linux/tls.h
index 925cf80..b6910af 100644
--- a/libc/kernel/uapi/linux/tls.h
+++ b/libc/kernel/uapi/linux/tls.h
@@ -20,6 +20,7 @@
#define _UAPI_LINUX_TLS_H
#include <linux/types.h>
#define TLS_TX 1
+#define TLS_RX 2
#define TLS_VERSION_MINOR(ver) ((ver) & 0xFF)
#define TLS_VERSION_MAJOR(ver) (((ver) >> 8) & 0xFF)
#define TLS_VERSION_NUMBER(id) ((((id ##_VERSION_MAJOR) & 0xFF) << 8) | ((id ##_VERSION_MINOR) & 0xFF))
@@ -33,6 +34,7 @@
#define TLS_CIPHER_AES_GCM_128_TAG_SIZE 16
#define TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE 8
#define TLS_SET_RECORD_TYPE 1
+#define TLS_GET_RECORD_TYPE 2
struct tls_crypto_info {
__u16 version;
__u16 cipher_type;
diff --git a/libc/kernel/uapi/linux/types.h b/libc/kernel/uapi/linux/types.h
index 1238a74..e111573 100644
--- a/libc/kernel/uapi/linux/types.h
+++ b/libc/kernel/uapi/linux/types.h
@@ -34,5 +34,10 @@
#define __aligned_u64 __u64 __attribute__((aligned(8)))
#define __aligned_be64 __be64 __attribute__((aligned(8)))
#define __aligned_le64 __le64 __attribute__((aligned(8)))
+#ifdef __CHECK_POLL
+typedef unsigned __bitwise __poll_t;
+#else
+typedef unsigned __poll_t;
+#endif
#endif
#endif
diff --git a/libc/kernel/uapi/linux/usb/audio.h b/libc/kernel/uapi/linux/usb/audio.h
index 121c859..87b8bd5 100644
--- a/libc/kernel/uapi/linux/usb/audio.h
+++ b/libc/kernel/uapi/linux/usb/audio.h
@@ -21,6 +21,7 @@
#include <linux/types.h>
#define UAC_VERSION_1 0x00
#define UAC_VERSION_2 0x20
+#define UAC_VERSION_3 0x30
#define USB_SUBCLASS_AUDIOCONTROL 0x01
#define USB_SUBCLASS_AUDIOSTREAMING 0x02
#define USB_SUBCLASS_MIDISTREAMING 0x03
diff --git a/libc/kernel/uapi/linux/usb/ch9.h b/libc/kernel/uapi/linux/usb/ch9.h
index a7cf43a..89d772a 100644
--- a/libc/kernel/uapi/linux/usb/ch9.h
+++ b/libc/kernel/uapi/linux/usb/ch9.h
@@ -508,7 +508,7 @@
__u8 bDevCapabilityType;
} __attribute__((packed));
#define USB_DT_USB_PTM_ID_SIZE 3
-#define USB_DT_USB_SSP_CAP_SIZE(ssac) (16 + ssac * 4)
+#define USB_DT_USB_SSP_CAP_SIZE(ssac) (12 + (ssac + 1) * 4)
struct usb_wireless_ep_comp_descriptor {
__u8 bLength;
__u8 bDescriptorType;
diff --git a/libc/kernel/uapi/linux/uuid.h b/libc/kernel/uapi/linux/uuid.h
index 808578f..d0f82c1 100644
--- a/libc/kernel/uapi/linux/uuid.h
+++ b/libc/kernel/uapi/linux/uuid.h
@@ -19,7 +19,6 @@
#ifndef _UAPI_LINUX_UUID_H_
#define _UAPI_LINUX_UUID_H_
#include <linux/types.h>
-#include <linux/string.h>
typedef struct {
__u8 b[16];
} guid_t;
diff --git a/libc/kernel/uapi/linux/uvcvideo.h b/libc/kernel/uapi/linux/uvcvideo.h
index 5d832d4..7ae7aad 100644
--- a/libc/kernel/uapi/linux/uvcvideo.h
+++ b/libc/kernel/uapi/linux/uvcvideo.h
@@ -61,4 +61,11 @@
};
#define UVCIOC_CTRL_MAP _IOWR('u', 0x20, struct uvc_xu_control_mapping)
#define UVCIOC_CTRL_QUERY _IOWR('u', 0x21, struct uvc_xu_control_query)
+struct uvc_meta_buf {
+ __u64 ns;
+ __u16 sof;
+ __u8 length;
+ __u8 flags;
+ __u8 buf[];
+} __packed;
#endif
diff --git a/libc/kernel/uapi/linux/v4l2-controls.h b/libc/kernel/uapi/linux/v4l2-controls.h
index 302da8f..37e447e 100644
--- a/libc/kernel/uapi/linux/v4l2-controls.h
+++ b/libc/kernel/uapi/linux/v4l2-controls.h
@@ -490,6 +490,95 @@
#define V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP (V4L2_CID_MPEG_BASE + 509)
#define V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP (V4L2_CID_MPEG_BASE + 510)
#define V4L2_CID_MPEG_VIDEO_VPX_PROFILE (V4L2_CID_MPEG_BASE + 511)
+#define V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP (V4L2_CID_MPEG_BASE + 600)
+#define V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP (V4L2_CID_MPEG_BASE + 601)
+#define V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP (V4L2_CID_MPEG_BASE + 602)
+#define V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP (V4L2_CID_MPEG_BASE + 603)
+#define V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP (V4L2_CID_MPEG_BASE + 604)
+#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP (V4L2_CID_MPEG_BASE + 605)
+#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE (V4L2_CID_MPEG_BASE + 606)
+enum v4l2_mpeg_video_hevc_hier_coding_type {
+ V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B = 0,
+ V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P = 1,
+};
+#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER (V4L2_CID_MPEG_BASE + 607)
+#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_QP (V4L2_CID_MPEG_BASE + 608)
+#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_QP (V4L2_CID_MPEG_BASE + 609)
+#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_QP (V4L2_CID_MPEG_BASE + 610)
+#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_QP (V4L2_CID_MPEG_BASE + 611)
+#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP (V4L2_CID_MPEG_BASE + 612)
+#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP (V4L2_CID_MPEG_BASE + 613)
+#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_QP (V4L2_CID_MPEG_BASE + 614)
+#define V4L2_CID_MPEG_VIDEO_HEVC_PROFILE (V4L2_CID_MPEG_BASE + 615)
+enum v4l2_mpeg_video_hevc_profile {
+ V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN = 0,
+ V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE = 1,
+ V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10 = 2,
+};
+#define V4L2_CID_MPEG_VIDEO_HEVC_LEVEL (V4L2_CID_MPEG_BASE + 616)
+enum v4l2_mpeg_video_hevc_level {
+ V4L2_MPEG_VIDEO_HEVC_LEVEL_1 = 0,
+ V4L2_MPEG_VIDEO_HEVC_LEVEL_2 = 1,
+ V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1 = 2,
+ V4L2_MPEG_VIDEO_HEVC_LEVEL_3 = 3,
+ V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1 = 4,
+ V4L2_MPEG_VIDEO_HEVC_LEVEL_4 = 5,
+ V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1 = 6,
+ V4L2_MPEG_VIDEO_HEVC_LEVEL_5 = 7,
+ V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1 = 8,
+ V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2 = 9,
+ V4L2_MPEG_VIDEO_HEVC_LEVEL_6 = 10,
+ V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1 = 11,
+ V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2 = 12,
+};
+#define V4L2_CID_MPEG_VIDEO_HEVC_FRAME_RATE_RESOLUTION (V4L2_CID_MPEG_BASE + 617)
+#define V4L2_CID_MPEG_VIDEO_HEVC_TIER (V4L2_CID_MPEG_BASE + 618)
+enum v4l2_mpeg_video_hevc_tier {
+ V4L2_MPEG_VIDEO_HEVC_TIER_MAIN = 0,
+ V4L2_MPEG_VIDEO_HEVC_TIER_HIGH = 1,
+};
+#define V4L2_CID_MPEG_VIDEO_HEVC_MAX_PARTITION_DEPTH (V4L2_CID_MPEG_BASE + 619)
+#define V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE (V4L2_CID_MPEG_BASE + 620)
+enum v4l2_cid_mpeg_video_hevc_loop_filter_mode {
+ V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_DISABLED = 0,
+ V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_ENABLED = 1,
+ V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY = 2,
+};
+#define V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2 (V4L2_CID_MPEG_BASE + 621)
+#define V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2 (V4L2_CID_MPEG_BASE + 622)
+#define V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE (V4L2_CID_MPEG_BASE + 623)
+enum v4l2_cid_mpeg_video_hevc_refresh_type {
+ V4L2_MPEG_VIDEO_HEVC_REFRESH_NONE = 0,
+ V4L2_MPEG_VIDEO_HEVC_REFRESH_CRA = 1,
+ V4L2_MPEG_VIDEO_HEVC_REFRESH_IDR = 2,
+};
+#define V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_PERIOD (V4L2_CID_MPEG_BASE + 624)
+#define V4L2_CID_MPEG_VIDEO_HEVC_LOSSLESS_CU (V4L2_CID_MPEG_BASE + 625)
+#define V4L2_CID_MPEG_VIDEO_HEVC_CONST_INTRA_PRED (V4L2_CID_MPEG_BASE + 626)
+#define V4L2_CID_MPEG_VIDEO_HEVC_WAVEFRONT (V4L2_CID_MPEG_BASE + 627)
+#define V4L2_CID_MPEG_VIDEO_HEVC_GENERAL_PB (V4L2_CID_MPEG_BASE + 628)
+#define V4L2_CID_MPEG_VIDEO_HEVC_TEMPORAL_ID (V4L2_CID_MPEG_BASE + 629)
+#define V4L2_CID_MPEG_VIDEO_HEVC_STRONG_SMOOTHING (V4L2_CID_MPEG_BASE + 630)
+#define V4L2_CID_MPEG_VIDEO_HEVC_MAX_NUM_MERGE_MV_MINUS1 (V4L2_CID_MPEG_BASE + 631)
+#define V4L2_CID_MPEG_VIDEO_HEVC_INTRA_PU_SPLIT (V4L2_CID_MPEG_BASE + 632)
+#define V4L2_CID_MPEG_VIDEO_HEVC_TMV_PREDICTION (V4L2_CID_MPEG_BASE + 633)
+#define V4L2_CID_MPEG_VIDEO_HEVC_WITHOUT_STARTCODE (V4L2_CID_MPEG_BASE + 634)
+#define V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD (V4L2_CID_MPEG_BASE + 635)
+enum v4l2_cid_mpeg_video_hevc_size_of_length_field {
+ V4L2_MPEG_VIDEO_HEVC_SIZE_0 = 0,
+ V4L2_MPEG_VIDEO_HEVC_SIZE_1 = 1,
+ V4L2_MPEG_VIDEO_HEVC_SIZE_2 = 2,
+ V4L2_MPEG_VIDEO_HEVC_SIZE_4 = 3,
+};
+#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR (V4L2_CID_MPEG_BASE + 636)
+#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR (V4L2_CID_MPEG_BASE + 637)
+#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR (V4L2_CID_MPEG_BASE + 638)
+#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR (V4L2_CID_MPEG_BASE + 639)
+#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR (V4L2_CID_MPEG_BASE + 640)
+#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR (V4L2_CID_MPEG_BASE + 641)
+#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_BR (V4L2_CID_MPEG_BASE + 642)
+#define V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES (V4L2_CID_MPEG_BASE + 643)
+#define V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR (V4L2_CID_MPEG_BASE + 644)
#define V4L2_CID_MPEG_CX2341X_BASE (V4L2_CTRL_CLASS_MPEG | 0x1000)
#define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE (V4L2_CID_MPEG_CX2341X_BASE + 0)
enum v4l2_mpeg_cx2341x_video_spatial_filter_mode {
diff --git a/libc/kernel/uapi/linux/vbox_err.h b/libc/kernel/uapi/linux/vbox_err.h
new file mode 100644
index 0000000..dec3574
--- /dev/null
+++ b/libc/kernel/uapi/linux/vbox_err.h
@@ -0,0 +1,157 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef __UAPI_VBOX_ERR_H__
+#define __UAPI_VBOX_ERR_H__
+#define VINF_SUCCESS 0
+#define VERR_GENERAL_FAILURE (- 1)
+#define VERR_INVALID_PARAMETER (- 2)
+#define VERR_INVALID_MAGIC (- 3)
+#define VERR_INVALID_HANDLE (- 4)
+#define VERR_LOCK_FAILED (- 5)
+#define VERR_INVALID_POINTER (- 6)
+#define VERR_IDT_FAILED (- 7)
+#define VERR_NO_MEMORY (- 8)
+#define VERR_ALREADY_LOADED (- 9)
+#define VERR_PERMISSION_DENIED (- 10)
+#define VERR_VERSION_MISMATCH (- 11)
+#define VERR_NOT_IMPLEMENTED (- 12)
+#define VERR_INVALID_FLAGS (- 13)
+#define VERR_NOT_EQUAL (- 18)
+#define VERR_NOT_SYMLINK (- 19)
+#define VERR_NO_TMP_MEMORY (- 20)
+#define VERR_INVALID_FMODE (- 21)
+#define VERR_WRONG_ORDER (- 22)
+#define VERR_NO_TLS_FOR_SELF (- 23)
+#define VERR_FAILED_TO_SET_SELF_TLS (- 24)
+#define VERR_NO_CONT_MEMORY (- 26)
+#define VERR_NO_PAGE_MEMORY (- 27)
+#define VERR_THREAD_IS_DEAD (- 29)
+#define VERR_THREAD_NOT_WAITABLE (- 30)
+#define VERR_PAGE_TABLE_NOT_PRESENT (- 31)
+#define VERR_INVALID_CONTEXT (- 32)
+#define VERR_TIMER_BUSY (- 33)
+#define VERR_ADDRESS_CONFLICT (- 34)
+#define VERR_UNRESOLVED_ERROR (- 35)
+#define VERR_INVALID_FUNCTION (- 36)
+#define VERR_NOT_SUPPORTED (- 37)
+#define VERR_ACCESS_DENIED (- 38)
+#define VERR_INTERRUPTED (- 39)
+#define VERR_TIMEOUT (- 40)
+#define VERR_BUFFER_OVERFLOW (- 41)
+#define VERR_TOO_MUCH_DATA (- 42)
+#define VERR_MAX_THRDS_REACHED (- 43)
+#define VERR_MAX_PROCS_REACHED (- 44)
+#define VERR_SIGNAL_REFUSED (- 45)
+#define VERR_SIGNAL_PENDING (- 46)
+#define VERR_SIGNAL_INVALID (- 47)
+#define VERR_STATE_CHANGED (- 48)
+#define VERR_INVALID_UUID_FORMAT (- 49)
+#define VERR_PROCESS_NOT_FOUND (- 50)
+#define VERR_PROCESS_RUNNING (- 51)
+#define VERR_TRY_AGAIN (- 52)
+#define VERR_PARSE_ERROR (- 53)
+#define VERR_OUT_OF_RANGE (- 54)
+#define VERR_NUMBER_TOO_BIG (- 55)
+#define VERR_NO_DIGITS (- 56)
+#define VERR_NEGATIVE_UNSIGNED (- 57)
+#define VERR_NO_TRANSLATION (- 58)
+#define VERR_NOT_FOUND (- 78)
+#define VERR_INVALID_STATE (- 79)
+#define VERR_OUT_OF_RESOURCES (- 80)
+#define VERR_FILE_NOT_FOUND (- 102)
+#define VERR_PATH_NOT_FOUND (- 103)
+#define VERR_INVALID_NAME (- 104)
+#define VERR_ALREADY_EXISTS (- 105)
+#define VERR_TOO_MANY_OPEN_FILES (- 106)
+#define VERR_SEEK (- 107)
+#define VERR_NEGATIVE_SEEK (- 108)
+#define VERR_SEEK_ON_DEVICE (- 109)
+#define VERR_EOF (- 110)
+#define VERR_READ_ERROR (- 111)
+#define VERR_WRITE_ERROR (- 112)
+#define VERR_WRITE_PROTECT (- 113)
+#define VERR_SHARING_VIOLATION (- 114)
+#define VERR_FILE_LOCK_FAILED (- 115)
+#define VERR_FILE_LOCK_VIOLATION (- 116)
+#define VERR_CANT_CREATE (- 117)
+#define VERR_CANT_DELETE_DIRECTORY (- 118)
+#define VERR_NOT_SAME_DEVICE (- 119)
+#define VERR_FILENAME_TOO_LONG (- 120)
+#define VERR_MEDIA_NOT_PRESENT (- 121)
+#define VERR_MEDIA_NOT_RECOGNIZED (- 122)
+#define VERR_FILE_NOT_LOCKED (- 123)
+#define VERR_FILE_LOCK_LOST (- 124)
+#define VERR_DIR_NOT_EMPTY (- 125)
+#define VERR_NOT_A_DIRECTORY (- 126)
+#define VERR_IS_A_DIRECTORY (- 127)
+#define VERR_FILE_TOO_BIG (- 128)
+#define VERR_NET_IO_ERROR (- 400)
+#define VERR_NET_OUT_OF_RESOURCES (- 401)
+#define VERR_NET_HOST_NOT_FOUND (- 402)
+#define VERR_NET_PATH_NOT_FOUND (- 403)
+#define VERR_NET_PRINT_ERROR (- 404)
+#define VERR_NET_NO_NETWORK (- 405)
+#define VERR_NET_NOT_UNIQUE_NAME (- 406)
+#define VERR_NET_IN_PROGRESS (- 436)
+#define VERR_NET_ALREADY_IN_PROGRESS (- 437)
+#define VERR_NET_NOT_SOCKET (- 438)
+#define VERR_NET_DEST_ADDRESS_REQUIRED (- 439)
+#define VERR_NET_MSG_SIZE (- 440)
+#define VERR_NET_PROTOCOL_TYPE (- 441)
+#define VERR_NET_PROTOCOL_NOT_AVAILABLE (- 442)
+#define VERR_NET_PROTOCOL_NOT_SUPPORTED (- 443)
+#define VERR_NET_SOCKET_TYPE_NOT_SUPPORTED (- 444)
+#define VERR_NET_OPERATION_NOT_SUPPORTED (- 445)
+#define VERR_NET_PROTOCOL_FAMILY_NOT_SUPPORTED (- 446)
+#define VERR_NET_ADDRESS_FAMILY_NOT_SUPPORTED (- 447)
+#define VERR_NET_ADDRESS_IN_USE (- 448)
+#define VERR_NET_ADDRESS_NOT_AVAILABLE (- 449)
+#define VERR_NET_DOWN (- 450)
+#define VERR_NET_UNREACHABLE (- 451)
+#define VERR_NET_CONNECTION_RESET (- 452)
+#define VERR_NET_CONNECTION_ABORTED (- 453)
+#define VERR_NET_CONNECTION_RESET_BY_PEER (- 454)
+#define VERR_NET_NO_BUFFER_SPACE (- 455)
+#define VERR_NET_ALREADY_CONNECTED (- 456)
+#define VERR_NET_NOT_CONNECTED (- 457)
+#define VERR_NET_SHUTDOWN (- 458)
+#define VERR_NET_TOO_MANY_REFERENCES (- 459)
+#define VERR_NET_CONNECTION_TIMED_OUT (- 460)
+#define VERR_NET_CONNECTION_REFUSED (- 461)
+#define VERR_NET_HOST_DOWN (- 464)
+#define VERR_NET_HOST_UNREACHABLE (- 465)
+#define VERR_NET_PROTOCOL_ERROR (- 466)
+#define VERR_NET_INCOMPLETE_TX_PACKET (- 467)
+#define VERR_RESOURCE_BUSY (- 138)
+#define VERR_DISK_FULL (- 152)
+#define VERR_TOO_MANY_SYMLINKS (- 156)
+#define VERR_NO_MORE_FILES (- 201)
+#define VERR_INTERNAL_ERROR (- 225)
+#define VERR_INTERNAL_ERROR_2 (- 226)
+#define VERR_INTERNAL_ERROR_3 (- 227)
+#define VERR_INTERNAL_ERROR_4 (- 228)
+#define VERR_DEV_IO_ERROR (- 250)
+#define VERR_IO_BAD_LENGTH (- 255)
+#define VERR_BROKEN_PIPE (- 301)
+#define VERR_NO_DATA (- 304)
+#define VERR_SEM_DESTROYED (- 363)
+#define VERR_DEADLOCK (- 365)
+#define VERR_BAD_EXE_FORMAT (- 608)
+#define VINF_HGCM_ASYNC_EXECUTE (2903)
+#endif
diff --git a/libc/kernel/uapi/linux/vbox_vmmdev_types.h b/libc/kernel/uapi/linux/vbox_vmmdev_types.h
new file mode 100644
index 0000000..46b3486
--- /dev/null
+++ b/libc/kernel/uapi/linux/vbox_vmmdev_types.h
@@ -0,0 +1,167 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef __UAPI_VBOX_VMMDEV_TYPES_H__
+#define __UAPI_VBOX_VMMDEV_TYPES_H__
+#include <asm/bitsperlong.h>
+#include <linux/types.h>
+#define VMMDEV_ASSERT_SIZE(type,size) typedef char type ##_asrt_size[1 - 2 * ! ! (sizeof(struct type) != (size))]
+enum vmmdev_request_type {
+ VMMDEVREQ_INVALID_REQUEST = 0,
+ VMMDEVREQ_GET_MOUSE_STATUS = 1,
+ VMMDEVREQ_SET_MOUSE_STATUS = 2,
+ VMMDEVREQ_SET_POINTER_SHAPE = 3,
+ VMMDEVREQ_GET_HOST_VERSION = 4,
+ VMMDEVREQ_IDLE = 5,
+ VMMDEVREQ_GET_HOST_TIME = 10,
+ VMMDEVREQ_GET_HYPERVISOR_INFO = 20,
+ VMMDEVREQ_SET_HYPERVISOR_INFO = 21,
+ VMMDEVREQ_REGISTER_PATCH_MEMORY = 22,
+ VMMDEVREQ_DEREGISTER_PATCH_MEMORY = 23,
+ VMMDEVREQ_SET_POWER_STATUS = 30,
+ VMMDEVREQ_ACKNOWLEDGE_EVENTS = 41,
+ VMMDEVREQ_CTL_GUEST_FILTER_MASK = 42,
+ VMMDEVREQ_REPORT_GUEST_INFO = 50,
+ VMMDEVREQ_REPORT_GUEST_INFO2 = 58,
+ VMMDEVREQ_REPORT_GUEST_STATUS = 59,
+ VMMDEVREQ_REPORT_GUEST_USER_STATE = 74,
+ VMMDEVREQ_GET_DISPLAY_CHANGE_REQ = 51,
+ VMMDEVREQ_VIDEMODE_SUPPORTED = 52,
+ VMMDEVREQ_GET_HEIGHT_REDUCTION = 53,
+ VMMDEVREQ_GET_DISPLAY_CHANGE_REQ2 = 54,
+ VMMDEVREQ_REPORT_GUEST_CAPABILITIES = 55,
+ VMMDEVREQ_SET_GUEST_CAPABILITIES = 56,
+ VMMDEVREQ_VIDEMODE_SUPPORTED2 = 57,
+ VMMDEVREQ_GET_DISPLAY_CHANGE_REQEX = 80,
+ VMMDEVREQ_HGCM_CONNECT = 60,
+ VMMDEVREQ_HGCM_DISCONNECT = 61,
+ VMMDEVREQ_HGCM_CALL32 = 62,
+ VMMDEVREQ_HGCM_CALL64 = 63,
+ VMMDEVREQ_HGCM_CANCEL = 64,
+ VMMDEVREQ_HGCM_CANCEL2 = 65,
+ VMMDEVREQ_VIDEO_ACCEL_ENABLE = 70,
+ VMMDEVREQ_VIDEO_ACCEL_FLUSH = 71,
+ VMMDEVREQ_VIDEO_SET_VISIBLE_REGION = 72,
+ VMMDEVREQ_GET_SEAMLESS_CHANGE_REQ = 73,
+ VMMDEVREQ_QUERY_CREDENTIALS = 100,
+ VMMDEVREQ_REPORT_CREDENTIALS_JUDGEMENT = 101,
+ VMMDEVREQ_REPORT_GUEST_STATS = 110,
+ VMMDEVREQ_GET_MEMBALLOON_CHANGE_REQ = 111,
+ VMMDEVREQ_GET_STATISTICS_CHANGE_REQ = 112,
+ VMMDEVREQ_CHANGE_MEMBALLOON = 113,
+ VMMDEVREQ_GET_VRDPCHANGE_REQ = 150,
+ VMMDEVREQ_LOG_STRING = 200,
+ VMMDEVREQ_GET_CPU_HOTPLUG_REQ = 210,
+ VMMDEVREQ_SET_CPU_HOTPLUG_STATUS = 211,
+ VMMDEVREQ_REGISTER_SHARED_MODULE = 212,
+ VMMDEVREQ_UNREGISTER_SHARED_MODULE = 213,
+ VMMDEVREQ_CHECK_SHARED_MODULES = 214,
+ VMMDEVREQ_GET_PAGE_SHARING_STATUS = 215,
+ VMMDEVREQ_DEBUG_IS_PAGE_SHARED = 216,
+ VMMDEVREQ_GET_SESSION_ID = 217,
+ VMMDEVREQ_WRITE_COREDUMP = 218,
+ VMMDEVREQ_GUEST_HEARTBEAT = 219,
+ VMMDEVREQ_HEARTBEAT_CONFIGURE = 220,
+ VMMDEVREQ_SIZEHACK = 0x7fffffff
+};
+#if __BITS_PER_LONG == 64
+#define VMMDEVREQ_HGCM_CALL VMMDEVREQ_HGCM_CALL64
+#else
+#define VMMDEVREQ_HGCM_CALL VMMDEVREQ_HGCM_CALL32
+#endif
+enum vmmdev_hgcm_service_location_type {
+ VMMDEV_HGCM_LOC_INVALID = 0,
+ VMMDEV_HGCM_LOC_LOCALHOST = 1,
+ VMMDEV_HGCM_LOC_LOCALHOST_EXISTING = 2,
+ VMMDEV_HGCM_LOC_SIZEHACK = 0x7fffffff
+};
+struct vmmdev_hgcm_service_location_localhost {
+ char service_name[128];
+};
+struct vmmdev_hgcm_service_location {
+ enum vmmdev_hgcm_service_location_type type;
+ union {
+ struct vmmdev_hgcm_service_location_localhost localhost;
+ } u;
+};
+enum vmmdev_hgcm_function_parameter_type {
+ VMMDEV_HGCM_PARM_TYPE_INVALID = 0,
+ VMMDEV_HGCM_PARM_TYPE_32BIT = 1,
+ VMMDEV_HGCM_PARM_TYPE_64BIT = 2,
+ VMMDEV_HGCM_PARM_TYPE_PHYSADDR = 3,
+ VMMDEV_HGCM_PARM_TYPE_LINADDR = 4,
+ VMMDEV_HGCM_PARM_TYPE_LINADDR_IN = 5,
+ VMMDEV_HGCM_PARM_TYPE_LINADDR_OUT = 6,
+ VMMDEV_HGCM_PARM_TYPE_LINADDR_KERNEL = 7,
+ VMMDEV_HGCM_PARM_TYPE_LINADDR_KERNEL_IN = 8,
+ VMMDEV_HGCM_PARM_TYPE_LINADDR_KERNEL_OUT = 9,
+ VMMDEV_HGCM_PARM_TYPE_PAGELIST = 10,
+ VMMDEV_HGCM_PARM_TYPE_SIZEHACK = 0x7fffffff
+};
+struct vmmdev_hgcm_function_parameter32 {
+ enum vmmdev_hgcm_function_parameter_type type;
+ union {
+ __u32 value32;
+ __u64 value64;
+ struct {
+ __u32 size;
+ union {
+ __u32 phys_addr;
+ __u32 linear_addr;
+ } u;
+ } pointer;
+ struct {
+ __u32 size;
+ __u32 offset;
+ } page_list;
+ } u;
+} __packed;
+struct vmmdev_hgcm_function_parameter64 {
+ enum vmmdev_hgcm_function_parameter_type type;
+ union {
+ __u32 value32;
+ __u64 value64;
+ struct {
+ __u32 size;
+ union {
+ __u64 phys_addr;
+ __u64 linear_addr;
+ } u;
+ } __packed pointer;
+ struct {
+ __u32 size;
+ __u32 offset;
+ } page_list;
+ } __packed u;
+} __packed;
+#if __BITS_PER_LONG == 64
+#define vmmdev_hgcm_function_parameter vmmdev_hgcm_function_parameter64
+#else
+#define vmmdev_hgcm_function_parameter vmmdev_hgcm_function_parameter32
+#endif
+#define VMMDEV_HGCM_F_PARM_DIRECTION_NONE 0x00000000U
+#define VMMDEV_HGCM_F_PARM_DIRECTION_TO_HOST 0x00000001U
+#define VMMDEV_HGCM_F_PARM_DIRECTION_FROM_HOST 0x00000002U
+#define VMMDEV_HGCM_F_PARM_DIRECTION_BOTH 0x00000003U
+struct vmmdev_hgcm_pagelist {
+ __u32 flags;
+ __u16 offset_first_page;
+ __u16 page_count;
+ __u64 pages[1];
+};
+#endif
diff --git a/libc/kernel/uapi/linux/vboxguest.h b/libc/kernel/uapi/linux/vboxguest.h
new file mode 100644
index 0000000..2eb80ef
--- /dev/null
+++ b/libc/kernel/uapi/linux/vboxguest.h
@@ -0,0 +1,161 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef __UAPI_VBOXGUEST_H__
+#define __UAPI_VBOXGUEST_H__
+#include <asm/bitsperlong.h>
+#include <linux/ioctl.h>
+#include <linux/vbox_err.h>
+#include <linux/vbox_vmmdev_types.h>
+#define VBG_IOCTL_HDR_VERSION 0x10001
+#define VBG_IOCTL_HDR_TYPE_DEFAULT 0
+struct vbg_ioctl_hdr {
+ __u32 size_in;
+ __u32 version;
+ __u32 type;
+ __s32 rc;
+ __u32 size_out;
+ __u32 reserved;
+};
+#define VBG_IOC_VERSION 0x00010000u
+struct vbg_ioctl_driver_version_info {
+ struct vbg_ioctl_hdr hdr;
+ union {
+ struct {
+ __u32 req_version;
+ __u32 min_version;
+ __u32 reserved1;
+ __u32 reserved2;
+ } in;
+ struct {
+ __u32 session_version;
+ __u32 driver_version;
+ __u32 driver_revision;
+ __u32 reserved1;
+ __u32 reserved2;
+ } out;
+ } u;
+};
+#define VBG_IOCTL_DRIVER_VERSION_INFO _IOWR('V', 0, struct vbg_ioctl_driver_version_info)
+#define VBG_IOCTL_VMMDEV_REQUEST(s) _IOC(_IOC_READ | _IOC_WRITE, 'V', 2, s)
+#define VBG_IOCTL_VMMDEV_REQUEST_BIG _IOC(_IOC_READ | _IOC_WRITE, 'V', 3, 0)
+struct vbg_ioctl_hgcm_connect {
+ struct vbg_ioctl_hdr hdr;
+ union {
+ struct {
+ struct vmmdev_hgcm_service_location loc;
+ } in;
+ struct {
+ __u32 client_id;
+ } out;
+ } u;
+};
+#define VBG_IOCTL_HGCM_CONNECT _IOWR('V', 4, struct vbg_ioctl_hgcm_connect)
+struct vbg_ioctl_hgcm_disconnect {
+ struct vbg_ioctl_hdr hdr;
+ union {
+ struct {
+ __u32 client_id;
+ } in;
+ } u;
+};
+#define VBG_IOCTL_HGCM_DISCONNECT _IOWR('V', 5, struct vbg_ioctl_hgcm_disconnect)
+struct vbg_ioctl_hgcm_call {
+ struct vbg_ioctl_hdr hdr;
+ __u32 client_id;
+ __u32 function;
+ __u32 timeout_ms;
+ __u8 interruptible;
+ __u8 reserved;
+ __u16 parm_count;
+};
+#define VBG_IOCTL_HGCM_CALL_32(s) _IOC(_IOC_READ | _IOC_WRITE, 'V', 6, s)
+#define VBG_IOCTL_HGCM_CALL_64(s) _IOC(_IOC_READ | _IOC_WRITE, 'V', 7, s)
+#if __BITS_PER_LONG == 64
+#define VBG_IOCTL_HGCM_CALL(s) VBG_IOCTL_HGCM_CALL_64(s)
+#else
+#define VBG_IOCTL_HGCM_CALL(s) VBG_IOCTL_HGCM_CALL_32(s)
+#endif
+struct vbg_ioctl_log {
+ struct vbg_ioctl_hdr hdr;
+ union {
+ struct {
+ char msg[1];
+ } in;
+ } u;
+};
+#define VBG_IOCTL_LOG(s) _IOC(_IOC_READ | _IOC_WRITE, 'V', 9, s)
+struct vbg_ioctl_wait_for_events {
+ struct vbg_ioctl_hdr hdr;
+ union {
+ struct {
+ __u32 timeout_ms;
+ __u32 events;
+ } in;
+ struct {
+ __u32 events;
+ } out;
+ } u;
+};
+#define VBG_IOCTL_WAIT_FOR_EVENTS _IOWR('V', 10, struct vbg_ioctl_wait_for_events)
+#define VBG_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS _IOWR('V', 11, struct vbg_ioctl_hdr)
+struct vbg_ioctl_change_filter {
+ struct vbg_ioctl_hdr hdr;
+ union {
+ struct {
+ __u32 or_mask;
+ __u32 not_mask;
+ } in;
+ } u;
+};
+#define VBG_IOCTL_CHANGE_FILTER_MASK _IOWR('V', 12, struct vbg_ioctl_change_filter)
+struct vbg_ioctl_set_guest_caps {
+ struct vbg_ioctl_hdr hdr;
+ union {
+ struct {
+ __u32 or_mask;
+ __u32 not_mask;
+ } in;
+ struct {
+ __u32 session_caps;
+ __u32 global_caps;
+ } out;
+ } u;
+};
+#define VBG_IOCTL_CHANGE_GUEST_CAPABILITIES _IOWR('V', 14, struct vbg_ioctl_set_guest_caps)
+struct vbg_ioctl_check_balloon {
+ struct vbg_ioctl_hdr hdr;
+ union {
+ struct {
+ __u32 balloon_chunks;
+ __u8 handle_in_r3;
+ __u8 padding[3];
+ } out;
+ } u;
+};
+#define VBG_IOCTL_CHECK_BALLOON _IOWR('V', 17, struct vbg_ioctl_check_balloon)
+struct vbg_ioctl_write_coredump {
+ struct vbg_ioctl_hdr hdr;
+ union {
+ struct {
+ __u32 flags;
+ } in;
+ } u;
+};
+#define VBG_IOCTL_WRITE_CORE_DUMP _IOWR('V', 19, struct vbg_ioctl_write_coredump)
+#endif
diff --git a/libc/kernel/uapi/linux/version.h b/libc/kernel/uapi/linux/version.h
index 70b6963..61f0c3d 100644
--- a/libc/kernel/uapi/linux/version.h
+++ b/libc/kernel/uapi/linux/version.h
@@ -16,5 +16,5 @@
***
****************************************************************************
****************************************************************************/
-#define LINUX_VERSION_CODE 265984
+#define LINUX_VERSION_CODE 266499
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
diff --git a/libc/kernel/uapi/linux/vfio.h b/libc/kernel/uapi/linux/vfio.h
index 4e3fdb7..8b397f4 100644
--- a/libc/kernel/uapi/linux/vfio.h
+++ b/libc/kernel/uapi/linux/vfio.h
@@ -100,6 +100,7 @@
#define VFIO_REGION_SUBTYPE_INTEL_IGD_OPREGION (1)
#define VFIO_REGION_SUBTYPE_INTEL_IGD_HOST_CFG (2)
#define VFIO_REGION_SUBTYPE_INTEL_IGD_LPC_CFG (3)
+#define VFIO_REGION_INFO_CAP_MSIX_MAPPABLE 3
struct vfio_irq_info {
__u32 argsz;
__u32 flags;
@@ -177,6 +178,43 @@
__s32 group_fds[];
};
#define VFIO_DEVICE_PCI_HOT_RESET _IO(VFIO_TYPE, VFIO_BASE + 13)
+struct vfio_device_gfx_plane_info {
+ __u32 argsz;
+ __u32 flags;
+#define VFIO_GFX_PLANE_TYPE_PROBE (1 << 0)
+#define VFIO_GFX_PLANE_TYPE_DMABUF (1 << 1)
+#define VFIO_GFX_PLANE_TYPE_REGION (1 << 2)
+ __u32 drm_plane_type;
+ __u32 drm_format;
+ __u64 drm_format_mod;
+ __u32 width;
+ __u32 height;
+ __u32 stride;
+ __u32 size;
+ __u32 x_pos;
+ __u32 y_pos;
+ __u32 x_hot;
+ __u32 y_hot;
+ union {
+ __u32 region_index;
+ __u32 dmabuf_id;
+ };
+};
+#define VFIO_DEVICE_QUERY_GFX_PLANE _IO(VFIO_TYPE, VFIO_BASE + 14)
+#define VFIO_DEVICE_GET_GFX_DMABUF _IO(VFIO_TYPE, VFIO_BASE + 15)
+struct vfio_device_ioeventfd {
+ __u32 argsz;
+ __u32 flags;
+#define VFIO_DEVICE_IOEVENTFD_8 (1 << 0)
+#define VFIO_DEVICE_IOEVENTFD_16 (1 << 1)
+#define VFIO_DEVICE_IOEVENTFD_32 (1 << 2)
+#define VFIO_DEVICE_IOEVENTFD_64 (1 << 3)
+#define VFIO_DEVICE_IOEVENTFD_SIZE_MASK (0xf)
+ __u64 offset;
+ __u64 data;
+ __s32 fd;
+};
+#define VFIO_DEVICE_IOEVENTFD _IO(VFIO_TYPE, VFIO_BASE + 16)
struct vfio_iommu_type1_info {
__u32 argsz;
__u32 flags;
diff --git a/libc/kernel/uapi/linux/videodev2.h b/libc/kernel/uapi/linux/videodev2.h
index c350108..0569ba7 100644
--- a/libc/kernel/uapi/linux/videodev2.h
+++ b/libc/kernel/uapi/linux/videodev2.h
@@ -314,6 +314,7 @@
#define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L')
#define V4L2_PIX_FMT_VP8 v4l2_fourcc('V', 'P', '8', '0')
#define V4L2_PIX_FMT_VP9 v4l2_fourcc('V', 'P', '9', '0')
+#define V4L2_PIX_FMT_HEVC v4l2_fourcc('H', 'E', 'V', 'C')
#define V4L2_PIX_FMT_CPIA1 v4l2_fourcc('C', 'P', 'I', 'A')
#define V4L2_PIX_FMT_WNVA v4l2_fourcc('W', 'N', 'V', 'A')
#define V4L2_PIX_FMT_SN9C10X v4l2_fourcc('S', '9', '1', '0')
@@ -345,6 +346,10 @@
#define V4L2_PIX_FMT_Z16 v4l2_fourcc('Z', '1', '6', ' ')
#define V4L2_PIX_FMT_MT21C v4l2_fourcc('M', 'T', '2', '1')
#define V4L2_PIX_FMT_INZI v4l2_fourcc('I', 'N', 'Z', 'I')
+#define V4L2_PIX_FMT_IPU3_SBGGR10 v4l2_fourcc('i', 'p', '3', 'b')
+#define V4L2_PIX_FMT_IPU3_SGBRG10 v4l2_fourcc('i', 'p', '3', 'g')
+#define V4L2_PIX_FMT_IPU3_SGRBG10 v4l2_fourcc('i', 'p', '3', 'G')
+#define V4L2_PIX_FMT_IPU3_SRGGB10 v4l2_fourcc('i', 'p', '3', 'r')
#define V4L2_SDR_FMT_CU8 v4l2_fourcc('C', 'U', '0', '8')
#define V4L2_SDR_FMT_CU16LE v4l2_fourcc('C', 'U', '1', '6')
#define V4L2_SDR_FMT_CS8 v4l2_fourcc('C', 'S', '0', '8')
@@ -359,6 +364,7 @@
#define V4L2_TCH_FMT_TU08 v4l2_fourcc('T', 'U', '0', '8')
#define V4L2_META_FMT_VSP1_HGO v4l2_fourcc('V', 'S', 'P', 'H')
#define V4L2_META_FMT_VSP1_HGT v4l2_fourcc('V', 'S', 'P', 'T')
+#define V4L2_META_FMT_UVC v4l2_fourcc('U', 'V', 'C', 'H')
#define V4L2_PIX_FMT_PRIV_MAGIC 0xfeedcafe
#define V4L2_PIX_FMT_FLAG_PREMUL_ALPHA 0x00000001
struct v4l2_fmtdesc {
diff --git a/libc/kernel/uapi/linux/virtio_balloon.h b/libc/kernel/uapi/linux/virtio_balloon.h
index 9f383bc..5969fa0 100644
--- a/libc/kernel/uapi/linux/virtio_balloon.h
+++ b/libc/kernel/uapi/linux/virtio_balloon.h
@@ -37,7 +37,13 @@
#define VIRTIO_BALLOON_S_MEMFREE 4
#define VIRTIO_BALLOON_S_MEMTOT 5
#define VIRTIO_BALLOON_S_AVAIL 6
-#define VIRTIO_BALLOON_S_NR 7
+#define VIRTIO_BALLOON_S_CACHES 7
+#define VIRTIO_BALLOON_S_HTLB_PGALLOC 8
+#define VIRTIO_BALLOON_S_HTLB_PGFAIL 9
+#define VIRTIO_BALLOON_S_NR 10
+#define VIRTIO_BALLOON_S_NAMES_WITH_PREFIX(VIRTIO_BALLOON_S_NAMES_prefix) { VIRTIO_BALLOON_S_NAMES_prefix "swap-in", VIRTIO_BALLOON_S_NAMES_prefix "swap-out", VIRTIO_BALLOON_S_NAMES_prefix "major-faults", VIRTIO_BALLOON_S_NAMES_prefix "minor-faults", VIRTIO_BALLOON_S_NAMES_prefix "free-memory", VIRTIO_BALLOON_S_NAMES_prefix "total-memory", VIRTIO_BALLOON_S_NAMES_prefix "available-memory", VIRTIO_BALLOON_S_NAMES_prefix "disk-caches", VIRTIO_BALLOON_S_NAMES_prefix "hugetlb-allocations", VIRTIO_BALLOON_S_NAMES_prefix "hugetlb-failures" \
+}
+#define VIRTIO_BALLOON_S_NAMES VIRTIO_BALLOON_S_NAMES_WITH_PREFIX("")
struct virtio_balloon_stat {
__virtio16 tag;
__virtio64 val;
diff --git a/libc/kernel/uapi/linux/virtio_net.h b/libc/kernel/uapi/linux/virtio_net.h
index ed9df3f..329d736 100644
--- a/libc/kernel/uapi/linux/virtio_net.h
+++ b/libc/kernel/uapi/linux/virtio_net.h
@@ -45,6 +45,7 @@
#define VIRTIO_NET_F_GUEST_ANNOUNCE 21
#define VIRTIO_NET_F_MQ 22
#define VIRTIO_NET_F_CTRL_MAC_ADDR 23
+#define VIRTIO_NET_F_SPEED_DUPLEX 63
#ifndef VIRTIO_NET_NO_LEGACY
#define VIRTIO_NET_F_GSO 6
#endif
@@ -55,6 +56,8 @@
__u16 status;
__u16 max_virtqueue_pairs;
__u16 mtu;
+ __u32 speed;
+ __u8 duplex;
} __attribute__((packed));
struct virtio_net_hdr_v1 {
#define VIRTIO_NET_HDR_F_NEEDS_CSUM 1
diff --git a/libc/kernel/uapi/misc/cxl.h b/libc/kernel/uapi/misc/cxl.h
index d9cfa5e..64b5992 100644
--- a/libc/kernel/uapi/misc/cxl.h
+++ b/libc/kernel/uapi/misc/cxl.h
@@ -25,17 +25,18 @@
__u64 work_element_descriptor;
__u64 amr;
__s16 num_interrupts;
- __s16 reserved1;
- __s32 reserved2;
+ __u16 tid;
+ __s32 reserved1;
+ __u64 reserved2;
__u64 reserved3;
__u64 reserved4;
__u64 reserved5;
- __u64 reserved6;
};
#define CXL_START_WORK_AMR 0x0000000000000001ULL
#define CXL_START_WORK_NUM_IRQS 0x0000000000000002ULL
#define CXL_START_WORK_ERR_FF 0x0000000000000004ULL
-#define CXL_START_WORK_ALL (CXL_START_WORK_AMR | CXL_START_WORK_NUM_IRQS | CXL_START_WORK_ERR_FF)
+#define CXL_START_WORK_TID 0x0000000000000008ULL
+#define CXL_START_WORK_ALL (CXL_START_WORK_AMR | CXL_START_WORK_NUM_IRQS | CXL_START_WORK_ERR_FF | CXL_START_WORK_TID)
#define CXL_MODE_DEDICATED 0x1
#define CXL_MODE_DIRECTED 0x2
#define CXL_AFUID_FLAG_SLAVE 0x1
diff --git a/libc/kernel/uapi/misc/ocxl.h b/libc/kernel/uapi/misc/ocxl.h
new file mode 100644
index 0000000..98d3eac
--- /dev/null
+++ b/libc/kernel/uapi/misc/ocxl.h
@@ -0,0 +1,64 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _UAPI_MISC_OCXL_H
+#define _UAPI_MISC_OCXL_H
+#include <linux/types.h>
+#include <linux/ioctl.h>
+enum ocxl_event_type {
+ OCXL_AFU_EVENT_XSL_FAULT_ERROR = 0,
+};
+#define OCXL_KERNEL_EVENT_FLAG_LAST 0x0001
+struct ocxl_kernel_event_header {
+ __u16 type;
+ __u16 flags;
+ __u32 reserved;
+};
+struct ocxl_kernel_event_xsl_fault_error {
+ __u64 addr;
+ __u64 dsisr;
+ __u64 count;
+ __u64 reserved;
+};
+struct ocxl_ioctl_attach {
+ __u64 amr;
+ __u64 reserved1;
+ __u64 reserved2;
+ __u64 reserved3;
+};
+struct ocxl_ioctl_metadata {
+ __u16 version;
+ __u8 afu_version_major;
+ __u8 afu_version_minor;
+ __u32 pasid;
+ __u64 pp_mmio_size;
+ __u64 global_mmio_size;
+ __u64 reserved[13];
+};
+struct ocxl_ioctl_irq_fd {
+ __u64 irq_offset;
+ __s32 eventfd;
+ __u32 reserved;
+};
+#define OCXL_MAGIC 0xCA
+#define OCXL_IOCTL_ATTACH _IOW(OCXL_MAGIC, 0x10, struct ocxl_ioctl_attach)
+#define OCXL_IOCTL_IRQ_ALLOC _IOR(OCXL_MAGIC, 0x11, __u64)
+#define OCXL_IOCTL_IRQ_FREE _IOW(OCXL_MAGIC, 0x12, __u64)
+#define OCXL_IOCTL_IRQ_SET_FD _IOW(OCXL_MAGIC, 0x13, struct ocxl_ioctl_irq_fd)
+#define OCXL_IOCTL_GET_METADATA _IOR(OCXL_MAGIC, 0x14, struct ocxl_ioctl_metadata)
+#endif
diff --git a/libc/kernel/uapi/rdma/bnxt_re-abi.h b/libc/kernel/uapi/rdma/bnxt_re-abi.h
index 873c466..4e29624 100644
--- a/libc/kernel/uapi/rdma/bnxt_re-abi.h
+++ b/libc/kernel/uapi/rdma/bnxt_re-abi.h
@@ -32,10 +32,10 @@
__u32 pdid;
__u32 dpi;
__u64 dbr;
-};
+} __attribute__((packed, aligned(4)));
struct bnxt_re_cq_req {
- __u64 cq_va;
- __u64 cq_handle;
+ __aligned_u64 cq_va;
+ __aligned_u64 cq_handle;
};
struct bnxt_re_cq_resp {
__u32 cqid;
@@ -44,14 +44,21 @@
__u32 rsvd;
};
struct bnxt_re_qp_req {
- __u64 qpsva;
- __u64 qprva;
- __u64 qp_handle;
+ __aligned_u64 qpsva;
+ __aligned_u64 qprva;
+ __aligned_u64 qp_handle;
};
struct bnxt_re_qp_resp {
__u32 qpid;
__u32 rsvd;
};
+struct bnxt_re_srq_req {
+ __aligned_u64 srqva;
+ __aligned_u64 srq_handle;
+};
+struct bnxt_re_srq_resp {
+ __u32 srqid;
+};
enum bnxt_re_shpg_offt {
BNXT_RE_BEG_RESV_OFFT = 0x00,
BNXT_RE_AVID_OFFT = 0x10,
diff --git a/libc/kernel/uapi/rdma/cxgb3-abi.h b/libc/kernel/uapi/rdma/cxgb3-abi.h
index 6f015ef..205d748 100644
--- a/libc/kernel/uapi/rdma/cxgb3-abi.h
+++ b/libc/kernel/uapi/rdma/cxgb3-abi.h
@@ -21,23 +21,23 @@
#include <linux/types.h>
#define IWCH_UVERBS_ABI_VERSION 1
struct iwch_create_cq_req {
- __u64 user_rptr_addr;
+ __aligned_u64 user_rptr_addr;
};
struct iwch_create_cq_resp_v0 {
- __u64 key;
+ __aligned_u64 key;
__u32 cqid;
__u32 size_log2;
};
struct iwch_create_cq_resp {
- __u64 key;
+ __aligned_u64 key;
__u32 cqid;
__u32 size_log2;
__u32 memsize;
__u32 reserved;
};
struct iwch_create_qp_resp {
- __u64 key;
- __u64 db_key;
+ __aligned_u64 key;
+ __aligned_u64 db_key;
__u32 qpid;
__u32 size_log2;
__u32 sq_size_log2;
@@ -46,4 +46,7 @@
struct iwch_reg_user_mr_resp {
__u32 pbl_addr;
};
+struct iwch_alloc_pd_resp {
+ __u32 pdid;
+};
#endif
diff --git a/libc/kernel/uapi/rdma/cxgb4-abi.h b/libc/kernel/uapi/rdma/cxgb4-abi.h
index 42ed246..188d901 100644
--- a/libc/kernel/uapi/rdma/cxgb4-abi.h
+++ b/libc/kernel/uapi/rdma/cxgb4-abi.h
@@ -21,9 +21,9 @@
#include <linux/types.h>
#define C4IW_UVERBS_ABI_VERSION 3
struct c4iw_create_cq_resp {
- __u64 key;
- __u64 gts_key;
- __u64 memsize;
+ __aligned_u64 key;
+ __aligned_u64 gts_key;
+ __aligned_u64 memsize;
__u32 cqid;
__u32 size;
__u32 qid_mask;
@@ -33,13 +33,13 @@
C4IW_QPF_ONCHIP = (1 << 0)
};
struct c4iw_create_qp_resp {
- __u64 ma_sync_key;
- __u64 sq_key;
- __u64 rq_key;
- __u64 sq_db_gts_key;
- __u64 rq_db_gts_key;
- __u64 sq_memsize;
- __u64 rq_memsize;
+ __aligned_u64 ma_sync_key;
+ __aligned_u64 sq_key;
+ __aligned_u64 rq_key;
+ __aligned_u64 sq_db_gts_key;
+ __aligned_u64 rq_db_gts_key;
+ __aligned_u64 sq_memsize;
+ __aligned_u64 rq_memsize;
__u32 sqid;
__u32 rqid;
__u32 sq_size;
@@ -48,8 +48,11 @@
__u32 flags;
};
struct c4iw_alloc_ucontext_resp {
- __u64 status_page_key;
+ __aligned_u64 status_page_key;
__u32 status_page_size;
__u32 reserved;
};
+struct c4iw_alloc_pd_resp {
+ __u32 pdid;
+};
#endif
diff --git a/libc/kernel/uapi/rdma/hfi/hfi1_ioctl.h b/libc/kernel/uapi/rdma/hfi/hfi1_ioctl.h
index ea828fb..a430650 100644
--- a/libc/kernel/uapi/rdma/hfi/hfi1_ioctl.h
+++ b/libc/kernel/uapi/rdma/hfi/hfi1_ioctl.h
@@ -27,7 +27,7 @@
__u8 uuid[16];
};
struct hfi1_ctxt_info {
- __u64 runtime_flags;
+ __aligned_u64 runtime_flags;
__u32 rcvegr_size;
__u16 num_active;
__u16 unit;
@@ -44,8 +44,8 @@
__u16 sdma_ring_size;
};
struct hfi1_tid_info {
- __u64 vaddr;
- __u64 tidlist;
+ __aligned_u64 vaddr;
+ __aligned_u64 tidlist;
__u32 tidcnt;
__u32 length;
};
@@ -55,18 +55,18 @@
__u16 jkey;
__u16 padding1;
__u32 bthqp;
- __u64 sc_credits_addr;
- __u64 pio_bufbase_sop;
- __u64 pio_bufbase;
- __u64 rcvhdr_bufbase;
- __u64 rcvegr_bufbase;
- __u64 sdma_comp_bufbase;
- __u64 user_regbase;
- __u64 events_bufbase;
- __u64 status_bufbase;
- __u64 rcvhdrtail_base;
- __u64 subctxt_uregbase;
- __u64 subctxt_rcvegrbuf;
- __u64 subctxt_rcvhdrbuf;
+ __aligned_u64 sc_credits_addr;
+ __aligned_u64 pio_bufbase_sop;
+ __aligned_u64 pio_bufbase;
+ __aligned_u64 rcvhdr_bufbase;
+ __aligned_u64 rcvegr_bufbase;
+ __aligned_u64 sdma_comp_bufbase;
+ __aligned_u64 user_regbase;
+ __aligned_u64 events_bufbase;
+ __aligned_u64 status_bufbase;
+ __aligned_u64 rcvhdrtail_base;
+ __aligned_u64 subctxt_uregbase;
+ __aligned_u64 subctxt_rcvegrbuf;
+ __aligned_u64 subctxt_rcvhdrbuf;
};
#endif
diff --git a/libc/kernel/uapi/rdma/hfi/hfi1_user.h b/libc/kernel/uapi/rdma/hfi/hfi1_user.h
index 0d840e9..9148ed5 100644
--- a/libc/kernel/uapi/rdma/hfi/hfi1_user.h
+++ b/libc/kernel/uapi/rdma/hfi/hfi1_user.h
@@ -75,8 +75,8 @@
__u32 errcode;
};
struct hfi1_status {
- __u64 dev;
- __u64 port;
+ __aligned_u64 dev;
+ __aligned_u64 port;
char freezemsg[0];
};
enum sdma_req_opcode {
@@ -94,19 +94,19 @@
__u16 npkts;
__u16 fragsize;
__u16 comp_idx;
-} __packed;
+} __attribute__((__packed__));
struct hfi1_kdeth_header {
__le32 ver_tid_offset;
__le16 jkey;
__le16 hcrc;
__le32 swdata[7];
-} __packed;
+} __attribute__((__packed__));
struct hfi1_pkt_header {
__le16 pbc[4];
__be16 lrh[4];
__be32 bth[3];
struct hfi1_kdeth_header kdeth;
-} __packed;
+} __attribute__((__packed__));
enum hfi1_ureg {
ur_rcvhdrtail = 0,
ur_rcvhdrhead = 1,
diff --git a/libc/kernel/uapi/rdma/hns-abi.h b/libc/kernel/uapi/rdma/hns-abi.h
index e6c0618..8c66f27 100644
--- a/libc/kernel/uapi/rdma/hns-abi.h
+++ b/libc/kernel/uapi/rdma/hns-abi.h
@@ -20,17 +20,29 @@
#define HNS_ABI_USER_H
#include <linux/types.h>
struct hns_roce_ib_create_cq {
- __u64 buf_addr;
+ __aligned_u64 buf_addr;
+ __aligned_u64 db_addr;
+};
+struct hns_roce_ib_create_cq_resp {
+ __aligned_u64 cqn;
+ __aligned_u64 cap_flags;
};
struct hns_roce_ib_create_qp {
- __u64 buf_addr;
- __u64 db_addr;
+ __aligned_u64 buf_addr;
+ __aligned_u64 db_addr;
__u8 log_sq_bb_count;
__u8 log_sq_stride;
__u8 sq_no_prefetch;
__u8 reserved[5];
};
+struct hns_roce_ib_create_qp_resp {
+ __aligned_u64 cap_flags;
+};
struct hns_roce_ib_alloc_ucontext_resp {
__u32 qp_tab_size;
+ __u32 reserved;
+};
+struct hns_roce_ib_alloc_pd_resp {
+ __u32 pdn;
};
#endif
diff --git a/libc/kernel/uapi/rdma/i40iw-abi.h b/libc/kernel/uapi/rdma/i40iw-abi.h
new file mode 100644
index 0000000..60a17f5
--- /dev/null
+++ b/libc/kernel/uapi/rdma/i40iw-abi.h
@@ -0,0 +1,75 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef I40IW_ABI_H
+#define I40IW_ABI_H
+#include <linux/types.h>
+#define I40IW_ABI_VER 5
+struct i40iw_alloc_ucontext_req {
+ __u32 reserved32;
+ __u8 userspace_ver;
+ __u8 reserved8[3];
+};
+struct i40iw_alloc_ucontext_resp {
+ __u32 max_pds;
+ __u32 max_qps;
+ __u32 wq_size;
+ __u8 kernel_ver;
+ __u8 reserved[3];
+};
+struct i40iw_alloc_pd_resp {
+ __u32 pd_id;
+ __u8 reserved[4];
+};
+struct i40iw_create_cq_req {
+ __aligned_u64 user_cq_buffer;
+ __aligned_u64 user_shadow_area;
+};
+struct i40iw_create_qp_req {
+ __aligned_u64 user_wqe_buffers;
+ __aligned_u64 user_compl_ctx;
+ __aligned_u64 user_sq_phb;
+ __aligned_u64 user_rq_phb;
+};
+enum i40iw_memreg_type {
+ IW_MEMREG_TYPE_MEM = 0x0000,
+ IW_MEMREG_TYPE_QP = 0x0001,
+ IW_MEMREG_TYPE_CQ = 0x0002,
+};
+struct i40iw_mem_reg_req {
+ __u16 reg_type;
+ __u16 cq_pages;
+ __u16 rq_pages;
+ __u16 sq_pages;
+};
+struct i40iw_create_cq_resp {
+ __u32 cq_id;
+ __u32 cq_size;
+ __u32 mmap_db_index;
+ __u32 reserved;
+};
+struct i40iw_create_qp_resp {
+ __u32 qp_id;
+ __u32 actual_sq_size;
+ __u32 actual_rq_size;
+ __u32 i40iw_drv_opt;
+ __u16 push_idx;
+ __u8 lsmm;
+ __u8 rsvd2;
+};
+#endif
diff --git a/libc/kernel/uapi/rdma/ib_user_cm.h b/libc/kernel/uapi/rdma/ib_user_cm.h
index 0802f2a..5ba46b8 100644
--- a/libc/kernel/uapi/rdma/ib_user_cm.h
+++ b/libc/kernel/uapi/rdma/ib_user_cm.h
@@ -47,14 +47,14 @@
__u16 out;
};
struct ib_ucm_create_id {
- __u64 uid;
- __u64 response;
+ __aligned_u64 uid;
+ __aligned_u64 response;
};
struct ib_ucm_create_id_resp {
__u32 id;
};
struct ib_ucm_destroy_id {
- __u64 response;
+ __aligned_u64 response;
__u32 id;
__u32 reserved;
};
@@ -62,7 +62,7 @@
__u32 events_reported;
};
struct ib_ucm_attr_id {
- __u64 response;
+ __aligned_u64 response;
__u32 id;
__u32 reserved;
};
@@ -73,7 +73,7 @@
__be32 remote_id;
};
struct ib_ucm_init_qp_attr {
- __u64 response;
+ __aligned_u64 response;
__u32 id;
__u32 qp_state;
};
@@ -88,7 +88,7 @@
__u32 event;
};
struct ib_ucm_private_data {
- __u64 data;
+ __aligned_u64 data;
__u32 id;
__u8 len;
__u8 reserved[3];
@@ -99,9 +99,9 @@
__u32 qp_type;
__u32 psn;
__be64 sid;
- __u64 data;
- __u64 primary_path;
- __u64 alternate_path;
+ __aligned_u64 data;
+ __aligned_u64 primary_path;
+ __aligned_u64 alternate_path;
__u8 len;
__u8 peer_to_peer;
__u8 responder_resources;
@@ -116,8 +116,8 @@
__u8 reserved[5];
};
struct ib_ucm_rep {
- __u64 uid;
- __u64 data;
+ __aligned_u64 uid;
+ __aligned_u64 data;
__u32 id;
__u32 qpn;
__u32 psn;
@@ -134,22 +134,22 @@
struct ib_ucm_info {
__u32 id;
__u32 status;
- __u64 info;
- __u64 data;
+ __aligned_u64 info;
+ __aligned_u64 data;
__u8 info_len;
__u8 data_len;
__u8 reserved[6];
};
struct ib_ucm_mra {
- __u64 data;
+ __aligned_u64 data;
__u32 id;
__u8 len;
__u8 timeout;
__u8 reserved[2];
};
struct ib_ucm_lap {
- __u64 path;
- __u64 data;
+ __aligned_u64 path;
+ __aligned_u64 data;
__u32 id;
__u8 len;
__u8 reserved[3];
@@ -158,8 +158,8 @@
__u32 id;
__u32 timeout;
__be64 sid;
- __u64 data;
- __u64 path;
+ __aligned_u64 data;
+ __aligned_u64 path;
__u16 reserved_pkey;
__u8 len;
__u8 max_cm_retries;
@@ -170,16 +170,16 @@
__u32 qpn;
__u32 qkey;
__u32 status;
- __u64 info;
- __u64 data;
+ __aligned_u64 info;
+ __aligned_u64 data;
__u8 info_len;
__u8 data_len;
__u8 reserved[6];
};
struct ib_ucm_event_get {
- __u64 response;
- __u64 data;
- __u64 info;
+ __aligned_u64 response;
+ __aligned_u64 data;
+ __aligned_u64 info;
__u8 data_len;
__u8 info_len;
__u8 reserved[6];
@@ -245,7 +245,7 @@
#define IB_UCM_PRES_PRIMARY 0x04
#define IB_UCM_PRES_ALTERNATE 0x08
struct ib_ucm_event_resp {
- __u64 uid;
+ __aligned_u64 uid;
__u32 id;
__u32 event;
__u32 present;
diff --git a/libc/kernel/uapi/rdma/ib_user_ioctl_cmds.h b/libc/kernel/uapi/rdma/ib_user_ioctl_cmds.h
new file mode 100644
index 0000000..4bc9786
--- /dev/null
+++ b/libc/kernel/uapi/rdma/ib_user_ioctl_cmds.h
@@ -0,0 +1,104 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef IB_USER_IOCTL_CMDS_H
+#define IB_USER_IOCTL_CMDS_H
+#define UVERBS_ID_NS_MASK 0xF000
+#define UVERBS_ID_NS_SHIFT 12
+#define UVERBS_UDATA_DRIVER_DATA_NS 1
+#define UVERBS_UDATA_DRIVER_DATA_FLAG (1UL << UVERBS_ID_NS_SHIFT)
+enum uverbs_default_objects {
+ UVERBS_OBJECT_DEVICE,
+ UVERBS_OBJECT_PD,
+ UVERBS_OBJECT_COMP_CHANNEL,
+ UVERBS_OBJECT_CQ,
+ UVERBS_OBJECT_QP,
+ UVERBS_OBJECT_SRQ,
+ UVERBS_OBJECT_AH,
+ UVERBS_OBJECT_MR,
+ UVERBS_OBJECT_MW,
+ UVERBS_OBJECT_FLOW,
+ UVERBS_OBJECT_XRCD,
+ UVERBS_OBJECT_RWQ_IND_TBL,
+ UVERBS_OBJECT_WQ,
+ UVERBS_OBJECT_FLOW_ACTION,
+ UVERBS_OBJECT_DM,
+};
+enum {
+ UVERBS_ATTR_UHW_IN = UVERBS_UDATA_DRIVER_DATA_FLAG,
+ UVERBS_ATTR_UHW_OUT,
+};
+enum uverbs_attrs_create_cq_cmd_attr_ids {
+ UVERBS_ATTR_CREATE_CQ_HANDLE,
+ UVERBS_ATTR_CREATE_CQ_CQE,
+ UVERBS_ATTR_CREATE_CQ_USER_HANDLE,
+ UVERBS_ATTR_CREATE_CQ_COMP_CHANNEL,
+ UVERBS_ATTR_CREATE_CQ_COMP_VECTOR,
+ UVERBS_ATTR_CREATE_CQ_FLAGS,
+ UVERBS_ATTR_CREATE_CQ_RESP_CQE,
+};
+enum uverbs_attrs_destroy_cq_cmd_attr_ids {
+ UVERBS_ATTR_DESTROY_CQ_HANDLE,
+ UVERBS_ATTR_DESTROY_CQ_RESP,
+};
+enum uverbs_attrs_create_flow_action_esp {
+ UVERBS_ATTR_FLOW_ACTION_ESP_HANDLE,
+ UVERBS_ATTR_FLOW_ACTION_ESP_ATTRS,
+ UVERBS_ATTR_FLOW_ACTION_ESP_ESN,
+ UVERBS_ATTR_FLOW_ACTION_ESP_KEYMAT,
+ UVERBS_ATTR_FLOW_ACTION_ESP_REPLAY,
+ UVERBS_ATTR_FLOW_ACTION_ESP_ENCAP,
+};
+enum uverbs_attrs_destroy_flow_action_esp {
+ UVERBS_ATTR_DESTROY_FLOW_ACTION_HANDLE,
+};
+enum uverbs_methods_cq {
+ UVERBS_METHOD_CQ_CREATE,
+ UVERBS_METHOD_CQ_DESTROY,
+};
+enum uverbs_methods_actions_flow_action_ops {
+ UVERBS_METHOD_FLOW_ACTION_ESP_CREATE,
+ UVERBS_METHOD_FLOW_ACTION_DESTROY,
+ UVERBS_METHOD_FLOW_ACTION_ESP_MODIFY,
+};
+enum uverbs_attrs_alloc_dm_cmd_attr_ids {
+ UVERBS_ATTR_ALLOC_DM_HANDLE,
+ UVERBS_ATTR_ALLOC_DM_LENGTH,
+ UVERBS_ATTR_ALLOC_DM_ALIGNMENT,
+};
+enum uverbs_attrs_free_dm_cmd_attr_ids {
+ UVERBS_ATTR_FREE_DM_HANDLE,
+};
+enum uverbs_methods_dm {
+ UVERBS_METHOD_DM_ALLOC,
+ UVERBS_METHOD_DM_FREE,
+};
+enum uverbs_attrs_reg_dm_mr_cmd_attr_ids {
+ UVERBS_ATTR_REG_DM_MR_HANDLE,
+ UVERBS_ATTR_REG_DM_MR_OFFSET,
+ UVERBS_ATTR_REG_DM_MR_LENGTH,
+ UVERBS_ATTR_REG_DM_MR_PD_HANDLE,
+ UVERBS_ATTR_REG_DM_MR_ACCESS_FLAGS,
+ UVERBS_ATTR_REG_DM_MR_DM_HANDLE,
+ UVERBS_ATTR_REG_DM_MR_RESP_LKEY,
+ UVERBS_ATTR_REG_DM_MR_RESP_RKEY,
+};
+enum uverbs_methods_mr {
+ UVERBS_METHOD_DM_MR_REG,
+};
+#endif
diff --git a/libc/kernel/uapi/rdma/ib_user_ioctl_verbs.h b/libc/kernel/uapi/rdma/ib_user_ioctl_verbs.h
index 766fe4c..261734e 100644
--- a/libc/kernel/uapi/rdma/ib_user_ioctl_verbs.h
+++ b/libc/kernel/uapi/rdma/ib_user_ioctl_verbs.h
@@ -18,44 +18,51 @@
****************************************************************************/
#ifndef IB_USER_IOCTL_VERBS_H
#define IB_USER_IOCTL_VERBS_H
-#include <rdma/rdma_user_ioctl.h>
-#define UVERBS_UDATA_DRIVER_DATA_NS 1
-#define UVERBS_UDATA_DRIVER_DATA_FLAG (1UL << UVERBS_ID_NS_SHIFT)
-enum uverbs_default_objects {
- UVERBS_OBJECT_DEVICE,
- UVERBS_OBJECT_PD,
- UVERBS_OBJECT_COMP_CHANNEL,
- UVERBS_OBJECT_CQ,
- UVERBS_OBJECT_QP,
- UVERBS_OBJECT_SRQ,
- UVERBS_OBJECT_AH,
- UVERBS_OBJECT_MR,
- UVERBS_OBJECT_MW,
- UVERBS_OBJECT_FLOW,
- UVERBS_OBJECT_XRCD,
- UVERBS_OBJECT_RWQ_IND_TBL,
- UVERBS_OBJECT_WQ,
- UVERBS_OBJECT_LAST,
+#include <linux/types.h>
+#ifndef RDMA_UAPI_PTR
+#define RDMA_UAPI_PTR(_type,_name) __aligned_u64 _name
+#endif
+enum ib_uverbs_flow_action_esp_keymat {
+ IB_UVERBS_FLOW_ACTION_ESP_KEYMAT_AES_GCM,
};
-enum {
- UVERBS_UHW_IN = UVERBS_UDATA_DRIVER_DATA_FLAG,
- UVERBS_UHW_OUT,
+enum ib_uverbs_flow_action_esp_keymat_aes_gcm_iv_algo {
+ IB_UVERBS_FLOW_ACTION_IV_ALGO_SEQ,
};
-enum uverbs_create_cq_cmd_attr_ids {
- CREATE_CQ_HANDLE,
- CREATE_CQ_CQE,
- CREATE_CQ_USER_HANDLE,
- CREATE_CQ_COMP_CHANNEL,
- CREATE_CQ_COMP_VECTOR,
- CREATE_CQ_FLAGS,
- CREATE_CQ_RESP_CQE,
+struct ib_uverbs_flow_action_esp_keymat_aes_gcm {
+ __aligned_u64 iv;
+ __u32 iv_algo;
+ __u32 salt;
+ __u32 icv_len;
+ __u32 key_len;
+ __u32 aes_key[256 / 32];
};
-enum uverbs_destroy_cq_cmd_attr_ids {
- DESTROY_CQ_HANDLE,
- DESTROY_CQ_RESP,
+enum ib_uverbs_flow_action_esp_replay {
+ IB_UVERBS_FLOW_ACTION_ESP_REPLAY_NONE,
+ IB_UVERBS_FLOW_ACTION_ESP_REPLAY_BMP,
};
-enum uverbs_actions_cq_ops {
- UVERBS_CQ_CREATE,
- UVERBS_CQ_DESTROY,
+struct ib_uverbs_flow_action_esp_replay_bmp {
+ __u32 size;
+};
+enum ib_uverbs_flow_action_esp_flags {
+ IB_UVERBS_FLOW_ACTION_ESP_FLAGS_INLINE_CRYPTO = 0UL << 0,
+ IB_UVERBS_FLOW_ACTION_ESP_FLAGS_FULL_OFFLOAD = 1UL << 0,
+ IB_UVERBS_FLOW_ACTION_ESP_FLAGS_TUNNEL = 0UL << 1,
+ IB_UVERBS_FLOW_ACTION_ESP_FLAGS_TRANSPORT = 1UL << 1,
+ IB_UVERBS_FLOW_ACTION_ESP_FLAGS_DECRYPT = 0UL << 2,
+ IB_UVERBS_FLOW_ACTION_ESP_FLAGS_ENCRYPT = 1UL << 2,
+ IB_UVERBS_FLOW_ACTION_ESP_FLAGS_ESN_NEW_WINDOW = 1UL << 3,
+};
+struct ib_uverbs_flow_action_esp_encap {
+ RDMA_UAPI_PTR(void *, val_ptr);
+ RDMA_UAPI_PTR(struct ib_uverbs_flow_action_esp_encap *, next_ptr);
+ __u16 len;
+ __u16 type;
+};
+struct ib_uverbs_flow_action_esp {
+ __u32 spi;
+ __u32 seq;
+ __u32 tfc_pad;
+ __u32 flags;
+ __aligned_u64 hard_limit_pkts;
};
#endif
diff --git a/libc/kernel/uapi/rdma/ib_user_mad.h b/libc/kernel/uapi/rdma/ib_user_mad.h
index cd723bb..dadb590 100644
--- a/libc/kernel/uapi/rdma/ib_user_mad.h
+++ b/libc/kernel/uapi/rdma/ib_user_mad.h
@@ -61,7 +61,7 @@
};
struct ib_user_mad {
struct ib_user_mad_hdr hdr;
- __u64 data[0];
+ __aligned_u64 data[0];
};
typedef unsigned long __attribute__((aligned(4))) packed_ulong;
#define IB_USER_MAD_LONGS_PER_METHOD_MASK (128 / (8 * sizeof(long)))
@@ -85,7 +85,7 @@
__u8 mgmt_class_version;
__u16 res;
__u32 flags;
- __u64 method_mask[2];
+ __aligned_u64 method_mask[2];
__u32 oui;
__u8 rmpp_version;
__u8 reserved[3];
diff --git a/libc/kernel/uapi/rdma/ib_user_verbs.h b/libc/kernel/uapi/rdma/ib_user_verbs.h
index 03a2fcd..53e4725 100644
--- a/libc/kernel/uapi/rdma/ib_user_verbs.h
+++ b/libc/kernel/uapi/rdma/ib_user_verbs.h
@@ -79,12 +79,12 @@
IB_USER_VERBS_EX_CMD_MODIFY_CQ
};
struct ib_uverbs_async_event_desc {
- __u64 element;
+ __aligned_u64 element;
__u32 event_type;
__u32 reserved;
};
struct ib_uverbs_comp_event_desc {
- __u64 cq_handle;
+ __aligned_u64 cq_handle;
};
struct ib_uverbs_cq_moderation_caps {
__u16 max_cq_moderation_count;
@@ -92,38 +92,36 @@
__u32 reserved;
};
#define IB_USER_VERBS_CMD_COMMAND_MASK 0xff
-#define IB_USER_VERBS_CMD_FLAGS_MASK 0xff000000u
-#define IB_USER_VERBS_CMD_FLAGS_SHIFT 24
-#define IB_USER_VERBS_CMD_FLAG_EXTENDED 0x80
+#define IB_USER_VERBS_CMD_FLAG_EXTENDED 0x80000000u
struct ib_uverbs_cmd_hdr {
__u32 command;
__u16 in_words;
__u16 out_words;
};
struct ib_uverbs_ex_cmd_hdr {
- __u64 response;
+ __aligned_u64 response;
__u16 provider_in_words;
__u16 provider_out_words;
__u32 cmd_hdr_reserved;
};
struct ib_uverbs_get_context {
- __u64 response;
- __u64 driver_data[0];
+ __aligned_u64 response;
+ __aligned_u64 driver_data[0];
};
struct ib_uverbs_get_context_resp {
__u32 async_fd;
__u32 num_comp_vectors;
};
struct ib_uverbs_query_device {
- __u64 response;
- __u64 driver_data[0];
+ __aligned_u64 response;
+ __aligned_u64 driver_data[0];
};
struct ib_uverbs_query_device_resp {
- __u64 fw_ver;
+ __aligned_u64 fw_ver;
__be64 node_guid;
__be64 sys_image_guid;
- __u64 max_mr_size;
- __u64 page_size_cap;
+ __aligned_u64 max_mr_size;
+ __aligned_u64 page_size_cap;
__u32 vendor_id;
__u32 vendor_part_id;
__u32 hw_ver;
@@ -166,7 +164,7 @@
__u32 reserved;
};
struct ib_uverbs_odp_caps {
- __u64 general_caps;
+ __aligned_u64 general_caps;
struct {
__u32 rc_odp_caps;
__u32 uc_odp_caps;
@@ -193,20 +191,21 @@
__u32 comp_mask;
__u32 response_length;
struct ib_uverbs_odp_caps odp_caps;
- __u64 timestamp_mask;
- __u64 hca_core_clock;
- __u64 device_cap_flags_ex;
+ __aligned_u64 timestamp_mask;
+ __aligned_u64 hca_core_clock;
+ __aligned_u64 device_cap_flags_ex;
struct ib_uverbs_rss_caps rss_caps;
__u32 max_wq_type_rq;
__u32 raw_packet_caps;
struct ib_uverbs_tm_caps tm_caps;
struct ib_uverbs_cq_moderation_caps cq_moderation_caps;
+ __aligned_u64 max_dm_size;
};
struct ib_uverbs_query_port {
- __u64 response;
+ __aligned_u64 response;
__u8 port_num;
__u8 reserved[7];
- __u64 driver_data[0];
+ __aligned_u64 driver_data[0];
};
struct ib_uverbs_query_port_resp {
__u32 port_cap_flags;
@@ -232,8 +231,8 @@
__u8 reserved[2];
};
struct ib_uverbs_alloc_pd {
- __u64 response;
- __u64 driver_data[0];
+ __aligned_u64 response;
+ __aligned_u64 driver_data[0];
};
struct ib_uverbs_alloc_pd_resp {
__u32 pd_handle;
@@ -242,10 +241,10 @@
__u32 pd_handle;
};
struct ib_uverbs_open_xrcd {
- __u64 response;
+ __aligned_u64 response;
__u32 fd;
__u32 oflags;
- __u64 driver_data[0];
+ __aligned_u64 driver_data[0];
};
struct ib_uverbs_open_xrcd_resp {
__u32 xrcd_handle;
@@ -254,13 +253,13 @@
__u32 xrcd_handle;
};
struct ib_uverbs_reg_mr {
- __u64 response;
- __u64 start;
- __u64 length;
- __u64 hca_va;
+ __aligned_u64 response;
+ __aligned_u64 start;
+ __aligned_u64 length;
+ __aligned_u64 hca_va;
__u32 pd_handle;
__u32 access_flags;
- __u64 driver_data[0];
+ __aligned_u64 driver_data[0];
};
struct ib_uverbs_reg_mr_resp {
__u32 mr_handle;
@@ -268,12 +267,12 @@
__u32 rkey;
};
struct ib_uverbs_rereg_mr {
- __u64 response;
+ __aligned_u64 response;
__u32 mr_handle;
__u32 flags;
- __u64 start;
- __u64 length;
- __u64 hca_va;
+ __aligned_u64 start;
+ __aligned_u64 length;
+ __aligned_u64 hca_va;
__u32 pd_handle;
__u32 access_flags;
};
@@ -285,7 +284,7 @@
__u32 mr_handle;
};
struct ib_uverbs_alloc_mw {
- __u64 response;
+ __aligned_u64 response;
__u32 pd_handle;
__u8 mw_type;
__u8 reserved[3];
@@ -298,22 +297,26 @@
__u32 mw_handle;
};
struct ib_uverbs_create_comp_channel {
- __u64 response;
+ __aligned_u64 response;
};
struct ib_uverbs_create_comp_channel_resp {
__u32 fd;
};
struct ib_uverbs_create_cq {
- __u64 response;
- __u64 user_handle;
+ __aligned_u64 response;
+ __aligned_u64 user_handle;
__u32 cqe;
__u32 comp_vector;
__s32 comp_channel;
__u32 reserved;
- __u64 driver_data[0];
+ __aligned_u64 driver_data[0];
+};
+enum ib_uverbs_ex_create_cq_flags {
+ IB_UVERBS_CQ_FLAGS_TIMESTAMP_COMPLETION = 1 << 0,
+ IB_UVERBS_CQ_FLAGS_IGNORE_OVERRUN = 1 << 1,
};
struct ib_uverbs_ex_create_cq {
- __u64 user_handle;
+ __aligned_u64 user_handle;
__u32 cqe;
__u32 comp_vector;
__s32 comp_channel;
@@ -331,29 +334,29 @@
__u32 response_length;
};
struct ib_uverbs_resize_cq {
- __u64 response;
+ __aligned_u64 response;
__u32 cq_handle;
__u32 cqe;
- __u64 driver_data[0];
+ __aligned_u64 driver_data[0];
};
struct ib_uverbs_resize_cq_resp {
__u32 cqe;
__u32 reserved;
- __u64 driver_data[0];
+ __aligned_u64 driver_data[0];
};
struct ib_uverbs_poll_cq {
- __u64 response;
+ __aligned_u64 response;
__u32 cq_handle;
__u32 ne;
};
struct ib_uverbs_wc {
- __u64 wr_id;
+ __aligned_u64 wr_id;
__u32 status;
__u32 opcode;
__u32 vendor_err;
__u32 byte_len;
union {
- __u32 imm_data;
+ __be32 imm_data;
__u32 invalidate_rkey;
} ex;
__u32 qp_num;
@@ -376,7 +379,7 @@
__u32 solicited_only;
};
struct ib_uverbs_destroy_cq {
- __u64 response;
+ __aligned_u64 response;
__u32 cq_handle;
__u32 reserved;
};
@@ -436,8 +439,8 @@
__u8 reserved[5];
};
struct ib_uverbs_create_qp {
- __u64 response;
- __u64 user_handle;
+ __aligned_u64 response;
+ __aligned_u64 user_handle;
__u32 pd_handle;
__u32 send_cq_handle;
__u32 recv_cq_handle;
@@ -451,7 +454,7 @@
__u8 qp_type;
__u8 is_srq;
__u8 reserved;
- __u64 driver_data[0];
+ __aligned_u64 driver_data[0];
};
enum ib_uverbs_create_qp_mask {
IB_UVERBS_CREATE_QP_MASK_IND_TABLE = 1UL << 0,
@@ -466,7 +469,7 @@
IB_USER_LAST_QP_ATTR_MASK = 1ULL << 25,
};
struct ib_uverbs_ex_create_qp {
- __u64 user_handle;
+ __aligned_u64 user_handle;
__u32 pd_handle;
__u32 send_cq_handle;
__u32 recv_cq_handle;
@@ -486,13 +489,13 @@
__u32 source_qpn;
};
struct ib_uverbs_open_qp {
- __u64 response;
- __u64 user_handle;
+ __aligned_u64 response;
+ __aligned_u64 user_handle;
__u32 pd_handle;
__u32 qpn;
__u8 qp_type;
__u8 reserved[7];
- __u64 driver_data[0];
+ __aligned_u64 driver_data[0];
};
struct ib_uverbs_create_qp_resp {
__u32 qp_handle;
@@ -524,10 +527,10 @@
__u8 port_num;
};
struct ib_uverbs_query_qp {
- __u64 response;
+ __aligned_u64 response;
__u32 qp_handle;
__u32 attr_mask;
- __u64 driver_data[0];
+ __aligned_u64 driver_data[0];
};
struct ib_uverbs_query_qp_resp {
struct ib_uverbs_qp_dest dest;
@@ -560,7 +563,7 @@
__u8 alt_timeout;
__u8 sq_sig_all;
__u8 reserved[5];
- __u64 driver_data[0];
+ __aligned_u64 driver_data[0];
};
struct ib_uverbs_modify_qp {
struct ib_uverbs_qp_dest dest;
@@ -589,7 +592,7 @@
__u8 alt_port_num;
__u8 alt_timeout;
__u8 reserved[2];
- __u64 driver_data[0];
+ __aligned_u64 driver_data[0];
};
struct ib_uverbs_ex_modify_qp {
struct ib_uverbs_modify_qp base;
@@ -603,7 +606,7 @@
__u32 response_length;
};
struct ib_uverbs_destroy_qp {
- __u64 response;
+ __aligned_u64 response;
__u32 qp_handle;
__u32 reserved;
};
@@ -611,29 +614,29 @@
__u32 events_reported;
};
struct ib_uverbs_sge {
- __u64 addr;
+ __aligned_u64 addr;
__u32 length;
__u32 lkey;
};
struct ib_uverbs_send_wr {
- __u64 wr_id;
+ __aligned_u64 wr_id;
__u32 num_sge;
__u32 opcode;
__u32 send_flags;
union {
- __u32 imm_data;
+ __be32 imm_data;
__u32 invalidate_rkey;
} ex;
union {
struct {
- __u64 remote_addr;
+ __aligned_u64 remote_addr;
__u32 rkey;
__u32 reserved;
} rdma;
struct {
- __u64 remote_addr;
- __u64 compare_add;
- __u64 swap;
+ __aligned_u64 remote_addr;
+ __aligned_u64 compare_add;
+ __aligned_u64 swap;
__u32 rkey;
__u32 reserved;
} atomic;
@@ -646,7 +649,7 @@
} wr;
};
struct ib_uverbs_post_send {
- __u64 response;
+ __aligned_u64 response;
__u32 qp_handle;
__u32 wr_count;
__u32 sge_count;
@@ -657,12 +660,12 @@
__u32 bad_wr;
};
struct ib_uverbs_recv_wr {
- __u64 wr_id;
+ __aligned_u64 wr_id;
__u32 num_sge;
__u32 reserved;
};
struct ib_uverbs_post_recv {
- __u64 response;
+ __aligned_u64 response;
__u32 qp_handle;
__u32 wr_count;
__u32 sge_count;
@@ -673,7 +676,7 @@
__u32 bad_wr;
};
struct ib_uverbs_post_srq_recv {
- __u64 response;
+ __aligned_u64 response;
__u32 srq_handle;
__u32 wr_count;
__u32 sge_count;
@@ -684,8 +687,8 @@
__u32 bad_wr;
};
struct ib_uverbs_create_ah {
- __u64 response;
- __u64 user_handle;
+ __aligned_u64 response;
+ __aligned_u64 user_handle;
__u32 pd_handle;
__u32 reserved;
struct ib_uverbs_ah_attr attr;
@@ -701,20 +704,20 @@
__u32 qp_handle;
__u16 mlid;
__u16 reserved;
- __u64 driver_data[0];
+ __aligned_u64 driver_data[0];
};
struct ib_uverbs_detach_mcast {
__u8 gid[16];
__u32 qp_handle;
__u16 mlid;
__u16 reserved;
- __u64 driver_data[0];
+ __aligned_u64 driver_data[0];
};
struct ib_uverbs_flow_spec_hdr {
__u32 type;
__u16 size;
__u16 reserved;
- __u64 flow_spec_data[0];
+ __aligned_u64 flow_spec_data[0];
};
struct ib_uverbs_flow_eth_filter {
__u8 dst_mac[6];
@@ -813,6 +816,18 @@
};
};
};
+struct ib_uverbs_flow_spec_action_handle {
+ union {
+ struct ib_uverbs_flow_spec_hdr hdr;
+ struct {
+ __u32 type;
+ __u16 size;
+ __u16 reserved;
+ };
+ };
+ __u32 handle;
+ __u32 reserved1;
+};
struct ib_uverbs_flow_tunnel_filter {
__be32 tunnel_id;
};
@@ -828,6 +843,22 @@
struct ib_uverbs_flow_tunnel_filter val;
struct ib_uverbs_flow_tunnel_filter mask;
};
+struct ib_uverbs_flow_spec_esp_filter {
+ __u32 spi;
+ __u32 seq;
+};
+struct ib_uverbs_flow_spec_esp {
+ union {
+ struct ib_uverbs_flow_spec_hdr hdr;
+ struct {
+ __u32 type;
+ __u16 size;
+ __u16 reserved;
+ };
+ };
+ struct ib_uverbs_flow_spec_esp_filter val;
+ struct ib_uverbs_flow_spec_esp_filter mask;
+};
struct ib_uverbs_flow_attr {
__u32 type;
__u16 size;
@@ -852,17 +883,17 @@
__u32 flow_handle;
};
struct ib_uverbs_create_srq {
- __u64 response;
- __u64 user_handle;
+ __aligned_u64 response;
+ __aligned_u64 user_handle;
__u32 pd_handle;
__u32 max_wr;
__u32 max_sge;
__u32 srq_limit;
- __u64 driver_data[0];
+ __aligned_u64 driver_data[0];
};
struct ib_uverbs_create_xsrq {
- __u64 response;
- __u64 user_handle;
+ __aligned_u64 response;
+ __aligned_u64 user_handle;
__u32 srq_type;
__u32 pd_handle;
__u32 max_wr;
@@ -871,7 +902,7 @@
__u32 max_num_tags;
__u32 xrcd_handle;
__u32 cq_handle;
- __u64 driver_data[0];
+ __aligned_u64 driver_data[0];
};
struct ib_uverbs_create_srq_resp {
__u32 srq_handle;
@@ -884,13 +915,13 @@
__u32 attr_mask;
__u32 max_wr;
__u32 srq_limit;
- __u64 driver_data[0];
+ __aligned_u64 driver_data[0];
};
struct ib_uverbs_query_srq {
- __u64 response;
+ __aligned_u64 response;
__u32 srq_handle;
__u32 reserved;
- __u64 driver_data[0];
+ __aligned_u64 driver_data[0];
};
struct ib_uverbs_query_srq_resp {
__u32 max_wr;
@@ -899,7 +930,7 @@
__u32 reserved;
};
struct ib_uverbs_destroy_srq {
- __u64 response;
+ __aligned_u64 response;
__u32 srq_handle;
__u32 reserved;
};
@@ -909,7 +940,7 @@
struct ib_uverbs_ex_create_wq {
__u32 comp_mask;
__u32 wq_type;
- __u64 user_handle;
+ __aligned_u64 user_handle;
__u32 pd_handle;
__u32 cq_handle;
__u32 max_wr;
diff --git a/libc/kernel/uapi/rdma/mlx4-abi.h b/libc/kernel/uapi/rdma/mlx4-abi.h
index 078b386..121762b 100644
--- a/libc/kernel/uapi/rdma/mlx4-abi.h
+++ b/libc/kernel/uapi/rdma/mlx4-abi.h
@@ -26,6 +26,9 @@
__u16 bf_reg_size;
__u16 bf_regs_per_page;
};
+enum {
+ MLX4_USER_DEV_CAP_LARGE_CQE = 1L << 0,
+};
struct mlx4_ib_alloc_ucontext_resp {
__u32 dev_caps;
__u32 qp_tab_size;
@@ -38,26 +41,26 @@
__u32 reserved;
};
struct mlx4_ib_create_cq {
- __u64 buf_addr;
- __u64 db_addr;
+ __aligned_u64 buf_addr;
+ __aligned_u64 db_addr;
};
struct mlx4_ib_create_cq_resp {
__u32 cqn;
__u32 reserved;
};
struct mlx4_ib_resize_cq {
- __u64 buf_addr;
+ __aligned_u64 buf_addr;
};
struct mlx4_ib_create_srq {
- __u64 buf_addr;
- __u64 db_addr;
+ __aligned_u64 buf_addr;
+ __aligned_u64 db_addr;
};
struct mlx4_ib_create_srq_resp {
__u32 srqn;
__u32 reserved;
};
struct mlx4_ib_create_qp_rss {
- __u64 rx_hash_fields_mask;
+ __aligned_u64 rx_hash_fields_mask;
__u8 rx_hash_function;
__u8 reserved[7];
__u8 rx_hash_key[40];
@@ -65,8 +68,8 @@
__u32 reserved1;
};
struct mlx4_ib_create_qp {
- __u64 buf_addr;
- __u64 db_addr;
+ __aligned_u64 buf_addr;
+ __aligned_u64 db_addr;
__u8 log_sq_bb_count;
__u8 log_sq_stride;
__u8 sq_no_prefetch;
@@ -74,8 +77,8 @@
__u32 inl_recv_sz;
};
struct mlx4_ib_create_wq {
- __u64 buf_addr;
- __u64 db_addr;
+ __aligned_u64 buf_addr;
+ __aligned_u64 db_addr;
__u8 log_range_size;
__u8 reserved[3];
__u32 comp_mask;
@@ -99,6 +102,28 @@
MLX4_IB_RX_HASH_SRC_PORT_TCP = 1 << 4,
MLX4_IB_RX_HASH_DST_PORT_TCP = 1 << 5,
MLX4_IB_RX_HASH_SRC_PORT_UDP = 1 << 6,
- MLX4_IB_RX_HASH_DST_PORT_UDP = 1 << 7
+ MLX4_IB_RX_HASH_DST_PORT_UDP = 1 << 7,
+ MLX4_IB_RX_HASH_INNER = 1ULL << 31,
+};
+struct mlx4_ib_rss_caps {
+ __aligned_u64 rx_hash_fields_mask;
+ __u8 rx_hash_function;
+ __u8 reserved[7];
+};
+enum query_device_resp_mask {
+ MLX4_IB_QUERY_DEV_RESP_MASK_CORE_CLOCK_OFFSET = 1UL << 0,
+};
+struct mlx4_ib_tso_caps {
+ __u32 max_tso;
+ __u32 supported_qpts;
+};
+struct mlx4_uverbs_ex_query_device_resp {
+ __u32 comp_mask;
+ __u32 response_length;
+ __aligned_u64 hca_core_clock_offset;
+ __u32 max_inl_recv_sz;
+ __u32 reserved;
+ struct mlx4_ib_rss_caps rss_caps;
+ struct mlx4_ib_tso_caps tso_caps;
};
#endif
diff --git a/libc/kernel/uapi/rdma/mlx5-abi.h b/libc/kernel/uapi/rdma/mlx5-abi.h
index 9347cf3..170c0a6 100644
--- a/libc/kernel/uapi/rdma/mlx5-abi.h
+++ b/libc/kernel/uapi/rdma/mlx5-abi.h
@@ -24,6 +24,9 @@
MLX5_QP_FLAG_SIGNATURE = 1 << 0,
MLX5_QP_FLAG_SCATTER_CQE = 1 << 1,
MLX5_QP_FLAG_TUNNEL_OFFLOADS = 1 << 2,
+ MLX5_QP_FLAG_BFREG_INDEX = 1 << 3,
+ MLX5_QP_FLAG_TYPE_DCT = 1 << 4,
+ MLX5_QP_FLAG_TYPE_DCI = 1 << 5,
};
enum {
MLX5_SRQ_FLAG_SIGNATURE = 1 << 0,
@@ -48,7 +51,7 @@
__u8 reserved0;
__u16 reserved1;
__u32 reserved2;
- __u64 lib_caps;
+ __aligned_u64 lib_caps;
};
enum mlx5_ib_alloc_ucontext_resp_mask {
MLX5_IB_ALLOC_UCONTEXT_RESP_MASK_CORE_CLOCK_OFFSET = 1UL << 0,
@@ -64,6 +67,13 @@
MLX5_USER_INLINE_MODE_IP,
MLX5_USER_INLINE_MODE_TCP_UDP,
};
+enum {
+ MLX5_USER_ALLOC_UCONTEXT_FLOW_ACTION_FLAGS_ESP_AES_GCM = 1 << 0,
+ MLX5_USER_ALLOC_UCONTEXT_FLOW_ACTION_FLAGS_ESP_AES_GCM_REQ_METADATA = 1 << 1,
+ MLX5_USER_ALLOC_UCONTEXT_FLOW_ACTION_FLAGS_ESP_AES_GCM_SPI_STEERING = 1 << 2,
+ MLX5_USER_ALLOC_UCONTEXT_FLOW_ACTION_FLAGS_ESP_AES_GCM_FULL_OFFLOAD = 1 << 3,
+ MLX5_USER_ALLOC_UCONTEXT_FLOW_ACTION_FLAGS_ESP_AES_GCM_TX_IV_IS_ESN = 1 << 4,
+};
struct mlx5_ib_alloc_ucontext_resp {
__u32 qp_tab_size;
__u32 bf_reg_size;
@@ -75,16 +85,18 @@
__u32 max_recv_wr;
__u32 max_srq_recv_wr;
__u16 num_ports;
- __u16 reserved1;
+ __u16 flow_action_flags;
__u32 comp_mask;
__u32 response_length;
__u8 cqe_version;
__u8 cmds_supp_uhw;
__u8 eth_min_inline;
- __u8 reserved2;
- __u64 hca_core_clock_offset;
+ __u8 clock_info_versions;
+ __aligned_u64 hca_core_clock_offset;
__u32 log_uar_size;
__u32 num_uars_per_page;
+ __u32 num_dyn_bfregs;
+ __u32 reserved3;
};
struct mlx5_ib_alloc_pd_resp {
__u32 pdn;
@@ -94,7 +106,7 @@
__u32 supported_qpts;
};
struct mlx5_ib_rss_caps {
- __u64 rx_hash_fields_mask;
+ __aligned_u64 rx_hash_fields_mask;
__u8 rx_hash_function;
__u8 reserved[7];
};
@@ -107,11 +119,15 @@
__u32 max_num;
__u32 supported_format;
};
+enum mlx5_ib_packet_pacing_cap_flags {
+ MLX5_IB_PP_SUPPORT_BURST = 1 << 0,
+};
struct mlx5_packet_pacing_caps {
__u32 qp_rate_limit_min;
__u32 qp_rate_limit_max;
__u32 supported_qpts;
- __u32 reserved;
+ __u8 cap_flags;
+ __u8 reserved[3];
};
enum mlx5_ib_mpw_caps {
MPW_RESERVED = 1 << 0,
@@ -162,8 +178,8 @@
MLX5_IB_CREATE_CQ_FLAGS_CQE_128B_PAD = 1 << 0,
};
struct mlx5_ib_create_cq {
- __u64 buf_addr;
- __u64 db_addr;
+ __aligned_u64 buf_addr;
+ __aligned_u64 db_addr;
__u32 cqe_size;
__u8 cqe_comp_en;
__u8 cqe_comp_res_format;
@@ -174,14 +190,14 @@
__u32 reserved;
};
struct mlx5_ib_resize_cq {
- __u64 buf_addr;
+ __aligned_u64 buf_addr;
__u16 cqe_size;
__u16 reserved0;
__u32 reserved1;
};
struct mlx5_ib_create_srq {
- __u64 buf_addr;
- __u64 db_addr;
+ __aligned_u64 buf_addr;
+ __aligned_u64 db_addr;
__u32 flags;
__u32 reserved0;
__u32 uidx;
@@ -192,15 +208,18 @@
__u32 reserved;
};
struct mlx5_ib_create_qp {
- __u64 buf_addr;
- __u64 db_addr;
+ __aligned_u64 buf_addr;
+ __aligned_u64 db_addr;
__u32 sq_wqe_count;
__u32 rq_wqe_count;
__u32 rq_wqe_shift;
__u32 flags;
__u32 uidx;
- __u32 reserved0;
- __u64 sq_buf_addr;
+ __u32 bfreg_index;
+ union {
+ __aligned_u64 sq_buf_addr;
+ __aligned_u64 access_key;
+ };
};
enum mlx5_rx_hash_function_flags {
MLX5_RX_HASH_FUNC_TOEPLITZ = 1 << 0,
@@ -214,10 +233,11 @@
MLX5_RX_HASH_DST_PORT_TCP = 1 << 5,
MLX5_RX_HASH_SRC_PORT_UDP = 1 << 6,
MLX5_RX_HASH_DST_PORT_UDP = 1 << 7,
- MLX5_RX_HASH_INNER = 1 << 31
+ MLX5_RX_HASH_IPSEC_SPI = 1 << 8,
+ MLX5_RX_HASH_INNER = (1UL << 31),
};
struct mlx5_ib_create_qp_rss {
- __u64 rx_hash_fields_mask;
+ __aligned_u64 rx_hash_fields_mask;
__u8 rx_hash_function;
__u8 rx_key_len;
__u8 reserved[6];
@@ -227,6 +247,7 @@
};
struct mlx5_ib_create_qp_resp {
__u32 bfreg_index;
+ __u32 reserved;
};
struct mlx5_ib_alloc_mw {
__u32 comp_mask;
@@ -238,8 +259,8 @@
MLX5_IB_CREATE_WQ_STRIDING_RQ = (1 << 0),
};
struct mlx5_ib_create_wq {
- __u64 buf_addr;
- __u64 db_addr;
+ __aligned_u64 buf_addr;
+ __aligned_u64 db_addr;
__u32 rq_wqe_count;
__u32 rq_wqe_shift;
__u32 user_index;
@@ -254,6 +275,20 @@
__u8 dmac[ETH_ALEN];
__u8 reserved[6];
};
+struct mlx5_ib_burst_info {
+ __u32 max_burst_sz;
+ __u16 typical_pkt_sz;
+ __u16 reserved;
+};
+struct mlx5_ib_modify_qp {
+ __u32 comp_mask;
+ struct mlx5_ib_burst_info burst_info;
+ __u32 reserved;
+};
+struct mlx5_ib_modify_qp_resp {
+ __u32 response_length;
+ __u32 dctn;
+};
struct mlx5_ib_create_wq_resp {
__u32 response_length;
__u32 reserved;
@@ -266,4 +301,31 @@
__u32 comp_mask;
__u32 reserved;
};
+struct mlx5_ib_clock_info {
+ __u32 sign;
+ __u32 resv;
+ __aligned_u64 nsec;
+ __aligned_u64 cycles;
+ __aligned_u64 frac;
+ __u32 mult;
+ __u32 shift;
+ __aligned_u64 mask;
+ __aligned_u64 overflow_period;
+};
+enum mlx5_ib_mmap_cmd {
+ MLX5_IB_MMAP_REGULAR_PAGE = 0,
+ MLX5_IB_MMAP_GET_CONTIGUOUS_PAGES = 1,
+ MLX5_IB_MMAP_WC_PAGE = 2,
+ MLX5_IB_MMAP_NC_PAGE = 3,
+ MLX5_IB_MMAP_CORE_CLOCK = 5,
+ MLX5_IB_MMAP_ALLOC_WC = 6,
+ MLX5_IB_MMAP_CLOCK_INFO = 7,
+ MLX5_IB_MMAP_DEVICE_MEM = 8,
+};
+enum {
+ MLX5_IB_CLOCK_INFO_KERNEL_UPDATING = 1,
+};
+enum {
+ MLX5_IB_CLOCK_INFO_V1 = 0,
+};
#endif
diff --git a/libc/kernel/uapi/rdma/mlx5_user_ioctl_cmds.h b/libc/kernel/uapi/rdma/mlx5_user_ioctl_cmds.h
new file mode 100644
index 0000000..37aebaf
--- /dev/null
+++ b/libc/kernel/uapi/rdma/mlx5_user_ioctl_cmds.h
@@ -0,0 +1,29 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef MLX5_USER_IOCTL_CMDS_H
+#define MLX5_USER_IOCTL_CMDS_H
+#include <rdma/ib_user_ioctl_cmds.h>
+enum mlx5_ib_create_flow_action_attrs {
+ MLX5_IB_ATTR_CREATE_FLOW_ACTION_FLAGS = (1U << UVERBS_ID_NS_SHIFT),
+};
+enum mlx5_ib_alloc_dm_attrs {
+ MLX5_IB_ATTR_ALLOC_DM_RESP_START_OFFSET = (1U << UVERBS_ID_NS_SHIFT),
+ MLX5_IB_ATTR_ALLOC_DM_RESP_PAGE_INDEX,
+};
+#endif
diff --git a/libc/kernel/uapi/rdma/mlx5_user_ioctl_verbs.h b/libc/kernel/uapi/rdma/mlx5_user_ioctl_verbs.h
new file mode 100644
index 0000000..c9a83cf
--- /dev/null
+++ b/libc/kernel/uapi/rdma/mlx5_user_ioctl_verbs.h
@@ -0,0 +1,25 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef MLX5_USER_IOCTL_VERBS_H
+#define MLX5_USER_IOCTL_VERBS_H
+#include <linux/types.h>
+enum mlx5_ib_uapi_flow_action_flags {
+ MLX5_IB_UAPI_FLOW_ACTION_FLAGS_REQUIRE_METADATA = 1 << 0,
+};
+#endif
diff --git a/libc/kernel/uapi/rdma/mthca-abi.h b/libc/kernel/uapi/rdma/mthca-abi.h
index 49d1df0..86224f2 100644
--- a/libc/kernel/uapi/rdma/mthca-abi.h
+++ b/libc/kernel/uapi/rdma/mthca-abi.h
@@ -36,8 +36,8 @@
struct mthca_create_cq {
__u32 lkey;
__u32 pdn;
- __u64 arm_db_page;
- __u64 set_db_page;
+ __aligned_u64 arm_db_page;
+ __aligned_u64 set_db_page;
__u32 arm_db_index;
__u32 set_db_index;
};
@@ -52,7 +52,7 @@
struct mthca_create_srq {
__u32 lkey;
__u32 db_index;
- __u64 db_page;
+ __aligned_u64 db_page;
};
struct mthca_create_srq_resp {
__u32 srqn;
@@ -61,8 +61,8 @@
struct mthca_create_qp {
__u32 lkey;
__u32 reserved;
- __u64 sq_db_page;
- __u64 rq_db_page;
+ __aligned_u64 sq_db_page;
+ __aligned_u64 rq_db_page;
__u32 sq_db_index;
__u32 rq_db_index;
};
diff --git a/libc/kernel/uapi/rdma/nes-abi.h b/libc/kernel/uapi/rdma/nes-abi.h
index 1545e18..724852e 100644
--- a/libc/kernel/uapi/rdma/nes-abi.h
+++ b/libc/kernel/uapi/rdma/nes-abi.h
@@ -39,13 +39,13 @@
__u32 mmap_db_index;
};
struct nes_create_cq_req {
- __u64 user_cq_buffer;
+ __aligned_u64 user_cq_buffer;
__u32 mcrqf;
__u8 reserved[4];
};
struct nes_create_qp_req {
- __u64 user_wqe_buffers;
- __u64 user_qp_buffer;
+ __aligned_u64 user_wqe_buffers;
+ __aligned_u64 user_qp_buffer;
};
enum iwnes_memreg_type {
IWNES_MEMREG_TYPE_MEM = 0x0000,
diff --git a/libc/kernel/uapi/rdma/ocrdma-abi.h b/libc/kernel/uapi/rdma/ocrdma-abi.h
index f909632..007f0e1 100644
--- a/libc/kernel/uapi/rdma/ocrdma-abi.h
+++ b/libc/kernel/uapi/rdma/ocrdma-abi.h
@@ -26,22 +26,22 @@
__u32 wqe_size;
__u32 max_inline_data;
__u32 dpp_wqe_size;
- __u64 ah_tbl_page;
+ __aligned_u64 ah_tbl_page;
__u32 ah_tbl_len;
__u32 rqe_size;
__u8 fw_ver[32];
- __u64 rsvd1;
- __u64 rsvd2;
+ __aligned_u64 rsvd1;
+ __aligned_u64 rsvd2;
};
struct ocrdma_alloc_pd_ureq {
- __u64 rsvd1;
+ __u32 rsvd[2];
};
struct ocrdma_alloc_pd_uresp {
__u32 id;
__u32 dpp_enabled;
__u32 dpp_page_addr_hi;
__u32 dpp_page_addr_lo;
- __u64 rsvd1;
+ __u32 rsvd[2];
};
struct ocrdma_create_cq_ureq {
__u32 dpp_cq;
@@ -53,12 +53,12 @@
__u32 page_size;
__u32 num_pages;
__u32 max_hw_cqe;
- __u64 page_addr[MAX_CQ_PAGES];
- __u64 db_page_addr;
+ __aligned_u64 page_addr[MAX_CQ_PAGES];
+ __aligned_u64 db_page_addr;
__u32 db_page_size;
__u32 phase_change;
- __u64 rsvd1;
- __u64 rsvd2;
+ __aligned_u64 rsvd1;
+ __aligned_u64 rsvd2;
};
#define MAX_QP_PAGES 8
#define MAX_UD_AV_PAGES 8
@@ -77,9 +77,9 @@
__u32 rq_page_size;
__u32 num_sq_pages;
__u32 num_rq_pages;
- __u64 sq_page_addr[MAX_QP_PAGES];
- __u64 rq_page_addr[MAX_QP_PAGES];
- __u64 db_page_addr;
+ __aligned_u64 sq_page_addr[MAX_QP_PAGES];
+ __aligned_u64 rq_page_addr[MAX_QP_PAGES];
+ __aligned_u64 db_page_addr;
__u32 db_page_size;
__u32 dpp_credit;
__u32 dpp_offset;
@@ -88,21 +88,21 @@
__u32 db_sq_offset;
__u32 db_rq_offset;
__u32 db_shift;
- __u64 rsvd[11];
-} __packed;
+ __aligned_u64 rsvd[11];
+};
struct ocrdma_create_srq_uresp {
__u16 rq_dbid;
__u16 resv0;
__u32 resv1;
__u32 rq_page_size;
__u32 num_rq_pages;
- __u64 rq_page_addr[MAX_QP_PAGES];
- __u64 db_page_addr;
+ __aligned_u64 rq_page_addr[MAX_QP_PAGES];
+ __aligned_u64 db_page_addr;
__u32 db_page_size;
__u32 num_rqe_allocated;
__u32 db_rq_offset;
__u32 db_shift;
- __u64 rsvd2;
- __u64 rsvd3;
+ __aligned_u64 rsvd2;
+ __aligned_u64 rsvd3;
};
#endif
diff --git a/libc/kernel/uapi/rdma/qedr-abi.h b/libc/kernel/uapi/rdma/qedr-abi.h
index 55af44b..8626f8c 100644
--- a/libc/kernel/uapi/rdma/qedr-abi.h
+++ b/libc/kernel/uapi/rdma/qedr-abi.h
@@ -21,7 +21,7 @@
#include <linux/types.h>
#define QEDR_ABI_VERSION (8)
struct qedr_alloc_ucontext_resp {
- __u64 db_pa;
+ __aligned_u64 db_pa;
__u32 db_size;
__u32 max_send_wr;
__u32 max_recv_wr;
@@ -33,28 +33,31 @@
__u8 dpm_enabled;
__u8 wids_enabled;
__u16 wid_count;
+ __u32 reserved;
};
struct qedr_alloc_pd_ureq {
- __u64 rsvd1;
+ __aligned_u64 rsvd1;
};
struct qedr_alloc_pd_uresp {
__u32 pd_id;
+ __u32 reserved;
};
struct qedr_create_cq_ureq {
- __u64 addr;
- __u64 len;
+ __aligned_u64 addr;
+ __aligned_u64 len;
};
struct qedr_create_cq_uresp {
__u32 db_offset;
__u16 icid;
+ __u16 reserved;
};
struct qedr_create_qp_ureq {
__u32 qp_handle_hi;
__u32 qp_handle_lo;
- __u64 sq_addr;
- __u64 sq_len;
- __u64 rq_addr;
- __u64 rq_len;
+ __aligned_u64 sq_addr;
+ __aligned_u64 sq_len;
+ __aligned_u64 rq_addr;
+ __aligned_u64 rq_len;
};
struct qedr_create_qp_uresp {
__u32 qp_id;
@@ -64,5 +67,6 @@
__u32 rq_db_offset;
__u16 rq_icid;
__u32 rq_db2_offset;
+ __u32 reserved;
};
#endif
diff --git a/libc/kernel/uapi/rdma/rdma_netlink.h b/libc/kernel/uapi/rdma/rdma_netlink.h
index c7bcb6d..36c8911 100644
--- a/libc/kernel/uapi/rdma/rdma_netlink.h
+++ b/libc/kernel/uapi/rdma/rdma_netlink.h
@@ -173,13 +173,13 @@
enum rdma_nldev_command {
RDMA_NLDEV_CMD_UNSPEC,
RDMA_NLDEV_CMD_GET,
- RDMA_NLDEV_CMD_SET,
- RDMA_NLDEV_CMD_NEW,
- RDMA_NLDEV_CMD_DEL,
- RDMA_NLDEV_CMD_PORT_GET,
- RDMA_NLDEV_CMD_PORT_SET,
- RDMA_NLDEV_CMD_PORT_NEW,
- RDMA_NLDEV_CMD_PORT_DEL,
+ RDMA_NLDEV_CMD_PORT_GET = 5,
+ RDMA_NLDEV_CMD_RES_GET = 9,
+ RDMA_NLDEV_CMD_RES_QP_GET,
+ RDMA_NLDEV_CMD_RES_CM_ID_GET,
+ RDMA_NLDEV_CMD_RES_CQ_GET,
+ RDMA_NLDEV_CMD_RES_MR_GET,
+ RDMA_NLDEV_CMD_RES_PD_GET,
RDMA_NLDEV_NUM_OPS
};
enum rdma_nldev_attr {
@@ -198,6 +198,43 @@
RDMA_NLDEV_ATTR_PORT_STATE,
RDMA_NLDEV_ATTR_PORT_PHYS_STATE,
RDMA_NLDEV_ATTR_DEV_NODE_TYPE,
+ RDMA_NLDEV_ATTR_RES_SUMMARY,
+ RDMA_NLDEV_ATTR_RES_SUMMARY_ENTRY,
+ RDMA_NLDEV_ATTR_RES_SUMMARY_ENTRY_NAME,
+ RDMA_NLDEV_ATTR_RES_SUMMARY_ENTRY_CURR,
+ RDMA_NLDEV_ATTR_RES_QP,
+ RDMA_NLDEV_ATTR_RES_QP_ENTRY,
+ RDMA_NLDEV_ATTR_RES_LQPN,
+ RDMA_NLDEV_ATTR_RES_RQPN,
+ RDMA_NLDEV_ATTR_RES_RQ_PSN,
+ RDMA_NLDEV_ATTR_RES_SQ_PSN,
+ RDMA_NLDEV_ATTR_RES_PATH_MIG_STATE,
+ RDMA_NLDEV_ATTR_RES_TYPE,
+ RDMA_NLDEV_ATTR_RES_STATE,
+ RDMA_NLDEV_ATTR_RES_PID,
+ RDMA_NLDEV_ATTR_RES_KERN_NAME,
+ RDMA_NLDEV_ATTR_RES_CM_ID,
+ RDMA_NLDEV_ATTR_RES_CM_ID_ENTRY,
+ RDMA_NLDEV_ATTR_RES_PS,
+ RDMA_NLDEV_ATTR_RES_SRC_ADDR,
+ RDMA_NLDEV_ATTR_RES_DST_ADDR,
+ RDMA_NLDEV_ATTR_RES_CQ,
+ RDMA_NLDEV_ATTR_RES_CQ_ENTRY,
+ RDMA_NLDEV_ATTR_RES_CQE,
+ RDMA_NLDEV_ATTR_RES_USECNT,
+ RDMA_NLDEV_ATTR_RES_POLL_CTX,
+ RDMA_NLDEV_ATTR_RES_MR,
+ RDMA_NLDEV_ATTR_RES_MR_ENTRY,
+ RDMA_NLDEV_ATTR_RES_RKEY,
+ RDMA_NLDEV_ATTR_RES_LKEY,
+ RDMA_NLDEV_ATTR_RES_IOVA,
+ RDMA_NLDEV_ATTR_RES_MRLEN,
+ RDMA_NLDEV_ATTR_RES_PD,
+ RDMA_NLDEV_ATTR_RES_PD_ENTRY,
+ RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY,
+ RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY,
+ RDMA_NLDEV_ATTR_NDEV_INDEX,
+ RDMA_NLDEV_ATTR_NDEV_NAME,
RDMA_NLDEV_ATTR_MAX
};
#endif
diff --git a/libc/kernel/uapi/rdma/rdma_user_cm.h b/libc/kernel/uapi/rdma/rdma_user_cm.h
index 24e0f2e..b200491 100644
--- a/libc/kernel/uapi/rdma/rdma_user_cm.h
+++ b/libc/kernel/uapi/rdma/rdma_user_cm.h
@@ -50,14 +50,20 @@
RDMA_USER_CM_CMD_RESOLVE_ADDR,
RDMA_USER_CM_CMD_JOIN_MCAST
};
+enum rdma_ucm_port_space {
+ RDMA_PS_IPOIB = 0x0002,
+ RDMA_PS_IB = 0x013F,
+ RDMA_PS_TCP = 0x0106,
+ RDMA_PS_UDP = 0x0111,
+};
struct rdma_ucm_cmd_hdr {
__u32 cmd;
__u16 in;
__u16 out;
};
struct rdma_ucm_create_id {
- __u64 uid;
- __u64 response;
+ __aligned_u64 uid;
+ __aligned_u64 response;
__u16 ps;
__u8 qp_type;
__u8 reserved[5];
@@ -66,7 +72,7 @@
__u32 id;
};
struct rdma_ucm_destroy_id {
- __u64 response;
+ __aligned_u64 response;
__u32 id;
__u32 reserved;
};
@@ -74,7 +80,7 @@
__u32 events_reported;
};
struct rdma_ucm_bind_ip {
- __u64 response;
+ __aligned_u64 response;
struct sockaddr_in6 addr;
__u32 id;
};
@@ -109,12 +115,12 @@
RDMA_USER_CM_QUERY_GID
};
struct rdma_ucm_query {
- __u64 response;
+ __aligned_u64 response;
__u32 id;
__u32 option;
};
struct rdma_ucm_query_route_resp {
- __u64 node_guid;
+ __aligned_u64 node_guid;
struct ib_user_path_rec ib_route[2];
struct sockaddr_in6 src_addr;
struct sockaddr_in6 dst_addr;
@@ -123,7 +129,7 @@
__u8 reserved[3];
};
struct rdma_ucm_query_addr_resp {
- __u64 node_guid;
+ __aligned_u64 node_guid;
__u8 port_num;
__u8 reserved;
__u16 pkey;
@@ -168,7 +174,7 @@
__u32 backlog;
};
struct rdma_ucm_accept {
- __u64 uid;
+ __aligned_u64 uid;
struct rdma_ucm_conn_param conn_param;
__u32 id;
__u32 reserved;
@@ -183,7 +189,7 @@
__u32 id;
};
struct rdma_ucm_init_qp_attr {
- __u64 response;
+ __aligned_u64 response;
__u32 id;
__u32 qp_state;
};
@@ -192,8 +198,8 @@
__u32 event;
};
struct rdma_ucm_join_ip_mcast {
- __u64 response;
- __u64 uid;
+ __aligned_u64 response;
+ __aligned_u64 uid;
struct sockaddr_in6 addr;
__u32 id;
};
@@ -203,18 +209,18 @@
RDMA_MC_JOIN_FLAG_RESERVED,
};
struct rdma_ucm_join_mcast {
- __u64 response;
- __u64 uid;
+ __aligned_u64 response;
+ __aligned_u64 uid;
__u32 id;
__u16 addr_size;
__u16 join_flags;
struct sockaddr_storage addr;
};
struct rdma_ucm_get_event {
- __u64 response;
+ __aligned_u64 response;
};
struct rdma_ucm_event_resp {
- __u64 uid;
+ __aligned_u64 uid;
__u32 id;
__u32 event;
__u32 status;
@@ -222,6 +228,7 @@
struct rdma_ucm_conn_param conn;
struct rdma_ucm_ud_param ud;
} param;
+ __u32 reserved;
};
enum {
RDMA_OPTION_ID = 0,
@@ -234,14 +241,14 @@
RDMA_OPTION_IB_PATH = 1
};
struct rdma_ucm_set_option {
- __u64 optval;
+ __aligned_u64 optval;
__u32 id;
__u32 level;
__u32 optname;
__u32 optlen;
};
struct rdma_ucm_migrate_id {
- __u64 response;
+ __aligned_u64 response;
__u32 id;
__u32 fd;
};
diff --git a/libc/kernel/uapi/rdma/rdma_user_ioctl.h b/libc/kernel/uapi/rdma/rdma_user_ioctl.h
index 41c11bc..2f532d3 100644
--- a/libc/kernel/uapi/rdma/rdma_user_ioctl.h
+++ b/libc/kernel/uapi/rdma/rdma_user_ioctl.h
@@ -18,34 +18,10 @@
****************************************************************************/
#ifndef RDMA_USER_IOCTL_H
#define RDMA_USER_IOCTL_H
-#include <linux/types.h>
-#include <linux/ioctl.h>
#include <rdma/ib_user_mad.h>
#include <rdma/hfi/hfi1_ioctl.h>
-#define RDMA_IOCTL_MAGIC 0x1b
+#include <rdma/rdma_user_ioctl_cmds.h>
#define IB_IOCTL_MAGIC RDMA_IOCTL_MAGIC
-#define RDMA_VERBS_IOCTL _IOWR(RDMA_IOCTL_MAGIC, 1, struct ib_uverbs_ioctl_hdr)
-#define UVERBS_ID_NS_MASK 0xF000
-#define UVERBS_ID_NS_SHIFT 12
-enum {
- UVERBS_ATTR_F_MANDATORY = 1U << 0,
- UVERBS_ATTR_F_VALID_OUTPUT = 1U << 1,
-};
-struct ib_uverbs_attr {
- __u16 attr_id;
- __u16 len;
- __u16 flags;
- __u16 reserved;
- __u64 data;
-};
-struct ib_uverbs_ioctl_hdr {
- __u16 length;
- __u16 object_id;
- __u16 method_id;
- __u16 num_attrs;
- __u64 reserved;
- struct ib_uverbs_attr attrs[0];
-};
#define IB_USER_MAD_REGISTER_AGENT _IOWR(RDMA_IOCTL_MAGIC, 0x01, struct ib_user_mad_reg_req)
#define IB_USER_MAD_UNREGISTER_AGENT _IOW(RDMA_IOCTL_MAGIC, 0x02, __u32)
#define IB_USER_MAD_ENABLE_PKEY _IO(RDMA_IOCTL_MAGIC, 0x03)
diff --git a/libc/kernel/uapi/rdma/rdma_user_ioctl_cmds.h b/libc/kernel/uapi/rdma/rdma_user_ioctl_cmds.h
new file mode 100644
index 0000000..5da7917
--- /dev/null
+++ b/libc/kernel/uapi/rdma/rdma_user_ioctl_cmds.h
@@ -0,0 +1,71 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef RDMA_USER_IOCTL_CMDS_H
+#define RDMA_USER_IOCTL_CMDS_H
+#include <linux/types.h>
+#include <linux/ioctl.h>
+#define RDMA_IOCTL_MAGIC 0x1b
+#define RDMA_VERBS_IOCTL _IOWR(RDMA_IOCTL_MAGIC, 1, struct ib_uverbs_ioctl_hdr)
+enum {
+ UVERBS_ATTR_F_MANDATORY = 1U << 0,
+ UVERBS_ATTR_F_VALID_OUTPUT = 1U << 1,
+};
+struct ib_uverbs_attr {
+ __u16 attr_id;
+ __u16 len;
+ __u16 flags;
+ union {
+ struct {
+ __u8 elem_id;
+ __u8 reserved;
+ } enum_data;
+ __u16 reserved;
+ } attr_data;
+ __aligned_u64 data;
+};
+struct ib_uverbs_ioctl_hdr {
+ __u16 length;
+ __u16 object_id;
+ __u16 method_id;
+ __u16 num_attrs;
+ __aligned_u64 reserved1;
+ __u32 driver_id;
+ __u32 reserved2;
+ struct ib_uverbs_attr attrs[0];
+};
+enum rdma_driver_id {
+ RDMA_DRIVER_UNKNOWN,
+ RDMA_DRIVER_MLX5,
+ RDMA_DRIVER_MLX4,
+ RDMA_DRIVER_CXGB3,
+ RDMA_DRIVER_CXGB4,
+ RDMA_DRIVER_MTHCA,
+ RDMA_DRIVER_BNXT_RE,
+ RDMA_DRIVER_OCRDMA,
+ RDMA_DRIVER_NES,
+ RDMA_DRIVER_I40IW,
+ RDMA_DRIVER_VMW_PVRDMA,
+ RDMA_DRIVER_QEDR,
+ RDMA_DRIVER_HNS,
+ RDMA_DRIVER_USNIC,
+ RDMA_DRIVER_RXE,
+ RDMA_DRIVER_HFI1,
+ RDMA_DRIVER_QIB,
+};
+#endif
diff --git a/libc/kernel/uapi/rdma/rdma_user_rxe.h b/libc/kernel/uapi/rdma/rdma_user_rxe.h
index 8d1bbd0..a57ed1a 100644
--- a/libc/kernel/uapi/rdma/rdma_user_rxe.h
+++ b/libc/kernel/uapi/rdma/rdma_user_rxe.h
@@ -19,6 +19,9 @@
#ifndef RDMA_USER_RXE_H
#define RDMA_USER_RXE_H
#include <linux/types.h>
+#include <linux/socket.h>
+#include <linux/in.h>
+#include <linux/in6.h>
union rxe_gid {
__u8 raw[16];
struct {
@@ -36,15 +39,16 @@
struct rxe_av {
__u8 port_num;
__u8 network_type;
+ __u16 reserved1;
+ __u32 reserved2;
struct rxe_global_route grh;
union {
- struct sockaddr _sockaddr;
struct sockaddr_in _sockaddr_in;
struct sockaddr_in6 _sockaddr_in6;
} sgid_addr, dgid_addr;
};
struct rxe_send_wr {
- __u64 wr_id;
+ __aligned_u64 wr_id;
__u32 num_sge;
__u32 opcode;
__u32 send_flags;
@@ -54,14 +58,16 @@
} ex;
union {
struct {
- __u64 remote_addr;
+ __aligned_u64 remote_addr;
__u32 rkey;
+ __u32 reserved;
} rdma;
struct {
- __u64 remote_addr;
- __u64 compare_add;
- __u64 swap;
+ __aligned_u64 remote_addr;
+ __aligned_u64 compare_add;
+ __aligned_u64 swap;
__u32 rkey;
+ __u32 reserved;
} atomic;
struct {
__u32 remote_qpn;
@@ -69,19 +75,22 @@
__u16 pkey_index;
} ud;
struct {
- struct ib_mr * mr;
+ union {
+ struct ib_mr * mr;
+ __aligned_u64 reserved;
+ };
__u32 key;
- int access;
+ __u32 access;
} reg;
} wr;
};
struct rxe_sge {
- __u64 addr;
+ __aligned_u64 addr;
__u32 length;
__u32 lkey;
};
struct mminfo {
- __u64 offset;
+ __aligned_u64 offset;
__u32 size;
__u32 pad;
};
@@ -91,6 +100,7 @@
__u32 cur_sge;
__u32 num_sge;
__u32 sge_offset;
+ __u32 reserved;
union {
__u8 inline_data[0];
struct rxe_sge sge[0];
@@ -101,7 +111,7 @@
struct rxe_av av;
__u32 status;
__u32 state;
- __u64 iova;
+ __aligned_u64 iova;
__u32 mask;
__u32 first_psn;
__u32 last_psn;
@@ -111,9 +121,27 @@
struct rxe_dma_info dma;
};
struct rxe_recv_wqe {
- __u64 wr_id;
+ __aligned_u64 wr_id;
__u32 num_sge;
__u32 padding;
struct rxe_dma_info dma;
};
+struct rxe_create_cq_resp {
+ struct mminfo mi;
+};
+struct rxe_resize_cq_resp {
+ struct mminfo mi;
+};
+struct rxe_create_qp_resp {
+ struct mminfo rq_mi;
+ struct mminfo sq_mi;
+};
+struct rxe_create_srq_resp {
+ struct mminfo mi;
+ __u32 srq_num;
+ __u32 reserved;
+};
+struct rxe_modify_srq_cmd {
+ __aligned_u64 mmap_info_addr;
+};
#endif
diff --git a/libc/kernel/uapi/rdma/vmw_pvrdma-abi.h b/libc/kernel/uapi/rdma/vmw_pvrdma-abi.h
index 7c13680..7b43e35 100644
--- a/libc/kernel/uapi/rdma/vmw_pvrdma-abi.h
+++ b/libc/kernel/uapi/rdma/vmw_pvrdma-abi.h
@@ -22,12 +22,14 @@
#define PVRDMA_UVERBS_ABI_VERSION 3
#define PVRDMA_UAR_HANDLE_MASK 0x00FFFFFF
#define PVRDMA_UAR_QP_OFFSET 0
-#define PVRDMA_UAR_QP_SEND BIT(30)
-#define PVRDMA_UAR_QP_RECV BIT(31)
+#define PVRDMA_UAR_QP_SEND (1 << 30)
+#define PVRDMA_UAR_QP_RECV (1 << 31)
#define PVRDMA_UAR_CQ_OFFSET 4
-#define PVRDMA_UAR_CQ_ARM_SOL BIT(29)
-#define PVRDMA_UAR_CQ_ARM BIT(30)
-#define PVRDMA_UAR_CQ_POLL BIT(31)
+#define PVRDMA_UAR_CQ_ARM_SOL (1 << 29)
+#define PVRDMA_UAR_CQ_ARM (1 << 30)
+#define PVRDMA_UAR_CQ_POLL (1 << 31)
+#define PVRDMA_UAR_SRQ_OFFSET 8
+#define PVRDMA_UAR_SRQ_RECV (1 << 30)
enum pvrdma_wr_opcode {
PVRDMA_WR_RDMA_WRITE,
PVRDMA_WR_RDMA_WRITE_WITH_IMM,
@@ -104,7 +106,7 @@
__u32 reserved;
};
struct pvrdma_create_cq {
- __u64 buf_addr;
+ __aligned_u64 buf_addr;
__u32 buf_size;
__u32 reserved;
};
@@ -113,12 +115,12 @@
__u32 reserved;
};
struct pvrdma_resize_cq {
- __u64 buf_addr;
+ __aligned_u64 buf_addr;
__u32 buf_size;
__u32 reserved;
};
struct pvrdma_create_srq {
- __u64 buf_addr;
+ __aligned_u64 buf_addr;
__u32 buf_size;
__u32 reserved;
};
@@ -127,21 +129,21 @@
__u32 reserved;
};
struct pvrdma_create_qp {
- __u64 rbuf_addr;
- __u64 sbuf_addr;
+ __aligned_u64 rbuf_addr;
+ __aligned_u64 sbuf_addr;
__u32 rbuf_size;
__u32 sbuf_size;
- __u64 qp_addr;
+ __aligned_u64 qp_addr;
};
struct pvrdma_ex_cmp_swap {
- __u64 swap_val;
- __u64 compare_val;
- __u64 swap_mask;
- __u64 compare_mask;
+ __aligned_u64 swap_val;
+ __aligned_u64 compare_val;
+ __aligned_u64 swap_mask;
+ __aligned_u64 compare_mask;
};
struct pvrdma_ex_fetch_add {
- __u64 add_val;
- __u64 field_boundary;
+ __aligned_u64 add_val;
+ __aligned_u64 field_boundary;
};
struct pvrdma_av {
__u32 port_pd;
@@ -155,17 +157,17 @@
__u8 reserved[6];
};
struct pvrdma_sge {
- __u64 addr;
+ __aligned_u64 addr;
__u32 length;
__u32 lkey;
};
struct pvrdma_rq_wqe_hdr {
- __u64 wr_id;
+ __aligned_u64 wr_id;
__u32 num_sge;
__u32 total_len;
};
struct pvrdma_sq_wqe_hdr {
- __u64 wr_id;
+ __aligned_u64 wr_id;
__u32 num_sge;
__u32 total_len;
__u32 opcode;
@@ -177,19 +179,19 @@
__u32 reserved;
union {
struct {
- __u64 remote_addr;
+ __aligned_u64 remote_addr;
__u32 rkey;
__u8 reserved[4];
} rdma;
struct {
- __u64 remote_addr;
- __u64 compare_add;
- __u64 swap;
+ __aligned_u64 remote_addr;
+ __aligned_u64 compare_add;
+ __aligned_u64 swap;
__u32 rkey;
__u32 reserved;
} atomic;
struct {
- __u64 remote_addr;
+ __aligned_u64 remote_addr;
__u32 log_arg_sz;
__u32 rkey;
union {
@@ -198,13 +200,14 @@
} wr_data;
} masked_atomics;
struct {
- __u64 iova_start;
- __u64 pl_pdir_dma;
+ __aligned_u64 iova_start;
+ __aligned_u64 pl_pdir_dma;
__u32 page_shift;
__u32 page_list_len;
__u32 length;
__u32 access_flags;
__u32 rkey;
+ __u32 reserved;
} fast_reg;
struct {
__u32 remote_qpn;
@@ -214,8 +217,8 @@
} wr;
};
struct pvrdma_cqe {
- __u64 wr_id;
- __u64 qp;
+ __aligned_u64 wr_id;
+ __aligned_u64 qp;
__u32 opcode;
__u32 status;
__u32 byte_len;
diff --git a/libc/kernel/uapi/sound/asound.h b/libc/kernel/uapi/sound/asound.h
index 63f66b4..e5473a5 100644
--- a/libc/kernel/uapi/sound/asound.h
+++ b/libc/kernel/uapi/sound/asound.h
@@ -153,6 +153,10 @@
#define SNDRV_PCM_FORMAT_IMA_ADPCM ((__force snd_pcm_format_t) 22)
#define SNDRV_PCM_FORMAT_MPEG ((__force snd_pcm_format_t) 23)
#define SNDRV_PCM_FORMAT_GSM ((__force snd_pcm_format_t) 24)
+#define SNDRV_PCM_FORMAT_S20_LE ((__force snd_pcm_format_t) 25)
+#define SNDRV_PCM_FORMAT_S20_BE ((__force snd_pcm_format_t) 26)
+#define SNDRV_PCM_FORMAT_U20_LE ((__force snd_pcm_format_t) 27)
+#define SNDRV_PCM_FORMAT_U20_BE ((__force snd_pcm_format_t) 28)
#define SNDRV_PCM_FORMAT_SPECIAL ((__force snd_pcm_format_t) 31)
#define SNDRV_PCM_FORMAT_S24_3LE ((__force snd_pcm_format_t) 32)
#define SNDRV_PCM_FORMAT_S24_3BE ((__force snd_pcm_format_t) 33)
@@ -176,6 +180,7 @@
#define SNDRV_PCM_FORMAT_DSD_U16_BE ((__force snd_pcm_format_t) 51)
#define SNDRV_PCM_FORMAT_DSD_U32_BE ((__force snd_pcm_format_t) 52)
#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U32_BE
+#define SNDRV_PCM_FORMAT_FIRST SNDRV_PCM_FORMAT_S8
#ifdef SNDRV_LITTLE_ENDIAN
#define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_LE
#define SNDRV_PCM_FORMAT_U16 SNDRV_PCM_FORMAT_U16_LE
@@ -186,6 +191,8 @@
#define SNDRV_PCM_FORMAT_FLOAT SNDRV_PCM_FORMAT_FLOAT_LE
#define SNDRV_PCM_FORMAT_FLOAT64 SNDRV_PCM_FORMAT_FLOAT64_LE
#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE
+#define SNDRV_PCM_FORMAT_S20 SNDRV_PCM_FORMAT_S20_LE
+#define SNDRV_PCM_FORMAT_U20 SNDRV_PCM_FORMAT_U20_LE
#endif
#ifdef SNDRV_BIG_ENDIAN
#define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_BE
@@ -197,6 +204,8 @@
#define SNDRV_PCM_FORMAT_FLOAT SNDRV_PCM_FORMAT_FLOAT_BE
#define SNDRV_PCM_FORMAT_FLOAT64 SNDRV_PCM_FORMAT_FLOAT64_BE
#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE
+#define SNDRV_PCM_FORMAT_S20 SNDRV_PCM_FORMAT_S20_BE
+#define SNDRV_PCM_FORMAT_U20 SNDRV_PCM_FORMAT_U20_BE
#endif
typedef int __bitwise snd_pcm_subformat_t;
#define SNDRV_PCM_SUBFORMAT_STD ((__force snd_pcm_subformat_t) 0)
diff --git a/libc/kernel/uapi/sound/snd_sst_tokens.h b/libc/kernel/uapi/sound/snd_sst_tokens.h
index a4cfdd5..85a99c7 100644
--- a/libc/kernel/uapi/sound/snd_sst_tokens.h
+++ b/libc/kernel/uapi/sound/snd_sst_tokens.h
@@ -93,6 +93,10 @@
SKL_TKN_MM_U32_FMT_ID,
SKL_TKN_MM_U32_NUM_IN_FMT,
SKL_TKN_MM_U32_NUM_OUT_FMT,
- SKL_TKN_MAX = SKL_TKN_MM_U32_NUM_OUT_FMT,
+ SKL_TKN_U32_ASTATE_IDX,
+ SKL_TKN_U32_ASTATE_COUNT,
+ SKL_TKN_U32_ASTATE_KCPS,
+ SKL_TKN_U32_ASTATE_CLK_SRC,
+ SKL_TKN_MAX = SKL_TKN_U32_ASTATE_CLK_SRC,
};
#endif
diff --git a/libc/private/bionic_asm_arm64.h b/libc/private/bionic_asm_arm64.h
index 43ecaf3..463ca31 100644
--- a/libc/private/bionic_asm_arm64.h
+++ b/libc/private/bionic_asm_arm64.h
@@ -37,7 +37,7 @@
#pragma once
-#define __bionic_asm_align 0
+#define __bionic_asm_align 16
#undef __bionic_asm_function_type
#define __bionic_asm_function_type %function
diff --git a/libc/private/thread_private.h b/libc/private/thread_private.h
index 0081ad0..1f9eeb6 100644
--- a/libc/private/thread_private.h
+++ b/libc/private/thread_private.h
@@ -2,8 +2,7 @@
/* PUBLIC DOMAIN: No Rights Reserved. Marco S Hyman <marc@snafu.org> */
-#ifndef _THREAD_PRIVATE_H_
-#define _THREAD_PRIVATE_H_
+#pragma once
#include <pthread.h>
@@ -16,33 +15,15 @@
* described functions for operation in a non-threaded environment.
*/
-/*
- * helper macro to make unique names in the thread namespace
- */
-#define __THREAD_NAME(name) __CONCAT(_thread_tagname_,name)
-
-struct __thread_private_tag_t {
- pthread_mutex_t _private_lock;
- pthread_key_t _private_key;
-};
-
-#define _THREAD_PRIVATE_MUTEX(name) \
- static struct __thread_private_tag_t __THREAD_NAME(name) = { PTHREAD_MUTEX_INITIALIZER, -1 }
-#define _THREAD_PRIVATE_MUTEX_LOCK(name) \
- pthread_mutex_lock( &__THREAD_NAME(name)._private_lock )
-#define _THREAD_PRIVATE_MUTEX_UNLOCK(name) \
- pthread_mutex_unlock( &__THREAD_NAME(name)._private_lock )
+#define __MUTEX_NAME(name) __CONCAT(__libc_mutex_,name)
+#define _THREAD_PRIVATE_MUTEX(name) static pthread_mutex_t __MUTEX_NAME(name) = PTHREAD_MUTEX_INITIALIZER
+#define _THREAD_PRIVATE_MUTEX_LOCK(name) pthread_mutex_lock(&__MUTEX_NAME(name))
+#define _THREAD_PRIVATE_MUTEX_UNLOCK(name) pthread_mutex_unlock(&__MUTEX_NAME(name))
/* Note that these aren't compatible with the usual OpenBSD ones which lazy-initialize! */
#define _MUTEX_LOCK(l) pthread_mutex_lock((pthread_mutex_t*) l)
#define _MUTEX_UNLOCK(l) pthread_mutex_unlock((pthread_mutex_t*) l)
-__LIBC_HIDDEN__ void _thread_atexit_lock(void);
-__LIBC_HIDDEN__ void _thread_atexit_unlock(void);
-
-#define _ATEXIT_LOCK() _thread_atexit_lock()
-#define _ATEXIT_UNLOCK() _thread_atexit_unlock()
-
__LIBC_HIDDEN__ void _thread_arc4_lock(void);
__LIBC_HIDDEN__ void _thread_arc4_unlock(void);
@@ -53,5 +34,3 @@
extern volatile sig_atomic_t _rs_forked;
__END_DECLS
-
-#endif /* _THREAD_PRIVATE_H_ */
diff --git a/libc/stdio/local.h b/libc/stdio/local.h
index 441fcfe..d306a21 100644
--- a/libc/stdio/local.h
+++ b/libc/stdio/local.h
@@ -137,6 +137,9 @@
// Equivalent to `_seek` but for _FILE_OFFSET_BITS=64.
// Callers should use this but fall back to `__sFILE::_seek`.
off64_t (*_seek64)(void*, off64_t, int);
+
+ // The pid of the child if this FILE* is from popen(3).
+ pid_t _popen_pid;
};
// Values for `__sFILE::_flags`.
@@ -201,7 +204,6 @@
__LIBC32_LEGACY_PUBLIC__ int _fwalk(int (*)(FILE*));
off64_t __sseek64(void*, off64_t, int);
-int __sflush_locked(FILE*);
int __swhatbuf(FILE*, size_t*, int*);
wint_t __fgetwc_unlock(FILE*);
wint_t __ungetwc(wint_t, FILE*);
diff --git a/libc/stdio/refill.c b/libc/stdio/refill.c
index 1df4191..cfa2bfd 100644
--- a/libc/stdio/refill.c
+++ b/libc/stdio/refill.c
@@ -40,7 +40,7 @@
lflush(FILE *fp)
{
if ((fp->_flags & (__SLBF|__SWR)) == (__SLBF|__SWR))
- return (__sflush_locked(fp)); /* ignored... */
+ return (__sflush(fp)); /* ignored... */
return (0);
}
diff --git a/libc/stdio/stdio.cpp b/libc/stdio/stdio.cpp
index e066e5b..1f08ea1 100644
--- a/libc/stdio/stdio.cpp
+++ b/libc/stdio/stdio.cpp
@@ -41,7 +41,9 @@
#include <stdlib.h>
#include <string.h>
#include <sys/param.h>
+#include <sys/socket.h>
#include <sys/stat.h>
+#include <sys/wait.h>
#include <unistd.h>
#include <async_safe/log.h>
@@ -64,33 +66,42 @@
va_end(ap); \
return result;
-#define std(flags, file) \
- {0,0,0,flags,file,{0,0},0,__sF+file,__sclose,__sread,nullptr,__swrite, \
- {(unsigned char *)(__sFext+file), 0},nullptr,0,{0},{0},{0,0},0,0}
-
-_THREAD_PRIVATE_MUTEX(__sfp_mutex);
-
-#define SBUF_INIT {}
-#define WCHAR_IO_DATA_INIT {}
+#define MAKE_STD_STREAM(flags, fd) \
+ { \
+ ._flags = flags, ._file = fd, ._cookie = __sF + fd, ._close = __sclose, \
+ ._read = __sread, ._write = __swrite, ._ext = { \
+ ._base = reinterpret_cast<uint8_t*>(__sFext + fd) \
+ } \
+ }
static struct __sfileext __sFext[3] = {
- { SBUF_INIT, WCHAR_IO_DATA_INIT, PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP, false, __sseek64 },
- { SBUF_INIT, WCHAR_IO_DATA_INIT, PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP, false, __sseek64 },
- { SBUF_INIT, WCHAR_IO_DATA_INIT, PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP, false, __sseek64 },
+ {._lock = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP,
+ ._caller_handles_locking = false,
+ ._seek64 = __sseek64,
+ ._popen_pid = 0},
+ {._lock = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP,
+ ._caller_handles_locking = false,
+ ._seek64 = __sseek64,
+ ._popen_pid = 0},
+ {._lock = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP,
+ ._caller_handles_locking = false,
+ ._seek64 = __sseek64,
+ ._popen_pid = 0},
};
// __sF is exported for backwards compatibility. Until M, we didn't have symbols
// for stdin/stdout/stderr; they were macros accessing __sF.
FILE __sF[3] = {
- std(__SRD, STDIN_FILENO),
- std(__SWR, STDOUT_FILENO),
- std(__SWR|__SNBF, STDERR_FILENO),
+ MAKE_STD_STREAM(__SRD, STDIN_FILENO),
+ MAKE_STD_STREAM(__SWR, STDOUT_FILENO),
+ MAKE_STD_STREAM(__SWR|__SNBF, STDERR_FILENO),
};
FILE* stdin = &__sF[0];
FILE* stdout = &__sF[1];
FILE* stderr = &__sF[2];
+static pthread_mutex_t __stdio_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
struct glue __sglue = { nullptr, 3, __sF };
static struct glue* lastglue = &__sglue;
@@ -108,8 +119,6 @@
};
static glue* moreglue(int n) {
- static FILE empty;
-
char* data = new char[sizeof(glue) + ALIGNBYTES + n * sizeof(FILE) + n * sizeof(__sfileext)];
if (data == nullptr) return nullptr;
@@ -120,7 +129,7 @@
g->niobs = n;
g->iobs = p;
while (--n >= 0) {
- *p = empty;
+ *p = {};
_FILEEXT_SETUP(p, pext);
p++;
pext++;
@@ -143,7 +152,7 @@
int n;
struct glue *g;
- _THREAD_PRIVATE_MUTEX_LOCK(__sfp_mutex);
+ pthread_mutex_lock(&__stdio_mutex);
for (g = &__sglue; g != nullptr; g = g->next) {
for (fp = g->iobs, n = g->niobs; --n >= 0; fp++)
if (fp->_flags == 0)
@@ -151,15 +160,15 @@
}
/* release lock while mallocing */
- _THREAD_PRIVATE_MUTEX_UNLOCK(__sfp_mutex);
+ pthread_mutex_unlock(&__stdio_mutex);
if ((g = moreglue(NDYNAMIC)) == nullptr) return nullptr;
- _THREAD_PRIVATE_MUTEX_LOCK(__sfp_mutex);
+ pthread_mutex_lock(&__stdio_mutex);
lastglue->next = g;
lastglue = g;
fp = g->iobs;
found:
fp->_flags = 1; /* reserve this slot; caller sets real flags */
- _THREAD_PRIVATE_MUTEX_UNLOCK(__sfp_mutex);
+ pthread_mutex_unlock(&__stdio_mutex);
fp->_p = nullptr; /* no current pointer */
fp->_w = 0; /* nothing to read or write */
fp->_r = 0;
@@ -183,9 +192,20 @@
return fp;
}
-extern "C" __LIBC_HIDDEN__ void __libc_stdio_cleanup(void) {
- // Equivalent to fflush(nullptr), but without all the locking since we're shutting down anyway.
- _fwalk(__sflush);
+int _fwalk(int (*callback)(FILE*)) {
+ pthread_mutex_lock(&__stdio_mutex);
+ int result = 0;
+ for (glue* g = &__sglue; g != nullptr; g = g->next) {
+ FILE* fp = g->iobs;
+ for (int n = g->niobs; --n >= 0; ++fp) {
+ ScopedFileLock sfl(fp);
+ if (fp->_flags != 0 && (fp->_flags & __SIGN) == 0) {
+ result |= (*callback)(fp);
+ }
+ }
+ }
+ pthread_mutex_unlock(&__stdio_mutex);
+ return result;
}
static FILE* __fopen(int fd, int flags) {
@@ -383,6 +403,16 @@
if (HASUB(fp)) FREEUB(fp);
free_fgetln_buffer(fp);
+ // If we were created by popen(3), wait for the child.
+ pid_t pid = _EXT(fp)->_popen_pid;
+ if (pid > 0) {
+ int status;
+ if (TEMP_FAILURE_RETRY(wait4(pid, &status, 0, nullptr)) != -1) {
+ r = status;
+ }
+ }
+ _EXT(fp)->_popen_pid = 0;
+
// Poison this FILE so accesses after fclose will be obvious.
fp->_file = -1;
fp->_r = fp->_w = 0;
@@ -391,6 +421,7 @@
fp->_flags = 0;
return r;
}
+__strong_alias(pclose, fclose);
int fileno_unlocked(FILE* fp) {
CHECK_FP(fp);
@@ -465,11 +496,6 @@
return 0;
}
-int __sflush_locked(FILE* fp) {
- ScopedFileLock sfl(fp);
- return __sflush(fp);
-}
-
int __sread(void* cookie, char* buf, int n) {
FILE* fp = reinterpret_cast<FILE*>(cookie);
return TEMP_FAILURE_RETRY(read(fp->_file, buf, n));
@@ -707,18 +733,16 @@
return getc_unlocked(fp);
}
-/*
- * Read at most n-1 characters from the given file.
- * Stop when a newline has been read, or the count runs out.
- * Return first argument, or NULL if no characters were read.
- * Do not return NULL if n == 1.
- */
char* fgets(char* buf, int n, FILE* fp) {
CHECK_FP(fp);
ScopedFileLock sfl(fp);
return fgets_unlocked(buf, n, fp);
}
+// Reads at most n-1 characters from the given file.
+// Stops when a newline has been read, or the count runs out.
+// Returns first argument, or nullptr if no characters were read.
+// Does not return nullptr if n == 1.
char* fgets_unlocked(char* buf, int n, FILE* fp) {
if (n <= 0) {
errno = EINVAL;
@@ -1013,7 +1037,7 @@
}
static int fflush_all() {
- return _fwalk(__sflush_locked);
+ return _fwalk(__sflush);
}
int fflush(FILE* fp) {
@@ -1122,6 +1146,80 @@
return (__sfvwrite(fp, &uio) == 0) ? count : ((n - uio.uio_resid) / size);
}
+static int __close_if_popened(FILE* fp) {
+ if (_EXT(fp)->_popen_pid > 0) close(fileno(fp));
+ return 0;
+}
+
+static FILE* __popen_fail(int fds[2]) {
+ ErrnoRestorer errno_restorer;
+ close(fds[0]);
+ close(fds[1]);
+ return nullptr;
+}
+
+FILE* popen(const char* cmd, const char* mode) {
+ bool close_on_exec = (strchr(mode, 'e') != nullptr);
+
+ // Was the request for a socketpair or just a pipe?
+ int fds[2];
+ bool bidirectional = false;
+ if (strchr(mode, '+') != nullptr) {
+ if (socketpair(AF_LOCAL, SOCK_CLOEXEC | SOCK_STREAM, 0, fds) == -1) return nullptr;
+ bidirectional = true;
+ mode = "r+";
+ } else {
+ if (pipe2(fds, O_CLOEXEC) == -1) return nullptr;
+ mode = strrchr(mode, 'r') ? "r" : "w";
+ }
+
+ // If the parent wants to read, the child's fd needs to be stdout.
+ int parent, child, desired_child_fd;
+ if (*mode == 'r') {
+ parent = 0;
+ child = 1;
+ desired_child_fd = STDOUT_FILENO;
+ } else {
+ parent = 1;
+ child = 0;
+ desired_child_fd = STDIN_FILENO;
+ }
+
+ // Ensure that the child fd isn't the desired child fd.
+ if (fds[child] == desired_child_fd) {
+ int new_fd = fcntl(fds[child], F_DUPFD_CLOEXEC, 0);
+ if (new_fd == -1) return __popen_fail(fds);
+ close(fds[child]);
+ fds[child] = new_fd;
+ }
+
+ pid_t pid = vfork();
+ if (pid == -1) return __popen_fail(fds);
+
+ if (pid == 0) {
+ close(fds[parent]);
+ // POSIX says "The popen() function shall ensure that any streams from previous popen() calls
+ // that remain open in the parent process are closed in the new child process."
+ _fwalk(__close_if_popened);
+ // dup2 so that the child fd isn't closed on exec.
+ if (dup2(fds[child], desired_child_fd) == -1) _exit(127);
+ close(fds[child]);
+ if (bidirectional) dup2(STDOUT_FILENO, STDIN_FILENO);
+ execl(_PATH_BSHELL, "sh", "-c", cmd, nullptr);
+ _exit(127);
+ }
+
+ FILE* fp = fdopen(fds[parent], mode);
+ if (fp == nullptr) return __popen_fail(fds);
+
+ // The caller didn't ask for their pipe to be O_CLOEXEC, so flip it back now the child has forked.
+ if (!close_on_exec) fcntl(fds[parent], F_SETFD, 0);
+ close(fds[child]);
+
+ _EXT(fp)->_popen_pid = pid;
+ return fp;
+}
+
namespace {
namespace phony {
diff --git a/libc/stdlib/atexit.c b/libc/stdlib/atexit.c
index c817b63..a26bee4 100644
--- a/libc/stdlib/atexit.c
+++ b/libc/stdlib/atexit.c
@@ -29,18 +29,23 @@
*
*/
-#include <sys/types.h>
-#include <sys/mman.h>
+#include "atexit.h"
+
+#include <pthread.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include "atexit.h"
-#include "private/thread_private.h"
+#include <sys/mman.h>
+#include <sys/types.h>
/* BEGIN android-changed */
#include "private/bionic_prctl.h"
/* END android-changed */
+static pthread_mutex_t g_atexit_lock = PTHREAD_MUTEX_INITIALIZER;
+#define _ATEXIT_LOCK() pthread_mutex_lock(&g_atexit_lock)
+#define _ATEXIT_UNLOCK() pthread_mutex_unlock(&g_atexit_lock)
+
struct atexit {
struct atexit *next; /* next in list */
int ind; /* next index in this table */
@@ -79,15 +84,14 @@
int
__cxa_atexit(void (*func)(void *), void *arg, void *dso)
{
- struct atexit *p = __atexit;
struct atexit_fn *fnp;
size_t pgsize = getpagesize();
int ret = -1;
- if (pgsize < sizeof(*p))
+ if (pgsize < sizeof(struct atexit))
return (-1);
_ATEXIT_LOCK();
- p = __atexit;
+ struct atexit *p = __atexit;
if (p != NULL) {
if (p->ind + 1 >= p->max)
p = NULL;
@@ -185,8 +189,7 @@
}
_ATEXIT_UNLOCK();
- extern void __libc_stdio_cleanup(void);
- __libc_stdio_cleanup();
+ fflush(NULL);
/* BEGIN android-changed: call __unregister_atfork if dso is not null */
if (dso != NULL) {
diff --git a/libc/upstream-netbsd/lib/libc/gen/popen.c b/libc/upstream-netbsd/lib/libc/gen/popen.c
deleted file mode 100644
index 593e346..0000000
--- a/libc/upstream-netbsd/lib/libc/gen/popen.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/* $NetBSD: popen.c,v 1.32 2012/06/25 22:32:43 abs Exp $ */
-
-/*
- * Copyright (c) 1988, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software written by Ken Arnold and
- * published in UNIX Review, Vol. 6, No. 8.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "@(#)popen.c 8.3 (Berkeley) 5/3/95";
-#else
-__RCSID("$NetBSD: popen.c,v 1.32 2012/06/25 22:32:43 abs Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-#include <sys/param.h>
-#include <sys/wait.h>
-#include <sys/socket.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <paths.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-
-#include "env.h"
-#include "reentrant.h"
-
-#ifdef __weak_alias
-__weak_alias(popen,_popen)
-__weak_alias(pclose,_pclose)
-#endif
-
-static struct pid {
- struct pid *next;
- FILE *fp;
-#ifdef _REENTRANT
- int fd;
-#endif
- pid_t pid;
-} *pidlist;
-
-#ifdef _REENTRANT
-static rwlock_t pidlist_lock = RWLOCK_INITIALIZER;
-#endif
-
-FILE *
-popen(const char *command, const char *type)
-{
- struct pid *cur, *old;
- FILE *iop;
- const char * volatile xtype = type;
- int pdes[2], pid, serrno;
- volatile int twoway;
- int flags;
-
- _DIAGASSERT(command != NULL);
- _DIAGASSERT(xtype != NULL);
-
- flags = strchr(xtype, 'e') ? O_CLOEXEC : 0;
- if (strchr(xtype, '+')) {
- int stype = flags ? (SOCK_STREAM | SOCK_CLOEXEC) : SOCK_STREAM;
- twoway = 1;
- xtype = "r+";
- if (socketpair(AF_LOCAL, stype, 0, pdes) < 0)
- return NULL;
- } else {
- twoway = 0;
- xtype = strrchr(xtype, 'r') ? "r" : "w";
- if (pipe2(pdes, flags) == -1)
- return NULL;
- }
-
- if ((cur = malloc(sizeof(struct pid))) == NULL) {
- (void)close(pdes[0]);
- (void)close(pdes[1]);
- errno = ENOMEM;
- return (NULL);
- }
-
- (void)rwlock_rdlock(&pidlist_lock);
- (void)__readlockenv();
- switch (pid = vfork()) {
- case -1: /* Error. */
- serrno = errno;
- (void)__unlockenv();
- (void)rwlock_unlock(&pidlist_lock);
- free(cur);
- (void)close(pdes[0]);
- (void)close(pdes[1]);
- errno = serrno;
- return (NULL);
- /* NOTREACHED */
- case 0: /* Child. */
- /* POSIX.2 B.3.2.2 "popen() shall ensure that any streams
- from previous popen() calls that remain open in the
- parent process are closed in the new child process. */
- for (old = pidlist; old; old = old->next)
-#ifdef _REENTRANT
- close(old->fd); /* don't allow a flush */
-#else
- close(fileno(old->fp)); /* don't allow a flush */
-#endif
-
- if (*xtype == 'r') {
- (void)close(pdes[0]);
- if (pdes[1] != STDOUT_FILENO) {
- (void)dup2(pdes[1], STDOUT_FILENO);
- (void)close(pdes[1]);
- }
- if (twoway)
- (void)dup2(STDOUT_FILENO, STDIN_FILENO);
- } else {
- (void)close(pdes[1]);
- if (pdes[0] != STDIN_FILENO) {
- (void)dup2(pdes[0], STDIN_FILENO);
- (void)close(pdes[0]);
- }
- }
-
- execl(_PATH_BSHELL, "sh", "-c", command, NULL);
- _exit(127);
- /* NOTREACHED */
- }
- (void)__unlockenv();
-
- /* Parent; assume fdopen can't fail. */
- if (*xtype == 'r') {
- iop = fdopen(pdes[0], xtype);
-#ifdef _REENTRANT
- cur->fd = pdes[0];
-#endif
- (void)close(pdes[1]);
- } else {
- iop = fdopen(pdes[1], xtype);
-#ifdef _REENTRANT
- cur->fd = pdes[1];
-#endif
- (void)close(pdes[0]);
- }
-
- /* Link into list of file descriptors. */
- cur->fp = iop;
- cur->pid = pid;
- cur->next = pidlist;
- pidlist = cur;
- (void)rwlock_unlock(&pidlist_lock);
-
- return (iop);
-}
-
-/*
- * pclose --
- * Pclose returns -1 if stream is not associated with a `popened' command,
- * if already `pclosed', or waitpid returns an error.
- */
-int
-pclose(FILE *iop)
-{
- struct pid *cur, *last;
- int pstat;
- pid_t pid;
-
- _DIAGASSERT(iop != NULL);
-
- rwlock_wrlock(&pidlist_lock);
-
- /* Find the appropriate file pointer. */
- for (last = NULL, cur = pidlist; cur; last = cur, cur = cur->next)
- if (cur->fp == iop)
- break;
- if (cur == NULL) {
- (void)rwlock_unlock(&pidlist_lock);
- return (-1);
- }
-
- (void)fclose(iop);
-
- /* Remove the entry from the linked list. */
- if (last == NULL)
- pidlist = cur->next;
- else
- last->next = cur->next;
-
- (void)rwlock_unlock(&pidlist_lock);
-
- do {
- pid = waitpid(cur->pid, &pstat, 0);
- } while (pid == -1 && errno == EINTR);
-
- free(cur);
-
- return (pid == -1 ? -1 : pstat);
-}
diff --git a/libc/upstream-openbsd/lib/libc/stdio/fwalk.c b/libc/upstream-openbsd/lib/libc/stdio/fwalk.c
deleted file mode 100644
index 4b1aa43..0000000
--- a/libc/upstream-openbsd/lib/libc/stdio/fwalk.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* $OpenBSD: fwalk.c,v 1.12 2016/05/23 00:21:48 guenther Exp $ */
-/*-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <errno.h>
-#include <stdio.h>
-#include "local.h"
-#include "glue.h"
-
-int
-_fwalk(int (*function)(FILE *))
-{
- FILE *fp;
- int n, ret;
- struct glue *g;
-
- ret = 0;
- for (g = &__sglue; g != NULL; g = g->next)
- for (fp = g->iobs, n = g->niobs; --n >= 0; fp++) {
- if ((fp->_flags != 0) && ((fp->_flags & __SIGN) == 0))
- ret |= (*function)(fp);
- }
- return (ret);
-}
diff --git a/linker/linker_config.cpp b/linker/linker_config.cpp
index c00b734..391c8a9 100644
--- a/linker/linker_config.cpp
+++ b/linker/linker_config.cpp
@@ -39,6 +39,7 @@
#include <async_safe/log.h>
+#include <limits.h>
#include <stdlib.h>
#include <string>
@@ -223,8 +224,8 @@
}
// remove trailing '/'
- while (value[value.size() - 1] == '/') {
- value = value.substr(0, value.size() - 1);
+ while (!value.empty() && value.back() == '/') {
+ value.pop_back();
}
if (value.empty()) {
@@ -234,7 +235,24 @@
continue;
}
- if (file_is_under_dir(binary_realpath, value)) {
+ // If the path can be resolved, resolve it
+ char buf[PATH_MAX];
+ std::string resolved_path;
+ if (realpath(value.c_str(), buf)) {
+ resolved_path = buf;
+ } else if (errno != ENOENT) {
+ DL_WARN("%s:%zd: warning: path \"%s\" couldn't be resolved: %s",
+ ld_config_file_path,
+ cp.lineno(),
+ value.c_str(),
+ strerror(errno));
+ resolved_path = value;
+ } else {
+ // ENOENT: no need to test if binary is under the path
+ continue;
+ }
+
+ if (file_is_under_dir(binary_realpath, resolved_path)) {
section_name = name.substr(4);
break;
}
diff --git a/linker/linker_phdr.cpp b/linker/linker_phdr.cpp
index b24be92..54354a8 100644
--- a/linker/linker_phdr.cpp
+++ b/linker/linker_phdr.cpp
@@ -213,7 +213,8 @@
bool ElfReader::VerifyElfHeader() {
if (memcmp(header_.e_ident, ELFMAG, SELFMAG) != 0) {
- DL_ERR("\"%s\" has bad ELF magic", name_.c_str());
+ DL_ERR("\"%s\" has bad ELF magic: %02x%02x%02x%02x", name_.c_str(),
+ header_.e_ident[0], header_.e_ident[1], header_.e_ident[2], header_.e_ident[3]);
return false;
}
diff --git a/linker/tests/linker_config_test.cpp b/linker/tests/linker_config_test.cpp
index e716879..9208d9d 100644
--- a/linker/tests/linker_config_test.cpp
+++ b/linker/tests/linker_config_test.cpp
@@ -246,3 +246,47 @@
"error: both shared_libs and allow_all_shared_libs are set for default->system link.",
error_msg);
}
+
+TEST(linker_config, dir_path_resolve) {
+ // This unit test ensures the linker resolves paths of dir.${section}
+ // properties to real path.
+
+ TemporaryDir tmp_dir;
+
+ std::string sub_dir = std::string(tmp_dir.path) + "/subdir";
+ mkdir(sub_dir.c_str(), 0755);
+
+ auto subdir_guard =
+ android::base::make_scope_guard([&sub_dir] { rmdir(sub_dir.c_str()); });
+
+ std::string symlink_path = std::string(tmp_dir.path) + "/symlink";
+ symlink(sub_dir.c_str(), symlink_path.c_str());
+
+ auto symlink_guard =
+ android::base::make_scope_guard([&symlink_path] { unlink(symlink_path.c_str()); });
+
+ std::string config_str =
+ "dir.test = " + symlink_path + "\n"
+ "\n"
+ "[test]\n";
+
+ TemporaryFile tmp_file;
+ close(tmp_file.fd);
+ tmp_file.fd = -1;
+
+ android::base::WriteStringToFile(config_str, tmp_file.path);
+
+ std::string executable_path = sub_dir + "/some-binary";
+
+ const Config* config = nullptr;
+ std::string error_msg;
+
+ ASSERT_TRUE(Config::read_binary_config(tmp_file.path,
+ executable_path.c_str(),
+ false,
+ &config,
+ &error_msg)) << error_msg;
+
+ ASSERT_TRUE(config != nullptr) << error_msg;
+ ASSERT_TRUE(error_msg.empty()) << error_msg;
+}
diff --git a/tests/Android.bp b/tests/Android.bp
index 707d0fe..b5efb8c 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -108,6 +108,7 @@
"net_if_test.cpp",
"netinet_ether_test.cpp",
"netinet_in_test.cpp",
+ "netinet_ip_icmp_test.cpp",
"netinet_udp_test.cpp",
"nl_types_test.cpp",
"pthread_test.cpp",
@@ -166,6 +167,7 @@
"sys_ttydefaults_test.cpp",
"sys_types_test.cpp",
"sys_uio_test.cpp",
+ "sys_un_test.cpp",
"sys_vfs_test.cpp",
"sys_xattr_test.cpp",
"system_properties_test.cpp",
@@ -396,10 +398,8 @@
// -----------------------------------------------------------------------------
// Tests for the device using bionic's .so. Run with:
-// adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests32
-// adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests64
-// adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests-gcc32
-// adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests-gcc64
+// adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests
+// adb shell /data/nativetest64/bionic-unit-tests/bionic-unit-tests
// -----------------------------------------------------------------------------
cc_defaults {
name: "bionic_unit_tests_defaults",
@@ -610,8 +610,8 @@
// -----------------------------------------------------------------------------
// Tests for the device linked against bionic's static library. Run with:
-// adb shell /data/nativetest/bionic-unit-tests-static/bionic-unit-tests-static32
-// adb shell /data/nativetest/bionic-unit-tests-static/bionic-unit-tests-static64
+// adb shell /data/nativetest/bionic-unit-tests-static/bionic-unit-tests-static
+// adb shell /data/nativetest64/bionic-unit-tests-static/bionic-unit-tests-static
// -----------------------------------------------------------------------------
cc_test {
name: "bionic-unit-tests-static",
diff --git a/tests/Android.build.prebuilt.mk b/tests/Android.build.prebuilt.mk
index c98aee2..3b34846 100644
--- a/tests/Android.build.prebuilt.mk
+++ b/tests/Android.build.prebuilt.mk
@@ -29,3 +29,4 @@
LOCAL_SRC_FILES_mips64 := prebuilt-elf-files/mips64/$(bionic_tests_module)
include $(BUILD_PREBUILT)
bionic-loader-test-libs-target: $(LOCAL_MODULE)
+.PHONY: bionic-loader-test-libs-target
diff --git a/tests/atexit_test.cpp b/tests/atexit_test.cpp
index 67fbfd2..e92889d 100644
--- a/tests/atexit_test.cpp
+++ b/tests/atexit_test.cpp
@@ -14,17 +14,7 @@
* limitations under the License.
*/
-// To work around b/25643775, we disable clang optimization so that
-// VTT for std::__1::basic_stringstream<char, std::__1::char_traits<char>,
-// std::__1::allocator<char> >
-// will be correctly kept for other module's references.
-#if defined(__clang__) && (defined(__arm__) || defined(__aarch64__))
-#pragma clang optimize off
-#endif
#include <gtest/gtest.h>
-#if defined(__clang__) && (defined(__arm__) || defined(__aarch64__))
-#pragma clang optimize on
-#endif
#include <dlfcn.h>
#include <libgen.h>
diff --git a/tests/dlext_test.cpp b/tests/dlext_test.cpp
index ec27932..1e3d9c8 100644
--- a/tests/dlext_test.cpp
+++ b/tests/dlext_test.cpp
@@ -173,7 +173,7 @@
extinfo.library_fd_offset = 0;
handle_ = android_dlopen_ext("libname_ignored", RTLD_NOW, &extinfo);
ASSERT_TRUE(handle_ == nullptr);
- ASSERT_EQ("dlopen failed: \"" + lib_path + "\" has bad ELF magic", dlerror());
+ ASSERT_EQ("dlopen failed: \"" + lib_path + "\" has bad ELF magic: 504b0304", dlerror());
// Check if dlsym works after unsuccessful dlopen().
// Supply non-exiting one to make linker visit every soinfo.
diff --git a/tests/grp_pwd_test.cpp b/tests/grp_pwd_test.cpp
index 615f374..2df1ef0 100644
--- a/tests/grp_pwd_test.cpp
+++ b/tests/grp_pwd_test.cpp
@@ -279,7 +279,14 @@
EXPECT_STREQ("/data", pwd->pw_dir) << "pwd->pw_uid: " << pwd->pw_uid;
}
- EXPECT_EQ(0U, uids.count(pwd->pw_uid)) << "pwd->pw_uid: " << pwd->pw_uid;
+ // TODO(b/27999086): fix this check with the OEM range
+ // If OEMs add their own AIDs to private/android_filesystem_config.h, this check will fail.
+ // Long term we want to create a better solution for OEMs adding AIDs, but we're not there
+ // yet, so therefore we do not check for uid's in the OEM range.
+ if (!(pwd->pw_uid >= 2900 && pwd->pw_uid <= 2999) &&
+ !(pwd->pw_uid >= 5000 && pwd->pw_uid <= 5999)) {
+ EXPECT_EQ(0U, uids.count(pwd->pw_uid)) << "pwd->pw_uid: " << pwd->pw_uid;
+ }
uids.emplace(pwd->pw_uid);
}
endpwent();
@@ -522,7 +529,14 @@
EXPECT_STREQ(grp->gr_name, grp->gr_mem[0]) << "grp->gr_gid: " << grp->gr_gid;
EXPECT_TRUE(grp->gr_mem[1] == NULL) << "grp->gr_gid: " << grp->gr_gid;
- EXPECT_EQ(0U, gids.count(grp->gr_gid)) << "grp->gr_gid: " << grp->gr_gid;
+ // TODO(b/27999086): fix this check with the OEM range
+ // If OEMs add their own AIDs to private/android_filesystem_config.h, this check will fail.
+ // Long term we want to create a better solution for OEMs adding AIDs, but we're not there
+ // yet, so therefore we do not check for gid's in the OEM range.
+ if (!(grp->gr_gid >= 2900 && grp->gr_gid <= 2999) &&
+ !(grp->gr_gid >= 5000 && grp->gr_gid <= 5999)) {
+ EXPECT_EQ(0U, gids.count(grp->gr_gid)) << "grp->gr_gid: " << grp->gr_gid;
+ }
gids.emplace(grp->gr_gid);
}
endgrent();
diff --git a/tests/gtest_main.cpp b/tests/gtest_main.cpp
index 6f8c403..1ee8b53 100644
--- a/tests/gtest_main.cpp
+++ b/tests/gtest_main.cpp
@@ -73,27 +73,21 @@
return g_envp;
}
-namespace testing {
-namespace internal {
+static constexpr const char* COLOR_RESET = "\033[m";
+static constexpr const char* COLOR_RED = "\033[0;31m";
+static constexpr const char* COLOR_GREEN = "\033[0;32m";
+static constexpr const char* COLOR_YELLOW = "\033[0;33m";
-// Reuse of testing::internal::ColoredPrintf in gtest.
-enum GTestColor {
- COLOR_DEFAULT,
- COLOR_RED,
- COLOR_GREEN,
- COLOR_YELLOW
-};
+static void ColoredPrintf(const char* const color, const char* fmt, ...) {
+ va_list args;
+ va_start(args, fmt);
-void ColoredPrintf(GTestColor color, const char* fmt, ...);
+ printf("%s", color);
+ vprintf(fmt, args);
+ printf("%s", COLOR_RESET);
-} // namespace internal
-} // namespace testing
-
-using testing::internal::GTestColor;
-using testing::internal::COLOR_RED;
-using testing::internal::COLOR_GREEN;
-using testing::internal::COLOR_YELLOW;
-using testing::internal::ColoredPrintf;
+ va_end(args);
+}
constexpr int DEFAULT_GLOBAL_TEST_RUN_DEADLINE_MS = 90000;
constexpr int DEFAULT_GLOBAL_TEST_RUN_SLOW_THRESHOLD_MS = 2000;
diff --git a/tests/netinet_ip_icmp_test.cpp b/tests/netinet_ip_icmp_test.cpp
new file mode 100644
index 0000000..b3b4f65
--- /dev/null
+++ b/tests/netinet_ip_icmp_test.cpp
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <netinet/ip_icmp.h>
+
+#include <gtest/gtest.h>
+
+TEST(netinet_ip_icmp, struct_icmphdr) {
+ icmphdr hdr = { .type = ICMP_ECHO };
+ ASSERT_EQ(ICMP_ECHO, hdr.type);
+ ASSERT_EQ(0, hdr.code);
+ ASSERT_EQ(0, hdr.checksum);
+ ASSERT_EQ(0, hdr.un.echo.id);
+ ASSERT_EQ(0, hdr.un.echo.sequence);
+ ASSERT_EQ(0U, hdr.un.gateway);
+ ASSERT_EQ(0, hdr.un.frag.mtu);
+}
diff --git a/tests/pthread_test.cpp b/tests/pthread_test.cpp
index af682a9..f2f6e01 100644
--- a/tests/pthread_test.cpp
+++ b/tests/pthread_test.cpp
@@ -2499,6 +2499,11 @@
}
}
+TEST(pthread, pthread_barrier_init_zero_count) {
+ pthread_barrier_t barrier;
+ ASSERT_EQ(EINVAL, pthread_barrier_init(&barrier, nullptr, 0));
+}
+
TEST(pthread, pthread_spinlock_smoke) {
pthread_spinlock_t lock;
ASSERT_EQ(0, pthread_spin_init(&lock, 0));
diff --git a/tests/stdio_test.cpp b/tests/stdio_test.cpp
index 33514d4..6282ec3 100644
--- a/tests/stdio_test.cpp
+++ b/tests/stdio_test.cpp
@@ -22,6 +22,7 @@
#include <math.h>
#include <stdio.h>
#include <sys/types.h>
+#include <sys/socket.h>
#include <sys/stat.h>
#include <unistd.h>
#include <wchar.h>
@@ -888,7 +889,7 @@
ASSERT_EQ(-1, fclose(fp));
}
-TEST(STDIO_TEST, popen) {
+TEST(STDIO_TEST, popen_r) {
FILE* fp = popen("cat /proc/version", "r");
ASSERT_TRUE(fp != NULL);
@@ -900,6 +901,63 @@
ASSERT_EQ(0, pclose(fp));
}
+TEST(STDIO_TEST, popen_socketpair) {
+ FILE* fp = popen("cat", "r+");
+ ASSERT_TRUE(fp != NULL);
+
+ fputs("hello\nworld\n", fp);
+ fflush(fp);
+
+ char buf[16];
+ ASSERT_NE(nullptr, fgets(buf, sizeof(buf), fp));
+ EXPECT_STREQ("hello\n", buf);
+ ASSERT_NE(nullptr, fgets(buf, sizeof(buf), fp));
+ EXPECT_STREQ("world\n", buf);
+
+ ASSERT_EQ(0, pclose(fp));
+}
+
+TEST(STDIO_TEST, popen_socketpair_shutdown) {
+ FILE* fp = popen("uniq -c", "r+");
+ ASSERT_TRUE(fp != NULL);
+
+ fputs("a\na\na\na\nb\n", fp);
+ fflush(fp);
+ ASSERT_EQ(0, shutdown(fileno(fp), SHUT_WR));
+
+ char buf[16];
+ ASSERT_NE(nullptr, fgets(buf, sizeof(buf), fp));
+ EXPECT_STREQ(" 4 a\n", buf);
+ ASSERT_NE(nullptr, fgets(buf, sizeof(buf), fp));
+ EXPECT_STREQ(" 1 b\n", buf);
+
+ ASSERT_EQ(0, pclose(fp));
+}
+
+TEST(STDIO_TEST, popen_return_value_0) {
+ FILE* fp = popen("true", "r");
+ ASSERT_TRUE(fp != NULL);
+ int status = pclose(fp);
+ EXPECT_TRUE(WIFEXITED(status));
+ EXPECT_EQ(0, WEXITSTATUS(status));
+}
+
+TEST(STDIO_TEST, popen_return_value_1) {
+ FILE* fp = popen("false", "r");
+ ASSERT_TRUE(fp != NULL);
+ int status = pclose(fp);
+ EXPECT_TRUE(WIFEXITED(status));
+ EXPECT_EQ(1, WEXITSTATUS(status));
+}
+
+TEST(STDIO_TEST, popen_return_value_signal) {
+ FILE* fp = popen("kill -7 $$", "r");
+ ASSERT_TRUE(fp != NULL);
+ int status = pclose(fp);
+ EXPECT_TRUE(WIFSIGNALED(status));
+ EXPECT_EQ(7, WTERMSIG(status));
+}
+
TEST(STDIO_TEST, getc) {
FILE* fp = fopen("/proc/version", "r");
ASSERT_TRUE(fp != NULL);
diff --git a/tests/sys_un_test.cpp b/tests/sys_un_test.cpp
new file mode 100644
index 0000000..08a4d0f
--- /dev/null
+++ b/tests/sys_un_test.cpp
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sys/un.h>
+
+#include <string.h>
+#include <gtest/gtest.h>
+
+TEST(sys_un, SUN_LEN_macro) {
+ sockaddr_un sun = {};
+ sun.sun_family = 1;
+ strcpy(sun.sun_path, "hello");
+ ASSERT_EQ(2U + strlen("hello"), SUN_LEN(&sun));
+}
diff --git a/tests/thread_local_test.cpp b/tests/thread_local_test.cpp
index 1422ed2..95282da 100644
--- a/tests/thread_local_test.cpp
+++ b/tests/thread_local_test.cpp
@@ -18,14 +18,6 @@
#include <stdint.h>
#include <string.h>
-#if defined(__GNUC__) && !defined(__clang__) && \
- (defined(__arm__) || defined(__aarch64__))
-// Gcc has a bug with -O -fdata-section for the arm target: http://b/22772147.
-// Until that bug is fixed, disable optimization since
-// it is not essential for this test.
-#pragma GCC optimize("-O0")
-#endif
-
__thread int local_var = 100;
int shared_var = 200;
diff --git a/tests/uchar_test.cpp b/tests/uchar_test.cpp
index 8b29667..2b4c4d3 100644
--- a/tests/uchar_test.cpp
+++ b/tests/uchar_test.cpp
@@ -322,6 +322,35 @@
#endif
}
+TEST(uchar, mbrtoc32_valid_non_characters) {
+#if HAVE_UCHAR
+ ASSERT_STREQ("C.UTF-8", setlocale(LC_CTYPE, "C.UTF-8"));
+ uselocale(LC_GLOBAL_LOCALE);
+
+ char32_t out[8] = {};
+ ASSERT_EQ(3U, mbrtoc32(out, "\xef\xbf\xbe", 3, nullptr));
+ ASSERT_EQ(0xfffeU, out[0]);
+ ASSERT_EQ(3U, mbrtoc32(out, "\xef\xbf\xbf", 3, nullptr));
+ ASSERT_EQ(0xffffU, out[0]);
+#else
+ GTEST_LOG_(INFO) << "uchar.h is unavailable.\n";
+#endif
+}
+
+TEST(uchar, mbrtoc32_out_of_range) {
+#if HAVE_UCHAR
+ ASSERT_STREQ("C.UTF-8", setlocale(LC_CTYPE, "C.UTF-8"));
+ uselocale(LC_GLOBAL_LOCALE);
+
+ char32_t out[8] = {};
+ errno = 0;
+ ASSERT_EQ(static_cast<size_t>(-1), mbrtoc32(out, "\xf5\x80\x80\x80", 4, nullptr));
+ ASSERT_EQ(EILSEQ, errno);
+#else
+ GTEST_LOG_(INFO) << "uchar.h is unavailable.\n";
+#endif
+}
+
TEST(uchar, mbrtoc32) {
#if HAVE_UCHAR
char32_t out[8];
diff --git a/tests/wchar_test.cpp b/tests/wchar_test.cpp
index b42e13c..e2def07 100644
--- a/tests/wchar_test.cpp
+++ b/tests/wchar_test.cpp
@@ -305,6 +305,28 @@
ASSERT_EQ(EILSEQ, errno);
}
+TEST(wchar, mbrtowc_valid_non_characters) {
+ ASSERT_STREQ("C.UTF-8", setlocale(LC_CTYPE, "C.UTF-8"));
+ uselocale(LC_GLOBAL_LOCALE);
+
+ wchar_t out[8] = {};
+
+ ASSERT_EQ(3U, mbrtowc(out, "\xef\xbf\xbe", 3, nullptr));
+ ASSERT_EQ(static_cast<wchar_t>(0xfffe), out[0]);
+ ASSERT_EQ(3U, mbrtowc(out, "\xef\xbf\xbf", 3, nullptr));
+ ASSERT_EQ(static_cast<wchar_t>(0xffff), out[0]);
+}
+
+TEST(wchar, mbrtowc_out_of_range) {
+ ASSERT_STREQ("C.UTF-8", setlocale(LC_CTYPE, "C.UTF-8"));
+ uselocale(LC_GLOBAL_LOCALE);
+
+ wchar_t out[8] = {};
+ errno = 0;
+ ASSERT_EQ(static_cast<size_t>(-1), mbrtowc(out, "\xf5\x80\x80\x80", 4, nullptr));
+ ASSERT_EQ(EILSEQ, errno);
+}
+
static void test_mbrtowc_incomplete(mbstate_t* ps) {
ASSERT_STREQ("C.UTF-8", setlocale(LC_CTYPE, "C.UTF-8"));
uselocale(LC_GLOBAL_LOCALE);
diff --git a/tools/relocation_packer/Android.bp b/tools/relocation_packer/Android.bp
deleted file mode 100644
index cd6053a..0000000
--- a/tools/relocation_packer/Android.bp
+++ /dev/null
@@ -1,86 +0,0 @@
-//
-// Copyright (C) 2015 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-cc_defaults {
- name: "relocation_packer_flags",
- cflags: [
- "-Wall",
- "-Werror",
- ],
- cppflags: [
- "-Wextra",
- "-Wunused",
- "-Wold-style-cast",
- ],
-
- target: {
- darwin: {
- enabled: false,
- },
- },
-}
-
-cc_library_host_static {
- name: "lib_relocation_packer",
- defaults: ["relocation_packer_flags"],
- srcs: [
- "src/debug.cc",
- "src/delta_encoder.cc",
- "src/elf_file.cc",
- "src/packer.cc",
- "src/sleb128.cc",
- ],
-
- static_libs: [
- "libelf",
- "libz",
- ],
-}
-
-cc_binary_host {
- name: "relocation_packer",
- defaults: ["relocation_packer_flags"],
-
- srcs: ["src/main.cc"],
- static_libs: [
- "lib_relocation_packer",
- "libelf",
- "libz",
- "libbase",
- ],
-
- // Statically linking libc++ to make it work from prebuilts
- stl: "libc++_static",
-}
-
-cc_test_host {
- name: "relocation_packer_unit_tests",
- defaults: ["relocation_packer_flags"],
-
- srcs: [
- "src/debug_unittest.cc",
- "src/delta_encoder_unittest.cc",
- "src/elf_file_unittest.cc",
- "src/sleb128_unittest.cc",
- "src/packer_unittest.cc",
- ],
-
- static_libs: [
- "lib_relocation_packer",
- "libelf",
- "libz",
- ],
-}
diff --git a/tools/relocation_packer/Android.mk b/tools/relocation_packer/Android.mk
deleted file mode 100644
index 9905657..0000000
--- a/tools/relocation_packer/Android.mk
+++ /dev/null
@@ -1,44 +0,0 @@
-#
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-ifeq ($(HOST_OS),linux)
-
-# $(1) library name
-define copy-test-library
-include $(CLEAR_VARS)
-LOCAL_IS_HOST_MODULE := true
-LOCAL_MODULE := $(1)
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-LOCAL_MODULE_PATH := $(HOST_OUT_EXECUTABLES)
-LOCAL_STRIP_MODULE := false
-LOCAL_SRC_FILES := test_data/$(1)
-include $(BUILD_PREBUILT)
-endef
-
-$(eval $(call copy-test-library,elf_file_unittest_relocs_arm32.so))
-$(eval $(call copy-test-library,elf_file_unittest_relocs_arm32_packed.so))
-$(eval $(call copy-test-library,elf_file_unittest_relocs_arm64.so))
-$(eval $(call copy-test-library,elf_file_unittest_relocs_arm64_packed.so))
-$(eval $(call copy-test-library,elf_file_unittest_relocs_ia32.so))
-$(eval $(call copy-test-library,elf_file_unittest_relocs_ia32_packed.so))
-$(eval $(call copy-test-library,elf_file_unittest_relocs_x64.so))
-$(eval $(call copy-test-library,elf_file_unittest_relocs_x64_packed.so))
-$(eval $(call copy-test-library,elf_file_unittest_relocs_mips32.so))
-$(eval $(call copy-test-library,elf_file_unittest_relocs_mips32_packed.so))
-
-endif
diff --git a/tools/relocation_packer/LICENSE b/tools/relocation_packer/LICENSE
deleted file mode 100644
index 972bb2e..0000000
--- a/tools/relocation_packer/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/tools/relocation_packer/src/debug.cc b/tools/relocation_packer/src/debug.cc
deleted file mode 100644
index 29d7ab0..0000000
--- a/tools/relocation_packer/src/debug.cc
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "debug.h"
-
-#include <stdlib.h>
-#include <iostream>
-#include <string>
-
-namespace relocation_packer {
-
-// Construct a new message logger. Prints if level is less than or equal to
-// the level set with SetVerbose() and predicate is true.
-Logger::Logger(Severity severity, int level, bool predicate) {
- severity_ = severity;
- level_ = level;
- predicate_ = predicate;
-}
-
-// On destruction, flush and print the strings accumulated. Abort if FATAL.
-Logger::~Logger() {
- if (predicate_) {
- if (level_ <= max_level_) {
- std::ostream* log = severity_ == INFO ? info_stream_ : error_stream_;
- std::string tag;
- switch (severity_) {
- case INFO: tag = "INFO"; break;
- case WARNING: tag = "WARNING"; break;
- case ERROR: tag = "ERROR"; break;
- case FATAL: tag = "FATAL"; break;
- }
- stream_.flush();
- *log << tag << ": " << stream_.str() << std::endl;
- }
- if (severity_ == FATAL)
- abort();
- }
-}
-
-// Reset to initial state.
-void Logger::Reset() {
- max_level_ = -1;
- info_stream_ = &std::cout;
- error_stream_ = &std::cerr;
-}
-
-// Verbosity. Not thread-safe.
-int Logger::max_level_ = -1;
-
-// Logging streams. Not thread-safe.
-std::ostream* Logger::info_stream_ = &std::cout;
-std::ostream* Logger::error_stream_ = &std::cerr;
-
-} // namespace relocation_packer
diff --git a/tools/relocation_packer/src/debug.h b/tools/relocation_packer/src/debug.h
deleted file mode 100644
index fdfb795..0000000
--- a/tools/relocation_packer/src/debug.h
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Logging and checks. Avoids a dependency on base.
-//
-// LOG(tag) prints messages. Tags are INFO, WARNING, ERROR and FATAL.
-// INFO prints to stdout, the others to stderr. FATAL aborts after printing.
-//
-// LOG_IF(tag, predicate) logs if predicate evaluates to true, else silent.
-//
-// VLOG(level) logs INFO messages where level is less than or equal to the
-// verbosity level set with SetVerbose().
-//
-// VLOG_IF(level, predicate) logs INFO if predicate evaluates to true,
-// else silent.
-//
-// CHECK(predicate) logs a FATAL error if predicate is false.
-// NOTREACHED() always aborts.
-// Log streams can be changed with SetStreams(). Logging is not thread-safe.
-//
-
-#ifndef TOOLS_RELOCATION_PACKER_SRC_DEBUG_H_
-#define TOOLS_RELOCATION_PACKER_SRC_DEBUG_H_
-
-#include <limits.h>
-#include <ostream>
-#include <sstream>
-
-namespace relocation_packer {
-
-class Logger {
- public:
- enum Severity {INFO = 0, WARNING, ERROR, FATAL};
-
- // Construct a new message logger. Prints if level is less than or
- // equal to the level set with SetVerbose() and predicate is true.
- // |severity| is an enumerated severity.
- // |level| is the verbosity level.
- // |predicate| controls if the logger prints or is silent.
- Logger(Severity severity, int level, bool predicate);
-
- // On destruction, flush and print the strings accumulated in stream_.
- ~Logger();
-
- // Return the stream for this logger.
- std::ostream& GetStream() { return stream_; }
-
- // Set verbosity level. Messages with a level less than or equal to
- // this level are printed, others are discarded. Static, not thread-safe.
- static void SetVerbose(int level) { max_level_ = level; }
-
- // Set info and error logging streams. Static, not thread-safe.
- static void SetStreams(std::ostream* info_stream,
- std::ostream* error_stream) {
- info_stream_ = info_stream;
- error_stream_ = error_stream;
- }
-
- // Reset to initial state.
- static void Reset();
-
- private:
- // Message severity, verbosity level, and predicate.
- Severity severity_;
- int level_;
- bool predicate_;
-
- // String stream, accumulates message text.
- std::ostringstream stream_;
-
- // Verbosity for INFO messages. Not thread-safe.
- static int max_level_;
-
- // Logging streams. Not thread-safe.
- static std::ostream* info_stream_;
- static std::ostream* error_stream_;
-};
-
-} // namespace relocation_packer
-
-// Make logging severities visible globally.
-typedef relocation_packer::Logger::Severity LogSeverity;
-
-// LOG(severity) prints a message with the given severity, and aborts if
-// severity is FATAL. LOG_IF(severity, predicate) does the same but only if
-// predicate is true. INT_MIN is guaranteed to be less than or equal to
-// any verbosity level.
-#define LOG(severity) \
- (relocation_packer::Logger(relocation_packer::Logger::severity, INT_MIN, \
- true) \
- .GetStream())
-#define LOG_IF(severity, predicate) \
- (relocation_packer::Logger(relocation_packer::Logger::severity, INT_MIN, \
- (predicate)) \
- .GetStream())
-
-// VLOG(level) prints its message as INFO if level is less than or equal to
-// the current verbosity level.
-#define VLOG(level) \
- (relocation_packer::Logger(relocation_packer::Logger::INFO, (level), true) \
- .GetStream())
-#define VLOG_IF(level, predicate) \
- (relocation_packer::Logger(relocation_packer::Logger::INFO, (level), \
- (predicate)) \
- .GetStream())
-
-// CHECK(predicate) fails with a FATAL log message if predicate is false.
-#define CHECK(predicate) (LOG_IF(FATAL, !(predicate)) \
- << __FILE__ << ":" << __LINE__ << ": " \
- << __FUNCTION__ << ": CHECK '" #predicate "' failed")
-
-// NOTREACHED() always fails with a FATAL log message.
-#define NOTREACHED(_) (LOG(FATAL) \
- << __FILE__ << ":" << __LINE__ << ": " \
- << __FUNCTION__ << ": NOTREACHED() hit")
-
-#endif // TOOLS_RELOCATION_PACKER_SRC_DEBUG_H_
diff --git a/tools/relocation_packer/src/debug_unittest.cc b/tools/relocation_packer/src/debug_unittest.cc
deleted file mode 100644
index b31e2ae..0000000
--- a/tools/relocation_packer/src/debug_unittest.cc
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "debug.h"
-
-#include <sstream>
-#include "gtest/gtest.h"
-
-namespace relocation_packer {
-
-TEST(Debug, Log) {
- Logger::Reset();
- std::ostringstream info;
- std::ostringstream error;
- Logger::SetStreams(&info, &error);
-
- LOG(INFO) << "INFO log message";
- LOG(WARNING) << "WARNING log message";
- LOG(ERROR) << "ERROR log message";
-
- EXPECT_EQ("INFO: INFO log message\n", info.str());
- EXPECT_EQ("WARNING: WARNING log message\n"
- "ERROR: ERROR log message\n", error.str());
- Logger::Reset();
-}
-
-TEST(Debug, LogIf) {
- Logger::Reset();
- std::ostringstream info;
- std::ostringstream error;
- Logger::SetStreams(&info, &error);
-
- LOG_IF(INFO, true) << "INFO log message";
- LOG_IF(INFO, false) << "INFO log message, SHOULD NOT PRINT";
- LOG_IF(WARNING, true) << "WARNING log message";
- LOG_IF(WARNING, false) << "WARNING log message, SHOULD NOT PRINT";
- LOG_IF(ERROR, true) << "ERROR log message";
- LOG_IF(ERROR, false) << "ERROR log message, SHOULD NOT PRINT";
- LOG_IF(FATAL, false) << "FATAL log message, SHOULD NOT PRINT";
-
- EXPECT_EQ("INFO: INFO log message\n", info.str());
- EXPECT_EQ("WARNING: WARNING log message\n"
- "ERROR: ERROR log message\n", error.str());
- Logger::Reset();
-}
-
-TEST(Debug, Vlog) {
- Logger::Reset();
- std::ostringstream info;
- std::ostringstream error;
- Logger::SetStreams(&info, &error);
-
- VLOG(0) << "VLOG 0 INFO log message, SHOULD NOT PRINT";
- VLOG(1) << "VLOG 1 INFO log message, SHOULD NOT PRINT";
- VLOG(2) << "VLOG 2 INFO log message, SHOULD NOT PRINT";
-
- EXPECT_EQ("", info.str());
- EXPECT_EQ("", error.str());
-
- Logger::SetVerbose(1);
-
- VLOG(0) << "VLOG 0 INFO log message";
- VLOG(1) << "VLOG 1 INFO log message";
- VLOG(2) << "VLOG 2 INFO log message, SHOULD NOT PRINT";
-
- EXPECT_EQ("INFO: VLOG 0 INFO log message\n"
- "INFO: VLOG 1 INFO log message\n", info.str());
- EXPECT_EQ("", error.str());
- Logger::Reset();
-}
-
-TEST(Debug, VlogIf) {
- Logger::Reset();
- std::ostringstream info;
- std::ostringstream error;
- Logger::SetStreams(&info, &error);
-
- VLOG_IF(0, true) << "VLOG 0 INFO log message, SHOULD NOT PRINT";
- VLOG_IF(1, true) << "VLOG 1 INFO log message, SHOULD NOT PRINT";
- VLOG_IF(2, true) << "VLOG 2 INFO log message, SHOULD NOT PRINT";
-
- EXPECT_EQ("", info.str());
- EXPECT_EQ("", error.str());
-
- Logger::SetVerbose(1);
-
- VLOG_IF(0, true) << "VLOG 0 INFO log message";
- VLOG_IF(0, false) << "VLOG 0 INFO log message, SHOULD NOT PRINT";
- VLOG_IF(1, true) << "VLOG 1 INFO log message";
- VLOG_IF(1, false) << "VLOG 1 INFO log message, SHOULD NOT PRINT";
- VLOG_IF(2, true) << "VLOG 2 INFO log message, SHOULD NOT PRINT";
- VLOG_IF(2, false) << "VLOG 2 INFO log message, SHOULD NOT PRINT";
-
- EXPECT_EQ("INFO: VLOG 0 INFO log message\n"
- "INFO: VLOG 1 INFO log message\n", info.str());
- EXPECT_EQ("", error.str());
- Logger::Reset();
-}
-
-TEST(DebugDeathTest, Fatal) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- Logger::Reset();
- EXPECT_DEATH(LOG(FATAL) << "FATAL log message", "FATAL: FATAL log message");
- EXPECT_DEATH(
- LOG_IF(FATAL, true) << "FATAL log message", "FATAL: FATAL log message");
-}
-
-TEST(DebugDeathTest, Check) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- Logger::Reset();
- CHECK(0 == 0);
- EXPECT_DEATH(CHECK(0 == 1), "FATAL: .*:.*: .*: CHECK '0 == 1' failed");
-}
-
-TEST(DebugDeathTest, NotReached) {
- ::testing::FLAGS_gtest_death_test_style = "threadsafe";
- Logger::Reset();
- EXPECT_DEATH(NOTREACHED(), "FATAL: .*:.*: .*: NOTREACHED\\(\\) hit");
-}
-
-} // namespace relocation_packer
diff --git a/tools/relocation_packer/src/delta_encoder.cc b/tools/relocation_packer/src/delta_encoder.cc
deleted file mode 100644
index 8349d7c..0000000
--- a/tools/relocation_packer/src/delta_encoder.cc
+++ /dev/null
@@ -1,307 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "delta_encoder.h"
-
-#include <vector>
-
-#include "debug.h"
-
-static constexpr uint32_t RELOCATION_GROUPED_BY_INFO_FLAG = 1;
-static constexpr uint32_t RELOCATION_GROUPED_BY_OFFSET_DELTA_FLAG = 2;
-static constexpr uint32_t RELOCATION_GROUPED_BY_ADDEND_FLAG = 4;
-static constexpr uint32_t RELOCATION_GROUP_HAS_ADDEND_FLAG = 8;
-
-static bool is_relocation_grouped_by_info(uint64_t flags) {
- return (flags & RELOCATION_GROUPED_BY_INFO_FLAG) != 0;
-}
-
-static bool is_relocation_grouped_by_offset_delta(uint64_t flags) {
- return (flags & RELOCATION_GROUPED_BY_OFFSET_DELTA_FLAG) != 0;
-}
-
-static bool is_relocation_grouped_by_addend(uint64_t flags) {
- return (flags & RELOCATION_GROUPED_BY_ADDEND_FLAG) != 0;
-}
-
-static bool is_relocation_group_has_addend(uint64_t flags) {
- return (flags & RELOCATION_GROUP_HAS_ADDEND_FLAG) != 0;
-}
-
-namespace relocation_packer {
-
-// Encode relocations into a delta encoded (packed) representation.
-template <typename ELF>
-void RelocationDeltaCodec<ELF>::Encode(const std::vector<ElfRela>& relocations,
- std::vector<ElfAddr>* packed) {
- if (relocations.size() == 0)
- return;
-
- // Start with the relocation count, then append groups
- // TODO(dimitry): we might want to move it to DT_ANDROID_RELCOUNT section
- packed->push_back(static_cast<ElfAddr>(relocations.size()));
-
- // lets write starting offset (offset of the first reloc - first delta)
- ElfAddr start_offset = relocations.size() > 1 ?
- relocations[0].r_offset - (relocations[1].r_offset - relocations[0].r_offset) :
- relocations[0].r_offset;
-
- packed->push_back(start_offset);
-
- // this one is used to calculate delta
- ElfAddr previous_addend = 0;
- ElfAddr previous_offset = start_offset;
-
- for (size_t group_start = 0; group_start < relocations.size(); ) {
- ElfAddr group_flags = 0;
- ElfAddr group_offset_delta = 0;
- ElfAddr group_addend = 0;
- ElfAddr group_info = 0;
-
- ElfAddr group_size = 0;
-
- DetectGroup(relocations, group_start, previous_offset, &group_size, &group_flags,
- &group_offset_delta, &group_info, &group_addend);
-
- // write the group header
- packed->push_back(group_size);
- packed->push_back(group_flags);
-
- if (is_relocation_grouped_by_offset_delta(group_flags)) {
- packed->push_back(group_offset_delta);
- }
-
- if (is_relocation_grouped_by_info(group_flags)) {
- packed->push_back(group_info);
- }
-
- if (is_relocation_group_has_addend(group_flags) &&
- is_relocation_grouped_by_addend(group_flags)) {
- packed->push_back(group_addend - previous_addend);
- previous_addend = group_addend;
- }
-
- for (size_t i = 0; i < static_cast<size_t>(group_size); ++i) {
- CHECK((group_start + i) < relocations.size());
- const ElfRela* relocation = &relocations[group_start + i];
-
- if (!is_relocation_grouped_by_offset_delta(group_flags)) {
- packed->push_back(relocation->r_offset - previous_offset);
- }
- previous_offset = relocation->r_offset;
-
- if (!is_relocation_grouped_by_info(group_flags)) {
- packed->push_back(relocation->r_info);
- }
-
- if (is_relocation_group_has_addend(group_flags) &&
- !is_relocation_grouped_by_addend(group_flags)) {
- packed->push_back(relocation->r_addend - previous_addend);
- previous_addend = relocation->r_addend;
- }
- }
-
- // If the relocation group does not have an addend - reset it to 0
- // to simplify addend computation for the group following this one.
- if (!is_relocation_group_has_addend(group_flags)) {
- previous_addend = 0;
- }
-
- group_start += group_size;
- }
-}
-
-// Decode relocations from a delta encoded (packed) representation.
-template <typename ELF>
-void RelocationDeltaCodec<ELF>::Decode(const std::vector<ElfAddr>& packed,
- std::vector<ElfRela>* relocations) {
- if (packed.size() < 5) {
- return;
- }
-
- size_t ndx = 0;
- ElfAddr current_count = 0;
- ElfAddr total_count = packed[ndx++];
-
- ElfAddr offset = packed[ndx++];
- ElfAddr info = 0;
- ElfAddr addend = 0;
-
- while(current_count < total_count) {
- // read group
- ElfAddr group_size = packed[ndx++];
- ElfAddr group_flags = packed[ndx++];
- ElfAddr group_offset_delta = 0;
-
- if (is_relocation_grouped_by_offset_delta(group_flags)) {
- group_offset_delta = packed[ndx++];
- }
-
- if (is_relocation_grouped_by_info(group_flags)) {
- info = packed[ndx++];
- }
-
- if (is_relocation_group_has_addend(group_flags) &&
- is_relocation_grouped_by_addend(group_flags)) {
- addend += packed[ndx++];
- }
-
- // now read not grouped info
- for (ElfAddr i = 0; i<group_size; ++i) {
- if (is_relocation_grouped_by_offset_delta(group_flags)) {
- offset += group_offset_delta;
- } else {
- offset += packed[ndx++];
- }
-
- if (!is_relocation_grouped_by_info(group_flags)) {
- info = packed[ndx++];
- }
-
- if (is_relocation_group_has_addend(group_flags) &&
- !is_relocation_grouped_by_addend(group_flags)) {
- addend += packed[ndx++];
- }
-
- ElfRela reloc;
- reloc.r_offset = offset;
- reloc.r_info = info;
- reloc.r_addend = is_relocation_group_has_addend(group_flags) ? addend : 0;
- relocations->push_back(reloc);
- }
-
- if (!is_relocation_group_has_addend(group_flags)) {
- addend = 0;
- }
-
- current_count += group_size;
- }
-}
-
-// This function detects a way to group reloc_one and reloc_two, sets up group_flags
-// and initializes values for corresponding group_ fields. For example if relocations
-// can be grouped by r_info the function will set group_info variable.
-template <typename ELF>
-void RelocationDeltaCodec<ELF>::DetectGroupFields(const ElfRela& reloc_one,
- const ElfRela& reloc_two,
- ElfAddr current_offset_delta,
- ElfAddr* group_flags,
- ElfAddr* group_offset_delta,
- ElfAddr* group_info,
- ElfAddr* group_addend) {
- *group_flags = 0;
-
- const ElfAddr offset_delta = static_cast<ElfAddr>(reloc_two.r_offset) -
- static_cast<ElfAddr>(reloc_one.r_offset);
-
- if (offset_delta == current_offset_delta) {
- *group_flags |= RELOCATION_GROUPED_BY_OFFSET_DELTA_FLAG;
- if (group_offset_delta != nullptr) {
- *group_offset_delta = current_offset_delta;
- }
- }
-
- if (reloc_one.r_info == reloc_two.r_info) {
- *group_flags |= RELOCATION_GROUPED_BY_INFO_FLAG;
- if (group_info != nullptr) {
- *group_info = reloc_one.r_info;
- }
- }
-
- if (reloc_one.r_addend != 0 || reloc_two.r_addend != 0) {
- *group_flags |= RELOCATION_GROUP_HAS_ADDEND_FLAG;
- if (reloc_one.r_addend == reloc_two.r_addend) {
- *group_flags |= RELOCATION_GROUPED_BY_ADDEND_FLAG;
- if (group_addend != nullptr) {
- *group_addend = reloc_one.r_addend;
- }
- }
- }
-}
-
-// This function is used to detect if there is better group available
-// during RelocationDeltaCodec<ELF>::DetectGroup processing.
-// Current implementation prefers having groups without addend (== zero addend)
-// to any other groups field with the ratio 3:1. This is because addend tends
-// to be more unevenly distributed than other fields.
-static uint32_t group_weight(uint64_t flags) {
- uint32_t weight = 0;
- if (!is_relocation_group_has_addend(flags)) {
- weight += 3;
- } else if (is_relocation_grouped_by_addend(flags)) {
- weight += 1;
- }
-
- if (is_relocation_grouped_by_offset_delta(flags)) {
- weight += 1;
- }
-
- if (is_relocation_grouped_by_info(flags)) {
- weight += 1;
- }
-
- return weight;
-}
-
-template <typename ELF>
-void RelocationDeltaCodec<ELF>::DetectGroup(const std::vector<ElfRela>& relocations,
- size_t group_starts_with, ElfAddr previous_offset,
- ElfAddr* group_size, ElfAddr* group_flags,
- ElfAddr* group_offset_delta, ElfAddr* group_info,
- ElfAddr* group_addend) {
- CHECK(group_starts_with < relocations.size());
- CHECK(group_flags != nullptr);
-
- const ElfRela& reloc_one = relocations[group_starts_with++];
- if (group_starts_with == relocations.size()) {
- *group_flags = reloc_one.r_addend == 0 ? 0 : RELOCATION_GROUP_HAS_ADDEND_FLAG;
- *group_size = 1;
- return;
- }
-
- const ElfAddr offset_delta = reloc_one.r_offset - previous_offset;
-
- // detect group_flags
- DetectGroupFields(reloc_one, relocations[group_starts_with], offset_delta, group_flags,
- group_offset_delta, group_info, group_addend);
-
- if (group_starts_with + 1 == relocations.size()) {
- *group_size = 2;
- return;
- }
-
- ElfAddr cnt = 1;
- for (size_t i = group_starts_with; i < relocations.size() - 1; ++i) {
- ElfAddr candidate_flags;
- // check if next group (reloc_current; reloc_next) has better grouped_by flags
- DetectGroupFields(relocations[i], relocations[i+1], offset_delta, &candidate_flags,
- nullptr, nullptr, nullptr);
-
- if (group_weight(*group_flags) < group_weight(candidate_flags)) {
- break;
- }
- cnt++;
-
- if (candidate_flags != *group_flags) {
- break;
- }
-
- if (i + 1 == relocations.size() - 1) { // last one
- cnt++;
- }
- }
-
- // if as a result of checking candidates we ended up with cnt == 1
- // reset flags to the default state
- if (cnt == 1) {
- *group_flags = reloc_one.r_addend == 0 ? 0 : RELOCATION_GROUP_HAS_ADDEND_FLAG;
- }
-
- *group_size = cnt;
-}
-
-template class RelocationDeltaCodec<ELF32_traits>;
-template class RelocationDeltaCodec<ELF64_traits>;
-
-} // namespace relocation_packer
diff --git a/tools/relocation_packer/src/delta_encoder.h b/tools/relocation_packer/src/delta_encoder.h
deleted file mode 100644
index 46c324c..0000000
--- a/tools/relocation_packer/src/delta_encoder.h
+++ /dev/null
@@ -1,132 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Delta encode and decode REL/RELA section of elf file.
-//
-// The encoded data format is sequence of elements of ElfAddr type (unsigned long):
-//
-// [00] relocation_count - the total count of relocations
-// [01] initial r_offset - this is initial r_offset for the
-// relocation table.
-// followed by group structures:
-// [02] group
-// ...
-// [nn] group
-
-// the generalized format of the group is (! - always present ? - depends on group_flags):
-// --------------
-// ! group_size
-// ! group_flags
-// ? group_r_offset_delta when RELOCATION_GROUPED_BY_OFFSET_DELTA flag is set
-// ? group_r_info when RELOCATION_GROUPED_BY_INFO flag is set
-// ? group_r_addend_group_delta when RELOCATION_GROUP_HAS_ADDEND and RELOCATION_GROUPED_BY_ADDEND
-// flag is set
-//
-// The group description is followed by individual relocations.
-// please note that there is a case when individual relocation
-// section could be empty - that is if every field ends up grouped.
-//
-// The format for individual relocations section is:
-// ? r_offset_delta - when RELOCATION_GROUPED_BY_OFFSET_DELTA is not set
-// ? r_info - when RELOCATION_GROUPED_BY_INFO flag is not set
-// ? r_addend_delta - RELOCATION_GROUP_HAS_ADDEND is set and RELOCATION_GROUPED_BY_ADDEND is not set
-//
-// For example lets pack the following relocations:
-//
-// Relocation section '.rela.dyn' at offset 0xbf58 contains 939 entries:
-// Offset Info Type Symbol's Value Symbol's Name + Addend
-// 00000000000a2178 0000000000000403 R_AARCH64_RELATIVE 177a8
-// 00000000000a2180 0000000000000403 R_AARCH64_RELATIVE 177cc
-// 00000000000a2188 0000000000000403 R_AARCH64_RELATIVE 177e0
-// 00000000000a2190 0000000000000403 R_AARCH64_RELATIVE 177f4
-// 00000000000a2198 0000000000000403 R_AARCH64_RELATIVE 17804
-// 00000000000a21a0 0000000000000403 R_AARCH64_RELATIVE 17818
-// 00000000000a21a8 0000000000000403 R_AARCH64_RELATIVE 1782c
-// 00000000000a21b0 0000000000000403 R_AARCH64_RELATIVE 17840
-// 00000000000a21b8 0000000000000403 R_AARCH64_RELATIVE 17854
-// 00000000000a21c0 0000000000000403 R_AARCH64_RELATIVE 17868
-// 00000000000a21c8 0000000000000403 R_AARCH64_RELATIVE 1787c
-// 00000000000a21d0 0000000000000403 R_AARCH64_RELATIVE 17890
-// 00000000000a21d8 0000000000000403 R_AARCH64_RELATIVE 178a4
-// 00000000000a21e8 0000000000000403 R_AARCH64_RELATIVE 178b8
-//
-// The header is going to be
-// [00] 14 <- count
-// [01] 0x00000000000a2170 <- initial relocation (first relocation - delta,
-// the delta is 8 in this case)
-// -- starting the first and only group
-// [03] 14 <- group size
-// [03] 0xb <- flags RELOCATION_GROUP_HAS_ADDEND | RELOCATION_GROUPED_BY_OFFSET_DELTA
-// | RELOCATION_GROUPED_BY_INFO
-// [04] 8 <- offset delta
-// [05] 0x403 <- r_info
-// -- end of group definition, starting list of r_addend deltas
-// [06] 0x177a8
-// [07] 0x24 = 177cc - 177a8
-// [08] 0x14 = 177e0 - 177cc
-// [09] 0x14 = 177f4 - 177e0
-// [10] 0x10 = 17804 - 177f4
-// [11] 0x14 = 17818 - 17804
-// [12] 0x14 = 1782c - 17818
-// [13] 0x14 = 17840 - 1782c
-// [14] 0x14 = 17854 - 17840
-// [15] 0x14 = 17868 - 17854
-// [16] 0x14 = 1787c - 17868
-// [17] 0x14 = 17890 - 1787c
-// [18] 0x14 = 178a4 - 17890
-// [19] 0x14 = 178b8 - 178a4
-// -- the end.
-
-// TODO (dimitry): consider using r_addend_group_delta in the way we use group offset delta, it can
-// save us more bytes...
-
-// The input ends when sum(group_size) == relocation_count
-
-#ifndef TOOLS_RELOCATION_PACKER_SRC_DELTA_ENCODER_H_
-#define TOOLS_RELOCATION_PACKER_SRC_DELTA_ENCODER_H_
-
-#include <vector>
-
-#include "elf.h"
-#include "elf_traits.h"
-
-namespace relocation_packer {
-
-// A RelocationDeltaCodec packs vectors of relative relocations with
-// addends into more compact forms, and unpacks them to reproduce the
-// pre-packed data.
-template <typename ELF>
-class RelocationDeltaCodec {
- public:
- typedef typename ELF::Addr ElfAddr;
- typedef typename ELF::Rela ElfRela;
-
- // Encode relocations with addends into a more compact form.
- // |relocations| is a vector of relative relocation with addend structs.
- // |packed| is the vector of packed words into which relocations are packed.
- static void Encode(const std::vector<ElfRela>& relocations,
- std::vector<ElfAddr>* packed);
-
- // Decode relative relocations with addends from their more compact form.
- // |packed| is the vector of packed relocations.
- // |relocations| is a vector of unpacked relative relocations.
- static void Decode(const std::vector<ElfAddr>& packed,
- std::vector<ElfRela>* relocations);
-
- private:
- static void DetectGroup(const std::vector<ElfRela>& relocations,
- size_t group_starts_with, ElfAddr previous_offset,
- ElfAddr* group_size, ElfAddr* group_flags,
- ElfAddr* group_offset_delta, ElfAddr* group_info,
- ElfAddr* group_addend);
-
- static void DetectGroupFields(const ElfRela& reloc_one, const ElfRela& reloc_two,
- ElfAddr current_offset_delta, ElfAddr* group_flags,
- ElfAddr* group_offset_delta, ElfAddr* group_info,
- ElfAddr* group_addend);
-};
-
-} // namespace relocation_packer
-
-#endif // TOOLS_RELOCATION_PACKER_SRC_DELTA_ENCODER_H_
diff --git a/tools/relocation_packer/src/delta_encoder_unittest.cc b/tools/relocation_packer/src/delta_encoder_unittest.cc
deleted file mode 100644
index 06d9c96..0000000
--- a/tools/relocation_packer/src/delta_encoder_unittest.cc
+++ /dev/null
@@ -1,223 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "delta_encoder.h"
-
-#include <vector>
-#include "elf.h"
-#include "gtest/gtest.h"
-
-namespace {
-
-template <typename T>
-void AddRelocation(uint32_t addr,
- uint32_t info,
- int32_t addend,
- std::vector<T>* relocations) {
- T relocation;
- relocation.r_offset = addr;
- relocation.r_info = info;
- relocation.r_addend = addend;
- relocations->push_back(relocation);
-}
-
-template <typename T>
-bool CheckRelocation(uint32_t addr,
- uint32_t info,
- int32_t addend,
- const T& relocation) {
- return relocation.r_offset == addr &&
- relocation.r_info == info &&
- relocation.r_addend == addend;
-}
-
-} // namespace
-
-namespace relocation_packer {
-
-template <typename ELF>
-static void encode() {
- std::vector<typename ELF::Rela> relocations;
- std::vector<typename ELF::Addr> packed;
-
- RelocationDeltaCodec<ELF> codec;
-
- codec.Encode(relocations, &packed);
-
- ASSERT_EQ(0U, packed.size());
-
- // Initial relocation.
- AddRelocation(0xf00d0000, 11U, 10000, &relocations);
-
- codec.Encode(relocations, &packed);
-
- // size of reloc table, size of group, flags, 3 fields, zero
- EXPECT_EQ(7U, packed.size());
- // One pair present.
- size_t ndx = 0;
- EXPECT_EQ(1U, packed[ndx++]);
- EXPECT_EQ(0xf00d0000, packed[ndx++]);
- EXPECT_EQ(1U, packed[ndx++]); // group_size
- EXPECT_EQ(8U, packed[ndx++]); // flags
- // Delta from the neutral element is zero
- EXPECT_EQ(0U, packed[ndx++]); // offset_delta
- EXPECT_EQ(11U, packed[ndx++]); // info
- EXPECT_EQ(10000U, packed[ndx++]); // addend_delta
-
- // Add a second relocation, 4 byte offset delta, 12 byte addend delta.
- // same info
- AddRelocation(0xf00d0004, 11U, 10012, &relocations);
-
- packed.clear();
- codec.Encode(relocations, &packed);
-
- ndx = 0;
- EXPECT_EQ(8U, packed.size());
-
- EXPECT_EQ(2U, packed[ndx++]); // relocs count
- EXPECT_EQ(0xf00cfffc, packed[ndx++]); // initial offset
- EXPECT_EQ(2U, packed[ndx++]); // group count
- EXPECT_EQ(11U, packed[ndx++]); // flags
- EXPECT_EQ(4U, packed[ndx++]); // group offset delta
- EXPECT_EQ(11U, packed[ndx++]); // info
-
- EXPECT_EQ(10000U, packed[ndx++]); // addend delta
- EXPECT_EQ(12U, packed[ndx++]); // addend delta
-
- // Add a third relocation, 4 byte offset delta, 12 byte addend delta.
- // different info
- AddRelocation(0xf00d0008, 41U, 10024, &relocations);
-
- // Add three more relocations, 8 byte offset deltas, -24 byte addend deltas.
- AddRelocation(0xf00d0010, 42U, 10000, &relocations);
- AddRelocation(0xf00d0018, 42U, 9976, &relocations);
- AddRelocation(0xf00d0020, 42U, 9952, &relocations);
-
- AddRelocation(0xf00d2028, 1042U, 0, &relocations);
- AddRelocation(0xf00d2030, 3442U, 0, &relocations);
-
- packed.clear();
- codec.Encode(relocations, &packed);
-
- ndx = 0;
- EXPECT_EQ(26U, packed.size());
- // Total number of relocs
- EXPECT_EQ(8U, packed[ndx++]);
- EXPECT_EQ(0xf00cfffc, packed[ndx++]);
- // 2 in first group
- EXPECT_EQ(2U, packed[ndx++]);
- EXPECT_EQ(11U, packed[ndx++]); //flags
- EXPECT_EQ(4U, packed[ndx++]); // group offset delta
- EXPECT_EQ(11U, packed[ndx++]); // info
-
- // Initial relocation.
- EXPECT_EQ(10000U, packed[ndx++]); // addend delta
- // Two relocations, 4 byte offset deltas, 12 byte addend deltas.
- EXPECT_EQ(12U, packed[ndx++]); // addend delta
-
- // second group has only one reloc
- EXPECT_EQ(1U, packed[ndx++]); // count
- EXPECT_EQ(8U, packed[ndx++]); // flags
-
- EXPECT_EQ(4U, packed[ndx++]); // offset delta
- EXPECT_EQ(41U, packed[ndx++]); // info
- EXPECT_EQ(12U, packed[ndx++]); // addend delta
-
- // next - 3 relocs grouped by info
- EXPECT_EQ(3U, packed[ndx++]); // count
- EXPECT_EQ(11U, packed[ndx++]); // flags
- EXPECT_EQ(8U, packed[ndx++]); // group offset delta
- EXPECT_EQ(42U, packed[ndx++]); // info
- // Three relocations, 8 byte offset deltas, -24 byte addend deltas.
- EXPECT_EQ(static_cast<typename ELF::Addr>(-24), packed[ndx++]);
- EXPECT_EQ(static_cast<typename ELF::Addr>(-24), packed[ndx++]);
- EXPECT_EQ(static_cast<typename ELF::Addr>(-24), packed[ndx++]);
-
- // and last - 2 relocations without addend
- EXPECT_EQ(2U, packed[ndx++]);
- EXPECT_EQ(0U, packed[ndx++]); // flags
- // offset_deltas and r_infos for next 2 relocations
- EXPECT_EQ(0x2008U, packed[ndx++]); // offset delta
- EXPECT_EQ(1042U, packed[ndx++]); // r_info
- EXPECT_EQ(0x8U, packed[ndx++]); // offset delta
- EXPECT_EQ(3442U, packed[ndx++]); // r_info
-
- EXPECT_EQ(packed.size(), ndx);
-}
-
-TEST(Delta, Encode32) {
- encode<ELF32_traits>();
-}
-
-TEST(Delta, Encode64) {
- encode<ELF64_traits>();
-}
-
-template <typename ELF>
-static void decode() {
- std::vector<typename ELF::Addr> packed;
- std::vector<typename ELF::Rela> relocations;
-
- RelocationDeltaCodec<ELF> codec;
- codec.Decode(packed, &relocations);
-
- EXPECT_EQ(0U, relocations.size());
-
- // Six pairs.
- packed.push_back(6U); // count
- packed.push_back(0xc0ddfffc); // base offset
- packed.push_back(3U); // group count
- packed.push_back(11U); // flags
- packed.push_back(4U); // offset delta
- packed.push_back(11U); // info
- // Initial relocation.
- packed.push_back(10000U);
- // Two relocations, 4 byte offset deltas, 12 byte addend deltas.
- packed.push_back(12U); // addend
- packed.push_back(12U); // addend
-
- // Three relocations, 8 byte offset deltas, -24 byte addend deltas.
- packed.push_back(1U); // group count
- packed.push_back(9U); // flags
- packed.push_back(11U); // info
-
- packed.push_back(8U);
- packed.push_back(static_cast<typename ELF::Addr>(-24));
- // next group with 2 relocs
- packed.push_back(2U); // group count
- packed.push_back(11U); // flags
- packed.push_back(8U); // offset
- packed.push_back(42U); // info
-
- packed.push_back(static_cast<typename ELF::Addr>(-24)); // addend
- packed.push_back(static_cast<typename ELF::Addr>(-24)); // addend
-
- relocations.clear();
- codec.Decode(packed, &relocations);
-
- EXPECT_EQ(6U, relocations.size());
- // Initial relocation.
- EXPECT_TRUE(CheckRelocation(0xc0de0000, 11U, 10000, relocations[0]));
- // Two relocations, 4 byte offset deltas, 12 byte addend deltas.
- EXPECT_TRUE(CheckRelocation(0xc0de0004, 11U, 10012, relocations[1]));
- EXPECT_TRUE(CheckRelocation(0xc0de0008, 11U, 10024, relocations[2]));
- // Three relocations, 8 byte offset deltas, -24 byte addend deltas.
- EXPECT_TRUE(CheckRelocation(0xc0de0010, 11U, 10000, relocations[3]));
- EXPECT_TRUE(CheckRelocation(0xc0de0018, 42U, 9976, relocations[4]));
- EXPECT_TRUE(CheckRelocation(0xc0de0020, 42U, 9952, relocations[5]));
-}
-
-TEST(Delta, Decode32) {
- decode<ELF32_traits>();
-}
-
-TEST(Delta, Decode64) {
- decode<ELF64_traits>();
-}
-
-// TODO (dimitry): add more tests (fix by 19 January 2038 03:14:07 UTC)
-// TODO (dimtiry): 1. Incorrect packed array for decode
-// TODO (dimtiry): 2. Try to catch situation where it is likely to get series of groups with size 1
-
-} // namespace relocation_packer
diff --git a/tools/relocation_packer/src/elf_file.cc b/tools/relocation_packer/src/elf_file.cc
deleted file mode 100644
index 275e486..0000000
--- a/tools/relocation_packer/src/elf_file.cc
+++ /dev/null
@@ -1,1001 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Implementation notes:
-//
-// We need to remove a piece from the ELF shared library. However, we also
-// want to avoid fixing DWARF cfi data and relative relocation addresses.
-// So after packing we shift offets and starting address of the RX segment
-// while preserving code/data vaddrs location.
-// This requires some fixups for symtab/hash/gnu_hash dynamic section addresses.
-
-#include "elf_file.h"
-
-#include <stdlib.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <algorithm>
-#include <string>
-#include <vector>
-
-#include "debug.h"
-#include "elf_traits.h"
-#include "libelf.h"
-#include "packer.h"
-
-namespace relocation_packer {
-
-// Out-of-band dynamic tags used to indicate the offset and size of the
-// android packed relocations section.
-static constexpr int32_t DT_ANDROID_REL = DT_LOOS + 2;
-static constexpr int32_t DT_ANDROID_RELSZ = DT_LOOS + 3;
-
-static constexpr int32_t DT_ANDROID_RELA = DT_LOOS + 4;
-static constexpr int32_t DT_ANDROID_RELASZ = DT_LOOS + 5;
-
-static constexpr uint32_t SHT_ANDROID_REL = SHT_LOOS + 1;
-static constexpr uint32_t SHT_ANDROID_RELA = SHT_LOOS + 2;
-
-static const size_t kPageSize = 4096;
-
-// Alignment to preserve, in bytes. This must be at least as large as the
-// largest d_align and sh_addralign values found in the loaded file.
-// Out of caution for RELRO page alignment, we preserve to a complete target
-// page. See http://www.airs.com/blog/archives/189.
-static const size_t kPreserveAlignment = kPageSize;
-
-// Get section data. Checks that the section has exactly one data entry,
-// so that the section size and the data size are the same. True in
-// practice for all sections we resize when packing or unpacking. Done
-// by ensuring that a call to elf_getdata(section, data) returns NULL as
-// the next data entry.
-static Elf_Data* GetSectionData(Elf_Scn* section) {
- Elf_Data* data = elf_getdata(section, NULL);
- CHECK(data && elf_getdata(section, data) == NULL);
- return data;
-}
-
-// Rewrite section data. Allocates new data and makes it the data element's
-// buffer. Relies on program exit to free allocated data.
-static void RewriteSectionData(Elf_Scn* section,
- const void* section_data,
- size_t size) {
- Elf_Data* data = GetSectionData(section);
- CHECK(size == data->d_size);
- uint8_t* area = new uint8_t[size];
- memcpy(area, section_data, size);
- data->d_buf = area;
-}
-
-// Verbose ELF header logging.
-template <typename Ehdr>
-static void VerboseLogElfHeader(const Ehdr* elf_header) {
- VLOG(1) << "e_phoff = " << elf_header->e_phoff;
- VLOG(1) << "e_shoff = " << elf_header->e_shoff;
- VLOG(1) << "e_ehsize = " << elf_header->e_ehsize;
- VLOG(1) << "e_phentsize = " << elf_header->e_phentsize;
- VLOG(1) << "e_phnum = " << elf_header->e_phnum;
- VLOG(1) << "e_shnum = " << elf_header->e_shnum;
- VLOG(1) << "e_shstrndx = " << elf_header->e_shstrndx;
-}
-
-// Verbose ELF program header logging.
-template <typename Phdr>
-static void VerboseLogProgramHeader(size_t program_header_index,
- const Phdr* program_header) {
- std::string type;
- switch (program_header->p_type) {
- case PT_NULL: type = "NULL"; break;
- case PT_LOAD: type = "LOAD"; break;
- case PT_DYNAMIC: type = "DYNAMIC"; break;
- case PT_INTERP: type = "INTERP"; break;
- case PT_PHDR: type = "PHDR"; break;
- case PT_GNU_RELRO: type = "GNU_RELRO"; break;
- case PT_GNU_STACK: type = "GNU_STACK"; break;
- case PT_ARM_EXIDX: type = "EXIDX"; break;
- default: type = "(OTHER)"; break;
- }
- VLOG(1) << "phdr[" << program_header_index << "] : " << type;
- VLOG(1) << " p_offset = " << program_header->p_offset;
- VLOG(1) << " p_vaddr = " << program_header->p_vaddr;
- VLOG(1) << " p_paddr = " << program_header->p_paddr;
- VLOG(1) << " p_filesz = " << program_header->p_filesz;
- VLOG(1) << " p_memsz = " << program_header->p_memsz;
- VLOG(1) << " p_flags = " << program_header->p_flags;
- VLOG(1) << " p_align = " << program_header->p_align;
-}
-
-// Verbose ELF section header logging.
-template <typename Shdr>
-static void VerboseLogSectionHeader(const std::string& section_name,
- const Shdr* section_header) {
- VLOG(1) << "section " << section_name;
- VLOG(1) << " sh_addr = " << section_header->sh_addr;
- VLOG(1) << " sh_offset = " << section_header->sh_offset;
- VLOG(1) << " sh_size = " << section_header->sh_size;
- VLOG(1) << " sh_entsize = " << section_header->sh_entsize;
- VLOG(1) << " sh_addralign = " << section_header->sh_addralign;
-}
-
-// Verbose ELF section data logging.
-static void VerboseLogSectionData(const Elf_Data* data) {
- VLOG(1) << " data";
- VLOG(1) << " d_buf = " << data->d_buf;
- VLOG(1) << " d_off = " << data->d_off;
- VLOG(1) << " d_size = " << data->d_size;
- VLOG(1) << " d_align = " << data->d_align;
-}
-
-// Load the complete ELF file into a memory image in libelf, and identify
-// the .rel.dyn or .rela.dyn, .dynamic, and .android.rel.dyn or
-// .android.rela.dyn sections. No-op if the ELF file has already been loaded.
-template <typename ELF>
-bool ElfFile<ELF>::Load() {
- if (elf_)
- return true;
-
- Elf* elf = elf_begin(fd_, ELF_C_RDWR, NULL);
- CHECK(elf);
-
- if (elf_kind(elf) != ELF_K_ELF) {
- LOG(ERROR) << "File not in ELF format";
- return false;
- }
-
- auto elf_header = ELF::getehdr(elf);
- if (!elf_header) {
- LOG(ERROR) << "Failed to load ELF header: " << elf_errmsg(elf_errno());
- return false;
- }
-
- if (elf_header->e_type != ET_DYN) {
- LOG(ERROR) << "ELF file is not a shared object";
- return false;
- }
-
- // Require that our endianness matches that of the target, and that both
- // are little-endian. Safe for all current build/target combinations.
- const int endian = elf_header->e_ident[EI_DATA];
- CHECK(endian == ELFDATA2LSB);
- CHECK(__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__);
-
- const int file_class = elf_header->e_ident[EI_CLASS];
- VLOG(1) << "endian = " << endian << ", file class = " << file_class;
- VerboseLogElfHeader(elf_header);
-
- auto elf_program_header = ELF::getphdr(elf);
- CHECK(elf_program_header != nullptr);
-
- const typename ELF::Phdr* dynamic_program_header = NULL;
- for (size_t i = 0; i < elf_header->e_phnum; ++i) {
- auto program_header = &elf_program_header[i];
- VerboseLogProgramHeader(i, program_header);
-
- if (program_header->p_type == PT_DYNAMIC) {
- CHECK(dynamic_program_header == NULL);
- dynamic_program_header = program_header;
- }
- }
- CHECK(dynamic_program_header != nullptr);
-
- size_t string_index;
- elf_getshdrstrndx(elf, &string_index);
-
- // Notes of the dynamic relocations, packed relocations, and .dynamic
- // sections. Found while iterating sections, and later stored in class
- // attributes.
- Elf_Scn* found_relocations_section = nullptr;
- Elf_Scn* found_dynamic_section = nullptr;
-
- // Notes of relocation section types seen. We require one or the other of
- // these; both is unsupported.
- bool has_rel_relocations = false;
- bool has_rela_relocations = false;
- bool has_android_relocations = false;
-
- Elf_Scn* section = NULL;
- while ((section = elf_nextscn(elf, section)) != nullptr) {
- auto section_header = ELF::getshdr(section);
- std::string name = elf_strptr(elf, string_index, section_header->sh_name);
- VerboseLogSectionHeader(name, section_header);
-
- // Note relocation section types.
- if (section_header->sh_type == SHT_REL || section_header->sh_type == SHT_ANDROID_REL) {
- has_rel_relocations = true;
- }
- if (section_header->sh_type == SHT_RELA || section_header->sh_type == SHT_ANDROID_RELA) {
- has_rela_relocations = true;
- }
-
- // Note special sections as we encounter them.
- if ((name == ".rel.dyn" || name == ".rela.dyn") &&
- section_header->sh_size > 0) {
- found_relocations_section = section;
-
- // Note if relocation section is already packed
- has_android_relocations =
- section_header->sh_type == SHT_ANDROID_REL ||
- section_header->sh_type == SHT_ANDROID_RELA;
- }
-
- if (section_header->sh_offset == dynamic_program_header->p_offset) {
- found_dynamic_section = section;
- }
-
- // Ensure we preserve alignment, repeated later for the data block(s).
- CHECK(section_header->sh_addralign <= kPreserveAlignment);
-
- Elf_Data* data = NULL;
- while ((data = elf_getdata(section, data)) != NULL) {
- CHECK(data->d_align <= kPreserveAlignment);
- VerboseLogSectionData(data);
- }
- }
-
- // Loading failed if we did not find the required special sections.
- if (!found_dynamic_section) {
- LOG(ERROR) << "Missing .dynamic section";
- return false;
- }
-
- if (found_relocations_section != nullptr) {
- // Loading failed if we could not identify the relocations type.
- if (!has_rel_relocations && !has_rela_relocations) {
- LOG(ERROR) << "No relocations sections found";
- return false;
- }
- if (has_rel_relocations && has_rela_relocations) {
- LOG(ERROR) << "Multiple relocations sections with different types found, "
- << "not currently supported";
- return false;
- }
- }
-
- elf_ = elf;
- relocations_section_ = found_relocations_section;
- dynamic_section_ = found_dynamic_section;
- relocations_type_ = has_rel_relocations ? REL : RELA;
- has_android_relocations_ = has_android_relocations;
- return true;
-}
-
-// Helper for ResizeSection(). Adjust the main ELF header for the hole.
-template <typename ELF>
-static void AdjustElfHeaderForHole(typename ELF::Ehdr* elf_header,
- typename ELF::Off hole_start,
- ssize_t hole_size) {
- if (elf_header->e_phoff > hole_start) {
- elf_header->e_phoff += hole_size;
- VLOG(1) << "e_phoff adjusted to " << elf_header->e_phoff;
- }
- if (elf_header->e_shoff > hole_start) {
- elf_header->e_shoff += hole_size;
- VLOG(1) << "e_shoff adjusted to " << elf_header->e_shoff;
- }
-}
-
-// Helper for ResizeSection(). Adjust all section headers for the hole.
-template <typename ELF>
-static void AdjustSectionHeadersForHole(Elf* elf,
- typename ELF::Off hole_start,
- ssize_t hole_size) {
- size_t string_index;
- elf_getshdrstrndx(elf, &string_index);
-
- Elf_Scn* section = NULL;
- while ((section = elf_nextscn(elf, section)) != NULL) {
- auto section_header = ELF::getshdr(section);
- std::string name = elf_strptr(elf, string_index, section_header->sh_name);
-
- if (section_header->sh_offset > hole_start) {
- section_header->sh_offset += hole_size;
- VLOG(1) << "section " << name
- << " sh_offset adjusted to " << section_header->sh_offset;
- } else {
- section_header->sh_addr -= hole_size;
- VLOG(1) << "section " << name
- << " sh_addr adjusted to " << section_header->sh_addr;
- }
- }
-}
-
-// Helpers for ResizeSection(). On packing, reduce p_align for LOAD segments
-// to 4kb if larger. On unpacking, restore p_align for LOAD segments if
-// packing reduced it to 4kb. Return true if p_align was changed.
-template <typename ELF>
-static bool ClampLoadSegmentAlignment(typename ELF::Phdr* program_header) {
- CHECK(program_header->p_type == PT_LOAD);
-
- // If large, reduce p_align for a LOAD segment to page size on packing.
- if (program_header->p_align > kPageSize) {
- program_header->p_align = kPageSize;
- return true;
- }
- return false;
-}
-
-template <typename ELF>
-static bool RestoreLoadSegmentAlignment(typename ELF::Phdr* program_headers,
- size_t count,
- typename ELF::Phdr* program_header) {
- CHECK(program_header->p_type == PT_LOAD);
-
- // If p_align was reduced on packing, restore it to its previous value
- // on unpacking. We do this by searching for a different LOAD segment
- // and setting p_align to that of the other LOAD segment found.
- //
- // Relies on the following observations:
- // - a packable ELF executable has more than one LOAD segment;
- // - before packing all LOAD segments have the same p_align;
- // - on packing we reduce only one LOAD segment's p_align.
- if (program_header->p_align == kPageSize) {
- for (size_t i = 0; i < count; ++i) {
- typename ELF::Phdr* other_header = &program_headers[i];
- if (other_header->p_type == PT_LOAD && other_header != program_header) {
- program_header->p_align = other_header->p_align;
- return true;
- }
- }
- LOG(WARNING) << "Cannot find a LOAD segment from which to restore p_align";
- }
- return false;
-}
-
-template <typename ELF>
-static bool AdjustLoadSegmentAlignment(typename ELF::Phdr* program_headers,
- size_t count,
- typename ELF::Phdr* program_header,
- ssize_t hole_size) {
- CHECK(program_header->p_type == PT_LOAD);
-
- bool status = false;
- if (hole_size < 0) {
- status = ClampLoadSegmentAlignment<ELF>(program_header);
- } else if (hole_size > 0) {
- status = RestoreLoadSegmentAlignment<ELF>(program_headers,
- count,
- program_header);
- }
- return status;
-}
-
-// Helper for ResizeSection(). Adjust the offsets of any program headers
-// that have offsets currently beyond the hole start, and adjust the
-// virtual and physical addrs (and perhaps alignment) of the others.
-template <typename ELF>
-static void AdjustProgramHeaderFields(typename ELF::Phdr* program_headers,
- size_t count,
- typename ELF::Off hole_start,
- ssize_t hole_size) {
- int alignment_changes = 0;
- for (size_t i = 0; i < count; ++i) {
- typename ELF::Phdr* program_header = &program_headers[i];
-
- // Do not adjust PT_GNU_STACK - it confuses gdb and results
- // in incorrect unwinding if the executable is stripped after
- // packing.
- if (program_header->p_type == PT_GNU_STACK) {
- continue;
- }
-
- if (program_header->p_offset > hole_start) {
- // The hole start is past this segment, so adjust offset.
- program_header->p_offset += hole_size;
- VLOG(1) << "phdr[" << i
- << "] p_offset adjusted to "<< program_header->p_offset;
- } else {
- program_header->p_vaddr -= hole_size;
- program_header->p_paddr -= hole_size;
-
- // If packing, clamp LOAD segment alignment to 4kb to prevent strip
- // from adjusting it unnecessarily if run on a packed file. If
- // unpacking, attempt to restore a reduced alignment to its previous
- // value. Ensure that we do this on at most one LOAD segment.
- if (program_header->p_type == PT_LOAD) {
- alignment_changes += AdjustLoadSegmentAlignment<ELF>(program_headers,
- count,
- program_header,
- hole_size);
- LOG_IF(FATAL, alignment_changes > 1)
- << "Changed p_align on more than one LOAD segment";
- }
-
- VLOG(1) << "phdr[" << i
- << "] p_vaddr adjusted to "<< program_header->p_vaddr
- << "; p_paddr adjusted to "<< program_header->p_paddr
- << "; p_align adjusted to "<< program_header->p_align;
- }
- }
-}
-
-// Helper for ResizeSection(). Find the first loadable segment in the
-// file. We expect it to map from file offset zero.
-template <typename ELF>
-static typename ELF::Phdr* FindLoadSegmentForHole(typename ELF::Phdr* program_headers,
- size_t count,
- typename ELF::Off hole_start) {
- for (size_t i = 0; i < count; ++i) {
- typename ELF::Phdr* program_header = &program_headers[i];
-
- if (program_header->p_type == PT_LOAD &&
- program_header->p_offset <= hole_start &&
- (program_header->p_offset + program_header->p_filesz) >= hole_start ) {
- return program_header;
- }
- }
- LOG(FATAL) << "Cannot locate a LOAD segment with hole_start=0x" << std::hex << hole_start;
- NOTREACHED();
-
- return nullptr;
-}
-
-// Helper for ResizeSection(). Rewrite program headers.
-template <typename ELF>
-static void RewriteProgramHeadersForHole(Elf* elf,
- typename ELF::Off hole_start,
- ssize_t hole_size) {
- const typename ELF::Ehdr* elf_header = ELF::getehdr(elf);
- CHECK(elf_header);
-
- typename ELF::Phdr* elf_program_header = ELF::getphdr(elf);
- CHECK(elf_program_header);
-
- const size_t program_header_count = elf_header->e_phnum;
-
- // Locate the segment that we can overwrite to form the new LOAD entry,
- // and the segment that we are going to split into two parts.
- typename ELF::Phdr* target_load_header =
- FindLoadSegmentForHole<ELF>(elf_program_header, program_header_count, hole_start);
-
- VLOG(1) << "phdr[" << target_load_header - elf_program_header << "] adjust";
- // Adjust PT_LOAD program header memsz and filesz
- target_load_header->p_filesz += hole_size;
- target_load_header->p_memsz += hole_size;
-
- // Adjust the offsets and p_vaddrs
- AdjustProgramHeaderFields<ELF>(elf_program_header,
- program_header_count,
- hole_start,
- hole_size);
-}
-
-// Helper for ResizeSection(). Locate and return the dynamic section.
-template <typename ELF>
-static Elf_Scn* GetDynamicSection(Elf* elf) {
- const typename ELF::Ehdr* elf_header = ELF::getehdr(elf);
- CHECK(elf_header);
-
- const typename ELF::Phdr* elf_program_header = ELF::getphdr(elf);
- CHECK(elf_program_header);
-
- // Find the program header that describes the dynamic section.
- const typename ELF::Phdr* dynamic_program_header = NULL;
- for (size_t i = 0; i < elf_header->e_phnum; ++i) {
- const typename ELF::Phdr* program_header = &elf_program_header[i];
-
- if (program_header->p_type == PT_DYNAMIC) {
- dynamic_program_header = program_header;
- }
- }
- CHECK(dynamic_program_header);
-
- // Now find the section with the same offset as this program header.
- Elf_Scn* dynamic_section = NULL;
- Elf_Scn* section = NULL;
- while ((section = elf_nextscn(elf, section)) != NULL) {
- typename ELF::Shdr* section_header = ELF::getshdr(section);
-
- if (section_header->sh_offset == dynamic_program_header->p_offset) {
- dynamic_section = section;
- }
- }
- CHECK(dynamic_section != NULL);
-
- return dynamic_section;
-}
-
-// Helper for ResizeSection(). Adjust the .dynamic section for the hole.
-template <typename ELF>
-void ElfFile<ELF>::AdjustDynamicSectionForHole(Elf_Scn* dynamic_section,
- typename ELF::Off hole_start,
- ssize_t hole_size,
- relocations_type_t relocations_type) {
- CHECK(relocations_type != NONE);
- Elf_Data* data = GetSectionData(dynamic_section);
-
- auto dynamic_base = reinterpret_cast<typename ELF::Dyn*>(data->d_buf);
- std::vector<typename ELF::Dyn> dynamics(
- dynamic_base,
- dynamic_base + data->d_size / sizeof(dynamics[0]));
-
- if (hole_size > 0) { // expanding
- hole_start += hole_size;
- }
-
- for (size_t i = 0; i < dynamics.size(); ++i) {
- typename ELF::Dyn* dynamic = &dynamics[i];
- const typename ELF::Sword tag = dynamic->d_tag;
-
- // Any tags that hold offsets are adjustment candidates.
- const bool is_adjustable = (tag == DT_PLTGOT ||
- tag == DT_HASH ||
- tag == DT_GNU_HASH ||
- tag == DT_STRTAB ||
- tag == DT_SYMTAB ||
- tag == DT_RELA ||
- tag == DT_INIT ||
- tag == DT_FINI ||
- tag == DT_REL ||
- tag == DT_JMPREL ||
- tag == DT_INIT_ARRAY ||
- tag == DT_FINI_ARRAY ||
- tag == DT_VERSYM ||
- tag == DT_VERNEED ||
- tag == DT_VERDEF ||
- tag == DT_ANDROID_REL||
- tag == DT_ANDROID_RELA);
-
- if (is_adjustable && dynamic->d_un.d_ptr <= hole_start) {
- dynamic->d_un.d_ptr -= hole_size;
- VLOG(1) << "dynamic[" << i << "] " << dynamic->d_tag
- << " d_ptr adjusted to " << dynamic->d_un.d_ptr;
- }
-
- // DT_RELSZ or DT_RELASZ indicate the overall size of relocations.
- // Only one will be present. Adjust by hole size.
- if (tag == DT_RELSZ || tag == DT_RELASZ || tag == DT_ANDROID_RELSZ || tag == DT_ANDROID_RELASZ) {
- dynamic->d_un.d_val += hole_size;
- VLOG(1) << "dynamic[" << i << "] " << dynamic->d_tag
- << " d_val adjusted to " << dynamic->d_un.d_val;
- }
-
- // Special case: DT_MIPS_RLD_MAP_REL stores the difference between dynamic
- // entry address and the address of the _r_debug (used by GDB)
- // since the dynamic section and target address are on the
- // different sides of the hole it needs to be adjusted accordingly
- if (tag == DT_MIPS_RLD_MAP_REL) {
- dynamic->d_un.d_val += hole_size;
- VLOG(1) << "dynamic[" << i << "] " << dynamic->d_tag
- << " d_val adjusted to " << dynamic->d_un.d_val;
- }
-
- // Ignore DT_RELCOUNT and DT_RELACOUNT: (1) nobody uses them and
- // technically (2) the relative relocation count is not changed.
-
- // DT_RELENT and DT_RELAENT don't change, ignore them as well.
- }
-
- void* section_data = &dynamics[0];
- size_t bytes = dynamics.size() * sizeof(dynamics[0]);
- RewriteSectionData(dynamic_section, section_data, bytes);
-}
-
-// Resize a section. If the new size is larger than the current size, open
-// up a hole by increasing file offsets that come after the hole. If smaller
-// than the current size, remove the hole by decreasing those offsets.
-template <typename ELF>
-void ElfFile<ELF>::ResizeSection(Elf* elf, Elf_Scn* section, size_t new_size,
- typename ELF::Word new_sh_type,
- relocations_type_t relocations_type) {
-
- size_t string_index;
- elf_getshdrstrndx(elf, &string_index);
- auto section_header = ELF::getshdr(section);
- std::string name = elf_strptr(elf, string_index, section_header->sh_name);
-
- if (section_header->sh_size == new_size) {
- return;
- }
-
- // Require that the section size and the data size are the same. True
- // in practice for all sections we resize when packing or unpacking.
- Elf_Data* data = GetSectionData(section);
- CHECK(data->d_off == 0 && data->d_size == section_header->sh_size);
-
- // Require that the section is not zero-length (that is, has allocated
- // data that we can validly expand).
- CHECK(data->d_size && data->d_buf);
-
- const auto hole_start = section_header->sh_offset;
- const ssize_t hole_size = new_size - data->d_size;
-
- VLOG_IF(1, (hole_size > 0)) << "expand section (" << name << ") size: " <<
- data->d_size << " -> " << (data->d_size + hole_size);
- VLOG_IF(1, (hole_size < 0)) << "shrink section (" << name << ") size: " <<
- data->d_size << " -> " << (data->d_size + hole_size);
-
- // libelf overrides sh_entsize for known sh_types, so it does not matter what we set
- // for SHT_REL/SHT_RELA.
- typename ELF::Xword new_entsize =
- (new_sh_type == SHT_ANDROID_REL || new_sh_type == SHT_ANDROID_RELA) ? 1 : 0;
-
- VLOG(1) << "Update section (" << name << ") entry size: " <<
- section_header->sh_entsize << " -> " << new_entsize;
-
- // Resize the data and the section header.
- data->d_size += hole_size;
- section_header->sh_size += hole_size;
- section_header->sh_entsize = new_entsize;
- section_header->sh_type = new_sh_type;
-
- // Add the hole size to all offsets in the ELF file that are after the
- // start of the hole. If the hole size is positive we are expanding the
- // section to create a new hole; if negative, we are closing up a hole.
-
- // Start with the main ELF header.
- typename ELF::Ehdr* elf_header = ELF::getehdr(elf);
- AdjustElfHeaderForHole<ELF>(elf_header, hole_start, hole_size);
-
- // Adjust all section headers.
- AdjustSectionHeadersForHole<ELF>(elf, hole_start, hole_size);
-
- // Rewrite the program headers to either split or coalesce segments,
- // and adjust dynamic entries to match.
- RewriteProgramHeadersForHole<ELF>(elf, hole_start, hole_size);
-
- Elf_Scn* dynamic_section = GetDynamicSection<ELF>(elf);
- AdjustDynamicSectionForHole(dynamic_section, hole_start, hole_size, relocations_type);
-}
-
-// Find the first slot in a dynamics array with the given tag. The array
-// always ends with a free (unused) element, and which we exclude from the
-// search. Returns dynamics->size() if not found.
-template <typename ELF>
-static size_t FindDynamicEntry(typename ELF::Sword tag,
- std::vector<typename ELF::Dyn>* dynamics) {
- // Loop until the penultimate entry. We exclude the end sentinel.
- for (size_t i = 0; i < dynamics->size() - 1; ++i) {
- if (dynamics->at(i).d_tag == tag) {
- return i;
- }
- }
-
- // The tag was not found.
- return dynamics->size();
-}
-
-// Replace dynamic entry.
-template <typename ELF>
-static void ReplaceDynamicEntry(typename ELF::Sword tag,
- const typename ELF::Dyn& dyn,
- std::vector<typename ELF::Dyn>* dynamics) {
- const size_t slot = FindDynamicEntry<ELF>(tag, dynamics);
- if (slot == dynamics->size()) {
- LOG(FATAL) << "Dynamic slot is not found for tag=" << tag;
- }
-
- // Replace this entry with the one supplied.
- dynamics->at(slot) = dyn;
- VLOG(1) << "dynamic[" << slot << "] overwritten with " << dyn.d_tag;
-}
-
-// Remove relative entries from dynamic relocations and write as packed
-// data into android packed relocations.
-template <typename ELF>
-bool ElfFile<ELF>::PackRelocations() {
- // Load the ELF file into libelf.
- if (!Load()) {
- LOG(ERROR) << "Failed to load as ELF";
- return false;
- }
-
- if (relocations_section_ == nullptr) {
- // There is nothing to do
- return true;
- }
-
- // Retrieve the current dynamic relocations section data.
- Elf_Data* data = GetSectionData(relocations_section_);
- // we always pack rela, because packed format is pretty much the same
- std::vector<typename ELF::Rela> relocations;
-
- if (relocations_type_ == REL) {
- // Convert data to a vector of relocations.
- const typename ELF::Rel* relocations_base = reinterpret_cast<typename ELF::Rel*>(data->d_buf);
- ConvertRelArrayToRelaVector(relocations_base,
- data->d_size / sizeof(typename ELF::Rel), &relocations);
- VLOG(1) << "Relocations : REL";
- } else if (relocations_type_ == RELA) {
- // Convert data to a vector of relocations with addends.
- const typename ELF::Rela* relocations_base = reinterpret_cast<typename ELF::Rela*>(data->d_buf);
- relocations = std::vector<typename ELF::Rela>(
- relocations_base,
- relocations_base + data->d_size / sizeof(relocations[0]));
-
- VLOG(1) << "Relocations : RELA";
- } else {
- NOTREACHED();
- }
-
- return PackTypedRelocations(&relocations);
-}
-
-// Helper for PackRelocations(). Rel type is one of ELF::Rel or ELF::Rela.
-template <typename ELF>
-bool ElfFile<ELF>::PackTypedRelocations(std::vector<typename ELF::Rela>* relocations) {
- typedef typename ELF::Rela Rela;
-
- if (has_android_relocations_) {
- LOG(INFO) << "Relocation table is already packed";
- return true;
- }
-
- // If no relocations then we have nothing packable. Perhaps
- // the shared object has already been packed?
- if (relocations->empty()) {
- LOG(ERROR) << "No relocations found";
- return false;
- }
-
- const size_t rel_size =
- relocations_type_ == RELA ? sizeof(typename ELF::Rela) : sizeof(typename ELF::Rel);
- const size_t initial_bytes = relocations->size() * rel_size;
-
- VLOG(1) << "Unpacked : " << initial_bytes << " bytes";
- std::vector<uint8_t> packed;
- RelocationPacker<ELF> packer;
-
- // Pack relocations: dry run to estimate memory savings.
- packer.PackRelocations(*relocations, &packed);
- const size_t packed_bytes_estimate = packed.size() * sizeof(packed[0]);
- VLOG(1) << "Packed (no padding): " << packed_bytes_estimate << " bytes";
-
- if (packed.empty()) {
- VLOG(1) << "Too few relocations to pack";
- return true;
- }
-
- // Pre-calculate the size of the hole we will close up when we rewrite
- // dynamic relocations. We have to adjust relocation addresses to
- // account for this.
- typename ELF::Shdr* section_header = ELF::getshdr(relocations_section_);
- ssize_t hole_size = initial_bytes - packed_bytes_estimate;
-
- // hole_size needs to be page_aligned.
- hole_size -= hole_size % kPreserveAlignment;
-
- VLOG(1) << "Compaction : " << hole_size << " bytes";
-
- // Adjusting for alignment may have removed any packing benefit.
- if (hole_size == 0) {
- VLOG(1) << "Too few relocations to pack after alignment";
- return true;
- }
-
- if (hole_size <= 0) {
- VLOG(1) << "Packing relocations saves no space";
- return true;
- }
-
- size_t data_padding_bytes = is_padding_relocations_ ?
- initial_bytes - packed_bytes_estimate :
- initial_bytes - hole_size - packed_bytes_estimate;
-
- // pad data
- std::vector<uint8_t> padding(data_padding_bytes, 0);
- packed.insert(packed.end(), padding.begin(), padding.end());
-
- const void* packed_data = &packed[0];
-
- // Run a loopback self-test as a check that packing is lossless.
- std::vector<Rela> unpacked;
- packer.UnpackRelocations(packed, &unpacked);
- CHECK(unpacked.size() == relocations->size());
- CHECK(!memcmp(&unpacked[0],
- &relocations->at(0),
- unpacked.size() * sizeof(unpacked[0])));
-
- // Rewrite the current dynamic relocations section with packed one then shrink it to size.
- const size_t bytes = packed.size() * sizeof(packed[0]);
- ResizeSection(elf_, relocations_section_, bytes,
- relocations_type_ == REL ? SHT_ANDROID_REL : SHT_ANDROID_RELA, relocations_type_);
- RewriteSectionData(relocations_section_, packed_data, bytes);
-
- // TODO (dimitry): fix string table and replace .rel.dyn/plt with .android.rel.dyn/plt
-
- // Rewrite .dynamic and rename relocation tags describing the packed android
- // relocations.
- Elf_Data* data = GetSectionData(dynamic_section_);
- const typename ELF::Dyn* dynamic_base = reinterpret_cast<typename ELF::Dyn*>(data->d_buf);
- std::vector<typename ELF::Dyn> dynamics(
- dynamic_base,
- dynamic_base + data->d_size / sizeof(dynamics[0]));
- section_header = ELF::getshdr(relocations_section_);
- {
- typename ELF::Dyn dyn;
- dyn.d_tag = relocations_type_ == REL ? DT_ANDROID_REL : DT_ANDROID_RELA;
- dyn.d_un.d_ptr = section_header->sh_addr;
- ReplaceDynamicEntry<ELF>(relocations_type_ == REL ? DT_REL : DT_RELA, dyn, &dynamics);
- }
- {
- typename ELF::Dyn dyn;
- dyn.d_tag = relocations_type_ == REL ? DT_ANDROID_RELSZ : DT_ANDROID_RELASZ;
- dyn.d_un.d_val = section_header->sh_size;
- ReplaceDynamicEntry<ELF>(relocations_type_ == REL ? DT_RELSZ : DT_RELASZ, dyn, &dynamics);
- }
-
- const void* dynamics_data = &dynamics[0];
- const size_t dynamics_bytes = dynamics.size() * sizeof(dynamics[0]);
- RewriteSectionData(dynamic_section_, dynamics_data, dynamics_bytes);
-
- Flush();
- return true;
-}
-
-// Find packed relative relocations in the packed android relocations
-// section, unpack them, and rewrite the dynamic relocations section to
-// contain unpacked data.
-template <typename ELF>
-bool ElfFile<ELF>::UnpackRelocations() {
- // Load the ELF file into libelf.
- if (!Load()) {
- LOG(ERROR) << "Failed to load as ELF";
- return false;
- }
-
- if (relocations_section_ == nullptr) {
- // There is nothing to do
- return true;
- }
-
- typename ELF::Shdr* section_header = ELF::getshdr(relocations_section_);
- // Retrieve the current packed android relocations section data.
- Elf_Data* data = GetSectionData(relocations_section_);
-
- // Convert data to a vector of bytes.
- const uint8_t* packed_base = reinterpret_cast<uint8_t*>(data->d_buf);
- std::vector<uint8_t> packed(
- packed_base,
- packed_base + data->d_size / sizeof(packed[0]));
-
- if ((section_header->sh_type == SHT_ANDROID_RELA || section_header->sh_type == SHT_ANDROID_REL) &&
- packed.size() > 3 &&
- packed[0] == 'A' &&
- packed[1] == 'P' &&
- packed[2] == 'S' &&
- packed[3] == '2') {
- LOG(INFO) << "Relocations : " << (relocations_type_ == REL ? "REL" : "RELA");
- } else {
- LOG(ERROR) << "Packed relocations not found (not packed?)";
- return false;
- }
-
- return UnpackTypedRelocations(packed);
-}
-
-// Helper for UnpackRelocations(). Rel type is one of ELF::Rel or ELF::Rela.
-template <typename ELF>
-bool ElfFile<ELF>::UnpackTypedRelocations(const std::vector<uint8_t>& packed) {
- // Unpack the data to re-materialize the relative relocations.
- const size_t packed_bytes = packed.size() * sizeof(packed[0]);
- LOG(INFO) << "Packed : " << packed_bytes << " bytes";
- std::vector<typename ELF::Rela> unpacked_relocations;
- RelocationPacker<ELF> packer;
- packer.UnpackRelocations(packed, &unpacked_relocations);
-
- const size_t relocation_entry_size =
- relocations_type_ == REL ? sizeof(typename ELF::Rel) : sizeof(typename ELF::Rela);
- const size_t unpacked_bytes = unpacked_relocations.size() * relocation_entry_size;
- LOG(INFO) << "Unpacked : " << unpacked_bytes << " bytes";
-
- // Retrieve the current dynamic relocations section data.
- Elf_Data* data = GetSectionData(relocations_section_);
-
- LOG(INFO) << "Relocations : " << unpacked_relocations.size() << " entries";
-
- // If we found the same number of null relocation entries in the dynamic
- // relocations section as we hold as unpacked relative relocations, then
- // this is a padded file.
-
- const bool is_padded = packed_bytes == unpacked_bytes;
-
- // Unless padded, pre-apply relative relocations to account for the
- // hole, and pre-adjust all relocation offsets accordingly.
- typename ELF::Shdr* section_header = ELF::getshdr(relocations_section_);
-
- if (!is_padded) {
- LOG(INFO) << "Expansion : " << unpacked_bytes - packed_bytes << " bytes";
- }
-
- // Rewrite the current dynamic relocations section with unpacked version of
- // relocations.
- const void* section_data = nullptr;
- std::vector<typename ELF::Rel> unpacked_rel_relocations;
- if (relocations_type_ == RELA) {
- section_data = &unpacked_relocations[0];
- } else if (relocations_type_ == REL) {
- ConvertRelaVectorToRelVector(unpacked_relocations, &unpacked_rel_relocations);
- section_data = &unpacked_rel_relocations[0];
- } else {
- NOTREACHED();
- }
-
- ResizeSection(elf_, relocations_section_, unpacked_bytes,
- relocations_type_ == REL ? SHT_REL : SHT_RELA, relocations_type_);
- RewriteSectionData(relocations_section_, section_data, unpacked_bytes);
-
- // Rewrite .dynamic to remove two tags describing packed android relocations.
- data = GetSectionData(dynamic_section_);
- const typename ELF::Dyn* dynamic_base = reinterpret_cast<typename ELF::Dyn*>(data->d_buf);
- std::vector<typename ELF::Dyn> dynamics(
- dynamic_base,
- dynamic_base + data->d_size / sizeof(dynamics[0]));
- {
- typename ELF::Dyn dyn;
- dyn.d_tag = relocations_type_ == REL ? DT_REL : DT_RELA;
- dyn.d_un.d_ptr = section_header->sh_addr;
- ReplaceDynamicEntry<ELF>(relocations_type_ == REL ? DT_ANDROID_REL : DT_ANDROID_RELA,
- dyn, &dynamics);
- }
-
- {
- typename ELF::Dyn dyn;
- dyn.d_tag = relocations_type_ == REL ? DT_RELSZ : DT_RELASZ;
- dyn.d_un.d_val = section_header->sh_size;
- ReplaceDynamicEntry<ELF>(relocations_type_ == REL ? DT_ANDROID_RELSZ : DT_ANDROID_RELASZ,
- dyn, &dynamics);
- }
-
- const void* dynamics_data = &dynamics[0];
- const size_t dynamics_bytes = dynamics.size() * sizeof(dynamics[0]);
- RewriteSectionData(dynamic_section_, dynamics_data, dynamics_bytes);
-
- Flush();
- return true;
-}
-
-// Flush rewritten shared object file data.
-template <typename ELF>
-void ElfFile<ELF>::Flush() {
- // Flag all ELF data held in memory as needing to be written back to the
- // file, and tell libelf that we have controlled the file layout.
- elf_flagelf(elf_, ELF_C_SET, ELF_F_DIRTY);
- elf_flagelf(elf_, ELF_C_SET, ELF_F_LAYOUT);
-
- // Write ELF data back to disk.
- const off_t file_bytes = elf_update(elf_, ELF_C_WRITE);
- if (file_bytes == -1) {
- LOG(ERROR) << "elf_update failed: " << elf_errmsg(elf_errno());
- }
-
- CHECK(file_bytes > 0);
- VLOG(1) << "elf_update returned: " << file_bytes;
-
- // Clean up libelf, and truncate the output file to the number of bytes
- // written by elf_update().
- elf_end(elf_);
- elf_ = NULL;
- const int truncate = ftruncate(fd_, file_bytes);
- CHECK(truncate == 0);
-}
-
-template <typename ELF>
-void ElfFile<ELF>::ConvertRelArrayToRelaVector(const typename ELF::Rel* rel_array,
- size_t rel_array_size,
- std::vector<typename ELF::Rela>* rela_vector) {
- for (size_t i = 0; i<rel_array_size; ++i) {
- typename ELF::Rela rela;
- rela.r_offset = rel_array[i].r_offset;
- rela.r_info = rel_array[i].r_info;
- rela.r_addend = 0;
- rela_vector->push_back(rela);
- }
-}
-
-template <typename ELF>
-void ElfFile<ELF>::ConvertRelaVectorToRelVector(const std::vector<typename ELF::Rela>& rela_vector,
- std::vector<typename ELF::Rel>* rel_vector) {
- for (auto rela : rela_vector) {
- typename ELF::Rel rel;
- rel.r_offset = rela.r_offset;
- rel.r_info = rela.r_info;
- CHECK(rela.r_addend == 0);
- rel_vector->push_back(rel);
- }
-}
-
-template class ElfFile<ELF32_traits>;
-template class ElfFile<ELF64_traits>;
-
-} // namespace relocation_packer
diff --git a/tools/relocation_packer/src/elf_file.h b/tools/relocation_packer/src/elf_file.h
deleted file mode 100644
index d6acc76..0000000
--- a/tools/relocation_packer/src/elf_file.h
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// ELF shared object file updates handler.
-//
-// Provides functions to pack relocations in the .rel.dyn or .rela.dyn
-// sections, and unpack to return the file to its pre-packed state.
-//
-// SetPadding() causes PackRelocations() to pad .rel.dyn or .rela.dyn with
-// NONE-type entries rather than cutting a hole out of the shared object
-// file. This keeps all load addresses and offsets constant, and enables
-// easier debugging and testing.
-//
-// A packed shared object file is shorter than its non-packed original.
-// Unpacking a packed file restores the file to its non-packed state.
-
-#ifndef TOOLS_RELOCATION_PACKER_SRC_ELF_FILE_H_
-#define TOOLS_RELOCATION_PACKER_SRC_ELF_FILE_H_
-
-#include <string.h>
-#include <vector>
-
-#include "elf.h"
-#include "libelf.h"
-#include "packer.h"
-
-namespace relocation_packer {
-
-// An ElfFile reads shared objects, and shuttles relative relocations
-// between .rel.dyn or .rela.dyn and .android.rel.dyn or .android.rela.dyn
-// sections.
-template <typename ELF>
-class ElfFile {
- public:
- explicit ElfFile(int fd)
- : fd_(fd), is_padding_relocations_(false), elf_(NULL),
- relocations_section_(NULL), dynamic_section_(NULL),
- relocations_type_(NONE), has_android_relocations_(false) {}
- ~ElfFile() {}
-
- // Set padding mode. When padding, PackRelocations() will not shrink
- // the .rel.dyn or .rela.dyn section, but instead replace relative with
- // NONE-type entries.
- // |flag| is true to pad .rel.dyn or .rela.dyn, false to shrink it.
- inline void SetPadding(bool flag) { is_padding_relocations_ = flag; }
-
- // Transfer relative relocations from .rel.dyn or .rela.dyn to a packed
- // representation in .android.rel.dyn or .android.rela.dyn. Returns true
- // on success.
- bool PackRelocations();
-
- // Transfer relative relocations from a packed representation in
- // .android.rel.dyn or .android.rela.dyn to .rel.dyn or .rela.dyn. Returns
- // true on success.
- bool UnpackRelocations();
-
- private:
- enum relocations_type_t {
- NONE = 0, REL, RELA
- };
-
- // Load a new ElfFile from a filedescriptor. If flushing, the file must
- // be open for read/write. Returns true on successful ELF file load.
- // |fd| is an open file descriptor for the shared object.
- bool Load();
-
- // Templated packer, helper for PackRelocations(). Rel type is one of
- // ELF::Rel or ELF::Rela.
- bool PackTypedRelocations(std::vector<typename ELF::Rela>* relocations);
-
- // Templated unpacker, helper for UnpackRelocations(). Rel type is one of
- // ELF::Rel or ELF::Rela.
- bool UnpackTypedRelocations(const std::vector<uint8_t>& packed);
-
- // Write ELF file changes.
- void Flush();
-
- void AdjustRelativeRelocationTargets(typename ELF::Off hole_start,
- ssize_t hole_size,
- std::vector<typename ELF::Rela>* relocations);
-
- static void ResizeSection(Elf* elf, Elf_Scn* section, size_t new_size,
- typename ELF::Word new_sh_type, relocations_type_t relocations_type);
-
- static void AdjustDynamicSectionForHole(Elf_Scn* dynamic_section,
- typename ELF::Off hole_start,
- ssize_t hole_size,
- relocations_type_t relocations_type);
-
- static void ConvertRelArrayToRelaVector(const typename ELF::Rel* rel_array, size_t rel_array_size,
- std::vector<typename ELF::Rela>* rela_vector);
-
- static void ConvertRelaVectorToRelVector(const std::vector<typename ELF::Rela>& rela_vector,
- std::vector<typename ELF::Rel>* rel_vector);
-
-
- // File descriptor opened on the shared object.
- int fd_;
-
- // If set, pad rather than shrink .rel.dyn or .rela.dyn. Primarily for
- // debugging, allows packing to be checked without affecting load addresses.
- bool is_padding_relocations_;
-
- // Libelf handle, assigned by Load().
- Elf* elf_;
-
- // Sections that we manipulate, assigned by Load().
- Elf_Scn* relocations_section_;
- Elf_Scn* dynamic_section_;
-
- // Relocation type found, assigned by Load().
- relocations_type_t relocations_type_;
-
- // Elf-file has android relocations section
- bool has_android_relocations_;
-};
-
-} // namespace relocation_packer
-
-#endif // TOOLS_RELOCATION_PACKER_SRC_ELF_FILE_H_
diff --git a/tools/relocation_packer/src/elf_file_unittest.cc b/tools/relocation_packer/src/elf_file_unittest.cc
deleted file mode 100644
index d5c8918..0000000
--- a/tools/relocation_packer/src/elf_file_unittest.cc
+++ /dev/null
@@ -1,218 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "elf_file.h"
-
-#include <limits.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <string>
-#include <vector>
-#include "debug.h"
-#include "elf_traits.h"
-#include "gtest/gtest.h"
-
-namespace {
-
-void GetDataFilePath(const char* name, std::string* path) {
- std::string data_dir;
-
- const char* bindir = getenv("bindir");
- if (bindir) {
- data_dir = std::string(bindir);
- } else {
- char path[PATH_MAX];
- memset(path, 0, sizeof(path));
- ASSERT_NE(-1, readlink("/proc/self/exe", path, sizeof(path) - 1));
-
- data_dir = std::string(path);
- size_t pos = data_dir.rfind('/');
- ASSERT_NE(std::string::npos, pos);
-
- data_dir.erase(pos);
- }
-
- *path = data_dir + "/" + name;
-}
-
-void OpenRelocsTestFile(const char* name, FILE** stream) {
- std::string path;
- GetDataFilePath(name, &path);
-
- FILE* testfile = fopen(path.c_str(), "rb");
- ASSERT_FALSE(testfile == NULL) << "Error opening '" << path << "'";
-
- FILE* temporary = tmpfile();
- ASSERT_FALSE(temporary == NULL);
-
- static const size_t buffer_size = 4096;
- unsigned char buffer[buffer_size];
-
- size_t bytes;
- do {
- bytes = fread(buffer, 1, sizeof(buffer), testfile);
- ASSERT_EQ(bytes, fwrite(buffer, 1, bytes, temporary));
- } while (bytes > 0);
-
- ASSERT_EQ(0, fclose(testfile));
- ASSERT_EQ(0, fseek(temporary, 0, SEEK_SET));
- ASSERT_EQ(0, lseek(fileno(temporary), 0, SEEK_SET));
-
- *stream = temporary;
-}
-
-void OpenRelocsTestFiles(const std::string& arch, FILE** relocs_so, FILE** packed_relocs_so) {
- const std::string base = std::string("elf_file_unittest_relocs_") + arch;
- const std::string relocs = base + ".so";
- const std::string packed_relocs = base + "_packed.so";
-
- OpenRelocsTestFile(relocs.c_str(), relocs_so);
- OpenRelocsTestFile(packed_relocs.c_str(), packed_relocs_so);
-}
-
-void CloseRelocsTestFile(FILE* temporary) {
- fclose(temporary);
-}
-
-void CloseRelocsTestFiles(FILE* relocs_so, FILE* packed_relocs_so) {
- CloseRelocsTestFile(relocs_so);
- CloseRelocsTestFile(packed_relocs_so);
-}
-
-void CheckFileContentsEqual(FILE* first, FILE* second) {
- ASSERT_EQ(0, fseek(first, 0, SEEK_SET));
- ASSERT_EQ(0, fseek(second, 0, SEEK_SET));
-
- static const size_t buffer_size = 4096;
- unsigned char first_buffer[buffer_size];
- unsigned char second_buffer[buffer_size];
-
- do {
- size_t first_read = fread(first_buffer, 1, sizeof(first_buffer), first);
- size_t second_read = fread(second_buffer, 1, sizeof(second_buffer), second);
-
- EXPECT_EQ(first_read, second_read);
- EXPECT_EQ(0, memcmp(first_buffer, second_buffer, first_read));
- } while (!feof(first) && !feof(second));
-
- EXPECT_TRUE(feof(first) && feof(second));
-}
-
-template <typename ELF>
-static void ProcessUnpack(FILE* relocs_so, FILE* packed_relocs_so) {
- relocation_packer::ElfFile<ELF> elf_file(fileno(packed_relocs_so));
-
- // Ensure packing already packed elf-file does not fail the build.
- EXPECT_TRUE(elf_file.PackRelocations());
-
- // Unpack golden relocations, and check files are now identical.
- EXPECT_TRUE(elf_file.UnpackRelocations());
- CheckFileContentsEqual(packed_relocs_so, relocs_so);
-
- CloseRelocsTestFiles(relocs_so, packed_relocs_so);
-}
-
-static void RunUnpackRelocationsTestFor(const std::string& arch) {
- ASSERT_NE(static_cast<uint32_t>(EV_NONE), elf_version(EV_CURRENT));
-
- FILE* relocs_so = NULL;
- FILE* packed_relocs_so = NULL;
- OpenRelocsTestFiles(arch, &relocs_so, &packed_relocs_so);
-
- if (relocs_so != NULL && packed_relocs_so != NULL) {
- // lets detect elf class
- ASSERT_EQ(0, fseek(relocs_so, EI_CLASS, SEEK_SET))
- << "Invalid file length: " << strerror(errno);
- uint8_t elf_class = 0;
- ASSERT_EQ(1U, fread(&elf_class, 1, 1, relocs_so));
- ASSERT_EQ(0, fseek(relocs_so, 0, SEEK_SET));
- if (elf_class == ELFCLASS32) {
- ProcessUnpack<ELF32_traits>(relocs_so, packed_relocs_so);
- } else {
- ProcessUnpack<ELF64_traits>(relocs_so, packed_relocs_so);
- }
- }
-}
-
-template <typename ELF>
-static void ProcessPack(FILE* relocs_so, FILE* packed_relocs_so) {
- relocation_packer::ElfFile<ELF> elf_file(fileno(relocs_so));
-
- // Ensure unpacking fails (not packed).
- EXPECT_FALSE(elf_file.UnpackRelocations());
-
- // Pack relocations, and check files are now identical.
- EXPECT_TRUE(elf_file.PackRelocations());
- CheckFileContentsEqual(relocs_so, packed_relocs_so);
-
- CloseRelocsTestFiles(relocs_so, packed_relocs_so);
-}
-
-static void RunPackRelocationsTestFor(const std::string& arch) {
- ASSERT_NE(static_cast<uint32_t>(EV_NONE), elf_version(EV_CURRENT));
-
- FILE* relocs_so = NULL;
- FILE* packed_relocs_so = NULL;
- OpenRelocsTestFiles(arch, &relocs_so, &packed_relocs_so);
-
- if (relocs_so != NULL && packed_relocs_so != NULL) {
- // lets detect elf class
- ASSERT_EQ(0, fseek(packed_relocs_so, EI_CLASS, SEEK_SET))
- << "Invalid file length: " << strerror(errno);
- uint8_t elf_class = 0;
- ASSERT_EQ(1U, fread(&elf_class, 1, 1, packed_relocs_so));
- fseek(packed_relocs_so, 0, SEEK_SET);
- if (elf_class == ELFCLASS32) {
- ProcessPack<ELF32_traits>(relocs_so, packed_relocs_so);
- } else {
- ProcessPack<ELF64_traits>(relocs_so, packed_relocs_so);
- }
- }
-}
-
-} // namespace
-
-namespace relocation_packer {
-
-TEST(ElfFile, PackRelocationsArm32) {
- RunPackRelocationsTestFor("arm32");
-}
-
-TEST(ElfFile, PackRelocationsArm64) {
- RunPackRelocationsTestFor("arm64");
-}
-
-TEST(ElfFile, PackRelocationsMips32) {
- RunPackRelocationsTestFor("mips32");
-}
-
-TEST(ElfFile, PackRelocationsIa32) {
- RunPackRelocationsTestFor("ia32");
-}
-
-TEST(ElfFile, PackRelocationsX64) {
- RunPackRelocationsTestFor("x64");
-}
-
-TEST(ElfFile, UnpackRelocationsArm32) {
- RunUnpackRelocationsTestFor("arm32");
-}
-
-TEST(ElfFile, UnpackRelocationsArm64) {
- RunUnpackRelocationsTestFor("arm64");
-}
-
-TEST(ElfFile, UnpackRelocationsMips32) {
- RunUnpackRelocationsTestFor("mips32");
-}
-
-TEST(ElfFile, UnpackRelocationsIa32) {
- RunUnpackRelocationsTestFor("ia32");
-}
-
-TEST(ElfFile, UnpackRelocationsX64) {
- RunUnpackRelocationsTestFor("x64");
-}
-
-} // namespace relocation_packer
diff --git a/tools/relocation_packer/src/elf_traits.h b/tools/relocation_packer/src/elf_traits.h
deleted file mode 100644
index 3e282b2..0000000
--- a/tools/relocation_packer/src/elf_traits.h
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Target-specific ELF type traits.
-
-#ifndef TOOLS_RELOCATION_PACKER_SRC_ELF_TRAITS_H_
-#define TOOLS_RELOCATION_PACKER_SRC_ELF_TRAITS_H_
-
-#include "elf.h"
-#include "libelf.h"
-
-#if !defined(DT_MIPS_RLD_MAP_REL)
-#define DT_MIPS_RLD_MAP_REL 0x70000035
-#endif
-
-// ELF is a traits structure used to provide convenient aliases for
-// 32/64 bit Elf types and functions, depending on the target file.
-
-struct ELF32_traits {
- typedef Elf32_Addr Addr;
- typedef Elf32_Dyn Dyn;
- typedef Elf32_Ehdr Ehdr;
- typedef Elf32_Off Off;
- typedef Elf32_Phdr Phdr;
- typedef Elf32_Rel Rel;
- typedef Elf32_Rela Rela;
- typedef Elf32_Shdr Shdr;
- typedef Elf32_Sword Sword;
- typedef Elf32_Sxword Sxword;
- typedef Elf32_Sym Sym;
- typedef Elf32_Word Word;
- typedef Elf32_Xword Xword;
- typedef Elf32_Half Half;
-
- static inline Ehdr* getehdr(Elf* elf) { return elf32_getehdr(elf); }
- static inline Phdr* getphdr(Elf* elf) { return elf32_getphdr(elf); }
- static inline Shdr* getshdr(Elf_Scn* scn) { return elf32_getshdr(scn); }
- static inline Word elf_r_type(Word info) { return ELF32_R_TYPE(info); }
- static inline int elf_st_type(uint8_t info) { return ELF32_ST_TYPE(info); }
- static inline Word elf_r_sym(Word info) { return ELF32_R_SYM(info); }
-};
-
-struct ELF64_traits {
- typedef Elf64_Addr Addr;
- typedef Elf64_Dyn Dyn;
- typedef Elf64_Ehdr Ehdr;
- typedef Elf64_Off Off;
- typedef Elf64_Phdr Phdr;
- typedef Elf64_Rel Rel;
- typedef Elf64_Rela Rela;
- typedef Elf64_Shdr Shdr;
- typedef Elf64_Sword Sword;
- typedef Elf64_Sxword Sxword;
- typedef Elf64_Sym Sym;
- typedef Elf64_Word Word;
- typedef Elf64_Xword Xword;
- typedef Elf64_Half Half;
-
- static inline Ehdr* getehdr(Elf* elf) { return elf64_getehdr(elf); }
- static inline Phdr* getphdr(Elf* elf) { return elf64_getphdr(elf); }
- static inline Shdr* getshdr(Elf_Scn* scn) { return elf64_getshdr(scn); }
- static inline Xword elf_r_type(Xword info) { return ELF64_R_TYPE(info); }
- static inline int elf_st_type(uint8_t info) { return ELF64_ST_TYPE(info); }
- static inline Word elf_r_sym(Xword info) { return ELF64_R_SYM(info); }
-};
-
-#endif // TOOLS_RELOCATION_PACKER_SRC_ELF_TRAITS_H_
diff --git a/tools/relocation_packer/src/main.cc b/tools/relocation_packer/src/main.cc
deleted file mode 100644
index 1589043..0000000
--- a/tools/relocation_packer/src/main.cc
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Tool to pack and unpack relative relocations in a shared library.
-//
-// Invoke with -v to trace actions taken when packing or unpacking.
-// Invoke with -p to pad removed relocations with R_*_NONE. Suppresses
-// shrinking of .rel.dyn.
-// See PrintUsage() below for full usage details.
-//
-// NOTE: Breaks with libelf 0.152, which is buggy. libelf 0.158 works.
-
-#include <errno.h>
-#include <fcntl.h>
-#include <getopt.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <string>
-
-#include "debug.h"
-#include "elf_file.h"
-#include "elf_traits.h"
-#include "libelf.h"
-
-#include <android-base/unique_fd.h>
-
-static void PrintUsage(const char* argv0) {
- std::string temporary = argv0;
- const size_t last_slash = temporary.find_last_of("/");
- if (last_slash != temporary.npos) {
- temporary.erase(0, last_slash + 1);
- }
- const char* basename = temporary.c_str();
-
- printf(
- "Usage: %s [-u] [-v] [-p] file\n\n"
- "Pack or unpack relative relocations in a shared library.\n\n"
- " -u, --unpack unpack previously packed relative relocations\n"
- " -v, --verbose trace object file modifications (for debugging)\n"
- " -p, --pad do not shrink relocations, but pad (for debugging)\n\n",
- basename);
-
- printf(
- "Debug sections are not handled, so packing should not be used on\n"
- "shared libraries compiled for debugging or otherwise unstripped.\n");
-}
-
-int main(int argc, char* argv[]) {
- bool is_unpacking = false;
- bool is_verbose = false;
- bool is_padding = false;
-
- static const option options[] = {
- {"unpack", 0, 0, 'u'}, {"verbose", 0, 0, 'v'}, {"pad", 0, 0, 'p'},
- {"help", 0, 0, 'h'}, {NULL, 0, 0, 0}
- };
- bool has_options = true;
- while (has_options) {
- int c = getopt_long(argc, argv, "uvph", options, NULL);
- switch (c) {
- case 'u':
- is_unpacking = true;
- break;
- case 'v':
- is_verbose = true;
- break;
- case 'p':
- is_padding = true;
- break;
- case 'h':
- PrintUsage(argv[0]);
- return 0;
- case '?':
- LOG(INFO) << "Try '" << argv[0] << " --help' for more information.";
- return 1;
- case -1:
- has_options = false;
- break;
- default:
- NOTREACHED();
- return 1;
- }
- }
- if (optind != argc - 1) {
- LOG(INFO) << "Try '" << argv[0] << " --help' for more information.";
- return 1;
- }
-
- if (elf_version(EV_CURRENT) == EV_NONE) {
- LOG(WARNING) << "Elf Library is out of date!";
- }
-
- const char* file = argv[argc - 1];
- android::base::unique_fd fd(open(file, O_RDWR));
- if (fd.get() == -1) {
- LOG(ERROR) << file << ": " << strerror(errno);
- return 1;
- }
-
- if (is_verbose)
- relocation_packer::Logger::SetVerbose(1);
-
- // We need to detect elf class in order to create
- // correct implementation
- uint8_t e_ident[EI_NIDENT];
- if (TEMP_FAILURE_RETRY(read(fd.get(), e_ident, EI_NIDENT)) != EI_NIDENT) {
- LOG(ERROR) << file << ": failed to read elf header:" << strerror(errno);
- return 1;
- }
-
- if (TEMP_FAILURE_RETRY(lseek(fd.get(), 0, SEEK_SET)) != 0) {
- LOG(ERROR) << file << ": lseek to 0 failed:" << strerror(errno);
- return 1;
- }
-
- bool status = false;
-
- if (e_ident[EI_CLASS] == ELFCLASS32) {
- relocation_packer::ElfFile<ELF32_traits> elf_file(fd.get());
- elf_file.SetPadding(is_padding);
-
- if (is_unpacking) {
- status = elf_file.UnpackRelocations();
- } else {
- status = elf_file.PackRelocations();
- }
- } else if (e_ident[EI_CLASS] == ELFCLASS64) {
- relocation_packer::ElfFile<ELF64_traits> elf_file(fd.get());
- elf_file.SetPadding(is_padding);
-
- if (is_unpacking) {
- status = elf_file.UnpackRelocations();
- } else {
- status = elf_file.PackRelocations();
- }
- } else {
- LOG(ERROR) << file << ": unknown ELFCLASS: " << e_ident[EI_CLASS];
- return 1;
- }
-
- if (!status) {
- LOG(ERROR) << file << ": failed to pack/unpack file";
- return 1;
- }
-
- return 0;
-}
diff --git a/tools/relocation_packer/src/packer.cc b/tools/relocation_packer/src/packer.cc
deleted file mode 100644
index 433611f..0000000
--- a/tools/relocation_packer/src/packer.cc
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "packer.h"
-
-#include <vector>
-
-#include "debug.h"
-#include "delta_encoder.h"
-#include "elf_traits.h"
-#include "sleb128.h"
-
-namespace relocation_packer {
-
-// Pack relocations into a group encoded packed representation.
-template <typename ELF>
-void RelocationPacker<ELF>::PackRelocations(const std::vector<typename ELF::Rela>& relocations,
- std::vector<uint8_t>* packed) {
- // Run-length encode.
- std::vector<typename ELF::Addr> packed_words;
- RelocationDeltaCodec<ELF> codec;
- codec.Encode(relocations, &packed_words);
-
- // If insufficient data do nothing.
- if (packed_words.empty())
- return;
-
- Sleb128Encoder<typename ELF::Addr> sleb128_encoder;
-
- std::vector<uint8_t> sleb128_packed;
-
- sleb128_encoder.EnqueueAll(packed_words);
- sleb128_encoder.GetEncoding(&sleb128_packed);
-
- packed->push_back('A');
- packed->push_back('P');
- packed->push_back('S');
- packed->push_back('2');
- packed->insert(packed->end(), sleb128_packed.begin(), sleb128_packed.end());
-}
-
-// Unpack relative relocations from a run-length encoded packed
-// representation.
-template <typename ELF>
-void RelocationPacker<ELF>::UnpackRelocations(
- const std::vector<uint8_t>& packed,
- std::vector<typename ELF::Rela>* relocations) {
-
- std::vector<typename ELF::Addr> packed_words;
- CHECK(packed.size() > 4 &&
- packed[0] == 'A' &&
- packed[1] == 'P' &&
- packed[2] == 'S' &&
- packed[3] == '2');
-
- Sleb128Decoder<typename ELF::Addr> decoder(packed, 4);
- decoder.DequeueAll(&packed_words);
-
- RelocationDeltaCodec<ELF> codec;
- codec.Decode(packed_words, relocations);
-}
-
-template class RelocationPacker<ELF32_traits>;
-template class RelocationPacker<ELF64_traits>;
-
-} // namespace relocation_packer
diff --git a/tools/relocation_packer/src/packer.h b/tools/relocation_packer/src/packer.h
deleted file mode 100644
index 63f50e2..0000000
--- a/tools/relocation_packer/src/packer.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Pack relative relocations into a more compact form.
-
-#ifndef TOOLS_RELOCATION_PACKER_SRC_PACKER_H_
-#define TOOLS_RELOCATION_PACKER_SRC_PACKER_H_
-
-#include <stdint.h>
-#include <vector>
-
-#include "elf.h"
-
-namespace relocation_packer {
-
-// A RelocationPacker packs vectors of relocations into more
-// compact forms, and unpacks them to reproduce the pre-packed data.
-template <typename ELF>
-class RelocationPacker {
- public:
- // Pack relocations into a more compact form.
- // |relocations| is a vector of relocation structs.
- // |packed| is the vector of packed bytes into which relocations are packed.
- static void PackRelocations(const std::vector<typename ELF::Rela>& relocations,
- std::vector<uint8_t>* packed);
-
- // Unpack relocations from their more compact form.
- // |packed| is the vector of packed relocations.
- // |relocations| is a vector of unpacked relocation structs.
- static void UnpackRelocations(const std::vector<uint8_t>& packed,
- std::vector<typename ELF::Rela>* relocations);
-};
-
-} // namespace relocation_packer
-
-#endif // TOOLS_RELOCATION_PACKER_SRC_PACKER_H_
diff --git a/tools/relocation_packer/src/packer_unittest.cc b/tools/relocation_packer/src/packer_unittest.cc
deleted file mode 100644
index 424b92c..0000000
--- a/tools/relocation_packer/src/packer_unittest.cc
+++ /dev/null
@@ -1,300 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "packer.h"
-
-#include <vector>
-#include "elf.h"
-#include "elf_traits.h"
-#include "gtest/gtest.h"
-
-
-template <typename ELF>
-static void AddRelocation(typename ELF::Addr addr,
- typename ELF::Xword info,
- typename ELF::Sxword addend,
- std::vector<typename ELF::Rela>* relocations) {
- typename ELF::Rela relocation;
- relocation.r_offset = addr;
- relocation.r_info = info;
- relocation.r_addend = addend;
-
- relocations->push_back(relocation);
-}
-
-template <typename ELF>
-static bool CheckRelocation(typename ELF::Addr addr,
- typename ELF::Xword info,
- typename ELF::Sxword addend,
- const typename ELF::Rela& relocation) {
- return relocation.r_offset == addr &&
- relocation.r_info == info &&
- relocation.r_addend == addend;
-}
-
-namespace relocation_packer {
-
-template <typename ELF>
-static void DoPackNoAddend() {
- std::vector<typename ELF::Rela> relocations;
- std::vector<uint8_t> packed;
- bool is_32 = sizeof(typename ELF::Addr) == 4;
- // Initial relocation.
- AddRelocation<ELF>(0xd1ce0000, 0x11, 0, &relocations);
- // Two more relocations, 4 byte deltas.
- AddRelocation<ELF>(0xd1ce0004, 0x11, 0, &relocations);
- AddRelocation<ELF>(0xd1ce0008, 0x11, 0, &relocations);
- // Three more relocations, 8 byte deltas.
- AddRelocation<ELF>(0xd1ce0010, 0x11, 0, &relocations);
- AddRelocation<ELF>(0xd1ce0018, 0x11, 0, &relocations);
- AddRelocation<ELF>(0xd1ce0020, 0x11, 0, &relocations);
-
- RelocationPacker<ELF> packer;
-
- packed.clear();
- packer.PackRelocations(relocations, &packed);
-
- ASSERT_EQ(18U, packed.size());
- // Identifier.
- size_t ndx = 0;
- EXPECT_EQ('A', packed[ndx++]);
- EXPECT_EQ('P', packed[ndx++]);
- EXPECT_EQ('S', packed[ndx++]);
- EXPECT_EQ('2', packed[ndx++]);
- // relocation count
- EXPECT_EQ(6, packed[ndx++]);
- // base relocation = 0xd1cdfffc -> fc, ff, b7, 8e, 7d/0d (32/64bit)
- EXPECT_EQ(0xfc, packed[ndx++]);
- EXPECT_EQ(0xff, packed[ndx++]);
- EXPECT_EQ(0xb7, packed[ndx++]);
- EXPECT_EQ(0x8e, packed[ndx++]);
- EXPECT_EQ(is_32 ? 0x7d : 0x0d, packed[ndx++]);
- // first group
- EXPECT_EQ(3, packed[ndx++]); // size
- EXPECT_EQ(3, packed[ndx++]); // flags
- EXPECT_EQ(4, packed[ndx++]); // r_offset_delta
- EXPECT_EQ(0x11, packed[ndx++]); // r_info
- // second group
- EXPECT_EQ(3, packed[ndx++]); // size
- EXPECT_EQ(3, packed[ndx++]); // flags
- EXPECT_EQ(8, packed[ndx++]); // r_offset_delta
- EXPECT_EQ(0x11, packed[ndx++]); // r_info
-
- EXPECT_EQ(ndx, packed.size());
-}
-
-TEST(Packer, PackNoAddend32) {
- DoPackNoAddend<ELF32_traits>();
-}
-
-TEST(Packer, PackNoAddend64) {
- DoPackNoAddend<ELF64_traits>();
-}
-
-template <typename ELF>
-static void DoUnpackNoAddend() {
- std::vector<typename ELF::Rela> relocations;
- std::vector<uint8_t> packed;
- bool is_32 = sizeof(typename ELF::Addr) == 4;
- packed.push_back('A');
- packed.push_back('P');
- packed.push_back('S');
- packed.push_back('2');
- // relocation count
- packed.push_back(6);
- // base relocation = 0xd1cdfffc -> fc, ff, b7, 8e, 7d/0d (32/64bit)
- packed.push_back(0xfc);
- packed.push_back(0xff);
- packed.push_back(0xb7);
- packed.push_back(0x8e);
- packed.push_back(is_32 ? 0x7d : 0x0d);
- // first group
- packed.push_back(3); // size
- packed.push_back(3); // flags
- packed.push_back(4); // r_offset_delta
- packed.push_back(0x11); // r_info
- // second group
- packed.push_back(3); // size
- packed.push_back(3); // flags
- packed.push_back(8); // r_offset_delta
- packed.push_back(0x11); // r_info
-
- RelocationPacker<ELF> packer;
- packer.UnpackRelocations(packed, &relocations);
-
- size_t ndx = 0;
- EXPECT_EQ(6U, relocations.size());
- EXPECT_TRUE(CheckRelocation<ELF>(0xd1ce0000, 0x11, 0, relocations[ndx++]));
- EXPECT_TRUE(CheckRelocation<ELF>(0xd1ce0004, 0x11, 0, relocations[ndx++]));
- EXPECT_TRUE(CheckRelocation<ELF>(0xd1ce0008, 0x11, 0, relocations[ndx++]));
-
- EXPECT_TRUE(CheckRelocation<ELF>(0xd1ce0010, 0x11, 0, relocations[ndx++]));
- EXPECT_TRUE(CheckRelocation<ELF>(0xd1ce0018, 0x11, 0, relocations[ndx++]));
- EXPECT_TRUE(CheckRelocation<ELF>(0xd1ce0020, 0x11, 0, relocations[ndx++]));
-
- EXPECT_EQ(ndx, relocations.size());
-}
-
-TEST(Packer, UnpackNoAddend32) {
- DoUnpackNoAddend<ELF32_traits>();
-}
-
-TEST(Packer, UnpackNoAddend64) {
- DoUnpackNoAddend<ELF64_traits>();
-}
-
-template <typename ELF>
-static void DoPackWithAddend() {
- std::vector<typename ELF::Rela> relocations;
-
- // Initial relocation.
- AddRelocation<ELF>(0xd1ce0000, 0x01, 10024, &relocations);
- // Two more relocations, 4 byte offset deltas, 12 byte addend deltas.
- AddRelocation<ELF>(0xd1ce0004, 0x01, 10012, &relocations);
- AddRelocation<ELF>(0xd1ce0008, 0x01, 10024, &relocations);
- // Three more relocations, 8 byte deltas, -24 byte addend deltas.
- AddRelocation<ELF>(0xd1ce0010, 0x01, 10000, &relocations);
- AddRelocation<ELF>(0xd1ce0018, 0x01, 9976, &relocations);
- AddRelocation<ELF>(0xd1ce0020, 0x01, 9952, &relocations);
-
- std::vector<uint8_t> packed;
-
- RelocationPacker<ELF> packer;
-
- packed.clear();
- packer.PackRelocations(relocations, &packed);
-
- EXPECT_EQ(26U, packed.size());
- size_t ndx = 0;
- // Identifier.
- EXPECT_EQ('A', packed[ndx++]);
- EXPECT_EQ('P', packed[ndx++]);
- EXPECT_EQ('S', packed[ndx++]);
- EXPECT_EQ('2', packed[ndx++]);
- // Relocation count
- EXPECT_EQ(6U, packed[ndx++]);
- // base relocation = 0xd1cdfffc -> fc, ff, b7, 8e, 0d/7d (depending on ELF::Addr)
- EXPECT_EQ(0xfc, packed[ndx++]);
- EXPECT_EQ(0xff, packed[ndx++]);
- EXPECT_EQ(0xb7, packed[ndx++]);
- EXPECT_EQ(0x8e, packed[ndx++]);
- if (sizeof(typename ELF::Addr) == 8) {
- // positive for uint64_t
- EXPECT_EQ(0x0d, packed[ndx++]);
- } else {
- // negative for uint32_t
- EXPECT_EQ(0x7d, packed[ndx++]);
- }
- // group 1
- EXPECT_EQ(0x03, packed[ndx++]); // size
- EXPECT_EQ(0x0b, packed[ndx++]); // flags
- EXPECT_EQ(0x04, packed[ndx++]); // r_offset_delta
- EXPECT_EQ(0x01, packed[ndx++]); // r_info
- // group 1 - addend 1: 10024 = 0xa8, 0xce, 0x80
- EXPECT_EQ(0xa8, packed[ndx++]);
- EXPECT_EQ(0xce, packed[ndx++]);
- EXPECT_EQ(0x00, packed[ndx++]);
- // group 1 - addend 2: -12 = 0x74
- EXPECT_EQ(0x74, packed[ndx++]);
- // group 1 - addend 3: +12 = 0x0c
- EXPECT_EQ(0x0c, packed[ndx++]);
-
- // group 2
- EXPECT_EQ(0x03, packed[ndx++]); // size
- EXPECT_EQ(0x0b, packed[ndx++]); // flags
- EXPECT_EQ(0x08, packed[ndx++]); // r_offset_delta
- EXPECT_EQ(0x01, packed[ndx++]); // r_info
-
- // group 2 - addend 1: -24 = 0x68
- EXPECT_EQ(0x68, packed[ndx++]);
- // group 2 - addend 2: -24 = 0x68
- EXPECT_EQ(0x68, packed[ndx++]);
- // group 2 - addend 3: -24 = 0x68
- EXPECT_EQ(0x68, packed[ndx++]);
-
- EXPECT_EQ(ndx, packed.size());
-}
-
-TEST(Packer, PackWithAddend) {
- DoPackWithAddend<ELF32_traits>();
- DoPackWithAddend<ELF64_traits>();
-}
-
-template <typename ELF>
-static void DoUnpackWithAddend() {
- std::vector<uint8_t> packed;
- // Identifier.
- packed.push_back('A');
- packed.push_back('P');
- packed.push_back('S');
- packed.push_back('2');
- // Relocation count
- packed.push_back(6U);
- // base relocation = 0xd1cdfffc -> fc, ff, b7, 8e, 0d
- packed.push_back(0xfc);
- packed.push_back(0xff);
- packed.push_back(0xb7);
- packed.push_back(0x8e);
- if (sizeof(typename ELF::Addr) == 8) {
- // positive for uint64_t
- packed.push_back(0x0d);
- } else {
- // negative for uint32_t
- packed.push_back(0x7d);
- }
- // group 1
- packed.push_back(0x03); // size
- packed.push_back(0x0b); // flags
- packed.push_back(0x04); // r_offset_delta
- packed.push_back(0x01); // r_info
- // group 1 - addend 1: 10024 = 0xa8, 0xce, 0x80
- packed.push_back(0xa8);
- packed.push_back(0xce);
- packed.push_back(0x00);
- // group 1 - addend 2: -12 = 0x74
- packed.push_back(0x74);
- // group 1 - addend 3: +12 = 0x0c
- packed.push_back(0x0c);
-
- // group 2
- packed.push_back(0x03); // size
- packed.push_back(0x0b); // flags
- packed.push_back(0x08); // r_offset_delta
- packed.push_back(0x01); // r_info
-
- // group 2 - addend 1: -24 = 0x68
- packed.push_back(0x68);
- // group 2 - addend 2: -24 = 0x68
- packed.push_back(0x68);
- // group 2 - addend 3: -24 = 0x68
- packed.push_back(0x68);
-
- std::vector<typename ELF::Rela> relocations;
-
- RelocationPacker<ELF> packer;
-
- relocations.clear();
- packer.UnpackRelocations(packed, &relocations);
-
- EXPECT_EQ(6U, relocations.size());
- size_t ndx = 0;
- // Initial relocation.
- EXPECT_TRUE(CheckRelocation<ELF>(0xd1ce0000, 0x01, 10024, relocations[ndx++]));
- // Two more relocations, 4 byte offset deltas, 12 byte addend deltas.
- EXPECT_TRUE(CheckRelocation<ELF>(0xd1ce0004, 0x01, 10012, relocations[ndx++]));
- EXPECT_TRUE(CheckRelocation<ELF>(0xd1ce0008, 0x01, 10024, relocations[ndx++]));
- // Three more relocations, 8 byte offset deltas, -24 byte addend deltas.
- EXPECT_TRUE(CheckRelocation<ELF>(0xd1ce0010, 0x01, 10000, relocations[ndx++]));
- EXPECT_TRUE(CheckRelocation<ELF>(0xd1ce0018, 0x01, 9976, relocations[ndx++]));
- EXPECT_TRUE(CheckRelocation<ELF>(0xd1ce0020, 0x01, 9952, relocations[ndx++]));
-
- EXPECT_EQ(ndx, relocations.size());
-}
-
-TEST(Packer, UnpackWithAddend) {
- DoUnpackWithAddend<ELF32_traits>();
- DoUnpackWithAddend<ELF64_traits>();
-}
-
-} // namespace relocation_packer
diff --git a/tools/relocation_packer/src/sleb128.cc b/tools/relocation_packer/src/sleb128.cc
deleted file mode 100644
index 12c21e3..0000000
--- a/tools/relocation_packer/src/sleb128.cc
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "sleb128.h"
-
-#include <limits.h>
-#include <stdint.h>
-#include <vector>
-
-#include "elf_traits.h"
-
-namespace {
-
-template <typename T>
-class uint_traits {};
-
-template <>
-class uint_traits<uint64_t> {
- public:
- typedef int64_t int_t;
-};
-
-template <>
-class uint_traits<uint32_t> {
- public:
- typedef int32_t int_t;
-};
-
-}
-
-namespace relocation_packer {
-
-// Empty constructor and destructor to silence chromium-style.
-template <typename uint_t>
-Sleb128Encoder<uint_t>::Sleb128Encoder() { }
-
-template <typename uint_t>
-Sleb128Encoder<uint_t>::~Sleb128Encoder() { }
-
-// Add a single value to the encoding. Values are encoded with variable
-// length. The least significant 7 bits of each byte hold 7 bits of data,
-// and the most significant bit is set on each byte except the last. The
-// value is sign extended up to a multiple of 7 bits (ensuring that the
-// most significant bit is zero for a positive number and one for a
-// negative number).
-template <typename uint_t>
-void Sleb128Encoder<uint_t>::Enqueue(uint_t value) {
- typedef typename uint_traits<uint_t>::int_t int_t;
- static const size_t size = CHAR_BIT * sizeof(value);
-
- bool more = true;
- const bool negative = static_cast<int_t>(value) < 0;
-
- while (more) {
- uint8_t byte = value & 127;
- value >>= 7;
-
- // Sign extend if encoding a -ve value.
- if (negative)
- value |= -(static_cast<uint_t>(1) << (size - 7));
-
- // The sign bit of byte is second high order bit.
- const bool sign_bit = byte & 64;
- if ((value == 0 && !sign_bit) || (value == static_cast<uint_t>(-1) && sign_bit))
- more = false;
- else
- byte |= 128;
- encoding_.push_back(byte);
- }
-}
-
-// Add a vector of values to the encoding.
-template <typename uint_t>
-void Sleb128Encoder<uint_t>::EnqueueAll(const std::vector<uint_t>& values) {
- for (size_t i = 0; i < values.size(); ++i) {
- Enqueue(values[i]);
- }
-}
-
-// Create a new decoder for the given encoded stream.
-template <typename uint_t>
-Sleb128Decoder<uint_t>::Sleb128Decoder(const std::vector<uint8_t>& encoding, size_t start_with) {
- encoding_ = encoding;
- cursor_ = start_with;
-}
-
-// Empty destructor to silence chromium-style.
-template <typename uint_t>
-Sleb128Decoder<uint_t>::~Sleb128Decoder() { }
-
-// Decode and retrieve a single value from the encoding. Consume bytes
-// until one without its most significant bit is found, and re-form the
-// value from the 7 bit fields of the bytes consumed.
-template <typename uint_t>
-uint_t Sleb128Decoder<uint_t>::Dequeue() {
- uint_t value = 0;
- static const size_t size = CHAR_BIT * sizeof(value);
-
- size_t shift = 0;
- uint8_t byte;
-
- // Loop until we reach a byte with its high order bit clear.
- do {
- byte = encoding_[cursor_++];
- value |= (static_cast<uint_t>(byte & 127) << shift);
- shift += 7;
- } while (byte & 128);
-
- // The sign bit is second high order bit of the final byte decoded.
- // Sign extend if value is -ve and we did not shift all of it.
- if (shift < size && (byte & 64))
- value |= -(static_cast<uint_t>(1) << shift);
-
- return static_cast<uint_t>(value);
-}
-
-// Decode and retrieve all remaining values from the encoding.
-template <typename uint_t>
-void Sleb128Decoder<uint_t>::DequeueAll(std::vector<uint_t>* values) {
- while (cursor_ < encoding_.size()) {
- values->push_back(Dequeue());
- }
-}
-
-template class Sleb128Encoder<uint32_t>;
-template class Sleb128Encoder<uint64_t>;
-template class Sleb128Decoder<uint32_t>;
-template class Sleb128Decoder<uint64_t>;
-
-} // namespace relocation_packer
diff --git a/tools/relocation_packer/src/sleb128.h b/tools/relocation_packer/src/sleb128.h
deleted file mode 100644
index 3a63f66..0000000
--- a/tools/relocation_packer/src/sleb128.h
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// SLEB128 encoder and decoder for packed relative relocations.
-//
-// Packed relocations consist of a large number of relatively small
-// integer values. Encoding these as LEB128 saves space.
-//
-// For more on LEB128 see http://en.wikipedia.org/wiki/LEB128.
-
-#ifndef TOOLS_RELOCATION_PACKER_SRC_SLEB128_H_
-#define TOOLS_RELOCATION_PACKER_SRC_SLEB128_H_
-
-#include <stdint.h>
-#include <unistd.h>
-#include <vector>
-
-#include "elf_traits.h"
-
-namespace relocation_packer {
-
-// Encode packed words as a signed LEB128 byte stream.
-template<typename int_t>
-class Sleb128Encoder {
- public:
- // Explicit (but empty) constructor and destructor, for chromium-style.
- Sleb128Encoder();
- ~Sleb128Encoder();
-
- // Add a value to the encoding stream.
- // |value| is the signed int to add.
- void Enqueue(int_t value);
-
- // Add a vector of values to the encoding stream.
- // |values| is the vector of signed ints to add.
- void EnqueueAll(const std::vector<int_t>& values);
-
- // Retrieve the encoded representation of the values.
- // |encoding| is the returned vector of encoded data.
- void GetEncoding(std::vector<uint8_t>* encoding) { *encoding = encoding_; }
-
- private:
- // Growable vector holding the encoded LEB128 stream.
- std::vector<uint8_t> encoding_;
-};
-
-// Decode a LEB128 byte stream to produce packed words.
-template <typename int_t>
-class Sleb128Decoder {
- public:
- // Create a new decoder for the given encoded stream.
- // |encoding| is the vector of encoded data.
- explicit Sleb128Decoder(const std::vector<uint8_t>& encoding, size_t start_with);
-
- // Explicit (but empty) destructor, for chromium-style.
- ~Sleb128Decoder();
-
- // Retrieve the next value from the encoded stream.
- int_t Dequeue();
-
- // Retrieve all remaining values from the encoded stream.
- // |values| is the vector of decoded data.
- void DequeueAll(std::vector<int_t>* values);
-
- private:
- // Encoded LEB128 stream.
- std::vector<uint8_t> encoding_;
-
- // Cursor indicating the current stream retrieval point.
- size_t cursor_;
-};
-
-} // namespace relocation_packer
-
-#endif // TOOLS_RELOCATION_PACKER_SRC_SLEB128_H_
diff --git a/tools/relocation_packer/src/sleb128_unittest.cc b/tools/relocation_packer/src/sleb128_unittest.cc
deleted file mode 100644
index 49a553c..0000000
--- a/tools/relocation_packer/src/sleb128_unittest.cc
+++ /dev/null
@@ -1,166 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "sleb128.h"
-
-#include <vector>
-#include "elf_traits.h"
-#include "gtest/gtest.h"
-
-namespace relocation_packer {
-
-TEST(Sleb128, Encoder64) {
- std::vector<uint64_t> values;
- values.push_back(624485U);
- values.push_back(0U);
- values.push_back(1U);
- values.push_back(63U);
- values.push_back(64U);
- values.push_back(static_cast<uint64_t>(-1));
- values.push_back(static_cast<uint64_t>(-624485));
-
- Sleb128Encoder<uint64_t> encoder;
- encoder.EnqueueAll(values);
-
- encoder.Enqueue(2147483647U);
- encoder.Enqueue(static_cast<uint64_t>(-2147483648));
- encoder.Enqueue(9223372036854775807ULL);
- encoder.Enqueue(static_cast<uint64_t>(-9223372036854775807LL - 1));
-
- std::vector<uint8_t> encoding;
- encoder.GetEncoding(&encoding);
-
- EXPECT_EQ(42u, encoding.size());
- // 624485
- EXPECT_EQ(0xe5, encoding[0]);
- EXPECT_EQ(0x8e, encoding[1]);
- EXPECT_EQ(0x26, encoding[2]);
- // 0
- EXPECT_EQ(0x00, encoding[3]);
- // 1
- EXPECT_EQ(0x01, encoding[4]);
- // 63
- EXPECT_EQ(0x3f, encoding[5]);
- // 64
- EXPECT_EQ(0xc0, encoding[6]);
- EXPECT_EQ(0x00, encoding[7]);
- // -1
- EXPECT_EQ(0x7f, encoding[8]);
- // -624485
- EXPECT_EQ(0x9b, encoding[9]);
- EXPECT_EQ(0xf1, encoding[10]);
- EXPECT_EQ(0x59, encoding[11]);
- // 2147483647
- EXPECT_EQ(0xff, encoding[12]);
- EXPECT_EQ(0xff, encoding[13]);
- EXPECT_EQ(0xff, encoding[14]);
- EXPECT_EQ(0xff, encoding[15]);
- EXPECT_EQ(0x07, encoding[16]);
- // -2147483648
- EXPECT_EQ(0x80, encoding[17]);
- EXPECT_EQ(0x80, encoding[18]);
- EXPECT_EQ(0x80, encoding[19]);
- EXPECT_EQ(0x80, encoding[20]);
- EXPECT_EQ(0x78, encoding[21]);
- // 9223372036854775807
- EXPECT_EQ(0xff, encoding[22]);
- EXPECT_EQ(0xff, encoding[23]);
- EXPECT_EQ(0xff, encoding[24]);
- EXPECT_EQ(0xff, encoding[25]);
- EXPECT_EQ(0xff, encoding[26]);
- EXPECT_EQ(0xff, encoding[27]);
- EXPECT_EQ(0xff, encoding[28]);
- EXPECT_EQ(0xff, encoding[29]);
- EXPECT_EQ(0xff, encoding[30]);
- EXPECT_EQ(0x00, encoding[31]);
- // -9223372036854775808
- EXPECT_EQ(0x80, encoding[32]);
- EXPECT_EQ(0x80, encoding[33]);
- EXPECT_EQ(0x80, encoding[34]);
- EXPECT_EQ(0x80, encoding[35]);
- EXPECT_EQ(0x80, encoding[36]);
- EXPECT_EQ(0x80, encoding[37]);
- EXPECT_EQ(0x80, encoding[38]);
- EXPECT_EQ(0x80, encoding[39]);
- EXPECT_EQ(0x80, encoding[40]);
- EXPECT_EQ(0x7f, encoding[41]);
-}
-
-TEST(Sleb128, Decoder) {
- std::vector<uint8_t> encoding;
- // 624485
- encoding.push_back(0xe5);
- encoding.push_back(0x8e);
- encoding.push_back(0x26);
- // 0
- encoding.push_back(0x00);
- // 1
- encoding.push_back(0x01);
- // 63
- encoding.push_back(0x3f);
- // 64
- encoding.push_back(0xc0);
- encoding.push_back(0x00);
- // -1
- encoding.push_back(0x7f);
- // -624485
- encoding.push_back(0x9b);
- encoding.push_back(0xf1);
- encoding.push_back(0x59);
- // 2147483647
- encoding.push_back(0xff);
- encoding.push_back(0xff);
- encoding.push_back(0xff);
- encoding.push_back(0xff);
- encoding.push_back(0x07);
- // -2147483648
- encoding.push_back(0x80);
- encoding.push_back(0x80);
- encoding.push_back(0x80);
- encoding.push_back(0x80);
- encoding.push_back(0x78);
- // 9223372036854775807
- encoding.push_back(0xff);
- encoding.push_back(0xff);
- encoding.push_back(0xff);
- encoding.push_back(0xff);
- encoding.push_back(0xff);
- encoding.push_back(0xff);
- encoding.push_back(0xff);
- encoding.push_back(0xff);
- encoding.push_back(0xff);
- encoding.push_back(0x00);
- // -9223372036854775808
- encoding.push_back(0x80);
- encoding.push_back(0x80);
- encoding.push_back(0x80);
- encoding.push_back(0x80);
- encoding.push_back(0x80);
- encoding.push_back(0x80);
- encoding.push_back(0x80);
- encoding.push_back(0x80);
- encoding.push_back(0x80);
- encoding.push_back(0x7f);
-
- Sleb128Decoder<uint64_t> decoder(encoding, 0);
-
- EXPECT_EQ(624485U, decoder.Dequeue());
-
- std::vector<uint64_t> dequeued;
- decoder.DequeueAll(&dequeued);
-
- EXPECT_EQ(10U, dequeued.size());
- EXPECT_EQ(0U, dequeued[0]);
- EXPECT_EQ(1U, dequeued[1]);
- EXPECT_EQ(63U, dequeued[2]);
- EXPECT_EQ(64U, dequeued[3]);
- EXPECT_EQ(static_cast<uint64_t>(-1), dequeued[4]);
- EXPECT_EQ(static_cast<uint64_t>(-624485), dequeued[5]);
- EXPECT_EQ(2147483647U, dequeued[6]);
- EXPECT_EQ(static_cast<uint64_t>(-2147483648), dequeued[7]);
- EXPECT_EQ(9223372036854775807ULL, dequeued[8]);
- EXPECT_EQ(static_cast<uint64_t>(-9223372036854775807LL - 1), dequeued[9]);
-}
-
-} // namespace relocation_packer
diff --git a/tools/relocation_packer/test_data/elf_file_unittest_relocs.cc b/tools/relocation_packer/test_data/elf_file_unittest_relocs.cc
deleted file mode 100644
index 5e1fa74..0000000
--- a/tools/relocation_packer/test_data/elf_file_unittest_relocs.cc
+++ /dev/null
@@ -1,1014 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Test data for packing/unpacking. When compiled, creates a run of
-// relative relocations.
-//
-// See generate_elf_file_unittest_relocs.sh for instructions on how to build
-// unit test data from this source file.
-
-const int i = 0;
-
-// Generator:
-// python -c 'for i in xrange(0,1000):print"const void* pointer_%d = &i;"%i'
-const void* pointer_0 = &i;
-const void* pointer_1 = &i;
-const void* pointer_2 = &i;
-const void* pointer_3 = &i;
-const void* pointer_4 = &i;
-const void* pointer_5 = &i;
-const void* pointer_6 = &i;
-const void* pointer_7 = &i;
-const void* pointer_8 = &i;
-const void* pointer_9 = &i;
-const void* pointer_10 = &i;
-const void* pointer_11 = &i;
-const void* pointer_12 = &i;
-const void* pointer_13 = &i;
-const void* pointer_14 = &i;
-const void* pointer_15 = &i;
-const void* pointer_16 = &i;
-const void* pointer_17 = &i;
-const void* pointer_18 = &i;
-const void* pointer_19 = &i;
-const void* pointer_20 = &i;
-const void* pointer_21 = &i;
-const void* pointer_22 = &i;
-const void* pointer_23 = &i;
-const void* pointer_24 = &i;
-const void* pointer_25 = &i;
-const void* pointer_26 = &i;
-const void* pointer_27 = &i;
-const void* pointer_28 = &i;
-const void* pointer_29 = &i;
-const void* pointer_30 = &i;
-const void* pointer_31 = &i;
-const void* pointer_32 = &i;
-const void* pointer_33 = &i;
-const void* pointer_34 = &i;
-const void* pointer_35 = &i;
-const void* pointer_36 = &i;
-const void* pointer_37 = &i;
-const void* pointer_38 = &i;
-const void* pointer_39 = &i;
-const void* pointer_40 = &i;
-const void* pointer_41 = &i;
-const void* pointer_42 = &i;
-const void* pointer_43 = &i;
-const void* pointer_44 = &i;
-const void* pointer_45 = &i;
-const void* pointer_46 = &i;
-const void* pointer_47 = &i;
-const void* pointer_48 = &i;
-const void* pointer_49 = &i;
-const void* pointer_50 = &i;
-const void* pointer_51 = &i;
-const void* pointer_52 = &i;
-const void* pointer_53 = &i;
-const void* pointer_54 = &i;
-const void* pointer_55 = &i;
-const void* pointer_56 = &i;
-const void* pointer_57 = &i;
-const void* pointer_58 = &i;
-const void* pointer_59 = &i;
-const void* pointer_60 = &i;
-const void* pointer_61 = &i;
-const void* pointer_62 = &i;
-const void* pointer_63 = &i;
-const void* pointer_64 = &i;
-const void* pointer_65 = &i;
-const void* pointer_66 = &i;
-const void* pointer_67 = &i;
-const void* pointer_68 = &i;
-const void* pointer_69 = &i;
-const void* pointer_70 = &i;
-const void* pointer_71 = &i;
-const void* pointer_72 = &i;
-const void* pointer_73 = &i;
-const void* pointer_74 = &i;
-const void* pointer_75 = &i;
-const void* pointer_76 = &i;
-const void* pointer_77 = &i;
-const void* pointer_78 = &i;
-const void* pointer_79 = &i;
-const void* pointer_80 = &i;
-const void* pointer_81 = &i;
-const void* pointer_82 = &i;
-const void* pointer_83 = &i;
-const void* pointer_84 = &i;
-const void* pointer_85 = &i;
-const void* pointer_86 = &i;
-const void* pointer_87 = &i;
-const void* pointer_88 = &i;
-const void* pointer_89 = &i;
-const void* pointer_90 = &i;
-const void* pointer_91 = &i;
-const void* pointer_92 = &i;
-const void* pointer_93 = &i;
-const void* pointer_94 = &i;
-const void* pointer_95 = &i;
-const void* pointer_96 = &i;
-const void* pointer_97 = &i;
-const void* pointer_98 = &i;
-const void* pointer_99 = &i;
-const void* pointer_100 = &i;
-const void* pointer_101 = &i;
-const void* pointer_102 = &i;
-const void* pointer_103 = &i;
-const void* pointer_104 = &i;
-const void* pointer_105 = &i;
-const void* pointer_106 = &i;
-const void* pointer_107 = &i;
-const void* pointer_108 = &i;
-const void* pointer_109 = &i;
-const void* pointer_110 = &i;
-const void* pointer_111 = &i;
-const void* pointer_112 = &i;
-const void* pointer_113 = &i;
-const void* pointer_114 = &i;
-const void* pointer_115 = &i;
-const void* pointer_116 = &i;
-const void* pointer_117 = &i;
-const void* pointer_118 = &i;
-const void* pointer_119 = &i;
-const void* pointer_120 = &i;
-const void* pointer_121 = &i;
-const void* pointer_122 = &i;
-const void* pointer_123 = &i;
-const void* pointer_124 = &i;
-const void* pointer_125 = &i;
-const void* pointer_126 = &i;
-const void* pointer_127 = &i;
-const void* pointer_128 = &i;
-const void* pointer_129 = &i;
-const void* pointer_130 = &i;
-const void* pointer_131 = &i;
-const void* pointer_132 = &i;
-const void* pointer_133 = &i;
-const void* pointer_134 = &i;
-const void* pointer_135 = &i;
-const void* pointer_136 = &i;
-const void* pointer_137 = &i;
-const void* pointer_138 = &i;
-const void* pointer_139 = &i;
-const void* pointer_140 = &i;
-const void* pointer_141 = &i;
-const void* pointer_142 = &i;
-const void* pointer_143 = &i;
-const void* pointer_144 = &i;
-const void* pointer_145 = &i;
-const void* pointer_146 = &i;
-const void* pointer_147 = &i;
-const void* pointer_148 = &i;
-const void* pointer_149 = &i;
-const void* pointer_150 = &i;
-const void* pointer_151 = &i;
-const void* pointer_152 = &i;
-const void* pointer_153 = &i;
-const void* pointer_154 = &i;
-const void* pointer_155 = &i;
-const void* pointer_156 = &i;
-const void* pointer_157 = &i;
-const void* pointer_158 = &i;
-const void* pointer_159 = &i;
-const void* pointer_160 = &i;
-const void* pointer_161 = &i;
-const void* pointer_162 = &i;
-const void* pointer_163 = &i;
-const void* pointer_164 = &i;
-const void* pointer_165 = &i;
-const void* pointer_166 = &i;
-const void* pointer_167 = &i;
-const void* pointer_168 = &i;
-const void* pointer_169 = &i;
-const void* pointer_170 = &i;
-const void* pointer_171 = &i;
-const void* pointer_172 = &i;
-const void* pointer_173 = &i;
-const void* pointer_174 = &i;
-const void* pointer_175 = &i;
-const void* pointer_176 = &i;
-const void* pointer_177 = &i;
-const void* pointer_178 = &i;
-const void* pointer_179 = &i;
-const void* pointer_180 = &i;
-const void* pointer_181 = &i;
-const void* pointer_182 = &i;
-const void* pointer_183 = &i;
-const void* pointer_184 = &i;
-const void* pointer_185 = &i;
-const void* pointer_186 = &i;
-const void* pointer_187 = &i;
-const void* pointer_188 = &i;
-const void* pointer_189 = &i;
-const void* pointer_190 = &i;
-const void* pointer_191 = &i;
-const void* pointer_192 = &i;
-const void* pointer_193 = &i;
-const void* pointer_194 = &i;
-const void* pointer_195 = &i;
-const void* pointer_196 = &i;
-const void* pointer_197 = &i;
-const void* pointer_198 = &i;
-const void* pointer_199 = &i;
-const void* pointer_200 = &i;
-const void* pointer_201 = &i;
-const void* pointer_202 = &i;
-const void* pointer_203 = &i;
-const void* pointer_204 = &i;
-const void* pointer_205 = &i;
-const void* pointer_206 = &i;
-const void* pointer_207 = &i;
-const void* pointer_208 = &i;
-const void* pointer_209 = &i;
-const void* pointer_210 = &i;
-const void* pointer_211 = &i;
-const void* pointer_212 = &i;
-const void* pointer_213 = &i;
-const void* pointer_214 = &i;
-const void* pointer_215 = &i;
-const void* pointer_216 = &i;
-const void* pointer_217 = &i;
-const void* pointer_218 = &i;
-const void* pointer_219 = &i;
-const void* pointer_220 = &i;
-const void* pointer_221 = &i;
-const void* pointer_222 = &i;
-const void* pointer_223 = &i;
-const void* pointer_224 = &i;
-const void* pointer_225 = &i;
-const void* pointer_226 = &i;
-const void* pointer_227 = &i;
-const void* pointer_228 = &i;
-const void* pointer_229 = &i;
-const void* pointer_230 = &i;
-const void* pointer_231 = &i;
-const void* pointer_232 = &i;
-const void* pointer_233 = &i;
-const void* pointer_234 = &i;
-const void* pointer_235 = &i;
-const void* pointer_236 = &i;
-const void* pointer_237 = &i;
-const void* pointer_238 = &i;
-const void* pointer_239 = &i;
-const void* pointer_240 = &i;
-const void* pointer_241 = &i;
-const void* pointer_242 = &i;
-const void* pointer_243 = &i;
-const void* pointer_244 = &i;
-const void* pointer_245 = &i;
-const void* pointer_246 = &i;
-const void* pointer_247 = &i;
-const void* pointer_248 = &i;
-const void* pointer_249 = &i;
-const void* pointer_250 = &i;
-const void* pointer_251 = &i;
-const void* pointer_252 = &i;
-const void* pointer_253 = &i;
-const void* pointer_254 = &i;
-const void* pointer_255 = &i;
-const void* pointer_256 = &i;
-const void* pointer_257 = &i;
-const void* pointer_258 = &i;
-const void* pointer_259 = &i;
-const void* pointer_260 = &i;
-const void* pointer_261 = &i;
-const void* pointer_262 = &i;
-const void* pointer_263 = &i;
-const void* pointer_264 = &i;
-const void* pointer_265 = &i;
-const void* pointer_266 = &i;
-const void* pointer_267 = &i;
-const void* pointer_268 = &i;
-const void* pointer_269 = &i;
-const void* pointer_270 = &i;
-const void* pointer_271 = &i;
-const void* pointer_272 = &i;
-const void* pointer_273 = &i;
-const void* pointer_274 = &i;
-const void* pointer_275 = &i;
-const void* pointer_276 = &i;
-const void* pointer_277 = &i;
-const void* pointer_278 = &i;
-const void* pointer_279 = &i;
-const void* pointer_280 = &i;
-const void* pointer_281 = &i;
-const void* pointer_282 = &i;
-const void* pointer_283 = &i;
-const void* pointer_284 = &i;
-const void* pointer_285 = &i;
-const void* pointer_286 = &i;
-const void* pointer_287 = &i;
-const void* pointer_288 = &i;
-const void* pointer_289 = &i;
-const void* pointer_290 = &i;
-const void* pointer_291 = &i;
-const void* pointer_292 = &i;
-const void* pointer_293 = &i;
-const void* pointer_294 = &i;
-const void* pointer_295 = &i;
-const void* pointer_296 = &i;
-const void* pointer_297 = &i;
-const void* pointer_298 = &i;
-const void* pointer_299 = &i;
-const void* pointer_300 = &i;
-const void* pointer_301 = &i;
-const void* pointer_302 = &i;
-const void* pointer_303 = &i;
-const void* pointer_304 = &i;
-const void* pointer_305 = &i;
-const void* pointer_306 = &i;
-const void* pointer_307 = &i;
-const void* pointer_308 = &i;
-const void* pointer_309 = &i;
-const void* pointer_310 = &i;
-const void* pointer_311 = &i;
-const void* pointer_312 = &i;
-const void* pointer_313 = &i;
-const void* pointer_314 = &i;
-const void* pointer_315 = &i;
-const void* pointer_316 = &i;
-const void* pointer_317 = &i;
-const void* pointer_318 = &i;
-const void* pointer_319 = &i;
-const void* pointer_320 = &i;
-const void* pointer_321 = &i;
-const void* pointer_322 = &i;
-const void* pointer_323 = &i;
-const void* pointer_324 = &i;
-const void* pointer_325 = &i;
-const void* pointer_326 = &i;
-const void* pointer_327 = &i;
-const void* pointer_328 = &i;
-const void* pointer_329 = &i;
-const void* pointer_330 = &i;
-const void* pointer_331 = &i;
-const void* pointer_332 = &i;
-const void* pointer_333 = &i;
-const void* pointer_334 = &i;
-const void* pointer_335 = &i;
-const void* pointer_336 = &i;
-const void* pointer_337 = &i;
-const void* pointer_338 = &i;
-const void* pointer_339 = &i;
-const void* pointer_340 = &i;
-const void* pointer_341 = &i;
-const void* pointer_342 = &i;
-const void* pointer_343 = &i;
-const void* pointer_344 = &i;
-const void* pointer_345 = &i;
-const void* pointer_346 = &i;
-const void* pointer_347 = &i;
-const void* pointer_348 = &i;
-const void* pointer_349 = &i;
-const void* pointer_350 = &i;
-const void* pointer_351 = &i;
-const void* pointer_352 = &i;
-const void* pointer_353 = &i;
-const void* pointer_354 = &i;
-const void* pointer_355 = &i;
-const void* pointer_356 = &i;
-const void* pointer_357 = &i;
-const void* pointer_358 = &i;
-const void* pointer_359 = &i;
-const void* pointer_360 = &i;
-const void* pointer_361 = &i;
-const void* pointer_362 = &i;
-const void* pointer_363 = &i;
-const void* pointer_364 = &i;
-const void* pointer_365 = &i;
-const void* pointer_366 = &i;
-const void* pointer_367 = &i;
-const void* pointer_368 = &i;
-const void* pointer_369 = &i;
-const void* pointer_370 = &i;
-const void* pointer_371 = &i;
-const void* pointer_372 = &i;
-const void* pointer_373 = &i;
-const void* pointer_374 = &i;
-const void* pointer_375 = &i;
-const void* pointer_376 = &i;
-const void* pointer_377 = &i;
-const void* pointer_378 = &i;
-const void* pointer_379 = &i;
-const void* pointer_380 = &i;
-const void* pointer_381 = &i;
-const void* pointer_382 = &i;
-const void* pointer_383 = &i;
-const void* pointer_384 = &i;
-const void* pointer_385 = &i;
-const void* pointer_386 = &i;
-const void* pointer_387 = &i;
-const void* pointer_388 = &i;
-const void* pointer_389 = &i;
-const void* pointer_390 = &i;
-const void* pointer_391 = &i;
-const void* pointer_392 = &i;
-const void* pointer_393 = &i;
-const void* pointer_394 = &i;
-const void* pointer_395 = &i;
-const void* pointer_396 = &i;
-const void* pointer_397 = &i;
-const void* pointer_398 = &i;
-const void* pointer_399 = &i;
-const void* pointer_400 = &i;
-const void* pointer_401 = &i;
-const void* pointer_402 = &i;
-const void* pointer_403 = &i;
-const void* pointer_404 = &i;
-const void* pointer_405 = &i;
-const void* pointer_406 = &i;
-const void* pointer_407 = &i;
-const void* pointer_408 = &i;
-const void* pointer_409 = &i;
-const void* pointer_410 = &i;
-const void* pointer_411 = &i;
-const void* pointer_412 = &i;
-const void* pointer_413 = &i;
-const void* pointer_414 = &i;
-const void* pointer_415 = &i;
-const void* pointer_416 = &i;
-const void* pointer_417 = &i;
-const void* pointer_418 = &i;
-const void* pointer_419 = &i;
-const void* pointer_420 = &i;
-const void* pointer_421 = &i;
-const void* pointer_422 = &i;
-const void* pointer_423 = &i;
-const void* pointer_424 = &i;
-const void* pointer_425 = &i;
-const void* pointer_426 = &i;
-const void* pointer_427 = &i;
-const void* pointer_428 = &i;
-const void* pointer_429 = &i;
-const void* pointer_430 = &i;
-const void* pointer_431 = &i;
-const void* pointer_432 = &i;
-const void* pointer_433 = &i;
-const void* pointer_434 = &i;
-const void* pointer_435 = &i;
-const void* pointer_436 = &i;
-const void* pointer_437 = &i;
-const void* pointer_438 = &i;
-const void* pointer_439 = &i;
-const void* pointer_440 = &i;
-const void* pointer_441 = &i;
-const void* pointer_442 = &i;
-const void* pointer_443 = &i;
-const void* pointer_444 = &i;
-const void* pointer_445 = &i;
-const void* pointer_446 = &i;
-const void* pointer_447 = &i;
-const void* pointer_448 = &i;
-const void* pointer_449 = &i;
-const void* pointer_450 = &i;
-const void* pointer_451 = &i;
-const void* pointer_452 = &i;
-const void* pointer_453 = &i;
-const void* pointer_454 = &i;
-const void* pointer_455 = &i;
-const void* pointer_456 = &i;
-const void* pointer_457 = &i;
-const void* pointer_458 = &i;
-const void* pointer_459 = &i;
-const void* pointer_460 = &i;
-const void* pointer_461 = &i;
-const void* pointer_462 = &i;
-const void* pointer_463 = &i;
-const void* pointer_464 = &i;
-const void* pointer_465 = &i;
-const void* pointer_466 = &i;
-const void* pointer_467 = &i;
-const void* pointer_468 = &i;
-const void* pointer_469 = &i;
-const void* pointer_470 = &i;
-const void* pointer_471 = &i;
-const void* pointer_472 = &i;
-const void* pointer_473 = &i;
-const void* pointer_474 = &i;
-const void* pointer_475 = &i;
-const void* pointer_476 = &i;
-const void* pointer_477 = &i;
-const void* pointer_478 = &i;
-const void* pointer_479 = &i;
-const void* pointer_480 = &i;
-const void* pointer_481 = &i;
-const void* pointer_482 = &i;
-const void* pointer_483 = &i;
-const void* pointer_484 = &i;
-const void* pointer_485 = &i;
-const void* pointer_486 = &i;
-const void* pointer_487 = &i;
-const void* pointer_488 = &i;
-const void* pointer_489 = &i;
-const void* pointer_490 = &i;
-const void* pointer_491 = &i;
-const void* pointer_492 = &i;
-const void* pointer_493 = &i;
-const void* pointer_494 = &i;
-const void* pointer_495 = &i;
-const void* pointer_496 = &i;
-const void* pointer_497 = &i;
-const void* pointer_498 = &i;
-const void* pointer_499 = &i;
-const void* pointer_500 = &i;
-const void* pointer_501 = &i;
-const void* pointer_502 = &i;
-const void* pointer_503 = &i;
-const void* pointer_504 = &i;
-const void* pointer_505 = &i;
-const void* pointer_506 = &i;
-const void* pointer_507 = &i;
-const void* pointer_508 = &i;
-const void* pointer_509 = &i;
-const void* pointer_510 = &i;
-const void* pointer_511 = &i;
-const void* pointer_512 = &i;
-const void* pointer_513 = &i;
-const void* pointer_514 = &i;
-const void* pointer_515 = &i;
-const void* pointer_516 = &i;
-const void* pointer_517 = &i;
-const void* pointer_518 = &i;
-const void* pointer_519 = &i;
-const void* pointer_520 = &i;
-const void* pointer_521 = &i;
-const void* pointer_522 = &i;
-const void* pointer_523 = &i;
-const void* pointer_524 = &i;
-const void* pointer_525 = &i;
-const void* pointer_526 = &i;
-const void* pointer_527 = &i;
-const void* pointer_528 = &i;
-const void* pointer_529 = &i;
-const void* pointer_530 = &i;
-const void* pointer_531 = &i;
-const void* pointer_532 = &i;
-const void* pointer_533 = &i;
-const void* pointer_534 = &i;
-const void* pointer_535 = &i;
-const void* pointer_536 = &i;
-const void* pointer_537 = &i;
-const void* pointer_538 = &i;
-const void* pointer_539 = &i;
-const void* pointer_540 = &i;
-const void* pointer_541 = &i;
-const void* pointer_542 = &i;
-const void* pointer_543 = &i;
-const void* pointer_544 = &i;
-const void* pointer_545 = &i;
-const void* pointer_546 = &i;
-const void* pointer_547 = &i;
-const void* pointer_548 = &i;
-const void* pointer_549 = &i;
-const void* pointer_550 = &i;
-const void* pointer_551 = &i;
-const void* pointer_552 = &i;
-const void* pointer_553 = &i;
-const void* pointer_554 = &i;
-const void* pointer_555 = &i;
-const void* pointer_556 = &i;
-const void* pointer_557 = &i;
-const void* pointer_558 = &i;
-const void* pointer_559 = &i;
-const void* pointer_560 = &i;
-const void* pointer_561 = &i;
-const void* pointer_562 = &i;
-const void* pointer_563 = &i;
-const void* pointer_564 = &i;
-const void* pointer_565 = &i;
-const void* pointer_566 = &i;
-const void* pointer_567 = &i;
-const void* pointer_568 = &i;
-const void* pointer_569 = &i;
-const void* pointer_570 = &i;
-const void* pointer_571 = &i;
-const void* pointer_572 = &i;
-const void* pointer_573 = &i;
-const void* pointer_574 = &i;
-const void* pointer_575 = &i;
-const void* pointer_576 = &i;
-const void* pointer_577 = &i;
-const void* pointer_578 = &i;
-const void* pointer_579 = &i;
-const void* pointer_580 = &i;
-const void* pointer_581 = &i;
-const void* pointer_582 = &i;
-const void* pointer_583 = &i;
-const void* pointer_584 = &i;
-const void* pointer_585 = &i;
-const void* pointer_586 = &i;
-const void* pointer_587 = &i;
-const void* pointer_588 = &i;
-const void* pointer_589 = &i;
-const void* pointer_590 = &i;
-const void* pointer_591 = &i;
-const void* pointer_592 = &i;
-const void* pointer_593 = &i;
-const void* pointer_594 = &i;
-const void* pointer_595 = &i;
-const void* pointer_596 = &i;
-const void* pointer_597 = &i;
-const void* pointer_598 = &i;
-const void* pointer_599 = &i;
-const void* pointer_600 = &i;
-const void* pointer_601 = &i;
-const void* pointer_602 = &i;
-const void* pointer_603 = &i;
-const void* pointer_604 = &i;
-const void* pointer_605 = &i;
-const void* pointer_606 = &i;
-const void* pointer_607 = &i;
-const void* pointer_608 = &i;
-const void* pointer_609 = &i;
-const void* pointer_610 = &i;
-const void* pointer_611 = &i;
-const void* pointer_612 = &i;
-const void* pointer_613 = &i;
-const void* pointer_614 = &i;
-const void* pointer_615 = &i;
-const void* pointer_616 = &i;
-const void* pointer_617 = &i;
-const void* pointer_618 = &i;
-const void* pointer_619 = &i;
-const void* pointer_620 = &i;
-const void* pointer_621 = &i;
-const void* pointer_622 = &i;
-const void* pointer_623 = &i;
-const void* pointer_624 = &i;
-const void* pointer_625 = &i;
-const void* pointer_626 = &i;
-const void* pointer_627 = &i;
-const void* pointer_628 = &i;
-const void* pointer_629 = &i;
-const void* pointer_630 = &i;
-const void* pointer_631 = &i;
-const void* pointer_632 = &i;
-const void* pointer_633 = &i;
-const void* pointer_634 = &i;
-const void* pointer_635 = &i;
-const void* pointer_636 = &i;
-const void* pointer_637 = &i;
-const void* pointer_638 = &i;
-const void* pointer_639 = &i;
-const void* pointer_640 = &i;
-const void* pointer_641 = &i;
-const void* pointer_642 = &i;
-const void* pointer_643 = &i;
-const void* pointer_644 = &i;
-const void* pointer_645 = &i;
-const void* pointer_646 = &i;
-const void* pointer_647 = &i;
-const void* pointer_648 = &i;
-const void* pointer_649 = &i;
-const void* pointer_650 = &i;
-const void* pointer_651 = &i;
-const void* pointer_652 = &i;
-const void* pointer_653 = &i;
-const void* pointer_654 = &i;
-const void* pointer_655 = &i;
-const void* pointer_656 = &i;
-const void* pointer_657 = &i;
-const void* pointer_658 = &i;
-const void* pointer_659 = &i;
-const void* pointer_660 = &i;
-const void* pointer_661 = &i;
-const void* pointer_662 = &i;
-const void* pointer_663 = &i;
-const void* pointer_664 = &i;
-const void* pointer_665 = &i;
-const void* pointer_666 = &i;
-const void* pointer_667 = &i;
-const void* pointer_668 = &i;
-const void* pointer_669 = &i;
-const void* pointer_670 = &i;
-const void* pointer_671 = &i;
-const void* pointer_672 = &i;
-const void* pointer_673 = &i;
-const void* pointer_674 = &i;
-const void* pointer_675 = &i;
-const void* pointer_676 = &i;
-const void* pointer_677 = &i;
-const void* pointer_678 = &i;
-const void* pointer_679 = &i;
-const void* pointer_680 = &i;
-const void* pointer_681 = &i;
-const void* pointer_682 = &i;
-const void* pointer_683 = &i;
-const void* pointer_684 = &i;
-const void* pointer_685 = &i;
-const void* pointer_686 = &i;
-const void* pointer_687 = &i;
-const void* pointer_688 = &i;
-const void* pointer_689 = &i;
-const void* pointer_690 = &i;
-const void* pointer_691 = &i;
-const void* pointer_692 = &i;
-const void* pointer_693 = &i;
-const void* pointer_694 = &i;
-const void* pointer_695 = &i;
-const void* pointer_696 = &i;
-const void* pointer_697 = &i;
-const void* pointer_698 = &i;
-const void* pointer_699 = &i;
-const void* pointer_700 = &i;
-const void* pointer_701 = &i;
-const void* pointer_702 = &i;
-const void* pointer_703 = &i;
-const void* pointer_704 = &i;
-const void* pointer_705 = &i;
-const void* pointer_706 = &i;
-const void* pointer_707 = &i;
-const void* pointer_708 = &i;
-const void* pointer_709 = &i;
-const void* pointer_710 = &i;
-const void* pointer_711 = &i;
-const void* pointer_712 = &i;
-const void* pointer_713 = &i;
-const void* pointer_714 = &i;
-const void* pointer_715 = &i;
-const void* pointer_716 = &i;
-const void* pointer_717 = &i;
-const void* pointer_718 = &i;
-const void* pointer_719 = &i;
-const void* pointer_720 = &i;
-const void* pointer_721 = &i;
-const void* pointer_722 = &i;
-const void* pointer_723 = &i;
-const void* pointer_724 = &i;
-const void* pointer_725 = &i;
-const void* pointer_726 = &i;
-const void* pointer_727 = &i;
-const void* pointer_728 = &i;
-const void* pointer_729 = &i;
-const void* pointer_730 = &i;
-const void* pointer_731 = &i;
-const void* pointer_732 = &i;
-const void* pointer_733 = &i;
-const void* pointer_734 = &i;
-const void* pointer_735 = &i;
-const void* pointer_736 = &i;
-const void* pointer_737 = &i;
-const void* pointer_738 = &i;
-const void* pointer_739 = &i;
-const void* pointer_740 = &i;
-const void* pointer_741 = &i;
-const void* pointer_742 = &i;
-const void* pointer_743 = &i;
-const void* pointer_744 = &i;
-const void* pointer_745 = &i;
-const void* pointer_746 = &i;
-const void* pointer_747 = &i;
-const void* pointer_748 = &i;
-const void* pointer_749 = &i;
-const void* pointer_750 = &i;
-const void* pointer_751 = &i;
-const void* pointer_752 = &i;
-const void* pointer_753 = &i;
-const void* pointer_754 = &i;
-const void* pointer_755 = &i;
-const void* pointer_756 = &i;
-const void* pointer_757 = &i;
-const void* pointer_758 = &i;
-const void* pointer_759 = &i;
-const void* pointer_760 = &i;
-const void* pointer_761 = &i;
-const void* pointer_762 = &i;
-const void* pointer_763 = &i;
-const void* pointer_764 = &i;
-const void* pointer_765 = &i;
-const void* pointer_766 = &i;
-const void* pointer_767 = &i;
-const void* pointer_768 = &i;
-const void* pointer_769 = &i;
-const void* pointer_770 = &i;
-const void* pointer_771 = &i;
-const void* pointer_772 = &i;
-const void* pointer_773 = &i;
-const void* pointer_774 = &i;
-const void* pointer_775 = &i;
-const void* pointer_776 = &i;
-const void* pointer_777 = &i;
-const void* pointer_778 = &i;
-const void* pointer_779 = &i;
-const void* pointer_780 = &i;
-const void* pointer_781 = &i;
-const void* pointer_782 = &i;
-const void* pointer_783 = &i;
-const void* pointer_784 = &i;
-const void* pointer_785 = &i;
-const void* pointer_786 = &i;
-const void* pointer_787 = &i;
-const void* pointer_788 = &i;
-const void* pointer_789 = &i;
-const void* pointer_790 = &i;
-const void* pointer_791 = &i;
-const void* pointer_792 = &i;
-const void* pointer_793 = &i;
-const void* pointer_794 = &i;
-const void* pointer_795 = &i;
-const void* pointer_796 = &i;
-const void* pointer_797 = &i;
-const void* pointer_798 = &i;
-const void* pointer_799 = &i;
-const void* pointer_800 = &i;
-const void* pointer_801 = &i;
-const void* pointer_802 = &i;
-const void* pointer_803 = &i;
-const void* pointer_804 = &i;
-const void* pointer_805 = &i;
-const void* pointer_806 = &i;
-const void* pointer_807 = &i;
-const void* pointer_808 = &i;
-const void* pointer_809 = &i;
-const void* pointer_810 = &i;
-const void* pointer_811 = &i;
-const void* pointer_812 = &i;
-const void* pointer_813 = &i;
-const void* pointer_814 = &i;
-const void* pointer_815 = &i;
-const void* pointer_816 = &i;
-const void* pointer_817 = &i;
-const void* pointer_818 = &i;
-const void* pointer_819 = &i;
-const void* pointer_820 = &i;
-const void* pointer_821 = &i;
-const void* pointer_822 = &i;
-const void* pointer_823 = &i;
-const void* pointer_824 = &i;
-const void* pointer_825 = &i;
-const void* pointer_826 = &i;
-const void* pointer_827 = &i;
-const void* pointer_828 = &i;
-const void* pointer_829 = &i;
-const void* pointer_830 = &i;
-const void* pointer_831 = &i;
-const void* pointer_832 = &i;
-const void* pointer_833 = &i;
-const void* pointer_834 = &i;
-const void* pointer_835 = &i;
-const void* pointer_836 = &i;
-const void* pointer_837 = &i;
-const void* pointer_838 = &i;
-const void* pointer_839 = &i;
-const void* pointer_840 = &i;
-const void* pointer_841 = &i;
-const void* pointer_842 = &i;
-const void* pointer_843 = &i;
-const void* pointer_844 = &i;
-const void* pointer_845 = &i;
-const void* pointer_846 = &i;
-const void* pointer_847 = &i;
-const void* pointer_848 = &i;
-const void* pointer_849 = &i;
-const void* pointer_850 = &i;
-const void* pointer_851 = &i;
-const void* pointer_852 = &i;
-const void* pointer_853 = &i;
-const void* pointer_854 = &i;
-const void* pointer_855 = &i;
-const void* pointer_856 = &i;
-const void* pointer_857 = &i;
-const void* pointer_858 = &i;
-const void* pointer_859 = &i;
-const void* pointer_860 = &i;
-const void* pointer_861 = &i;
-const void* pointer_862 = &i;
-const void* pointer_863 = &i;
-const void* pointer_864 = &i;
-const void* pointer_865 = &i;
-const void* pointer_866 = &i;
-const void* pointer_867 = &i;
-const void* pointer_868 = &i;
-const void* pointer_869 = &i;
-const void* pointer_870 = &i;
-const void* pointer_871 = &i;
-const void* pointer_872 = &i;
-const void* pointer_873 = &i;
-const void* pointer_874 = &i;
-const void* pointer_875 = &i;
-const void* pointer_876 = &i;
-const void* pointer_877 = &i;
-const void* pointer_878 = &i;
-const void* pointer_879 = &i;
-const void* pointer_880 = &i;
-const void* pointer_881 = &i;
-const void* pointer_882 = &i;
-const void* pointer_883 = &i;
-const void* pointer_884 = &i;
-const void* pointer_885 = &i;
-const void* pointer_886 = &i;
-const void* pointer_887 = &i;
-const void* pointer_888 = &i;
-const void* pointer_889 = &i;
-const void* pointer_890 = &i;
-const void* pointer_891 = &i;
-const void* pointer_892 = &i;
-const void* pointer_893 = &i;
-const void* pointer_894 = &i;
-const void* pointer_895 = &i;
-const void* pointer_896 = &i;
-const void* pointer_897 = &i;
-const void* pointer_898 = &i;
-const void* pointer_899 = &i;
-const void* pointer_900 = &i;
-const void* pointer_901 = &i;
-const void* pointer_902 = &i;
-const void* pointer_903 = &i;
-const void* pointer_904 = &i;
-const void* pointer_905 = &i;
-const void* pointer_906 = &i;
-const void* pointer_907 = &i;
-const void* pointer_908 = &i;
-const void* pointer_909 = &i;
-const void* pointer_910 = &i;
-const void* pointer_911 = &i;
-const void* pointer_912 = &i;
-const void* pointer_913 = &i;
-const void* pointer_914 = &i;
-const void* pointer_915 = &i;
-const void* pointer_916 = &i;
-const void* pointer_917 = &i;
-const void* pointer_918 = &i;
-const void* pointer_919 = &i;
-const void* pointer_920 = &i;
-const void* pointer_921 = &i;
-const void* pointer_922 = &i;
-const void* pointer_923 = &i;
-const void* pointer_924 = &i;
-const void* pointer_925 = &i;
-const void* pointer_926 = &i;
-const void* pointer_927 = &i;
-const void* pointer_928 = &i;
-const void* pointer_929 = &i;
-const void* pointer_930 = &i;
-const void* pointer_931 = &i;
-const void* pointer_932 = &i;
-const void* pointer_933 = &i;
-const void* pointer_934 = &i;
-const void* pointer_935 = &i;
-const void* pointer_936 = &i;
-const void* pointer_937 = &i;
-const void* pointer_938 = &i;
-const void* pointer_939 = &i;
-const void* pointer_940 = &i;
-const void* pointer_941 = &i;
-const void* pointer_942 = &i;
-const void* pointer_943 = &i;
-const void* pointer_944 = &i;
-const void* pointer_945 = &i;
-const void* pointer_946 = &i;
-const void* pointer_947 = &i;
-const void* pointer_948 = &i;
-const void* pointer_949 = &i;
-const void* pointer_950 = &i;
-const void* pointer_951 = &i;
-const void* pointer_952 = &i;
-const void* pointer_953 = &i;
-const void* pointer_954 = &i;
-const void* pointer_955 = &i;
-const void* pointer_956 = &i;
-const void* pointer_957 = &i;
-const void* pointer_958 = &i;
-const void* pointer_959 = &i;
-const void* pointer_960 = &i;
-const void* pointer_961 = &i;
-const void* pointer_962 = &i;
-const void* pointer_963 = &i;
-const void* pointer_964 = &i;
-const void* pointer_965 = &i;
-const void* pointer_966 = &i;
-const void* pointer_967 = &i;
-const void* pointer_968 = &i;
-const void* pointer_969 = &i;
-const void* pointer_970 = &i;
-const void* pointer_971 = &i;
-const void* pointer_972 = &i;
-const void* pointer_973 = &i;
-const void* pointer_974 = &i;
-const void* pointer_975 = &i;
-const void* pointer_976 = &i;
-const void* pointer_977 = &i;
-const void* pointer_978 = &i;
-const void* pointer_979 = &i;
-const void* pointer_980 = &i;
-const void* pointer_981 = &i;
-const void* pointer_982 = &i;
-const void* pointer_983 = &i;
-const void* pointer_984 = &i;
-const void* pointer_985 = &i;
-const void* pointer_986 = &i;
-const void* pointer_987 = &i;
-const void* pointer_988 = &i;
-const void* pointer_989 = &i;
-const void* pointer_990 = &i;
-const void* pointer_991 = &i;
-const void* pointer_992 = &i;
-const void* pointer_993 = &i;
-const void* pointer_994 = &i;
-const void* pointer_995 = &i;
-const void* pointer_996 = &i;
-const void* pointer_997 = &i;
-const void* pointer_998 = &i;
-const void* pointer_999 = &i;
diff --git a/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm32.so b/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm32.so
deleted file mode 100755
index 5e339ae..0000000
--- a/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm32.so
+++ /dev/null
Binary files differ
diff --git a/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm32_packed.so b/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm32_packed.so
deleted file mode 100755
index 253dd97..0000000
--- a/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm32_packed.so
+++ /dev/null
Binary files differ
diff --git a/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm64.so b/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm64.so
deleted file mode 100755
index d3d0194..0000000
--- a/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm64.so
+++ /dev/null
Binary files differ
diff --git a/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm64_packed.so b/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm64_packed.so
deleted file mode 100755
index 269b975..0000000
--- a/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm64_packed.so
+++ /dev/null
Binary files differ
diff --git a/tools/relocation_packer/test_data/elf_file_unittest_relocs_ia32.so b/tools/relocation_packer/test_data/elf_file_unittest_relocs_ia32.so
deleted file mode 100755
index 42db62c..0000000
--- a/tools/relocation_packer/test_data/elf_file_unittest_relocs_ia32.so
+++ /dev/null
Binary files differ
diff --git a/tools/relocation_packer/test_data/elf_file_unittest_relocs_ia32_packed.so b/tools/relocation_packer/test_data/elf_file_unittest_relocs_ia32_packed.so
deleted file mode 100755
index 27817cc..0000000
--- a/tools/relocation_packer/test_data/elf_file_unittest_relocs_ia32_packed.so
+++ /dev/null
Binary files differ
diff --git a/tools/relocation_packer/test_data/elf_file_unittest_relocs_mips32.so b/tools/relocation_packer/test_data/elf_file_unittest_relocs_mips32.so
deleted file mode 100755
index 6da324b..0000000
--- a/tools/relocation_packer/test_data/elf_file_unittest_relocs_mips32.so
+++ /dev/null
Binary files differ
diff --git a/tools/relocation_packer/test_data/elf_file_unittest_relocs_mips32_packed.so b/tools/relocation_packer/test_data/elf_file_unittest_relocs_mips32_packed.so
deleted file mode 100755
index b11ca48..0000000
--- a/tools/relocation_packer/test_data/elf_file_unittest_relocs_mips32_packed.so
+++ /dev/null
Binary files differ
diff --git a/tools/relocation_packer/test_data/elf_file_unittest_relocs_x64.so b/tools/relocation_packer/test_data/elf_file_unittest_relocs_x64.so
deleted file mode 100755
index 6cb689e..0000000
--- a/tools/relocation_packer/test_data/elf_file_unittest_relocs_x64.so
+++ /dev/null
Binary files differ
diff --git a/tools/relocation_packer/test_data/elf_file_unittest_relocs_x64_packed.so b/tools/relocation_packer/test_data/elf_file_unittest_relocs_x64_packed.so
deleted file mode 100755
index 60b9ad1..0000000
--- a/tools/relocation_packer/test_data/elf_file_unittest_relocs_x64_packed.so
+++ /dev/null
Binary files differ