Sorry for the bump, confirming that I've tested on s390x locally (WSL amd64
with docker-qemu running s390x)

root@3d86c908e4f5:/gnulib# ./gnulib-tool --with-tests --test crc
...
## ---------------------------------------------------------------------- ##
## ---------------------------- Gnulib tests ---------------------------- ##
## Please report test failures in this directory to <bug-gnulib@gnu.org>. ##
## ---------------------------------------------------------------------- ##
make  check-TESTS
make[4]: Entering directory '/gnulib/testdir4782/build/gltests'
make[5]: Entering directory '/gnulib/testdir4782/build/gltests'
PASS: test-alignasof
PASS: test-assert
PASS: test-byteswap
PASS: test-crc
PASS: test-endian
PASS: test-getrusage
PASS: test-gettimeofday
PASS: test-intprops
PASS: test-inttypes
PASS: test-limits-h
PASS: test-stdbool
PASS: test-stddef
PASS: test-stdint
PASS: test-stdlib
PASS: test-sys_resource
PASS: test-sys_time
PASS: test-sys_types
PASS: test-init.sh
PASS: test-time-h
PASS: test-time
PASS: test-unistd
PASS: test-verify
PASS: test-verify.sh
PASS: test-wchar
============================================================================
Testsuite summary for dummy 0
============================================================================
# TOTAL: 24
# PASS:  24
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================
...
root@3d86c908e4f5:/gnulib# uname -m
s390x

Dockerfile:
FROM multiarch/debian-debootstrap:s390x-bullseye-slim

RUN apt update
RUN apt install -y vim build-essential m4 automake autoconf git
RUN apt install -y python3

Is there anything outstanding to do here? For downstream apps (e.g. gzip)
they would just need to set GL_CRC_SLICE_BY_8 to enable the new feature,
it's currently disabled by default.

On Tue, 22 Oct 2024 at 22:38, Sam Russell <sam.h.russ...@gmail.com> wrote:

> Tests pass with GL_CRC_SLICE_BY_8 set
>
>
>
> On Wed, 16 Oct 2024 at 13:52, Simon Josefsson <si...@josefsson.org> wrote:
>
>> Sam Russell <sam.h.russ...@gmail.com> writes:
>>
>> >> People using the crc module who want to disable the faster/larger CRC32
>> >> implementation can add 'gl_crc_slice_by_8=yes' to their configure.ac
>> >> before invoking gnulib.
>> >
>> > I've been running tests with `./gnulib-tool --with-tests --test crc` so
>> I'm
>> > interested in a way of enabling this flag from gnulib-tool
>>
>> You could add a module like 'crc-slice-by-8' that depend on 'crc' with a
>> 'configure.ac-early' statement that does 'gl_crc_slice_by_8=yes'.
>>
>> Maybe there are cleaner/simpler solutions.
>>
>> >> If code is copied then licensing terms has to be clear.  RFCs have bad
>> >> licensing terms, so maybe we cannot use this code at all.
>> >
>> > The existing lib/crc.c uses code directly taken from RFC 1952 and is
>> > referenced as such, I sent off my copyright paperwork and mentioned
>> this to
>> > them and am awaiting a reply.
>>
>> Nice catch, we should re-evaluate what code we can use and how.  The
>> snippet that is copied seems fairly small.
>>
>> >> That memcpy looks weird, does it really do what you want it to do on
>> all
>> >> architectures?  Would using something from endian.h be cleaner?
>> >
>> > The purpose is to work around alignment issues. The signature
>> > for crc32_update_no_xor() takes a char* and casting up to a uint64_t is
>> > undefined by C. Using memcpy lets the compiler and runtime be smart and
>> > insulates us from nonaligned memory accesses. I am open to other ideas
>> > around this (we can step forward byte by byte until we reach an aligned
>> > pointer and then do 8-byte blocks from there, for example, but then we
>> need
>> > to detect alignment and do the upcasting ourselves)
>> >
>> > You are correct that this breaks under big endian though, thanks for the
>> > tip for endian.h. I've added a le64toh() call and this should make it
>> work
>> > correctly on big endian systems (how do we go about testing these btw? I
>> > don't have one on me).
>>
>> The GCC compile farm has plenty of different architectures, so if you
>> write some low-level code that may have endian issues, testing for that
>> is a good idea.  You can test it on your own machine too, using QEMU.
>>
>> /Simon
>>
>

Reply via email to