fix test failure on i686 and s390
https://github.com/facebook/zstd/pull/2432
This commit is contained in:
		
							parent
							
								
									e9b032a3cc
								
							
						
					
					
						commit
						fee0baebd5
					
				
							
								
								
									
										44
									
								
								alignment.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								alignment.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,44 @@ | |||||||
|  | From ae85676d44baee3d12168a5c929347b3836f2cf2 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Nick Terrell <terrelln@fb.com> | ||||||
|  | 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]; | ||||||
| @ -21,6 +21,7 @@ URL:            https://github.com/facebook/zstd | |||||||
| Source0:        https://github.com/facebook/zstd/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz | Source0:        https://github.com/facebook/zstd/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz | ||||||
| 
 | 
 | ||||||
| Patch1:         pzstd.1.patch | Patch1:         pzstd.1.patch | ||||||
|  | Patch2:         alignment.patch | ||||||
| 
 | 
 | ||||||
| BuildRequires:  gcc gtest-devel | BuildRequires:  gcc gtest-devel | ||||||
| %if %{with pzstd} | %if %{with pzstd} | ||||||
| @ -57,6 +58,7 @@ find -name .gitignore -delete | |||||||
| %if %{with pzstd} | %if %{with pzstd} | ||||||
| %patch1 -p1 | %patch1 -p1 | ||||||
| %endif | %endif | ||||||
|  | %patch2 -p1 | ||||||
| 
 | 
 | ||||||
| %build | %build | ||||||
| export CFLAGS="$RPM_OPT_FLAGS" | export CFLAGS="$RPM_OPT_FLAGS" | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user