[5/6] Rebase patches on new 1.2.12 release

This commit is contained in:
Lukas Javorsky 2022-06-22 17:38:58 +00:00
parent 4e76ca623c
commit 37728e12c3
4 changed files with 116 additions and 139 deletions

View File

@ -28,38 +28,3 @@ index 96891c2..1197928 100644
} }
return err; return err;
} }
diff --git a/contrib/minizip/zip.c b/contrib/minizip/zip.c
index 44e88a9..a753c17 100644
--- a/contrib/minizip/zip.c
+++ b/contrib/minizip/zip.c
@@ -526,8 +526,8 @@ local ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_f
break;
}
- if (uPosFound!=0)
- break;
+ if (uPosFound!=0)
+ break;
}
TRYFREE(buf);
return uPosFound;
diff --git a/deflate.c b/deflate.c
index 085abbe..3963e79 100644
--- a/deflate.c
+++ b/deflate.c
@@ -203,9 +203,10 @@ local const config configuration_table[10] = {
* Initialize the hash table (avoiding 64K overflow for 16 bit systems).
* prev[] will be initialized on the fly.
*/
-#define CLEAR_HASH(s) \
+#define CLEAR_HASH(s) do { \
s->head[s->hash_size-1] = NIL; \
- zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
+ zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head)); \
+} while (0)
/* ===========================================================================
* Slide the hash table when sliding the window down (could be avoided with 32
--
2.26.0

View File

@ -4,24 +4,10 @@ Date: Tue, 15 Oct 2019 11:27:15 +0200
Subject: [PATCH] fixed covscan issues Subject: [PATCH] fixed covscan issues
--- ---
crc32.c | 2 +-
deflate.c | 2 +- deflate.c | 2 +-
test/crc32_test.c | 8 ++++---- test/crc32_test.c | 8 ++++----
3 files changed, 6 insertions(+), 6 deletions(-) 3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/crc32.c b/crc32.c
index 406d350..34132ea 100644
--- a/crc32.c
+++ b/crc32.c
@@ -302,7 +302,7 @@ unsigned long ZEXPORT crc32_z(crc, buf, len)
if (!crc32_func)
crc32_func = crc32_z_ifunc();
- return (*crc32_func)(crc, buf, len);
+ return (*crc32_func)(crc, buf, len);
}
#endif /* defined(Z_IFUNC_ASM) || defined(Z_IFUNC_NATIVE) */
diff --git a/deflate.c b/deflate.c diff --git a/deflate.c b/deflate.c
index 089285a..9b09718 100644 index 089285a..9b09718 100644
--- a/deflate.c --- a/deflate.c
@ -35,11 +21,10 @@ index 089285a..9b09718 100644
bstate = DEFLATE_HOOK(strm, flush, &bstate) ? bstate : bstate = DEFLATE_HOOK(strm, flush, &bstate) ? bstate :
s->level == 0 ? deflate_stored(s, flush) : s->level == 0 ? deflate_stored(s, flush) :
diff --git a/test/crc32_test.c b/test/crc32_test.c diff -rup zlib-1.2.12/test/crc32_test.c.old zlib-1.2.12/test/crc32_test.c
index 5d73128..2d2a6c7 100644 --- zlib-1.2.12/test/crc32_test.c.old 2022-06-23 11:20:52.393574517 +0000
--- a/test/crc32_test.c +++ zlib-1.2.12/test/crc32_test.c 2022-06-23 11:21:50.195574517 +0000
+++ b/test/crc32_test.c @@ -11,7 +11,7 @@
@@ -11,25 +11,25 @@
# include <stdlib.h> # include <stdlib.h>
#endif #endif
@ -48,13 +33,7 @@ index 5d73128..2d2a6c7 100644
int main OF((void)); int main OF((void));
typedef struct { typedef struct {
int line; @@ -24,12 +24,12 @@ typedef struct {
uLong crc;
- Byte* buf;
+ char* buf;
int len;
uLong expect;
} crc32_test;
void test_crc32(crc, buf, len, chk, line) void test_crc32(crc, buf, len, chk, line)
uLong crc; uLong crc;
@ -66,9 +45,7 @@ index 5d73128..2d2a6c7 100644
{ {
- uLong res = crc32(crc, buf, len); - uLong res = crc32(crc, buf, len);
+ uLong res = crc32(crc, (Bytef *) buf, len); + uLong res = crc32(crc, (Bytef *) buf, len);
if (res != chk) { if (res != chk) {
fprintf(stderr, "FAIL [%d]: crc32 returned 0x%08X expected 0x%08X\n", fprintf(stderr, "FAIL [%d]: crc32 returned 0x%08X expected 0x%08X\n",
line, (unsigned int)res, (unsigned int)chk); line, (unsigned int)res, (unsigned int)chk);
--
2.19.1

View File

@ -2,10 +2,10 @@ diff --git a/deflate.c b/deflate.c
index 1ec7614..b724c8d 100644 index 1ec7614..b724c8d 100644
--- a/deflate.c --- a/deflate.c
+++ b/deflate.c +++ b/deflate.c
@@ -1233,15 +1233,16 @@ local void lm_init (s) @@ -1322,15 +1322,16 @@ local void lm_init (s)
/* For 80x86 and 680x0, an optimized version will be provided in match.asm or #define longest_match longest_match_default
* match.S. The code will be functionally equivalent. #endif /* Z_POWER_OPT */
*/
-local uInt longest_match(s, cur_match) -local uInt longest_match(s, cur_match)
+local uInt longest_match(s, pcur_match) +local uInt longest_match(s, pcur_match)
deflate_state *s; deflate_state *s;

View File

@ -1,4 +1,4 @@
From 2dfdc5b7d6943c0ac60eef63e361e2a50f9da610 Mon Sep 17 00:00:00 2001 From 957bc67cfb4e01403c01fe6243850383183a7c19 Mon Sep 17 00:00:00 2001
From: Ilya Leoshkevich <iii@linux.ibm.com> From: Ilya Leoshkevich <iii@linux.ibm.com>
Date: Thu, 19 Mar 2020 11:52:03 +0100 Date: Thu, 19 Mar 2020 11:52:03 +0100
Subject: [PATCH] s390x: vectorize crc32 Subject: [PATCH] s390x: vectorize crc32
@ -8,15 +8,18 @@ about them. At runtime, check whether kernel supports vector
extensions (it has to be not just the CPU, but also the kernel) and extensions (it has to be not just the CPU, but also the kernel) and
choose between the regular and the vectorized implementations. choose between the regular and the vectorized implementations.
--- ---
Makefile.in | 9 ++ Makefile.in | 9 ++
configure | 28 ++++++ configure | 28 +++++
contrib/s390/crc32-vx.c | 195 ++++++++++++++++++++++++++++++++++++++++ contrib/gcc/zifunc.h | 21 +++-
crc32.c | 55 +++++++++++- contrib/s390/crc32-vx.c | 195 ++++++++++++++++++++++++++++++++
4 files changed, 285 insertions(+), 2 deletions(-) contrib/s390/crc32_z_resolver.c | 41 +++++++
crc32.c | 11 +-
6 files changed, 301 insertions(+), 4 deletions(-)
create mode 100644 contrib/s390/crc32-vx.c create mode 100644 contrib/s390/crc32-vx.c
create mode 100644 contrib/s390/crc32_z_resolver.c
diff --git a/Makefile.in b/Makefile.in diff --git a/Makefile.in b/Makefile.in
index 6070dcc..9e9743b 100644 index 2e78f38..04c2f5d 100644
--- a/Makefile.in --- a/Makefile.in
+++ b/Makefile.in +++ b/Makefile.in
@@ -29,6 +29,7 @@ LDFLAGS= @@ -29,6 +29,7 @@ LDFLAGS=
@ -27,9 +30,9 @@ index 6070dcc..9e9743b 100644
STATICLIB=libz.a STATICLIB=libz.a
SHAREDLIB=libz.so SHAREDLIB=libz.so
@@ -179,6 +180,9 @@ crc32_power8.o: $(SRCDIR)contrib/power8-crc/vec_crc32.c @@ -179,6 +180,9 @@ crc32.o: $(SRCDIR)crc32.c
crc32.o: $(SRCDIR)crc32.c crc32_z_power8.o: $(SRCDIR)contrib/power/crc32_z_power8.c
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)crc32.c $(CC) $(CFLAGS) -mcpu=power8 $(ZINC) -c -o $@ $(SRCDIR)contrib/power/crc32_z_power8.c
+crc32-vx.o: $(SRCDIR)contrib/s390/crc32-vx.c +crc32-vx.o: $(SRCDIR)contrib/s390/crc32-vx.c
+ $(CC) $(CFLAGS) $(VGFMAFLAG) $(ZINC) -c -o $@ $(SRCDIR)contrib/s390/crc32-vx.c + $(CC) $(CFLAGS) $(VGFMAFLAG) $(ZINC) -c -o $@ $(SRCDIR)contrib/s390/crc32-vx.c
@ -37,7 +40,7 @@ index 6070dcc..9e9743b 100644
deflate.o: $(SRCDIR)deflate.c deflate.o: $(SRCDIR)deflate.c
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)deflate.c $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)deflate.c
@@ -234,6 +238,11 @@ crc32.lo: $(SRCDIR)crc32.c @@ -229,6 +233,11 @@ crc32.lo: $(SRCDIR)crc32.c
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/crc32.o $(SRCDIR)crc32.c $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/crc32.o $(SRCDIR)crc32.c
-@mv objs/crc32.o $@ -@mv objs/crc32.o $@
@ -46,15 +49,15 @@ index 6070dcc..9e9743b 100644
+ $(CC) $(SFLAGS) $(VGFMAFLAG) $(ZINC) -DPIC -c -o objs/crc32-vx.o $(SRCDIR)contrib/s390/crc32-vx.c + $(CC) $(SFLAGS) $(VGFMAFLAG) $(ZINC) -DPIC -c -o objs/crc32-vx.o $(SRCDIR)contrib/s390/crc32-vx.c
+ -@mv objs/crc32-vx.o $@ + -@mv objs/crc32-vx.o $@
+ +
deflate.lo: $(SRCDIR)deflate.c crc32_z_power8.lo: $(SRCDIR)contrib/power/crc32_z_power8.c
-@mkdir objs 2>/dev/null || test -d objs -@mkdir objs 2>/dev/null || test -d objs
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/deflate.o $(SRCDIR)deflate.c $(CC) $(SFLAGS) -mcpu=power8 $(ZINC) -DPIC -c -o objs/crc32_z_power8.o $(SRCDIR)contrib/power/crc32_z_power8.c
diff --git a/configure b/configure diff --git a/configure b/configure
index 70ed86b..7941f75 100755 index dd01b5c..acf94a5 100755
--- a/configure --- a/configure
+++ b/configure +++ b/configure
@@ -923,6 +923,32 @@ EOF @@ -927,6 +927,32 @@ else
fi echo "Checking for sys/sdt.h ... No." | tee -a configure.log
fi fi
+# check if we are compiling for s390 and binutils support vector extensions +# check if we are compiling for s390 and binutils support vector extensions
@ -86,7 +89,7 @@ index 70ed86b..7941f75 100755
# show the results in the log # show the results in the log
echo >> configure.log echo >> configure.log
echo ALL = $ALL >> configure.log echo ALL = $ALL >> configure.log
@@ -955,6 +981,7 @@ echo mandir = $mandir >> configure.log @@ -960,6 +986,7 @@ echo mandir = $mandir >> configure.log
echo prefix = $prefix >> configure.log echo prefix = $prefix >> configure.log
echo sharedlibdir = $sharedlibdir >> configure.log echo sharedlibdir = $sharedlibdir >> configure.log
echo uname = $uname >> configure.log echo uname = $uname >> configure.log
@ -94,7 +97,7 @@ index 70ed86b..7941f75 100755
# udpate Makefile with the configure results # udpate Makefile with the configure results
sed < ${SRCDIR}Makefile.in " sed < ${SRCDIR}Makefile.in "
@@ -964,6 +991,7 @@ sed < ${SRCDIR}Makefile.in " @@ -969,6 +996,7 @@ sed < ${SRCDIR}Makefile.in "
/^LDFLAGS *=/s#=.*#=$LDFLAGS# /^LDFLAGS *=/s#=.*#=$LDFLAGS#
/^LDSHARED *=/s#=.*#=$LDSHARED# /^LDSHARED *=/s#=.*#=$LDSHARED#
/^CPP *=/s#=.*#=$CPP# /^CPP *=/s#=.*#=$CPP#
@ -102,6 +105,40 @@ index 70ed86b..7941f75 100755
/^STATICLIB *=/s#=.*#=$STATICLIB# /^STATICLIB *=/s#=.*#=$STATICLIB#
/^SHAREDLIB *=/s#=.*#=$SHAREDLIB# /^SHAREDLIB *=/s#=.*#=$SHAREDLIB#
/^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV# /^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV#
diff --git a/contrib/gcc/zifunc.h b/contrib/gcc/zifunc.h
index daf4fe4..b62379e 100644
--- a/contrib/gcc/zifunc.h
+++ b/contrib/gcc/zifunc.h
@@ -8,9 +8,28 @@
/* Helpers for arch optimizations */
+#if defined(__clang__)
+#if __has_feature(coverage_sanitizer)
+#define Z_IFUNC_NO_SANCOV __attribute__((no_sanitize("coverage")))
+#else /* __has_feature(coverage_sanitizer) */
+#define Z_IFUNC_NO_SANCOV
+#endif /* __has_feature(coverage_sanitizer) */
+#else /* __clang__ */
+#define Z_IFUNC_NO_SANCOV
+#endif /* __clang__ */
+
+#ifdef __s390__
+#define Z_IFUNC_PARAMS unsigned long hwcap
+#define Z_IFUNC_ATTRS Z_IFUNC_NO_SANCOV
+#else /* __s390__ */
+#define Z_IFUNC_PARAMS void
+#define Z_IFUNC_ATTRS
+#endif /* __s390__ */
+
#define Z_IFUNC(fname) \
typeof(fname) fname __attribute__ ((ifunc (#fname "_resolver"))); \
- local typeof(fname) *fname##_resolver(void)
+ Z_IFUNC_ATTRS \
+ local typeof(fname) *fname##_resolver(Z_IFUNC_PARAMS)
/* This is a helper macro to declare a resolver for an indirect function
* (ifunc). Let's say you have function
*
diff --git a/contrib/s390/crc32-vx.c b/contrib/s390/crc32-vx.c diff --git a/contrib/s390/crc32-vx.c b/contrib/s390/crc32-vx.c
new file mode 100644 new file mode 100644
index 0000000..fa5387c index 0000000..fa5387c
@ -303,16 +340,14 @@ index 0000000..fa5387c
+ +
+ return ((uv4si)v2)[2]; + return ((uv4si)v2)[2];
+} +}
diff --git a/crc32.c b/crc32.c diff --git a/contrib/s390/crc32_z_resolver.c b/contrib/s390/crc32_z_resolver.c
index 34132ea..dfa33ef 100644 new file mode 100644
--- a/crc32.c index 0000000..9749cab
+++ b/crc32.c --- /dev/null
@@ -252,12 +252,54 @@ unsigned long crc32_vpmsum(unsigned long, const unsigned char FAR *, z_size_t); +++ b/contrib/s390/crc32_z_resolver.c
#endif @@ -0,0 +1,41 @@
#endif
+#ifdef HAVE_S390X_VX
+#include <sys/auxv.h> +#include <sys/auxv.h>
+#include "../gcc/zifunc.h"
+ +
+#define VX_MIN_LEN 64 +#define VX_MIN_LEN 64
+#define VX_ALIGNMENT 16L +#define VX_ALIGNMENT 16L
@ -322,17 +357,17 @@ index 34132ea..dfa33ef 100644
+ +
+local unsigned long s390_crc32_vx(unsigned long crc, const unsigned char FAR *buf, z_size_t len) +local unsigned long s390_crc32_vx(unsigned long crc, const unsigned char FAR *buf, z_size_t len)
+{ +{
+ uint64_t prealign, aligned, remaining; + uintptr_t prealign, aligned, remaining;
+ +
+ if (buf == Z_NULL) return 0UL; + if (buf == Z_NULL) return 0UL;
+ +
+ if (len < VX_MIN_LEN + VX_ALIGN_MASK) + if (len < VX_MIN_LEN + VX_ALIGN_MASK)
+ return crc32_big(crc, buf, len); + return crc32_z_default(crc, buf, len);
+ +
+ if ((uintptr_t)buf & VX_ALIGN_MASK) { + if ((uintptr_t)buf & VX_ALIGN_MASK) {
+ prealign = VX_ALIGNMENT - ((uintptr_t)buf & VX_ALIGN_MASK); + prealign = VX_ALIGNMENT - ((uintptr_t)buf & VX_ALIGN_MASK);
+ len -= prealign; + len -= prealign;
+ crc = crc32_big(crc, buf, prealign); + crc = crc32_z_default(crc, buf, prealign);
+ buf += prealign; + buf += prealign;
+ } + }
+ aligned = len & ~VX_ALIGN_MASK; + aligned = len & ~VX_ALIGN_MASK;
@ -341,53 +376,53 @@ index 34132ea..dfa33ef 100644
+ crc = crc32_le_vgfm_16(crc ^ 0xffffffff, buf, (size_t)aligned) ^ 0xffffffff; + crc = crc32_le_vgfm_16(crc ^ 0xffffffff, buf, (size_t)aligned) ^ 0xffffffff;
+ +
+ if (remaining) + if (remaining)
+ crc = crc32_big(crc, buf + aligned, remaining); + crc = crc32_z_default(crc, buf + aligned, remaining);
+ +
+ return crc; + return crc;
+} +}
+#endif
+ +
/* due to a quirk of gnu_indirect_function - "local" (aka static) is applied to +Z_IFUNC(crc32_z)
* crc32_z which is not desired. crc32_z_ifunc is implictly "local" */ +{
#ifndef Z_IFUNC_ASM
local
#endif
-unsigned long (*(crc32_z_ifunc(void)))(unsigned long, const unsigned char FAR *, z_size_t)
+unsigned long (*(crc32_z_ifunc(
+#ifdef __s390__
+unsigned long hwcap
+#else
+void
+#endif
+)))(unsigned long, const unsigned char FAR *, z_size_t)
{
#if _ARCH_PWR8==1
#if defined(__BUILTIN_CPU_SUPPORTS__)
@@ -269,6 +311,11 @@ unsigned long (*(crc32_z_ifunc(void)))(unsigned long, const unsigned char FAR *,
#endif
#endif /* _ARCH_PWR8 */
+#ifdef HAVE_S390X_VX
+ if (hwcap & HWCAP_S390_VX) + if (hwcap & HWCAP_S390_VX)
+ return s390_crc32_vx; + return s390_crc32_vx;
+#endif + return crc32_z_default;
+ +}
/* return a function pointer for optimized arches here */ diff --git a/crc32.c b/crc32.c
index ae7b7e7..c212261 100644
--- a/crc32.c
+++ b/crc32.c
@@ -736,12 +736,12 @@ local z_word_t crc_word_big(data)
#endif
#ifdef DYNAMIC_CRC_TABLE /* ========================================================================= */
@@ -301,7 +348,11 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) -#ifdef Z_POWER_OPT
static unsigned long ZEXPORT (*crc32_func)(unsigned long, const unsigned char FAR *, z_size_t) = NULL; +#if defined(Z_POWER_OPT) || defined(HAVE_S390X_VX)
/* Rename function so resolver can use its symbol. The default version will be
* returned by the resolver if the host has no support for an optimized version.
*/
#define crc32_z crc32_z_default
-#endif /* Z_POWER_OPT */
+#endif /* defined(Z_POWER_OPT) || defined(HAVE_S390X_VX) */
if (!crc32_func) unsigned long ZEXPORT crc32_z(crc, buf, len)
- crc32_func = crc32_z_ifunc(); unsigned long crc;
+ crc32_func = crc32_z_ifunc( @@ -1064,10 +1064,15 @@ unsigned long ZEXPORT crc32_z(crc, buf, len)
+#ifdef __s390__ return crc ^ 0xffffffff;
+ getauxval(AT_HWCAP)
+#endif
+ );
return (*crc32_func)(crc, buf, len);
} }
-- -#ifdef Z_POWER_OPT
2.25.1 +#if defined(Z_POWER_OPT) || defined(HAVE_S390X_VX)
#undef crc32_z
+#ifdef Z_POWER_OPT
#include "contrib/power/crc32_z_resolver.c"
#endif /* Z_POWER_OPT */
+#ifdef HAVE_S390X_VX
+#include "contrib/s390/crc32_z_resolver.c"
+#endif /* HAVE_S390X_VX */
+#endif /* defined(Z_POWER_OPT) || defined(HAVE_S390X_VX) */
#endif
--
2.35.1