diff options
Diffstat (limited to 'extra')
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(®ex_include_list); xb_regex_list_free(®ex_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 '?': |