summaryrefslogtreecommitdiff
path: root/extra
diff options
context:
space:
mode:
Diffstat (limited to 'extra')
-rw-r--r--extra/CMakeLists.txt36
-rw-r--r--extra/comp_err.c71
-rw-r--r--extra/crc32-vpmsum/CMakeLists.txt9
-rw-r--r--extra/crc32-vpmsum/clang_workaround.h87
-rw-r--r--extra/crc32-vpmsum/crc32c_constants.h1206
-rw-r--r--extra/crc32-vpmsum/crc32ieee_constants.h1206
-rw-r--r--extra/crc32-vpmsum/vec_crc32.c674
-rw-r--r--extra/innochecksum.cc66
-rw-r--r--extra/mariabackup/CMakeLists.txt18
-rw-r--r--extra/mariabackup/backup_copy.cc35
-rw-r--r--extra/mariabackup/backup_mysql.cc48
-rw-r--r--extra/mariabackup/crc/CMakeLists.txt33
-rw-r--r--extra/mariabackup/crc/config.h.cmake21
-rw-r--r--extra/mariabackup/crc/crc-intel-pclmul.c511
-rw-r--r--extra/mariabackup/crc/crc-intel-pclmul.h25
-rw-r--r--extra/mariabackup/crc/crc_glue.c72
-rw-r--r--extra/mariabackup/crc/crc_glue.h31
-rw-r--r--extra/mariabackup/ds_buffer.cc11
-rw-r--r--extra/mariabackup/ds_compress.cc25
-rw-r--r--extra/mariabackup/ds_local.cc6
-rw-r--r--extra/mariabackup/ds_stdout.cc10
-rw-r--r--extra/mariabackup/ds_tmpfile.cc15
-rw-r--r--extra/mariabackup/ds_xbstream.cc7
-rw-r--r--extra/mariabackup/fil_cur.cc84
-rw-r--r--extra/mariabackup/fil_cur.h6
-rw-r--r--extra/mariabackup/innobackupex.cc9
-rw-r--r--extra/mariabackup/write_filt.cc8
-rw-r--r--extra/mariabackup/xb_regex.h3
-rw-r--r--extra/mariabackup/xbstream.cc25
-rw-r--r--extra/mariabackup/xbstream_read.cc8
-rw-r--r--extra/mariabackup/xbstream_write.cc7
-rw-r--r--extra/mariabackup/xtrabackup.cc905
-rw-r--r--extra/mariabackup/xtrabackup.h14
-rw-r--r--extra/my_print_defaults.c49
-rw-r--r--extra/mysql_waitpid.c7
-rw-r--r--extra/perror.c28
-rw-r--r--extra/replace.c59
-rw-r--r--extra/resolve_stack_dump.c11
-rw-r--r--extra/resolveip.c7
39 files changed, 738 insertions, 4715 deletions
diff --git a/extra/CMakeLists.txt b/extra/CMakeLists.txt
index 2fc56ce5e98..f53e9fdf8d8 100644
--- a/extra/CMakeLists.txt
+++ b/extra/CMakeLists.txt
@@ -1,14 +1,14 @@
# Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
-#
+#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
-#
+#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
-#
+#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
@@ -18,7 +18,7 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${ZLIB_INCLUDE_DIR})
# Default install component for the files is Server here
SET(MYSQL_INSTALL_COMPONENT Server)
-IF(NOT CMAKE_CROSSCOMPILING)
+IF(NOT CMAKE_CROSSCOMPILING OR DEFINED CMAKE_CROSSCOMPILING_EMULATOR)
ADD_EXECUTABLE(comp_err comp_err.c)
TARGET_LINK_LIBRARIES(comp_err mysys)
ENDIF()
@@ -30,9 +30,9 @@ ENDIF()
# to mysqld_error.h using cmake -E copy_if_different
ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_BINARY_DIR}/include/mysqld_error.h.tmp
COMMAND comp_err
- --charset=${PROJECT_SOURCE_DIR}/sql/share/charsets
+ --charset=${PROJECT_SOURCE_DIR}/sql/share/charsets
--out-dir=${CMAKE_BINARY_DIR}/sql/share/
- --header_file=${CMAKE_BINARY_DIR}/include/mysqld_error.h.tmp
+ --header_file=${CMAKE_BINARY_DIR}/include/mysqld_error.h.tmp
--name_file=${CMAKE_BINARY_DIR}/include/mysqld_ername.h.tmp
--state_file=${CMAKE_BINARY_DIR}/include/sql_state.h.tmp
--in_file=${PROJECT_SOURCE_DIR}/sql/share/errmsg-utf8.txt
@@ -43,10 +43,10 @@ ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_BINARY_DIR}/include/mysqld_error.h.tmp
ADD_CUSTOM_TARGET(GenError
ALL
- DEPENDS
+ DEPENDS
${CMAKE_BINARY_DIR}/include/mysqld_error.h.tmp)
-MYSQL_ADD_EXECUTABLE(my_print_defaults my_print_defaults.c)
+MYSQL_ADD_EXECUTABLE(my_print_defaults my_print_defaults.c COMPONENT Client)
TARGET_LINK_LIBRARIES(my_print_defaults mysys)
MYSQL_ADD_EXECUTABLE(perror perror.c)
@@ -73,20 +73,8 @@ IF(WITH_INNOBASE_STORAGE_ENGINE)
# We use the InnoDB code directly in case the code changes.
ADD_DEFINITIONS("-DUNIV_INNOCHECKSUM")
- # Avoid generating Hardware Capabilities due to crc32 instructions
- IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND CMAKE_SYSTEM_PROCESSOR MATCHES "i386")
- MY_CHECK_CXX_COMPILER_FLAG("-Wa,-nH")
- IF(have_CXX__Wa__nH)
- ADD_COMPILE_FLAGS(
- ../storage/innobase/ut/ut0crc32.cc
- COMPILE_FLAGS "-Wa,-nH"
- )
- ENDIF()
- ENDIF()
-
SET(INNOBASE_SOURCES
../storage/innobase/buf/buf0checksum.cc
- ../storage/innobase/ut/ut0crc32.cc
../storage/innobase/ut/ut0ut.cc
../storage/innobase/buf/buf0buf.cc
../storage/innobase/page/page0zip.cc
@@ -106,9 +94,9 @@ IF(UNIX)
MYSQL_ADD_EXECUTABLE(resolve_stack_dump resolve_stack_dump.c)
TARGET_LINK_LIBRARIES(resolve_stack_dump mysys)
- MYSQL_ADD_EXECUTABLE(mysql_waitpid mysql_waitpid.c COMPONENT Client)
- TARGET_LINK_LIBRARIES(mysql_waitpid mysys)
+ MYSQL_ADD_EXECUTABLE(mariadb-waitpid mysql_waitpid.c COMPONENT Client)
+ TARGET_LINK_LIBRARIES(mariadb-waitpid mysys)
- MYSQL_ADD_EXECUTABLE(mysqld_safe_helper mysqld_safe_helper.c COMPONENT Server)
- TARGET_LINK_LIBRARIES(mysqld_safe_helper mysys)
+ MYSQL_ADD_EXECUTABLE(mariadbd-safe-helper mysqld_safe_helper.c COMPONENT Server)
+ TARGET_LINK_LIBRARIES(mariadbd-safe-helper mysys)
ENDIF()
diff --git a/extra/comp_err.c b/extra/comp_err.c
index 79d84dd390c..aab57c5ff28 100644
--- a/extra/comp_err.c
+++ b/extra/comp_err.c
@@ -31,6 +31,7 @@
#include <m_string.h>
#include <my_getopt.h>
#include <my_dir.h>
+#include <ctype.h>
#define MAX_ROWS 3000
#define ERRORS_PER_RANGE 1000
@@ -65,6 +66,7 @@ const char *empty_string= ""; /* For empty states */
*/
const char *default_language= "eng";
+my_bool default_language_changed= 0;
uint er_offset= 1000;
my_bool info_flag= 0;
@@ -150,8 +152,6 @@ static uint parse_input_file(const char *file_name, struct errors **top_error,
static int get_options(int *argc, char ***argv);
static void print_version(void);
static void usage(void);
-static my_bool get_one_option(int optid, const struct my_option *opt,
- char *argument);
static char *parse_text_line(char *pos);
static int copy_rows(FILE * to, char *row, int row_nr, long start_pos);
static char *parse_default_language(char *str);
@@ -441,7 +441,8 @@ static void clean_up(struct languages *lang_head, struct errors *error_head)
struct errors *tmp_error, *next_error;
uint count, i;
- my_free((void*) default_language);
+ if (default_language_changed)
+ my_free((void*) default_language);
for (tmp_lang= lang_head; tmp_lang; tmp_lang= next_language)
{
@@ -563,6 +564,7 @@ static uint parse_input_file(const char *file_name, struct errors **top_error,
"Failed to parse the default language line. Aborting\n");
DBUG_RETURN(0);
}
+ default_language_changed= 1;
continue;
}
@@ -751,18 +753,19 @@ static struct message *find_message(struct errors *err, const char *lang,
for the format specifiers
RETURN VALUE
- Returns the checksum for all the characters of the
+ Returns the checksum for all letters of the
format specifiers
Ex.
- "text '%-64.s' text part 2 %d'"
- ^^^^^^ ^^
+ "text '%-.64s' text part 2 %zu'"
+ ^ ^^
characters will be xored to form checksum
+ Non-letters are skipped, because they do not change the type
+ of the argument.
+
NOTE:
- Does not support format specifiers with positional args
- like "%2$s" but that is not yet supported by my_vsnprintf
- either.
+ Does not support format specifiers with positional args like "%2$s"
*/
static ha_checksum checksum_format_specifier(const char* msg)
@@ -779,8 +782,9 @@ static ha_checksum checksum_format_specifier(const char* msg)
start= p+1; /* Entering format specifier */
num_format_specifiers++;
}
- else if (start)
+ else if (start && isalpha(*p))
{
+ chksum= my_checksum(chksum, p, 1);
switch(*p) {
case 'd':
case 'u':
@@ -788,12 +792,8 @@ static ha_checksum checksum_format_specifier(const char* msg)
case 's':
case 'M':
case 'T':
- chksum= my_checksum(chksum, (uchar*) start, (uint) (p + 1 - start));
start= 0; /* Not in format specifier anymore */
break;
-
- default:
- break;
}
}
@@ -890,7 +890,7 @@ static char *get_word(char **str)
DBUG_ENTER("get_word");
*str= find_end_of_word(start);
- DBUG_RETURN(my_strndup(start, (uint) (*str - start),
+ DBUG_RETURN(my_strndup(PSI_NOT_INSTRUMENTED, start, (uint) (*str - start),
MYF(MY_WME | MY_FAE)));
}
@@ -924,7 +924,7 @@ static struct message *parse_message_string(struct message *new_message,
while (*str != ' ' && *str != '\t' && *str)
str++;
if (!(new_message->lang_short_name=
- my_strndup(start, (uint) (str - start),
+ my_strndup(PSI_NOT_INSTRUMENTED, start, (uint) (str - start),
MYF(MY_WME | MY_FAE))))
DBUG_RETURN(0); /* Fatal error */
DBUG_PRINT("info", ("msg_slang: %s", new_message->lang_short_name));
@@ -944,9 +944,9 @@ static struct message *parse_message_string(struct message *new_message,
start= str + 1;
str= parse_text_line(start);
- if (!(new_message->text= my_strndup(start, (uint) (str - start),
- MYF(MY_WME | MY_FAE))))
- DBUG_RETURN(0); /* Fatal error */
+ if (!(new_message->text= my_strndup(PSI_NOT_INSTRUMENTED, start,
+ (uint) (str - start), MYF(MY_WME | MY_FAE))))
+ DBUG_RETURN(0);
DBUG_PRINT("info", ("msg_text: %s", new_message->text));
DBUG_RETURN(new_message);
@@ -959,11 +959,11 @@ static struct errors *generate_empty_message(uint d_code, my_bool skip)
struct message message;
/* create a new element */
- if (!(new_error= (struct errors *) my_malloc(sizeof(*new_error),
- MYF(MY_WME))))
+ if (!(new_error= (struct errors *) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(*new_error), MYF(MY_WME))))
return(0);
- if (my_init_dynamic_array(&new_error->msg, sizeof(struct message), 0, 1,
- MYF(0)))
+ if (my_init_dynamic_array(PSI_NOT_INSTRUMENTED, &new_error->msg,
+ sizeof(struct message), 0, 1, MYF(0)))
return(0); /* OOM: Fatal error */
new_error->er_name= NULL;
@@ -974,8 +974,10 @@ static struct errors *generate_empty_message(uint d_code, my_bool skip)
message.text= 0; /* If skip set, don't generate a text */
- if (!(message.lang_short_name= my_strdup(default_language, MYF(MY_WME))) ||
- (!skip && !(message.text= my_strdup("", MYF(MY_WME)))))
+ if (!(message.lang_short_name= my_strdup(PSI_NOT_INSTRUMENTED,
+ default_language, MYF(MY_WME))) ||
+ (!skip && !(message.text= my_strdup(PSI_NOT_INSTRUMENTED,
+ "", MYF(MY_WME)))))
return(0);
/* Can't fail as msg is preallocated */
@@ -996,13 +998,14 @@ static struct errors *parse_error_string(char *str, int er_count)
DBUG_PRINT("enter", ("str: %s", str));
/* create a new element */
- if (!(new_error= (struct errors *) my_malloc(sizeof(*new_error),
- MYF(MY_WME))))
+ if (!(new_error= (struct errors *) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(*new_error), MYF(MY_WME))))
DBUG_RETURN(0);
new_error->next_error= 0;
- if (my_init_dynamic_array(&new_error->msg, sizeof(struct message), 0, 0, MYF(0)))
- DBUG_RETURN(0); /* OOM: Fatal error */
+ if (my_init_dynamic_array(PSI_NOT_INSTRUMENTED, &new_error->msg,
+ sizeof(struct message), 0, 0, MYF(0)))
+ DBUG_RETURN(0);
/* getting the error name */
str= skip_delimiters(str);
@@ -1088,7 +1091,8 @@ static struct languages *parse_charset_string(char *str)
do
{
/*creating new element of the linked list */
- new_lang= (struct languages *) my_malloc(sizeof(*new_lang), MYF(MY_WME));
+ new_lang= (struct languages *) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(*new_lang), MYF(MY_WME));
new_lang->next_lang= head;
head= new_lang;
@@ -1135,11 +1139,12 @@ static void print_version(void)
static my_bool
-get_one_option(int optid, const struct my_option *opt __attribute__ ((unused)),
- char *argument __attribute__ ((unused)))
+get_one_option(const struct my_option *opt,
+ const char *argument __attribute__ ((unused)),
+ const char *filename __attribute__ ((unused)))
{
DBUG_ENTER("get_one_option");
- switch (optid) {
+ switch (opt->id) {
case 'V':
print_version();
my_end(0);
diff --git a/extra/crc32-vpmsum/CMakeLists.txt b/extra/crc32-vpmsum/CMakeLists.txt
deleted file mode 100644
index b4adebdadf5..00000000000
--- a/extra/crc32-vpmsum/CMakeLists.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-ADD_CONVENIENCE_LIBRARY(${CRC32_LIBRARY} $<TARGET_OBJECTS:crc32c> $<TARGET_OBJECTS:crc32ieee>)
-ADD_LIBRARY(crc32c OBJECT vec_crc32.c)
-ADD_LIBRARY(crc32ieee OBJECT vec_crc32.c)
-
-GET_PROPERTY(CFLAGS_CRC32_VPMSUM TARGET ${CRC32_LIBRARY} PROPERTY COMPILE_FLAGS)
-SET_TARGET_PROPERTIES(crc32c crc32ieee PROPERTIES COMPILE_FLAGS "${CFLAGS_CRC32_VPMSUM} -maltivec -mvsx -mpower8-vector -mcrypto -mpower8-vector")
-SET_TARGET_PROPERTIES(crc32ieee PROPERTIES COMPILE_DEFINITIONS "CRC32_FUNCTION=crc32ieee_vpmsum;CRC32_CONSTANTS_HEADER=\"crc32ieee_constants.h\"")
-SET_TARGET_PROPERTIES(crc32c PROPERTIES COMPILE_DEFINITIONS "CRC32_FUNCTION=crc32c_vpmsum;CRC32_CONSTANTS_HEADER=\"crc32c_constants.h\"")
-
diff --git a/extra/crc32-vpmsum/clang_workaround.h b/extra/crc32-vpmsum/clang_workaround.h
deleted file mode 100644
index 915f7e5282f..00000000000
--- a/extra/crc32-vpmsum/clang_workaround.h
+++ /dev/null
@@ -1,87 +0,0 @@
-#ifndef CLANG_WORKAROUNDS_H
-#define CLANG_WORKAROUNDS_H
-
-/*
- * These stubs fix clang incompatibilities with GCC builtins.
- */
-
-#ifndef __builtin_crypto_vpmsumw
-#define __builtin_crypto_vpmsumw __builtin_crypto_vpmsumb
-#endif
-#ifndef __builtin_crypto_vpmsumd
-#define __builtin_crypto_vpmsumd __builtin_crypto_vpmsumb
-#endif
-
-static inline
-__vector unsigned long long __attribute__((overloadable))
-vec_ld(int __a, const __vector unsigned long long* __b)
-{
- return (__vector unsigned long long)__builtin_altivec_lvx(__a, __b);
-}
-
-/*
- * GCC __builtin_pack_vector_int128 returns a vector __int128_t but Clang
- * does not recognize this type. On GCC this builtin is translated to a
- * xxpermdi instruction that only moves the registers __a, __b instead generates
- * a load.
- *
- * Clang has vec_xxpermdi intrinsics. It was implemented in 4.0.0.
- */
-static inline
-__vector unsigned long long __builtin_pack_vector (unsigned long __a,
- unsigned long __b)
-{
- #if defined(__BIG_ENDIAN__)
- __vector unsigned long long __v = {__a, __b};
- #else
- __vector unsigned long long __v = {__b, __a};
- #endif
- return __v;
-}
-
-/*
- * Clang 7 changed the behavior of vec_xxpermdi in order to provide the same
- * behavior of GCC. That means code adapted to Clang >= 7 does not work on
- * Clang <= 6. So, fallback to __builtin_unpack_vector() on Clang <= 6.
- */
-#if !defined vec_xxpermdi || __clang_major__ <= 6
-
-static inline
-unsigned long __builtin_unpack_vector (__vector unsigned long long __v,
- int __o)
-{
- return __v[__o];
-}
-
-#if defined(__BIG_ENDIAN__)
-#define __builtin_unpack_vector_0(a) __builtin_unpack_vector ((a), 0)
-#define __builtin_unpack_vector_1(a) __builtin_unpack_vector ((a), 1)
-#else
-#define __builtin_unpack_vector_0(a) __builtin_unpack_vector ((a), 1)
-#define __builtin_unpack_vector_1(a) __builtin_unpack_vector ((a), 0)
-#endif
-
-#else
-
-static inline
-unsigned long __builtin_unpack_vector_0 (__vector unsigned long long __v)
-{
- #if defined(__BIG_ENDIAN__)
- return vec_xxpermdi(__v, __v, 0x0)[0];
- #else
- return vec_xxpermdi(__v, __v, 0x3)[0];
- #endif
-}
-
-static inline
-unsigned long __builtin_unpack_vector_1 (__vector unsigned long long __v)
-{
- #if defined(__BIG_ENDIAN__)
- return vec_xxpermdi(__v, __v, 0x3)[0];
- #else
- return vec_xxpermdi(__v, __v, 0x0)[0];
- #endif
-}
-#endif /* vec_xxpermdi */
-
-#endif
diff --git a/extra/crc32-vpmsum/crc32c_constants.h b/extra/crc32-vpmsum/crc32c_constants.h
deleted file mode 100644
index 40b216b6057..00000000000
--- a/extra/crc32-vpmsum/crc32c_constants.h
+++ /dev/null
@@ -1,1206 +0,0 @@
-/*
-*
-* THIS FILE IS GENERATED WITH
-./crc32_constants -c -x -r 0x1edc6f41
-
-* This is from https://github.com/antonblanchard/crc32-vpmsum/
-* DO NOT MODIFY IT MANUALLY!
-*
-*/
-
-#define CRC 0x1edc6f41
-#define CRC_XOR
-#define REFLECT
-#define MAX_SIZE 32768
-
-#ifndef __ASSEMBLER__
-#ifdef CRC_TABLE
-static const unsigned int crc_table[] = {
- 0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4,
- 0xc79a971f, 0x35f1141c, 0x26a1e7e8, 0xd4ca64eb,
- 0x8ad958cf, 0x78b2dbcc, 0x6be22838, 0x9989ab3b,
- 0x4d43cfd0, 0xbf284cd3, 0xac78bf27, 0x5e133c24,
- 0x105ec76f, 0xe235446c, 0xf165b798, 0x030e349b,
- 0xd7c45070, 0x25afd373, 0x36ff2087, 0xc494a384,
- 0x9a879fa0, 0x68ec1ca3, 0x7bbcef57, 0x89d76c54,
- 0x5d1d08bf, 0xaf768bbc, 0xbc267848, 0x4e4dfb4b,
- 0x20bd8ede, 0xd2d60ddd, 0xc186fe29, 0x33ed7d2a,
- 0xe72719c1, 0x154c9ac2, 0x061c6936, 0xf477ea35,
- 0xaa64d611, 0x580f5512, 0x4b5fa6e6, 0xb93425e5,
- 0x6dfe410e, 0x9f95c20d, 0x8cc531f9, 0x7eaeb2fa,
- 0x30e349b1, 0xc288cab2, 0xd1d83946, 0x23b3ba45,
- 0xf779deae, 0x05125dad, 0x1642ae59, 0xe4292d5a,
- 0xba3a117e, 0x4851927d, 0x5b016189, 0xa96ae28a,
- 0x7da08661, 0x8fcb0562, 0x9c9bf696, 0x6ef07595,
- 0x417b1dbc, 0xb3109ebf, 0xa0406d4b, 0x522bee48,
- 0x86e18aa3, 0x748a09a0, 0x67dafa54, 0x95b17957,
- 0xcba24573, 0x39c9c670, 0x2a993584, 0xd8f2b687,
- 0x0c38d26c, 0xfe53516f, 0xed03a29b, 0x1f682198,
- 0x5125dad3, 0xa34e59d0, 0xb01eaa24, 0x42752927,
- 0x96bf4dcc, 0x64d4cecf, 0x77843d3b, 0x85efbe38,
- 0xdbfc821c, 0x2997011f, 0x3ac7f2eb, 0xc8ac71e8,
- 0x1c661503, 0xee0d9600, 0xfd5d65f4, 0x0f36e6f7,
- 0x61c69362, 0x93ad1061, 0x80fde395, 0x72966096,
- 0xa65c047d, 0x5437877e, 0x4767748a, 0xb50cf789,
- 0xeb1fcbad, 0x197448ae, 0x0a24bb5a, 0xf84f3859,
- 0x2c855cb2, 0xdeeedfb1, 0xcdbe2c45, 0x3fd5af46,
- 0x7198540d, 0x83f3d70e, 0x90a324fa, 0x62c8a7f9,
- 0xb602c312, 0x44694011, 0x5739b3e5, 0xa55230e6,
- 0xfb410cc2, 0x092a8fc1, 0x1a7a7c35, 0xe811ff36,
- 0x3cdb9bdd, 0xceb018de, 0xdde0eb2a, 0x2f8b6829,
- 0x82f63b78, 0x709db87b, 0x63cd4b8f, 0x91a6c88c,
- 0x456cac67, 0xb7072f64, 0xa457dc90, 0x563c5f93,
- 0x082f63b7, 0xfa44e0b4, 0xe9141340, 0x1b7f9043,
- 0xcfb5f4a8, 0x3dde77ab, 0x2e8e845f, 0xdce5075c,
- 0x92a8fc17, 0x60c37f14, 0x73938ce0, 0x81f80fe3,
- 0x55326b08, 0xa759e80b, 0xb4091bff, 0x466298fc,
- 0x1871a4d8, 0xea1a27db, 0xf94ad42f, 0x0b21572c,
- 0xdfeb33c7, 0x2d80b0c4, 0x3ed04330, 0xccbbc033,
- 0xa24bb5a6, 0x502036a5, 0x4370c551, 0xb11b4652,
- 0x65d122b9, 0x97baa1ba, 0x84ea524e, 0x7681d14d,
- 0x2892ed69, 0xdaf96e6a, 0xc9a99d9e, 0x3bc21e9d,
- 0xef087a76, 0x1d63f975, 0x0e330a81, 0xfc588982,
- 0xb21572c9, 0x407ef1ca, 0x532e023e, 0xa145813d,
- 0x758fe5d6, 0x87e466d5, 0x94b49521, 0x66df1622,
- 0x38cc2a06, 0xcaa7a905, 0xd9f75af1, 0x2b9cd9f2,
- 0xff56bd19, 0x0d3d3e1a, 0x1e6dcdee, 0xec064eed,
- 0xc38d26c4, 0x31e6a5c7, 0x22b65633, 0xd0ddd530,
- 0x0417b1db, 0xf67c32d8, 0xe52cc12c, 0x1747422f,
- 0x49547e0b, 0xbb3ffd08, 0xa86f0efc, 0x5a048dff,
- 0x8ecee914, 0x7ca56a17, 0x6ff599e3, 0x9d9e1ae0,
- 0xd3d3e1ab, 0x21b862a8, 0x32e8915c, 0xc083125f,
- 0x144976b4, 0xe622f5b7, 0xf5720643, 0x07198540,
- 0x590ab964, 0xab613a67, 0xb831c993, 0x4a5a4a90,
- 0x9e902e7b, 0x6cfbad78, 0x7fab5e8c, 0x8dc0dd8f,
- 0xe330a81a, 0x115b2b19, 0x020bd8ed, 0xf0605bee,
- 0x24aa3f05, 0xd6c1bc06, 0xc5914ff2, 0x37faccf1,
- 0x69e9f0d5, 0x9b8273d6, 0x88d28022, 0x7ab90321,
- 0xae7367ca, 0x5c18e4c9, 0x4f48173d, 0xbd23943e,
- 0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81,
- 0x34f4f86a, 0xc69f7b69, 0xd5cf889d, 0x27a40b9e,
- 0x79b737ba, 0x8bdcb4b9, 0x988c474d, 0x6ae7c44e,
- 0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351,};
-
-#endif /* CRC_TABLE */
-#ifdef POWER8_INTRINSICS
-
-/* Constants */
-
-/* Reduce 262144 kbits to 1024 bits */
-static const __vector unsigned long long vcrc_const[255]
- __attribute__((aligned (16))) = {
-#ifdef __LITTLE_ENDIAN__
- /* x^261120 mod p(x)` << 1, x^261184 mod p(x)` << 1 */
- { 0x000000009c37c408, 0x00000000b6ca9e20 },
- /* x^260096 mod p(x)` << 1, x^260160 mod p(x)` << 1 */
- { 0x00000001b51df26c, 0x00000000350249a8 },
- /* x^259072 mod p(x)` << 1, x^259136 mod p(x)` << 1 */
- { 0x000000000724b9d0, 0x00000001862dac54 },
- /* x^258048 mod p(x)` << 1, x^258112 mod p(x)` << 1 */
- { 0x00000001c00532fe, 0x00000001d87fb48c },
- /* x^257024 mod p(x)` << 1, x^257088 mod p(x)` << 1 */
- { 0x00000000f05a9362, 0x00000001f39b699e },
- /* x^256000 mod p(x)` << 1, x^256064 mod p(x)` << 1 */
- { 0x00000001e1007970, 0x0000000101da11b4 },
- /* x^254976 mod p(x)` << 1, x^255040 mod p(x)` << 1 */
- { 0x00000000a57366ee, 0x00000001cab571e0 },
- /* x^253952 mod p(x)` << 1, x^254016 mod p(x)` << 1 */
- { 0x0000000192011284, 0x00000000c7020cfe },
- /* x^252928 mod p(x)` << 1, x^252992 mod p(x)` << 1 */
- { 0x0000000162716d9a, 0x00000000cdaed1ae },
- /* x^251904 mod p(x)` << 1, x^251968 mod p(x)` << 1 */
- { 0x00000000cd97ecde, 0x00000001e804effc },
- /* x^250880 mod p(x)` << 1, x^250944 mod p(x)` << 1 */
- { 0x0000000058812bc0, 0x0000000077c3ea3a },
- /* x^249856 mod p(x)` << 1, x^249920 mod p(x)` << 1 */
- { 0x0000000088b8c12e, 0x0000000068df31b4 },
- /* x^248832 mod p(x)` << 1, x^248896 mod p(x)` << 1 */
- { 0x00000001230b234c, 0x00000000b059b6c2 },
- /* x^247808 mod p(x)` << 1, x^247872 mod p(x)` << 1 */
- { 0x00000001120b416e, 0x0000000145fb8ed8 },
- /* x^246784 mod p(x)` << 1, x^246848 mod p(x)` << 1 */
- { 0x00000001974aecb0, 0x00000000cbc09168 },
- /* x^245760 mod p(x)` << 1, x^245824 mod p(x)` << 1 */
- { 0x000000008ee3f226, 0x000000005ceeedc2 },
- /* x^244736 mod p(x)` << 1, x^244800 mod p(x)` << 1 */
- { 0x00000001089aba9a, 0x0000000047d74e86 },
- /* x^243712 mod p(x)` << 1, x^243776 mod p(x)` << 1 */
- { 0x0000000065113872, 0x00000001407e9e22 },
- /* x^242688 mod p(x)` << 1, x^242752 mod p(x)` << 1 */
- { 0x000000005c07ec10, 0x00000001da967bda },
- /* x^241664 mod p(x)` << 1, x^241728 mod p(x)` << 1 */
- { 0x0000000187590924, 0x000000006c898368 },
- /* x^240640 mod p(x)` << 1, x^240704 mod p(x)` << 1 */
- { 0x00000000e35da7c6, 0x00000000f2d14c98 },
- /* x^239616 mod p(x)` << 1, x^239680 mod p(x)` << 1 */
- { 0x000000000415855a, 0x00000001993c6ad4 },
- /* x^238592 mod p(x)` << 1, x^238656 mod p(x)` << 1 */
- { 0x0000000073617758, 0x000000014683d1ac },
- /* x^237568 mod p(x)` << 1, x^237632 mod p(x)` << 1 */
- { 0x0000000176021d28, 0x00000001a7c93e6c },
- /* x^236544 mod p(x)` << 1, x^236608 mod p(x)` << 1 */
- { 0x00000001c358fd0a, 0x000000010211e90a },
- /* x^235520 mod p(x)` << 1, x^235584 mod p(x)` << 1 */
- { 0x00000001ff7a2c18, 0x000000001119403e },
- /* x^234496 mod p(x)` << 1, x^234560 mod p(x)` << 1 */
- { 0x00000000f2d9f7e4, 0x000000001c3261aa },
- /* x^233472 mod p(x)` << 1, x^233536 mod p(x)` << 1 */
- { 0x000000016cf1f9c8, 0x000000014e37a634 },
- /* x^232448 mod p(x)` << 1, x^232512 mod p(x)` << 1 */
- { 0x000000010af9279a, 0x0000000073786c0c },
- /* x^231424 mod p(x)` << 1, x^231488 mod p(x)` << 1 */
- { 0x0000000004f101e8, 0x000000011dc037f8 },
- /* x^230400 mod p(x)` << 1, x^230464 mod p(x)` << 1 */
- { 0x0000000070bcf184, 0x0000000031433dfc },
- /* x^229376 mod p(x)` << 1, x^229440 mod p(x)` << 1 */
- { 0x000000000a8de642, 0x000000009cde8348 },
- /* x^228352 mod p(x)` << 1, x^228416 mod p(x)` << 1 */
- { 0x0000000062ea130c, 0x0000000038d3c2a6 },
- /* x^227328 mod p(x)` << 1, x^227392 mod p(x)` << 1 */
- { 0x00000001eb31cbb2, 0x000000011b25f260 },
- /* x^226304 mod p(x)` << 1, x^226368 mod p(x)` << 1 */
- { 0x0000000170783448, 0x000000001629e6f0 },
- /* x^225280 mod p(x)` << 1, x^225344 mod p(x)` << 1 */
- { 0x00000001a684b4c6, 0x0000000160838b4c },
- /* x^224256 mod p(x)` << 1, x^224320 mod p(x)` << 1 */
- { 0x00000000253ca5b4, 0x000000007a44011c },
- /* x^223232 mod p(x)` << 1, x^223296 mod p(x)` << 1 */
- { 0x0000000057b4b1e2, 0x00000000226f417a },
- /* x^222208 mod p(x)` << 1, x^222272 mod p(x)` << 1 */
- { 0x00000000b6bd084c, 0x0000000045eb2eb4 },
- /* x^221184 mod p(x)` << 1, x^221248 mod p(x)` << 1 */
- { 0x0000000123c2d592, 0x000000014459d70c },
- /* x^220160 mod p(x)` << 1, x^220224 mod p(x)` << 1 */
- { 0x00000000159dafce, 0x00000001d406ed82 },
- /* x^219136 mod p(x)` << 1, x^219200 mod p(x)` << 1 */
- { 0x0000000127e1a64e, 0x0000000160c8e1a8 },
- /* x^218112 mod p(x)` << 1, x^218176 mod p(x)` << 1 */
- { 0x0000000056860754, 0x0000000027ba8098 },
- /* x^217088 mod p(x)` << 1, x^217152 mod p(x)` << 1 */
- { 0x00000001e661aae8, 0x000000006d92d018 },
- /* x^216064 mod p(x)` << 1, x^216128 mod p(x)` << 1 */
- { 0x00000000f82c6166, 0x000000012ed7e3f2 },
- /* x^215040 mod p(x)` << 1, x^215104 mod p(x)` << 1 */
- { 0x00000000c4f9c7ae, 0x000000002dc87788 },
- /* x^214016 mod p(x)` << 1, x^214080 mod p(x)` << 1 */
- { 0x0000000074203d20, 0x0000000018240bb8 },
- /* x^212992 mod p(x)` << 1, x^213056 mod p(x)` << 1 */
- { 0x0000000198173052, 0x000000001ad38158 },
- /* x^211968 mod p(x)` << 1, x^212032 mod p(x)` << 1 */
- { 0x00000001ce8aba54, 0x00000001396b78f2 },
- /* x^210944 mod p(x)` << 1, x^211008 mod p(x)` << 1 */
- { 0x00000001850d5d94, 0x000000011a681334 },
- /* x^209920 mod p(x)` << 1, x^209984 mod p(x)` << 1 */
- { 0x00000001d609239c, 0x000000012104732e },
- /* x^208896 mod p(x)` << 1, x^208960 mod p(x)` << 1 */
- { 0x000000001595f048, 0x00000000a140d90c },
- /* x^207872 mod p(x)` << 1, x^207936 mod p(x)` << 1 */
- { 0x0000000042ccee08, 0x00000001b7215eda },
- /* x^206848 mod p(x)` << 1, x^206912 mod p(x)` << 1 */
- { 0x000000010a389d74, 0x00000001aaf1df3c },
- /* x^205824 mod p(x)` << 1, x^205888 mod p(x)` << 1 */
- { 0x000000012a840da6, 0x0000000029d15b8a },
- /* x^204800 mod p(x)` << 1, x^204864 mod p(x)` << 1 */
- { 0x000000001d181c0c, 0x00000000f1a96922 },
- /* x^203776 mod p(x)` << 1, x^203840 mod p(x)` << 1 */
- { 0x0000000068b7d1f6, 0x00000001ac80d03c },
- /* x^202752 mod p(x)` << 1, x^202816 mod p(x)` << 1 */
- { 0x000000005b0f14fc, 0x000000000f11d56a },
- /* x^201728 mod p(x)` << 1, x^201792 mod p(x)` << 1 */
- { 0x0000000179e9e730, 0x00000001f1c022a2 },
- /* x^200704 mod p(x)` << 1, x^200768 mod p(x)` << 1 */
- { 0x00000001ce1368d6, 0x0000000173d00ae2 },
- /* x^199680 mod p(x)` << 1, x^199744 mod p(x)` << 1 */
- { 0x0000000112c3a84c, 0x00000001d4ffe4ac },
- /* x^198656 mod p(x)` << 1, x^198720 mod p(x)` << 1 */
- { 0x00000000de940fee, 0x000000016edc5ae4 },
- /* x^197632 mod p(x)` << 1, x^197696 mod p(x)` << 1 */
- { 0x00000000fe896b7e, 0x00000001f1a02140 },
- /* x^196608 mod p(x)` << 1, x^196672 mod p(x)` << 1 */
- { 0x00000001f797431c, 0x00000000ca0b28a0 },
- /* x^195584 mod p(x)` << 1, x^195648 mod p(x)` << 1 */
- { 0x0000000053e989ba, 0x00000001928e30a2 },
- /* x^194560 mod p(x)` << 1, x^194624 mod p(x)` << 1 */
- { 0x000000003920cd16, 0x0000000097b1b002 },
- /* x^193536 mod p(x)` << 1, x^193600 mod p(x)` << 1 */
- { 0x00000001e6f579b8, 0x00000000b15bf906 },
- /* x^192512 mod p(x)` << 1, x^192576 mod p(x)` << 1 */
- { 0x000000007493cb0a, 0x00000000411c5d52 },
- /* x^191488 mod p(x)` << 1, x^191552 mod p(x)` << 1 */
- { 0x00000001bdd376d8, 0x00000001c36f3300 },
- /* x^190464 mod p(x)` << 1, x^190528 mod p(x)` << 1 */
- { 0x000000016badfee6, 0x00000001119227e0 },
- /* x^189440 mod p(x)` << 1, x^189504 mod p(x)` << 1 */
- { 0x0000000071de5c58, 0x00000000114d4702 },
- /* x^188416 mod p(x)` << 1, x^188480 mod p(x)` << 1 */
- { 0x00000000453f317c, 0x00000000458b5b98 },
- /* x^187392 mod p(x)` << 1, x^187456 mod p(x)` << 1 */
- { 0x0000000121675cce, 0x000000012e31fb8e },
- /* x^186368 mod p(x)` << 1, x^186432 mod p(x)` << 1 */
- { 0x00000001f409ee92, 0x000000005cf619d8 },
- /* x^185344 mod p(x)` << 1, x^185408 mod p(x)` << 1 */
- { 0x00000000f36b9c88, 0x0000000063f4d8b2 },
- /* x^184320 mod p(x)` << 1, x^184384 mod p(x)` << 1 */
- { 0x0000000036b398f4, 0x000000004138dc8a },
- /* x^183296 mod p(x)` << 1, x^183360 mod p(x)` << 1 */
- { 0x00000001748f9adc, 0x00000001d29ee8e0 },
- /* x^182272 mod p(x)` << 1, x^182336 mod p(x)` << 1 */
- { 0x00000001be94ec00, 0x000000006a08ace8 },
- /* x^181248 mod p(x)` << 1, x^181312 mod p(x)` << 1 */
- { 0x00000000b74370d6, 0x0000000127d42010 },
- /* x^180224 mod p(x)` << 1, x^180288 mod p(x)` << 1 */
- { 0x00000001174d0b98, 0x0000000019d76b62 },
- /* x^179200 mod p(x)` << 1, x^179264 mod p(x)` << 1 */
- { 0x00000000befc06a4, 0x00000001b1471f6e },
- /* x^178176 mod p(x)` << 1, x^178240 mod p(x)` << 1 */
- { 0x00000001ae125288, 0x00000001f64c19cc },
- /* x^177152 mod p(x)` << 1, x^177216 mod p(x)` << 1 */
- { 0x0000000095c19b34, 0x00000000003c0ea0 },
- /* x^176128 mod p(x)` << 1, x^176192 mod p(x)` << 1 */
- { 0x00000001a78496f2, 0x000000014d73abf6 },
- /* x^175104 mod p(x)` << 1, x^175168 mod p(x)` << 1 */
- { 0x00000001ac5390a0, 0x00000001620eb844 },
- /* x^174080 mod p(x)` << 1, x^174144 mod p(x)` << 1 */
- { 0x000000002a80ed6e, 0x0000000147655048 },
- /* x^173056 mod p(x)` << 1, x^173120 mod p(x)` << 1 */
- { 0x00000001fa9b0128, 0x0000000067b5077e },
- /* x^172032 mod p(x)` << 1, x^172096 mod p(x)` << 1 */
- { 0x00000001ea94929e, 0x0000000010ffe206 },
- /* x^171008 mod p(x)` << 1, x^171072 mod p(x)` << 1 */
- { 0x0000000125f4305c, 0x000000000fee8f1e },
- /* x^169984 mod p(x)` << 1, x^170048 mod p(x)` << 1 */
- { 0x00000001471e2002, 0x00000001da26fbae },
- /* x^168960 mod p(x)` << 1, x^169024 mod p(x)` << 1 */
- { 0x0000000132d2253a, 0x00000001b3a8bd88 },
- /* x^167936 mod p(x)` << 1, x^168000 mod p(x)` << 1 */
- { 0x00000000f26b3592, 0x00000000e8f3898e },
- /* x^166912 mod p(x)` << 1, x^166976 mod p(x)` << 1 */
- { 0x00000000bc8b67b0, 0x00000000b0d0d28c },
- /* x^165888 mod p(x)` << 1, x^165952 mod p(x)` << 1 */
- { 0x000000013a826ef2, 0x0000000030f2a798 },
- /* x^164864 mod p(x)` << 1, x^164928 mod p(x)` << 1 */
- { 0x0000000081482c84, 0x000000000fba1002 },
- /* x^163840 mod p(x)` << 1, x^163904 mod p(x)` << 1 */
- { 0x00000000e77307c2, 0x00000000bdb9bd72 },
- /* x^162816 mod p(x)` << 1, x^162880 mod p(x)` << 1 */
- { 0x00000000d4a07ec8, 0x0000000075d3bf5a },
- /* x^161792 mod p(x)` << 1, x^161856 mod p(x)` << 1 */
- { 0x0000000017102100, 0x00000000ef1f98a0 },
- /* x^160768 mod p(x)` << 1, x^160832 mod p(x)` << 1 */
- { 0x00000000db406486, 0x00000000689c7602 },
- /* x^159744 mod p(x)` << 1, x^159808 mod p(x)` << 1 */
- { 0x0000000192db7f88, 0x000000016d5fa5fe },
- /* x^158720 mod p(x)` << 1, x^158784 mod p(x)` << 1 */
- { 0x000000018bf67b1e, 0x00000001d0d2b9ca },
- /* x^157696 mod p(x)` << 1, x^157760 mod p(x)` << 1 */
- { 0x000000007c09163e, 0x0000000041e7b470 },
- /* x^156672 mod p(x)` << 1, x^156736 mod p(x)` << 1 */
- { 0x000000000adac060, 0x00000001cbb6495e },
- /* x^155648 mod p(x)` << 1, x^155712 mod p(x)` << 1 */
- { 0x00000000bd8316ae, 0x000000010052a0b0 },
- /* x^154624 mod p(x)` << 1, x^154688 mod p(x)` << 1 */
- { 0x000000019f09ab54, 0x00000001d8effb5c },
- /* x^153600 mod p(x)` << 1, x^153664 mod p(x)` << 1 */
- { 0x0000000125155542, 0x00000001d969853c },
- /* x^152576 mod p(x)` << 1, x^152640 mod p(x)` << 1 */
- { 0x000000018fdb5882, 0x00000000523ccce2 },
- /* x^151552 mod p(x)` << 1, x^151616 mod p(x)` << 1 */
- { 0x00000000e794b3f4, 0x000000001e2436bc },
- /* x^150528 mod p(x)` << 1, x^150592 mod p(x)` << 1 */
- { 0x000000016f9bb022, 0x00000000ddd1c3a2 },
- /* x^149504 mod p(x)` << 1, x^149568 mod p(x)` << 1 */
- { 0x00000000290c9978, 0x0000000019fcfe38 },
- /* x^148480 mod p(x)` << 1, x^148544 mod p(x)` << 1 */
- { 0x0000000083c0f350, 0x00000001ce95db64 },
- /* x^147456 mod p(x)` << 1, x^147520 mod p(x)` << 1 */
- { 0x0000000173ea6628, 0x00000000af582806 },
- /* x^146432 mod p(x)` << 1, x^146496 mod p(x)` << 1 */
- { 0x00000001c8b4e00a, 0x00000001006388f6 },
- /* x^145408 mod p(x)` << 1, x^145472 mod p(x)` << 1 */
- { 0x00000000de95d6aa, 0x0000000179eca00a },
- /* x^144384 mod p(x)` << 1, x^144448 mod p(x)` << 1 */
- { 0x000000010b7f7248, 0x0000000122410a6a },
- /* x^143360 mod p(x)` << 1, x^143424 mod p(x)` << 1 */
- { 0x00000001326e3a06, 0x000000004288e87c },
- /* x^142336 mod p(x)` << 1, x^142400 mod p(x)` << 1 */
- { 0x00000000bb62c2e6, 0x000000016c5490da },
- /* x^141312 mod p(x)` << 1, x^141376 mod p(x)` << 1 */
- { 0x0000000156a4b2c2, 0x00000000d1c71f6e },
- /* x^140288 mod p(x)` << 1, x^140352 mod p(x)` << 1 */
- { 0x000000011dfe763a, 0x00000001b4ce08a6 },
- /* x^139264 mod p(x)` << 1, x^139328 mod p(x)` << 1 */
- { 0x000000007bcca8e2, 0x00000001466ba60c },
- /* x^138240 mod p(x)` << 1, x^138304 mod p(x)` << 1 */
- { 0x0000000186118faa, 0x00000001f6c488a4 },
- /* x^137216 mod p(x)` << 1, x^137280 mod p(x)` << 1 */
- { 0x0000000111a65a88, 0x000000013bfb0682 },
- /* x^136192 mod p(x)` << 1, x^136256 mod p(x)` << 1 */
- { 0x000000003565e1c4, 0x00000000690e9e54 },
- /* x^135168 mod p(x)` << 1, x^135232 mod p(x)` << 1 */
- { 0x000000012ed02a82, 0x00000000281346b6 },
- /* x^134144 mod p(x)` << 1, x^134208 mod p(x)` << 1 */
- { 0x00000000c486ecfc, 0x0000000156464024 },
- /* x^133120 mod p(x)` << 1, x^133184 mod p(x)` << 1 */
- { 0x0000000001b951b2, 0x000000016063a8dc },
- /* x^132096 mod p(x)` << 1, x^132160 mod p(x)` << 1 */
- { 0x0000000048143916, 0x0000000116a66362 },
- /* x^131072 mod p(x)` << 1, x^131136 mod p(x)` << 1 */
- { 0x00000001dc2ae124, 0x000000017e8aa4d2 },
- /* x^130048 mod p(x)` << 1, x^130112 mod p(x)` << 1 */
- { 0x00000001416c58d6, 0x00000001728eb10c },
- /* x^129024 mod p(x)` << 1, x^129088 mod p(x)` << 1 */
- { 0x00000000a479744a, 0x00000001b08fd7fa },
- /* x^128000 mod p(x)` << 1, x^128064 mod p(x)` << 1 */
- { 0x0000000096ca3a26, 0x00000001092a16e8 },
- /* x^126976 mod p(x)` << 1, x^127040 mod p(x)` << 1 */
- { 0x00000000ff223d4e, 0x00000000a505637c },
- /* x^125952 mod p(x)` << 1, x^126016 mod p(x)` << 1 */
- { 0x000000010e84da42, 0x00000000d94869b2 },
- /* x^124928 mod p(x)` << 1, x^124992 mod p(x)` << 1 */
- { 0x00000001b61ba3d0, 0x00000001c8b203ae },
- /* x^123904 mod p(x)` << 1, x^123968 mod p(x)` << 1 */
- { 0x00000000680f2de8, 0x000000005704aea0 },
- /* x^122880 mod p(x)` << 1, x^122944 mod p(x)` << 1 */
- { 0x000000008772a9a8, 0x000000012e295fa2 },
- /* x^121856 mod p(x)` << 1, x^121920 mod p(x)` << 1 */
- { 0x0000000155f295bc, 0x000000011d0908bc },
- /* x^120832 mod p(x)` << 1, x^120896 mod p(x)` << 1 */
- { 0x00000000595f9282, 0x0000000193ed97ea },
- /* x^119808 mod p(x)` << 1, x^119872 mod p(x)` << 1 */
- { 0x0000000164b1c25a, 0x000000013a0f1c52 },
- /* x^118784 mod p(x)` << 1, x^118848 mod p(x)` << 1 */
- { 0x00000000fbd67c50, 0x000000010c2c40c0 },
- /* x^117760 mod p(x)` << 1, x^117824 mod p(x)` << 1 */
- { 0x0000000096076268, 0x00000000ff6fac3e },
- /* x^116736 mod p(x)` << 1, x^116800 mod p(x)` << 1 */
- { 0x00000001d288e4cc, 0x000000017b3609c0 },
- /* x^115712 mod p(x)` << 1, x^115776 mod p(x)` << 1 */
- { 0x00000001eaac1bdc, 0x0000000088c8c922 },
- /* x^114688 mod p(x)` << 1, x^114752 mod p(x)` << 1 */
- { 0x00000001f1ea39e2, 0x00000001751baae6 },
- /* x^113664 mod p(x)` << 1, x^113728 mod p(x)` << 1 */
- { 0x00000001eb6506fc, 0x0000000107952972 },
- /* x^112640 mod p(x)` << 1, x^112704 mod p(x)` << 1 */
- { 0x000000010f806ffe, 0x0000000162b00abe },
- /* x^111616 mod p(x)` << 1, x^111680 mod p(x)` << 1 */
- { 0x000000010408481e, 0x000000000d7b404c },
- /* x^110592 mod p(x)` << 1, x^110656 mod p(x)` << 1 */
- { 0x0000000188260534, 0x00000000763b13d4 },
- /* x^109568 mod p(x)` << 1, x^109632 mod p(x)` << 1 */
- { 0x0000000058fc73e0, 0x00000000f6dc22d8 },
- /* x^108544 mod p(x)` << 1, x^108608 mod p(x)` << 1 */
- { 0x00000000391c59b8, 0x000000007daae060 },
- /* x^107520 mod p(x)` << 1, x^107584 mod p(x)` << 1 */
- { 0x000000018b638400, 0x000000013359ab7c },
- /* x^106496 mod p(x)` << 1, x^106560 mod p(x)` << 1 */
- { 0x000000011738f5c4, 0x000000008add438a },
- /* x^105472 mod p(x)` << 1, x^105536 mod p(x)` << 1 */
- { 0x000000008cf7c6da, 0x00000001edbefdea },
- /* x^104448 mod p(x)` << 1, x^104512 mod p(x)` << 1 */
- { 0x00000001ef97fb16, 0x000000004104e0f8 },
- /* x^103424 mod p(x)` << 1, x^103488 mod p(x)` << 1 */
- { 0x0000000102130e20, 0x00000000b48a8222 },
- /* x^102400 mod p(x)` << 1, x^102464 mod p(x)` << 1 */
- { 0x00000000db968898, 0x00000001bcb46844 },
- /* x^101376 mod p(x)` << 1, x^101440 mod p(x)` << 1 */
- { 0x00000000b5047b5e, 0x000000013293ce0a },
- /* x^100352 mod p(x)` << 1, x^100416 mod p(x)` << 1 */
- { 0x000000010b90fdb2, 0x00000001710d0844 },
- /* x^99328 mod p(x)` << 1, x^99392 mod p(x)` << 1 */
- { 0x000000004834a32e, 0x0000000117907f6e },
- /* x^98304 mod p(x)` << 1, x^98368 mod p(x)` << 1 */
- { 0x0000000059c8f2b0, 0x0000000087ddf93e },
- /* x^97280 mod p(x)` << 1, x^97344 mod p(x)` << 1 */
- { 0x0000000122cec508, 0x000000005970e9b0 },
- /* x^96256 mod p(x)` << 1, x^96320 mod p(x)` << 1 */
- { 0x000000000a330cda, 0x0000000185b2b7d0 },
- /* x^95232 mod p(x)` << 1, x^95296 mod p(x)` << 1 */
- { 0x000000014a47148c, 0x00000001dcee0efc },
- /* x^94208 mod p(x)` << 1, x^94272 mod p(x)` << 1 */
- { 0x0000000042c61cb8, 0x0000000030da2722 },
- /* x^93184 mod p(x)` << 1, x^93248 mod p(x)` << 1 */
- { 0x0000000012fe6960, 0x000000012f925a18 },
- /* x^92160 mod p(x)` << 1, x^92224 mod p(x)` << 1 */
- { 0x00000000dbda2c20, 0x00000000dd2e357c },
- /* x^91136 mod p(x)` << 1, x^91200 mod p(x)` << 1 */
- { 0x000000011122410c, 0x00000000071c80de },
- /* x^90112 mod p(x)` << 1, x^90176 mod p(x)` << 1 */
- { 0x00000000977b2070, 0x000000011513140a },
- /* x^89088 mod p(x)` << 1, x^89152 mod p(x)` << 1 */
- { 0x000000014050438e, 0x00000001df876e8e },
- /* x^88064 mod p(x)` << 1, x^88128 mod p(x)` << 1 */
- { 0x0000000147c840e8, 0x000000015f81d6ce },
- /* x^87040 mod p(x)` << 1, x^87104 mod p(x)` << 1 */
- { 0x00000001cc7c88ce, 0x000000019dd94dbe },
- /* x^86016 mod p(x)` << 1, x^86080 mod p(x)` << 1 */
- { 0x00000001476b35a4, 0x00000001373d206e },
- /* x^84992 mod p(x)` << 1, x^85056 mod p(x)` << 1 */
- { 0x000000013d52d508, 0x00000000668ccade },
- /* x^83968 mod p(x)` << 1, x^84032 mod p(x)` << 1 */
- { 0x000000008e4be32e, 0x00000001b192d268 },
- /* x^82944 mod p(x)` << 1, x^83008 mod p(x)` << 1 */
- { 0x00000000024120fe, 0x00000000e30f3a78 },
- /* x^81920 mod p(x)` << 1, x^81984 mod p(x)` << 1 */
- { 0x00000000ddecddb4, 0x000000010ef1f7bc },
- /* x^80896 mod p(x)` << 1, x^80960 mod p(x)` << 1 */
- { 0x00000000d4d403bc, 0x00000001f5ac7380 },
- /* x^79872 mod p(x)` << 1, x^79936 mod p(x)` << 1 */
- { 0x00000001734b89aa, 0x000000011822ea70 },
- /* x^78848 mod p(x)` << 1, x^78912 mod p(x)` << 1 */
- { 0x000000010e7a58d6, 0x00000000c3a33848 },
- /* x^77824 mod p(x)` << 1, x^77888 mod p(x)` << 1 */
- { 0x00000001f9f04e9c, 0x00000001bd151c24 },
- /* x^76800 mod p(x)` << 1, x^76864 mod p(x)` << 1 */
- { 0x00000000b692225e, 0x0000000056002d76 },
- /* x^75776 mod p(x)` << 1, x^75840 mod p(x)` << 1 */
- { 0x000000019b8d3f3e, 0x000000014657c4f4 },
- /* x^74752 mod p(x)` << 1, x^74816 mod p(x)` << 1 */
- { 0x00000001a874f11e, 0x0000000113742d7c },
- /* x^73728 mod p(x)` << 1, x^73792 mod p(x)` << 1 */
- { 0x000000010d5a4254, 0x000000019c5920ba },
- /* x^72704 mod p(x)` << 1, x^72768 mod p(x)` << 1 */
- { 0x00000000bbb2f5d6, 0x000000005216d2d6 },
- /* x^71680 mod p(x)` << 1, x^71744 mod p(x)` << 1 */
- { 0x0000000179cc0e36, 0x0000000136f5ad8a },
- /* x^70656 mod p(x)` << 1, x^70720 mod p(x)` << 1 */
- { 0x00000001dca1da4a, 0x000000018b07beb6 },
- /* x^69632 mod p(x)` << 1, x^69696 mod p(x)` << 1 */
- { 0x00000000feb1a192, 0x00000000db1e93b0 },
- /* x^68608 mod p(x)` << 1, x^68672 mod p(x)` << 1 */
- { 0x00000000d1eeedd6, 0x000000000b96fa3a },
- /* x^67584 mod p(x)` << 1, x^67648 mod p(x)` << 1 */
- { 0x000000008fad9bb4, 0x00000001d9968af0 },
- /* x^66560 mod p(x)` << 1, x^66624 mod p(x)` << 1 */
- { 0x00000001884938e4, 0x000000000e4a77a2 },
- /* x^65536 mod p(x)` << 1, x^65600 mod p(x)` << 1 */
- { 0x00000001bc2e9bc0, 0x00000000508c2ac8 },
- /* x^64512 mod p(x)` << 1, x^64576 mod p(x)` << 1 */
- { 0x00000001f9658a68, 0x0000000021572a80 },
- /* x^63488 mod p(x)` << 1, x^63552 mod p(x)` << 1 */
- { 0x000000001b9224fc, 0x00000001b859daf2 },
- /* x^62464 mod p(x)` << 1, x^62528 mod p(x)` << 1 */
- { 0x0000000055b2fb84, 0x000000016f788474 },
- /* x^61440 mod p(x)` << 1, x^61504 mod p(x)` << 1 */
- { 0x000000018b090348, 0x00000001b438810e },
- /* x^60416 mod p(x)` << 1, x^60480 mod p(x)` << 1 */
- { 0x000000011ccbd5ea, 0x0000000095ddc6f2 },
- /* x^59392 mod p(x)` << 1, x^59456 mod p(x)` << 1 */
- { 0x0000000007ae47f8, 0x00000001d977c20c },
- /* x^58368 mod p(x)` << 1, x^58432 mod p(x)` << 1 */
- { 0x0000000172acbec0, 0x00000000ebedb99a },
- /* x^57344 mod p(x)` << 1, x^57408 mod p(x)` << 1 */
- { 0x00000001c6e3ff20, 0x00000001df9e9e92 },
- /* x^56320 mod p(x)` << 1, x^56384 mod p(x)` << 1 */
- { 0x00000000e1b38744, 0x00000001a4a3f952 },
- /* x^55296 mod p(x)` << 1, x^55360 mod p(x)` << 1 */
- { 0x00000000791585b2, 0x00000000e2f51220 },
- /* x^54272 mod p(x)` << 1, x^54336 mod p(x)` << 1 */
- { 0x00000000ac53b894, 0x000000004aa01f3e },
- /* x^53248 mod p(x)` << 1, x^53312 mod p(x)` << 1 */
- { 0x00000001ed5f2cf4, 0x00000000b3e90a58 },
- /* x^52224 mod p(x)` << 1, x^52288 mod p(x)` << 1 */
- { 0x00000001df48b2e0, 0x000000000c9ca2aa },
- /* x^51200 mod p(x)` << 1, x^51264 mod p(x)` << 1 */
- { 0x00000000049c1c62, 0x0000000151682316 },
- /* x^50176 mod p(x)` << 1, x^50240 mod p(x)` << 1 */
- { 0x000000017c460c12, 0x0000000036fce78c },
- /* x^49152 mod p(x)` << 1, x^49216 mod p(x)` << 1 */
- { 0x000000015be4da7e, 0x000000009037dc10 },
- /* x^48128 mod p(x)` << 1, x^48192 mod p(x)` << 1 */
- { 0x000000010f38f668, 0x00000000d3298582 },
- /* x^47104 mod p(x)` << 1, x^47168 mod p(x)` << 1 */
- { 0x0000000039f40a00, 0x00000001b42e8ad6 },
- /* x^46080 mod p(x)` << 1, x^46144 mod p(x)` << 1 */
- { 0x00000000bd4c10c4, 0x00000000142a9838 },
- /* x^45056 mod p(x)` << 1, x^45120 mod p(x)` << 1 */
- { 0x0000000042db1d98, 0x0000000109c7f190 },
- /* x^44032 mod p(x)` << 1, x^44096 mod p(x)` << 1 */
- { 0x00000001c905bae6, 0x0000000056ff9310 },
- /* x^43008 mod p(x)` << 1, x^43072 mod p(x)` << 1 */
- { 0x00000000069d40ea, 0x00000001594513aa },
- /* x^41984 mod p(x)` << 1, x^42048 mod p(x)` << 1 */
- { 0x000000008e4fbad0, 0x00000001e3b5b1e8 },
- /* x^40960 mod p(x)` << 1, x^41024 mod p(x)` << 1 */
- { 0x0000000047bedd46, 0x000000011dd5fc08 },
- /* x^39936 mod p(x)` << 1, x^40000 mod p(x)` << 1 */
- { 0x0000000026396bf8, 0x00000001675f0cc2 },
- /* x^38912 mod p(x)` << 1, x^38976 mod p(x)` << 1 */
- { 0x00000000379beb92, 0x00000000d1c8dd44 },
- /* x^37888 mod p(x)` << 1, x^37952 mod p(x)` << 1 */
- { 0x000000000abae54a, 0x0000000115ebd3d8 },
- /* x^36864 mod p(x)` << 1, x^36928 mod p(x)` << 1 */
- { 0x0000000007e6a128, 0x00000001ecbd0dac },
- /* x^35840 mod p(x)` << 1, x^35904 mod p(x)` << 1 */
- { 0x000000000ade29d2, 0x00000000cdf67af2 },
- /* x^34816 mod p(x)` << 1, x^34880 mod p(x)` << 1 */
- { 0x00000000f974c45c, 0x000000004c01ff4c },
- /* x^33792 mod p(x)` << 1, x^33856 mod p(x)` << 1 */
- { 0x00000000e77ac60a, 0x00000000f2d8657e },
- /* x^32768 mod p(x)` << 1, x^32832 mod p(x)` << 1 */
- { 0x0000000145895816, 0x000000006bae74c4 },
- /* x^31744 mod p(x)` << 1, x^31808 mod p(x)` << 1 */
- { 0x0000000038e362be, 0x0000000152af8aa0 },
- /* x^30720 mod p(x)` << 1, x^30784 mod p(x)` << 1 */
- { 0x000000007f991a64, 0x0000000004663802 },
- /* x^29696 mod p(x)` << 1, x^29760 mod p(x)` << 1 */
- { 0x00000000fa366d3a, 0x00000001ab2f5afc },
- /* x^28672 mod p(x)` << 1, x^28736 mod p(x)` << 1 */
- { 0x00000001a2bb34f0, 0x0000000074a4ebd4 },
- /* x^27648 mod p(x)` << 1, x^27712 mod p(x)` << 1 */
- { 0x0000000028a9981e, 0x00000001d7ab3a4c },
- /* x^26624 mod p(x)` << 1, x^26688 mod p(x)` << 1 */
- { 0x00000001dbc672be, 0x00000001a8da60c6 },
- /* x^25600 mod p(x)` << 1, x^25664 mod p(x)` << 1 */
- { 0x00000000b04d77f6, 0x000000013cf63820 },
- /* x^24576 mod p(x)` << 1, x^24640 mod p(x)` << 1 */
- { 0x0000000124400d96, 0x00000000bec12e1e },
- /* x^23552 mod p(x)` << 1, x^23616 mod p(x)` << 1 */
- { 0x000000014ca4b414, 0x00000001c6368010 },
- /* x^22528 mod p(x)` << 1, x^22592 mod p(x)` << 1 */
- { 0x000000012fe2c938, 0x00000001e6e78758 },
- /* x^21504 mod p(x)` << 1, x^21568 mod p(x)` << 1 */
- { 0x00000001faed01e6, 0x000000008d7f2b3c },
- /* x^20480 mod p(x)` << 1, x^20544 mod p(x)` << 1 */
- { 0x000000007e80ecfe, 0x000000016b4a156e },
- /* x^19456 mod p(x)` << 1, x^19520 mod p(x)` << 1 */
- { 0x0000000098daee94, 0x00000001c63cfeb6 },
- /* x^18432 mod p(x)` << 1, x^18496 mod p(x)` << 1 */
- { 0x000000010a04edea, 0x000000015f902670 },
- /* x^17408 mod p(x)` << 1, x^17472 mod p(x)` << 1 */
- { 0x00000001c00b4524, 0x00000001cd5de11e },
- /* x^16384 mod p(x)` << 1, x^16448 mod p(x)` << 1 */
- { 0x0000000170296550, 0x000000001acaec54 },
- /* x^15360 mod p(x)` << 1, x^15424 mod p(x)` << 1 */
- { 0x0000000181afaa48, 0x000000002bd0ca78 },
- /* x^14336 mod p(x)` << 1, x^14400 mod p(x)` << 1 */
- { 0x0000000185a31ffa, 0x0000000032d63d5c },
- /* x^13312 mod p(x)` << 1, x^13376 mod p(x)` << 1 */
- { 0x000000002469f608, 0x000000001c6d4e4c },
- /* x^12288 mod p(x)` << 1, x^12352 mod p(x)` << 1 */
- { 0x000000006980102a, 0x0000000106a60b92 },
- /* x^11264 mod p(x)` << 1, x^11328 mod p(x)` << 1 */
- { 0x0000000111ea9ca8, 0x00000000d3855e12 },
- /* x^10240 mod p(x)` << 1, x^10304 mod p(x)` << 1 */
- { 0x00000001bd1d29ce, 0x00000000e3125636 },
- /* x^9216 mod p(x)` << 1, x^9280 mod p(x)` << 1 */
- { 0x00000001b34b9580, 0x000000009e8f7ea4 },
- /* x^8192 mod p(x)` << 1, x^8256 mod p(x)` << 1 */
- { 0x000000003076054e, 0x00000001c82e562c },
- /* x^7168 mod p(x)` << 1, x^7232 mod p(x)` << 1 */
- { 0x000000012a608ea4, 0x00000000ca9f09ce },
- /* x^6144 mod p(x)` << 1, x^6208 mod p(x)` << 1 */
- { 0x00000000784d05fe, 0x00000000c63764e6 },
- /* x^5120 mod p(x)` << 1, x^5184 mod p(x)` << 1 */
- { 0x000000016ef0d82a, 0x0000000168d2e49e },
- /* x^4096 mod p(x)` << 1, x^4160 mod p(x)` << 1 */
- { 0x0000000075bda454, 0x00000000e986c148 },
- /* x^3072 mod p(x)` << 1, x^3136 mod p(x)` << 1 */
- { 0x000000003dc0a1c4, 0x00000000cfb65894 },
- /* x^2048 mod p(x)` << 1, x^2112 mod p(x)` << 1 */
- { 0x00000000e9a5d8be, 0x0000000111cadee4 },
- /* x^1024 mod p(x)` << 1, x^1088 mod p(x)` << 1 */
- { 0x00000001609bc4b4, 0x0000000171fb63ce }
-#else /* __LITTLE_ENDIAN__ */
- /* x^261120 mod p(x)` << 1, x^261184 mod p(x)` << 1 */
- { 0x00000000b6ca9e20, 0x000000009c37c408 },
- /* x^260096 mod p(x)` << 1, x^260160 mod p(x)` << 1 */
- { 0x00000000350249a8, 0x00000001b51df26c },
- /* x^259072 mod p(x)` << 1, x^259136 mod p(x)` << 1 */
- { 0x00000001862dac54, 0x000000000724b9d0 },
- /* x^258048 mod p(x)` << 1, x^258112 mod p(x)` << 1 */
- { 0x00000001d87fb48c, 0x00000001c00532fe },
- /* x^257024 mod p(x)` << 1, x^257088 mod p(x)` << 1 */
- { 0x00000001f39b699e, 0x00000000f05a9362 },
- /* x^256000 mod p(x)` << 1, x^256064 mod p(x)` << 1 */
- { 0x0000000101da11b4, 0x00000001e1007970 },
- /* x^254976 mod p(x)` << 1, x^255040 mod p(x)` << 1 */
- { 0x00000001cab571e0, 0x00000000a57366ee },
- /* x^253952 mod p(x)` << 1, x^254016 mod p(x)` << 1 */
- { 0x00000000c7020cfe, 0x0000000192011284 },
- /* x^252928 mod p(x)` << 1, x^252992 mod p(x)` << 1 */
- { 0x00000000cdaed1ae, 0x0000000162716d9a },
- /* x^251904 mod p(x)` << 1, x^251968 mod p(x)` << 1 */
- { 0x00000001e804effc, 0x00000000cd97ecde },
- /* x^250880 mod p(x)` << 1, x^250944 mod p(x)` << 1 */
- { 0x0000000077c3ea3a, 0x0000000058812bc0 },
- /* x^249856 mod p(x)` << 1, x^249920 mod p(x)` << 1 */
- { 0x0000000068df31b4, 0x0000000088b8c12e },
- /* x^248832 mod p(x)` << 1, x^248896 mod p(x)` << 1 */
- { 0x00000000b059b6c2, 0x00000001230b234c },
- /* x^247808 mod p(x)` << 1, x^247872 mod p(x)` << 1 */
- { 0x0000000145fb8ed8, 0x00000001120b416e },
- /* x^246784 mod p(x)` << 1, x^246848 mod p(x)` << 1 */
- { 0x00000000cbc09168, 0x00000001974aecb0 },
- /* x^245760 mod p(x)` << 1, x^245824 mod p(x)` << 1 */
- { 0x000000005ceeedc2, 0x000000008ee3f226 },
- /* x^244736 mod p(x)` << 1, x^244800 mod p(x)` << 1 */
- { 0x0000000047d74e86, 0x00000001089aba9a },
- /* x^243712 mod p(x)` << 1, x^243776 mod p(x)` << 1 */
- { 0x00000001407e9e22, 0x0000000065113872 },
- /* x^242688 mod p(x)` << 1, x^242752 mod p(x)` << 1 */
- { 0x00000001da967bda, 0x000000005c07ec10 },
- /* x^241664 mod p(x)` << 1, x^241728 mod p(x)` << 1 */
- { 0x000000006c898368, 0x0000000187590924 },
- /* x^240640 mod p(x)` << 1, x^240704 mod p(x)` << 1 */
- { 0x00000000f2d14c98, 0x00000000e35da7c6 },
- /* x^239616 mod p(x)` << 1, x^239680 mod p(x)` << 1 */
- { 0x00000001993c6ad4, 0x000000000415855a },
- /* x^238592 mod p(x)` << 1, x^238656 mod p(x)` << 1 */
- { 0x000000014683d1ac, 0x0000000073617758 },
- /* x^237568 mod p(x)` << 1, x^237632 mod p(x)` << 1 */
- { 0x00000001a7c93e6c, 0x0000000176021d28 },
- /* x^236544 mod p(x)` << 1, x^236608 mod p(x)` << 1 */
- { 0x000000010211e90a, 0x00000001c358fd0a },
- /* x^235520 mod p(x)` << 1, x^235584 mod p(x)` << 1 */
- { 0x000000001119403e, 0x00000001ff7a2c18 },
- /* x^234496 mod p(x)` << 1, x^234560 mod p(x)` << 1 */
- { 0x000000001c3261aa, 0x00000000f2d9f7e4 },
- /* x^233472 mod p(x)` << 1, x^233536 mod p(x)` << 1 */
- { 0x000000014e37a634, 0x000000016cf1f9c8 },
- /* x^232448 mod p(x)` << 1, x^232512 mod p(x)` << 1 */
- { 0x0000000073786c0c, 0x000000010af9279a },
- /* x^231424 mod p(x)` << 1, x^231488 mod p(x)` << 1 */
- { 0x000000011dc037f8, 0x0000000004f101e8 },
- /* x^230400 mod p(x)` << 1, x^230464 mod p(x)` << 1 */
- { 0x0000000031433dfc, 0x0000000070bcf184 },
- /* x^229376 mod p(x)` << 1, x^229440 mod p(x)` << 1 */
- { 0x000000009cde8348, 0x000000000a8de642 },
- /* x^228352 mod p(x)` << 1, x^228416 mod p(x)` << 1 */
- { 0x0000000038d3c2a6, 0x0000000062ea130c },
- /* x^227328 mod p(x)` << 1, x^227392 mod p(x)` << 1 */
- { 0x000000011b25f260, 0x00000001eb31cbb2 },
- /* x^226304 mod p(x)` << 1, x^226368 mod p(x)` << 1 */
- { 0x000000001629e6f0, 0x0000000170783448 },
- /* x^225280 mod p(x)` << 1, x^225344 mod p(x)` << 1 */
- { 0x0000000160838b4c, 0x00000001a684b4c6 },
- /* x^224256 mod p(x)` << 1, x^224320 mod p(x)` << 1 */
- { 0x000000007a44011c, 0x00000000253ca5b4 },
- /* x^223232 mod p(x)` << 1, x^223296 mod p(x)` << 1 */
- { 0x00000000226f417a, 0x0000000057b4b1e2 },
- /* x^222208 mod p(x)` << 1, x^222272 mod p(x)` << 1 */
- { 0x0000000045eb2eb4, 0x00000000b6bd084c },
- /* x^221184 mod p(x)` << 1, x^221248 mod p(x)` << 1 */
- { 0x000000014459d70c, 0x0000000123c2d592 },
- /* x^220160 mod p(x)` << 1, x^220224 mod p(x)` << 1 */
- { 0x00000001d406ed82, 0x00000000159dafce },
- /* x^219136 mod p(x)` << 1, x^219200 mod p(x)` << 1 */
- { 0x0000000160c8e1a8, 0x0000000127e1a64e },
- /* x^218112 mod p(x)` << 1, x^218176 mod p(x)` << 1 */
- { 0x0000000027ba8098, 0x0000000056860754 },
- /* x^217088 mod p(x)` << 1, x^217152 mod p(x)` << 1 */
- { 0x000000006d92d018, 0x00000001e661aae8 },
- /* x^216064 mod p(x)` << 1, x^216128 mod p(x)` << 1 */
- { 0x000000012ed7e3f2, 0x00000000f82c6166 },
- /* x^215040 mod p(x)` << 1, x^215104 mod p(x)` << 1 */
- { 0x000000002dc87788, 0x00000000c4f9c7ae },
- /* x^214016 mod p(x)` << 1, x^214080 mod p(x)` << 1 */
- { 0x0000000018240bb8, 0x0000000074203d20 },
- /* x^212992 mod p(x)` << 1, x^213056 mod p(x)` << 1 */
- { 0x000000001ad38158, 0x0000000198173052 },
- /* x^211968 mod p(x)` << 1, x^212032 mod p(x)` << 1 */
- { 0x00000001396b78f2, 0x00000001ce8aba54 },
- /* x^210944 mod p(x)` << 1, x^211008 mod p(x)` << 1 */
- { 0x000000011a681334, 0x00000001850d5d94 },
- /* x^209920 mod p(x)` << 1, x^209984 mod p(x)` << 1 */
- { 0x000000012104732e, 0x00000001d609239c },
- /* x^208896 mod p(x)` << 1, x^208960 mod p(x)` << 1 */
- { 0x00000000a140d90c, 0x000000001595f048 },
- /* x^207872 mod p(x)` << 1, x^207936 mod p(x)` << 1 */
- { 0x00000001b7215eda, 0x0000000042ccee08 },
- /* x^206848 mod p(x)` << 1, x^206912 mod p(x)` << 1 */
- { 0x00000001aaf1df3c, 0x000000010a389d74 },
- /* x^205824 mod p(x)` << 1, x^205888 mod p(x)` << 1 */
- { 0x0000000029d15b8a, 0x000000012a840da6 },
- /* x^204800 mod p(x)` << 1, x^204864 mod p(x)` << 1 */
- { 0x00000000f1a96922, 0x000000001d181c0c },
- /* x^203776 mod p(x)` << 1, x^203840 mod p(x)` << 1 */
- { 0x00000001ac80d03c, 0x0000000068b7d1f6 },
- /* x^202752 mod p(x)` << 1, x^202816 mod p(x)` << 1 */
- { 0x000000000f11d56a, 0x000000005b0f14fc },
- /* x^201728 mod p(x)` << 1, x^201792 mod p(x)` << 1 */
- { 0x00000001f1c022a2, 0x0000000179e9e730 },
- /* x^200704 mod p(x)` << 1, x^200768 mod p(x)` << 1 */
- { 0x0000000173d00ae2, 0x00000001ce1368d6 },
- /* x^199680 mod p(x)` << 1, x^199744 mod p(x)` << 1 */
- { 0x00000001d4ffe4ac, 0x0000000112c3a84c },
- /* x^198656 mod p(x)` << 1, x^198720 mod p(x)` << 1 */
- { 0x000000016edc5ae4, 0x00000000de940fee },
- /* x^197632 mod p(x)` << 1, x^197696 mod p(x)` << 1 */
- { 0x00000001f1a02140, 0x00000000fe896b7e },
- /* x^196608 mod p(x)` << 1, x^196672 mod p(x)` << 1 */
- { 0x00000000ca0b28a0, 0x00000001f797431c },
- /* x^195584 mod p(x)` << 1, x^195648 mod p(x)` << 1 */
- { 0x00000001928e30a2, 0x0000000053e989ba },
- /* x^194560 mod p(x)` << 1, x^194624 mod p(x)` << 1 */
- { 0x0000000097b1b002, 0x000000003920cd16 },
- /* x^193536 mod p(x)` << 1, x^193600 mod p(x)` << 1 */
- { 0x00000000b15bf906, 0x00000001e6f579b8 },
- /* x^192512 mod p(x)` << 1, x^192576 mod p(x)` << 1 */
- { 0x00000000411c5d52, 0x000000007493cb0a },
- /* x^191488 mod p(x)` << 1, x^191552 mod p(x)` << 1 */
- { 0x00000001c36f3300, 0x00000001bdd376d8 },
- /* x^190464 mod p(x)` << 1, x^190528 mod p(x)` << 1 */
- { 0x00000001119227e0, 0x000000016badfee6 },
- /* x^189440 mod p(x)` << 1, x^189504 mod p(x)` << 1 */
- { 0x00000000114d4702, 0x0000000071de5c58 },
- /* x^188416 mod p(x)` << 1, x^188480 mod p(x)` << 1 */
- { 0x00000000458b5b98, 0x00000000453f317c },
- /* x^187392 mod p(x)` << 1, x^187456 mod p(x)` << 1 */
- { 0x000000012e31fb8e, 0x0000000121675cce },
- /* x^186368 mod p(x)` << 1, x^186432 mod p(x)` << 1 */
- { 0x000000005cf619d8, 0x00000001f409ee92 },
- /* x^185344 mod p(x)` << 1, x^185408 mod p(x)` << 1 */
- { 0x0000000063f4d8b2, 0x00000000f36b9c88 },
- /* x^184320 mod p(x)` << 1, x^184384 mod p(x)` << 1 */
- { 0x000000004138dc8a, 0x0000000036b398f4 },
- /* x^183296 mod p(x)` << 1, x^183360 mod p(x)` << 1 */
- { 0x00000001d29ee8e0, 0x00000001748f9adc },
- /* x^182272 mod p(x)` << 1, x^182336 mod p(x)` << 1 */
- { 0x000000006a08ace8, 0x00000001be94ec00 },
- /* x^181248 mod p(x)` << 1, x^181312 mod p(x)` << 1 */
- { 0x0000000127d42010, 0x00000000b74370d6 },
- /* x^180224 mod p(x)` << 1, x^180288 mod p(x)` << 1 */
- { 0x0000000019d76b62, 0x00000001174d0b98 },
- /* x^179200 mod p(x)` << 1, x^179264 mod p(x)` << 1 */
- { 0x00000001b1471f6e, 0x00000000befc06a4 },
- /* x^178176 mod p(x)` << 1, x^178240 mod p(x)` << 1 */
- { 0x00000001f64c19cc, 0x00000001ae125288 },
- /* x^177152 mod p(x)` << 1, x^177216 mod p(x)` << 1 */
- { 0x00000000003c0ea0, 0x0000000095c19b34 },
- /* x^176128 mod p(x)` << 1, x^176192 mod p(x)` << 1 */
- { 0x000000014d73abf6, 0x00000001a78496f2 },
- /* x^175104 mod p(x)` << 1, x^175168 mod p(x)` << 1 */
- { 0x00000001620eb844, 0x00000001ac5390a0 },
- /* x^174080 mod p(x)` << 1, x^174144 mod p(x)` << 1 */
- { 0x0000000147655048, 0x000000002a80ed6e },
- /* x^173056 mod p(x)` << 1, x^173120 mod p(x)` << 1 */
- { 0x0000000067b5077e, 0x00000001fa9b0128 },
- /* x^172032 mod p(x)` << 1, x^172096 mod p(x)` << 1 */
- { 0x0000000010ffe206, 0x00000001ea94929e },
- /* x^171008 mod p(x)` << 1, x^171072 mod p(x)` << 1 */
- { 0x000000000fee8f1e, 0x0000000125f4305c },
- /* x^169984 mod p(x)` << 1, x^170048 mod p(x)` << 1 */
- { 0x00000001da26fbae, 0x00000001471e2002 },
- /* x^168960 mod p(x)` << 1, x^169024 mod p(x)` << 1 */
- { 0x00000001b3a8bd88, 0x0000000132d2253a },
- /* x^167936 mod p(x)` << 1, x^168000 mod p(x)` << 1 */
- { 0x00000000e8f3898e, 0x00000000f26b3592 },
- /* x^166912 mod p(x)` << 1, x^166976 mod p(x)` << 1 */
- { 0x00000000b0d0d28c, 0x00000000bc8b67b0 },
- /* x^165888 mod p(x)` << 1, x^165952 mod p(x)` << 1 */
- { 0x0000000030f2a798, 0x000000013a826ef2 },
- /* x^164864 mod p(x)` << 1, x^164928 mod p(x)` << 1 */
- { 0x000000000fba1002, 0x0000000081482c84 },
- /* x^163840 mod p(x)` << 1, x^163904 mod p(x)` << 1 */
- { 0x00000000bdb9bd72, 0x00000000e77307c2 },
- /* x^162816 mod p(x)` << 1, x^162880 mod p(x)` << 1 */
- { 0x0000000075d3bf5a, 0x00000000d4a07ec8 },
- /* x^161792 mod p(x)` << 1, x^161856 mod p(x)` << 1 */
- { 0x00000000ef1f98a0, 0x0000000017102100 },
- /* x^160768 mod p(x)` << 1, x^160832 mod p(x)` << 1 */
- { 0x00000000689c7602, 0x00000000db406486 },
- /* x^159744 mod p(x)` << 1, x^159808 mod p(x)` << 1 */
- { 0x000000016d5fa5fe, 0x0000000192db7f88 },
- /* x^158720 mod p(x)` << 1, x^158784 mod p(x)` << 1 */
- { 0x00000001d0d2b9ca, 0x000000018bf67b1e },
- /* x^157696 mod p(x)` << 1, x^157760 mod p(x)` << 1 */
- { 0x0000000041e7b470, 0x000000007c09163e },
- /* x^156672 mod p(x)` << 1, x^156736 mod p(x)` << 1 */
- { 0x00000001cbb6495e, 0x000000000adac060 },
- /* x^155648 mod p(x)` << 1, x^155712 mod p(x)` << 1 */
- { 0x000000010052a0b0, 0x00000000bd8316ae },
- /* x^154624 mod p(x)` << 1, x^154688 mod p(x)` << 1 */
- { 0x00000001d8effb5c, 0x000000019f09ab54 },
- /* x^153600 mod p(x)` << 1, x^153664 mod p(x)` << 1 */
- { 0x00000001d969853c, 0x0000000125155542 },
- /* x^152576 mod p(x)` << 1, x^152640 mod p(x)` << 1 */
- { 0x00000000523ccce2, 0x000000018fdb5882 },
- /* x^151552 mod p(x)` << 1, x^151616 mod p(x)` << 1 */
- { 0x000000001e2436bc, 0x00000000e794b3f4 },
- /* x^150528 mod p(x)` << 1, x^150592 mod p(x)` << 1 */
- { 0x00000000ddd1c3a2, 0x000000016f9bb022 },
- /* x^149504 mod p(x)` << 1, x^149568 mod p(x)` << 1 */
- { 0x0000000019fcfe38, 0x00000000290c9978 },
- /* x^148480 mod p(x)` << 1, x^148544 mod p(x)` << 1 */
- { 0x00000001ce95db64, 0x0000000083c0f350 },
- /* x^147456 mod p(x)` << 1, x^147520 mod p(x)` << 1 */
- { 0x00000000af582806, 0x0000000173ea6628 },
- /* x^146432 mod p(x)` << 1, x^146496 mod p(x)` << 1 */
- { 0x00000001006388f6, 0x00000001c8b4e00a },
- /* x^145408 mod p(x)` << 1, x^145472 mod p(x)` << 1 */
- { 0x0000000179eca00a, 0x00000000de95d6aa },
- /* x^144384 mod p(x)` << 1, x^144448 mod p(x)` << 1 */
- { 0x0000000122410a6a, 0x000000010b7f7248 },
- /* x^143360 mod p(x)` << 1, x^143424 mod p(x)` << 1 */
- { 0x000000004288e87c, 0x00000001326e3a06 },
- /* x^142336 mod p(x)` << 1, x^142400 mod p(x)` << 1 */
- { 0x000000016c5490da, 0x00000000bb62c2e6 },
- /* x^141312 mod p(x)` << 1, x^141376 mod p(x)` << 1 */
- { 0x00000000d1c71f6e, 0x0000000156a4b2c2 },
- /* x^140288 mod p(x)` << 1, x^140352 mod p(x)` << 1 */
- { 0x00000001b4ce08a6, 0x000000011dfe763a },
- /* x^139264 mod p(x)` << 1, x^139328 mod p(x)` << 1 */
- { 0x00000001466ba60c, 0x000000007bcca8e2 },
- /* x^138240 mod p(x)` << 1, x^138304 mod p(x)` << 1 */
- { 0x00000001f6c488a4, 0x0000000186118faa },
- /* x^137216 mod p(x)` << 1, x^137280 mod p(x)` << 1 */
- { 0x000000013bfb0682, 0x0000000111a65a88 },
- /* x^136192 mod p(x)` << 1, x^136256 mod p(x)` << 1 */
- { 0x00000000690e9e54, 0x000000003565e1c4 },
- /* x^135168 mod p(x)` << 1, x^135232 mod p(x)` << 1 */
- { 0x00000000281346b6, 0x000000012ed02a82 },
- /* x^134144 mod p(x)` << 1, x^134208 mod p(x)` << 1 */
- { 0x0000000156464024, 0x00000000c486ecfc },
- /* x^133120 mod p(x)` << 1, x^133184 mod p(x)` << 1 */
- { 0x000000016063a8dc, 0x0000000001b951b2 },
- /* x^132096 mod p(x)` << 1, x^132160 mod p(x)` << 1 */
- { 0x0000000116a66362, 0x0000000048143916 },
- /* x^131072 mod p(x)` << 1, x^131136 mod p(x)` << 1 */
- { 0x000000017e8aa4d2, 0x00000001dc2ae124 },
- /* x^130048 mod p(x)` << 1, x^130112 mod p(x)` << 1 */
- { 0x00000001728eb10c, 0x00000001416c58d6 },
- /* x^129024 mod p(x)` << 1, x^129088 mod p(x)` << 1 */
- { 0x00000001b08fd7fa, 0x00000000a479744a },
- /* x^128000 mod p(x)` << 1, x^128064 mod p(x)` << 1 */
- { 0x00000001092a16e8, 0x0000000096ca3a26 },
- /* x^126976 mod p(x)` << 1, x^127040 mod p(x)` << 1 */
- { 0x00000000a505637c, 0x00000000ff223d4e },
- /* x^125952 mod p(x)` << 1, x^126016 mod p(x)` << 1 */
- { 0x00000000d94869b2, 0x000000010e84da42 },
- /* x^124928 mod p(x)` << 1, x^124992 mod p(x)` << 1 */
- { 0x00000001c8b203ae, 0x00000001b61ba3d0 },
- /* x^123904 mod p(x)` << 1, x^123968 mod p(x)` << 1 */
- { 0x000000005704aea0, 0x00000000680f2de8 },
- /* x^122880 mod p(x)` << 1, x^122944 mod p(x)` << 1 */
- { 0x000000012e295fa2, 0x000000008772a9a8 },
- /* x^121856 mod p(x)` << 1, x^121920 mod p(x)` << 1 */
- { 0x000000011d0908bc, 0x0000000155f295bc },
- /* x^120832 mod p(x)` << 1, x^120896 mod p(x)` << 1 */
- { 0x0000000193ed97ea, 0x00000000595f9282 },
- /* x^119808 mod p(x)` << 1, x^119872 mod p(x)` << 1 */
- { 0x000000013a0f1c52, 0x0000000164b1c25a },
- /* x^118784 mod p(x)` << 1, x^118848 mod p(x)` << 1 */
- { 0x000000010c2c40c0, 0x00000000fbd67c50 },
- /* x^117760 mod p(x)` << 1, x^117824 mod p(x)` << 1 */
- { 0x00000000ff6fac3e, 0x0000000096076268 },
- /* x^116736 mod p(x)` << 1, x^116800 mod p(x)` << 1 */
- { 0x000000017b3609c0, 0x00000001d288e4cc },
- /* x^115712 mod p(x)` << 1, x^115776 mod p(x)` << 1 */
- { 0x0000000088c8c922, 0x00000001eaac1bdc },
- /* x^114688 mod p(x)` << 1, x^114752 mod p(x)` << 1 */
- { 0x00000001751baae6, 0x00000001f1ea39e2 },
- /* x^113664 mod p(x)` << 1, x^113728 mod p(x)` << 1 */
- { 0x0000000107952972, 0x00000001eb6506fc },
- /* x^112640 mod p(x)` << 1, x^112704 mod p(x)` << 1 */
- { 0x0000000162b00abe, 0x000000010f806ffe },
- /* x^111616 mod p(x)` << 1, x^111680 mod p(x)` << 1 */
- { 0x000000000d7b404c, 0x000000010408481e },
- /* x^110592 mod p(x)` << 1, x^110656 mod p(x)` << 1 */
- { 0x00000000763b13d4, 0x0000000188260534 },
- /* x^109568 mod p(x)` << 1, x^109632 mod p(x)` << 1 */
- { 0x00000000f6dc22d8, 0x0000000058fc73e0 },
- /* x^108544 mod p(x)` << 1, x^108608 mod p(x)` << 1 */
- { 0x000000007daae060, 0x00000000391c59b8 },
- /* x^107520 mod p(x)` << 1, x^107584 mod p(x)` << 1 */
- { 0x000000013359ab7c, 0x000000018b638400 },
- /* x^106496 mod p(x)` << 1, x^106560 mod p(x)` << 1 */
- { 0x000000008add438a, 0x000000011738f5c4 },
- /* x^105472 mod p(x)` << 1, x^105536 mod p(x)` << 1 */
- { 0x00000001edbefdea, 0x000000008cf7c6da },
- /* x^104448 mod p(x)` << 1, x^104512 mod p(x)` << 1 */
- { 0x000000004104e0f8, 0x00000001ef97fb16 },
- /* x^103424 mod p(x)` << 1, x^103488 mod p(x)` << 1 */
- { 0x00000000b48a8222, 0x0000000102130e20 },
- /* x^102400 mod p(x)` << 1, x^102464 mod p(x)` << 1 */
- { 0x00000001bcb46844, 0x00000000db968898 },
- /* x^101376 mod p(x)` << 1, x^101440 mod p(x)` << 1 */
- { 0x000000013293ce0a, 0x00000000b5047b5e },
- /* x^100352 mod p(x)` << 1, x^100416 mod p(x)` << 1 */
- { 0x00000001710d0844, 0x000000010b90fdb2 },
- /* x^99328 mod p(x)` << 1, x^99392 mod p(x)` << 1 */
- { 0x0000000117907f6e, 0x000000004834a32e },
- /* x^98304 mod p(x)` << 1, x^98368 mod p(x)` << 1 */
- { 0x0000000087ddf93e, 0x0000000059c8f2b0 },
- /* x^97280 mod p(x)` << 1, x^97344 mod p(x)` << 1 */
- { 0x000000005970e9b0, 0x0000000122cec508 },
- /* x^96256 mod p(x)` << 1, x^96320 mod p(x)` << 1 */
- { 0x0000000185b2b7d0, 0x000000000a330cda },
- /* x^95232 mod p(x)` << 1, x^95296 mod p(x)` << 1 */
- { 0x00000001dcee0efc, 0x000000014a47148c },
- /* x^94208 mod p(x)` << 1, x^94272 mod p(x)` << 1 */
- { 0x0000000030da2722, 0x0000000042c61cb8 },
- /* x^93184 mod p(x)` << 1, x^93248 mod p(x)` << 1 */
- { 0x000000012f925a18, 0x0000000012fe6960 },
- /* x^92160 mod p(x)` << 1, x^92224 mod p(x)` << 1 */
- { 0x00000000dd2e357c, 0x00000000dbda2c20 },
- /* x^91136 mod p(x)` << 1, x^91200 mod p(x)` << 1 */
- { 0x00000000071c80de, 0x000000011122410c },
- /* x^90112 mod p(x)` << 1, x^90176 mod p(x)` << 1 */
- { 0x000000011513140a, 0x00000000977b2070 },
- /* x^89088 mod p(x)` << 1, x^89152 mod p(x)` << 1 */
- { 0x00000001df876e8e, 0x000000014050438e },
- /* x^88064 mod p(x)` << 1, x^88128 mod p(x)` << 1 */
- { 0x000000015f81d6ce, 0x0000000147c840e8 },
- /* x^87040 mod p(x)` << 1, x^87104 mod p(x)` << 1 */
- { 0x000000019dd94dbe, 0x00000001cc7c88ce },
- /* x^86016 mod p(x)` << 1, x^86080 mod p(x)` << 1 */
- { 0x00000001373d206e, 0x00000001476b35a4 },
- /* x^84992 mod p(x)` << 1, x^85056 mod p(x)` << 1 */
- { 0x00000000668ccade, 0x000000013d52d508 },
- /* x^83968 mod p(x)` << 1, x^84032 mod p(x)` << 1 */
- { 0x00000001b192d268, 0x000000008e4be32e },
- /* x^82944 mod p(x)` << 1, x^83008 mod p(x)` << 1 */
- { 0x00000000e30f3a78, 0x00000000024120fe },
- /* x^81920 mod p(x)` << 1, x^81984 mod p(x)` << 1 */
- { 0x000000010ef1f7bc, 0x00000000ddecddb4 },
- /* x^80896 mod p(x)` << 1, x^80960 mod p(x)` << 1 */
- { 0x00000001f5ac7380, 0x00000000d4d403bc },
- /* x^79872 mod p(x)` << 1, x^79936 mod p(x)` << 1 */
- { 0x000000011822ea70, 0x00000001734b89aa },
- /* x^78848 mod p(x)` << 1, x^78912 mod p(x)` << 1 */
- { 0x00000000c3a33848, 0x000000010e7a58d6 },
- /* x^77824 mod p(x)` << 1, x^77888 mod p(x)` << 1 */
- { 0x00000001bd151c24, 0x00000001f9f04e9c },
- /* x^76800 mod p(x)` << 1, x^76864 mod p(x)` << 1 */
- { 0x0000000056002d76, 0x00000000b692225e },
- /* x^75776 mod p(x)` << 1, x^75840 mod p(x)` << 1 */
- { 0x000000014657c4f4, 0x000000019b8d3f3e },
- /* x^74752 mod p(x)` << 1, x^74816 mod p(x)` << 1 */
- { 0x0000000113742d7c, 0x00000001a874f11e },
- /* x^73728 mod p(x)` << 1, x^73792 mod p(x)` << 1 */
- { 0x000000019c5920ba, 0x000000010d5a4254 },
- /* x^72704 mod p(x)` << 1, x^72768 mod p(x)` << 1 */
- { 0x000000005216d2d6, 0x00000000bbb2f5d6 },
- /* x^71680 mod p(x)` << 1, x^71744 mod p(x)` << 1 */
- { 0x0000000136f5ad8a, 0x0000000179cc0e36 },
- /* x^70656 mod p(x)` << 1, x^70720 mod p(x)` << 1 */
- { 0x000000018b07beb6, 0x00000001dca1da4a },
- /* x^69632 mod p(x)` << 1, x^69696 mod p(x)` << 1 */
- { 0x00000000db1e93b0, 0x00000000feb1a192 },
- /* x^68608 mod p(x)` << 1, x^68672 mod p(x)` << 1 */
- { 0x000000000b96fa3a, 0x00000000d1eeedd6 },
- /* x^67584 mod p(x)` << 1, x^67648 mod p(x)` << 1 */
- { 0x00000001d9968af0, 0x000000008fad9bb4 },
- /* x^66560 mod p(x)` << 1, x^66624 mod p(x)` << 1 */
- { 0x000000000e4a77a2, 0x00000001884938e4 },
- /* x^65536 mod p(x)` << 1, x^65600 mod p(x)` << 1 */
- { 0x00000000508c2ac8, 0x00000001bc2e9bc0 },
- /* x^64512 mod p(x)` << 1, x^64576 mod p(x)` << 1 */
- { 0x0000000021572a80, 0x00000001f9658a68 },
- /* x^63488 mod p(x)` << 1, x^63552 mod p(x)` << 1 */
- { 0x00000001b859daf2, 0x000000001b9224fc },
- /* x^62464 mod p(x)` << 1, x^62528 mod p(x)` << 1 */
- { 0x000000016f788474, 0x0000000055b2fb84 },
- /* x^61440 mod p(x)` << 1, x^61504 mod p(x)` << 1 */
- { 0x00000001b438810e, 0x000000018b090348 },
- /* x^60416 mod p(x)` << 1, x^60480 mod p(x)` << 1 */
- { 0x0000000095ddc6f2, 0x000000011ccbd5ea },
- /* x^59392 mod p(x)` << 1, x^59456 mod p(x)` << 1 */
- { 0x00000001d977c20c, 0x0000000007ae47f8 },
- /* x^58368 mod p(x)` << 1, x^58432 mod p(x)` << 1 */
- { 0x00000000ebedb99a, 0x0000000172acbec0 },
- /* x^57344 mod p(x)` << 1, x^57408 mod p(x)` << 1 */
- { 0x00000001df9e9e92, 0x00000001c6e3ff20 },
- /* x^56320 mod p(x)` << 1, x^56384 mod p(x)` << 1 */
- { 0x00000001a4a3f952, 0x00000000e1b38744 },
- /* x^55296 mod p(x)` << 1, x^55360 mod p(x)` << 1 */
- { 0x00000000e2f51220, 0x00000000791585b2 },
- /* x^54272 mod p(x)` << 1, x^54336 mod p(x)` << 1 */
- { 0x000000004aa01f3e, 0x00000000ac53b894 },
- /* x^53248 mod p(x)` << 1, x^53312 mod p(x)` << 1 */
- { 0x00000000b3e90a58, 0x00000001ed5f2cf4 },
- /* x^52224 mod p(x)` << 1, x^52288 mod p(x)` << 1 */
- { 0x000000000c9ca2aa, 0x00000001df48b2e0 },
- /* x^51200 mod p(x)` << 1, x^51264 mod p(x)` << 1 */
- { 0x0000000151682316, 0x00000000049c1c62 },
- /* x^50176 mod p(x)` << 1, x^50240 mod p(x)` << 1 */
- { 0x0000000036fce78c, 0x000000017c460c12 },
- /* x^49152 mod p(x)` << 1, x^49216 mod p(x)` << 1 */
- { 0x000000009037dc10, 0x000000015be4da7e },
- /* x^48128 mod p(x)` << 1, x^48192 mod p(x)` << 1 */
- { 0x00000000d3298582, 0x000000010f38f668 },
- /* x^47104 mod p(x)` << 1, x^47168 mod p(x)` << 1 */
- { 0x00000001b42e8ad6, 0x0000000039f40a00 },
- /* x^46080 mod p(x)` << 1, x^46144 mod p(x)` << 1 */
- { 0x00000000142a9838, 0x00000000bd4c10c4 },
- /* x^45056 mod p(x)` << 1, x^45120 mod p(x)` << 1 */
- { 0x0000000109c7f190, 0x0000000042db1d98 },
- /* x^44032 mod p(x)` << 1, x^44096 mod p(x)` << 1 */
- { 0x0000000056ff9310, 0x00000001c905bae6 },
- /* x^43008 mod p(x)` << 1, x^43072 mod p(x)` << 1 */
- { 0x00000001594513aa, 0x00000000069d40ea },
- /* x^41984 mod p(x)` << 1, x^42048 mod p(x)` << 1 */
- { 0x00000001e3b5b1e8, 0x000000008e4fbad0 },
- /* x^40960 mod p(x)` << 1, x^41024 mod p(x)` << 1 */
- { 0x000000011dd5fc08, 0x0000000047bedd46 },
- /* x^39936 mod p(x)` << 1, x^40000 mod p(x)` << 1 */
- { 0x00000001675f0cc2, 0x0000000026396bf8 },
- /* x^38912 mod p(x)` << 1, x^38976 mod p(x)` << 1 */
- { 0x00000000d1c8dd44, 0x00000000379beb92 },
- /* x^37888 mod p(x)` << 1, x^37952 mod p(x)` << 1 */
- { 0x0000000115ebd3d8, 0x000000000abae54a },
- /* x^36864 mod p(x)` << 1, x^36928 mod p(x)` << 1 */
- { 0x00000001ecbd0dac, 0x0000000007e6a128 },
- /* x^35840 mod p(x)` << 1, x^35904 mod p(x)` << 1 */
- { 0x00000000cdf67af2, 0x000000000ade29d2 },
- /* x^34816 mod p(x)` << 1, x^34880 mod p(x)` << 1 */
- { 0x000000004c01ff4c, 0x00000000f974c45c },
- /* x^33792 mod p(x)` << 1, x^33856 mod p(x)` << 1 */
- { 0x00000000f2d8657e, 0x00000000e77ac60a },
- /* x^32768 mod p(x)` << 1, x^32832 mod p(x)` << 1 */
- { 0x000000006bae74c4, 0x0000000145895816 },
- /* x^31744 mod p(x)` << 1, x^31808 mod p(x)` << 1 */
- { 0x0000000152af8aa0, 0x0000000038e362be },
- /* x^30720 mod p(x)` << 1, x^30784 mod p(x)` << 1 */
- { 0x0000000004663802, 0x000000007f991a64 },
- /* x^29696 mod p(x)` << 1, x^29760 mod p(x)` << 1 */
- { 0x00000001ab2f5afc, 0x00000000fa366d3a },
- /* x^28672 mod p(x)` << 1, x^28736 mod p(x)` << 1 */
- { 0x0000000074a4ebd4, 0x00000001a2bb34f0 },
- /* x^27648 mod p(x)` << 1, x^27712 mod p(x)` << 1 */
- { 0x00000001d7ab3a4c, 0x0000000028a9981e },
- /* x^26624 mod p(x)` << 1, x^26688 mod p(x)` << 1 */
- { 0x00000001a8da60c6, 0x00000001dbc672be },
- /* x^25600 mod p(x)` << 1, x^25664 mod p(x)` << 1 */
- { 0x000000013cf63820, 0x00000000b04d77f6 },
- /* x^24576 mod p(x)` << 1, x^24640 mod p(x)` << 1 */
- { 0x00000000bec12e1e, 0x0000000124400d96 },
- /* x^23552 mod p(x)` << 1, x^23616 mod p(x)` << 1 */
- { 0x00000001c6368010, 0x000000014ca4b414 },
- /* x^22528 mod p(x)` << 1, x^22592 mod p(x)` << 1 */
- { 0x00000001e6e78758, 0x000000012fe2c938 },
- /* x^21504 mod p(x)` << 1, x^21568 mod p(x)` << 1 */
- { 0x000000008d7f2b3c, 0x00000001faed01e6 },
- /* x^20480 mod p(x)` << 1, x^20544 mod p(x)` << 1 */
- { 0x000000016b4a156e, 0x000000007e80ecfe },
- /* x^19456 mod p(x)` << 1, x^19520 mod p(x)` << 1 */
- { 0x00000001c63cfeb6, 0x0000000098daee94 },
- /* x^18432 mod p(x)` << 1, x^18496 mod p(x)` << 1 */
- { 0x000000015f902670, 0x000000010a04edea },
- /* x^17408 mod p(x)` << 1, x^17472 mod p(x)` << 1 */
- { 0x00000001cd5de11e, 0x00000001c00b4524 },
- /* x^16384 mod p(x)` << 1, x^16448 mod p(x)` << 1 */
- { 0x000000001acaec54, 0x0000000170296550 },
- /* x^15360 mod p(x)` << 1, x^15424 mod p(x)` << 1 */
- { 0x000000002bd0ca78, 0x0000000181afaa48 },
- /* x^14336 mod p(x)` << 1, x^14400 mod p(x)` << 1 */
- { 0x0000000032d63d5c, 0x0000000185a31ffa },
- /* x^13312 mod p(x)` << 1, x^13376 mod p(x)` << 1 */
- { 0x000000001c6d4e4c, 0x000000002469f608 },
- /* x^12288 mod p(x)` << 1, x^12352 mod p(x)` << 1 */
- { 0x0000000106a60b92, 0x000000006980102a },
- /* x^11264 mod p(x)` << 1, x^11328 mod p(x)` << 1 */
- { 0x00000000d3855e12, 0x0000000111ea9ca8 },
- /* x^10240 mod p(x)` << 1, x^10304 mod p(x)` << 1 */
- { 0x00000000e3125636, 0x00000001bd1d29ce },
- /* x^9216 mod p(x)` << 1, x^9280 mod p(x)` << 1 */
- { 0x000000009e8f7ea4, 0x00000001b34b9580 },
- /* x^8192 mod p(x)` << 1, x^8256 mod p(x)` << 1 */
- { 0x00000001c82e562c, 0x000000003076054e },
- /* x^7168 mod p(x)` << 1, x^7232 mod p(x)` << 1 */
- { 0x00000000ca9f09ce, 0x000000012a608ea4 },
- /* x^6144 mod p(x)` << 1, x^6208 mod p(x)` << 1 */
- { 0x00000000c63764e6, 0x00000000784d05fe },
- /* x^5120 mod p(x)` << 1, x^5184 mod p(x)` << 1 */
- { 0x0000000168d2e49e, 0x000000016ef0d82a },
- /* x^4096 mod p(x)` << 1, x^4160 mod p(x)` << 1 */
- { 0x00000000e986c148, 0x0000000075bda454 },
- /* x^3072 mod p(x)` << 1, x^3136 mod p(x)` << 1 */
- { 0x00000000cfb65894, 0x000000003dc0a1c4 },
- /* x^2048 mod p(x)` << 1, x^2112 mod p(x)` << 1 */
- { 0x0000000111cadee4, 0x00000000e9a5d8be },
- /* x^1024 mod p(x)` << 1, x^1088 mod p(x)` << 1 */
- { 0x0000000171fb63ce, 0x00000001609bc4b4 }
-#endif /* __LITTLE_ENDIAN__ */
- };
-
-/* Reduce final 1024-2048 bits to 64 bits, shifting 32 bits to include the trailing 32 bits of zeros */
-
-static const __vector unsigned long long vcrc_short_const[16]
- __attribute__((aligned (16))) = {
-#ifdef __LITTLE_ENDIAN__
- /* x^1952 mod p(x) , x^1984 mod p(x) , x^2016 mod p(x) , x^2048 mod p(x) */
- { 0x5cf015c388e56f72, 0x7fec2963e5bf8048 },
- /* x^1824 mod p(x) , x^1856 mod p(x) , x^1888 mod p(x) , x^1920 mod p(x) */
- { 0x963a18920246e2e6, 0x38e888d4844752a9 },
- /* x^1696 mod p(x) , x^1728 mod p(x) , x^1760 mod p(x) , x^1792 mod p(x) */
- { 0x419a441956993a31, 0x42316c00730206ad },
- /* x^1568 mod p(x) , x^1600 mod p(x) , x^1632 mod p(x) , x^1664 mod p(x) */
- { 0x924752ba2b830011, 0x543d5c543e65ddf9 },
- /* x^1440 mod p(x) , x^1472 mod p(x) , x^1504 mod p(x) , x^1536 mod p(x) */
- { 0x55bd7f9518e4a304, 0x78e87aaf56767c92 },
- /* x^1312 mod p(x) , x^1344 mod p(x) , x^1376 mod p(x) , x^1408 mod p(x) */
- { 0x6d76739fe0553f1e, 0x8f68fcec1903da7f },
- /* x^1184 mod p(x) , x^1216 mod p(x) , x^1248 mod p(x) , x^1280 mod p(x) */
- { 0xc133722b1fe0b5c3, 0x3f4840246791d588 },
- /* x^1056 mod p(x) , x^1088 mod p(x) , x^1120 mod p(x) , x^1152 mod p(x) */
- { 0x64b67ee0e55ef1f3, 0x34c96751b04de25a },
- /* x^928 mod p(x) , x^960 mod p(x) , x^992 mod p(x) , x^1024 mod p(x) */
- { 0x069db049b8fdb1e7, 0x156c8e180b4a395b },
- /* x^800 mod p(x) , x^832 mod p(x) , x^864 mod p(x) , x^896 mod p(x) */
- { 0xa11bfaf3c9e90b9e, 0xe0b99ccbe661f7be },
- /* x^672 mod p(x) , x^704 mod p(x) , x^736 mod p(x) , x^768 mod p(x) */
- { 0x817cdc5119b29a35, 0x041d37768cd75659 },
- /* x^544 mod p(x) , x^576 mod p(x) , x^608 mod p(x) , x^640 mod p(x) */
- { 0x1ce9d94b36c41f1c, 0x3a0777818cfaa965 },
- /* x^416 mod p(x) , x^448 mod p(x) , x^480 mod p(x) , x^512 mod p(x) */
- { 0x4f256efcb82be955, 0x0e148e8252377a55 },
- /* x^288 mod p(x) , x^320 mod p(x) , x^352 mod p(x) , x^384 mod p(x) */
- { 0xec1631edb2dea967, 0x9c25531d19e65dde },
- /* x^160 mod p(x) , x^192 mod p(x) , x^224 mod p(x) , x^256 mod p(x) */
- { 0x5d27e147510ac59a, 0x790606ff9957c0a6 },
- /* x^32 mod p(x) , x^64 mod p(x) , x^96 mod p(x) , x^128 mod p(x) */
- { 0xa66805eb18b8ea18, 0x82f63b786ea2d55c }
-#else /* __LITTLE_ENDIAN__ */
- /* x^1952 mod p(x) , x^1984 mod p(x) , x^2016 mod p(x) , x^2048 mod p(x) */
- { 0x7fec2963e5bf8048, 0x5cf015c388e56f72 },
- /* x^1824 mod p(x) , x^1856 mod p(x) , x^1888 mod p(x) , x^1920 mod p(x) */
- { 0x38e888d4844752a9, 0x963a18920246e2e6 },
- /* x^1696 mod p(x) , x^1728 mod p(x) , x^1760 mod p(x) , x^1792 mod p(x) */
- { 0x42316c00730206ad, 0x419a441956993a31 },
- /* x^1568 mod p(x) , x^1600 mod p(x) , x^1632 mod p(x) , x^1664 mod p(x) */
- { 0x543d5c543e65ddf9, 0x924752ba2b830011 },
- /* x^1440 mod p(x) , x^1472 mod p(x) , x^1504 mod p(x) , x^1536 mod p(x) */
- { 0x78e87aaf56767c92, 0x55bd7f9518e4a304 },
- /* x^1312 mod p(x) , x^1344 mod p(x) , x^1376 mod p(x) , x^1408 mod p(x) */
- { 0x8f68fcec1903da7f, 0x6d76739fe0553f1e },
- /* x^1184 mod p(x) , x^1216 mod p(x) , x^1248 mod p(x) , x^1280 mod p(x) */
- { 0x3f4840246791d588, 0xc133722b1fe0b5c3 },
- /* x^1056 mod p(x) , x^1088 mod p(x) , x^1120 mod p(x) , x^1152 mod p(x) */
- { 0x34c96751b04de25a, 0x64b67ee0e55ef1f3 },
- /* x^928 mod p(x) , x^960 mod p(x) , x^992 mod p(x) , x^1024 mod p(x) */
- { 0x156c8e180b4a395b, 0x069db049b8fdb1e7 },
- /* x^800 mod p(x) , x^832 mod p(x) , x^864 mod p(x) , x^896 mod p(x) */
- { 0xe0b99ccbe661f7be, 0xa11bfaf3c9e90b9e },
- /* x^672 mod p(x) , x^704 mod p(x) , x^736 mod p(x) , x^768 mod p(x) */
- { 0x041d37768cd75659, 0x817cdc5119b29a35 },
- /* x^544 mod p(x) , x^576 mod p(x) , x^608 mod p(x) , x^640 mod p(x) */
- { 0x3a0777818cfaa965, 0x1ce9d94b36c41f1c },
- /* x^416 mod p(x) , x^448 mod p(x) , x^480 mod p(x) , x^512 mod p(x) */
- { 0x0e148e8252377a55, 0x4f256efcb82be955 },
- /* x^288 mod p(x) , x^320 mod p(x) , x^352 mod p(x) , x^384 mod p(x) */
- { 0x9c25531d19e65dde, 0xec1631edb2dea967 },
- /* x^160 mod p(x) , x^192 mod p(x) , x^224 mod p(x) , x^256 mod p(x) */
- { 0x790606ff9957c0a6, 0x5d27e147510ac59a },
- /* x^32 mod p(x) , x^64 mod p(x) , x^96 mod p(x) , x^128 mod p(x) */
- { 0x82f63b786ea2d55c, 0xa66805eb18b8ea18 }
-#endif /* __LITTLE_ENDIAN__ */
- };
-
-/* Barrett constants */
-/* 33 bit reflected Barrett constant m - (4^32)/n */
-
-static const __vector unsigned long long v_Barrett_const[2]
- __attribute__((aligned (16))) = {
- /* x^64 div p(x) */
-#ifdef __LITTLE_ENDIAN__
- { 0x00000000dea713f1, 0x0000000000000000 },
- { 0x0000000105ec76f1, 0x0000000000000000 }
-#else /* __LITTLE_ENDIAN__ */
- { 0x0000000000000000, 0x00000000dea713f1 },
- { 0x0000000000000000, 0x0000000105ec76f1 }
-#endif /* __LITTLE_ENDIAN__ */
- };
-#endif /* POWER8_INTRINSICS */
-
-#endif /* __ASSEMBLER__ */
diff --git a/extra/crc32-vpmsum/crc32ieee_constants.h b/extra/crc32-vpmsum/crc32ieee_constants.h
deleted file mode 100644
index 2e07d2576ed..00000000000
--- a/extra/crc32-vpmsum/crc32ieee_constants.h
+++ /dev/null
@@ -1,1206 +0,0 @@
-/*
-*
-* THIS FILE IS GENERATED WITH
-./crc32_constants -c -x -r 0x4c11db7
-
-* This is from https://github.com/antonblanchard/crc32-vpmsum/
-* DO NOT MODIFY IT MANUALLY!
-*
-*/
-
-#define CRC 0x4c11db7
-#define CRC_XOR
-#define REFLECT
-#define MAX_SIZE 32768
-
-#ifndef __ASSEMBLER__
-#ifdef CRC_TABLE
-static const unsigned int crc_table[] = {
- 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
- 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
- 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
- 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
- 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
- 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
- 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
- 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
- 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
- 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
- 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
- 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
- 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
- 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
- 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
- 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
- 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
- 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
- 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
- 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
- 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
- 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
- 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
- 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
- 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
- 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
- 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
- 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
- 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
- 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
- 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
- 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
- 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
- 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
- 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
- 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
- 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
- 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
- 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
- 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
- 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
- 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
- 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
- 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
- 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
- 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
- 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
- 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
- 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
- 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
- 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
- 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
- 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
- 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
- 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
- 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
- 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
- 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
- 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
- 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
- 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
- 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
- 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
- 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,};
-
-#endif /* CRC_TABLE */
-#ifdef POWER8_INTRINSICS
-
-/* Constants */
-
-/* Reduce 262144 kbits to 1024 bits */
-static const __vector unsigned long long vcrc_const[255]
- __attribute__((aligned (16))) = {
-#ifdef __LITTLE_ENDIAN__
- /* x^261120 mod p(x)` << 1, x^261184 mod p(x)` << 1 */
- { 0x0000000099ea94a8, 0x00000001651797d2 },
- /* x^260096 mod p(x)` << 1, x^260160 mod p(x)` << 1 */
- { 0x00000000945a8420, 0x0000000021e0d56c },
- /* x^259072 mod p(x)` << 1, x^259136 mod p(x)` << 1 */
- { 0x0000000030762706, 0x000000000f95ecaa },
- /* x^258048 mod p(x)` << 1, x^258112 mod p(x)` << 1 */
- { 0x00000001a52fc582, 0x00000001ebd224ac },
- /* x^257024 mod p(x)` << 1, x^257088 mod p(x)` << 1 */
- { 0x00000001a4a7167a, 0x000000000ccb97ca },
- /* x^256000 mod p(x)` << 1, x^256064 mod p(x)` << 1 */
- { 0x000000000c18249a, 0x00000001006ec8a8 },
- /* x^254976 mod p(x)` << 1, x^255040 mod p(x)` << 1 */
- { 0x00000000a924ae7c, 0x000000014f58f196 },
- /* x^253952 mod p(x)` << 1, x^254016 mod p(x)` << 1 */
- { 0x00000001e12ccc12, 0x00000001a7192ca6 },
- /* x^252928 mod p(x)` << 1, x^252992 mod p(x)` << 1 */
- { 0x00000000a0b9d4ac, 0x000000019a64bab2 },
- /* x^251904 mod p(x)` << 1, x^251968 mod p(x)` << 1 */
- { 0x0000000095e8ddfe, 0x0000000014f4ed2e },
- /* x^250880 mod p(x)` << 1, x^250944 mod p(x)` << 1 */
- { 0x00000000233fddc4, 0x000000011092b6a2 },
- /* x^249856 mod p(x)` << 1, x^249920 mod p(x)` << 1 */
- { 0x00000001b4529b62, 0x00000000c8a1629c },
- /* x^248832 mod p(x)` << 1, x^248896 mod p(x)` << 1 */
- { 0x00000001a7fa0e64, 0x000000017bf32e8e },
- /* x^247808 mod p(x)` << 1, x^247872 mod p(x)` << 1 */
- { 0x00000001b5334592, 0x00000001f8cc6582 },
- /* x^246784 mod p(x)` << 1, x^246848 mod p(x)` << 1 */
- { 0x000000011f8ee1b4, 0x000000008631ddf0 },
- /* x^245760 mod p(x)` << 1, x^245824 mod p(x)` << 1 */
- { 0x000000006252e632, 0x000000007e5a76d0 },
- /* x^244736 mod p(x)` << 1, x^244800 mod p(x)` << 1 */
- { 0x00000000ab973e84, 0x000000002b09b31c },
- /* x^243712 mod p(x)` << 1, x^243776 mod p(x)` << 1 */
- { 0x000000007734f5ec, 0x00000001b2df1f84 },
- /* x^242688 mod p(x)` << 1, x^242752 mod p(x)` << 1 */
- { 0x000000007c547798, 0x00000001d6f56afc },
- /* x^241664 mod p(x)` << 1, x^241728 mod p(x)` << 1 */
- { 0x000000007ec40210, 0x00000001b9b5e70c },
- /* x^240640 mod p(x)` << 1, x^240704 mod p(x)` << 1 */
- { 0x00000001ab1695a8, 0x0000000034b626d2 },
- /* x^239616 mod p(x)` << 1, x^239680 mod p(x)` << 1 */
- { 0x0000000090494bba, 0x000000014c53479a },
- /* x^238592 mod p(x)` << 1, x^238656 mod p(x)` << 1 */
- { 0x00000001123fb816, 0x00000001a6d179a4 },
- /* x^237568 mod p(x)` << 1, x^237632 mod p(x)` << 1 */
- { 0x00000001e188c74c, 0x000000015abd16b4 },
- /* x^236544 mod p(x)` << 1, x^236608 mod p(x)` << 1 */
- { 0x00000001c2d3451c, 0x00000000018f9852 },
- /* x^235520 mod p(x)` << 1, x^235584 mod p(x)` << 1 */
- { 0x00000000f55cf1ca, 0x000000001fb3084a },
- /* x^234496 mod p(x)` << 1, x^234560 mod p(x)` << 1 */
- { 0x00000001a0531540, 0x00000000c53dfb04 },
- /* x^233472 mod p(x)` << 1, x^233536 mod p(x)` << 1 */
- { 0x0000000132cd7ebc, 0x00000000e10c9ad6 },
- /* x^232448 mod p(x)` << 1, x^232512 mod p(x)` << 1 */
- { 0x0000000073ab7f36, 0x0000000025aa994a },
- /* x^231424 mod p(x)` << 1, x^231488 mod p(x)` << 1 */
- { 0x0000000041aed1c2, 0x00000000fa3a74c4 },
- /* x^230400 mod p(x)` << 1, x^230464 mod p(x)` << 1 */
- { 0x0000000136c53800, 0x0000000033eb3f40 },
- /* x^229376 mod p(x)` << 1, x^229440 mod p(x)` << 1 */
- { 0x0000000126835a30, 0x000000017193f296 },
- /* x^228352 mod p(x)` << 1, x^228416 mod p(x)` << 1 */
- { 0x000000006241b502, 0x0000000043f6c86a },
- /* x^227328 mod p(x)` << 1, x^227392 mod p(x)` << 1 */
- { 0x00000000d5196ad4, 0x000000016b513ec6 },
- /* x^226304 mod p(x)` << 1, x^226368 mod p(x)` << 1 */
- { 0x000000009cfa769a, 0x00000000c8f25b4e },
- /* x^225280 mod p(x)` << 1, x^225344 mod p(x)` << 1 */
- { 0x00000000920e5df4, 0x00000001a45048ec },
- /* x^224256 mod p(x)` << 1, x^224320 mod p(x)` << 1 */
- { 0x0000000169dc310e, 0x000000000c441004 },
- /* x^223232 mod p(x)` << 1, x^223296 mod p(x)` << 1 */
- { 0x0000000009fc331c, 0x000000000e17cad6 },
- /* x^222208 mod p(x)` << 1, x^222272 mod p(x)` << 1 */
- { 0x000000010d94a81e, 0x00000001253ae964 },
- /* x^221184 mod p(x)` << 1, x^221248 mod p(x)` << 1 */
- { 0x0000000027a20ab2, 0x00000001d7c88ebc },
- /* x^220160 mod p(x)` << 1, x^220224 mod p(x)` << 1 */
- { 0x0000000114f87504, 0x00000001e7ca913a },
- /* x^219136 mod p(x)` << 1, x^219200 mod p(x)` << 1 */
- { 0x000000004b076d96, 0x0000000033ed078a },
- /* x^218112 mod p(x)` << 1, x^218176 mod p(x)` << 1 */
- { 0x00000000da4d1e74, 0x00000000e1839c78 },
- /* x^217088 mod p(x)` << 1, x^217152 mod p(x)` << 1 */
- { 0x000000001b81f672, 0x00000001322b267e },
- /* x^216064 mod p(x)` << 1, x^216128 mod p(x)` << 1 */
- { 0x000000009367c988, 0x00000000638231b6 },
- /* x^215040 mod p(x)` << 1, x^215104 mod p(x)` << 1 */
- { 0x00000001717214ca, 0x00000001ee7f16f4 },
- /* x^214016 mod p(x)` << 1, x^214080 mod p(x)` << 1 */
- { 0x000000009f47d820, 0x0000000117d9924a },
- /* x^212992 mod p(x)` << 1, x^213056 mod p(x)` << 1 */
- { 0x000000010d9a47d2, 0x00000000e1a9e0c4 },
- /* x^211968 mod p(x)` << 1, x^212032 mod p(x)` << 1 */
- { 0x00000000a696c58c, 0x00000001403731dc },
- /* x^210944 mod p(x)` << 1, x^211008 mod p(x)` << 1 */
- { 0x000000002aa28ec6, 0x00000001a5ea9682 },
- /* x^209920 mod p(x)` << 1, x^209984 mod p(x)` << 1 */
- { 0x00000001fe18fd9a, 0x0000000101c5c578 },
- /* x^208896 mod p(x)` << 1, x^208960 mod p(x)` << 1 */
- { 0x000000019d4fc1ae, 0x00000000dddf6494 },
- /* x^207872 mod p(x)` << 1, x^207936 mod p(x)` << 1 */
- { 0x00000001ba0e3dea, 0x00000000f1c3db28 },
- /* x^206848 mod p(x)` << 1, x^206912 mod p(x)` << 1 */
- { 0x0000000074b59a5e, 0x000000013112fb9c },
- /* x^205824 mod p(x)` << 1, x^205888 mod p(x)` << 1 */
- { 0x00000000f2b5ea98, 0x00000000b680b906 },
- /* x^204800 mod p(x)` << 1, x^204864 mod p(x)` << 1 */
- { 0x0000000187132676, 0x000000001a282932 },
- /* x^203776 mod p(x)` << 1, x^203840 mod p(x)` << 1 */
- { 0x000000010a8c6ad4, 0x0000000089406e7e },
- /* x^202752 mod p(x)` << 1, x^202816 mod p(x)` << 1 */
- { 0x00000001e21dfe70, 0x00000001def6be8c },
- /* x^201728 mod p(x)` << 1, x^201792 mod p(x)` << 1 */
- { 0x00000001da0050e4, 0x0000000075258728 },
- /* x^200704 mod p(x)` << 1, x^200768 mod p(x)` << 1 */
- { 0x00000000772172ae, 0x000000019536090a },
- /* x^199680 mod p(x)` << 1, x^199744 mod p(x)` << 1 */
- { 0x00000000e47724aa, 0x00000000f2455bfc },
- /* x^198656 mod p(x)` << 1, x^198720 mod p(x)` << 1 */
- { 0x000000003cd63ac4, 0x000000018c40baf4 },
- /* x^197632 mod p(x)` << 1, x^197696 mod p(x)` << 1 */
- { 0x00000001bf47d352, 0x000000004cd390d4 },
- /* x^196608 mod p(x)` << 1, x^196672 mod p(x)` << 1 */
- { 0x000000018dc1d708, 0x00000001e4ece95a },
- /* x^195584 mod p(x)` << 1, x^195648 mod p(x)` << 1 */
- { 0x000000002d4620a4, 0x000000001a3ee918 },
- /* x^194560 mod p(x)` << 1, x^194624 mod p(x)` << 1 */
- { 0x0000000058fd1740, 0x000000007c652fb8 },
- /* x^193536 mod p(x)` << 1, x^193600 mod p(x)` << 1 */
- { 0x00000000dadd9bfc, 0x000000011c67842c },
- /* x^192512 mod p(x)` << 1, x^192576 mod p(x)` << 1 */
- { 0x00000001ea2140be, 0x00000000254f759c },
- /* x^191488 mod p(x)` << 1, x^191552 mod p(x)` << 1 */
- { 0x000000009de128ba, 0x000000007ece94ca },
- /* x^190464 mod p(x)` << 1, x^190528 mod p(x)` << 1 */
- { 0x000000013ac3aa8e, 0x0000000038f258c2 },
- /* x^189440 mod p(x)` << 1, x^189504 mod p(x)` << 1 */
- { 0x0000000099980562, 0x00000001cdf17b00 },
- /* x^188416 mod p(x)` << 1, x^188480 mod p(x)` << 1 */
- { 0x00000001c1579c86, 0x000000011f882c16 },
- /* x^187392 mod p(x)` << 1, x^187456 mod p(x)` << 1 */
- { 0x0000000068dbbf94, 0x0000000100093fc8 },
- /* x^186368 mod p(x)` << 1, x^186432 mod p(x)` << 1 */
- { 0x000000004509fb04, 0x00000001cd684f16 },
- /* x^185344 mod p(x)` << 1, x^185408 mod p(x)` << 1 */
- { 0x00000001202f6398, 0x000000004bc6a70a },
- /* x^184320 mod p(x)` << 1, x^184384 mod p(x)` << 1 */
- { 0x000000013aea243e, 0x000000004fc7e8e4 },
- /* x^183296 mod p(x)` << 1, x^183360 mod p(x)` << 1 */
- { 0x00000001b4052ae6, 0x0000000130103f1c },
- /* x^182272 mod p(x)` << 1, x^182336 mod p(x)` << 1 */
- { 0x00000001cd2a0ae8, 0x0000000111b0024c },
- /* x^181248 mod p(x)` << 1, x^181312 mod p(x)` << 1 */
- { 0x00000001fe4aa8b4, 0x000000010b3079da },
- /* x^180224 mod p(x)` << 1, x^180288 mod p(x)` << 1 */
- { 0x00000001d1559a42, 0x000000010192bcc2 },
- /* x^179200 mod p(x)` << 1, x^179264 mod p(x)` << 1 */
- { 0x00000001f3e05ecc, 0x0000000074838d50 },
- /* x^178176 mod p(x)` << 1, x^178240 mod p(x)` << 1 */
- { 0x0000000104ddd2cc, 0x000000001b20f520 },
- /* x^177152 mod p(x)` << 1, x^177216 mod p(x)` << 1 */
- { 0x000000015393153c, 0x0000000050c3590a },
- /* x^176128 mod p(x)` << 1, x^176192 mod p(x)` << 1 */
- { 0x0000000057e942c6, 0x00000000b41cac8e },
- /* x^175104 mod p(x)` << 1, x^175168 mod p(x)` << 1 */
- { 0x000000012c633850, 0x000000000c72cc78 },
- /* x^174080 mod p(x)` << 1, x^174144 mod p(x)` << 1 */
- { 0x00000000ebcaae4c, 0x0000000030cdb032 },
- /* x^173056 mod p(x)` << 1, x^173120 mod p(x)` << 1 */
- { 0x000000013ee532a6, 0x000000013e09fc32 },
- /* x^172032 mod p(x)` << 1, x^172096 mod p(x)` << 1 */
- { 0x00000001bf0cbc7e, 0x000000001ed624d2 },
- /* x^171008 mod p(x)` << 1, x^171072 mod p(x)` << 1 */
- { 0x00000000d50b7a5a, 0x00000000781aee1a },
- /* x^169984 mod p(x)` << 1, x^170048 mod p(x)` << 1 */
- { 0x0000000002fca6e8, 0x00000001c4d8348c },
- /* x^168960 mod p(x)` << 1, x^169024 mod p(x)` << 1 */
- { 0x000000007af40044, 0x0000000057a40336 },
- /* x^167936 mod p(x)` << 1, x^168000 mod p(x)` << 1 */
- { 0x0000000016178744, 0x0000000085544940 },
- /* x^166912 mod p(x)` << 1, x^166976 mod p(x)` << 1 */
- { 0x000000014c177458, 0x000000019cd21e80 },
- /* x^165888 mod p(x)` << 1, x^165952 mod p(x)` << 1 */
- { 0x000000011b6ddf04, 0x000000013eb95bc0 },
- /* x^164864 mod p(x)` << 1, x^164928 mod p(x)` << 1 */
- { 0x00000001f3e29ccc, 0x00000001dfc9fdfc },
- /* x^163840 mod p(x)` << 1, x^163904 mod p(x)` << 1 */
- { 0x0000000135ae7562, 0x00000000cd028bc2 },
- /* x^162816 mod p(x)` << 1, x^162880 mod p(x)` << 1 */
- { 0x0000000190ef812c, 0x0000000090db8c44 },
- /* x^161792 mod p(x)` << 1, x^161856 mod p(x)` << 1 */
- { 0x0000000067a2c786, 0x000000010010a4ce },
- /* x^160768 mod p(x)` << 1, x^160832 mod p(x)` << 1 */
- { 0x0000000048b9496c, 0x00000001c8f4c72c },
- /* x^159744 mod p(x)` << 1, x^159808 mod p(x)` << 1 */
- { 0x000000015a422de6, 0x000000001c26170c },
- /* x^158720 mod p(x)` << 1, x^158784 mod p(x)` << 1 */
- { 0x00000001ef0e3640, 0x00000000e3fccf68 },
- /* x^157696 mod p(x)` << 1, x^157760 mod p(x)` << 1 */
- { 0x00000001006d2d26, 0x00000000d513ed24 },
- /* x^156672 mod p(x)` << 1, x^156736 mod p(x)` << 1 */
- { 0x00000001170d56d6, 0x00000000141beada },
- /* x^155648 mod p(x)` << 1, x^155712 mod p(x)` << 1 */
- { 0x00000000a5fb613c, 0x000000011071aea0 },
- /* x^154624 mod p(x)` << 1, x^154688 mod p(x)` << 1 */
- { 0x0000000040bbf7fc, 0x000000012e19080a },
- /* x^153600 mod p(x)` << 1, x^153664 mod p(x)` << 1 */
- { 0x000000016ac3a5b2, 0x0000000100ecf826 },
- /* x^152576 mod p(x)` << 1, x^152640 mod p(x)` << 1 */
- { 0x00000000abf16230, 0x0000000069b09412 },
- /* x^151552 mod p(x)` << 1, x^151616 mod p(x)` << 1 */
- { 0x00000001ebe23fac, 0x0000000122297bac },
- /* x^150528 mod p(x)` << 1, x^150592 mod p(x)` << 1 */
- { 0x000000008b6a0894, 0x00000000e9e4b068 },
- /* x^149504 mod p(x)` << 1, x^149568 mod p(x)` << 1 */
- { 0x00000001288ea478, 0x000000004b38651a },
- /* x^148480 mod p(x)` << 1, x^148544 mod p(x)` << 1 */
- { 0x000000016619c442, 0x00000001468360e2 },
- /* x^147456 mod p(x)` << 1, x^147520 mod p(x)` << 1 */
- { 0x0000000086230038, 0x00000000121c2408 },
- /* x^146432 mod p(x)` << 1, x^146496 mod p(x)` << 1 */
- { 0x000000017746a756, 0x00000000da7e7d08 },
- /* x^145408 mod p(x)` << 1, x^145472 mod p(x)` << 1 */
- { 0x0000000191b8f8f8, 0x00000001058d7652 },
- /* x^144384 mod p(x)` << 1, x^144448 mod p(x)` << 1 */
- { 0x000000008e167708, 0x000000014a098a90 },
- /* x^143360 mod p(x)` << 1, x^143424 mod p(x)` << 1 */
- { 0x0000000148b22d54, 0x0000000020dbe72e },
- /* x^142336 mod p(x)` << 1, x^142400 mod p(x)` << 1 */
- { 0x0000000044ba2c3c, 0x000000011e7323e8 },
- /* x^141312 mod p(x)` << 1, x^141376 mod p(x)` << 1 */
- { 0x00000000b54d2b52, 0x00000000d5d4bf94 },
- /* x^140288 mod p(x)` << 1, x^140352 mod p(x)` << 1 */
- { 0x0000000005a4fd8a, 0x0000000199d8746c },
- /* x^139264 mod p(x)` << 1, x^139328 mod p(x)` << 1 */
- { 0x0000000139f9fc46, 0x00000000ce9ca8a0 },
- /* x^138240 mod p(x)` << 1, x^138304 mod p(x)` << 1 */
- { 0x000000015a1fa824, 0x00000000136edece },
- /* x^137216 mod p(x)` << 1, x^137280 mod p(x)` << 1 */
- { 0x000000000a61ae4c, 0x000000019b92a068 },
- /* x^136192 mod p(x)` << 1, x^136256 mod p(x)` << 1 */
- { 0x0000000145e9113e, 0x0000000071d62206 },
- /* x^135168 mod p(x)` << 1, x^135232 mod p(x)` << 1 */
- { 0x000000006a348448, 0x00000000dfc50158 },
- /* x^134144 mod p(x)` << 1, x^134208 mod p(x)` << 1 */
- { 0x000000004d80a08c, 0x00000001517626bc },
- /* x^133120 mod p(x)` << 1, x^133184 mod p(x)` << 1 */
- { 0x000000014b6837a0, 0x0000000148d1e4fa },
- /* x^132096 mod p(x)` << 1, x^132160 mod p(x)` << 1 */
- { 0x000000016896a7fc, 0x0000000094d8266e },
- /* x^131072 mod p(x)` << 1, x^131136 mod p(x)` << 1 */
- { 0x000000014f187140, 0x00000000606c5e34 },
- /* x^130048 mod p(x)` << 1, x^130112 mod p(x)` << 1 */
- { 0x000000019581b9da, 0x000000019766beaa },
- /* x^129024 mod p(x)` << 1, x^129088 mod p(x)` << 1 */
- { 0x00000001091bc984, 0x00000001d80c506c },
- /* x^128000 mod p(x)` << 1, x^128064 mod p(x)` << 1 */
- { 0x000000001067223c, 0x000000001e73837c },
- /* x^126976 mod p(x)` << 1, x^127040 mod p(x)` << 1 */
- { 0x00000001ab16ea02, 0x0000000064d587de },
- /* x^125952 mod p(x)` << 1, x^126016 mod p(x)` << 1 */
- { 0x000000013c4598a8, 0x00000000f4a507b0 },
- /* x^124928 mod p(x)` << 1, x^124992 mod p(x)` << 1 */
- { 0x00000000b3735430, 0x0000000040e342fc },
- /* x^123904 mod p(x)` << 1, x^123968 mod p(x)` << 1 */
- { 0x00000001bb3fc0c0, 0x00000001d5ad9c3a },
- /* x^122880 mod p(x)` << 1, x^122944 mod p(x)` << 1 */
- { 0x00000001570ae19c, 0x0000000094a691a4 },
- /* x^121856 mod p(x)` << 1, x^121920 mod p(x)` << 1 */
- { 0x00000001ea910712, 0x00000001271ecdfa },
- /* x^120832 mod p(x)` << 1, x^120896 mod p(x)` << 1 */
- { 0x0000000167127128, 0x000000009e54475a },
- /* x^119808 mod p(x)` << 1, x^119872 mod p(x)` << 1 */
- { 0x0000000019e790a2, 0x00000000c9c099ee },
- /* x^118784 mod p(x)` << 1, x^118848 mod p(x)` << 1 */
- { 0x000000003788f710, 0x000000009a2f736c },
- /* x^117760 mod p(x)` << 1, x^117824 mod p(x)` << 1 */
- { 0x00000001682a160e, 0x00000000bb9f4996 },
- /* x^116736 mod p(x)` << 1, x^116800 mod p(x)` << 1 */
- { 0x000000007f0ebd2e, 0x00000001db688050 },
- /* x^115712 mod p(x)` << 1, x^115776 mod p(x)` << 1 */
- { 0x000000002b032080, 0x00000000e9b10af4 },
- /* x^114688 mod p(x)` << 1, x^114752 mod p(x)` << 1 */
- { 0x00000000cfd1664a, 0x000000012d4545e4 },
- /* x^113664 mod p(x)` << 1, x^113728 mod p(x)` << 1 */
- { 0x00000000aa1181c2, 0x000000000361139c },
- /* x^112640 mod p(x)` << 1, x^112704 mod p(x)` << 1 */
- { 0x00000000ddd08002, 0x00000001a5a1a3a8 },
- /* x^111616 mod p(x)` << 1, x^111680 mod p(x)` << 1 */
- { 0x00000000e8dd0446, 0x000000006844e0b0 },
- /* x^110592 mod p(x)` << 1, x^110656 mod p(x)` << 1 */
- { 0x00000001bbd94a00, 0x00000000c3762f28 },
- /* x^109568 mod p(x)` << 1, x^109632 mod p(x)` << 1 */
- { 0x00000000ab6cd180, 0x00000001d26287a2 },
- /* x^108544 mod p(x)` << 1, x^108608 mod p(x)` << 1 */
- { 0x0000000031803ce2, 0x00000001f6f0bba8 },
- /* x^107520 mod p(x)` << 1, x^107584 mod p(x)` << 1 */
- { 0x0000000024f40b0c, 0x000000002ffabd62 },
- /* x^106496 mod p(x)` << 1, x^106560 mod p(x)` << 1 */
- { 0x00000001ba1d9834, 0x00000000fb4516b8 },
- /* x^105472 mod p(x)` << 1, x^105536 mod p(x)` << 1 */
- { 0x0000000104de61aa, 0x000000018cfa961c },
- /* x^104448 mod p(x)` << 1, x^104512 mod p(x)` << 1 */
- { 0x0000000113e40d46, 0x000000019e588d52 },
- /* x^103424 mod p(x)` << 1, x^103488 mod p(x)` << 1 */
- { 0x00000001415598a0, 0x00000001180f0bbc },
- /* x^102400 mod p(x)` << 1, x^102464 mod p(x)` << 1 */
- { 0x00000000bf6c8c90, 0x00000000e1d9177a },
- /* x^101376 mod p(x)` << 1, x^101440 mod p(x)` << 1 */
- { 0x00000001788b0504, 0x0000000105abc27c },
- /* x^100352 mod p(x)` << 1, x^100416 mod p(x)` << 1 */
- { 0x0000000038385d02, 0x00000000972e4a58 },
- /* x^99328 mod p(x)` << 1, x^99392 mod p(x)` << 1 */
- { 0x00000001b6c83844, 0x0000000183499a5e },
- /* x^98304 mod p(x)` << 1, x^98368 mod p(x)` << 1 */
- { 0x0000000051061a8a, 0x00000001c96a8cca },
- /* x^97280 mod p(x)` << 1, x^97344 mod p(x)` << 1 */
- { 0x000000017351388a, 0x00000001a1a5b60c },
- /* x^96256 mod p(x)` << 1, x^96320 mod p(x)` << 1 */
- { 0x0000000132928f92, 0x00000000e4b6ac9c },
- /* x^95232 mod p(x)` << 1, x^95296 mod p(x)` << 1 */
- { 0x00000000e6b4f48a, 0x00000001807e7f5a },
- /* x^94208 mod p(x)` << 1, x^94272 mod p(x)` << 1 */
- { 0x0000000039d15e90, 0x000000017a7e3bc8 },
- /* x^93184 mod p(x)` << 1, x^93248 mod p(x)` << 1 */
- { 0x00000000312d6074, 0x00000000d73975da },
- /* x^92160 mod p(x)` << 1, x^92224 mod p(x)` << 1 */
- { 0x000000017bbb2cc4, 0x000000017375d038 },
- /* x^91136 mod p(x)` << 1, x^91200 mod p(x)` << 1 */
- { 0x000000016ded3e18, 0x00000000193680bc },
- /* x^90112 mod p(x)` << 1, x^90176 mod p(x)` << 1 */
- { 0x00000000f1638b16, 0x00000000999b06f6 },
- /* x^89088 mod p(x)` << 1, x^89152 mod p(x)` << 1 */
- { 0x00000001d38b9ecc, 0x00000001f685d2b8 },
- /* x^88064 mod p(x)` << 1, x^88128 mod p(x)` << 1 */
- { 0x000000018b8d09dc, 0x00000001f4ecbed2 },
- /* x^87040 mod p(x)` << 1, x^87104 mod p(x)` << 1 */
- { 0x00000000e7bc27d2, 0x00000000ba16f1a0 },
- /* x^86016 mod p(x)` << 1, x^86080 mod p(x)` << 1 */
- { 0x00000000275e1e96, 0x0000000115aceac4 },
- /* x^84992 mod p(x)` << 1, x^85056 mod p(x)` << 1 */
- { 0x00000000e2e3031e, 0x00000001aeff6292 },
- /* x^83968 mod p(x)` << 1, x^84032 mod p(x)` << 1 */
- { 0x00000001041c84d8, 0x000000009640124c },
- /* x^82944 mod p(x)` << 1, x^83008 mod p(x)` << 1 */
- { 0x00000000706ce672, 0x0000000114f41f02 },
- /* x^81920 mod p(x)` << 1, x^81984 mod p(x)` << 1 */
- { 0x000000015d5070da, 0x000000009c5f3586 },
- /* x^80896 mod p(x)` << 1, x^80960 mod p(x)` << 1 */
- { 0x0000000038f9493a, 0x00000001878275fa },
- /* x^79872 mod p(x)` << 1, x^79936 mod p(x)` << 1 */
- { 0x00000000a3348a76, 0x00000000ddc42ce8 },
- /* x^78848 mod p(x)` << 1, x^78912 mod p(x)` << 1 */
- { 0x00000001ad0aab92, 0x0000000181d2c73a },
- /* x^77824 mod p(x)` << 1, x^77888 mod p(x)` << 1 */
- { 0x000000019e85f712, 0x0000000141c9320a },
- /* x^76800 mod p(x)` << 1, x^76864 mod p(x)` << 1 */
- { 0x000000005a871e76, 0x000000015235719a },
- /* x^75776 mod p(x)` << 1, x^75840 mod p(x)` << 1 */
- { 0x000000017249c662, 0x00000000be27d804 },
- /* x^74752 mod p(x)` << 1, x^74816 mod p(x)` << 1 */
- { 0x000000003a084712, 0x000000006242d45a },
- /* x^73728 mod p(x)` << 1, x^73792 mod p(x)` << 1 */
- { 0x00000000ed438478, 0x000000009a53638e },
- /* x^72704 mod p(x)` << 1, x^72768 mod p(x)` << 1 */
- { 0x00000000abac34cc, 0x00000001001ecfb6 },
- /* x^71680 mod p(x)` << 1, x^71744 mod p(x)` << 1 */
- { 0x000000005f35ef3e, 0x000000016d7c2d64 },
- /* x^70656 mod p(x)` << 1, x^70720 mod p(x)` << 1 */
- { 0x0000000047d6608c, 0x00000001d0ce46c0 },
- /* x^69632 mod p(x)` << 1, x^69696 mod p(x)` << 1 */
- { 0x000000002d01470e, 0x0000000124c907b4 },
- /* x^68608 mod p(x)` << 1, x^68672 mod p(x)` << 1 */
- { 0x0000000158bbc7b0, 0x0000000018a555ca },
- /* x^67584 mod p(x)` << 1, x^67648 mod p(x)` << 1 */
- { 0x00000000c0a23e8e, 0x000000006b0980bc },
- /* x^66560 mod p(x)` << 1, x^66624 mod p(x)` << 1 */
- { 0x00000001ebd85c88, 0x000000008bbba964 },
- /* x^65536 mod p(x)` << 1, x^65600 mod p(x)` << 1 */
- { 0x000000019ee20bb2, 0x00000001070a5a1e },
- /* x^64512 mod p(x)` << 1, x^64576 mod p(x)` << 1 */
- { 0x00000001acabf2d6, 0x000000002204322a },
- /* x^63488 mod p(x)` << 1, x^63552 mod p(x)` << 1 */
- { 0x00000001b7963d56, 0x00000000a27524d0 },
- /* x^62464 mod p(x)` << 1, x^62528 mod p(x)` << 1 */
- { 0x000000017bffa1fe, 0x0000000020b1e4ba },
- /* x^61440 mod p(x)` << 1, x^61504 mod p(x)` << 1 */
- { 0x000000001f15333e, 0x0000000032cc27fc },
- /* x^60416 mod p(x)` << 1, x^60480 mod p(x)` << 1 */
- { 0x000000018593129e, 0x0000000044dd22b8 },
- /* x^59392 mod p(x)` << 1, x^59456 mod p(x)` << 1 */
- { 0x000000019cb32602, 0x00000000dffc9e0a },
- /* x^58368 mod p(x)` << 1, x^58432 mod p(x)` << 1 */
- { 0x0000000142b05cc8, 0x00000001b7a0ed14 },
- /* x^57344 mod p(x)` << 1, x^57408 mod p(x)` << 1 */
- { 0x00000001be49e7a4, 0x00000000c7842488 },
- /* x^56320 mod p(x)` << 1, x^56384 mod p(x)` << 1 */
- { 0x0000000108f69d6c, 0x00000001c02a4fee },
- /* x^55296 mod p(x)` << 1, x^55360 mod p(x)` << 1 */
- { 0x000000006c0971f0, 0x000000003c273778 },
- /* x^54272 mod p(x)` << 1, x^54336 mod p(x)` << 1 */
- { 0x000000005b16467a, 0x00000001d63f8894 },
- /* x^53248 mod p(x)` << 1, x^53312 mod p(x)` << 1 */
- { 0x00000001551a628e, 0x000000006be557d6 },
- /* x^52224 mod p(x)` << 1, x^52288 mod p(x)` << 1 */
- { 0x000000019e42ea92, 0x000000006a7806ea },
- /* x^51200 mod p(x)` << 1, x^51264 mod p(x)` << 1 */
- { 0x000000012fa83ff2, 0x000000016155aa0c },
- /* x^50176 mod p(x)` << 1, x^50240 mod p(x)` << 1 */
- { 0x000000011ca9cde0, 0x00000000908650ac },
- /* x^49152 mod p(x)` << 1, x^49216 mod p(x)` << 1 */
- { 0x00000000c8e5cd74, 0x00000000aa5a8084 },
- /* x^48128 mod p(x)` << 1, x^48192 mod p(x)` << 1 */
- { 0x0000000096c27f0c, 0x0000000191bb500a },
- /* x^47104 mod p(x)` << 1, x^47168 mod p(x)` << 1 */
- { 0x000000002baed926, 0x0000000064e9bed0 },
- /* x^46080 mod p(x)` << 1, x^46144 mod p(x)` << 1 */
- { 0x000000017c8de8d2, 0x000000009444f302 },
- /* x^45056 mod p(x)` << 1, x^45120 mod p(x)` << 1 */
- { 0x00000000d43d6068, 0x000000019db07d3c },
- /* x^44032 mod p(x)` << 1, x^44096 mod p(x)` << 1 */
- { 0x00000000cb2c4b26, 0x00000001359e3e6e },
- /* x^43008 mod p(x)` << 1, x^43072 mod p(x)` << 1 */
- { 0x0000000145b8da26, 0x00000001e4f10dd2 },
- /* x^41984 mod p(x)` << 1, x^42048 mod p(x)` << 1 */
- { 0x000000018fff4b08, 0x0000000124f5735e },
- /* x^40960 mod p(x)` << 1, x^41024 mod p(x)` << 1 */
- { 0x0000000150b58ed0, 0x0000000124760a4c },
- /* x^39936 mod p(x)` << 1, x^40000 mod p(x)` << 1 */
- { 0x00000001549f39bc, 0x000000000f1fc186 },
- /* x^38912 mod p(x)` << 1, x^38976 mod p(x)` << 1 */
- { 0x00000000ef4d2f42, 0x00000000150e4cc4 },
- /* x^37888 mod p(x)` << 1, x^37952 mod p(x)` << 1 */
- { 0x00000001b1468572, 0x000000002a6204e8 },
- /* x^36864 mod p(x)` << 1, x^36928 mod p(x)` << 1 */
- { 0x000000013d7403b2, 0x00000000beb1d432 },
- /* x^35840 mod p(x)` << 1, x^35904 mod p(x)` << 1 */
- { 0x00000001a4681842, 0x0000000135f3f1f0 },
- /* x^34816 mod p(x)` << 1, x^34880 mod p(x)` << 1 */
- { 0x0000000167714492, 0x0000000074fe2232 },
- /* x^33792 mod p(x)` << 1, x^33856 mod p(x)` << 1 */
- { 0x00000001e599099a, 0x000000001ac6e2ba },
- /* x^32768 mod p(x)` << 1, x^32832 mod p(x)` << 1 */
- { 0x00000000fe128194, 0x0000000013fca91e },
- /* x^31744 mod p(x)` << 1, x^31808 mod p(x)` << 1 */
- { 0x0000000077e8b990, 0x0000000183f4931e },
- /* x^30720 mod p(x)` << 1, x^30784 mod p(x)` << 1 */
- { 0x00000001a267f63a, 0x00000000b6d9b4e4 },
- /* x^29696 mod p(x)` << 1, x^29760 mod p(x)` << 1 */
- { 0x00000001945c245a, 0x00000000b5188656 },
- /* x^28672 mod p(x)` << 1, x^28736 mod p(x)` << 1 */
- { 0x0000000149002e76, 0x0000000027a81a84 },
- /* x^27648 mod p(x)` << 1, x^27712 mod p(x)` << 1 */
- { 0x00000001bb8310a4, 0x0000000125699258 },
- /* x^26624 mod p(x)` << 1, x^26688 mod p(x)` << 1 */
- { 0x000000019ec60bcc, 0x00000001b23de796 },
- /* x^25600 mod p(x)` << 1, x^25664 mod p(x)` << 1 */
- { 0x000000012d8590ae, 0x00000000fe4365dc },
- /* x^24576 mod p(x)` << 1, x^24640 mod p(x)` << 1 */
- { 0x0000000065b00684, 0x00000000c68f497a },
- /* x^23552 mod p(x)` << 1, x^23616 mod p(x)` << 1 */
- { 0x000000015e5aeadc, 0x00000000fbf521ee },
- /* x^22528 mod p(x)` << 1, x^22592 mod p(x)` << 1 */
- { 0x00000000b77ff2b0, 0x000000015eac3378 },
- /* x^21504 mod p(x)` << 1, x^21568 mod p(x)` << 1 */
- { 0x0000000188da2ff6, 0x0000000134914b90 },
- /* x^20480 mod p(x)` << 1, x^20544 mod p(x)` << 1 */
- { 0x0000000063da929a, 0x0000000016335cfe },
- /* x^19456 mod p(x)` << 1, x^19520 mod p(x)` << 1 */
- { 0x00000001389caa80, 0x000000010372d10c },
- /* x^18432 mod p(x)` << 1, x^18496 mod p(x)` << 1 */
- { 0x000000013db599d2, 0x000000015097b908 },
- /* x^17408 mod p(x)` << 1, x^17472 mod p(x)` << 1 */
- { 0x0000000122505a86, 0x00000001227a7572 },
- /* x^16384 mod p(x)` << 1, x^16448 mod p(x)` << 1 */
- { 0x000000016bd72746, 0x000000009a8f75c0 },
- /* x^15360 mod p(x)` << 1, x^15424 mod p(x)` << 1 */
- { 0x00000001c3faf1d4, 0x00000000682c77a2 },
- /* x^14336 mod p(x)` << 1, x^14400 mod p(x)` << 1 */
- { 0x00000001111c826c, 0x00000000231f091c },
- /* x^13312 mod p(x)` << 1, x^13376 mod p(x)` << 1 */
- { 0x00000000153e9fb2, 0x000000007d4439f2 },
- /* x^12288 mod p(x)` << 1, x^12352 mod p(x)` << 1 */
- { 0x000000002b1f7b60, 0x000000017e221efc },
- /* x^11264 mod p(x)` << 1, x^11328 mod p(x)` << 1 */
- { 0x00000000b1dba570, 0x0000000167457c38 },
- /* x^10240 mod p(x)` << 1, x^10304 mod p(x)` << 1 */
- { 0x00000001f6397b76, 0x00000000bdf081c4 },
- /* x^9216 mod p(x)` << 1, x^9280 mod p(x)` << 1 */
- { 0x0000000156335214, 0x000000016286d6b0 },
- /* x^8192 mod p(x)` << 1, x^8256 mod p(x)` << 1 */
- { 0x00000001d70e3986, 0x00000000c84f001c },
- /* x^7168 mod p(x)` << 1, x^7232 mod p(x)` << 1 */
- { 0x000000003701a774, 0x0000000064efe7c0 },
- /* x^6144 mod p(x)` << 1, x^6208 mod p(x)` << 1 */
- { 0x00000000ac81ef72, 0x000000000ac2d904 },
- /* x^5120 mod p(x)` << 1, x^5184 mod p(x)` << 1 */
- { 0x0000000133212464, 0x00000000fd226d14 },
- /* x^4096 mod p(x)` << 1, x^4160 mod p(x)` << 1 */
- { 0x00000000e4e45610, 0x000000011cfd42e0 },
- /* x^3072 mod p(x)` << 1, x^3136 mod p(x)` << 1 */
- { 0x000000000c1bd370, 0x000000016e5a5678 },
- /* x^2048 mod p(x)` << 1, x^2112 mod p(x)` << 1 */
- { 0x00000001a7b9e7a6, 0x00000001d888fe22 },
- /* x^1024 mod p(x)` << 1, x^1088 mod p(x)` << 1 */
- { 0x000000007d657a10, 0x00000001af77fcd4 }
-#else /* __LITTLE_ENDIAN__ */
- /* x^261120 mod p(x)` << 1, x^261184 mod p(x)` << 1 */
- { 0x00000001651797d2, 0x0000000099ea94a8 },
- /* x^260096 mod p(x)` << 1, x^260160 mod p(x)` << 1 */
- { 0x0000000021e0d56c, 0x00000000945a8420 },
- /* x^259072 mod p(x)` << 1, x^259136 mod p(x)` << 1 */
- { 0x000000000f95ecaa, 0x0000000030762706 },
- /* x^258048 mod p(x)` << 1, x^258112 mod p(x)` << 1 */
- { 0x00000001ebd224ac, 0x00000001a52fc582 },
- /* x^257024 mod p(x)` << 1, x^257088 mod p(x)` << 1 */
- { 0x000000000ccb97ca, 0x00000001a4a7167a },
- /* x^256000 mod p(x)` << 1, x^256064 mod p(x)` << 1 */
- { 0x00000001006ec8a8, 0x000000000c18249a },
- /* x^254976 mod p(x)` << 1, x^255040 mod p(x)` << 1 */
- { 0x000000014f58f196, 0x00000000a924ae7c },
- /* x^253952 mod p(x)` << 1, x^254016 mod p(x)` << 1 */
- { 0x00000001a7192ca6, 0x00000001e12ccc12 },
- /* x^252928 mod p(x)` << 1, x^252992 mod p(x)` << 1 */
- { 0x000000019a64bab2, 0x00000000a0b9d4ac },
- /* x^251904 mod p(x)` << 1, x^251968 mod p(x)` << 1 */
- { 0x0000000014f4ed2e, 0x0000000095e8ddfe },
- /* x^250880 mod p(x)` << 1, x^250944 mod p(x)` << 1 */
- { 0x000000011092b6a2, 0x00000000233fddc4 },
- /* x^249856 mod p(x)` << 1, x^249920 mod p(x)` << 1 */
- { 0x00000000c8a1629c, 0x00000001b4529b62 },
- /* x^248832 mod p(x)` << 1, x^248896 mod p(x)` << 1 */
- { 0x000000017bf32e8e, 0x00000001a7fa0e64 },
- /* x^247808 mod p(x)` << 1, x^247872 mod p(x)` << 1 */
- { 0x00000001f8cc6582, 0x00000001b5334592 },
- /* x^246784 mod p(x)` << 1, x^246848 mod p(x)` << 1 */
- { 0x000000008631ddf0, 0x000000011f8ee1b4 },
- /* x^245760 mod p(x)` << 1, x^245824 mod p(x)` << 1 */
- { 0x000000007e5a76d0, 0x000000006252e632 },
- /* x^244736 mod p(x)` << 1, x^244800 mod p(x)` << 1 */
- { 0x000000002b09b31c, 0x00000000ab973e84 },
- /* x^243712 mod p(x)` << 1, x^243776 mod p(x)` << 1 */
- { 0x00000001b2df1f84, 0x000000007734f5ec },
- /* x^242688 mod p(x)` << 1, x^242752 mod p(x)` << 1 */
- { 0x00000001d6f56afc, 0x000000007c547798 },
- /* x^241664 mod p(x)` << 1, x^241728 mod p(x)` << 1 */
- { 0x00000001b9b5e70c, 0x000000007ec40210 },
- /* x^240640 mod p(x)` << 1, x^240704 mod p(x)` << 1 */
- { 0x0000000034b626d2, 0x00000001ab1695a8 },
- /* x^239616 mod p(x)` << 1, x^239680 mod p(x)` << 1 */
- { 0x000000014c53479a, 0x0000000090494bba },
- /* x^238592 mod p(x)` << 1, x^238656 mod p(x)` << 1 */
- { 0x00000001a6d179a4, 0x00000001123fb816 },
- /* x^237568 mod p(x)` << 1, x^237632 mod p(x)` << 1 */
- { 0x000000015abd16b4, 0x00000001e188c74c },
- /* x^236544 mod p(x)` << 1, x^236608 mod p(x)` << 1 */
- { 0x00000000018f9852, 0x00000001c2d3451c },
- /* x^235520 mod p(x)` << 1, x^235584 mod p(x)` << 1 */
- { 0x000000001fb3084a, 0x00000000f55cf1ca },
- /* x^234496 mod p(x)` << 1, x^234560 mod p(x)` << 1 */
- { 0x00000000c53dfb04, 0x00000001a0531540 },
- /* x^233472 mod p(x)` << 1, x^233536 mod p(x)` << 1 */
- { 0x00000000e10c9ad6, 0x0000000132cd7ebc },
- /* x^232448 mod p(x)` << 1, x^232512 mod p(x)` << 1 */
- { 0x0000000025aa994a, 0x0000000073ab7f36 },
- /* x^231424 mod p(x)` << 1, x^231488 mod p(x)` << 1 */
- { 0x00000000fa3a74c4, 0x0000000041aed1c2 },
- /* x^230400 mod p(x)` << 1, x^230464 mod p(x)` << 1 */
- { 0x0000000033eb3f40, 0x0000000136c53800 },
- /* x^229376 mod p(x)` << 1, x^229440 mod p(x)` << 1 */
- { 0x000000017193f296, 0x0000000126835a30 },
- /* x^228352 mod p(x)` << 1, x^228416 mod p(x)` << 1 */
- { 0x0000000043f6c86a, 0x000000006241b502 },
- /* x^227328 mod p(x)` << 1, x^227392 mod p(x)` << 1 */
- { 0x000000016b513ec6, 0x00000000d5196ad4 },
- /* x^226304 mod p(x)` << 1, x^226368 mod p(x)` << 1 */
- { 0x00000000c8f25b4e, 0x000000009cfa769a },
- /* x^225280 mod p(x)` << 1, x^225344 mod p(x)` << 1 */
- { 0x00000001a45048ec, 0x00000000920e5df4 },
- /* x^224256 mod p(x)` << 1, x^224320 mod p(x)` << 1 */
- { 0x000000000c441004, 0x0000000169dc310e },
- /* x^223232 mod p(x)` << 1, x^223296 mod p(x)` << 1 */
- { 0x000000000e17cad6, 0x0000000009fc331c },
- /* x^222208 mod p(x)` << 1, x^222272 mod p(x)` << 1 */
- { 0x00000001253ae964, 0x000000010d94a81e },
- /* x^221184 mod p(x)` << 1, x^221248 mod p(x)` << 1 */
- { 0x00000001d7c88ebc, 0x0000000027a20ab2 },
- /* x^220160 mod p(x)` << 1, x^220224 mod p(x)` << 1 */
- { 0x00000001e7ca913a, 0x0000000114f87504 },
- /* x^219136 mod p(x)` << 1, x^219200 mod p(x)` << 1 */
- { 0x0000000033ed078a, 0x000000004b076d96 },
- /* x^218112 mod p(x)` << 1, x^218176 mod p(x)` << 1 */
- { 0x00000000e1839c78, 0x00000000da4d1e74 },
- /* x^217088 mod p(x)` << 1, x^217152 mod p(x)` << 1 */
- { 0x00000001322b267e, 0x000000001b81f672 },
- /* x^216064 mod p(x)` << 1, x^216128 mod p(x)` << 1 */
- { 0x00000000638231b6, 0x000000009367c988 },
- /* x^215040 mod p(x)` << 1, x^215104 mod p(x)` << 1 */
- { 0x00000001ee7f16f4, 0x00000001717214ca },
- /* x^214016 mod p(x)` << 1, x^214080 mod p(x)` << 1 */
- { 0x0000000117d9924a, 0x000000009f47d820 },
- /* x^212992 mod p(x)` << 1, x^213056 mod p(x)` << 1 */
- { 0x00000000e1a9e0c4, 0x000000010d9a47d2 },
- /* x^211968 mod p(x)` << 1, x^212032 mod p(x)` << 1 */
- { 0x00000001403731dc, 0x00000000a696c58c },
- /* x^210944 mod p(x)` << 1, x^211008 mod p(x)` << 1 */
- { 0x00000001a5ea9682, 0x000000002aa28ec6 },
- /* x^209920 mod p(x)` << 1, x^209984 mod p(x)` << 1 */
- { 0x0000000101c5c578, 0x00000001fe18fd9a },
- /* x^208896 mod p(x)` << 1, x^208960 mod p(x)` << 1 */
- { 0x00000000dddf6494, 0x000000019d4fc1ae },
- /* x^207872 mod p(x)` << 1, x^207936 mod p(x)` << 1 */
- { 0x00000000f1c3db28, 0x00000001ba0e3dea },
- /* x^206848 mod p(x)` << 1, x^206912 mod p(x)` << 1 */
- { 0x000000013112fb9c, 0x0000000074b59a5e },
- /* x^205824 mod p(x)` << 1, x^205888 mod p(x)` << 1 */
- { 0x00000000b680b906, 0x00000000f2b5ea98 },
- /* x^204800 mod p(x)` << 1, x^204864 mod p(x)` << 1 */
- { 0x000000001a282932, 0x0000000187132676 },
- /* x^203776 mod p(x)` << 1, x^203840 mod p(x)` << 1 */
- { 0x0000000089406e7e, 0x000000010a8c6ad4 },
- /* x^202752 mod p(x)` << 1, x^202816 mod p(x)` << 1 */
- { 0x00000001def6be8c, 0x00000001e21dfe70 },
- /* x^201728 mod p(x)` << 1, x^201792 mod p(x)` << 1 */
- { 0x0000000075258728, 0x00000001da0050e4 },
- /* x^200704 mod p(x)` << 1, x^200768 mod p(x)` << 1 */
- { 0x000000019536090a, 0x00000000772172ae },
- /* x^199680 mod p(x)` << 1, x^199744 mod p(x)` << 1 */
- { 0x00000000f2455bfc, 0x00000000e47724aa },
- /* x^198656 mod p(x)` << 1, x^198720 mod p(x)` << 1 */
- { 0x000000018c40baf4, 0x000000003cd63ac4 },
- /* x^197632 mod p(x)` << 1, x^197696 mod p(x)` << 1 */
- { 0x000000004cd390d4, 0x00000001bf47d352 },
- /* x^196608 mod p(x)` << 1, x^196672 mod p(x)` << 1 */
- { 0x00000001e4ece95a, 0x000000018dc1d708 },
- /* x^195584 mod p(x)` << 1, x^195648 mod p(x)` << 1 */
- { 0x000000001a3ee918, 0x000000002d4620a4 },
- /* x^194560 mod p(x)` << 1, x^194624 mod p(x)` << 1 */
- { 0x000000007c652fb8, 0x0000000058fd1740 },
- /* x^193536 mod p(x)` << 1, x^193600 mod p(x)` << 1 */
- { 0x000000011c67842c, 0x00000000dadd9bfc },
- /* x^192512 mod p(x)` << 1, x^192576 mod p(x)` << 1 */
- { 0x00000000254f759c, 0x00000001ea2140be },
- /* x^191488 mod p(x)` << 1, x^191552 mod p(x)` << 1 */
- { 0x000000007ece94ca, 0x000000009de128ba },
- /* x^190464 mod p(x)` << 1, x^190528 mod p(x)` << 1 */
- { 0x0000000038f258c2, 0x000000013ac3aa8e },
- /* x^189440 mod p(x)` << 1, x^189504 mod p(x)` << 1 */
- { 0x00000001cdf17b00, 0x0000000099980562 },
- /* x^188416 mod p(x)` << 1, x^188480 mod p(x)` << 1 */
- { 0x000000011f882c16, 0x00000001c1579c86 },
- /* x^187392 mod p(x)` << 1, x^187456 mod p(x)` << 1 */
- { 0x0000000100093fc8, 0x0000000068dbbf94 },
- /* x^186368 mod p(x)` << 1, x^186432 mod p(x)` << 1 */
- { 0x00000001cd684f16, 0x000000004509fb04 },
- /* x^185344 mod p(x)` << 1, x^185408 mod p(x)` << 1 */
- { 0x000000004bc6a70a, 0x00000001202f6398 },
- /* x^184320 mod p(x)` << 1, x^184384 mod p(x)` << 1 */
- { 0x000000004fc7e8e4, 0x000000013aea243e },
- /* x^183296 mod p(x)` << 1, x^183360 mod p(x)` << 1 */
- { 0x0000000130103f1c, 0x00000001b4052ae6 },
- /* x^182272 mod p(x)` << 1, x^182336 mod p(x)` << 1 */
- { 0x0000000111b0024c, 0x00000001cd2a0ae8 },
- /* x^181248 mod p(x)` << 1, x^181312 mod p(x)` << 1 */
- { 0x000000010b3079da, 0x00000001fe4aa8b4 },
- /* x^180224 mod p(x)` << 1, x^180288 mod p(x)` << 1 */
- { 0x000000010192bcc2, 0x00000001d1559a42 },
- /* x^179200 mod p(x)` << 1, x^179264 mod p(x)` << 1 */
- { 0x0000000074838d50, 0x00000001f3e05ecc },
- /* x^178176 mod p(x)` << 1, x^178240 mod p(x)` << 1 */
- { 0x000000001b20f520, 0x0000000104ddd2cc },
- /* x^177152 mod p(x)` << 1, x^177216 mod p(x)` << 1 */
- { 0x0000000050c3590a, 0x000000015393153c },
- /* x^176128 mod p(x)` << 1, x^176192 mod p(x)` << 1 */
- { 0x00000000b41cac8e, 0x0000000057e942c6 },
- /* x^175104 mod p(x)` << 1, x^175168 mod p(x)` << 1 */
- { 0x000000000c72cc78, 0x000000012c633850 },
- /* x^174080 mod p(x)` << 1, x^174144 mod p(x)` << 1 */
- { 0x0000000030cdb032, 0x00000000ebcaae4c },
- /* x^173056 mod p(x)` << 1, x^173120 mod p(x)` << 1 */
- { 0x000000013e09fc32, 0x000000013ee532a6 },
- /* x^172032 mod p(x)` << 1, x^172096 mod p(x)` << 1 */
- { 0x000000001ed624d2, 0x00000001bf0cbc7e },
- /* x^171008 mod p(x)` << 1, x^171072 mod p(x)` << 1 */
- { 0x00000000781aee1a, 0x00000000d50b7a5a },
- /* x^169984 mod p(x)` << 1, x^170048 mod p(x)` << 1 */
- { 0x00000001c4d8348c, 0x0000000002fca6e8 },
- /* x^168960 mod p(x)` << 1, x^169024 mod p(x)` << 1 */
- { 0x0000000057a40336, 0x000000007af40044 },
- /* x^167936 mod p(x)` << 1, x^168000 mod p(x)` << 1 */
- { 0x0000000085544940, 0x0000000016178744 },
- /* x^166912 mod p(x)` << 1, x^166976 mod p(x)` << 1 */
- { 0x000000019cd21e80, 0x000000014c177458 },
- /* x^165888 mod p(x)` << 1, x^165952 mod p(x)` << 1 */
- { 0x000000013eb95bc0, 0x000000011b6ddf04 },
- /* x^164864 mod p(x)` << 1, x^164928 mod p(x)` << 1 */
- { 0x00000001dfc9fdfc, 0x00000001f3e29ccc },
- /* x^163840 mod p(x)` << 1, x^163904 mod p(x)` << 1 */
- { 0x00000000cd028bc2, 0x0000000135ae7562 },
- /* x^162816 mod p(x)` << 1, x^162880 mod p(x)` << 1 */
- { 0x0000000090db8c44, 0x0000000190ef812c },
- /* x^161792 mod p(x)` << 1, x^161856 mod p(x)` << 1 */
- { 0x000000010010a4ce, 0x0000000067a2c786 },
- /* x^160768 mod p(x)` << 1, x^160832 mod p(x)` << 1 */
- { 0x00000001c8f4c72c, 0x0000000048b9496c },
- /* x^159744 mod p(x)` << 1, x^159808 mod p(x)` << 1 */
- { 0x000000001c26170c, 0x000000015a422de6 },
- /* x^158720 mod p(x)` << 1, x^158784 mod p(x)` << 1 */
- { 0x00000000e3fccf68, 0x00000001ef0e3640 },
- /* x^157696 mod p(x)` << 1, x^157760 mod p(x)` << 1 */
- { 0x00000000d513ed24, 0x00000001006d2d26 },
- /* x^156672 mod p(x)` << 1, x^156736 mod p(x)` << 1 */
- { 0x00000000141beada, 0x00000001170d56d6 },
- /* x^155648 mod p(x)` << 1, x^155712 mod p(x)` << 1 */
- { 0x000000011071aea0, 0x00000000a5fb613c },
- /* x^154624 mod p(x)` << 1, x^154688 mod p(x)` << 1 */
- { 0x000000012e19080a, 0x0000000040bbf7fc },
- /* x^153600 mod p(x)` << 1, x^153664 mod p(x)` << 1 */
- { 0x0000000100ecf826, 0x000000016ac3a5b2 },
- /* x^152576 mod p(x)` << 1, x^152640 mod p(x)` << 1 */
- { 0x0000000069b09412, 0x00000000abf16230 },
- /* x^151552 mod p(x)` << 1, x^151616 mod p(x)` << 1 */
- { 0x0000000122297bac, 0x00000001ebe23fac },
- /* x^150528 mod p(x)` << 1, x^150592 mod p(x)` << 1 */
- { 0x00000000e9e4b068, 0x000000008b6a0894 },
- /* x^149504 mod p(x)` << 1, x^149568 mod p(x)` << 1 */
- { 0x000000004b38651a, 0x00000001288ea478 },
- /* x^148480 mod p(x)` << 1, x^148544 mod p(x)` << 1 */
- { 0x00000001468360e2, 0x000000016619c442 },
- /* x^147456 mod p(x)` << 1, x^147520 mod p(x)` << 1 */
- { 0x00000000121c2408, 0x0000000086230038 },
- /* x^146432 mod p(x)` << 1, x^146496 mod p(x)` << 1 */
- { 0x00000000da7e7d08, 0x000000017746a756 },
- /* x^145408 mod p(x)` << 1, x^145472 mod p(x)` << 1 */
- { 0x00000001058d7652, 0x0000000191b8f8f8 },
- /* x^144384 mod p(x)` << 1, x^144448 mod p(x)` << 1 */
- { 0x000000014a098a90, 0x000000008e167708 },
- /* x^143360 mod p(x)` << 1, x^143424 mod p(x)` << 1 */
- { 0x0000000020dbe72e, 0x0000000148b22d54 },
- /* x^142336 mod p(x)` << 1, x^142400 mod p(x)` << 1 */
- { 0x000000011e7323e8, 0x0000000044ba2c3c },
- /* x^141312 mod p(x)` << 1, x^141376 mod p(x)` << 1 */
- { 0x00000000d5d4bf94, 0x00000000b54d2b52 },
- /* x^140288 mod p(x)` << 1, x^140352 mod p(x)` << 1 */
- { 0x0000000199d8746c, 0x0000000005a4fd8a },
- /* x^139264 mod p(x)` << 1, x^139328 mod p(x)` << 1 */
- { 0x00000000ce9ca8a0, 0x0000000139f9fc46 },
- /* x^138240 mod p(x)` << 1, x^138304 mod p(x)` << 1 */
- { 0x00000000136edece, 0x000000015a1fa824 },
- /* x^137216 mod p(x)` << 1, x^137280 mod p(x)` << 1 */
- { 0x000000019b92a068, 0x000000000a61ae4c },
- /* x^136192 mod p(x)` << 1, x^136256 mod p(x)` << 1 */
- { 0x0000000071d62206, 0x0000000145e9113e },
- /* x^135168 mod p(x)` << 1, x^135232 mod p(x)` << 1 */
- { 0x00000000dfc50158, 0x000000006a348448 },
- /* x^134144 mod p(x)` << 1, x^134208 mod p(x)` << 1 */
- { 0x00000001517626bc, 0x000000004d80a08c },
- /* x^133120 mod p(x)` << 1, x^133184 mod p(x)` << 1 */
- { 0x0000000148d1e4fa, 0x000000014b6837a0 },
- /* x^132096 mod p(x)` << 1, x^132160 mod p(x)` << 1 */
- { 0x0000000094d8266e, 0x000000016896a7fc },
- /* x^131072 mod p(x)` << 1, x^131136 mod p(x)` << 1 */
- { 0x00000000606c5e34, 0x000000014f187140 },
- /* x^130048 mod p(x)` << 1, x^130112 mod p(x)` << 1 */
- { 0x000000019766beaa, 0x000000019581b9da },
- /* x^129024 mod p(x)` << 1, x^129088 mod p(x)` << 1 */
- { 0x00000001d80c506c, 0x00000001091bc984 },
- /* x^128000 mod p(x)` << 1, x^128064 mod p(x)` << 1 */
- { 0x000000001e73837c, 0x000000001067223c },
- /* x^126976 mod p(x)` << 1, x^127040 mod p(x)` << 1 */
- { 0x0000000064d587de, 0x00000001ab16ea02 },
- /* x^125952 mod p(x)` << 1, x^126016 mod p(x)` << 1 */
- { 0x00000000f4a507b0, 0x000000013c4598a8 },
- /* x^124928 mod p(x)` << 1, x^124992 mod p(x)` << 1 */
- { 0x0000000040e342fc, 0x00000000b3735430 },
- /* x^123904 mod p(x)` << 1, x^123968 mod p(x)` << 1 */
- { 0x00000001d5ad9c3a, 0x00000001bb3fc0c0 },
- /* x^122880 mod p(x)` << 1, x^122944 mod p(x)` << 1 */
- { 0x0000000094a691a4, 0x00000001570ae19c },
- /* x^121856 mod p(x)` << 1, x^121920 mod p(x)` << 1 */
- { 0x00000001271ecdfa, 0x00000001ea910712 },
- /* x^120832 mod p(x)` << 1, x^120896 mod p(x)` << 1 */
- { 0x000000009e54475a, 0x0000000167127128 },
- /* x^119808 mod p(x)` << 1, x^119872 mod p(x)` << 1 */
- { 0x00000000c9c099ee, 0x0000000019e790a2 },
- /* x^118784 mod p(x)` << 1, x^118848 mod p(x)` << 1 */
- { 0x000000009a2f736c, 0x000000003788f710 },
- /* x^117760 mod p(x)` << 1, x^117824 mod p(x)` << 1 */
- { 0x00000000bb9f4996, 0x00000001682a160e },
- /* x^116736 mod p(x)` << 1, x^116800 mod p(x)` << 1 */
- { 0x00000001db688050, 0x000000007f0ebd2e },
- /* x^115712 mod p(x)` << 1, x^115776 mod p(x)` << 1 */
- { 0x00000000e9b10af4, 0x000000002b032080 },
- /* x^114688 mod p(x)` << 1, x^114752 mod p(x)` << 1 */
- { 0x000000012d4545e4, 0x00000000cfd1664a },
- /* x^113664 mod p(x)` << 1, x^113728 mod p(x)` << 1 */
- { 0x000000000361139c, 0x00000000aa1181c2 },
- /* x^112640 mod p(x)` << 1, x^112704 mod p(x)` << 1 */
- { 0x00000001a5a1a3a8, 0x00000000ddd08002 },
- /* x^111616 mod p(x)` << 1, x^111680 mod p(x)` << 1 */
- { 0x000000006844e0b0, 0x00000000e8dd0446 },
- /* x^110592 mod p(x)` << 1, x^110656 mod p(x)` << 1 */
- { 0x00000000c3762f28, 0x00000001bbd94a00 },
- /* x^109568 mod p(x)` << 1, x^109632 mod p(x)` << 1 */
- { 0x00000001d26287a2, 0x00000000ab6cd180 },
- /* x^108544 mod p(x)` << 1, x^108608 mod p(x)` << 1 */
- { 0x00000001f6f0bba8, 0x0000000031803ce2 },
- /* x^107520 mod p(x)` << 1, x^107584 mod p(x)` << 1 */
- { 0x000000002ffabd62, 0x0000000024f40b0c },
- /* x^106496 mod p(x)` << 1, x^106560 mod p(x)` << 1 */
- { 0x00000000fb4516b8, 0x00000001ba1d9834 },
- /* x^105472 mod p(x)` << 1, x^105536 mod p(x)` << 1 */
- { 0x000000018cfa961c, 0x0000000104de61aa },
- /* x^104448 mod p(x)` << 1, x^104512 mod p(x)` << 1 */
- { 0x000000019e588d52, 0x0000000113e40d46 },
- /* x^103424 mod p(x)` << 1, x^103488 mod p(x)` << 1 */
- { 0x00000001180f0bbc, 0x00000001415598a0 },
- /* x^102400 mod p(x)` << 1, x^102464 mod p(x)` << 1 */
- { 0x00000000e1d9177a, 0x00000000bf6c8c90 },
- /* x^101376 mod p(x)` << 1, x^101440 mod p(x)` << 1 */
- { 0x0000000105abc27c, 0x00000001788b0504 },
- /* x^100352 mod p(x)` << 1, x^100416 mod p(x)` << 1 */
- { 0x00000000972e4a58, 0x0000000038385d02 },
- /* x^99328 mod p(x)` << 1, x^99392 mod p(x)` << 1 */
- { 0x0000000183499a5e, 0x00000001b6c83844 },
- /* x^98304 mod p(x)` << 1, x^98368 mod p(x)` << 1 */
- { 0x00000001c96a8cca, 0x0000000051061a8a },
- /* x^97280 mod p(x)` << 1, x^97344 mod p(x)` << 1 */
- { 0x00000001a1a5b60c, 0x000000017351388a },
- /* x^96256 mod p(x)` << 1, x^96320 mod p(x)` << 1 */
- { 0x00000000e4b6ac9c, 0x0000000132928f92 },
- /* x^95232 mod p(x)` << 1, x^95296 mod p(x)` << 1 */
- { 0x00000001807e7f5a, 0x00000000e6b4f48a },
- /* x^94208 mod p(x)` << 1, x^94272 mod p(x)` << 1 */
- { 0x000000017a7e3bc8, 0x0000000039d15e90 },
- /* x^93184 mod p(x)` << 1, x^93248 mod p(x)` << 1 */
- { 0x00000000d73975da, 0x00000000312d6074 },
- /* x^92160 mod p(x)` << 1, x^92224 mod p(x)` << 1 */
- { 0x000000017375d038, 0x000000017bbb2cc4 },
- /* x^91136 mod p(x)` << 1, x^91200 mod p(x)` << 1 */
- { 0x00000000193680bc, 0x000000016ded3e18 },
- /* x^90112 mod p(x)` << 1, x^90176 mod p(x)` << 1 */
- { 0x00000000999b06f6, 0x00000000f1638b16 },
- /* x^89088 mod p(x)` << 1, x^89152 mod p(x)` << 1 */
- { 0x00000001f685d2b8, 0x00000001d38b9ecc },
- /* x^88064 mod p(x)` << 1, x^88128 mod p(x)` << 1 */
- { 0x00000001f4ecbed2, 0x000000018b8d09dc },
- /* x^87040 mod p(x)` << 1, x^87104 mod p(x)` << 1 */
- { 0x00000000ba16f1a0, 0x00000000e7bc27d2 },
- /* x^86016 mod p(x)` << 1, x^86080 mod p(x)` << 1 */
- { 0x0000000115aceac4, 0x00000000275e1e96 },
- /* x^84992 mod p(x)` << 1, x^85056 mod p(x)` << 1 */
- { 0x00000001aeff6292, 0x00000000e2e3031e },
- /* x^83968 mod p(x)` << 1, x^84032 mod p(x)` << 1 */
- { 0x000000009640124c, 0x00000001041c84d8 },
- /* x^82944 mod p(x)` << 1, x^83008 mod p(x)` << 1 */
- { 0x0000000114f41f02, 0x00000000706ce672 },
- /* x^81920 mod p(x)` << 1, x^81984 mod p(x)` << 1 */
- { 0x000000009c5f3586, 0x000000015d5070da },
- /* x^80896 mod p(x)` << 1, x^80960 mod p(x)` << 1 */
- { 0x00000001878275fa, 0x0000000038f9493a },
- /* x^79872 mod p(x)` << 1, x^79936 mod p(x)` << 1 */
- { 0x00000000ddc42ce8, 0x00000000a3348a76 },
- /* x^78848 mod p(x)` << 1, x^78912 mod p(x)` << 1 */
- { 0x0000000181d2c73a, 0x00000001ad0aab92 },
- /* x^77824 mod p(x)` << 1, x^77888 mod p(x)` << 1 */
- { 0x0000000141c9320a, 0x000000019e85f712 },
- /* x^76800 mod p(x)` << 1, x^76864 mod p(x)` << 1 */
- { 0x000000015235719a, 0x000000005a871e76 },
- /* x^75776 mod p(x)` << 1, x^75840 mod p(x)` << 1 */
- { 0x00000000be27d804, 0x000000017249c662 },
- /* x^74752 mod p(x)` << 1, x^74816 mod p(x)` << 1 */
- { 0x000000006242d45a, 0x000000003a084712 },
- /* x^73728 mod p(x)` << 1, x^73792 mod p(x)` << 1 */
- { 0x000000009a53638e, 0x00000000ed438478 },
- /* x^72704 mod p(x)` << 1, x^72768 mod p(x)` << 1 */
- { 0x00000001001ecfb6, 0x00000000abac34cc },
- /* x^71680 mod p(x)` << 1, x^71744 mod p(x)` << 1 */
- { 0x000000016d7c2d64, 0x000000005f35ef3e },
- /* x^70656 mod p(x)` << 1, x^70720 mod p(x)` << 1 */
- { 0x00000001d0ce46c0, 0x0000000047d6608c },
- /* x^69632 mod p(x)` << 1, x^69696 mod p(x)` << 1 */
- { 0x0000000124c907b4, 0x000000002d01470e },
- /* x^68608 mod p(x)` << 1, x^68672 mod p(x)` << 1 */
- { 0x0000000018a555ca, 0x0000000158bbc7b0 },
- /* x^67584 mod p(x)` << 1, x^67648 mod p(x)` << 1 */
- { 0x000000006b0980bc, 0x00000000c0a23e8e },
- /* x^66560 mod p(x)` << 1, x^66624 mod p(x)` << 1 */
- { 0x000000008bbba964, 0x00000001ebd85c88 },
- /* x^65536 mod p(x)` << 1, x^65600 mod p(x)` << 1 */
- { 0x00000001070a5a1e, 0x000000019ee20bb2 },
- /* x^64512 mod p(x)` << 1, x^64576 mod p(x)` << 1 */
- { 0x000000002204322a, 0x00000001acabf2d6 },
- /* x^63488 mod p(x)` << 1, x^63552 mod p(x)` << 1 */
- { 0x00000000a27524d0, 0x00000001b7963d56 },
- /* x^62464 mod p(x)` << 1, x^62528 mod p(x)` << 1 */
- { 0x0000000020b1e4ba, 0x000000017bffa1fe },
- /* x^61440 mod p(x)` << 1, x^61504 mod p(x)` << 1 */
- { 0x0000000032cc27fc, 0x000000001f15333e },
- /* x^60416 mod p(x)` << 1, x^60480 mod p(x)` << 1 */
- { 0x0000000044dd22b8, 0x000000018593129e },
- /* x^59392 mod p(x)` << 1, x^59456 mod p(x)` << 1 */
- { 0x00000000dffc9e0a, 0x000000019cb32602 },
- /* x^58368 mod p(x)` << 1, x^58432 mod p(x)` << 1 */
- { 0x00000001b7a0ed14, 0x0000000142b05cc8 },
- /* x^57344 mod p(x)` << 1, x^57408 mod p(x)` << 1 */
- { 0x00000000c7842488, 0x00000001be49e7a4 },
- /* x^56320 mod p(x)` << 1, x^56384 mod p(x)` << 1 */
- { 0x00000001c02a4fee, 0x0000000108f69d6c },
- /* x^55296 mod p(x)` << 1, x^55360 mod p(x)` << 1 */
- { 0x000000003c273778, 0x000000006c0971f0 },
- /* x^54272 mod p(x)` << 1, x^54336 mod p(x)` << 1 */
- { 0x00000001d63f8894, 0x000000005b16467a },
- /* x^53248 mod p(x)` << 1, x^53312 mod p(x)` << 1 */
- { 0x000000006be557d6, 0x00000001551a628e },
- /* x^52224 mod p(x)` << 1, x^52288 mod p(x)` << 1 */
- { 0x000000006a7806ea, 0x000000019e42ea92 },
- /* x^51200 mod p(x)` << 1, x^51264 mod p(x)` << 1 */
- { 0x000000016155aa0c, 0x000000012fa83ff2 },
- /* x^50176 mod p(x)` << 1, x^50240 mod p(x)` << 1 */
- { 0x00000000908650ac, 0x000000011ca9cde0 },
- /* x^49152 mod p(x)` << 1, x^49216 mod p(x)` << 1 */
- { 0x00000000aa5a8084, 0x00000000c8e5cd74 },
- /* x^48128 mod p(x)` << 1, x^48192 mod p(x)` << 1 */
- { 0x0000000191bb500a, 0x0000000096c27f0c },
- /* x^47104 mod p(x)` << 1, x^47168 mod p(x)` << 1 */
- { 0x0000000064e9bed0, 0x000000002baed926 },
- /* x^46080 mod p(x)` << 1, x^46144 mod p(x)` << 1 */
- { 0x000000009444f302, 0x000000017c8de8d2 },
- /* x^45056 mod p(x)` << 1, x^45120 mod p(x)` << 1 */
- { 0x000000019db07d3c, 0x00000000d43d6068 },
- /* x^44032 mod p(x)` << 1, x^44096 mod p(x)` << 1 */
- { 0x00000001359e3e6e, 0x00000000cb2c4b26 },
- /* x^43008 mod p(x)` << 1, x^43072 mod p(x)` << 1 */
- { 0x00000001e4f10dd2, 0x0000000145b8da26 },
- /* x^41984 mod p(x)` << 1, x^42048 mod p(x)` << 1 */
- { 0x0000000124f5735e, 0x000000018fff4b08 },
- /* x^40960 mod p(x)` << 1, x^41024 mod p(x)` << 1 */
- { 0x0000000124760a4c, 0x0000000150b58ed0 },
- /* x^39936 mod p(x)` << 1, x^40000 mod p(x)` << 1 */
- { 0x000000000f1fc186, 0x00000001549f39bc },
- /* x^38912 mod p(x)` << 1, x^38976 mod p(x)` << 1 */
- { 0x00000000150e4cc4, 0x00000000ef4d2f42 },
- /* x^37888 mod p(x)` << 1, x^37952 mod p(x)` << 1 */
- { 0x000000002a6204e8, 0x00000001b1468572 },
- /* x^36864 mod p(x)` << 1, x^36928 mod p(x)` << 1 */
- { 0x00000000beb1d432, 0x000000013d7403b2 },
- /* x^35840 mod p(x)` << 1, x^35904 mod p(x)` << 1 */
- { 0x0000000135f3f1f0, 0x00000001a4681842 },
- /* x^34816 mod p(x)` << 1, x^34880 mod p(x)` << 1 */
- { 0x0000000074fe2232, 0x0000000167714492 },
- /* x^33792 mod p(x)` << 1, x^33856 mod p(x)` << 1 */
- { 0x000000001ac6e2ba, 0x00000001e599099a },
- /* x^32768 mod p(x)` << 1, x^32832 mod p(x)` << 1 */
- { 0x0000000013fca91e, 0x00000000fe128194 },
- /* x^31744 mod p(x)` << 1, x^31808 mod p(x)` << 1 */
- { 0x0000000183f4931e, 0x0000000077e8b990 },
- /* x^30720 mod p(x)` << 1, x^30784 mod p(x)` << 1 */
- { 0x00000000b6d9b4e4, 0x00000001a267f63a },
- /* x^29696 mod p(x)` << 1, x^29760 mod p(x)` << 1 */
- { 0x00000000b5188656, 0x00000001945c245a },
- /* x^28672 mod p(x)` << 1, x^28736 mod p(x)` << 1 */
- { 0x0000000027a81a84, 0x0000000149002e76 },
- /* x^27648 mod p(x)` << 1, x^27712 mod p(x)` << 1 */
- { 0x0000000125699258, 0x00000001bb8310a4 },
- /* x^26624 mod p(x)` << 1, x^26688 mod p(x)` << 1 */
- { 0x00000001b23de796, 0x000000019ec60bcc },
- /* x^25600 mod p(x)` << 1, x^25664 mod p(x)` << 1 */
- { 0x00000000fe4365dc, 0x000000012d8590ae },
- /* x^24576 mod p(x)` << 1, x^24640 mod p(x)` << 1 */
- { 0x00000000c68f497a, 0x0000000065b00684 },
- /* x^23552 mod p(x)` << 1, x^23616 mod p(x)` << 1 */
- { 0x00000000fbf521ee, 0x000000015e5aeadc },
- /* x^22528 mod p(x)` << 1, x^22592 mod p(x)` << 1 */
- { 0x000000015eac3378, 0x00000000b77ff2b0 },
- /* x^21504 mod p(x)` << 1, x^21568 mod p(x)` << 1 */
- { 0x0000000134914b90, 0x0000000188da2ff6 },
- /* x^20480 mod p(x)` << 1, x^20544 mod p(x)` << 1 */
- { 0x0000000016335cfe, 0x0000000063da929a },
- /* x^19456 mod p(x)` << 1, x^19520 mod p(x)` << 1 */
- { 0x000000010372d10c, 0x00000001389caa80 },
- /* x^18432 mod p(x)` << 1, x^18496 mod p(x)` << 1 */
- { 0x000000015097b908, 0x000000013db599d2 },
- /* x^17408 mod p(x)` << 1, x^17472 mod p(x)` << 1 */
- { 0x00000001227a7572, 0x0000000122505a86 },
- /* x^16384 mod p(x)` << 1, x^16448 mod p(x)` << 1 */
- { 0x000000009a8f75c0, 0x000000016bd72746 },
- /* x^15360 mod p(x)` << 1, x^15424 mod p(x)` << 1 */
- { 0x00000000682c77a2, 0x00000001c3faf1d4 },
- /* x^14336 mod p(x)` << 1, x^14400 mod p(x)` << 1 */
- { 0x00000000231f091c, 0x00000001111c826c },
- /* x^13312 mod p(x)` << 1, x^13376 mod p(x)` << 1 */
- { 0x000000007d4439f2, 0x00000000153e9fb2 },
- /* x^12288 mod p(x)` << 1, x^12352 mod p(x)` << 1 */
- { 0x000000017e221efc, 0x000000002b1f7b60 },
- /* x^11264 mod p(x)` << 1, x^11328 mod p(x)` << 1 */
- { 0x0000000167457c38, 0x00000000b1dba570 },
- /* x^10240 mod p(x)` << 1, x^10304 mod p(x)` << 1 */
- { 0x00000000bdf081c4, 0x00000001f6397b76 },
- /* x^9216 mod p(x)` << 1, x^9280 mod p(x)` << 1 */
- { 0x000000016286d6b0, 0x0000000156335214 },
- /* x^8192 mod p(x)` << 1, x^8256 mod p(x)` << 1 */
- { 0x00000000c84f001c, 0x00000001d70e3986 },
- /* x^7168 mod p(x)` << 1, x^7232 mod p(x)` << 1 */
- { 0x0000000064efe7c0, 0x000000003701a774 },
- /* x^6144 mod p(x)` << 1, x^6208 mod p(x)` << 1 */
- { 0x000000000ac2d904, 0x00000000ac81ef72 },
- /* x^5120 mod p(x)` << 1, x^5184 mod p(x)` << 1 */
- { 0x00000000fd226d14, 0x0000000133212464 },
- /* x^4096 mod p(x)` << 1, x^4160 mod p(x)` << 1 */
- { 0x000000011cfd42e0, 0x00000000e4e45610 },
- /* x^3072 mod p(x)` << 1, x^3136 mod p(x)` << 1 */
- { 0x000000016e5a5678, 0x000000000c1bd370 },
- /* x^2048 mod p(x)` << 1, x^2112 mod p(x)` << 1 */
- { 0x00000001d888fe22, 0x00000001a7b9e7a6 },
- /* x^1024 mod p(x)` << 1, x^1088 mod p(x)` << 1 */
- { 0x00000001af77fcd4, 0x000000007d657a10 }
-#endif /* __LITTLE_ENDIAN__ */
- };
-
-/* Reduce final 1024-2048 bits to 64 bits, shifting 32 bits to include the trailing 32 bits of zeros */
-
-static const __vector unsigned long long vcrc_short_const[16]
- __attribute__((aligned (16))) = {
-#ifdef __LITTLE_ENDIAN__
- /* x^1952 mod p(x) , x^1984 mod p(x) , x^2016 mod p(x) , x^2048 mod p(x) */
- { 0x99168a18ec447f11, 0xed837b2613e8221e },
- /* x^1824 mod p(x) , x^1856 mod p(x) , x^1888 mod p(x) , x^1920 mod p(x) */
- { 0xe23e954e8fd2cd3c, 0xc8acdd8147b9ce5a },
- /* x^1696 mod p(x) , x^1728 mod p(x) , x^1760 mod p(x) , x^1792 mod p(x) */
- { 0x92f8befe6b1d2b53, 0xd9ad6d87d4277e25 },
- /* x^1568 mod p(x) , x^1600 mod p(x) , x^1632 mod p(x) , x^1664 mod p(x) */
- { 0xf38a3556291ea462, 0xc10ec5e033fbca3b },
- /* x^1440 mod p(x) , x^1472 mod p(x) , x^1504 mod p(x) , x^1536 mod p(x) */
- { 0x974ac56262b6ca4b, 0xc0b55b0e82e02e2f },
- /* x^1312 mod p(x) , x^1344 mod p(x) , x^1376 mod p(x) , x^1408 mod p(x) */
- { 0x855712b3784d2a56, 0x71aa1df0e172334d },
- /* x^1184 mod p(x) , x^1216 mod p(x) , x^1248 mod p(x) , x^1280 mod p(x) */
- { 0xa5abe9f80eaee722, 0xfee3053e3969324d },
- /* x^1056 mod p(x) , x^1088 mod p(x) , x^1120 mod p(x) , x^1152 mod p(x) */
- { 0x1fa0943ddb54814c, 0xf44779b93eb2bd08 },
- /* x^928 mod p(x) , x^960 mod p(x) , x^992 mod p(x) , x^1024 mod p(x) */
- { 0xa53ff440d7bbfe6a, 0xf5449b3f00cc3374 },
- /* x^800 mod p(x) , x^832 mod p(x) , x^864 mod p(x) , x^896 mod p(x) */
- { 0xebe7e3566325605c, 0x6f8346e1d777606e },
- /* x^672 mod p(x) , x^704 mod p(x) , x^736 mod p(x) , x^768 mod p(x) */
- { 0xc65a272ce5b592b8, 0xe3ab4f2ac0b95347 },
- /* x^544 mod p(x) , x^576 mod p(x) , x^608 mod p(x) , x^640 mod p(x) */
- { 0x5705a9ca4721589f, 0xaa2215ea329ecc11 },
- /* x^416 mod p(x) , x^448 mod p(x) , x^480 mod p(x) , x^512 mod p(x) */
- { 0xe3720acb88d14467, 0x1ed8f66ed95efd26 },
- /* x^288 mod p(x) , x^320 mod p(x) , x^352 mod p(x) , x^384 mod p(x) */
- { 0xba1aca0315141c31, 0x78ed02d5a700e96a },
- /* x^160 mod p(x) , x^192 mod p(x) , x^224 mod p(x) , x^256 mod p(x) */
- { 0xad2a31b3ed627dae, 0xba8ccbe832b39da3 },
- /* x^32 mod p(x) , x^64 mod p(x) , x^96 mod p(x) , x^128 mod p(x) */
- { 0x6655004fa06a2517, 0xedb88320b1e6b092 }
-#else /* __LITTLE_ENDIAN__ */
- /* x^1952 mod p(x) , x^1984 mod p(x) , x^2016 mod p(x) , x^2048 mod p(x) */
- { 0xed837b2613e8221e, 0x99168a18ec447f11 },
- /* x^1824 mod p(x) , x^1856 mod p(x) , x^1888 mod p(x) , x^1920 mod p(x) */
- { 0xc8acdd8147b9ce5a, 0xe23e954e8fd2cd3c },
- /* x^1696 mod p(x) , x^1728 mod p(x) , x^1760 mod p(x) , x^1792 mod p(x) */
- { 0xd9ad6d87d4277e25, 0x92f8befe6b1d2b53 },
- /* x^1568 mod p(x) , x^1600 mod p(x) , x^1632 mod p(x) , x^1664 mod p(x) */
- { 0xc10ec5e033fbca3b, 0xf38a3556291ea462 },
- /* x^1440 mod p(x) , x^1472 mod p(x) , x^1504 mod p(x) , x^1536 mod p(x) */
- { 0xc0b55b0e82e02e2f, 0x974ac56262b6ca4b },
- /* x^1312 mod p(x) , x^1344 mod p(x) , x^1376 mod p(x) , x^1408 mod p(x) */
- { 0x71aa1df0e172334d, 0x855712b3784d2a56 },
- /* x^1184 mod p(x) , x^1216 mod p(x) , x^1248 mod p(x) , x^1280 mod p(x) */
- { 0xfee3053e3969324d, 0xa5abe9f80eaee722 },
- /* x^1056 mod p(x) , x^1088 mod p(x) , x^1120 mod p(x) , x^1152 mod p(x) */
- { 0xf44779b93eb2bd08, 0x1fa0943ddb54814c },
- /* x^928 mod p(x) , x^960 mod p(x) , x^992 mod p(x) , x^1024 mod p(x) */
- { 0xf5449b3f00cc3374, 0xa53ff440d7bbfe6a },
- /* x^800 mod p(x) , x^832 mod p(x) , x^864 mod p(x) , x^896 mod p(x) */
- { 0x6f8346e1d777606e, 0xebe7e3566325605c },
- /* x^672 mod p(x) , x^704 mod p(x) , x^736 mod p(x) , x^768 mod p(x) */
- { 0xe3ab4f2ac0b95347, 0xc65a272ce5b592b8 },
- /* x^544 mod p(x) , x^576 mod p(x) , x^608 mod p(x) , x^640 mod p(x) */
- { 0xaa2215ea329ecc11, 0x5705a9ca4721589f },
- /* x^416 mod p(x) , x^448 mod p(x) , x^480 mod p(x) , x^512 mod p(x) */
- { 0x1ed8f66ed95efd26, 0xe3720acb88d14467 },
- /* x^288 mod p(x) , x^320 mod p(x) , x^352 mod p(x) , x^384 mod p(x) */
- { 0x78ed02d5a700e96a, 0xba1aca0315141c31 },
- /* x^160 mod p(x) , x^192 mod p(x) , x^224 mod p(x) , x^256 mod p(x) */
- { 0xba8ccbe832b39da3, 0xad2a31b3ed627dae },
- /* x^32 mod p(x) , x^64 mod p(x) , x^96 mod p(x) , x^128 mod p(x) */
- { 0xedb88320b1e6b092, 0x6655004fa06a2517 }
-#endif /* __LITTLE_ENDIAN__ */
- };
-
-/* Barrett constants */
-/* 33 bit reflected Barrett constant m - (4^32)/n */
-
-static const __vector unsigned long long v_Barrett_const[2]
- __attribute__((aligned (16))) = {
- /* x^64 div p(x) */
-#ifdef __LITTLE_ENDIAN__
- { 0x00000001f7011641, 0x0000000000000000 },
- { 0x00000001db710641, 0x0000000000000000 }
-#else /* __LITTLE_ENDIAN__ */
- { 0x0000000000000000, 0x00000001f7011641 },
- { 0x0000000000000000, 0x00000001db710641 }
-#endif /* __LITTLE_ENDIAN__ */
- };
-#endif /* POWER8_INTRINSICS */
-
-#endif /* __ASSEMBLER__ */
diff --git a/extra/crc32-vpmsum/vec_crc32.c b/extra/crc32-vpmsum/vec_crc32.c
deleted file mode 100644
index bb2204b247c..00000000000
--- a/extra/crc32-vpmsum/vec_crc32.c
+++ /dev/null
@@ -1,674 +0,0 @@
-/*
- * Calculate the checksum of data that is 16 byte aligned and a multiple of
- * 16 bytes.
- *
- * The first step is to reduce it to 1024 bits. We do this in 8 parallel
- * chunks in order to mask the latency of the vpmsum instructions. If we
- * have more than 32 kB of data to checksum we repeat this step multiple
- * times, passing in the previous 1024 bits.
- *
- * The next step is to reduce the 1024 bits to 64 bits. This step adds
- * 32 bits of 0s to the end - this matches what a CRC does. We just
- * calculate constants that land the data in this 32 bits.
- *
- * We then use fixed point Barrett reduction to compute a mod n over GF(2)
- * for n = CRC using POWER8 instructions. We use x = 32.
- *
- * http://en.wikipedia.org/wiki/Barrett_reduction
- *
- * This code uses gcc vector builtins instead using assembly directly.
- *
- * Copyright (C) 2017 Rogerio Alves <rogealve@br.ibm.com>, IBM
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of either:
- *
- * a) the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version, or
- * b) the Apache License, Version 2.0
- */
-
-#include <altivec.h>
-
-#define POWER8_INTRINSICS
-#define CRC_TABLE
-
-#ifdef CRC32_CONSTANTS_HEADER
-#include CRC32_CONSTANTS_HEADER
-#else
-#include "crc32_constants.h"
-#endif
-
-#define VMX_ALIGN 16
-#define VMX_ALIGN_MASK (VMX_ALIGN-1)
-
-#ifdef REFLECT
-static unsigned int crc32_align(unsigned int crc, const unsigned char *p,
- unsigned long len)
-{
- while (len--)
- crc = crc_table[(crc ^ *p++) & 0xff] ^ (crc >> 8);
- return crc;
-}
-#else
-static unsigned int crc32_align(unsigned int crc, const unsigned char *p,
- unsigned long len)
-{
- while (len--)
- crc = crc_table[((crc >> 24) ^ *p++) & 0xff] ^ (crc << 8);
- return crc;
-}
-#endif
-
-static unsigned int __attribute__ ((aligned (32)))
-__crc32_vpmsum(unsigned int crc, const void* p, unsigned long len);
-
-#ifndef CRC32_FUNCTION
-#define CRC32_FUNCTION crc32_vpmsum
-#endif
-
-unsigned int CRC32_FUNCTION(unsigned int crc, const unsigned char *p,
- unsigned long len)
-{
- unsigned int prealign;
- unsigned int tail;
-
-#ifdef CRC_XOR
- crc ^= 0xffffffff;
-#endif
-
- if (len < VMX_ALIGN + VMX_ALIGN_MASK) {
- crc = crc32_align(crc, p, len);
- goto out;
- }
-
- if ((unsigned long)p & VMX_ALIGN_MASK) {
- prealign = VMX_ALIGN - ((unsigned long)p & VMX_ALIGN_MASK);
- crc = crc32_align(crc, p, prealign);
- len -= prealign;
- p += prealign;
- }
-
- crc = __crc32_vpmsum(crc, p, len & ~VMX_ALIGN_MASK);
-
- tail = len & VMX_ALIGN_MASK;
- if (tail) {
- p += len & ~VMX_ALIGN_MASK;
- crc = crc32_align(crc, p, tail);
- }
-
-out:
-#ifdef CRC_XOR
- crc ^= 0xffffffff;
-#endif
-
- return crc;
-}
-
-#if defined (__clang__)
-#include "clang_workaround.h"
-#else
-#define __builtin_pack_vector(a, b) __builtin_pack_vector_int128 ((a), (b))
-#define __builtin_unpack_vector_0(a) __builtin_unpack_vector_int128 ((vector __int128_t)(a), 0)
-#define __builtin_unpack_vector_1(a) __builtin_unpack_vector_int128 ((vector __int128_t)(a), 1)
-#endif
-
-/* When we have a load-store in a single-dispatch group and address overlap
- * such that foward is not allowed (load-hit-store) the group must be flushed.
- * A group ending NOP prevents the flush.
- */
-#define GROUP_ENDING_NOP asm("ori 2,2,0" ::: "memory")
-
-#if defined(__BIG_ENDIAN__) && defined (REFLECT)
-#define BYTESWAP_DATA
-#elif defined(__LITTLE_ENDIAN__) && !defined(REFLECT)
-#define BYTESWAP_DATA
-#endif
-
-#ifdef BYTESWAP_DATA
-#define VEC_PERM(vr, va, vb, vc) vr = vec_perm(va, vb,\
- (__vector unsigned char) vc)
-#if defined(__LITTLE_ENDIAN__)
-/* Byte reverse permute constant LE. */
-static const __vector unsigned long long vperm_const
- __attribute__ ((aligned(16))) = { 0x08090A0B0C0D0E0FUL,
- 0x0001020304050607UL };
-#else
-static const __vector unsigned long long vperm_const
- __attribute__ ((aligned(16))) = { 0x0F0E0D0C0B0A0908UL,
- 0X0706050403020100UL };
-#endif
-#else
-#define VEC_PERM(vr, va, vb, vc)
-#endif
-
-static unsigned int __attribute__ ((aligned (32)))
-__crc32_vpmsum(unsigned int crc, const void* p, unsigned long len) {
-
- const __vector unsigned long long vzero = {0,0};
- const __vector unsigned long long vones = {0xffffffffffffffffUL,
- 0xffffffffffffffffUL};
-
-#ifdef REFLECT
- const __vector unsigned long long vmask_32bit =
- (__vector unsigned long long)vec_sld((__vector unsigned char)vzero,
- (__vector unsigned char)vones, 4);
-#endif
-
- const __vector unsigned long long vmask_64bit =
- (__vector unsigned long long)vec_sld((__vector unsigned char)vzero,
- (__vector unsigned char)vones, 8);
-
- __vector unsigned long long vcrc;
-
- __vector unsigned long long vconst1, vconst2;
-
- /* vdata0-vdata7 will contain our data (p). */
- __vector unsigned long long vdata0, vdata1, vdata2, vdata3, vdata4,
- vdata5, vdata6, vdata7;
-
- /* v0-v7 will contain our checksums */
- __vector unsigned long long v0 = {0,0};
- __vector unsigned long long v1 = {0,0};
- __vector unsigned long long v2 = {0,0};
- __vector unsigned long long v3 = {0,0};
- __vector unsigned long long v4 = {0,0};
- __vector unsigned long long v5 = {0,0};
- __vector unsigned long long v6 = {0,0};
- __vector unsigned long long v7 = {0,0};
-
-
- /* Vector auxiliary variables. */
- __vector unsigned long long va0, va1, va2, va3, va4, va5, va6, va7;
-
- unsigned int result = 0;
- unsigned int offset; /* Constant table offset. */
-
- unsigned long i; /* Counter. */
- unsigned long chunks;
-
- unsigned long block_size;
- int next_block = 0;
-
- /* Align by 128 bits. The last 128 bit block will be processed at end. */
- unsigned long length = len & 0xFFFFFFFFFFFFFF80UL;
-
-#ifdef REFLECT
- vcrc = (__vector unsigned long long)__builtin_pack_vector(0UL, crc);
-#else
- vcrc = (__vector unsigned long long)__builtin_pack_vector(crc, 0UL);
-
- /* Shift into top 32 bits */
- vcrc = (__vector unsigned long long)vec_sld((__vector unsigned char)vcrc,
- (__vector unsigned char)vzero, 4);
-#endif
-
- /* Short version. */
- if (len < 256) {
- /* Calculate where in the constant table we need to start. */
- offset = 256 - len;
-
- vconst1 = vec_ld(offset, vcrc_short_const);
- vdata0 = vec_ld(0, (__vector unsigned long long*) p);
- VEC_PERM(vdata0, vdata0, vconst1, vperm_const);
-
- /* xor initial value*/
- vdata0 = vec_xor(vdata0, vcrc);
-
- vdata0 = (__vector unsigned long long) __builtin_crypto_vpmsumw
- ((__vector unsigned int)vdata0, (__vector unsigned int)vconst1);
- v0 = vec_xor(v0, vdata0);
-
- for (i = 16; i < len; i += 16) {
- vconst1 = vec_ld(offset + i, vcrc_short_const);
- vdata0 = vec_ld(i, (__vector unsigned long long*) p);
- VEC_PERM(vdata0, vdata0, vconst1, vperm_const);
- vdata0 = (__vector unsigned long long) __builtin_crypto_vpmsumw
- ((__vector unsigned int)vdata0, (__vector unsigned int)vconst1);
- v0 = vec_xor(v0, vdata0);
- }
- } else {
-
- /* Load initial values. */
- vdata0 = vec_ld(0, (__vector unsigned long long*) p);
- vdata1 = vec_ld(16, (__vector unsigned long long*) p);
-
- VEC_PERM(vdata0, vdata0, vdata0, vperm_const);
- VEC_PERM(vdata1, vdata1, vdata1, vperm_const);
-
- vdata2 = vec_ld(32, (__vector unsigned long long*) p);
- vdata3 = vec_ld(48, (__vector unsigned long long*) p);
-
- VEC_PERM(vdata2, vdata2, vdata2, vperm_const);
- VEC_PERM(vdata3, vdata3, vdata3, vperm_const);
-
- vdata4 = vec_ld(64, (__vector unsigned long long*) p);
- vdata5 = vec_ld(80, (__vector unsigned long long*) p);
-
- VEC_PERM(vdata4, vdata4, vdata4, vperm_const);
- VEC_PERM(vdata5, vdata5, vdata5, vperm_const);
-
- vdata6 = vec_ld(96, (__vector unsigned long long*) p);
- vdata7 = vec_ld(112, (__vector unsigned long long*) p);
-
- VEC_PERM(vdata6, vdata6, vdata6, vperm_const);
- VEC_PERM(vdata7, vdata7, vdata7, vperm_const);
-
- /* xor in initial value */
- vdata0 = vec_xor(vdata0, vcrc);
-
- p = (char *)p + 128;
-
- do {
- /* Checksum in blocks of MAX_SIZE. */
- block_size = length;
- if (block_size > MAX_SIZE) {
- block_size = MAX_SIZE;
- }
-
- length = length - block_size;
-
- /*
- * Work out the offset into the constants table to start at. Each
- * constant is 16 bytes, and it is used against 128 bytes of input
- * data - 128 / 16 = 8
- */
- offset = (MAX_SIZE/8) - (block_size/8);
- /* We reduce our final 128 bytes in a separate step */
- chunks = (block_size/128)-1;
-
- vconst1 = vec_ld(offset, vcrc_const);
-
- va0 = __builtin_crypto_vpmsumd ((__vector unsigned long long)vdata0,
- (__vector unsigned long long)vconst1);
- va1 = __builtin_crypto_vpmsumd ((__vector unsigned long long)vdata1,
- (__vector unsigned long long)vconst1);
- va2 = __builtin_crypto_vpmsumd ((__vector unsigned long long)vdata2,
- (__vector unsigned long long)vconst1);
- va3 = __builtin_crypto_vpmsumd ((__vector unsigned long long)vdata3,
- (__vector unsigned long long)vconst1);
- va4 = __builtin_crypto_vpmsumd ((__vector unsigned long long)vdata4,
- (__vector unsigned long long)vconst1);
- va5 = __builtin_crypto_vpmsumd ((__vector unsigned long long)vdata5,
- (__vector unsigned long long)vconst1);
- va6 = __builtin_crypto_vpmsumd ((__vector unsigned long long)vdata6,
- (__vector unsigned long long)vconst1);
- va7 = __builtin_crypto_vpmsumd ((__vector unsigned long long)vdata7,
- (__vector unsigned long long)vconst1);
-
- if (chunks > 1) {
- offset += 16;
- vconst2 = vec_ld(offset, vcrc_const);
- GROUP_ENDING_NOP;
-
- vdata0 = vec_ld(0, (__vector unsigned long long*) p);
- VEC_PERM(vdata0, vdata0, vdata0, vperm_const);
-
- vdata1 = vec_ld(16, (__vector unsigned long long*) p);
- VEC_PERM(vdata1, vdata1, vdata1, vperm_const);
-
- vdata2 = vec_ld(32, (__vector unsigned long long*) p);
- VEC_PERM(vdata2, vdata2, vdata2, vperm_const);
-
- vdata3 = vec_ld(48, (__vector unsigned long long*) p);
- VEC_PERM(vdata3, vdata3, vdata3, vperm_const);
-
- vdata4 = vec_ld(64, (__vector unsigned long long*) p);
- VEC_PERM(vdata4, vdata4, vdata4, vperm_const);
-
- vdata5 = vec_ld(80, (__vector unsigned long long*) p);
- VEC_PERM(vdata5, vdata5, vdata5, vperm_const);
-
- vdata6 = vec_ld(96, (__vector unsigned long long*) p);
- VEC_PERM(vdata6, vdata6, vdata6, vperm_const);
-
- vdata7 = vec_ld(112, (__vector unsigned long long*) p);
- VEC_PERM(vdata7, vdata7, vdata7, vperm_const);
-
- p = (char *)p + 128;
-
- /*
- * main loop. We modulo schedule it such that it takes three
- * iterations to complete - first iteration load, second
- * iteration vpmsum, third iteration xor.
- */
- for (i = 0; i < chunks-2; i++) {
- vconst1 = vec_ld(offset, vcrc_const);
- offset += 16;
- GROUP_ENDING_NOP;
-
- v0 = vec_xor(v0, va0);
- va0 = __builtin_crypto_vpmsumd ((__vector unsigned long
- long)vdata0, (__vector unsigned long long)vconst2);
- vdata0 = vec_ld(0, (__vector unsigned long long*) p);
- VEC_PERM(vdata0, vdata0, vdata0, vperm_const);
- GROUP_ENDING_NOP;
-
- v1 = vec_xor(v1, va1);
- va1 = __builtin_crypto_vpmsumd ((__vector unsigned long
- long)vdata1, (__vector unsigned long long)vconst2);
- vdata1 = vec_ld(16, (__vector unsigned long long*) p);
- VEC_PERM(vdata1, vdata1, vdata1, vperm_const);
- GROUP_ENDING_NOP;
-
- v2 = vec_xor(v2, va2);
- va2 = __builtin_crypto_vpmsumd ((__vector unsigned long
- long)vdata2, (__vector unsigned long long)vconst2);
- vdata2 = vec_ld(32, (__vector unsigned long long*) p);
- VEC_PERM(vdata2, vdata2, vdata2, vperm_const);
- GROUP_ENDING_NOP;
-
- v3 = vec_xor(v3, va3);
- va3 = __builtin_crypto_vpmsumd ((__vector unsigned long
- long)vdata3, (__vector unsigned long long)vconst2);
- vdata3 = vec_ld(48, (__vector unsigned long long*) p);
- VEC_PERM(vdata3, vdata3, vdata3, vperm_const);
-
- vconst2 = vec_ld(offset, vcrc_const);
- GROUP_ENDING_NOP;
-
- v4 = vec_xor(v4, va4);
- va4 = __builtin_crypto_vpmsumd ((__vector unsigned long
- long)vdata4, (__vector unsigned long long)vconst1);
- vdata4 = vec_ld(64, (__vector unsigned long long*) p);
- VEC_PERM(vdata4, vdata4, vdata4, vperm_const);
- GROUP_ENDING_NOP;
-
- v5 = vec_xor(v5, va5);
- va5 = __builtin_crypto_vpmsumd ((__vector unsigned long
- long)vdata5, (__vector unsigned long long)vconst1);
- vdata5 = vec_ld(80, (__vector unsigned long long*) p);
- VEC_PERM(vdata5, vdata5, vdata5, vperm_const);
- GROUP_ENDING_NOP;
-
- v6 = vec_xor(v6, va6);
- va6 = __builtin_crypto_vpmsumd ((__vector unsigned long
- long)vdata6, (__vector unsigned long long)vconst1);
- vdata6 = vec_ld(96, (__vector unsigned long long*) p);
- VEC_PERM(vdata6, vdata6, vdata6, vperm_const);
- GROUP_ENDING_NOP;
-
- v7 = vec_xor(v7, va7);
- va7 = __builtin_crypto_vpmsumd ((__vector unsigned long
- long)vdata7, (__vector unsigned long long)vconst1);
- vdata7 = vec_ld(112, (__vector unsigned long long*) p);
- VEC_PERM(vdata7, vdata7, vdata7, vperm_const);
-
- p = (char *)p + 128;
- }
-
- /* First cool down*/
- vconst1 = vec_ld(offset, vcrc_const);
- offset += 16;
-
- v0 = vec_xor(v0, va0);
- va0 = __builtin_crypto_vpmsumd ((__vector unsigned long
- long)vdata0, (__vector unsigned long long)vconst1);
- GROUP_ENDING_NOP;
-
- v1 = vec_xor(v1, va1);
- va1 = __builtin_crypto_vpmsumd ((__vector unsigned long
- long)vdata1, (__vector unsigned long long)vconst1);
- GROUP_ENDING_NOP;
-
- v2 = vec_xor(v2, va2);
- va2 = __builtin_crypto_vpmsumd ((__vector unsigned long
- long)vdata2, (__vector unsigned long long)vconst1);
- GROUP_ENDING_NOP;
-
- v3 = vec_xor(v3, va3);
- va3 = __builtin_crypto_vpmsumd ((__vector unsigned long
- long)vdata3, (__vector unsigned long long)vconst1);
- GROUP_ENDING_NOP;
-
- v4 = vec_xor(v4, va4);
- va4 = __builtin_crypto_vpmsumd ((__vector unsigned long
- long)vdata4, (__vector unsigned long long)vconst1);
- GROUP_ENDING_NOP;
-
- v5 = vec_xor(v5, va5);
- va5 = __builtin_crypto_vpmsumd ((__vector unsigned long
- long)vdata5, (__vector unsigned long long)vconst1);
- GROUP_ENDING_NOP;
-
- v6 = vec_xor(v6, va6);
- va6 = __builtin_crypto_vpmsumd ((__vector unsigned long
- long)vdata6, (__vector unsigned long long)vconst1);
- GROUP_ENDING_NOP;
-
- v7 = vec_xor(v7, va7);
- va7 = __builtin_crypto_vpmsumd ((__vector unsigned long
- long)vdata7, (__vector unsigned long long)vconst1);
- }/* else */
-
- /* Second cool down. */
- v0 = vec_xor(v0, va0);
- v1 = vec_xor(v1, va1);
- v2 = vec_xor(v2, va2);
- v3 = vec_xor(v3, va3);
- v4 = vec_xor(v4, va4);
- v5 = vec_xor(v5, va5);
- v6 = vec_xor(v6, va6);
- v7 = vec_xor(v7, va7);
-
-#ifdef REFLECT
- /*
- * vpmsumd produces a 96 bit result in the least significant bits
- * of the register. Since we are bit reflected we have to shift it
- * left 32 bits so it occupies the least significant bits in the
- * bit reflected domain.
- */
- v0 = (__vector unsigned long long)vec_sld((__vector unsigned char)v0,
- (__vector unsigned char)vzero, 4);
- v1 = (__vector unsigned long long)vec_sld((__vector unsigned char)v1,
- (__vector unsigned char)vzero, 4);
- v2 = (__vector unsigned long long)vec_sld((__vector unsigned char)v2,
- (__vector unsigned char)vzero, 4);
- v3 = (__vector unsigned long long)vec_sld((__vector unsigned char)v3,
- (__vector unsigned char)vzero, 4);
- v4 = (__vector unsigned long long)vec_sld((__vector unsigned char)v4,
- (__vector unsigned char)vzero, 4);
- v5 = (__vector unsigned long long)vec_sld((__vector unsigned char)v5,
- (__vector unsigned char)vzero, 4);
- v6 = (__vector unsigned long long)vec_sld((__vector unsigned char)v6,
- (__vector unsigned char)vzero, 4);
- v7 = (__vector unsigned long long)vec_sld((__vector unsigned char)v7,
- (__vector unsigned char)vzero, 4);
-#endif
-
- /* xor with the last 1024 bits. */
- va0 = vec_ld(0, (__vector unsigned long long*) p);
- VEC_PERM(va0, va0, va0, vperm_const);
-
- va1 = vec_ld(16, (__vector unsigned long long*) p);
- VEC_PERM(va1, va1, va1, vperm_const);
-
- va2 = vec_ld(32, (__vector unsigned long long*) p);
- VEC_PERM(va2, va2, va2, vperm_const);
-
- va3 = vec_ld(48, (__vector unsigned long long*) p);
- VEC_PERM(va3, va3, va3, vperm_const);
-
- va4 = vec_ld(64, (__vector unsigned long long*) p);
- VEC_PERM(va4, va4, va4, vperm_const);
-
- va5 = vec_ld(80, (__vector unsigned long long*) p);
- VEC_PERM(va5, va5, va5, vperm_const);
-
- va6 = vec_ld(96, (__vector unsigned long long*) p);
- VEC_PERM(va6, va6, va6, vperm_const);
-
- va7 = vec_ld(112, (__vector unsigned long long*) p);
- VEC_PERM(va7, va7, va7, vperm_const);
-
- p = (char *)p + 128;
-
- vdata0 = vec_xor(v0, va0);
- vdata1 = vec_xor(v1, va1);
- vdata2 = vec_xor(v2, va2);
- vdata3 = vec_xor(v3, va3);
- vdata4 = vec_xor(v4, va4);
- vdata5 = vec_xor(v5, va5);
- vdata6 = vec_xor(v6, va6);
- vdata7 = vec_xor(v7, va7);
-
- /* Check if we have more blocks to process */
- next_block = 0;
- if (length != 0) {
- next_block = 1;
-
- /* zero v0-v7 */
- v0 = vec_xor(v0, v0);
- v1 = vec_xor(v1, v1);
- v2 = vec_xor(v2, v2);
- v3 = vec_xor(v3, v3);
- v4 = vec_xor(v4, v4);
- v5 = vec_xor(v5, v5);
- v6 = vec_xor(v6, v6);
- v7 = vec_xor(v7, v7);
- }
- length = length + 128;
-
- } while (next_block);
-
- /* Calculate how many bytes we have left. */
- length = (len & 127);
-
- /* Calculate where in (short) constant table we need to start. */
- offset = 128 - length;
-
- v0 = vec_ld(offset, vcrc_short_const);
- v1 = vec_ld(offset + 16, vcrc_short_const);
- v2 = vec_ld(offset + 32, vcrc_short_const);
- v3 = vec_ld(offset + 48, vcrc_short_const);
- v4 = vec_ld(offset + 64, vcrc_short_const);
- v5 = vec_ld(offset + 80, vcrc_short_const);
- v6 = vec_ld(offset + 96, vcrc_short_const);
- v7 = vec_ld(offset + 112, vcrc_short_const);
-
- offset += 128;
-
- v0 = (__vector unsigned long long)__builtin_crypto_vpmsumw (
- (__vector unsigned int)vdata0,(__vector unsigned int)v0);
- v1 = (__vector unsigned long long)__builtin_crypto_vpmsumw (
- (__vector unsigned int)vdata1,(__vector unsigned int)v1);
- v2 = (__vector unsigned long long)__builtin_crypto_vpmsumw (
- (__vector unsigned int)vdata2,(__vector unsigned int)v2);
- v3 = (__vector unsigned long long)__builtin_crypto_vpmsumw (
- (__vector unsigned int)vdata3,(__vector unsigned int)v3);
- v4 = (__vector unsigned long long)__builtin_crypto_vpmsumw (
- (__vector unsigned int)vdata4,(__vector unsigned int)v4);
- v5 = (__vector unsigned long long)__builtin_crypto_vpmsumw (
- (__vector unsigned int)vdata5,(__vector unsigned int)v5);
- v6 = (__vector unsigned long long)__builtin_crypto_vpmsumw (
- (__vector unsigned int)vdata6,(__vector unsigned int)v6);
- v7 = (__vector unsigned long long)__builtin_crypto_vpmsumw (
- (__vector unsigned int)vdata7,(__vector unsigned int)v7);
-
- /* Now reduce the tail (0-112 bytes). */
- for (i = 0; i < length; i+=16) {
- vdata0 = vec_ld(i,(__vector unsigned long long*)p);
- VEC_PERM(vdata0, vdata0, vdata0, vperm_const);
- va0 = vec_ld(offset + i,vcrc_short_const);
- va0 = (__vector unsigned long long)__builtin_crypto_vpmsumw (
- (__vector unsigned int)vdata0,(__vector unsigned int)va0);
- v0 = vec_xor(v0, va0);
- }
-
- /* xor all parallel chunks together. */
- v0 = vec_xor(v0, v1);
- v2 = vec_xor(v2, v3);
- v4 = vec_xor(v4, v5);
- v6 = vec_xor(v6, v7);
-
- v0 = vec_xor(v0, v2);
- v4 = vec_xor(v4, v6);
-
- v0 = vec_xor(v0, v4);
- }
-
- /* Barrett Reduction */
- vconst1 = vec_ld(0, v_Barrett_const);
- vconst2 = vec_ld(16, v_Barrett_const);
-
- v1 = (__vector unsigned long long)vec_sld((__vector unsigned char)v0,
- (__vector unsigned char)v0, 8);
- v0 = vec_xor(v1,v0);
-
-#ifdef REFLECT
- /* shift left one bit */
- __vector unsigned char vsht_splat = vec_splat_u8 (1);
- v0 = (__vector unsigned long long)vec_sll ((__vector unsigned char)v0,
- vsht_splat);
-#endif
-
- v0 = vec_and(v0, vmask_64bit);
-
-#ifndef REFLECT
-
- /*
- * Now for the actual algorithm. The idea is to calculate q,
- * the multiple of our polynomial that we need to subtract. By
- * doing the computation 2x bits higher (ie 64 bits) and shifting the
- * result back down 2x bits, we round down to the nearest multiple.
- */
-
- /* ma */
- v1 = __builtin_crypto_vpmsumd ((__vector unsigned long long)v0,
- (__vector unsigned long long)vconst1);
- /* q = floor(ma/(2^64)) */
- v1 = (__vector unsigned long long)vec_sld ((__vector unsigned char)vzero,
- (__vector unsigned char)v1, 8);
- /* qn */
- v1 = __builtin_crypto_vpmsumd ((__vector unsigned long long)v1,
- (__vector unsigned long long)vconst2);
- /* a - qn, subtraction is xor in GF(2) */
- v0 = vec_xor (v0, v1);
- /*
- * Get the result into r3. We need to shift it left 8 bytes:
- * V0 [ 0 1 2 X ]
- * V0 [ 0 X 2 3 ]
- */
- result = __builtin_unpack_vector_1 (v0);
-#else
-
- /*
- * The reflected version of Barrett reduction. Instead of bit
- * reflecting our data (which is expensive to do), we bit reflect our
- * constants and our algorithm, which means the intermediate data in
- * our vector registers goes from 0-63 instead of 63-0. We can reflect
- * the algorithm because we don't carry in mod 2 arithmetic.
- */
-
- /* bottom 32 bits of a */
- v1 = vec_and(v0, vmask_32bit);
-
- /* ma */
- v1 = __builtin_crypto_vpmsumd ((__vector unsigned long long)v1,
- (__vector unsigned long long)vconst1);
-
- /* bottom 32bits of ma */
- v1 = vec_and(v1, vmask_32bit);
- /* qn */
- v1 = __builtin_crypto_vpmsumd ((__vector unsigned long long)v1,
- (__vector unsigned long long)vconst2);
- /* a - qn, subtraction is xor in GF(2) */
- v0 = vec_xor (v0, v1);
-
- /*
- * Since we are bit reflected, the result (ie the low 32 bits) is in
- * the high 32 bits. We just need to shift it left 4 bytes
- * V0 [ 0 1 X 3 ]
- * V0 [ 0 X 2 3 ]
- */
-
- /* shift result into top 64 bits of */
- v0 = (__vector unsigned long long)vec_sld((__vector unsigned char)v0,
- (__vector unsigned char)vzero, 4);
-
- result = __builtin_unpack_vector_0 (v0);
-#endif
-
- return result;
-}
diff --git a/extra/innochecksum.cc b/extra/innochecksum.cc
index 67528827dc0..1a6cbb3bfa1 100644
--- a/extra/innochecksum.cc
+++ b/extra/innochecksum.cc
@@ -49,7 +49,6 @@ The parts not included are excluded by #ifndef UNIV_INNOCHECKSUM. */
#include "page0zip.h" /* page_zip_*() */
#include "trx0undo.h" /* TRX_* */
#include "ut0crc32.h" /* ut_crc32_init() */
-#include "fsp0pagecompress.h" /* fil_get_compression_alg_name */
#include "fil0crypt.h" /* fil_space_verify_crypt_checksum */
#include <string.h>
@@ -104,6 +103,9 @@ FILE* log_file = NULL;
/* Enabled for log write option. */
static bool is_log_enabled = false;
+static byte field_ref_zero_buf[UNIV_PAGE_SIZE_MAX];
+const byte *field_ref_zero = field_ref_zero_buf;
+
#ifndef _WIN32
/* advisory lock for non-window system. */
struct flock lk;
@@ -471,7 +473,7 @@ is_page_corrupted(
/* use to store LSN values. */
uint32_t logseq;
uint32_t logseqfield;
- ulint page_type = mach_read_from_2(buf+FIL_PAGE_TYPE);
+ const uint16_t page_type = mach_read_from_2(buf+FIL_PAGE_TYPE);
uint32_t key_version = buf_page_get_key_version(buf, flags);
uint32_t space_id = mach_read_from_4(
buf + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID);
@@ -816,7 +818,7 @@ static inline bool is_page_free(const byte *xdes, ulint physical_page_size,
const byte *des=
xdes + XDES_ARR_OFFSET +
XDES_SIZE * ((page_no & (physical_page_size - 1)) / FSP_EXTENT_SIZE);
- return xdes_get_bit(des, XDES_FREE_BIT, page_no % FSP_EXTENT_SIZE);
+ return xdes_is_free(des, page_no % FSP_EXTENT_SIZE);
}
/*
@@ -845,7 +847,7 @@ parse_page(
/* Check whether page is doublewrite buffer. */
str = skip_page ? "Double_write_buffer" : "-";
- switch (mach_read_from_2(page + FIL_PAGE_TYPE)) {
+ switch (fil_page_get_type(page)) {
case FIL_PAGE_INDEX: {
uint32_t key_version = mach_read_from_4(page + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION);
@@ -896,8 +898,7 @@ parse_page(
/* update per-index statistics */
{
per_index_stats &index = index_ids[id];
- if (is_page_free(xdes, physical_page_size,
- page_no)) {
+ if (is_page_free(xdes, physical_page_size, page_no)) {
index.free_pages++;
return;
}
@@ -1305,11 +1306,11 @@ static void usage(void)
extern "C" my_bool
innochecksum_get_one_option(
- int optid,
- const struct my_option *opt MY_ATTRIBUTE((unused)),
- char *argument MY_ATTRIBUTE((unused)))
+ const struct my_option *opt,
+ const char *argument MY_ATTRIBUTE((unused)),
+ const char *)
{
- switch (optid) {
+ switch (opt->id) {
#ifndef DBUG_OFF
case '#':
dbug_setting = argument
@@ -1524,8 +1525,6 @@ int main(
/* our input filename. */
char* filename;
/* Buffer to store pages read. */
- byte* buf_ptr = NULL;
- byte* xdes_ptr = NULL;
byte* buf = NULL;
byte* xdes = NULL;
/* bytes read count */
@@ -1559,7 +1558,6 @@ int main(
/* enable when space_id of given file is zero. */
bool is_system_tablespace = false;
- ut_crc32_init();
MY_INIT(argv[0]);
DBUG_ENTER("main");
DBUG_PROCESS(argv[0]);
@@ -1605,10 +1603,10 @@ int main(
}
- buf_ptr = (byte*) malloc(UNIV_PAGE_SIZE_MAX * 2);
- xdes_ptr = (byte*)malloc(UNIV_PAGE_SIZE_MAX * 2);
- buf = (byte *) ut_align(buf_ptr, UNIV_PAGE_SIZE_MAX);
- xdes = (byte *) ut_align(xdes_ptr, UNIV_PAGE_SIZE_MAX);
+ buf = static_cast<byte*>(aligned_malloc(UNIV_PAGE_SIZE_MAX,
+ UNIV_PAGE_SIZE_MAX));
+ xdes = static_cast<byte*>(aligned_malloc(UNIV_PAGE_SIZE_MAX,
+ UNIV_PAGE_SIZE_MAX));
/* The file name is not optional. */
for (int i = 0; i < argc; ++i) {
@@ -1891,6 +1889,18 @@ unexpected_eof:
}
if (ferror(fil_in)) {
+#ifdef _AIX
+ /*
+ AIX fseeko can go past eof without error.
+ the error occurs on read, hence output the
+ same error here as would show up on other
+ platforms. This shows up in the mtr test
+ innodb_zip.innochecksum_3-4k,crc32,innodb
+ */
+ if (errno == EFBIG) {
+ goto unexpected_eof;
+ }
+#endif
fprintf(stderr, "Error reading " ULINTPF " bytes",
physical_page_size);
perror(" ");
@@ -1915,7 +1925,7 @@ first_non_zero:
skip_page = false;
}
- ulint cur_page_type = mach_read_from_2(buf+FIL_PAGE_TYPE);
+ const uint16_t cur_page_type = fil_page_get_type(buf);
/* FIXME: Page compressed or Page compressed and encrypted
pages do not contain checksum. */
@@ -1928,8 +1938,7 @@ first_non_zero:
checksum verification.*/
if (!no_check
&& !skip_page
- && !is_page_free(xdes, physical_page_size,
- cur_page_num)
+ && !is_page_free(xdes, physical_page_size, cur_page_num)
&& (exit_status = verify_checksum(
buf, is_encrypted,
&mismatch_count, flags))) {
@@ -1999,21 +2008,9 @@ first_non_zero:
fclose(log_file);
}
- free(buf_ptr);
- free(xdes_ptr);
-
- my_end(exit_status);
- DBUG_RETURN(exit_status);
+ goto common_exit;
my_exit:
- if (buf_ptr) {
- free(buf_ptr);
- }
-
- if (xdes_ptr) {
- free(xdes_ptr);
- }
-
if (!read_from_stdin && fil_in) {
fclose(fil_in);
}
@@ -2022,6 +2019,9 @@ my_exit:
fclose(log_file);
}
+common_exit:
+ aligned_free(buf);
+ aligned_free(xdes);
my_end(exit_status);
DBUG_RETURN(exit_status);
}
diff --git a/extra/mariabackup/CMakeLists.txt b/extra/mariabackup/CMakeLists.txt
index f89dfe722b0..0ebfba54534 100644
--- a/extra/mariabackup/CMakeLists.txt
+++ b/extra/mariabackup/CMakeLists.txt
@@ -33,11 +33,11 @@ INCLUDE_DIRECTORIES(
${CMAKE_SOURCE_DIR}/sql
${CMAKE_CURRENT_SOURCE_DIR}/quicklz
${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_CURRENT_SOURCE_DIR}/crc
)
IF(NOT HAVE_SYSTEM_REGEX)
- INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/pcre)
+ INCLUDE_DIRECTORIES(${PCRE_INCLUDES})
+ ADD_DEFINITIONS(${PCRE2_DEBIAN_HACK})
ENDIF()
@@ -54,7 +54,7 @@ ENDIF()
ADD_DEFINITIONS(-DPCRE_STATIC=1)
ADD_DEFINITIONS(${SSL_DEFINES})
-MYSQL_ADD_EXECUTABLE(mariabackup
+MYSQL_ADD_EXECUTABLE(mariadb-backup
xtrabackup.cc
innobackupex.cc
changed_page_bitmap.cc
@@ -81,17 +81,12 @@ MYSQL_ADD_EXECUTABLE(mariabackup
COMPONENT backup
)
-
-
-
# Export all symbols on Unix, for better crash callstacks
-SET_TARGET_PROPERTIES(mariabackup PROPERTIES ENABLE_EXPORTS TRUE)
-ADD_SUBDIRECTORY(crc)
-
+SET_TARGET_PROPERTIES(mariadb-backup PROPERTIES ENABLE_EXPORTS TRUE)
-TARGET_LINK_LIBRARIES(mariabackup sql sql_builtins crc)
+TARGET_LINK_LIBRARIES(mariadb-backup sql sql_builtins)
IF(NOT HAVE_SYSTEM_REGEX)
- TARGET_LINK_LIBRARIES(mariabackup pcreposix)
+ TARGET_LINK_LIBRARIES(mariadb-backup pcre2-posix)
ENDIF()
@@ -112,7 +107,6 @@ MYSQL_ADD_EXECUTABLE(mbstream
TARGET_LINK_LIBRARIES(mbstream
mysys
- crc
)
ADD_DEPENDENCIES(mbstream GenError)
diff --git a/extra/mariabackup/backup_copy.cc b/extra/mariabackup/backup_copy.cc
index 608be7125bd..27c4ba29c91 100644
--- a/extra/mariabackup/backup_copy.cc
+++ b/extra/mariabackup/backup_copy.cc
@@ -468,14 +468,13 @@ struct datafile_cur_t {
char abs_path[FN_REFLEN];
MY_STAT statinfo;
uint thread_n;
- byte* orig_buf;
byte* buf;
size_t buf_size;
size_t buf_read;
size_t buf_offset;
explicit datafile_cur_t(const char* filename = NULL) :
- file(), thread_n(0), orig_buf(NULL), buf(NULL), buf_size(0),
+ file(), thread_n(0), buf(NULL), buf_size(0),
buf_read(0), buf_offset(0)
{
memset(rel_path, 0, sizeof rel_path);
@@ -963,7 +962,7 @@ run_data_threads(datadir_iter_t *it, os_thread_func_t func, uint n)
data_threads[i].n_thread = i + 1;
data_threads[i].count = &count;
data_threads[i].count_mutex = &count_mutex;
- os_thread_create(func, data_threads + i, &data_threads[i].id);
+ data_threads[i].id = os_thread_create(func, data_threads + i);
}
/* Wait for threads to exit */
@@ -1034,16 +1033,16 @@ static int fix_win_file_permissions(const char *file)
ea.grfInheritance = CONTAINER_INHERIT_ACE | OBJECT_INHERIT_ACE;
ea.Trustee.TrusteeType = TRUSTEE_IS_UNKNOWN;
ACL* pNewDACL = 0;
- SetEntriesInAcl(1, &ea, pOldDACL, &pNewDACL);
- if (pNewDACL)
+ DWORD err = SetEntriesInAcl(1, &ea, pOldDACL, &pNewDACL);
+ if (!err)
{
+ DBUG_ASSERT(pNewDACL);
SetSecurityInfo(hFile, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL,
pNewDACL, NULL);
+ LocalFree((HLOCAL)pNewDACL);
}
if (pSD != NULL)
LocalFree((HLOCAL)pSD);
- if (pNewDACL != NULL)
- LocalFree((HLOCAL)pNewDACL);
CloseHandle(hFile);
return 0;
}
@@ -1886,7 +1885,6 @@ copy_back()
srv_max_n_threads = 1000;
sync_check_init();
- ut_crc32_init();
/* copy undo tablespaces */
@@ -1915,24 +1913,25 @@ copy_back()
dst_dir = dst_dir_buf.make(srv_log_group_home_dir);
- /* --backup generates a single ib_logfile0, which we must copy
+ /* --backup generates a single LOG_FILE_NAME, which we must copy
if it exists. */
ds_data = ds_create(dst_dir, DS_TYPE_LOCAL);
MY_STAT stat_arg;
- if (!my_stat("ib_logfile0", &stat_arg, MYF(0)) || !stat_arg.st_size) {
+ if (!my_stat(LOG_FILE_NAME, &stat_arg, MYF(0)) || !stat_arg.st_size) {
/* After completed --prepare, redo log files are redundant.
We must delete any redo logs at the destination, so that
the database will not jump to a different log sequence number
(LSN). */
- for (uint i = 0; i <= SRV_N_LOG_FILES_MAX + 1; i++) {
- char filename[FN_REFLEN];
- snprintf(filename, sizeof filename, "%s/ib_logfile%u",
- dst_dir, i);
- unlink(filename);
- }
- } else if (!(ret = copy_or_move_file("ib_logfile0", "ib_logfile0",
+ char filename[FN_REFLEN];
+ snprintf(filename, sizeof filename, "%s/%s0", dst_dir,
+ LOG_FILE_NAME_PREFIX);
+ unlink(filename);
+ snprintf(filename, sizeof filename, "%s/%s101", dst_dir,
+ LOG_FILE_NAME_PREFIX);
+ unlink(filename);
+ } else if (!(ret = copy_or_move_file(LOG_FILE_NAME, LOG_FILE_NAME,
dst_dir, 1))) {
goto cleanup;
}
@@ -2023,7 +2022,7 @@ copy_back()
}
/* skip the redo log (it was already copied) */
- if (!strcmp(filename, "ib_logfile0")) {
+ if (!strcmp(filename, LOG_FILE_NAME)) {
continue;
}
diff --git a/extra/mariabackup/backup_mysql.cc b/extra/mariabackup/backup_mysql.cc
index b895f8c4561..ef79c8d561e 100644
--- a/extra/mariabackup/backup_mysql.cc
+++ b/extra/mariabackup/backup_mysql.cc
@@ -76,7 +76,6 @@ bool have_multi_threaded_slave = false;
bool have_gtid_slave = false;
/* Kill long selects */
-os_thread_id_t kill_query_thread_id;
os_event_t kill_query_thread_started;
os_event_t kill_query_thread_stopped;
os_event_t kill_query_thread_stop;
@@ -127,7 +126,7 @@ xb_mysql_connect()
mysql_options(connection, MYSQL_OPT_PROTOCOL, &opt_protocol);
mysql_options(connection,MYSQL_SET_CHARSET_NAME, "utf8");
- msg("Connecting to MySQL server host: %s, user: %s, password: %s, "
+ msg("Connecting to server host: %s, user: %s, password: %s, "
"port: %s, socket: %s", opt_host ? opt_host : "localhost",
opt_user ? opt_user : "not set",
opt_password ? "set" : "not set",
@@ -154,7 +153,7 @@ xb_mysql_connect()
opt_password,
"" /*database*/, opt_port,
opt_socket, 0)) {
- msg("Failed to connect to MySQL server: %s.", mysql_error(connection));
+ msg("Failed to connect to server: %s.", mysql_error(connection));
mysql_close(connection);
return(NULL);
}
@@ -343,7 +342,7 @@ check_server_version(unsigned long version_number,
}
/*********************************************************************//**
-Receive options important for XtraBackup from MySQL server.
+Receive options important for XtraBackup from server.
@return true on success. */
bool get_mysql_vars(MYSQL *connection)
{
@@ -494,31 +493,21 @@ bool get_mysql_vars(MYSQL *connection)
}
if (innodb_data_file_path_var && *innodb_data_file_path_var)
- {
- innobase_data_file_path= my_strdup(innodb_data_file_path_var, MYF(MY_FAE));
- }
+ innobase_data_file_path= my_strdup(PSI_NOT_INSTRUMENTED,
+ innodb_data_file_path_var, MYF(MY_FAE));
if (innodb_data_home_dir_var)
- {
- innobase_data_home_dir= my_strdup(innodb_data_home_dir_var, MYF(MY_FAE));
- }
+ innobase_data_home_dir= my_strdup(PSI_NOT_INSTRUMENTED,
+ innodb_data_home_dir_var, MYF(MY_FAE));
if (innodb_log_group_home_dir_var && *innodb_log_group_home_dir_var)
- {
- srv_log_group_home_dir=
- my_strdup(innodb_log_group_home_dir_var, MYF(MY_FAE));
- }
+ srv_log_group_home_dir= my_strdup(PSI_NOT_INSTRUMENTED,
+ innodb_log_group_home_dir_var,
+ MYF(MY_FAE));
if (innodb_undo_directory_var && *innodb_undo_directory_var)
- {
- srv_undo_dir= my_strdup(innodb_undo_directory_var, MYF(MY_FAE));
- }
-
- if (innodb_log_files_in_group_var)
- {
- srv_n_log_files= strtol(innodb_log_files_in_group_var, &endptr, 10);
- ut_ad(*endptr == 0);
- }
+ srv_undo_dir= my_strdup(PSI_NOT_INSTRUMENTED, innodb_undo_directory_var,
+ MYF(MY_FAE));
if (innodb_log_file_size_var)
{
@@ -540,7 +529,8 @@ bool get_mysql_vars(MYSQL *connection)
if (page_zip_level_var != NULL)
{
- page_zip_level= strtoul(page_zip_level_var, &endptr, 10);
+ page_zip_level= static_cast<uint>(strtoul(page_zip_level_var, &endptr,
+ 10));
ut_ad(*endptr == 0);
}
@@ -883,7 +873,7 @@ start_query_killer()
kill_query_thread_started = os_event_create(0);
kill_query_thread_stopped = os_event_create(0);
- os_thread_create(kill_query_thread, NULL, &kill_query_thread_id);
+ os_thread_create(kill_query_thread);
os_event_wait(kill_query_thread_started);
}
@@ -1851,12 +1841,11 @@ static std::string make_local_paths(const char *data_file_path)
bool write_backup_config_file()
{
int rc= backup_file_printf("backup-my.cnf",
- "# This MySQL options file was generated by innobackupex.\n\n"
- "# The MySQL server\n"
+ "# This options file was generated by innobackupex.\n\n"
+ "# The server\n"
"[mysqld]\n"
"innodb_checksum_algorithm=%s\n"
"innodb_data_file_path=%s\n"
- "innodb_log_files_in_group=%lu\n"
"innodb_log_file_size=%llu\n"
"innodb_page_size=%lu\n"
"innodb_undo_directory=%s\n"
@@ -1866,7 +1855,6 @@ bool write_backup_config_file()
"%s\n",
innodb_checksum_algorithm_names[srv_checksum_algorithm],
make_local_paths(innobase_data_file_path).c_str(),
- srv_n_log_files,
srv_log_file_size,
srv_page_size,
srv_undo_dir,
@@ -1939,7 +1927,7 @@ flush_changed_page_bitmaps()
/*********************************************************************//**
-Deallocate memory, disconnect from MySQL server, etc.
+Deallocate memory, disconnect from server, etc.
@return true on success. */
void
backup_cleanup()
diff --git a/extra/mariabackup/crc/CMakeLists.txt b/extra/mariabackup/crc/CMakeLists.txt
deleted file mode 100644
index c057e59a7b9..00000000000
--- a/extra/mariabackup/crc/CMakeLists.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright (c) 2017 Percona LLC and/or its affiliates.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; version 2 of the License.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
-
-PROJECT(crc C)
-
-IF(NOT CMAKE_CROSSCOMPILING AND NOT MSVC)
- STRING(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} processor)
- IF(processor MATCHES "86" OR processor MATCHES "amd64" OR processor MATCHES "x64")
- # Check for PCLMUL instruction
- CHECK_C_SOURCE_RUNS("
- int main()
- {
- asm volatile (\"pclmulqdq \\$0x00, %%xmm1, %%xmm0\":::\"cc\");
- return 0;
- }" HAVE_CLMUL_INSTRUCTION)
- ENDIF()
-ENDIF()
-IF(HAVE_CLMUL_INSTRUCTION)
- ADD_DEFINITIONS(-DHAVE_CLMUL_INSTRUCTION)
-ENDIF()
-ADD_LIBRARY(crc STATIC crc_glue.c crc-intel-pclmul.c)
diff --git a/extra/mariabackup/crc/config.h.cmake b/extra/mariabackup/crc/config.h.cmake
deleted file mode 100644
index beca62d1efb..00000000000
--- a/extra/mariabackup/crc/config.h.cmake
+++ /dev/null
@@ -1,21 +0,0 @@
-/******************************************************
-Copyright (c) 2017 Percona LLC and/or its affiliates.
-
-Zlib compatible CRC-32 implementation.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; version 2 of the License.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
-
-*******************************************************/
-
-#cmakedefine HAVE_CLMUL_INSTRUCTION 1
diff --git a/extra/mariabackup/crc/crc-intel-pclmul.c b/extra/mariabackup/crc/crc-intel-pclmul.c
deleted file mode 100644
index cf4f3ef4380..00000000000
--- a/extra/mariabackup/crc/crc-intel-pclmul.c
+++ /dev/null
@@ -1,511 +0,0 @@
-/******************************************************
-Copyright (c) 2017 Percona LLC and/or its affiliates.
-
-CRC32 using Intel's PCLMUL instruction.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; version 2 of the License.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
-
-*******************************************************/
-
-/* crc-intel-pclmul.c - Intel PCLMUL accelerated CRC implementation
- * Copyright (C) 2016 Jussi Kivilinna <jussi.kivilinna@iki.fi>
- *
- * This file is part of Libgcrypt.
- *
- * Libgcrypt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Libgcrypt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdint.h>
-
-# define U64_C(c) (c ## UL)
-
-typedef uint32_t u32;
-typedef uint16_t u16;
-typedef uint64_t u64;
-#ifndef byte
-typedef uint8_t byte;
-#endif
-
-# define _gcry_bswap32 __builtin_bswap32
-
-#if __GNUC__ >= 4 && defined(__x86_64__) && defined(HAVE_CLMUL_INSTRUCTION)
-
-#if defined(_GCRY_GCC_VERSION) && _GCRY_GCC_VERSION >= 40400 /* 4.4 */
-/* Prevent compiler from issuing SSE instructions between asm blocks. */
-# pragma GCC target("no-sse")
-#endif
-
-
-#define ALIGNED_16 __attribute__ ((aligned (16)))
-
-
-struct u16_unaligned_s
-{
- u16 a;
-} __attribute__((packed, aligned (1), may_alias));
-
-
-/* Constants structure for generic reflected/non-reflected CRC32 CLMUL
- * functions. */
-struct crc32_consts_s
-{
- /* k: { x^(32*17), x^(32*15), x^(32*5), x^(32*3), x^(32*2), 0 } mod P(x) */
- u64 k[6];
- /* my_p: { floor(x^64 / P(x)), P(x) } */
- u64 my_p[2];
-};
-
-
-/* CLMUL constants for CRC32 and CRC32RFC1510. */
-static const struct crc32_consts_s crc32_consts ALIGNED_16 =
-{
- { /* k[6] = reverse_33bits( x^(32*y) mod P(x) ) */
- U64_C(0x154442bd4), U64_C(0x1c6e41596), /* y = { 17, 15 } */
- U64_C(0x1751997d0), U64_C(0x0ccaa009e), /* y = { 5, 3 } */
- U64_C(0x163cd6124), 0 /* y = 2 */
- },
- { /* my_p[2] = reverse_33bits ( { floor(x^64 / P(x)), P(x) } ) */
- U64_C(0x1f7011641), U64_C(0x1db710641)
- }
-};
-
-/* Common constants for CRC32 algorithms. */
-static const byte crc32_refl_shuf_shift[3 * 16] ALIGNED_16 =
- {
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- };
-static const byte crc32_partial_fold_input_mask[16 + 16] ALIGNED_16 =
- {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- };
-static const u64 crc32_merge9to15_shuf[15 - 9 + 1][2] ALIGNED_16 =
- {
- { U64_C(0x0706050403020100), U64_C(0xffffffffffffff0f) }, /* 9 */
- { U64_C(0x0706050403020100), U64_C(0xffffffffffff0f0e) },
- { U64_C(0x0706050403020100), U64_C(0xffffffffff0f0e0d) },
- { U64_C(0x0706050403020100), U64_C(0xffffffff0f0e0d0c) },
- { U64_C(0x0706050403020100), U64_C(0xffffff0f0e0d0c0b) },
- { U64_C(0x0706050403020100), U64_C(0xffff0f0e0d0c0b0a) },
- { U64_C(0x0706050403020100), U64_C(0xff0f0e0d0c0b0a09) }, /* 15 */
- };
-static const u64 crc32_merge5to7_shuf[7 - 5 + 1][2] ALIGNED_16 =
- {
- { U64_C(0xffffff0703020100), U64_C(0xffffffffffffffff) }, /* 5 */
- { U64_C(0xffff070603020100), U64_C(0xffffffffffffffff) },
- { U64_C(0xff07060503020100), U64_C(0xffffffffffffffff) }, /* 7 */
- };
-
-/* PCLMUL functions for reflected CRC32. */
-static inline void
-crc32_reflected_bulk (u32 *pcrc, const byte *inbuf, size_t inlen,
- const struct crc32_consts_s *consts)
-{
- if (inlen >= 8 * 16)
- {
- asm volatile ("movd %[crc], %%xmm4\n\t"
- "movdqu %[inbuf_0], %%xmm0\n\t"
- "movdqu %[inbuf_1], %%xmm1\n\t"
- "movdqu %[inbuf_2], %%xmm2\n\t"
- "movdqu %[inbuf_3], %%xmm3\n\t"
- "pxor %%xmm4, %%xmm0\n\t"
- :
- : [inbuf_0] "m" (inbuf[0 * 16]),
- [inbuf_1] "m" (inbuf[1 * 16]),
- [inbuf_2] "m" (inbuf[2 * 16]),
- [inbuf_3] "m" (inbuf[3 * 16]),
- [crc] "m" (*pcrc)
- );
-
- inbuf += 4 * 16;
- inlen -= 4 * 16;
-
- asm volatile ("movdqa %[k1k2], %%xmm4\n\t"
- :
- : [k1k2] "m" (consts->k[1 - 1])
- );
-
- /* Fold by 4. */
- while (inlen >= 4 * 16)
- {
- asm volatile ("movdqu %[inbuf_0], %%xmm5\n\t"
- "movdqa %%xmm0, %%xmm6\n\t"
- "pclmulqdq $0x00, %%xmm4, %%xmm0\n\t"
- "pclmulqdq $0x11, %%xmm4, %%xmm6\n\t"
- "pxor %%xmm5, %%xmm0\n\t"
- "pxor %%xmm6, %%xmm0\n\t"
-
- "movdqu %[inbuf_1], %%xmm5\n\t"
- "movdqa %%xmm1, %%xmm6\n\t"
- "pclmulqdq $0x00, %%xmm4, %%xmm1\n\t"
- "pclmulqdq $0x11, %%xmm4, %%xmm6\n\t"
- "pxor %%xmm5, %%xmm1\n\t"
- "pxor %%xmm6, %%xmm1\n\t"
-
- "movdqu %[inbuf_2], %%xmm5\n\t"
- "movdqa %%xmm2, %%xmm6\n\t"
- "pclmulqdq $0x00, %%xmm4, %%xmm2\n\t"
- "pclmulqdq $0x11, %%xmm4, %%xmm6\n\t"
- "pxor %%xmm5, %%xmm2\n\t"
- "pxor %%xmm6, %%xmm2\n\t"
-
- "movdqu %[inbuf_3], %%xmm5\n\t"
- "movdqa %%xmm3, %%xmm6\n\t"
- "pclmulqdq $0x00, %%xmm4, %%xmm3\n\t"
- "pclmulqdq $0x11, %%xmm4, %%xmm6\n\t"
- "pxor %%xmm5, %%xmm3\n\t"
- "pxor %%xmm6, %%xmm3\n\t"
- :
- : [inbuf_0] "m" (inbuf[0 * 16]),
- [inbuf_1] "m" (inbuf[1 * 16]),
- [inbuf_2] "m" (inbuf[2 * 16]),
- [inbuf_3] "m" (inbuf[3 * 16])
- );
-
- inbuf += 4 * 16;
- inlen -= 4 * 16;
- }
-
- asm volatile ("movdqa %[k3k4], %%xmm6\n\t"
- "movdqa %[my_p], %%xmm5\n\t"
- :
- : [k3k4] "m" (consts->k[3 - 1]),
- [my_p] "m" (consts->my_p[0])
- );
-
- /* Fold 4 to 1. */
-
- asm volatile ("movdqa %%xmm0, %%xmm4\n\t"
- "pclmulqdq $0x00, %%xmm6, %%xmm0\n\t"
- "pclmulqdq $0x11, %%xmm6, %%xmm4\n\t"
- "pxor %%xmm1, %%xmm0\n\t"
- "pxor %%xmm4, %%xmm0\n\t"
-
- "movdqa %%xmm0, %%xmm4\n\t"
- "pclmulqdq $0x00, %%xmm6, %%xmm0\n\t"
- "pclmulqdq $0x11, %%xmm6, %%xmm4\n\t"
- "pxor %%xmm2, %%xmm0\n\t"
- "pxor %%xmm4, %%xmm0\n\t"
-
- "movdqa %%xmm0, %%xmm4\n\t"
- "pclmulqdq $0x00, %%xmm6, %%xmm0\n\t"
- "pclmulqdq $0x11, %%xmm6, %%xmm4\n\t"
- "pxor %%xmm3, %%xmm0\n\t"
- "pxor %%xmm4, %%xmm0\n\t"
- :
- :
- );
- }
- else
- {
- asm volatile ("movd %[crc], %%xmm1\n\t"
- "movdqu %[inbuf], %%xmm0\n\t"
- "movdqa %[k3k4], %%xmm6\n\t"
- "pxor %%xmm1, %%xmm0\n\t"
- "movdqa %[my_p], %%xmm5\n\t"
- :
- : [inbuf] "m" (*inbuf),
- [crc] "m" (*pcrc),
- [k3k4] "m" (consts->k[3 - 1]),
- [my_p] "m" (consts->my_p[0])
- );
-
- inbuf += 16;
- inlen -= 16;
- }
-
- /* Fold by 1. */
- if (inlen >= 16)
- {
- while (inlen >= 16)
- {
- /* Load next block to XMM2. Fold XMM0 to XMM0:XMM1. */
- asm volatile ("movdqu %[inbuf], %%xmm2\n\t"
- "movdqa %%xmm0, %%xmm1\n\t"
- "pclmulqdq $0x00, %%xmm6, %%xmm0\n\t"
- "pclmulqdq $0x11, %%xmm6, %%xmm1\n\t"
- "pxor %%xmm2, %%xmm0\n\t"
- "pxor %%xmm1, %%xmm0\n\t"
- :
- : [inbuf] "m" (*inbuf)
- );
-
- inbuf += 16;
- inlen -= 16;
- }
- }
-
- /* Partial fold. */
- if (inlen)
- {
- /* Load last input and add padding zeros. */
- asm volatile ("movdqu %[shr_shuf], %%xmm3\n\t"
- "movdqu %[shl_shuf], %%xmm4\n\t"
- "movdqu %[mask], %%xmm2\n\t"
-
- "movdqa %%xmm0, %%xmm1\n\t"
- "pshufb %%xmm4, %%xmm0\n\t"
- "movdqu %[inbuf], %%xmm4\n\t"
- "pshufb %%xmm3, %%xmm1\n\t"
- "pand %%xmm4, %%xmm2\n\t"
- "por %%xmm1, %%xmm2\n\t"
-
- "movdqa %%xmm0, %%xmm1\n\t"
- "pclmulqdq $0x00, %%xmm6, %%xmm0\n\t"
- "pclmulqdq $0x11, %%xmm6, %%xmm1\n\t"
- "pxor %%xmm2, %%xmm0\n\t"
- "pxor %%xmm1, %%xmm0\n\t"
- :
- : [inbuf] "m" (*(inbuf - 16 + inlen)),
- [mask] "m" (crc32_partial_fold_input_mask[inlen]),
- [shl_shuf] "m" (crc32_refl_shuf_shift[inlen]),
- [shr_shuf] "m" (crc32_refl_shuf_shift[inlen + 16])
- );
-
- inbuf += inlen;
- inlen -= inlen;
- }
-
- /* Final fold. */
- asm volatile (/* reduce 128-bits to 96-bits */
- "movdqa %%xmm0, %%xmm1\n\t"
- "pclmulqdq $0x10, %%xmm6, %%xmm0\n\t"
- "psrldq $8, %%xmm1\n\t"
- "pxor %%xmm1, %%xmm0\n\t"
-
- /* reduce 96-bits to 64-bits */
- "pshufd $0xfc, %%xmm0, %%xmm1\n\t" /* [00][00][00][x] */
- "pshufd $0xf9, %%xmm0, %%xmm0\n\t" /* [00][00][x>>64][x>>32] */
- "pclmulqdq $0x00, %[k5], %%xmm1\n\t" /* [00][00][xx][xx] */
- "pxor %%xmm1, %%xmm0\n\t" /* top 64-bit are zero */
-
- /* barrett reduction */
- "pshufd $0xf3, %%xmm0, %%xmm1\n\t" /* [00][00][x>>32][00] */
- "pslldq $4, %%xmm0\n\t" /* [??][x>>32][??][??] */
- "pclmulqdq $0x00, %%xmm5, %%xmm1\n\t" /* [00][xx][xx][00] */
- "pclmulqdq $0x10, %%xmm5, %%xmm1\n\t" /* [00][xx][xx][00] */
- "pxor %%xmm1, %%xmm0\n\t"
-
- /* store CRC */
- "pextrd $2, %%xmm0, %[out]\n\t"
- : [out] "=m" (*pcrc)
- : [k5] "m" (consts->k[5 - 1])
- );
-}
-
-static inline void
-crc32_reflected_less_than_16 (u32 *pcrc, const byte *inbuf, size_t inlen,
- const struct crc32_consts_s *consts)
-{
- if (inlen < 4)
- {
- u32 crc = *pcrc;
- u32 data;
-
- asm volatile ("movdqa %[my_p], %%xmm5\n\t"
- :
- : [my_p] "m" (consts->my_p[0])
- );
-
- if (inlen == 1)
- {
- data = inbuf[0];
- data ^= crc;
- data <<= 24;
- crc >>= 8;
- }
- else if (inlen == 2)
- {
- data = ((const struct u16_unaligned_s *)inbuf)->a;
- data ^= crc;
- data <<= 16;
- crc >>= 16;
- }
- else
- {
- data = ((const struct u16_unaligned_s *)inbuf)->a;
- data |= inbuf[2] << 16;
- data ^= crc;
- data <<= 8;
- crc >>= 24;
- }
-
- /* Barrett reduction */
- asm volatile ("movd %[in], %%xmm0\n\t"
- "movd %[crc], %%xmm1\n\t"
-
- "pclmulqdq $0x00, %%xmm5, %%xmm0\n\t" /* [00][00][xx][xx] */
- "psllq $32, %%xmm1\n\t"
- "pshufd $0xfc, %%xmm0, %%xmm0\n\t" /* [00][00][00][x] */
- "pclmulqdq $0x10, %%xmm5, %%xmm0\n\t" /* [00][00][xx][xx] */
- "pxor %%xmm1, %%xmm0\n\t"
-
- "pextrd $1, %%xmm0, %[out]\n\t"
- : [out] "=m" (*pcrc)
- : [in] "rm" (data),
- [crc] "rm" (crc)
- );
- }
- else if (inlen == 4)
- {
- /* Barrett reduction */
- asm volatile ("movd %[crc], %%xmm1\n\t"
- "movd %[in], %%xmm0\n\t"
- "movdqa %[my_p], %%xmm5\n\t"
- "pxor %%xmm1, %%xmm0\n\t"
-
- "pclmulqdq $0x00, %%xmm5, %%xmm0\n\t" /* [00][00][xx][xx] */
- "pshufd $0xfc, %%xmm0, %%xmm0\n\t" /* [00][00][00][x] */
- "pclmulqdq $0x10, %%xmm5, %%xmm0\n\t" /* [00][00][xx][xx] */
-
- "pextrd $1, %%xmm0, %[out]\n\t"
- : [out] "=m" (*pcrc)
- : [in] "m" (*inbuf),
- [crc] "m" (*pcrc),
- [my_p] "m" (consts->my_p[0])
- );
- }
- else
- {
- asm volatile ("movdqu %[shuf], %%xmm4\n\t"
- "movd %[crc], %%xmm1\n\t"
- "movdqa %[my_p], %%xmm5\n\t"
- "movdqa %[k3k4], %%xmm6\n\t"
- :
- : [shuf] "m" (crc32_refl_shuf_shift[inlen]),
- [crc] "m" (*pcrc),
- [my_p] "m" (consts->my_p[0]),
- [k3k4] "m" (consts->k[3 - 1])
- );
-
- if (inlen >= 8)
- {
- asm volatile ("movq %[inbuf], %%xmm0\n\t"
- :
- : [inbuf] "m" (*inbuf)
- );
- if (inlen > 8)
- {
- asm volatile (/*"pinsrq $1, %[inbuf_tail], %%xmm0\n\t"*/
- "movq %[inbuf_tail], %%xmm2\n\t"
- "punpcklqdq %%xmm2, %%xmm0\n\t"
- "pshufb %[merge_shuf], %%xmm0\n\t"
- :
- : [inbuf_tail] "m" (inbuf[inlen - 8]),
- [merge_shuf] "m"
- (*crc32_merge9to15_shuf[inlen - 9])
- );
- }
- }
- else
- {
- asm volatile ("movd %[inbuf], %%xmm0\n\t"
- "pinsrd $1, %[inbuf_tail], %%xmm0\n\t"
- "pshufb %[merge_shuf], %%xmm0\n\t"
- :
- : [inbuf] "m" (*inbuf),
- [inbuf_tail] "m" (inbuf[inlen - 4]),
- [merge_shuf] "m"
- (*crc32_merge5to7_shuf[inlen - 5])
- );
- }
-
- /* Final fold. */
- asm volatile ("pxor %%xmm1, %%xmm0\n\t"
- "pshufb %%xmm4, %%xmm0\n\t"
-
- /* reduce 128-bits to 96-bits */
- "movdqa %%xmm0, %%xmm1\n\t"
- "pclmulqdq $0x10, %%xmm6, %%xmm0\n\t"
- "psrldq $8, %%xmm1\n\t"
- "pxor %%xmm1, %%xmm0\n\t" /* top 32-bit are zero */
-
- /* reduce 96-bits to 64-bits */
- "pshufd $0xfc, %%xmm0, %%xmm1\n\t" /* [00][00][00][x] */
- "pshufd $0xf9, %%xmm0, %%xmm0\n\t" /* [00][00][x>>64][x>>32] */
- "pclmulqdq $0x00, %[k5], %%xmm1\n\t" /* [00][00][xx][xx] */
- "pxor %%xmm1, %%xmm0\n\t" /* top 64-bit are zero */
-
- /* barrett reduction */
- "pshufd $0xf3, %%xmm0, %%xmm1\n\t" /* [00][00][x>>32][00] */
- "pslldq $4, %%xmm0\n\t" /* [??][x>>32][??][??] */
- "pclmulqdq $0x00, %%xmm5, %%xmm1\n\t" /* [00][xx][xx][00] */
- "pclmulqdq $0x10, %%xmm5, %%xmm1\n\t" /* [00][xx][xx][00] */
- "pxor %%xmm1, %%xmm0\n\t"
-
- /* store CRC */
- "pextrd $2, %%xmm0, %[out]\n\t"
- : [out] "=m" (*pcrc)
- : [k5] "m" (consts->k[5 - 1])
- );
- }
-}
-
-void
-crc32_intel_pclmul (u32 *pcrc, const byte *inbuf, size_t inlen)
-{
- const struct crc32_consts_s *consts = &crc32_consts;
-#if defined(__x86_64__) && defined(__WIN64__)
- char win64tmp[2 * 16];
-
- /* XMM6-XMM7 need to be restored after use. */
- asm volatile ("movdqu %%xmm6, 0*16(%0)\n\t"
- "movdqu %%xmm7, 1*16(%0)\n\t"
- :
- : "r" (win64tmp)
- : "memory");
-#endif
-
- if (!inlen)
- return;
-
- if (inlen >= 16)
- crc32_reflected_bulk(pcrc, inbuf, inlen, consts);
- else
- crc32_reflected_less_than_16(pcrc, inbuf, inlen, consts);
-
-#if defined(__x86_64__) && defined(__WIN64__)
- /* Restore used registers. */
- asm volatile("movdqu 0*16(%0), %%xmm6\n\t"
- "movdqu 1*16(%0), %%xmm7\n\t"
- :
- : "r" (win64tmp)
- : "memory");
-#endif
-}
-
-#endif
diff --git a/extra/mariabackup/crc/crc-intel-pclmul.h b/extra/mariabackup/crc/crc-intel-pclmul.h
deleted file mode 100644
index c95c59601ae..00000000000
--- a/extra/mariabackup/crc/crc-intel-pclmul.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/******************************************************
-Copyright (c) 2017 Percona LLC and/or its affiliates.
-
-CRC32 using Intel's PCLMUL instruction.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; version 2 of the License.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
-
-*******************************************************/
-
-#include <stdint.h>
-#include <stddef.h>
-
-void
-crc32_intel_pclmul(uint32_t *pcrc, const uint8_t *inbuf, size_t inlen);
diff --git a/extra/mariabackup/crc/crc_glue.c b/extra/mariabackup/crc/crc_glue.c
deleted file mode 100644
index a9709c8378e..00000000000
--- a/extra/mariabackup/crc/crc_glue.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/******************************************************
-Copyright (c) 2017 Percona LLC and/or its affiliates.
-
-Zlib compatible CRC-32 implementation.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; version 2 of the License.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
-
-*******************************************************/
-#include "my_config.h"
-#include "crc_glue.h"
-#include "crc-intel-pclmul.h"
-#include <stdint.h>
-#include <string.h>
-#include <zlib.h>
-
-#if defined(__GNUC__) && defined(__x86_64__)
-static int pclmul_enabled = 0;
-#endif
-
-#if defined(__GNUC__) && defined(__x86_64__)
-static
-uint32_t
-cpuid(uint32_t* ecx, uint32_t* edx)
-{
- uint32_t level;
-
- asm("cpuid" : "=a" (level) : "a" (0) : "ebx", "ecx", "edx");
-
- if (level < 1) {
- return level;
- }
-
- asm("cpuid" : "=c" (*ecx), "=d" (*edx)
- : "a" (1)
- : "ebx");
-
- return level;
-}
-#endif
-
-void crc_init() {
-#if defined(__GNUC__) && defined(__x86_64__)
- uint32_t ecx, edx;
-
- if (cpuid(&ecx, &edx) > 0) {
- pclmul_enabled = ((ecx >> 19) & 1) && ((ecx >> 1) & 1);
- }
-#endif
-}
-
-unsigned long crc32_iso3309(unsigned long crc, const unsigned char *buf, unsigned int len)
-{
-#if __GNUC__ >= 4 && defined(__x86_64__) && defined(HAVE_CLMUL_INSTRUCTION)
- if (pclmul_enabled) {
- uint32_t crc_accum = crc ^ 0xffffffffL;
- crc32_intel_pclmul(&crc_accum, buf, len);
- return crc_accum ^ 0xffffffffL;
- }
-#endif
- return crc32(crc, buf, len);
-}
diff --git a/extra/mariabackup/crc/crc_glue.h b/extra/mariabackup/crc/crc_glue.h
deleted file mode 100644
index 598330263b3..00000000000
--- a/extra/mariabackup/crc/crc_glue.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/******************************************************
-Copyright (c) 2017 Percona LLC and/or its affiliates.
-
-Zlib compatible CRC-32 implementation.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; version 2 of the License.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
-
-*******************************************************/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void crc_init();
-unsigned long crc32_iso3309(unsigned long crc, const unsigned char *buf, unsigned int len);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/extra/mariabackup/ds_buffer.cc b/extra/mariabackup/ds_buffer.cc
index 6e6ec6fcfbc..d6a420951cb 100644
--- a/extra/mariabackup/ds_buffer.cc
+++ b/extra/mariabackup/ds_buffer.cc
@@ -72,13 +72,13 @@ buffer_init(const char *root)
ds_ctxt_t *ctxt;
ds_buffer_ctxt_t *buffer_ctxt;
- ctxt = (ds_ctxt_t *)my_malloc(sizeof(ds_ctxt_t) + sizeof(ds_buffer_ctxt_t),
- MYF(MY_FAE));
+ ctxt = (ds_ctxt_t *)my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(ds_ctxt_t) + sizeof(ds_buffer_ctxt_t), MYF(MY_FAE));
buffer_ctxt = (ds_buffer_ctxt_t *) (ctxt + 1);
buffer_ctxt->buffer_size = DS_DEFAULT_BUFFER_SIZE;
ctxt->ptr = buffer_ctxt;
- ctxt->root = my_strdup(root, MYF(MY_FAE));
+ ctxt->root = my_strdup(PSI_NOT_INSTRUMENTED, root, MYF(MY_FAE));
return ctxt;
}
@@ -102,9 +102,8 @@ buffer_open(ds_ctxt_t *ctxt, const char *path, MY_STAT *mystat)
buffer_ctxt = (ds_buffer_ctxt_t *) ctxt->ptr;
- file = (ds_file_t *) my_malloc(sizeof(ds_file_t) +
- sizeof(ds_buffer_file_t) +
- buffer_ctxt->buffer_size,
+ file = (ds_file_t *) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(ds_file_t) +
+ sizeof(ds_buffer_file_t) + buffer_ctxt->buffer_size,
MYF(MY_FAE));
buffer_file = (ds_buffer_file_t *) (file + 1);
diff --git a/extra/mariabackup/ds_compress.cc b/extra/mariabackup/ds_compress.cc
index a89e676190d..f7a9b7a1fbd 100644
--- a/extra/mariabackup/ds_compress.cc
+++ b/extra/mariabackup/ds_compress.cc
@@ -101,16 +101,15 @@ compress_init(const char *root)
return NULL;
}
- ctxt = (ds_ctxt_t *) my_malloc(sizeof(ds_ctxt_t) +
- sizeof(ds_compress_ctxt_t),
- MYF(MY_FAE));
+ ctxt = (ds_ctxt_t *) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(ds_ctxt_t) + sizeof(ds_compress_ctxt_t), MYF(MY_FAE));
compress_ctxt = (ds_compress_ctxt_t *) (ctxt + 1);
compress_ctxt->threads = threads;
compress_ctxt->nthreads = xtrabackup_compress_threads;
ctxt->ptr = compress_ctxt;
- ctxt->root = my_strdup(root, MYF(MY_FAE));
+ ctxt->root = my_strdup(PSI_NOT_INSTRUMENTED, root, MYF(MY_FAE));
return ctxt;
}
@@ -160,9 +159,8 @@ compress_open(ds_ctxt_t *ctxt, const char *path, MY_STAT *mystat)
goto err;
}
- file = (ds_file_t *) my_malloc(sizeof(ds_file_t) +
- sizeof(ds_compress_file_t),
- MYF(MY_FAE));
+ file = (ds_file_t *) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(ds_file_t) + sizeof(ds_compress_file_t), MYF(MY_FAE));
comp_file = (ds_compress_file_t *) (file + 1);
comp_file->dest_file = dest_file;
comp_file->comp_ctxt = comp_ctxt;
@@ -382,16 +380,19 @@ create_worker_threads(uint n)
comp_thread_ctxt_t *threads;
uint i;
- threads = (comp_thread_ctxt_t *)
- my_malloc(n * sizeof *threads, MYF(MY_ZEROFILL|MY_FAE));
+ threads = static_cast<comp_thread_ctxt_t*>
+ (my_malloc(PSI_NOT_INSTRUMENTED, n * sizeof *threads,
+ MYF(MY_ZEROFILL|MY_FAE)));
for (i = 0; i < n; i++) {
comp_thread_ctxt_t *thd = threads + i;
thd->num = i + 1;
- thd->to = (char *) my_malloc(COMPRESS_CHUNK_SIZE +
- MY_QLZ_COMPRESS_OVERHEAD,
- MYF(MY_FAE));
+ thd->to = static_cast<char*>
+ (my_malloc(PSI_NOT_INSTRUMENTED,
+ COMPRESS_CHUNK_SIZE +
+ MY_QLZ_COMPRESS_OVERHEAD,
+ MYF(MY_FAE)));
/* Initialize and data mutex and condition var */
if (pthread_mutex_init(&thd->data_mutex, NULL) ||
diff --git a/extra/mariabackup/ds_local.cc b/extra/mariabackup/ds_local.cc
index 41a00dd9c39..ddaa213491d 100644
--- a/extra/mariabackup/ds_local.cc
+++ b/extra/mariabackup/ds_local.cc
@@ -75,9 +75,9 @@ local_init(const char *root)
return NULL;
}
- ctxt = (ds_ctxt_t *)my_malloc(sizeof(ds_ctxt_t), MYF(MY_FAE));
+ ctxt = (ds_ctxt_t *)my_malloc(PSI_NOT_INSTRUMENTED, sizeof(ds_ctxt_t), MYF(MY_FAE));
- ctxt->root = my_strdup(root, MYF(MY_FAE));
+ ctxt->root = my_strdup(PSI_NOT_INSTRUMENTED, root, MYF(MY_FAE));
return ctxt;
}
@@ -115,7 +115,7 @@ local_open(ds_ctxt_t *ctxt, const char *path,
path_len = strlen(fullpath) + 1; /* terminating '\0' */
- file = (ds_file_t *) my_malloc(sizeof(ds_file_t) +
+ file = (ds_file_t *) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(ds_file_t) +
sizeof(ds_local_file_t) +
path_len,
MYF(MY_FAE));
diff --git a/extra/mariabackup/ds_stdout.cc b/extra/mariabackup/ds_stdout.cc
index 3b3091bd426..08776e99329 100644
--- a/extra/mariabackup/ds_stdout.cc
+++ b/extra/mariabackup/ds_stdout.cc
@@ -50,9 +50,9 @@ stdout_init(const char *root)
{
ds_ctxt_t *ctxt;
- ctxt = (ds_ctxt_t *)my_malloc(sizeof(ds_ctxt_t), MYF(MY_FAE));
+ ctxt = (ds_ctxt_t *)my_malloc(PSI_NOT_INSTRUMENTED, sizeof(ds_ctxt_t), MYF(MY_FAE));
- ctxt->root = my_strdup(root, MYF(MY_FAE));
+ ctxt->root = my_strdup(PSI_NOT_INSTRUMENTED, root, MYF(MY_FAE));
return ctxt;
}
@@ -70,10 +70,8 @@ stdout_open(ds_ctxt_t *ctxt __attribute__((unused)),
pathlen = strlen(fullpath) + 1;
- file = (ds_file_t *) my_malloc(sizeof(ds_file_t) +
- sizeof(ds_stdout_file_t) +
- pathlen,
- MYF(MY_FAE));
+ file = (ds_file_t *) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(ds_file_t) +
+ sizeof(ds_stdout_file_t) + pathlen, MYF(MY_FAE));
stdout_file = (ds_stdout_file_t *) (file + 1);
diff --git a/extra/mariabackup/ds_tmpfile.cc b/extra/mariabackup/ds_tmpfile.cc
index d5316803926..80b9d3bb4d0 100644
--- a/extra/mariabackup/ds_tmpfile.cc
+++ b/extra/mariabackup/ds_tmpfile.cc
@@ -62,8 +62,8 @@ tmpfile_init(const char *root)
ds_ctxt_t *ctxt;
ds_tmpfile_ctxt_t *tmpfile_ctxt;
- ctxt = (ds_ctxt_t *)my_malloc(sizeof(ds_ctxt_t) + sizeof(ds_tmpfile_ctxt_t),
- MYF(MY_FAE));
+ ctxt = (ds_ctxt_t *)my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(ds_ctxt_t) + sizeof(ds_tmpfile_ctxt_t), MYF(MY_FAE));
tmpfile_ctxt = (ds_tmpfile_ctxt_t *) (ctxt + 1);
tmpfile_ctxt->file_list = NULL;
if (pthread_mutex_init(&tmpfile_ctxt->mutex, NULL)) {
@@ -73,7 +73,7 @@ tmpfile_init(const char *root)
}
ctxt->ptr = tmpfile_ctxt;
- ctxt->root = my_strdup(root, MYF(MY_FAE));
+ ctxt->root = my_strdup(PSI_NOT_INSTRUMENTED, root, MYF(MY_FAE));
return ctxt;
}
@@ -101,9 +101,8 @@ tmpfile_open(ds_ctxt_t *ctxt, const char *path,
path_len = strlen(path) + 1; /* terminating '\0' */
- file = (ds_file_t *) my_malloc(sizeof(ds_file_t) +
- sizeof(ds_tmp_file_t) + path_len,
- MYF(MY_FAE));
+ file = (ds_file_t *) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(ds_file_t) + sizeof(ds_tmp_file_t) + path_len, MYF(MY_FAE));
tmp_file = (ds_tmp_file_t *) (file + 1);
tmp_file->file = file;
@@ -115,7 +114,7 @@ tmpfile_open(ds_ctxt_t *ctxt, const char *path,
memcpy(tmp_file->orig_path, path, path_len);
/* Store the real temporary file name in file->path */
- file->path = my_strdup(tmp_path, MYF(MY_FAE));
+ file->path = my_strdup(PSI_NOT_INSTRUMENTED, tmp_path, MYF(MY_FAE));
file->ptr = tmp_file;
/* Store the file object in the list to be piped later */
@@ -171,7 +170,7 @@ tmpfile_deinit(ds_ctxt_t *ctxt)
pipe_ctxt = ctxt->pipe_ctxt;
xb_a(pipe_ctxt != NULL);
- buf = my_malloc(buf_size, MYF(MY_FAE));
+ buf = my_malloc(PSI_NOT_INSTRUMENTED, buf_size, MYF(MY_FAE));
tmpfile_ctxt = (ds_tmpfile_ctxt_t *) ctxt->ptr;
list = tmpfile_ctxt->file_list;
diff --git a/extra/mariabackup/ds_xbstream.cc b/extra/mariabackup/ds_xbstream.cc
index d527b6751ba..3bf8bd086c2 100644
--- a/extra/mariabackup/ds_xbstream.cc
+++ b/extra/mariabackup/ds_xbstream.cc
@@ -80,8 +80,8 @@ xbstream_init(const char *root __attribute__((unused)))
ds_stream_ctxt_t *stream_ctxt;
xb_wstream_t *xbstream;
- ctxt = (ds_ctxt_t *)my_malloc(sizeof(ds_ctxt_t) + sizeof(ds_stream_ctxt_t),
- MYF(MY_FAE));
+ ctxt = (ds_ctxt_t *)my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(ds_ctxt_t) + sizeof(ds_stream_ctxt_t), MYF(MY_FAE));
stream_ctxt = (ds_stream_ctxt_t *)(ctxt + 1);
if (pthread_mutex_init(&stream_ctxt->mutex, NULL)) {
@@ -132,7 +132,8 @@ xbstream_open(ds_ctxt_t *ctxt, const char *path, MY_STAT *mystat)
return NULL;
}
- file = (ds_file_t *) my_malloc(sizeof(ds_file_t) +
+ file = (ds_file_t *) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(ds_file_t) +
sizeof(ds_stream_file_t),
MYF(MY_FAE));
if (!file) {
diff --git a/extra/mariabackup/fil_cur.cc b/extra/mariabackup/fil_cur.cc
index 6a0720f8626..8d7fb3c7492 100644
--- a/extra/mariabackup/fil_cur.cc
+++ b/extra/mariabackup/fil_cur.cc
@@ -94,8 +94,6 @@ xb_fil_node_close_file(
mutex_enter(&fil_system.mutex);
ut_ad(node);
- ut_a(node->n_pending == 0);
- ut_a(node->n_pending_flushes == 0);
ut_a(!node->being_extended);
if (!node->is_open()) {
@@ -109,19 +107,6 @@ xb_fil_node_close_file(
ut_a(ret);
node->handle = OS_FILE_CLOSED;
-
- ut_a(fil_system.n_open > 0);
- fil_system.n_open--;
-
- if (node->space->purpose == FIL_TYPE_TABLESPACE &&
- fil_is_user_tablespace_id(node->space->id)) {
-
- ut_a(UT_LIST_GET_LEN(fil_system.LRU) > 0);
-
- /* The node is in the LRU list, remove it */
- UT_LIST_REMOVE(fil_system.LRU, node);
- }
-
mutex_exit(&fil_system.mutex);
}
@@ -143,8 +128,9 @@ xb_fil_cur_open(
int err;
/* Initialize these first so xb_fil_cur_close() handles them correctly
in case of error */
- cursor->orig_buf = NULL;
+ cursor->buf = NULL;
cursor->node = NULL;
+ cursor->n_process_batch = 0;
cursor->space_id = node->space->id;
@@ -181,18 +167,6 @@ xb_fil_cur_open(
return(XB_FIL_CUR_SKIP);
}
- mutex_enter(&fil_system.mutex);
-
- fil_system.n_open++;
-
- if (node->space->purpose == FIL_TYPE_TABLESPACE &&
- fil_is_user_tablespace_id(node->space->id)) {
-
- /* Put the node to the LRU list */
- UT_LIST_ADD_FIRST(fil_system.LRU, node);
- }
-
- mutex_exit(&fil_system.mutex);
}
ut_ad(node->is_open());
@@ -239,10 +213,8 @@ xb_fil_cur_open(
/* Allocate read buffer */
cursor->buf_size = XB_FIL_CUR_PAGES * cursor->page_size;
- cursor->orig_buf = static_cast<byte *>
- (malloc(cursor->buf_size + srv_page_size));
- cursor->buf = static_cast<byte *>
- (ut_align(cursor->orig_buf, srv_page_size));
+ cursor->buf = static_cast<byte*>(aligned_malloc(cursor->buf_size,
+ srv_page_size));
cursor->buf_read = 0;
cursor->buf_npages = 0;
@@ -279,7 +251,7 @@ static bool page_is_corrupted(const byte *page, ulint page_no,
byte tmp_frame[UNIV_PAGE_SIZE_MAX];
byte tmp_page[UNIV_PAGE_SIZE_MAX];
const ulint page_size = cursor->page_size;
- ulint page_type = mach_read_from_2(page + FIL_PAGE_TYPE);
+ uint16_t page_type = fil_page_get_type(page);
/* We ignore the doublewrite buffer pages.*/
if (cursor->space_id == TRX_SYS_SPACE
@@ -362,7 +334,7 @@ static bool page_is_corrupted(const byte *page, ulint page_no,
|| page_type == FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED) {
ulint decomp = fil_page_decompress(tmp_frame, tmp_page,
space->flags);
- page_type = mach_read_from_2(tmp_page + FIL_PAGE_TYPE);
+ page_type = fil_page_get_type(tmp_page);
return (!decomp
|| (decomp != srv_page_size
@@ -387,7 +359,7 @@ xb_fil_cur_result_t xb_fil_cur_read(xb_fil_cur_t* cursor,
CorruptedPages &corrupted_pages)
{
byte* page;
- ulint i;
+ unsigned i;
ulint npages;
ulint retry_count;
xb_fil_cur_result_t ret;
@@ -403,6 +375,8 @@ xb_fil_cur_result_t xb_fil_cur_read(xb_fil_cur_t* cursor,
return(XB_FIL_CUR_EOF);
}
+reinit_buf:
+ cursor->n_process_batch++;
if (to_read > (ib_int64_t) cursor->buf_size) {
to_read = (ib_int64_t) cursor->buf_size;
}
@@ -429,7 +403,7 @@ xb_fil_cur_result_t xb_fil_cur_read(xb_fil_cur_t* cursor,
retry_count = 10;
ret = XB_FIL_CUR_SUCCESS;
- fil_space_t *space = fil_space_acquire_for_io(cursor->space_id);
+ fil_space_t *space = fil_space_t::get(cursor->space_id);
if (!space) {
return XB_FIL_CUR_ERROR;
@@ -441,18 +415,36 @@ read_retry:
cursor->buf_read = 0;
cursor->buf_npages = 0;
cursor->buf_offset = offset;
- cursor->buf_page_no = (ulint)(offset / page_size);
+ cursor->buf_page_no = static_cast<unsigned>(offset / page_size);
if (os_file_read(IORequestRead, cursor->file, cursor->buf, offset,
- (ulint) to_read) != DB_SUCCESS) {
- ret = XB_FIL_CUR_ERROR;
- goto func_exit;
+ (ulint) to_read) != DB_SUCCESS) {
+ if (!srv_is_undo_tablespace(cursor->space_id)) {
+ ret = XB_FIL_CUR_ERROR;
+ goto func_exit;
+ }
+
+ if (cursor->buf_page_no
+ >= SRV_UNDO_TABLESPACE_SIZE_IN_PAGES) {
+ ret = XB_FIL_CUR_SKIP;
+ goto func_exit;
+ }
+
+ to_read = SRV_UNDO_TABLESPACE_SIZE_IN_PAGES * page_size;
+
+ if (cursor->n_process_batch > 1) {
+ ret = XB_FIL_CUR_ERROR;
+ goto func_exit;
+ }
+
+ space->release();
+ goto reinit_buf;
}
/* check pages for corruption and re-read if necessary. i.e. in case of
partially written pages */
for (page = cursor->buf, i = 0; i < npages;
page += page_size, i++) {
- ulint page_no = cursor->buf_page_no + i;
+ unsigned page_no = cursor->buf_page_no + i;
if (page_is_corrupted(page, page_no, cursor, space)){
retry_count--;
@@ -479,7 +471,7 @@ read_retry:
}
else {
msg(cursor->thread_n, "Database page corruption detected at page "
- ULINTPF ", retrying...",
+ UINT32PF ", retrying...",
page_no);
os_thread_sleep(100000);
goto read_retry;
@@ -487,7 +479,8 @@ read_retry:
}
DBUG_EXECUTE_FOR_KEY("add_corrupted_page_for", cursor->node->space->name,
{
- ulint corrupted_page_no = strtoul(dbug_val, NULL, 10);
+ unsigned corrupted_page_no =
+ static_cast<unsigned>(strtoul(dbug_val, NULL, 10));
if (page_no == corrupted_page_no)
corrupted_pages.add_page(cursor->node->name, cursor->node->space->id,
corrupted_page_no);
@@ -498,7 +491,7 @@ read_retry:
posix_fadvise(cursor->file, offset, to_read, POSIX_FADV_DONTNEED);
func_exit:
- space->release_for_io();
+ space->release();
return(ret);
}
@@ -514,7 +507,8 @@ xb_fil_cur_close(
cursor->read_filter->deinit(&cursor->read_filter_ctxt);
}
- free(cursor->orig_buf);
+ aligned_free(cursor->buf);
+ cursor->buf = NULL;
if (cursor->node != NULL) {
xb_fil_node_close_file(cursor->node);
diff --git a/extra/mariabackup/fil_cur.h b/extra/mariabackup/fil_cur.h
index c0d0af40f8f..ac561f71060 100644
--- a/extra/mariabackup/fil_cur.h
+++ b/extra/mariabackup/fil_cur.h
@@ -45,8 +45,7 @@ struct xb_fil_cur_t {
xb_read_filt_t* read_filter; /*!< read filter */
xb_read_filt_ctxt_t read_filter_ctxt;
/*!< read filter context */
- byte* orig_buf; /*!< read buffer */
- byte* buf; /*!< aligned pointer for orig_buf */
+ byte* buf; /*!< read buffer */
size_t buf_size; /*!< buffer size in bytes */
size_t buf_read; /*!< number of read bytes in buffer
after the last cursor read */
@@ -54,11 +53,12 @@ struct xb_fil_cur_t {
last cursor read */
ib_int64_t buf_offset; /*!< file offset of the first page in
buffer */
- ulint buf_page_no; /*!< number of the first page in
+ unsigned buf_page_no; /*!< number of the first page in
buffer */
uint thread_n; /*!< thread number for diagnostics */
ulint space_id; /*!< ID of tablespace */
ulint space_size; /*!< space size in pages */
+ uint32_t n_process_batch;/*!< Number of batch processed */
/** @return whether this is not a file-per-table tablespace */
bool is_system() const
diff --git a/extra/mariabackup/innobackupex.cc b/extra/mariabackup/innobackupex.cc
index 5cc9ffb906d..20f87354fd0 100644
--- a/extra/mariabackup/innobackupex.cc
+++ b/extra/mariabackup/innobackupex.cc
@@ -88,7 +88,7 @@ char *opt_ibx_incremental_history_name = NULL;
char *opt_ibx_incremental_history_uuid = NULL;
char *opt_ibx_user = NULL;
-char *opt_ibx_password = NULL;
+const char *opt_ibx_password = NULL;
char *opt_ibx_host = NULL;
char *opt_ibx_defaults_group = NULL;
char *opt_ibx_socket = NULL;
@@ -722,11 +722,10 @@ indicates an error.\n");
static
my_bool
-ibx_get_one_option(int optid,
- const struct my_option *opt __attribute__((unused)),
- char *argument)
+ibx_get_one_option(const struct my_option *opt,
+ const char *argument, const char *)
{
- switch(optid) {
+ switch(opt->id) {
case '?':
usage();
exit(0);
diff --git a/extra/mariabackup/write_filt.cc b/extra/mariabackup/write_filt.cc
index c144a60e378..8339286e1df 100644
--- a/extra/mariabackup/write_filt.cc
+++ b/extra/mariabackup/write_filt.cc
@@ -27,7 +27,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
#include "common.h"
#include "write_filt.h"
#include "fil_cur.h"
-#include <os0proc.h>
+#include "xtrabackup.h"
/************************************************************************
Write-through page write filter. */
@@ -75,7 +75,7 @@ wf_incremental_init(xb_write_filt_ctxt_t *ctxt, char *dst_name,
/* allocate buffer for incremental backup (4096 pages) */
cp->delta_buf_size = (cursor->page_size / 4) * cursor->page_size;
- cp->delta_buf = (unsigned char *)os_mem_alloc_large(&cp->delta_buf_size);
+ cp->delta_buf = (unsigned char *)my_large_malloc(&cp->delta_buf_size, MYF(0));
if (!cp->delta_buf) {
msg(cursor->thread_n,"Can't allocate %zu bytes",
@@ -114,7 +114,7 @@ Run the next batch of pages through incremental page write filter.
static my_bool
wf_incremental_process(xb_write_filt_ctxt_t *ctxt, ds_file_t *dstfile)
{
- ulint i;
+ unsigned i;
xb_fil_cur_t *cursor = ctxt->cursor;
byte *page;
const ulint page_size = cursor->page_size;
@@ -187,7 +187,7 @@ static void
wf_incremental_deinit(xb_write_filt_ctxt_t *ctxt)
{
xb_wf_incremental_ctxt_t *cp = &(ctxt->wf_incremental_ctxt);
- os_mem_free_large(cp->delta_buf, cp->delta_buf_size);
+ my_large_free(cp->delta_buf, cp->delta_buf_size);
}
/************************************************************************
diff --git a/extra/mariabackup/xb_regex.h b/extra/mariabackup/xb_regex.h
index 9b8f5789eeb..8f2f0908658 100644
--- a/extra/mariabackup/xb_regex.h
+++ b/extra/mariabackup/xb_regex.h
@@ -25,7 +25,8 @@ my_regex is used on Windows and native calls are used on POSIX platforms. */
#ifdef HAVE_SYSTEM_REGEX
#include <regex.h>
#else
-#include <pcreposix.h>
+#define PCRE2_STATIC 1 /* Important on Windows */
+#include <pcre2posix.h>
#endif
typedef regex_t* xb_regex_t;
diff --git a/extra/mariabackup/xbstream.cc b/extra/mariabackup/xbstream.cc
index e84d703c5ff..6306806b867 100644
--- a/extra/mariabackup/xbstream.cc
+++ b/extra/mariabackup/xbstream.cc
@@ -26,7 +26,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
#include "common.h"
#include "xbstream.h"
#include "datasink.h"
-#include "crc_glue.h"
#define XBSTREAM_VERSION "1.0"
#define XBSTREAM_BUFFER_SIZE (10 * 1024 * 1024UL)
@@ -90,16 +89,14 @@ typedef struct {
static int get_options(int *argc, char ***argv);
static int mode_create(int argc, char **argv);
static int mode_extract(int n_threads, int argc, char **argv);
-static my_bool get_one_option(int optid, const struct my_option *opt,
- char *argument);
+static my_bool get_one_option(const struct my_option *opt,
+ const char *argument, const char *filename);
int
main(int argc, char **argv)
{
MY_INIT(argv[0]);
- crc_init();
-
if (get_options(&argc, &argv)) {
goto err;
}
@@ -141,7 +138,8 @@ get_options(int *argc, char ***argv)
int ho_error;
if ((ho_error= handle_options(argc, argv, my_long_options,
- get_one_option))) {
+ get_one_option)))
+ {
exit(EXIT_FAILURE);
}
@@ -194,10 +192,9 @@ set_run_mode(run_mode_t mode)
static
my_bool
-get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
- char *argument __attribute__((unused)))
+get_one_option(const struct my_option *opt, const char *, const char *)
{
- switch (optid) {
+ switch (opt->id) {
case 'c':
if (set_run_mode(RUN_MODE_CREATE)) {
return TRUE;
@@ -227,7 +224,7 @@ stream_one_file(File file, xb_wstream_file_t *xbfile)
posix_fadvise(file, 0, 0, POSIX_FADV_SEQUENTIAL);
offset = my_tell(file, MYF(MY_WME));
- buf = (uchar*)(my_malloc(XBSTREAM_BUFFER_SIZE, MYF(MY_FAE)));
+ buf = (uchar*)(my_malloc(PSI_NOT_INSTRUMENTED, XBSTREAM_BUFFER_SIZE, MYF(MY_FAE)));
while ((bytes = (ssize_t)my_read(file, buf, XBSTREAM_BUFFER_SIZE,
MYF(MY_WME))) > 0) {
@@ -322,13 +319,13 @@ file_entry_new(extract_ctxt_t *ctxt, const char *path, uint pathlen)
file_entry_t *entry;
ds_file_t *file;
- entry = (file_entry_t *) my_malloc(sizeof(file_entry_t),
+ entry = (file_entry_t *) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(file_entry_t),
MYF(MY_WME | MY_ZEROFILL));
if (entry == NULL) {
return NULL;
}
- entry->path = my_strndup(path, pathlen, MYF(MY_WME));
+ entry->path = my_strndup(PSI_NOT_INSTRUMENTED, path, pathlen, MYF(MY_WME));
if (entry->path == NULL) {
goto err;
}
@@ -496,8 +493,8 @@ mode_extract(int n_threads, int argc __attribute__((unused)),
pthread_mutex_t mutex;
int ret = 0;
- if (my_hash_init(&filehash, &my_charset_bin, START_FILE_HASH_SIZE,
- 0, 0, (my_hash_get_key) get_file_entry_key,
+ if (my_hash_init(PSI_NOT_INSTRUMENTED, &filehash, &my_charset_bin,
+ START_FILE_HASH_SIZE, 0, 0, (my_hash_get_key) get_file_entry_key,
(my_hash_free_key) file_entry_free, MYF(0))) {
msg("%s: failed to initialize file hash.", my_progname);
return 1;
diff --git a/extra/mariabackup/xbstream_read.cc b/extra/mariabackup/xbstream_read.cc
index ff13800fd94..84bb279aba0 100644
--- a/extra/mariabackup/xbstream_read.cc
+++ b/extra/mariabackup/xbstream_read.cc
@@ -23,7 +23,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
#include <zlib.h>
#include "common.h"
#include "xbstream.h"
-#include "crc_glue.h"
/* Allocate 1 MB for the payload buffer initially */
#define INIT_BUFFER_LEN (1024 * 1024)
@@ -42,7 +41,7 @@ xb_stream_read_new(void)
{
xb_rstream_t *stream;
- stream = (xb_rstream_t *) my_malloc(sizeof(xb_rstream_t), MYF(MY_FAE));
+ stream = (xb_rstream_t *) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(xb_rstream_t), MYF(MY_FAE));
#ifdef __WIN__
setmode(fileno(stdin), _O_BINARY);
@@ -71,8 +70,7 @@ xb_rstream_result_t
xb_stream_validate_checksum(xb_rstream_chunk_t *chunk)
{
ulong checksum;
-
- checksum = crc32_iso3309(0, (unsigned char *)chunk->data, (uint)chunk->length);
+ checksum = my_checksum(0, chunk->data, chunk->length);
if (checksum != chunk->checksum) {
msg("xb_stream_read_chunk(): invalid checksum at offset "
"0x%llx: expected 0x%lx, read 0x%lx.",
@@ -190,7 +188,7 @@ xb_stream_read_chunk(xb_rstream_t *stream, xb_rstream_chunk_t *chunk)
/* Reallocate the buffer if needed */
if (chunk->length > chunk->buflen) {
- chunk->data = my_realloc(chunk->data, chunk->length,
+ chunk->data = my_realloc(PSI_NOT_INSTRUMENTED, chunk->data, chunk->length,
MYF(MY_WME | MY_ALLOW_ZERO_PTR));
if (chunk->data == NULL) {
msg("xb_stream_read_chunk(): failed to increase buffer "
diff --git a/extra/mariabackup/xbstream_write.cc b/extra/mariabackup/xbstream_write.cc
index fcf92f40acd..2c9ffde6c42 100644
--- a/extra/mariabackup/xbstream_write.cc
+++ b/extra/mariabackup/xbstream_write.cc
@@ -23,7 +23,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
#include <zlib.h>
#include "common.h"
#include "xbstream.h"
-#include "crc_glue.h"
/* Group writes smaller than this into a single chunk */
#define XB_STREAM_MIN_CHUNK_SIZE (10 * 1024 * 1024)
@@ -65,7 +64,7 @@ xb_stream_write_new(void)
{
xb_wstream_t *stream;
- stream = (xb_wstream_t *) my_malloc(sizeof(xb_wstream_t), MYF(MY_FAE));
+ stream = (xb_wstream_t *) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(xb_wstream_t), MYF(MY_FAE));
pthread_mutex_init(&stream->mutex, NULL);
return stream;;
@@ -87,7 +86,7 @@ xb_stream_write_open(xb_wstream_t *stream, const char *path,
return NULL;
}
- file = (xb_wstream_file_t *) my_malloc(sizeof(xb_wstream_file_t) +
+ file = (xb_wstream_file_t *) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(xb_wstream_file_t) +
path_len + 1, MYF(MY_FAE));
file->path = (char *) (file + 1);
@@ -216,7 +215,7 @@ xb_stream_write_chunk(xb_wstream_file_t *file, const void *buf, size_t len)
int8store(ptr, len); /* Payload length */
ptr += 8;
- checksum = crc32_iso3309(0, (const uchar *)buf, (uint)len); /* checksum */
+ checksum = my_checksum(0, buf, len);
pthread_mutex_lock(&stream->mutex);
diff --git a/extra/mariabackup/xtrabackup.cc b/extra/mariabackup/xtrabackup.cc
index 5e01e64f490..7d45337bb18 100644
--- a/extra/mariabackup/xtrabackup.cc
+++ b/extra/mariabackup/xtrabackup.cc
@@ -51,6 +51,7 @@ Street, Fifth Floor, Boston, MA 02110-1335 USA
#include <my_getopt.h>
#include <mysql_com.h>
#include <my_default.h>
+#include <scope.h>
#include <sql_class.h>
#include <fcntl.h>
@@ -58,13 +59,17 @@ Street, Fifth Floor, Boston, MA 02110-1335 USA
#ifdef __linux__
# include <sys/prctl.h>
-#include <sys/resource.h>
+# include <sys/resource.h>
#endif
#ifdef __APPLE__
# include "libproc.h"
#endif
+#ifdef __FreeBSD__
+# include <sys/sysctl.h>
+#endif
+
#include <btr0sea.h>
#include <dict0priv.h>
@@ -106,9 +111,9 @@ Street, Fifth Floor, Boston, MA 02110-1335 USA
#include "encryption_plugin.h"
#include <sql_plugin.h>
#include <srv0srv.h>
-#include <crc_glue.h>
#include <log.h>
#include <derror.h>
+#include <thr_timer.h>
#include "backup_debug.h"
#define MB_CORRUPTED_PAGES_FILE "innodb_corrupted_pages"
@@ -131,8 +136,6 @@ my_bool xtrabackup_help;
my_bool xtrabackup_export;
-my_bool xtrabackup_rollback_xa;
-
longlong xtrabackup_use_memory;
uint opt_protocol;
@@ -168,16 +171,16 @@ typedef std::list<regex_t> regex_list_t;
static regex_list_t regex_include_list;
static regex_list_t regex_exclude_list;
-static hash_table_t* tables_include_hash = NULL;
-static hash_table_t* tables_exclude_hash = NULL;
+static hash_table_t tables_include_hash;
+static hash_table_t tables_exclude_hash;
char *xtrabackup_databases = NULL;
char *xtrabackup_databases_file = NULL;
char *xtrabackup_databases_exclude = NULL;
-static hash_table_t* databases_include_hash = NULL;
-static hash_table_t* databases_exclude_hash = NULL;
+static hash_table_t databases_include_hash;
+static hash_table_t databases_exclude_hash;
-static hash_table_t* inc_dir_tables_hash;
+static hash_table_t inc_dir_tables_hash;
struct xb_filter_entry_struct{
char* name;
@@ -241,8 +244,12 @@ parameters are declared in mysqld.cc: */
long innobase_buffer_pool_awe_mem_mb = 0;
long innobase_file_io_threads = 4;
-long innobase_read_io_threads = 4;
-long innobase_write_io_threads = 4;
+ulong innobase_read_io_threads = 4;
+ulong innobase_write_io_threads = 4;
+
+/** Store the failed read of undo tablespace ids. Protected by
+backup mutex */
+static std::set<uint32_t> fail_undo_ids;
longlong innobase_page_size = (1LL << 14); /* 16KB */
char* innobase_buffer_pool_filename = NULL;
@@ -254,20 +261,6 @@ static char* innobase_ignored_opt;
char* innobase_data_home_dir;
char* innobase_data_file_path;
-my_bool innobase_use_doublewrite;
-my_bool innobase_file_per_table;
-my_bool innobase_locks_unsafe_for_binlog;
-my_bool innobase_rollback_on_timeout;
-my_bool innobase_create_status_file;
-
-/* The following counter is used to convey information to InnoDB
-about server activity: in selects it is not sensible to call
-srv_active_wake_master_thread after each fetch or search, we only do
-it every INNOBASE_WAKE_INTERVAL'th step. */
-
-#define INNOBASE_WAKE_INTERVAL 32
-ulong innobase_active_counter = 0;
-
my_bool xtrabackup_incremental_force_scan = FALSE;
@@ -334,7 +327,7 @@ char *opt_incremental_history_name;
char *opt_incremental_history_uuid;
char *opt_user;
-char *opt_password;
+const char *opt_password;
char *opt_host;
char *opt_defaults_group;
char *opt_socket;
@@ -369,8 +362,6 @@ typedef std::map<space_id_t,std::string> space_id_to_name_t;
struct ddl_tracker_t {
/** Tablspaces with their ID and name, as they were copied to backup.*/
space_id_to_name_t tables_in_backup;
- /** Tablespaces for that optimized DDL without redo log was found.*/
- std::set<space_id_t> optimized_ddl;
/** Drop operations found in redo log. */
std::set<space_id_t> drops;
/* For DDL operation found in redo log, */
@@ -379,6 +370,10 @@ struct ddl_tracker_t {
static ddl_tracker_t ddl_tracker;
+/** Store the space ids of truncated undo log tablespaces. Protected
+by recv_sys.mutex */
+static std::set<uint32_t> undo_trunc_ids;
+
// Convert non-null terminated filename to space name
std::string filename_to_spacename(const byte *filename, size_t len);
@@ -387,7 +382,8 @@ CorruptedPages::CorruptedPages() { ut_a(!pthread_mutex_init(&m_mutex, NULL)); }
CorruptedPages::~CorruptedPages() { ut_a(!pthread_mutex_destroy(&m_mutex)); }
void CorruptedPages::add_page_no_lock(const char *space_name, ulint space_id,
- ulint page_no, bool convert_space_name)
+ unsigned page_no,
+ bool convert_space_name)
{
space_info_t &space_info = m_spaces[space_id];
if (space_info.space_name.empty())
@@ -400,14 +396,14 @@ void CorruptedPages::add_page_no_lock(const char *space_name, ulint space_id,
}
void CorruptedPages::add_page(const char *file_name, ulint space_id,
- ulint page_no)
+ unsigned page_no)
{
ut_a(!pthread_mutex_lock(&m_mutex));
add_page_no_lock(file_name, space_id, page_no, true);
ut_a(!pthread_mutex_unlock(&m_mutex));
}
-bool CorruptedPages::contains(ulint space_id, ulint page_no) const
+bool CorruptedPages::contains(ulint space_id, unsigned page_no) const
{
bool result = false;
ut_a(!pthread_mutex_lock(&m_mutex));
@@ -449,7 +445,7 @@ bool CorruptedPages::print_to_file(const char *filename) const
{
out << space_it->second.space_name << " " << space_it->first << "\n";
bool first_page_no= true;
- for (std::set<ulint>::const_iterator page_it=
+ for (std::set<unsigned>::const_iterator page_it=
space_it->second.pages.begin();
page_it != space_it->second.pages.end(); ++page_it)
if (first_page_no)
@@ -503,7 +499,8 @@ void CorruptedPages::read_from_file(const char *file_name)
}
else
{
- ulint page_no;
+ std::istringstream iss(line);
+ unsigned page_no;
while ((iss >> page_no))
add_page_no_lock(space_name.c_str(), space_id, page_no, false);
if (!iss.eof())
@@ -529,8 +526,8 @@ static fil_space_t* fil_space_get_by_name(const char* name);
void CorruptedPages::zero_out_free_pages()
{
container_t non_free_pages;
- byte* buf= static_cast<byte*>(ut_malloc_nokey(2 * srv_page_size));
- byte* zero_page = static_cast<byte*>(ut_align(buf, srv_page_size));
+ byte *zero_page=
+ static_cast<byte *>(aligned_malloc(srv_page_size, srv_page_size));
memset(zero_page, 0, srv_page_size);
ut_a(!pthread_mutex_lock(&m_mutex));
@@ -542,43 +539,45 @@ void CorruptedPages::zero_out_free_pages()
// There is no need to close tablespaces explixitly as they will be closed
// in innodb_shutdown().
xb_load_single_table_tablespace(space_name, false);
- mutex_enter(&fil_system.mutex);
- fil_space_t *space = fil_space_get_by_name(space_name.c_str());
- mutex_exit(&fil_system.mutex);
+ fil_space_t *space = fil_space_t::get(space_id);
if (!space)
die("Can't find space object for space name %s to check corrupted page",
space_name.c_str());
- for (std::set<ulint>::const_iterator page_it=
+ for (std::set<unsigned>::const_iterator page_it=
space_it->second.pages.begin();
page_it != space_it->second.pages.end(); ++page_it)
{
- bool is_free= fseg_page_is_free(space, static_cast<unsigned>(*page_it));
+ bool is_free= fseg_page_is_free(space, *page_it);
if (!is_free) {
space_info_t &space_info = non_free_pages[space_id];
space_info.pages.insert(*page_it);
if (space_info.space_name.empty())
space_info.space_name = space_name;
- msg("Error: corrupted page " ULINTPF
+ msg("Error: corrupted page " UINT32PF
" of tablespace %s can not be fixed",
*page_it, space_name.c_str());
}
else
{
- const page_id_t page_id(space->id, *page_it);
- dberr_t err= fil_io(IORequestWrite, true, page_id, 0, 0,
- srv_page_size, zero_page, NULL);
+ space->reacquire();
+ auto err= space
+ ->io(IORequest(IORequest::PUNCH_RANGE),
+ *page_it * srv_page_size, srv_page_size, zero_page)
+ .err;
if (err != DB_SUCCESS)
- die("Can't zero out corrupted page " ULINTPF " of tablespace %s",
+ die("Can't zero out corrupted page " UINT32PF " of tablespace %s",
*page_it, space_name.c_str());
- msg("Corrupted page " ULINTPF
+ msg("Corrupted page " UINT32PF
" of tablespace %s was successfuly fixed.",
*page_it, space_name.c_str());
}
}
+ space->flush<true>();
+ space->release();
}
m_spaces.swap(non_free_pages);
ut_a(!pthread_mutex_unlock(&m_mutex));
- ut_free(buf);
+ aligned_free(zero_page);
}
/* Simple datasink creation tracking...add datasinks in the reverse order you
@@ -597,7 +596,7 @@ xtrabackup_add_datasink(ds_ctxt_t *ds)
typedef void (*process_single_tablespace_func_t)(const char *dirname,
const char *filname,
bool is_remote,
- bool set_size);
+ bool skip_node_page0);
static dberr_t enumerate_ibd_files(process_single_tablespace_func_t callback);
/* ======== Datafiles iterator ======== */
@@ -736,7 +735,7 @@ static os_event_t dbug_start_query_thread(
par->expect_errno = expected_errno;
par->done_event = os_event_create(0);
par->con = xb_mysql_connect();
- os_thread_create(dbug_execute_in_new_connection, par, 0);
+ os_thread_create(dbug_execute_in_new_connection, par);
if (!wait_state)
return par->done_event;
@@ -812,26 +811,25 @@ std::string filename_to_spacename(const byte *filename, size_t len)
/** Report an operation to create, delete, or rename a file during backup.
@param[in] space_id tablespace identifier
-@param[in] flags tablespace flags (NULL if not create)
+@param[in] create whether the file is being created
@param[in] name file name (not NUL-terminated)
@param[in] len length of name, in bytes
@param[in] new_name new file name (NULL if not rename)
@param[in] new_len length of new_name, in bytes (0 if NULL) */
-static void backup_file_op(ulint space_id, const byte* flags,
+static void backup_file_op(ulint space_id, bool create,
const byte* name, ulint len,
const byte* new_name, ulint new_len)
{
- ut_ad(!flags || !new_name);
+ ut_ad(!create || !new_name);
ut_ad(name);
ut_ad(len);
ut_ad(!new_name == !new_len);
pthread_mutex_lock(&backup_mutex);
- if (flags) {
+ if (create) {
ddl_tracker.id_to_name[space_id] = filename_to_spacename(name, len);
- msg("DDL tracking : create %zu \"%.*s\": %x",
- space_id, int(len), name, mach_read_from_4(flags));
+ msg("DDL tracking : create %zu \"%.*s\"", space_id, int(len), name);
}
else if (new_name) {
ddl_tracker.id_to_name[space_id] = filename_to_spacename(new_name, new_len);
@@ -854,14 +852,14 @@ static void backup_file_op(ulint space_id, const byte* flags,
We will abort backup in this case.
*/
-static void backup_file_op_fail(ulint space_id, const byte* flags,
+static void backup_file_op_fail(ulint space_id, bool create,
const byte* name, ulint len,
const byte* new_name, ulint new_len)
{
bool fail;
- if (flags) {
- msg("DDL tracking : create %zu \"%.*s\": %x",
- space_id, int(len), name, mach_read_from_4(flags));
+ if (create) {
+ msg("DDL tracking : create %zu \"%.*s\"",
+ space_id, int(len), name);
std::string spacename = filename_to_spacename(name, len);
fail = !check_if_skip_table(spacename.c_str());
}
@@ -884,32 +882,12 @@ static void backup_file_op_fail(ulint space_id, const byte* flags,
}
}
-
-/** Callback whenever MLOG_INDEX_LOAD happens.
-@param[in] space_id space id to check */
-static void backup_optimized_ddl_op(ulint space_id)
+static void backup_undo_trunc(uint32_t space_id)
{
- pthread_mutex_lock(&backup_mutex);
- ddl_tracker.optimized_ddl.insert(space_id);
- pthread_mutex_unlock(&backup_mutex);
+ undo_trunc_ids.insert(space_id);
}
/*
- Optimized DDL callback at the end of backup that
- run with --no-lock. Usually aborts the backup.
-*/
-static void backup_optimized_ddl_op_fail(ulint space_id) {
- msg("DDL tracking : optimized DDL on space %zu", space_id);
- if (ddl_tracker.tables_in_backup.find(space_id) != ddl_tracker.tables_in_backup.end()) {
- ut_a(opt_no_lock);
- msg("ERROR : Optimized DDL operation detected in the late phase of backup."
- "Backup is inconsistent. Remove --no-lock option to fix.");
- exit(EXIT_FAILURE);
- }
-}
-
-
-/*
Retrieve default data directory, to be used with --copy-back.
On Windows, default datadir is ..\data, relative to the
@@ -961,7 +939,6 @@ enum options_xtrabackup
OPT_XTRA_BACKUP,
OPT_XTRA_PREPARE,
OPT_XTRA_EXPORT,
- OPT_XTRA_ROLLBACK_XA,
OPT_XTRA_PRINT_PARAM,
OPT_XTRA_USE_MEMORY,
OPT_XTRA_THROTTLE,
@@ -1013,7 +990,6 @@ enum options_xtrabackup
OPT_INNODB_CHECKSUM_ALGORITHM,
OPT_INNODB_UNDO_DIRECTORY,
OPT_INNODB_UNDO_TABLESPACES,
- OPT_INNODB_LOG_CHECKSUMS,
OPT_XTRA_INCREMENTAL_FORCE_SCAN,
OPT_DEFAULTS_GROUP,
OPT_CLOSE_FILES,
@@ -1077,12 +1053,6 @@ struct my_option xb_client_options[]= {
"create files to import to another database when prepare.",
(G_PTR *) &xtrabackup_export, (G_PTR *) &xtrabackup_export, 0, GET_BOOL,
NO_ARG, 0, 0, 0, 0, 0, 0},
- {"rollback-xa", OPT_XTRA_ROLLBACK_XA,
- "Rollback prepared XA's on --prepare. "
- "After preparing target directory with this option "
- "it can no longer be a base for incremental backup.",
- (G_PTR *) &xtrabackup_rollback_xa, (G_PTR *) &xtrabackup_rollback_xa, 0,
- GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{"print-param", OPT_XTRA_PRINT_PARAM,
"print parameter of mysqld needed for copyback.",
(G_PTR *) &xtrabackup_print_param, (G_PTR *) &xtrabackup_print_param, 0,
@@ -1273,7 +1243,7 @@ struct my_option xb_client_options[]= {
{"rsync", OPT_RSYNC,
"Uses the rsync utility to optimize local file "
- "transfers. When this option is specified, innobackupex uses rsync "
+ "transfers. When this option is specified, " XB_TOOL_NAME " uses rsync "
"to copy all non-InnoDB files instead of spawning a separate cp for "
"each file, which can be much faster for servers with a large number "
"of databases or tables. This option cannot be used together with "
@@ -1381,7 +1351,7 @@ struct my_option xb_client_options[]= {
{"ftwrl-wait-query-type", OPT_LOCK_WAIT_QUERY_TYPE,
"This option specifies which types of queries are allowed to complete "
- "before innobackupex will issue the global lock. Default is all.",
+ "before " XB_TOOL_NAME " will issue the global lock. Default is all.",
(uchar *) &opt_lock_wait_query_type, (uchar *) &opt_lock_wait_query_type,
&query_type_typelib, GET_ENUM, REQUIRED_ARG, QUERY_TYPE_ALL, 0, 0, 0, 0,
0},
@@ -1401,26 +1371,26 @@ struct my_option xb_client_options[]= {
NULL, NULL, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
{"kill-long-queries-timeout", OPT_KILL_LONG_QUERIES_TIMEOUT,
- "This option specifies the number of seconds innobackupex waits "
+ "This option specifies the number of seconds " XB_TOOL_NAME " waits "
"between starting FLUSH TABLES WITH READ LOCK and killing those "
"queries that block it. Default is 0 seconds, which means "
- "innobackupex will not attempt to kill any queries.",
+ XB_TOOL_NAME " will not attempt to kill any queries.",
(uchar *) &opt_kill_long_queries_timeout,
(uchar *) &opt_kill_long_queries_timeout, 0, GET_UINT, REQUIRED_ARG, 0, 0,
0, 0, 0, 0},
{"ftwrl-wait-timeout", OPT_LOCK_WAIT_TIMEOUT,
- "This option specifies time in seconds that innobackupex should wait "
+ "This option specifies time in seconds that " XB_TOOL_NAME " should wait "
"for queries that would block FTWRL before running it. If there are "
- "still such queries when the timeout expires, innobackupex terminates "
- "with an error. Default is 0, in which case innobackupex does not "
+ "still such queries when the timeout expires, " XB_TOOL_NAME " terminates "
+ "with an error. Default is 0, in which case " XB_TOOL_NAME " does not "
"wait for queries to complete and starts FTWRL immediately.",
(uchar *) &opt_lock_wait_timeout, (uchar *) &opt_lock_wait_timeout, 0,
GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"ftwrl-wait-threshold", OPT_LOCK_WAIT_THRESHOLD,
"This option specifies the query run time threshold which is used by "
- "innobackupex to detect long-running queries with a non-zero value "
+ XB_TOOL_NAME " to detect long-running queries with a non-zero value "
"of --ftwrl-wait-timeout. FTWRL is not started until such "
"long-running queries exist. This option has no effect if "
"--ftwrl-wait-timeout is 0. Default value is 60 seconds.",
@@ -1470,6 +1440,10 @@ uint xb_client_options_count = array_elements(xb_client_options);
static const char *dbug_option;
#endif
+namespace deprecated {
+extern ulong srv_n_log_files;
+}
+
struct my_option xb_server_options[] =
{
{"datadir", 'h', "Path to the database root.", (G_PTR*) &mysql_data_home,
@@ -1518,17 +1492,16 @@ struct my_option xb_server_options[] =
GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
#ifdef BTR_CUR_HASH_ADAPT
{"innodb_adaptive_hash_index", OPT_INNODB_ADAPTIVE_HASH_INDEX,
- "Enable InnoDB adaptive hash index (enabled by default). "
- "Disable with --skip-innodb-adaptive-hash-index.",
+ "Enable InnoDB adaptive hash index (disabled by default).",
&btr_search_enabled,
&btr_search_enabled,
- 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
+ 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
#endif /* BTR_CUR_HASH_ADAPT */
{"innodb_autoextend_increment", OPT_INNODB_AUTOEXTEND_INCREMENT,
"Data file autoextend increment in megabytes",
(G_PTR*) &sys_tablespace_auto_extend_increment,
(G_PTR*) &sys_tablespace_auto_extend_increment,
- 0, GET_ULONG, REQUIRED_ARG, 8L, 1L, 1000L, 0, 1L, 0},
+ 0, GET_UINT, REQUIRED_ARG, 8, 1, 1000, 0, 1, 0},
{"innodb_data_file_path", OPT_INNODB_DATA_FILE_PATH,
"Path to individual files and their sizes.", &innobase_data_file_path,
&innobase_data_file_path, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
@@ -1537,8 +1510,8 @@ struct my_option xb_server_options[] =
&innobase_data_home_dir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"innodb_doublewrite", OPT_INNODB_DOUBLEWRITE,
"Enable InnoDB doublewrite buffer during --prepare.",
- (G_PTR*) &innobase_use_doublewrite,
- (G_PTR*) &innobase_use_doublewrite, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
+ (G_PTR*) &srv_use_doublewrite_buf,
+ (G_PTR*) &srv_use_doublewrite_buf, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{"innodb_io_capacity", OPT_INNODB_IO_CAPACITY,
"Number of IOPs the server can do. Tunes the background IO rate",
(G_PTR*) &srv_io_capacity, (G_PTR*) &srv_io_capacity,
@@ -1557,8 +1530,8 @@ struct my_option xb_server_options[] =
1, 0},
{"innodb_file_per_table", OPT_INNODB_FILE_PER_TABLE,
"Stores each InnoDB table to an .ibd file in the database dir.",
- (G_PTR*) &innobase_file_per_table,
- (G_PTR*) &innobase_file_per_table, 0, GET_BOOL, NO_ARG,
+ (G_PTR*) &srv_file_per_table,
+ (G_PTR*) &srv_file_per_table, 0, GET_BOOL, NO_ARG,
FALSE, 0, 0, 0, 0, 0},
{"innodb_flush_method", OPT_INNODB_FLUSH_METHOD,
@@ -1574,11 +1547,12 @@ struct my_option xb_server_options[] =
{"innodb_log_file_size", OPT_INNODB_LOG_FILE_SIZE,
"Ignored for mysqld option compatibility",
(G_PTR*) &srv_log_file_size, (G_PTR*) &srv_log_file_size, 0,
- GET_ULL, REQUIRED_ARG, 48 << 20, 1 << 20, log_group_max_size, 0,
+ GET_ULL, REQUIRED_ARG, 48 << 20, 1 << 20,
+ std::numeric_limits<ulonglong>::max(), 0,
UNIV_PAGE_SIZE_MAX, 0},
{"innodb_log_files_in_group", OPT_INNODB_LOG_FILES_IN_GROUP,
"Ignored for mysqld option compatibility",
- &srv_n_log_files, &srv_n_log_files,
+ &deprecated::srv_n_log_files, &deprecated::srv_n_log_files,
0, GET_LONG, REQUIRED_ARG, 1, 1, 100, 0, 1, 0},
{"innodb_log_group_home_dir", OPT_INNODB_LOG_GROUP_HOME_DIR,
"Path to InnoDB log files.", &srv_log_group_home_dir,
@@ -1640,11 +1614,6 @@ struct my_option xb_server_options[] =
&xb_plugin_dir, &xb_plugin_dir,
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },
- {"innodb-log-checksums", OPT_INNODB_LOG_CHECKSUMS,
- "Whether to require checksums for InnoDB redo log blocks",
- &innodb_log_checksums, &innodb_log_checksums,
- 0, GET_BOOL, REQUIRED_ARG, 1, 0, 0, 0, 0, 0 },
-
{"open_files_limit", OPT_OPEN_FILES_LIMIT, "the maximum number of file "
"descriptors to reserve with setrlimit().",
(G_PTR*) &xb_open_files_limit, (G_PTR*) &xb_open_files_limit, 0, GET_ULONG,
@@ -1698,7 +1667,7 @@ uint xb_server_options_count = array_elements(xb_server_options);
static std::set<std::string> tables_for_export;
static void append_export_table(const char *dbname, const char *tablename,
- bool is_remote, bool set_size)
+ bool is_remote, bool skip_node_page0)
{
if(dbname && tablename && !is_remote)
{
@@ -1794,9 +1763,9 @@ static int prepare_export()
outf= popen(cmdline,"r");
if (!outf)
goto end;
-
+
char outline[FN_REFLEN];
- while(fgets(outline, sizeof(outline)-1, outf))
+ while (fgets(outline, FN_REFLEN - 1, outf))
fprintf(stderr,"%s",outline);
err = pclose(outf);
@@ -1870,11 +1839,10 @@ check_if_param_set(const char *param)
}
my_bool
-xb_get_one_option(int optid,
- const struct my_option *opt __attribute__((unused)),
- char *argument)
+xb_get_one_option(const struct my_option *opt,
+ const char *argument, const char *)
{
- switch(optid) {
+ switch(opt->id) {
case 'h':
strmake(mysql_real_data_home,argument, FN_REFLEN - 1);
mysql_data_home= mysql_real_data_home;
@@ -2156,23 +2124,11 @@ static bool innodb_init_param()
srv_buf_pool_size = (ulint) xtrabackup_use_memory;
srv_buf_pool_chunk_unit = (ulong)srv_buf_pool_size;
- srv_buf_pool_instances = 1;
- srv_n_page_cleaners = 1;
-
- srv_n_file_io_threads = (ulint) innobase_file_io_threads;
- srv_n_read_io_threads = (ulint) innobase_read_io_threads;
- srv_n_write_io_threads = (ulint) innobase_write_io_threads;
- srv_use_doublewrite_buf = (ibool) innobase_use_doublewrite;
-
- row_rollback_on_timeout = (ibool) innobase_rollback_on_timeout;
-
- srv_file_per_table = (my_bool) innobase_file_per_table;
-
- srv_locks_unsafe_for_binlog = (ibool) innobase_locks_unsafe_for_binlog;
+ srv_n_read_io_threads = (uint) innobase_read_io_threads;
+ srv_n_write_io_threads = (uint) innobase_write_io_threads;
srv_max_n_open_files = ULINT_UNDEFINED - 5;
- srv_innodb_status = (ibool) innobase_create_status_file;
srv_print_verbose_log = verbose ? 2 : 1;
@@ -2246,6 +2202,14 @@ error:
static bool innodb_init()
{
bool create_new_db = false;
+
+ if (srv_io_capacity >= SRV_MAX_IO_CAPACITY_LIMIT / 2) {
+ /* Avoid overflow. */
+ srv_max_io_capacity = SRV_MAX_IO_CAPACITY_LIMIT;
+ } else {
+ srv_max_io_capacity = std::max(2 * srv_io_capacity, 2000UL);
+ }
+
/* Check if the data files exist or not. */
dberr_t err = srv_sys_space.check_file_spec(&create_new_db, 5U << 20);
@@ -2543,7 +2507,7 @@ check_if_table_matches_filters(const char *name,
const regex_list_t& regex_list,
hash_table_t* tables_hash)
{
- if (regex_list.empty() && !tables_hash) {
+ if (regex_list.empty() && !tables_hash->array) {
return(FALSE);
}
@@ -2551,11 +2515,8 @@ check_if_table_matches_filters(const char *name,
return(TRUE);
}
- if (tables_hash && find_filter_in_hashtable(name, tables_hash, NULL)) {
- return(TRUE);
- }
-
- return FALSE;
+ return tables_hash->array &&
+ find_filter_in_hashtable(name, tables_hash, NULL);
}
enum skip_database_check_result {
@@ -2581,17 +2542,17 @@ check_if_skip_database(
/* There are some filters for databases, check them */
xb_filter_entry_t* database = NULL;
- if (databases_exclude_hash &&
- find_filter_in_hashtable(name, databases_exclude_hash,
+ if (databases_exclude_hash.array &&
+ find_filter_in_hashtable(name, &databases_exclude_hash,
&database) &&
- (!database->has_tables || !databases_include_hash)) {
+ (!database->has_tables || !databases_include_hash.array)) {
/* Database is found and there are no tables specified,
skip entire db. */
return DATABASE_SKIP;
}
- if (databases_include_hash) {
- if (!find_filter_in_hashtable(name, databases_include_hash,
+ if (databases_include_hash.array) {
+ if (!find_filter_in_hashtable(name, &databases_include_hash,
&database)) {
/* Database isn't found, skip the database */
return DATABASE_SKIP;
@@ -2615,8 +2576,7 @@ check_if_skip_database_by_path(
const char* path /*!< in: path to the db directory. */
)
{
- if (databases_include_hash == NULL &&
- databases_exclude_hash == NULL) {
+ if (!databases_include_hash.array && !databases_exclude_hash.array) {
return(FALSE);
}
@@ -2660,10 +2620,10 @@ check_if_skip_table(
if (regex_exclude_list.empty() &&
regex_include_list.empty() &&
- tables_include_hash == NULL &&
- tables_exclude_hash == NULL &&
- databases_include_hash == NULL &&
- databases_exclude_hash == NULL) {
+ !tables_include_hash.array &&
+ !tables_exclude_hash.array &&
+ !databases_include_hash.array &&
+ !databases_exclude_hash.array) {
return(FALSE);
}
@@ -2695,22 +2655,22 @@ check_if_skip_table(
without truncating the #P#... suffix so we can backup individual
partitions with regexps like '^test[.]t#P#p5' */
if (check_if_table_matches_filters(buf, regex_exclude_list,
- tables_exclude_hash)) {
+ &tables_exclude_hash)) {
return(TRUE);
}
if (check_if_table_matches_filters(buf, regex_include_list,
- tables_include_hash)) {
+ &tables_include_hash)) {
return(FALSE);
}
if ((eptr = strstr(buf, "#P#")) != NULL) {
*eptr = 0;
if (check_if_table_matches_filters(buf, regex_exclude_list,
- tables_exclude_hash)) {
+ &tables_exclude_hash)) {
return (TRUE);
}
if (check_if_table_matches_filters(buf, regex_include_list,
- tables_include_hash)) {
+ &tables_include_hash)) {
return(FALSE);
}
}
@@ -2723,7 +2683,7 @@ check_if_skip_table(
if (skip_database == DATABASE_SKIP_SOME_TABLES ||
!regex_include_list.empty() ||
- tables_include_hash) {
+ tables_include_hash.array) {
/* Include lists are present, but qualified name
failed to match any.*/
@@ -2854,15 +2814,27 @@ static my_bool xtrabackup_copy_datafile(fil_node_t *node, uint thread_n,
}
/* The main copy loop */
- while ((res = xb_fil_cur_read(&cursor, corrupted_pages)) ==
- XB_FIL_CUR_SUCCESS) {
+ while (1) {
+ res = xb_fil_cur_read(&cursor, corrupted_pages);
+ if (res == XB_FIL_CUR_ERROR) {
+ goto error;
+ }
+
+ if (res == XB_FIL_CUR_EOF) {
+ break;
+ }
+
if (!write_filter.process(&write_filt_ctxt, dstfile)) {
goto error;
}
- }
- if (res == XB_FIL_CUR_ERROR) {
- goto error;
+ if (res == XB_FIL_CUR_SKIP) {
+ pthread_mutex_lock(&backup_mutex);
+ fail_undo_ids.insert(
+ static_cast<uint32_t>(cursor.space_id));
+ pthread_mutex_unlock(&backup_mutex);
+ break;
+ }
}
if (write_filter.finalize
@@ -2959,12 +2931,9 @@ static lsn_t xtrabackup_copy_log(lsn_t start_lsn, lsn_t end_lsn, bool last)
}
}
- store_t store = STORE_NO;
-
- if (more_data && recv_parse_log_recs(0, &store, 0, false)) {
-
+ store_t store= STORE_NO;
+ if (more_data && recv_sys.parse(0, &store, false)) {
msg("Error: copying the log failed");
-
return(0);
}
@@ -3012,7 +2981,7 @@ static bool xtrabackup_copy_logfile(bool last = false)
xtrabackup_io_throttling();
- log_mutex_enter();
+ mysql_mutex_lock(&log_sys.mutex);
lsn_t lsn= start_lsn;
for (int retries= 0; retries < 100; retries++) {
if (log_sys.log.read_log_seg(&lsn, end_lsn)
@@ -3025,7 +2994,6 @@ static bool xtrabackup_copy_logfile(bool last = false)
if (lsn == start_lsn) {
overwritten_block= !recv_sys.found_corrupt_log
- && (innodb_log_checksums || log_sys.log.is_encrypted())
&& log_block_calc_checksum_crc32(log_sys.buf) ==
log_block_get_checksum(log_sys.buf)
&& log_block_get_hdr_no(log_sys.buf) >
@@ -3037,17 +3005,15 @@ static bool xtrabackup_copy_logfile(bool last = false)
mutex_exit(&recv_sys.mutex);
}
- log_mutex_exit();
+ mysql_mutex_unlock(&log_sys.mutex);
if (!start_lsn) {
const char *reason = recv_sys.found_corrupt_log
? "corrupt log."
: (overwritten_block
- ? "redo log block is overwritten, please increase redo log size with innodb_log_file_size parameter."
- : ((innodb_log_checksums || log_sys.log.is_encrypted())
- ? "redo log block checksum does not match."
- : "unknown reason as innodb_log_checksums is switched off and redo"
- " log is not encrypted."));
+ ? "redo log block is overwritten, please increase redo log size with innodb_log_file_size parameter."
+ : "redo log block checksum does not match.");
+
die("xtrabackup_copy_logfile() failed: %s", reason);
return true;
}
@@ -3055,7 +3021,9 @@ static bool xtrabackup_copy_logfile(bool last = false)
ut_ad(start_lsn == log_sys.log.scanned_lsn);
- msg(">> log scanned up to (" LSN_PF ")", start_lsn);
+ if (verbose) {
+ msg(">> log scanned up to (" LSN_PF ")", start_lsn);
+ }
/* update global variable*/
pthread_mutex_lock(&backup_mutex);
@@ -3091,16 +3059,16 @@ static os_thread_ret_t DECLARE_THREAD(log_copying_thread)(void*)
for (;;) {
os_event_reset(log_copying_stop);
os_event_wait_time_low(log_copying_stop,
- xtrabackup_log_copy_interval * 1000ULL,
+ xtrabackup_log_copy_interval * 1000U,
0);
if (xtrabackup_copy_logfile()) {
break;
}
- log_mutex_enter();
+ mysql_mutex_lock(&log_sys.mutex);
bool completed = metadata_to_lsn
&& metadata_to_lsn <= log_copy_scanned_lsn;
- log_mutex_exit();
+ mysql_mutex_unlock(&log_sys.mutex);
if (completed) {
break;
}
@@ -3222,7 +3190,7 @@ Initialize the appropriate datasink(s). Both local backups and streaming in the
Otherwise (i.e. when streaming in the 'tar' format) we need 2 separate datasinks
for the data stream (and don't allow parallel data copying) and for metainfo
-files (including ib_logfile0). The second datasink writes to temporary
+files (including LOG_FILE_NAME). The second datasink writes to temporary
files first, and then streams them in a serialized way when closed. */
static void
xtrabackup_init_datasinks(void)
@@ -3316,6 +3284,8 @@ void
xb_fil_io_init()
{
fil_system.create(srv_file_per_table ? 50000 : 5000);
+ fil_system.freeze_space_list = 1;
+ fil_system.space_id_reuse_warned = true;
}
static
@@ -3340,13 +3310,15 @@ xb_new_datafile(const char *name, bool is_remote)
@param[in] dirname directory name of the tablespace to open
@param[in] filname file name of the tablespece to open
@param[in] is_remote true if tablespace file is .isl
-@param[in] set_size true if we need to set tablespace size in pages explixitly.
-If this parameter is set, the size and free pages limit will not be read
-from page 0.
+@param[in] skip_node_page0 true if we don't need to read node page 0. Otherwise
+node page0 will be read, and it's size and free pages limit
+will be set from page 0, what is neccessary for checking and fixing corrupted
+pages.
*/
static void xb_load_single_table_tablespace(const char *dirname,
const char *filname,
- bool is_remote, bool set_size)
+ bool is_remote,
+ bool skip_node_page0)
{
ut_ad(srv_operation == SRV_OPERATION_BACKUP
|| srv_operation == SRV_OPERATION_RESTORE_DELTA
@@ -3398,23 +3370,18 @@ static void xb_load_single_table_tablespace(const char *dirname,
bool is_empty_file = file->exists() && file->is_empty_file();
if (err == DB_SUCCESS && file->space_id() != SRV_TMP_SPACE_ID) {
- os_offset_t n_pages = 0;
- if (set_size) {
- os_offset_t node_size = os_file_get_size(file->handle());
- ut_a(node_size != (os_offset_t) -1);
- n_pages = node_size / fil_space_t::physical_size(file->flags());
- }
- space = fil_space_create(
+ space = fil_space_t::create(
name, file->space_id(), file->flags(),
- FIL_TYPE_TABLESPACE, NULL/* TODO: crypt_data */);
+ FIL_TYPE_TABLESPACE, NULL/* TODO: crypt_data */,
+ FIL_ENCRYPTION_DEFAULT,
+ file->handle() != OS_FILE_CLOSED);
ut_a(space != NULL);
-
- space->add(file->filepath(), OS_FILE_CLOSED, ulint(n_pages),
- false, false);
- /* by opening the tablespace we forcing node and space objects
- in the cache to be populated with fields from space header */
- space->open();
+ space->add(file->filepath(),
+ skip_node_page0 ? file->detach() : pfs_os_file_t(), 0, false, false);
+ mutex_enter(&fil_system.mutex);
+ space->read_page0();
+ mutex_exit(&fil_system.mutex);
if (srv_operation == SRV_OPERATION_RESTORE_DELTA
|| xb_close_files) {
@@ -3432,7 +3399,7 @@ static void xb_load_single_table_tablespace(const char *dirname,
}
static void xb_load_single_table_tablespace(const std::string &space_name,
- bool set_size)
+ bool skip_node_page0)
{
std::string name(space_name);
bool is_remote= access((name + ".ibd").c_str(), R_OK) != 0;
@@ -3449,7 +3416,8 @@ static void xb_load_single_table_tablespace(const std::string &space_name,
ut_a(p);
*p= 0;
const char *tablename= p + 1;
- xb_load_single_table_tablespace(dbname, tablename, is_remote, set_size);
+ xb_load_single_table_tablespace(dbname, tablename, is_remote,
+ skip_node_page0);
}
#ifdef _WIN32
@@ -3586,6 +3554,9 @@ next_file:
full_path = static_cast<char*>(
ut_malloc_nokey(strlen(dirname) + strlen(ent->d_name) + 10));
+ if (!full_path) {
+ return -1;
+ }
sprintf(full_path, "%s/%s", dirname, ent->d_name);
@@ -3808,8 +3779,6 @@ static dberr_t xb_assign_undo_space_start()
{
pfs_os_file_t file;
- byte* buf;
- byte* page;
bool ret;
dberr_t error = DB_SUCCESS;
ulint space;
@@ -3824,8 +3793,8 @@ static dberr_t xb_assign_undo_space_start()
return DB_ERROR;
}
- buf = static_cast<byte*>(ut_malloc_nokey(2U << srv_page_size_shift));
- page = static_cast<byte*>(ut_align(buf, srv_page_size));
+ byte* page = static_cast<byte*>
+ (aligned_malloc(srv_page_size, srv_page_size));
if (os_file_read(IORequestRead, file, page, 0, srv_page_size)
!= DB_SUCCESS) {
@@ -3872,13 +3841,28 @@ retry:
srv_undo_space_id_start = space;
func_exit:
- ut_free(buf);
+ aligned_free(page);
ret = os_file_close(file);
ut_a(ret);
return error;
}
+/** Close all undo tablespaces while applying incremental delta */
+static void xb_close_undo_tablespaces()
+{
+ if (srv_undo_space_id_start == 0)
+ return;
+ for (ulint space_id= srv_undo_space_id_start;
+ space_id < srv_undo_space_id_start + srv_undo_tablespaces_open;
+ space_id++)
+ {
+ fil_space_t *space= fil_space_get(space_id);
+ ut_ad(space);
+ space->close();
+ }
+}
+
/****************************************************************************
Populates the tablespace memory cache by scanning for and opening data files.
@returns DB_SUCCESS or error code.*/
@@ -3941,34 +3925,20 @@ xb_load_tablespaces()
if (err != DB_SUCCESS) {
return(err);
}
- DBUG_MARIABACKUP_EVENT("after_load_tablespaces", 0);
- return(DB_SUCCESS);
-}
-/************************************************************************
-Initialize the tablespace memory cache and populate it by scanning for and
-opening data files.
-@returns DB_SUCCESS or error code.*/
-static
-dberr_t
-xb_data_files_init()
-{
- xb_fil_io_init();
+ if (srv_operation == SRV_OPERATION_RESTORE_DELTA) {
+ xb_close_undo_tablespaces();
+ }
- return(xb_load_tablespaces());
+ DBUG_MARIABACKUP_EVENT("after_load_tablespaces", 0);
+ return(DB_SUCCESS);
}
-/************************************************************************
-Destroy the tablespace memory cache. */
-static
-void
-xb_data_files_close()
+/** Destroy the tablespace memory cache. */
+static void xb_data_files_close()
{
- ut_ad(!os_thread_count);
- fil_close_all_files();
- if (buf_dblwr) {
- buf_dblwr_free();
- }
+ fil_space_t::close_all();
+ buf_dblwr.close();
}
/***********************************************************************
@@ -4004,17 +3974,17 @@ xb_filter_entry_t*
xb_add_filter(
/*========================*/
const char* name, /*!< in: name of table/database */
- hash_table_t** hash) /*!< in/out: hash to insert into */
+ hash_table_t* hash) /*!< in/out: hash to insert into */
{
xb_filter_entry_t* entry;
entry = xb_new_filter_entry(name);
- if (UNIV_UNLIKELY(*hash == NULL)) {
- *hash = hash_create(1000);
+ if (UNIV_UNLIKELY(!hash->array)) {
+ hash->create(1000);
}
HASH_INSERT(xb_filter_entry_t,
- name_hash, *hash,
+ name_hash, hash,
ut_fold_string(entry->name),
entry);
@@ -4052,8 +4022,8 @@ void
xb_register_filter_entry(
/*=====================*/
const char* name, /*!< in: name */
- hash_table_t** databases_hash,
- hash_table_t** tables_hash
+ hash_table_t* databases_hash,
+ hash_table_t* tables_hash
)
{
const char* p;
@@ -4070,8 +4040,8 @@ xb_register_filter_entry(
strncpy(dbname, name, p - name);
dbname[p - name] = 0;
- if (*databases_hash) {
- HASH_SEARCH(name_hash, (*databases_hash),
+ if (databases_hash && databases_hash->array) {
+ HASH_SEARCH(name_hash, databases_hash,
ut_fold_string(dbname),
xb_filter_entry_t*,
db_entry, (void) 0,
@@ -4270,7 +4240,7 @@ xb_filter_hash_free(hash_table_t* hash)
ulint i;
/* free the hash elements */
- for (i = 0; i < hash_get_n_cells(hash); i++) {
+ for (i = 0; i < hash->n_cells; i++) {
xb_filter_entry_t* table;
table = static_cast<xb_filter_entry_t *>
@@ -4288,8 +4258,7 @@ xb_filter_hash_free(hash_table_t* hash)
}
}
- /* free hash */
- hash_table_free(hash);
+ hash->free();
}
static void xb_regex_list_free(regex_list_t* list)
@@ -4309,75 +4278,40 @@ xb_filters_free()
xb_regex_list_free(&regex_include_list);
xb_regex_list_free(&regex_exclude_list);
- if (tables_include_hash) {
- xb_filter_hash_free(tables_include_hash);
- }
-
- if (tables_exclude_hash) {
- xb_filter_hash_free(tables_exclude_hash);
+ if (tables_include_hash.array) {
+ xb_filter_hash_free(&tables_include_hash);
}
- if (databases_include_hash) {
- xb_filter_hash_free(databases_include_hash);
+ if (tables_exclude_hash.array) {
+ xb_filter_hash_free(&tables_exclude_hash);
}
- if (databases_exclude_hash) {
- xb_filter_hash_free(databases_exclude_hash);
+ if (databases_include_hash.array) {
+ xb_filter_hash_free(&databases_include_hash);
}
-}
-
-/*********************************************************************//**
-Create log file metadata. */
-static
-void
-open_or_create_log_file(
-/*====================*/
- fil_space_t* space,
- ulint i) /*!< in: log file number in group */
-{
- char name[FN_REFLEN];
- ulint dirnamelen;
-
- os_normalize_path(srv_log_group_home_dir);
- dirnamelen = strlen(srv_log_group_home_dir);
- ut_a(dirnamelen < (sizeof name) - 10 - sizeof "ib_logfile");
- memcpy(name, srv_log_group_home_dir, dirnamelen);
-
- /* Add a path separator if needed. */
- if (dirnamelen && name[dirnamelen - 1] != OS_PATH_SEPARATOR) {
- name[dirnamelen++] = OS_PATH_SEPARATOR;
+ if (databases_exclude_hash.array) {
+ xb_filter_hash_free(&databases_exclude_hash);
}
-
- sprintf(name + dirnamelen, "%s%zu", "ib_logfile", i);
-
- ut_a(fil_validate());
-
- space->add(name, OS_FILE_CLOSED,
- ulint(srv_log_file_size >> srv_page_size_shift),
- false, false);
}
-/***********************************************************************
+#ifdef RLIMIT_NOFILE
+/**
Set the open files limit. Based on set_max_open_files().
-
+@param max_file_limit requested open files limit
@return the resulting open files limit. May be less or more than the requested
value. */
-static uint
-xb_set_max_open_files(
-/*==================*/
- uint max_file_limit) /*!<in: open files limit */
+static ulong xb_set_max_open_files(rlim_t max_file_limit)
{
-#if defined(RLIMIT_NOFILE)
struct rlimit rlimit;
- uint old_cur;
+ rlim_t old_cur;
if (getrlimit(RLIMIT_NOFILE, &rlimit)) {
goto end;
}
- old_cur = (uint) rlimit.rlim_cur;
+ old_cur = rlimit.rlim_cur;
if (rlimit.rlim_cur == RLIM_INFINITY) {
@@ -4393,8 +4327,8 @@ xb_set_max_open_files(
rlimit.rlim_cur = rlimit.rlim_max = max_file_limit;
if (setrlimit(RLIMIT_NOFILE, &rlimit)) {
-
- max_file_limit = old_cur; /* Use original value */
+ /* Use original value */
+ max_file_limit = static_cast<ulong>(old_cur);
} else {
rlimit.rlim_cur = 0; /* Safety if next call fails */
@@ -4404,16 +4338,16 @@ xb_set_max_open_files(
if (rlimit.rlim_cur) {
/* If call didn't fail */
- max_file_limit = (uint) rlimit.rlim_cur;
+ max_file_limit = rlimit.rlim_cur;
}
}
end:
- return(max_file_limit);
+ return static_cast<ulong>(max_file_limit);
+}
#else
- return(0);
+# define xb_set_max_open_files(x) 0UL
#endif
-}
static void stop_backup_threads()
{
@@ -4449,12 +4383,14 @@ static bool xtrabackup_backup_low()
{
ulint max_cp_field;
- log_mutex_enter();
+ mysql_mutex_lock(&log_sys.mutex);
if (recv_find_max_checkpoint(&max_cp_field) == DB_SUCCESS
&& log_sys.log.format != 0) {
if (max_cp_field == LOG_CHECKPOINT_1) {
- log_header_read(max_cp_field);
+ log_sys.log.read(max_cp_field,
+ {log_sys.checkpoint_buf,
+ OS_FILE_LOG_BLOCK_SIZE});
}
metadata_to_lsn = mach_read_from_8(
log_sys.checkpoint_buf + LOG_CHECKPOINT_LSN);
@@ -4464,7 +4400,7 @@ static bool xtrabackup_backup_low()
} else {
msg("Error: recv_find_max_checkpoint() failed.");
}
- log_mutex_exit();
+ mysql_mutex_unlock(&log_sys.mutex);
}
stop_backup_threads();
@@ -4482,6 +4418,23 @@ static bool xtrabackup_backup_low()
dst_log_file = NULL;
+ std::vector<uint32_t> failed_ids;
+ std::set_difference(
+ fail_undo_ids.begin(), fail_undo_ids.end(),
+ undo_trunc_ids.begin(), undo_trunc_ids.end(),
+ std::inserter(failed_ids, failed_ids.begin()));
+
+ for (uint32_t id : failed_ids) {
+ msg("mariabackup: Failed to read undo log "
+ "tablespace space id %d and there is no undo "
+ "tablespace truncation redo record.",
+ id);
+ }
+
+ if (failed_ids.size() > 0) {
+ return false;
+ }
+
if (!xtrabackup_incremental) {
safe_strcpy(metadata_type, sizeof(metadata_type),
"full-backuped");
@@ -4545,8 +4498,8 @@ static bool xtrabackup_backup_func()
}
msg("cd to %s", mysql_real_data_home);
encryption_plugin_backup_init(mysql_connection);
- msg("open files limit requested %u, set to %u",
- (uint) xb_open_files_limit,
+ msg("open files limit requested %lu, set to %lu",
+ xb_open_files_limit,
xb_set_max_open_files(xb_open_files_limit));
mysql_data_home= mysql_data_home_buff;
@@ -4558,6 +4511,7 @@ static bool xtrabackup_backup_func()
srv_operation = SRV_OPERATION_BACKUP;
log_file_op = backup_file_op;
+ undo_space_trunc = backup_undo_trunc;
metadata_to_lsn = 0;
/* initialize components */
@@ -4566,6 +4520,7 @@ fail:
metadata_to_lsn = log_copying_running;
stop_backup_threads();
log_file_op = NULL;
+ undo_space_trunc = NULL;
if (dst_log_file) {
ds_close(dst_log_file);
dst_log_file = NULL;
@@ -4592,34 +4547,24 @@ fail:
especially in 64-bit
computers */
}
-
+ srv_thread_pool_init();
sync_check_init();
- ut_d(sync_check_enable());
/* Reset the system variables in the recovery module. */
- recv_sys_var_init();
trx_pool_init();
-
- ut_crc32_init();
- crc_init();
recv_sys.create();
xb_filters_init();
xb_fil_io_init();
- srv_n_file_io_threads = srv_n_read_io_threads;
- os_aio_init(srv_n_read_io_threads, srv_n_write_io_threads,
- SRV_MAX_N_PENDING_SYNC_IOS);
+ if (os_aio_init()) {
+ msg("Error: cannot initialize AIO subsystem");
+ goto fail;
+ }
log_sys.create();
- log_sys.log.create(srv_n_log_files);
- fil_space_t* space = fil_space_create(
- "innodb_redo_log", SRV_LOG_SPACE_FIRST_ID, 0,
- FIL_TYPE_LOG, NULL);
-
- for (ulint i = 0; i < srv_n_log_files; i++) {
- open_or_create_log_file(space, i);
- }
+ log_sys.log.create();
+ log_sys.log.open_file(get_log_file_path());
/* create extra LSN dir if it does not exist. */
if (xtrabackup_extra_lsndir
@@ -4638,47 +4583,44 @@ fail:
goto fail;
}
+
{
/* definition from recv_recovery_from_checkpoint_start() */
ulint max_cp_field;
- /* start back ground thread to copy newer log */
- os_thread_id_t log_copying_thread_id;
-
/* get current checkpoint_lsn */
/* Look for the latest checkpoint from any of the log groups */
- log_mutex_enter();
+ mysql_mutex_lock(&log_sys.mutex);
reread_log_header:
dberr_t err = recv_find_max_checkpoint(&max_cp_field);
- if (err != DB_SUCCESS) {
+ if (err != DB_SUCCESS)
msg("Error: cannot read redo log header");
- log_mutex_exit();
- goto fail;
- }
-
- if (log_sys.log.format == 0) {
+ else if (log_sys.log.format == 0) {
msg("Error: cannot process redo log before MariaDB 10.2.2");
- log_mutex_exit();
- goto fail;
+ err = DB_ERROR;
}
+ else {
+ byte* buf = log_sys.checkpoint_buf;
+ checkpoint_lsn_start = log_sys.log.get_lsn();
+ checkpoint_no_start = log_sys.next_checkpoint_no;
- const byte* buf = log_sys.checkpoint_buf;
- checkpoint_lsn_start = log_sys.log.get_lsn();
- checkpoint_no_start = log_sys.next_checkpoint_no;
-
- log_header_read(max_cp_field);
+ log_sys.log.read(max_cp_field, {buf, OS_FILE_LOG_BLOCK_SIZE});
- if (checkpoint_no_start != mach_read_from_8(buf + LOG_CHECKPOINT_NO)
- || checkpoint_lsn_start
- != mach_read_from_8(buf + LOG_CHECKPOINT_LSN)
- || log_sys.log.get_lsn_offset()
- != mach_read_from_8(buf + LOG_CHECKPOINT_OFFSET))
- goto reread_log_header;
+ if (checkpoint_no_start
+ != mach_read_from_8(buf + LOG_CHECKPOINT_NO)
+ || checkpoint_lsn_start
+ != mach_read_from_8(buf + LOG_CHECKPOINT_LSN)
+ || log_sys.log.get_lsn_offset()
+ != mach_read_from_8(buf + LOG_CHECKPOINT_OFFSET))
+ goto reread_log_header;
+ }
+ mysql_mutex_unlock(&log_sys.mutex);
- log_mutex_exit();
+ if (err != DB_SUCCESS)
+ goto fail;
xtrabackup_init_datasinks();
@@ -4688,16 +4630,17 @@ reread_log_header:
/* open the log file */
memset(&stat_info, 0, sizeof(MY_STAT));
- dst_log_file = ds_open(ds_redo, "ib_logfile0", &stat_info);
+ dst_log_file = ds_open(ds_redo, LOG_FILE_NAME, &stat_info);
if (dst_log_file == NULL) {
- msg("Error: failed to open the target stream for "
- "'ib_logfile0'.");
+ msg("Error: failed to open the target stream for '%s'.",
+ LOG_FILE_NAME);
goto fail;
}
/* label it */
- byte MY_ALIGNED(OS_FILE_LOG_BLOCK_SIZE) log_hdr_buf[LOG_FILE_HDR_SIZE];
- memset(log_hdr_buf, 0, sizeof log_hdr_buf);
+ byte* log_hdr_buf = static_cast<byte*>(
+ aligned_malloc(LOG_FILE_HDR_SIZE, OS_FILE_LOG_BLOCK_SIZE));
+ memset(log_hdr_buf, 0, LOG_FILE_HDR_SIZE);
byte *log_hdr_field = log_hdr_buf;
mach_write_to_4(LOG_HEADER_FORMAT + log_hdr_field, log_sys.log.format);
@@ -4712,7 +4655,7 @@ reread_log_header:
log_hdr_field +=
(log_sys.next_checkpoint_no & 1) ? LOG_CHECKPOINT_2 : LOG_CHECKPOINT_1;
/* The least significant bits of LOG_CHECKPOINT_OFFSET must be
- stored correctly in the copy of the ib_logfile. The most significant
+ stored correctly in the copy of the LOG_FILE_NAME. The most significant
bits, which identify the start offset of the log block in the file,
we did choose freely, as LOG_FILE_HDR_SIZE. */
ut_ad(!((log_sys.log.get_lsn() ^ checkpoint_lsn_start)
@@ -4726,22 +4669,21 @@ reread_log_header:
log_block_calc_checksum_crc32(log_hdr_field));
/* Write log header*/
- if (ds_write(dst_log_file, log_hdr_buf, sizeof(log_hdr_buf))) {
+ if (ds_write(dst_log_file, log_hdr_buf, LOG_FILE_HDR_SIZE)) {
msg("error: write to logfile failed");
+ aligned_free(log_hdr_buf);
goto fail;
}
+ aligned_free(log_hdr_buf);
log_copying_running = true;
/* start io throttle */
if(xtrabackup_throttle) {
- os_thread_id_t io_watching_thread_id;
-
io_ticket = xtrabackup_throttle;
wait_throttle = os_event_create(0);
io_watching_thread_running = true;
- os_thread_create(io_watching_thread, NULL,
- &io_watching_thread_id);
+ os_thread_create(io_watching_thread);
}
/* Populate fil_system with tablespaces to copy */
@@ -4757,7 +4699,6 @@ fail_before_log_copying_thread_start:
/* copy log file by current position */
log_copy_scanned_lsn = checkpoint_lsn_start;
recv_sys.recovered_lsn = log_copy_scanned_lsn;
- log_optimized_ddl_op = backup_optimized_ddl_op;
if (xtrabackup_copy_logfile())
goto fail_before_log_copying_thread_start;
@@ -4765,7 +4706,7 @@ fail_before_log_copying_thread_start:
DBUG_MARIABACKUP_EVENT("before_innodb_log_copy_thread_started",0);
log_copying_stop = os_event_create(0);
- os_thread_create(log_copying_thread, NULL, &log_copying_thread_id);
+ os_thread_create(log_copying_thread);
/* FLUSH CHANGED_PAGE_BITMAPS call */
if (!flush_changed_page_bitmaps()) {
@@ -4806,8 +4747,8 @@ fail_before_log_copying_thread_start:
data_threads[i].count = &count;
data_threads[i].count_mutex = &count_mutex;
data_threads[i].corrupted_pages = &corrupted_pages;
- os_thread_create(data_copy_thread_func, data_threads + i,
- &data_threads[i].id);
+ data_threads[i].id = os_thread_create(data_copy_thread_func,
+ data_threads + i);
}
/* Wait for threads to exit */
@@ -4871,6 +4812,7 @@ fail_before_log_copying_thread_start:
innodb_shutdown();
log_file_op = NULL;
+ undo_space_trunc = NULL;
pthread_mutex_destroy(&backup_mutex);
pthread_cond_destroy(&scanned_lsn_cond);
if (!corrupted_pages.empty()) {
@@ -4909,7 +4851,6 @@ void backup_fix_ddl(CorruptedPages &corrupted_pages)
/* Disable further DDL on backed up tables (only needed for --no-lock).*/
pthread_mutex_lock(&backup_mutex);
log_file_op = backup_file_op_fail;
- log_optimized_ddl_op = backup_optimized_ddl_op_fail;
pthread_mutex_unlock(&backup_mutex);
DBUG_MARIABACKUP_EVENT("backup_fix_ddl",0);
@@ -4927,38 +4868,16 @@ void backup_fix_ddl(CorruptedPages &corrupted_pages)
continue;
}
- bool has_optimized_ddl =
- ddl_tracker.optimized_ddl.find(id) != ddl_tracker.optimized_ddl.end();
-
if (ddl_tracker.id_to_name.find(id) == ddl_tracker.id_to_name.end()) {
- if (has_optimized_ddl) {
- new_tables.insert(name);
- }
continue;
}
/* tablespace was affected by DDL. */
const std::string new_name = ddl_tracker.id_to_name[id];
if (new_name != name) {
- if (has_optimized_ddl) {
- /* table was renamed, but we need a full copy
- of it because of optimized DDL. We emulate a drop/create.*/
- dropped_tables.insert(name);
- if (opt_log_innodb_page_corruption)
- corrupted_pages.drop_space(id);
- new_tables.insert(new_name);
- } else {
- /* Renamed, and no optimized DDL*/
- renamed_tables[name] = new_name;
- if (opt_log_innodb_page_corruption)
- corrupted_pages.rename_space(id, new_name);
- }
- } else if (has_optimized_ddl) {
- /* Table was recreated, or optimized DDL ran.
- In both cases we need a full copy in the backup.*/
- new_tables.insert(name);
+ renamed_tables[name] = new_name;
if (opt_log_innodb_page_corruption)
- corrupted_pages.drop_space(id);
+ corrupted_pages.rename_space(id, new_name);
}
}
@@ -5089,8 +5008,6 @@ xb_space_create_file(
pfs_os_file_t* file) /*!<out: file handle */
{
bool ret;
- byte* buf;
- byte* page;
*file = os_file_create_simple_no_error_handling(
0, path, OS_FILE_CREATE, OS_FILE_READ_WRITE, false, &ret);
@@ -5109,9 +5026,9 @@ xb_space_create_file(
return ret;
}
- buf = static_cast<byte *>(malloc(3U << srv_page_size_shift));
/* Align the memory for file i/o if we might have O_DIRECT set */
- page = static_cast<byte *>(ut_align(buf, srv_page_size));
+ byte* page = static_cast<byte*>(aligned_malloc(2 * srv_page_size,
+ srv_page_size));
memset(page, '\0', srv_page_size);
@@ -5122,7 +5039,7 @@ xb_space_create_file(
if (!zip_size) {
buf_flush_init_for_writing(
- NULL, page, NULL, 0,
+ NULL, page, NULL,
fil_space_t::full_crc32(flags));
ret = os_file_write(IORequestWrite, path, *file, page, 0,
@@ -5134,18 +5051,19 @@ xb_space_create_file(
fprintf(stderr, "zip_size = " ULINTPF "\n", zip_size);
#ifdef UNIV_DEBUG
- page_zip.m_start =
+ page_zip.m_start = 0;
#endif /* UNIV_DEBUG */
- page_zip.m_end = page_zip.m_nonempty =
- page_zip.n_blobs = 0;
+ page_zip.m_end = 0;
+ page_zip.m_nonempty = 0;
+ page_zip.n_blobs = 0;
- buf_flush_init_for_writing(NULL, page, &page_zip, 0, false);
+ buf_flush_init_for_writing(NULL, page, &page_zip, false);
ret = os_file_write(IORequestWrite, path, *file,
page_zip.data, 0, zip_size);
}
- free(buf);
+ aligned_free(page);
if (ret != DB_SUCCESS) {
msg("mariabackup: could not write the first page to %s",
@@ -5223,7 +5141,23 @@ xb_delta_open_matching_space(
return file;
}
- log_mutex_enter();
+ if (!info.space_id && fil_system.sys_space) {
+ fil_node_t *node
+ = UT_LIST_GET_FIRST(fil_system.sys_space->chain);
+ for (; node; node = UT_LIST_GET_NEXT(chain, node)) {
+ if (!strcmp(node->name, real_name)) {
+ break;
+ }
+ }
+ if (node && node->handle != OS_FILE_CLOSED) {
+ *success = true;
+ return node->handle;
+ }
+ msg("mariabackup: Cannot find file %s\n", real_name);
+ return OS_FILE_CLOSED;
+ }
+
+ mysql_mutex_lock(&log_sys.mutex);
if (!fil_is_user_tablespace_id(info.space_id)) {
found:
/* open the file and return its handle */
@@ -5236,7 +5170,7 @@ found:
msg("mariabackup: Cannot open file %s\n", real_name);
}
exit:
- log_mutex_exit();
+ mysql_mutex_unlock(&log_sys.mutex);
return file;
}
@@ -5247,7 +5181,7 @@ exit:
table->name = ((char*)table) + sizeof(xb_filter_entry_t);
strcpy(table->name, dest_space_name);
- HASH_INSERT(xb_filter_entry_t, name_hash, inc_dir_tables_hash,
+ HASH_INSERT(xb_filter_entry_t, name_hash, &inc_dir_tables_hash,
ut_fold_string(table->name), table);
mutex_enter(&fil_system.mutex);
@@ -5320,8 +5254,9 @@ exit:
ut_ad(fil_space_t::zip_size(flags) == info.zip_size);
ut_ad(fil_space_t::physical_size(flags) == info.page_size);
- if (fil_space_create(dest_space_name, info.space_id, flags,
- FIL_TYPE_TABLESPACE, 0)) {
+ if (fil_space_t::create(dest_space_name, info.space_id, flags,
+ FIL_TYPE_TABLESPACE, 0, FIL_ENCRYPTION_DEFAULT,
+ true)) {
*success = xb_space_create_file(real_name, info.space_id,
flags, &file);
} else {
@@ -5358,8 +5293,7 @@ xtrabackup_apply_delta(
xb_delta_info_t info(srv_page_size, 0, SRV_TMP_SPACE_ID);
ulint page_size;
ulint page_size_shift;
- byte* incremental_buffer_base = NULL;
- byte* incremental_buffer;
+ byte* incremental_buffer = NULL;
size_t offset;
@@ -5427,11 +5361,8 @@ xtrabackup_apply_delta(
posix_fadvise(dst_file, 0, 0, POSIX_FADV_DONTNEED);
/* allocate buffer for incremental backup (4096 pages) */
- incremental_buffer_base = static_cast<byte *>
- (malloc((page_size / 4 + 1) * page_size));
incremental_buffer = static_cast<byte *>
- (ut_align(incremental_buffer_base,
- page_size));
+ (aligned_malloc(page_size / 4 * page_size, page_size));
msg("Applying %s to %s...", src_path, dst_path);
@@ -5518,7 +5449,7 @@ xtrabackup_apply_delta(
space->chain);
bool fail = !strcmp(n->name, dst_path)
&& !fil_space_extend(
- space, (ulint)n_pages);
+ space, uint32_t(n_pages));
if (fail) goto error;
}
}
@@ -5540,20 +5471,20 @@ xtrabackup_apply_delta(
incremental_buffers++;
}
- free(incremental_buffer_base);
+ aligned_free(incremental_buffer);
if (src_file != OS_FILE_CLOSED) {
os_file_close(src_file);
os_file_delete(0,src_path);
}
- if (dst_file != OS_FILE_CLOSED)
+ if (dst_file != OS_FILE_CLOSED && info.space_id)
os_file_close(dst_file);
return TRUE;
error:
- free(incremental_buffer_base);
+ aligned_free(incremental_buffer);
if (src_file != OS_FILE_CLOSED)
os_file_close(src_file);
- if (dst_file != OS_FILE_CLOSED)
+ if (dst_file != OS_FILE_CLOSED && info.space_id)
os_file_close(dst_file);
msg("Error: xtrabackup_apply_delta(): "
"failed to apply %s to %s.\n", src_path, dst_path);
@@ -5671,7 +5602,7 @@ static ibool prepare_handle_new_files(const char *data_home_dir,
(malloc(sizeof(xb_filter_entry_t) + table_name.size() + 1));
table->name = ((char*)table) + sizeof(xb_filter_entry_t);
strcpy(table->name, table_name.c_str());
- HASH_INSERT(xb_filter_entry_t, name_hash, inc_dir_tables_hash,
+ HASH_INSERT(xb_filter_entry_t, name_hash, &inc_dir_tables_hash,
ut_fold_string(table->name), table);
}
@@ -5697,7 +5628,7 @@ rm_if_not_found(
/* Truncate ".ibd" */
name[strlen(name) - 4] = '\0';
- HASH_SEARCH(name_hash, inc_dir_tables_hash, ut_fold_string(name),
+ HASH_SEARCH(name_hash, &inc_dir_tables_hash, ut_fold_string(name),
xb_filter_entry_t*,
table, (void) 0,
!strcmp(table->name, name));
@@ -5980,12 +5911,10 @@ static bool xtrabackup_prepare_func(char** argv)
fil_path_to_mysql_datadir = ".";
ut_ad(xtrabackup_incremental == xtrabackup_incremental_dir);
- if (xtrabackup_incremental) {
- inc_dir_tables_hash = hash_create(1000);
- ut_ad(inc_dir_tables_hash);
- }
+ if (xtrabackup_incremental)
+ inc_dir_tables_hash.create(1000);
- msg("open files limit requested %u, set to %u",
+ msg("open files limit requested %u, set to %lu",
(uint) xb_open_files_limit,
xb_set_max_open_files(xb_open_files_limit));
@@ -6052,13 +5981,11 @@ static bool xtrabackup_prepare_func(char** argv)
}
srv_max_n_threads = 1000;
- srv_undo_logs = 1;
srv_n_purge_threads = 1;
xb_filters_init();
srv_log_group_home_dir = NULL;
- srv_thread_concurrency = 1;
if (xtrabackup_incremental) {
srv_operation = SRV_OPERATION_RESTORE_DELTA;
@@ -6068,20 +5995,19 @@ static bool xtrabackup_prepare_func(char** argv)
}
sync_check_init();
- ut_d(sync_check_enable());
- ut_crc32_init();
recv_sys.create();
log_sys.create();
- recv_recovery_on = true;
+ recv_sys.recovery_on = true;
- dberr_t err = xb_data_files_init();
- if (err != DB_SUCCESS) {
+ xb_fil_io_init();
+ if (dberr_t err = xb_load_tablespaces()) {
msg("mariabackup: error: xb_data_files_init() failed "
"with error %s\n", ut_strerr(err));
goto error_cleanup;
}
- ok = xtrabackup_apply_deltas();
+ ok = fil_system.sys_space->open(false)
+ && xtrabackup_apply_deltas();
xb_data_files_close();
@@ -6092,7 +6018,7 @@ static bool xtrabackup_prepare_func(char** argv)
xb_process_datadir("./", ".ibd", rm_if_not_found);
}
- xb_filter_hash_free(inc_dir_tables_hash);
+ xb_filter_hash_free(&inc_dir_tables_hash);
fil_system.close();
innodb_free_param();
@@ -6101,21 +6027,14 @@ static bool xtrabackup_prepare_func(char** argv)
if (!ok) goto error_cleanup;
}
- srv_operation=
- xtrabackup_export
- ? SRV_OPERATION_RESTORE_EXPORT
- : (xtrabackup_rollback_xa ? SRV_OPERATION_RESTORE_ROLLBACK_XA
- : SRV_OPERATION_RESTORE);
+ srv_operation = xtrabackup_export
+ ? SRV_OPERATION_RESTORE_EXPORT : SRV_OPERATION_RESTORE;
- if (innodb_init_param()) {
+ if (innodb_init_param()) {
goto error_cleanup;
}
- /* increase IO threads */
- if (srv_n_file_io_threads < 10) {
- srv_n_read_io_threads = 4;
- srv_n_write_io_threads = 4;
- }
+ fil_system.freeze_space_list = 0;
msg("Starting InnoDB instance for recovery.");
@@ -6128,13 +6047,12 @@ static bool xtrabackup_prepare_func(char** argv)
srv_max_dirty_pages_pct_lwm = srv_max_buf_pool_modified_pct;
}
- if (xtrabackup_rollback_xa)
- srv_fast_shutdown= 0;
-
if (innodb_init()) {
goto error_cleanup;
}
+ ut_ad(!fil_system.freeze_space_list);
+
corrupted_pages.read_from_file(MB_CORRUPTED_PAGES_FILE);
if (xtrabackup_incremental)
{
@@ -6159,43 +6077,6 @@ static bool xtrabackup_prepare_func(char** argv)
else
corrupted_pages.print_to_file(MB_CORRUPTED_PAGES_FILE);
- if (xtrabackup_rollback_xa)
- {
- /* Please do not merge MDEV-21168 fix in 10.5+ */
- compile_time_assert(MYSQL_VERSION_ID < 10 * 10000 + 5 * 100);
- XID *xid_list=
- (XID *) my_malloc(MAX_XID_LIST_SIZE * sizeof(XID), MYF(0));
- if (!xid_list)
- {
- msg("Can't allocate %i bytes for XID's list", MAX_XID_LIST_SIZE);
- ok= false;
- goto error_cleanup;
- }
- int got;
- ut_ad(recv_no_log_write);
- ut_d(recv_no_log_write= false);
- while ((got= trx_recover_for_mysql(xid_list, MAX_XID_LIST_SIZE)) > 0)
- {
- for (int i= 0; i < got; i++)
- {
-#ifdef DBUG_TRACE
- int rc=
-#endif
- innobase_rollback_by_xid(NULL, xid_list + i);
-#ifdef DBUG_TRACE
- if (rc == 0)
- {
- char buf[XIDDATASIZE * 4 + 6]; // see xid_to_str
- DBUG_PRINT("info",
- ("rollback xid %s", xid_to_str(buf, xid_list[i])));
- }
-#endif
- }
- }
- ut_d(recv_no_log_write= true);
- my_free(xid_list);
- }
-
if (ok) {
msg("Last binlog file %s, position %lld",
trx_sys.recovered_binlog_filename,
@@ -6203,32 +6084,19 @@ static bool xtrabackup_prepare_func(char** argv)
}
/* Check whether the log is applied enough or not. */
- if ((srv_start_lsn || fil_space_get(SRV_LOG_SPACE_FIRST_ID))
- && srv_start_lsn < target_lsn) {
+ if (recv_sys.recovered_lsn && recv_sys.recovered_lsn < target_lsn) {
msg("mariabackup: error: "
"The log was only applied up to LSN " LSN_PF
", instead of " LSN_PF,
- srv_start_lsn, target_lsn);
+ recv_sys.recovered_lsn, target_lsn);
ok = false;
}
#ifdef WITH_WSREP
else if (ok) xb_write_galera_info(xtrabackup_incremental);
#endif
- if (xtrabackup_rollback_xa)
- {
- // See innobase_end() and thd_destructor_proxy()
- while (srv_fast_shutdown == 0 &&
- (trx_sys.any_active_transactions() ||
- THD_count::value() > srv_n_purge_threads + 1))
- os_thread_sleep(1000);
-
- srv_shutdown_bg_undo_sources();
- srv_purge_shutdown();
- buf_flush_sync_all_buf_pools();
- }
-
innodb_shutdown();
+
innodb_free_param();
/* output to metadata file */
@@ -6415,22 +6283,28 @@ static bool check_all_privileges()
}
/* KILL ... */
- if ((!opt_no_lock && (opt_kill_long_queries_timeout || opt_lock_ddl_per_table))
- /* START SLAVE SQL_THREAD */
- /* STOP SLAVE SQL_THREAD */
- || opt_safe_slave_backup) {
+ if (!opt_no_lock && (opt_kill_long_queries_timeout || opt_kill_long_query_type)) {
check_result |= check_privilege(
granted_privileges,
- "SUPER", "*", "*",
+ "CONNECTION ADMIN", "*", "*",
+ PRIVILEGE_WARNING);
+ }
+
+ /* START SLAVE SQL_THREAD */
+ /* STOP SLAVE SQL_THREAD */
+ if (opt_safe_slave_backup) {
+ check_result |= check_privilege(
+ granted_privileges,
+ "REPLICATION SLAVE ADMIN", "*", "*",
PRIVILEGE_WARNING);
}
/* SHOW MASTER STATUS */
/* SHOW SLAVE STATUS */
if (opt_galera_info || opt_slave_info
- || (opt_no_lock && opt_safe_slave_backup)) {
+ || opt_safe_slave_backup) {
check_result |= check_privilege(granted_privileges,
- "REPLICATION CLIENT", "*", "*",
+ "SLAVE MONITOR", "*", "*",
PRIVILEGE_WARNING);
}
@@ -6554,7 +6428,7 @@ void handle_options(int argc, char **argv, char ***argv_server,
/* Setup some variables for Innodb.*/
srv_operation = SRV_OPERATION_RESTORE;
- files_charset_info = &my_charset_utf8_general_ci;
+ files_charset_info = &my_charset_utf8mb3_general_ci;
setup_error_messages();
@@ -6756,9 +6630,10 @@ void handle_options(int argc, char **argv, char ***argv_server,
if (opt_password)
{
- char *argument= opt_password;
- char *start= argument;
- opt_password= my_strdup(opt_password, MYF(MY_FAE));
+ char *argument= (char*) opt_password;
+ char *start= (char*) opt_password;
+ opt_password= my_strdup(PSI_NOT_INSTRUMENTED, opt_password,
+ MYF(MY_FAE));
while (*argument)
*argument++= 'x'; // Destroy argument
if (*start)
@@ -6851,9 +6726,6 @@ int main(int argc, char **argv)
init_signals();
MY_INIT(argv[0]);
- pthread_key_create(&THR_THD, NULL);
- my_pthread_setspecific_ptr(THR_THD, NULL);
-
xb_regex_init();
capture_tool_command(argc, argv);
@@ -6863,7 +6735,7 @@ int main(int argc, char **argv)
die("mysql_server_init() failed");
}
- system_charset_info = &my_charset_utf8_general_ci;
+ system_charset_info = &my_charset_utf8mb3_general_ci;
key_map_full.set_all();
logger.init_base();
@@ -6880,9 +6752,12 @@ int main(int argc, char **argv)
DBUG_SET(dbug_option);
}
#endif
+ /* Main functions for library */
+ init_thr_timer(5);
int status = main_low(server_defaults);
+ end_thr_timer();
backup_cleanup();
if (innobackupex_mode) {
@@ -6899,9 +6774,6 @@ int main(int argc, char **argv)
}
#endif
- if (THR_THD)
- (void) pthread_key_delete(THR_THD);
-
logger.cleanup_base();
cleanup_errmsgs();
free_error_messages();
@@ -7057,10 +6929,10 @@ static int main_low(char** argv)
incremental_lsn);
}
- if (xtrabackup_export && innobase_file_per_table == FALSE) {
+ if (xtrabackup_export && !srv_file_per_table) {
msg("mariabackup: auto-enabling --innodb-file-per-table due to "
"the --export option");
- innobase_file_per_table = TRUE;
+ srv_file_per_table = TRUE;
}
/* cannot execute both for now */
@@ -7078,6 +6950,20 @@ static int main_low(char** argv)
}
}
+ ut_ad(!field_ref_zero);
+ if (auto b = aligned_malloc(UNIV_PAGE_SIZE_MAX, 4096)) {
+ field_ref_zero = static_cast<byte*>(
+ memset_aligned<4096>(b, 0, UNIV_PAGE_SIZE_MAX));
+ } else {
+ msg("Can't allocate memory for field_ref_zero");
+ return EXIT_FAILURE;
+ }
+
+ auto _ = make_scope_exit([]() {
+ aligned_free(const_cast<byte*>(field_ref_zero));
+ field_ref_zero = nullptr;
+ });
+
/* --backup */
if (xtrabackup_backup && !xtrabackup_backup_func()) {
return(EXIT_FAILURE);
@@ -7121,6 +7007,11 @@ static int get_exepath(char *buf, size_t size, const char *argv0)
buf[ret] = 0;
return 0;
}
+#elif defined(__FreeBSD__)
+ int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1};
+ if (sysctl(mib, 4, buf, &size, NULL, 0) == 0) {
+ return 0;
+ }
#endif
return my_realpath(buf, argv0, 0);
diff --git a/extra/mariabackup/xtrabackup.h b/extra/mariabackup/xtrabackup.h
index 854456c3afd..394ea9ed87c 100644
--- a/extra/mariabackup/xtrabackup.h
+++ b/extra/mariabackup/xtrabackup.h
@@ -27,6 +27,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
#include "changed_page_bitmap.h"
#include <set>
+#define XB_TOOL_NAME "mariadb-backup"
+
struct xb_delta_info_t
{
xb_delta_info_t(ulint page_size, ulint zip_size, ulint space_id)
@@ -42,8 +44,8 @@ class CorruptedPages
public:
CorruptedPages();
~CorruptedPages();
- void add_page(const char *file_name, ulint space_id, ulint page_no);
- bool contains(ulint space_id, ulint page_no) const;
+ void add_page(const char *file_name, ulint space_id, unsigned page_no);
+ bool contains(ulint space_id, unsigned page_no) const;
void drop_space(ulint space_id);
void rename_space(ulint space_id, const std::string &new_name);
bool print_to_file(const char *file_name) const;
@@ -52,11 +54,11 @@ public:
void zero_out_free_pages();
private:
- void add_page_no_lock(const char *space_name, ulint space_id, ulint page_no,
- bool convert_space_name);
+ void add_page_no_lock(const char *space_name, ulint space_id,
+ unsigned page_no, bool convert_space_name);
struct space_info_t {
std::string space_name;
- std::set<ulint> pages;
+ std::set<unsigned> pages;
};
typedef std::map<ulint, space_info_t> container_t;
mutable pthread_mutex_t m_mutex;
@@ -144,7 +146,7 @@ extern char *opt_incremental_history_name;
extern char *opt_incremental_history_uuid;
extern char *opt_user;
-extern char *opt_password;
+extern const char *opt_password;
extern char *opt_host;
extern char *opt_defaults_group;
extern char *opt_socket;
diff --git a/extra/my_print_defaults.c b/extra/my_print_defaults.c
index 9880d4d60d7..83eb0bacf08 100644
--- a/extra/my_print_defaults.c
+++ b/extra/my_print_defaults.c
@@ -104,10 +104,11 @@ static void usage()
static my_bool
-get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
- char *argument __attribute__((unused)))
+get_one_option(const struct my_option *opt __attribute__((unused)),
+ const char *argument __attribute__((unused)),
+ const char *filename)
{
- switch (optid) {
+ switch (opt->id) {
case 'c':
opt_defaults_file_used= 1;
break;
@@ -140,30 +141,50 @@ static int get_options(int *argc,char ***argv)
return 0;
}
+static char *make_args(const char *s1, const char *s2)
+{
+ char *s= malloc(strlen(s1) + strlen(s2) + 1);
+ strmov(strmov(s, s1), s2);
+ return s;
+}
int main(int argc, char **argv)
{
- int count, error, args_used;
+ int count= 0, error, no_defaults= 0;
char **load_default_groups= 0, *tmp_arguments[6];
char **argument, **arguments, **org_argv;
- char *defaults, *extra_defaults, *group_suffix;
int nargs, i= 0;
MY_INIT(argv[0]);
org_argv= argv;
- args_used= get_defaults_options(argc, argv, &defaults, &extra_defaults,
- &group_suffix);
-
- /* Copy defaults-xxx arguments & program name */
- count=args_used+1;
+ if (*argv && !strcmp(*argv, "--no-defaults"))
+ {
+ argv++;
+ ++count;
+ no_defaults= 1;
+ }
+ /* Copy program name and --no-defaults if present*/
arguments= tmp_arguments;
- memcpy((char*) arguments, (char*) org_argv, count * sizeof(*org_argv));
+ memcpy((char*) arguments, (char*) org_argv, (++count)*sizeof(*org_argv));
arguments[count]= 0;
/* Check out the args */
if (get_options(&argc,&argv))
cleanup_and_exit(1);
+ if (!no_defaults)
+ {
+ if (opt_defaults_file_used)
+ arguments[count++]= make_args("--defaults-file=", config_file);
+ if (my_defaults_extra_file)
+ arguments[count++]= make_args("--defaults-extra-file=",
+ my_defaults_extra_file);
+ if (my_defaults_group_suffix)
+ arguments[count++]= make_args("--defaults-group-suffix=",
+ my_defaults_group_suffix);
+ arguments[count]= 0;
+ }
+
nargs= argc + 1;
if (opt_mysqld)
nargs+= array_elements(mysqld_groups);
@@ -171,7 +192,8 @@ int main(int argc, char **argv)
if (nargs < 2)
usage();
- load_default_groups=(char**) my_malloc(nargs*sizeof(char*), MYF(MY_WME));
+ load_default_groups=(char**) my_malloc(PSI_NOT_INSTRUMENTED,
+ nargs*sizeof(char*), MYF(MY_WME));
if (!load_default_groups)
exit(1);
if (opt_mysqld)
@@ -200,8 +222,7 @@ int main(int argc, char **argv)
}
for (argument= arguments+1 ; *argument ; argument++)
- if (!my_getopt_is_args_separator(*argument)) /* skip arguments separator */
- puts(*argument);
+ puts(*argument);
my_free(load_default_groups);
free_defaults(arguments);
my_end(0);
diff --git a/extra/mysql_waitpid.c b/extra/mysql_waitpid.c
index e19f92261db..8f2a5c99395 100644
--- a/extra/mysql_waitpid.c
+++ b/extra/mysql_waitpid.c
@@ -44,10 +44,11 @@ static struct my_option my_long_options[] =
};
static my_bool
-get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
- char *argument __attribute__((unused)))
+get_one_option(const struct my_option *opt,
+ const char *argument __attribute__((unused)),
+ const char *filename __attribute__((unused)))
{
- switch(optid) {
+ switch(opt->id) {
case 'V':
printf("%s version %s by Jani Tolonen\n", progname, VER);
exit(0);
diff --git a/extra/perror.c b/extra/perror.c
index afbd734ce16..ee6e362e06b 100644
--- a/extra/perror.c
+++ b/extra/perror.c
@@ -96,10 +96,11 @@ static void usage(void)
static my_bool
-get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
- char *argument __attribute__((unused)))
+get_one_option(const struct my_option *opt,
+ const char *argument __attribute__((unused)),
+ const char *filename __attribute__((unused)))
{
- switch (optid) {
+ switch (opt->id) {
case 's':
verbose=0;
break;
@@ -262,6 +263,7 @@ int main(int argc,char *argv[])
const char *msg;
const char *name;
char *unknown_error = 0;
+ char unknow_aix[30];
#if defined(_WIN32)
my_bool skip_win_message= 0;
#endif
@@ -319,6 +321,9 @@ int main(int argc,char *argv[])
code=atoi(*argv);
msg = strerror(code);
+ // On AIX, unknow error return " Error <CODE> occurred."
+ snprintf(unknow_aix, sizeof(unknow_aix), " Error %3d occurred.", code);
+
/*
We don't print the OS error message if it is the same as the
unknown_error message we retrieved above, or it starts with
@@ -329,11 +334,18 @@ int main(int argc,char *argv[])
(const uchar*) "Unknown Error", 13) &&
(!unknown_error || strcmp(msg, unknown_error)))
{
- found= 1;
- if (verbose)
- printf("OS error code %3d: %s\n", code, msg);
- else
- puts(msg);
+#ifdef _AIX
+ if (!strcmp(msg, unknow_aix))
+ {
+#endif
+ found= 1;
+ if (verbose)
+ printf("OS error code %3d: %s\n", code, msg);
+ else
+ puts(msg);
+#ifdef _AIX
+ }
+#endif
}
if ((msg= get_ha_error_msg(code)))
{
diff --git a/extra/replace.c b/extra/replace.c
index a5c470b0b68..8b20f812be0 100644
--- a/extra/replace.c
+++ b/extra/replace.c
@@ -64,7 +64,7 @@ typedef struct st_pointer_array { /* when using array-strings */
#define LAST_CHAR_CODE 259
typedef struct st_replace {
- my_bool found;
+ uint8 found;
struct st_replace *next[256];
} REPLACE;
@@ -256,12 +256,12 @@ static int insert_pointer_name(reg1 POINTER_ARRAY *pa,char * name)
if (! pa->typelib.count)
{
if (!(pa->typelib.type_names=(const char **)
- my_malloc(((PC_MALLOC-MALLOC_OVERHEAD)/
+ my_malloc(PSI_NOT_INSTRUMENTED, ((PC_MALLOC-MALLOC_OVERHEAD)/
(sizeof(char *)+sizeof(*pa->flag))*
(sizeof(char *)+sizeof(*pa->flag))),MYF(MY_WME))))
DBUG_RETURN(-1);
- if (!(pa->str= (uchar*) my_malloc((uint) (PS_MALLOC-MALLOC_OVERHEAD),
- MYF(MY_WME))))
+ if (!(pa->str= (uchar*) my_malloc(PSI_NOT_INSTRUMENTED,
+ PS_MALLOC-MALLOC_OVERHEAD, MYF(MY_WME))))
{
my_free((void*) pa->typelib.type_names);
DBUG_RETURN (-1);
@@ -278,9 +278,8 @@ static int insert_pointer_name(reg1 POINTER_ARRAY *pa,char * name)
{
pa->max_length=(pa->length+length+MALLOC_OVERHEAD+PS_MALLOC-1)/PS_MALLOC;
pa->max_length=pa->max_length*PS_MALLOC-MALLOC_OVERHEAD;
- if (!(new_pos= (uchar*) my_realloc((uchar*) pa->str,
- (uint) pa->max_length,
- MYF(MY_WME))))
+ if (!(new_pos= (uchar*) my_realloc(PSI_NOT_INSTRUMENTED, (uchar*) pa->str,
+ (uint) pa->max_length, MYF(MY_WME))))
DBUG_RETURN(1);
if (new_pos != pa->str)
{
@@ -296,7 +295,7 @@ static int insert_pointer_name(reg1 POINTER_ARRAY *pa,char * name)
int len;
pa->array_allocs++;
len=(PC_MALLOC*pa->array_allocs - MALLOC_OVERHEAD);
- if (!(new_array=(const char **) my_realloc((uchar*) pa->typelib.type_names,
+ if (!(new_array=(const char **) my_realloc(PSI_NOT_INSTRUMENTED, (void*)(pa->typelib.type_names),
(uint) len/
(sizeof(uchar*)+sizeof(*pa->flag))*
(sizeof(uchar*)+sizeof(*pa->flag)),
@@ -428,7 +427,8 @@ static REPLACE *init_replace(char * *from, char * *to,uint count,
if (init_sets(&sets,states))
DBUG_RETURN(0);
found_sets=0;
- if (!(found_set= (FOUND_SET*) my_malloc(sizeof(FOUND_SET)*max_length*count,
+ if (!(found_set= (FOUND_SET*) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(FOUND_SET)*max_length*count,
MYF(MY_WME))))
{
free_sets(&sets);
@@ -439,7 +439,8 @@ static REPLACE *init_replace(char * *from, char * *to,uint count,
used_sets=-1;
word_states=make_new_set(&sets); /* Start of new word */
start_states=make_new_set(&sets); /* This is first state */
- if (!(follow=(FOLLOWS*) my_malloc((states+2)*sizeof(FOLLOWS),MYF(MY_WME))))
+ if (!(follow=(FOLLOWS*) my_malloc(PSI_NOT_INSTRUMENTED,
+ (states+2)*sizeof(FOLLOWS), MYF(MY_WME))))
{
free_sets(&sets);
my_free(found_set);
@@ -631,7 +632,8 @@ static REPLACE *init_replace(char * *from, char * *to,uint count,
/* Alloc replace structure for the replace-state-machine */
- if ((replace=(REPLACE*) my_malloc(sizeof(REPLACE)*(sets.count)+
+ if ((replace=(REPLACE*) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(REPLACE)*(sets.count)+
sizeof(REPLACE_STRING)*(found_sets+1)+
sizeof(char *)*count+result_len,
MYF(MY_WME | MY_ZEROFILL))))
@@ -649,7 +651,13 @@ static REPLACE *init_replace(char * *from, char * *to,uint count,
for (i=1 ; i <= found_sets ; i++)
{
pos=from[found_set[i-1].table_offset];
- rep_str[i].found= (my_bool) (!memcmp(pos,"\\^",3) ? 2 : 1);
+ /*
+ Test if we are matching start of string (\^)
+ We can't use bcmp() here as pos may be only 1 character and
+ that would confuse MSAN.
+ */
+ rep_str[i].found= (uint8) ((pos[0] == '\\' && pos[1] == '^' &&
+ pos[2] == 0) ? 2 : 1);
rep_str[i].replace_string=to_array[found_set[i-1].table_offset];
rep_str[i].to_offset=found_set[i-1].found_offset-start_at_word(pos);
rep_str[i].from_offset=found_set[i-1].found_offset-replace_len(pos)+
@@ -676,10 +684,12 @@ static int init_sets(REP_SETS *sets,uint states)
{
bzero((char*) sets,sizeof(*sets));
sets->size_of_bits=((states+7)/8);
- if (!(sets->set_buffer=(REP_SET*) my_malloc(sizeof(REP_SET)*SET_MALLOC_HUNC,
+ if (!(sets->set_buffer=(REP_SET*) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(REP_SET)*SET_MALLOC_HUNC,
MYF(MY_WME))))
return 1;
- if (!(sets->bit_buffer=(uint*) my_malloc(sizeof(uint)*sets->size_of_bits*
+ if (!(sets->bit_buffer=(uint*) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(uint)*sets->size_of_bits*
SET_MALLOC_HUNC,MYF(MY_WME))))
{
my_free(sets->set);
@@ -714,15 +724,14 @@ static REP_SET *make_new_set(REP_SETS *sets)
return set;
}
count=sets->count+sets->invisible+SET_MALLOC_HUNC;
- if (!(set=(REP_SET*) my_realloc((uchar*) sets->set_buffer,
- sizeof(REP_SET)*count,
- MYF(MY_WME))))
+ if (!(set=(REP_SET*) my_realloc(PSI_NOT_INSTRUMENTED, sets->set_buffer,
+ sizeof(REP_SET)*count, MYF(MY_WME))))
return 0;
sets->set_buffer=set;
sets->set=set+sets->invisible;
- if (!(bit_buffer=(uint*) my_realloc((uchar*) sets->bit_buffer,
- (sizeof(uint)*sets->size_of_bits)*count,
- MYF(MY_WME))))
+ if (!(bit_buffer=(uint*) my_realloc(PSI_NOT_INSTRUMENTED, sets->bit_buffer,
+ (sizeof(uint)*sets->size_of_bits)*count,
+ MYF(MY_WME))))
return 0;
sets->bit_buffer=bit_buffer;
for (i=0 ; i < count ; i++)
@@ -895,7 +904,7 @@ static uint replace_strings(REPLACE *rep, char **start, uint *max_length,
if (to == end)
{
(*max_length)+=8192;
- if (!(new=my_realloc(*start,*max_length,MYF(MY_WME))))
+ if (!(new=my_realloc(PSI_NOT_INSTRUMENTED, *start,*max_length,MYF(MY_WME))))
return (uint) -1;
to=new+(to - *start);
end=(*start=new)+ *max_length-1;
@@ -911,7 +920,7 @@ static uint replace_strings(REPLACE *rep, char **start, uint *max_length,
if (to == end)
{
(*max_length)*=2;
- if (!(new=my_realloc(*start,*max_length,MYF(MY_WME))))
+ if (!(new=my_realloc(PSI_NOT_INSTRUMENTED, *start,*max_length,MYF(MY_WME))))
return (uint) -1;
to=new+(to - *start);
end=(*start=new)+ *max_length-1;
@@ -935,11 +944,11 @@ static int initialize_buffer()
{
bufread = 8192;
bufalloc = bufread + bufread / 2;
- if (!(buffer = my_malloc(bufalloc+1,MYF(MY_WME))))
+ if (!(buffer = my_malloc(PSI_NOT_INSTRUMENTED, bufalloc+1, MYF(MY_WME))))
return 1;
bufbytes=my_eof=0;
out_length=bufread;
- if (!(out_buff=my_malloc(out_length,MYF(MY_WME))))
+ if (!(out_buff=my_malloc(PSI_NOT_INSTRUMENTED, out_length, MYF(MY_WME))))
return(1);
return 0;
}
@@ -974,7 +983,7 @@ static int fill_buffer_retaining(File fd, int n)
bufalloc *= 2;
bufread *= 2;
}
- buffer = my_realloc(buffer, bufalloc+1, MYF(MY_WME));
+ buffer = my_realloc(PSI_NOT_INSTRUMENTED, buffer, bufalloc+1, MYF(MY_WME));
if (! buffer)
return(-1);
}
diff --git a/extra/resolve_stack_dump.c b/extra/resolve_stack_dump.c
index b76cc2aa249..cb4d6ed33e5 100644
--- a/extra/resolve_stack_dump.c
+++ b/extra/resolve_stack_dump.c
@@ -111,10 +111,11 @@ void local_exit(int error)
static my_bool
-get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
- char *argument __attribute__((unused)))
+get_one_option(const struct my_option *opt,
+ const char *argument __attribute__((unused)),
+ const char *filename __attribute__((unused)))
{
- switch(optid) {
+ switch(opt->id) {
case 'V':
print_version();
local_exit(0);
@@ -234,8 +235,8 @@ static int init_sym_entry(SYM_ENTRY* se, char* buf)
static void init_sym_table()
{
char buf[512];
- if (my_init_dynamic_array(&sym_table, sizeof(SYM_ENTRY), INIT_SYM_TABLE,
- INC_SYM_TABLE, MYF(0)))
+ if (my_init_dynamic_array(PSI_NOT_INSTRUMENTED, &sym_table, sizeof(SYM_ENTRY),
+ INIT_SYM_TABLE, INC_SYM_TABLE, MYF(0)))
die("Failed in my_init_dynamic_array() -- looks like out of memory problem");
while (fgets(buf, sizeof(buf), fp_sym))
diff --git a/extra/resolveip.c b/extra/resolveip.c
index 59a32f5f084..890912d9850 100644
--- a/extra/resolveip.c
+++ b/extra/resolveip.c
@@ -71,10 +71,11 @@ static void usage(void)
static my_bool
-get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
- char *argument __attribute__((unused)))
+get_one_option(const struct my_option *opt,
+ const char *argument __attribute__((unused)),
+ const char *filename __attribute__((unused)))
{
- switch (optid) {
+ switch (opt->id) {
case 'V': print_version(); exit(0);
case 'I':
case '?':