diff --git a/2430.patch b/2430.patch new file mode 100644 index 0000000..bae80a6 --- /dev/null +++ b/2430.patch @@ -0,0 +1,44 @@ +From ae85676d44baee3d12168a5c929347b3836f2cf2 Mon Sep 17 00:00:00 2001 +From: Nick Terrell +Date: Thu, 17 Dec 2020 14:27:53 -0800 +Subject: [PATCH] Fix alignment of scratchBuffer in HUF_compressWeights() + +The scratch buffer must be 4-byte aligned. This causes test failures in +32-bit systems, where the stack isn't aligned. + +Fixes Issue #2428. +--- + lib/common/fse.h | 5 +++-- + lib/compress/huf_compress.c | 2 +- + 2 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/lib/common/fse.h b/lib/common/fse.h +index 83a07847a..dd5fc44e8 100644 +--- a/lib/common/fse.h ++++ b/lib/common/fse.h +@@ -335,9 +335,10 @@ size_t FSE_buildCTable_rle (FSE_CTable* ct, unsigned char symbolValue); + + /* FSE_buildCTable_wksp() : + * Same as FSE_buildCTable(), but using an externally allocated scratch buffer (`workSpace`). +- * `wkspSize` must be >= `FSE_BUILD_CTABLE_WORKSPACE_SIZE(maxSymbolValue, tableLog)`. ++ * `wkspSize` must be >= `FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(maxSymbolValue, tableLog)` of `unsigned`. + */ +-#define FSE_BUILD_CTABLE_WORKSPACE_SIZE(maxSymbolValue, tableLog) (sizeof(unsigned) * (maxSymbolValue + 2) + (1ull << tableLog)) ++#define FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(maxSymbolValue, tableLog) (maxSymbolValue + 2 + (1ull << (tableLog - 2))) ++#define FSE_BUILD_CTABLE_WORKSPACE_SIZE(maxSymbolValue, tableLog) (sizeof(unsigned) * FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(maxSymbolValue, tableLog)) + size_t FSE_buildCTable_wksp(FSE_CTable* ct, const short* normalizedCounter, unsigned maxSymbolValue, unsigned tableLog, void* workSpace, size_t wkspSize); + + #define FSE_BUILD_DTABLE_WKSP_SIZE(maxTableLog, maxSymbolValue) (sizeof(short) * (maxSymbolValue + 1) + (1ULL << maxTableLog) + 8) +diff --git a/lib/compress/huf_compress.c b/lib/compress/huf_compress.c +index abbcc3192..00c593d7e 100644 +--- a/lib/compress/huf_compress.c ++++ b/lib/compress/huf_compress.c +@@ -69,7 +69,7 @@ static size_t HUF_compressWeights (void* dst, size_t dstSize, const void* weight + U32 tableLog = MAX_FSE_TABLELOG_FOR_HUFF_HEADER; + + FSE_CTable CTable[FSE_CTABLE_SIZE_U32(MAX_FSE_TABLELOG_FOR_HUFF_HEADER, HUF_TABLELOG_MAX)]; +- BYTE scratchBuffer[FSE_BUILD_CTABLE_WORKSPACE_SIZE(HUF_TABLELOG_MAX, MAX_FSE_TABLELOG_FOR_HUFF_HEADER)]; ++ U32 scratchBuffer[FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(HUF_TABLELOG_MAX, MAX_FSE_TABLELOG_FOR_HUFF_HEADER)]; + + unsigned count[HUF_TABLELOG_MAX+1]; + S16 norm[HUF_TABLELOG_MAX+1]; diff --git a/zstd.changes b/zstd.changes index 890a227..00ee695 100644 --- a/zstd.changes +++ b/zstd.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Fri Dec 18 06:30:18 UTC 2020 - Bernhard Wiedemann + +- Add upstream 2430.patch to fix i586+s390x + ------------------------------------------------------------------- Thu Dec 17 04:04:42 UTC 2020 - Bernhard Wiedemann diff --git a/zstd.spec b/zstd.spec index 4e533a0..d682edc 100644 --- a/zstd.spec +++ b/zstd.spec @@ -28,6 +28,7 @@ URL: https://github.com/facebook/zstd Source0: https://github.com/facebook/zstd/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz Source99: baselibs.conf Patch1: pzstd.1.patch +Patch2: 2430.patch BuildRequires: gcc # C++ is needed for pzstd only BuildRequires: gcc-c++ @@ -84,6 +85,7 @@ Needed for compiling programs that link with the library. %prep %setup -q %patch1 -p1 +%patch2 -p1 %build %global _lto_cflags %{_lto_cflags} -ffat-lto-objects