re-enable alignment test on all targets

This commit is contained in:
Yann Collet 2020-11-06 16:43:14 -08:00
parent 0c56f838ed
commit 211d653ff8
3 changed files with 10 additions and 17 deletions

View File

@ -77,8 +77,9 @@ The following build macro can be selected to adjust source code behavior at comp
In most cases, it's not expected to be necessary,
but it can be legitimately considered for less common platforms.
- `LZ4_ALIGN_TEST` : disable state alignment test when set to 0.
Is generally enabled by default, except on win32+visual.
- `LZ4_ALIGN_TEST` : alignment test ensures that the memory area
passed as argument to become a compression state is suitable aligned.
This test can be disabled, if it proves flaky, by setting this value to 0.
#### Amalgamation

View File

@ -178,18 +178,10 @@
#define unlikely(expr) expect((expr) != 0, 0)
#endif
/* for some reason, Visual Studio can fail the aligment test on 32-bit x86 :
* it sometimes report an aligment of 8-bytes (at least in some configurations),
* while only providing a `malloc()` memory area aligned on 4-bytes,
* which is inconsistent with malloc() contract.
* The source of the issue is still unclear.
* Mitigation : made the alignment test optional */
/* Should the alignment test prove unreliable, for some reason,
* it can be disabled by setting LZ4_ALIGN_TEST to 0 */
#ifndef LZ4_ALIGN_TEST /* can be externally provided */
# if (defined(_MSC_VER) && !defined(_M_X64))
# define LZ4_ALIGN_TEST 0 /* disable on win32+visual */
# else
# define LZ4_ALIGN_TEST 1
# endif
# define LZ4_ALIGN_TEST 1
#endif
@ -476,7 +468,7 @@ LZ4_memcpy_using_offset(BYTE* dstPtr, const BYTE* srcPtr, BYTE* dstEnd, const si
switch(offset) {
case 1:
memset(v, *srcPtr, 8);
MEM_INIT(v, *srcPtr, 8);
break;
case 2:
LZ4_memcpy(v, srcPtr, 2);
@ -1441,7 +1433,7 @@ LZ4_stream_t* LZ4_initStream (void* buffer, size_t size)
if (buffer == NULL) { return NULL; }
if (size < sizeof(LZ4_stream_t)) { return NULL; }
if (!LZ4_isAligned(buffer, LZ4_stream_t_alignment())) return NULL;
MEM_INIT(buffer, 0, sizeof(LZ4_stream_t));
MEM_INIT(buffer, 0, sizeof(LZ4_stream_t_internal));
return (LZ4_stream_t*)buffer;
}
@ -1450,7 +1442,7 @@ LZ4_stream_t* LZ4_initStream (void* buffer, size_t size)
void LZ4_resetStream (LZ4_stream_t* LZ4_stream)
{
DEBUGLOG(5, "LZ4_resetStream (ctx:%p)", LZ4_stream);
MEM_INIT(LZ4_stream, 0, sizeof(LZ4_stream_t));
MEM_INIT(LZ4_stream, 0, sizeof(LZ4_stream_t_internal));
}
void LZ4_resetStream_fast(LZ4_stream_t* ctx) {

View File

@ -618,7 +618,7 @@ typedef struct {
* (on stack, or as part of larger structure).
* Init this structure with LZ4_initStream() before first use.
* note : only use this definition in association with static linking !
* this definition is not API/ABI safe, and may change in future versions.
* this definition is not API/ABI safe, and may change in future versions.
*/
#define LZ4_STREAMSIZE_VOIDP ((sizeof(LZ4_stream_t_internal) + sizeof(void*)-1) / sizeof(void*))
#define LZ4_STREAMSIZE (LZ4_STREAMSIZE_VOIDP * sizeof(void*))