-
Notifications
You must be signed in to change notification settings - Fork 332
Description
When compiling https://github.com/pycompression/python-isal on aarch64 there are some test failures.
The following tests from python-isal fail on aarch64:
=========================== short test summary info ============================
FAILED tests/test_compat.py::test_decompress_wbits[131072-1-15-1] - igzip_lib.IsalError: Error -6 Incorrect checksum found
FAILED tests/test_compat.py::test_decompress_wbits[131072-1-31-1] - igzip_lib.IsalError: Error -6 Incorrect checksum found
FAILED tests/test_compat.py::test_decompress_decompressobj[131072-1-15-1] - igzip_lib.IsalError: Error -6 Incorrect checksum found
FAILED tests/test_compat.py::test_decompress_decompressobj[131072-1-31-1] - igzip_lib.IsalError: Error -6 Incorrect checksum found
============ 4 failed, 9437 passed, 6 skipped, 2 warnings in 26.12s ============
The failures are not related to the python-isal code, but are related to the aarch64 assembler version of decode_huffman_code_block_stateless in ISA-L. If this is not used the tests do not fail.
diff --git a/igzip/aarch64/igzip_multibinary_aarch64_dispatcher.c b/igzip/aarch64/igzip_multibinary_aarch64_dispatcher.c
index cadec0c..71f61a2 100644
--- a/igzip/aarch64/igzip_multibinary_aarch64_dispatcher.c
+++ b/igzip/aarch64/igzip_multibinary_aarch64_dispatcher.c
@@ -234,9 +234,9 @@ DEFINE_INTERFACE_DISPATCHER(isal_deflate_hash_lvl3)
DEFINE_INTERFACE_DISPATCHER(decode_huffman_code_block_stateless)
{
#if defined(__linux__)
- unsigned long auxval = getauxval(AT_HWCAP);
- if (auxval & HWCAP_CRC32)
- return PROVIDER_INFO(decode_huffman_code_block_stateless_aarch64);
+ /* unsigned long auxval = getauxval(AT_HWCAP); */
+ /* if (auxval & HWCAP_CRC32) */
+ /* return PROVIDER_INFO(decode_huffman_code_block_stateless_aarch64); */
#elif defined(__APPLE__)
if (sysctlEnabled(SYSCTL_CRC32_KEY))
return PROVIDER_INFO(decode_huffman_code_block_stateless_aarch64);
The above is obviously not the proper patch, the assembler code should be debugged and fixed instead. I don't know enough assembler to debug this. Since the change above is just a workaround I didn't create a pull request and filed an issue instead.
The long test failure log is copied below:
=================================== FAILURES ===================================
_____________________ test_decompress_wbits[131072-1-15-1] _____________________
data_size = 131072, level = 1, wbits = 15, memLevel = 1
@pytest.mark.parametrize(["data_size", "level", "wbits", "memLevel"],
itertools.product([128 * 1024], range(4),
WBITS_RANGE, range(1, 10)))
def test_decompress_wbits(data_size, level, wbits, memLevel):
data = DATA[:data_size]
compressobj = zlib.compressobj(level=level, wbits=wbits, memLevel=memLevel)
compressed = compressobj.compress(data) + compressobj.flush()
> decompressed = isal_zlib.decompress(compressed, wbits=wbits)
E igzip_lib.IsalError: Error -6 Incorrect checksum found
tests/test_compat.py:76: IsalError
_____________________ test_decompress_wbits[131072-1-31-1] _____________________
data_size = 131072, level = 1, wbits = 31, memLevel = 1
@pytest.mark.parametrize(["data_size", "level", "wbits", "memLevel"],
itertools.product([128 * 1024], range(4),
WBITS_RANGE, range(1, 10)))
def test_decompress_wbits(data_size, level, wbits, memLevel):
data = DATA[:data_size]
compressobj = zlib.compressobj(level=level, wbits=wbits, memLevel=memLevel)
compressed = compressobj.compress(data) + compressobj.flush()
> decompressed = isal_zlib.decompress(compressed, wbits=wbits)
E igzip_lib.IsalError: Error -6 Incorrect checksum found
tests/test_compat.py:76: IsalError
_________________ test_decompress_decompressobj[131072-1-15-1] _________________
data_size = 131072, level = 1, wbits = 15, memLevel = 1
@pytest.mark.parametrize(["data_size", "level", "wbits", "memLevel"],
itertools.product([128 * 1024], range(4),
WBITS_RANGE, range(1, 10)))
def test_decompress_decompressobj(data_size, level, wbits, memLevel):
data = DATA[:data_size]
compressobj = zlib.compressobj(level=level, wbits=wbits, memLevel=memLevel)
compressed = compressobj.compress(data) + compressobj.flush()
decompressobj = isal_zlib.decompressobj(wbits=wbits)
> decompressed = decompressobj.decompress(compressed) + decompressobj.flush()
E igzip_lib.IsalError: Error -6 Incorrect checksum found
tests/test_compat.py:111: IsalError
_________________ test_decompress_decompressobj[131072-1-31-1] _________________
data_size = 131072, level = 1, wbits = 31, memLevel = 1
@pytest.mark.parametrize(["data_size", "level", "wbits", "memLevel"],
itertools.product([128 * 1024], range(4),
WBITS_RANGE, range(1, 10)))
def test_decompress_decompressobj(data_size, level, wbits, memLevel):
data = DATA[:data_size]
compressobj = zlib.compressobj(level=level, wbits=wbits, memLevel=memLevel)
compressed = compressobj.compress(data) + compressobj.flush()
decompressobj = isal_zlib.decompressobj(wbits=wbits)
> decompressed = decompressobj.decompress(compressed) + decompressobj.flush()
E igzip_lib.IsalError: Error -6 Incorrect checksum found
tests/test_compat.py:111: IsalError
The tests cycles through many sets of possible parameters, but the failure is only seen on two of the many sets:
- data_size = 131072, level = 1, wbits = 15, memLevel = 1
- data_size = 131072, level = 1, wbits = 31, memLevel = 1