diff --git a/0006-leveldb-Fix-alignment-code-in-SSE4.2-optimized-CRC32.patch b/0006-leveldb-Fix-alignment-code-in-SSE4.2-optimized-CRC32.patch new file mode 100644 index 0000000..b91b92a --- /dev/null +++ b/0006-leveldb-Fix-alignment-code-in-SSE4.2-optimized-CRC32.patch @@ -0,0 +1,40 @@ +From 2964b803b857932ff7499d7bebb61dc5514dab7c Mon Sep 17 00:00:00 2001 +From: costan +Date: Wed, 23 Aug 2017 20:59:46 -0700 +Subject: [PATCH] leveldb: Fix alignment code in SSE4.2-optimized CRC32C. + +When faced with a pointer that is misaligned by K bytes (pointer % 8 == +K), the code previously moved forward by K bytes. In order to end up +with an aligned pointer, the code must move by 8 - K bytes. + +This lands https://github.com/google/leveldb/pull/488 + +------------- +Created by MOE: https://github.com/google/moe +MOE_MIGRATED_REVID=166295921 +--- + port/port_posix_sse.cc | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/port/port_posix_sse.cc b/port/port_posix_sse.cc +index 1e519ba..08d9aee 100644 +--- a/port/port_posix_sse.cc ++++ b/port/port_posix_sse.cc +@@ -92,8 +92,12 @@ uint32_t AcceleratedCRC32C(uint32_t crc, const char* buf, size_t size) { + } while (0) + + if (size > 16) { +- // Process unaligned bytes +- for (unsigned int i = reinterpret_cast(p) % 8; i; --i) { ++ // Point x at first 8-byte aligned byte in string. This must be inside the ++ // string, due to the size check above. ++ const uintptr_t pval = reinterpret_cast(p); ++ const uint8_t* x = reinterpret_cast(((pval + 7) >> 3) << 3); ++ // Process bytes until p is 8-byte aligned. ++ while (p != x) { + STEP1; + } + +-- +2.40.0.windows.1 + diff --git a/leveldb.spec b/leveldb.spec index 32077d2..55dd954 100644 --- a/leveldb.spec +++ b/leveldb.spec @@ -1,6 +1,6 @@ Name: leveldb Version: 1.20 -Release: 5 +Release: 6 Summary: A key/value database library License: BSD URL: https://github.com/google/leveldb @@ -11,6 +11,7 @@ Patch0002: 0002-Added-a-DB-SuspendCompations-and-DB-ResumeCompaction.patch Patch0003: 0003-allow-Get-calls-to-avoid-copies-into-std-string.patch Patch0004: 0004-bloom_test-failure-on-big-endian-archs.patch Patch0005: 0005-broken-db-fix-assertion-in-leveldb-InternalKey-Encod.patch +Patch0006: 0006-leveldb-Fix-alignment-code-in-SSE4.2-optimized-CRC32.patch BuildRequires: make gcc-c++ snappy-devel @@ -72,6 +73,9 @@ make -j1 check %{_libdir}/pkgconfig/leveldb.pc %changelog +* Tue Apr 25 2023 yaoguangzhong - 1.20-6 +- fix alignment code in SSE4.2-optimized CRC32C + * Tue Apr 18 2023 yaoguangzhong - 1.20-5 - fix assertion in leveldb::InternalKey::Encode, mark base as corrupt