Index: sys/conf/files =================================================================== --- sys/conf/files +++ sys/conf/files @@ -4044,6 +4044,39 @@ libkern/timingsafe_bcmp.c standard libkern/zlib.c optional crypto | geom_uzip | ipsec | \ ipsec_support | mxge | netgraph_deflate | ddb_ctf | gzio +contrib/zlib/adler32.c optional crypto | geom_uzip | ipsec | \ + ipsec_support | mxge | ddb_ctf | gzio | zlib \ + compile-with "${ZLIB_C}" +contrib/zlib/compress.c optional crypto | geom_uzip | ipsec | \ + ipsec_support | mxge | ddb_ctf | gzio | zlib \ + compile-with "${ZLIB_C} -Wno-cast-qual" +contrib/zlib/deflate.c optional crypto | geom_uzip | ipsec | \ + ipsec_support | mxge | ddb_ctf | gzio | zlib \ + compile-with "${ZLIB_C} -Wno-cast-qual" +contrib/zlib/inffast.c optional crypto | geom_uzip | ipsec | \ + ipsec_support | mxge | ddb_ctf | gzio | zlib \ + compile-with "${ZLIB_C}" +contrib/zlib/inflate.c optional crypto | geom_uzip | ipsec | \ + ipsec_support | mxge | ddb_ctf | gzio | zlib \ + compile-with "${ZLIB_C}" +contrib/zlib/inftrees.c optional crypto | geom_uzip | ipsec | \ + ipsec_support | mxge | ddb_ctf | gzio | zlib \ + compile-with "${ZLIB_C}" +contrib/zlib/trees.c optional crypto | geom_uzip | ipsec | \ + ipsec_support | mxge | ddb_ctf | gzio | zlib \ + compile-with "${ZLIB_C}" +contrib/zlib/uncompr.c optional crypto | geom_uzip | ipsec | \ + ipsec_support | mxge | ddb_ctf | gzio | zlib \ + compile-with "${ZLIB_C} -Wno-cast-qual" +contrib/zlib/zutil.c optional crypto | geom_uzip | ipsec | \ + ipsec_support | mxge | ddb_ctf | gzio | zlib \ + compile-with "${ZLIB_C} -DHAVE_MEMCPY -DMY_ZCALLOC" +dev/zlib/zlib_mod.c optional crypto | geom_uzip | ipsec | \ + ipsec_support | mxge | ddb_ctf | gzio | zlib \ + compile-with "${ZLIB_C}" +dev/zlib/zcalloc.c optional crypto | geom_uzip | ipsec | \ + ipsec_support | mxge | ddb_ctf | gzio | zlib \ + compile-with "${ZLIB_C}" net/altq/altq_cbq.c optional altq net/altq/altq_codel.c optional altq net/altq/altq_hfsc.c optional altq Index: sys/conf/kern.pre.mk =================================================================== --- sys/conf/kern.pre.mk +++ sys/conf/kern.pre.mk @@ -173,6 +173,14 @@ NORMAL_FWO= ${LD} -b binary --no-warn-mismatch -d -warn-common -r \ -m ${LD_EMULATION} -o ${.TARGET} ${.ALLSRC:M*.fw} +# for zlib in the kernel +#ZLIB_CFLAGS= -I$S/contrib/zlib +ZLIB_CFLAGS+= -I$S/dev/zlib +#ZLIB_CFLAGS+= -DZ_PREFIX +ZLIB_CFLAGS+= -DMY_ZCALLOC +ZLIB_CFLAGS+= -DHAVE_MEMCPY +ZLIB_C= ${CC} -c ${ZLIB_CFLAGS} ${CFLAGS} ${.IMPSRC} + # for ZSTD in the kernel (include zstd/lib/freebsd before other CFLAGS) ZSTD_C= ${CC} -c -DZSTD_HEAPMODE=1 -I$S/contrib/zstd/lib/freebsd ${CFLAGS} -I$S/contrib/zstd/lib -I$S/contrib/zstd/lib/common ${WERROR} -Wno-inline -Wno-missing-prototypes ${PROF} -U__BMI__ ${.IMPSRC} Index: sys/conf/kmod.mk =================================================================== --- sys/conf/kmod.mk +++ sys/conf/kmod.mk @@ -104,6 +104,10 @@ __KLD_SHARED=no .endif +#ZLIB_CFLAGS= -I${SRCTOP}/sys/contrib/zlib +ZLIB_CFLAGS+= -I${SRCTOP}/sys/dev/zlib +#ZLIB_CFLAGS+= -DZ_PREFIX + .if !empty(CFLAGS:M-O[23s]) && empty(CFLAGS:M-fno-strict-aliasing) CFLAGS+= -fno-strict-aliasing .endif Index: sys/contrib/zlib/deflate.c =================================================================== --- sys/contrib/zlib/deflate.c +++ sys/contrib/zlib/deflate.c @@ -1622,8 +1622,10 @@ /* Maximum stored block length in deflate format (not including header). */ #define MAX_STORED 65535 +#if !defined(MIN) /* Minimum of a and b. */ #define MIN(a, b) ((a) > (b) ? (b) : (a)) +#endif /* =========================================================================== * Copy without compression as much as possible from the input stream, return Index: sys/dev/zlib/errno.h =================================================================== --- /dev/null +++ sys/dev/zlib/errno.h @@ -0,0 +1,3 @@ +/* This file is in the public domain */ +/* $FreeBSD$ */ +#include Index: sys/dev/zlib/fcntl.h =================================================================== --- /dev/null +++ sys/dev/zlib/fcntl.h @@ -0,0 +1,3 @@ +/* This file is in the public domain */ +/* $FreeBSD$ */ +#include Index: sys/dev/zlib/limits.h =================================================================== --- /dev/null +++ sys/dev/zlib/limits.h @@ -0,0 +1,3 @@ +/* This file is in the public domain */ +/* $FreeBSD$ */ +#include Index: sys/dev/zlib/stdarg.h =================================================================== --- /dev/null +++ sys/dev/zlib/stdarg.h @@ -0,0 +1,3 @@ +/* This file is in the public domain */ +/* $FreeBSD$ */ +#include Index: sys/dev/zlib/stddef.h =================================================================== --- /dev/null +++ sys/dev/zlib/stddef.h @@ -0,0 +1,4 @@ +/* This file is in the public domain */ +/* $FreeBSD$ */ +#include /* size_t */ +#include Index: sys/dev/zlib/stdio.h =================================================================== --- /dev/null +++ sys/dev/zlib/stdio.h @@ -0,0 +1,2 @@ +/* This file is in the public domain */ +/* $FreeBSD$ */ Index: sys/dev/zlib/stdlib.h =================================================================== --- /dev/null +++ sys/dev/zlib/stdlib.h @@ -0,0 +1,11 @@ +/* This file is in the public domain */ +/* $FreeBSD$ */ + +#define malloc kernz_malloc +#define free kernz_free + +void +*kernz_malloc(size_t size); + +void +kernz_free(void *ptr); Index: sys/dev/zlib/string.h =================================================================== --- /dev/null +++ sys/dev/zlib/string.h @@ -0,0 +1,3 @@ +/* This file is in the public domain */ +/* $FreeBSD$ */ +#include /* memcpy, memset */ Index: sys/dev/zlib/zcalloc.h =================================================================== --- /dev/null +++ sys/dev/zlib/zcalloc.h @@ -0,0 +1,7 @@ +#ifndef _DEV_ZLIB_ZCALLOC_ +#define _DEV_ZLIB_ZCALLOC_ + +void * zcalloc_waitok(void *nil, u_int items, u_int size); +void * zcalloc_nowait(void *nil, u_int items, u_int size); + +#endif Index: sys/dev/zlib/zcalloc.c =================================================================== --- /dev/null +++ sys/dev/zlib/zcalloc.c @@ -0,0 +1,53 @@ +#include +#include +/* zlib expects std malloc/free and replaced to call kernz_malloc/free */ +#undef malloc +#undef free +#include +#include + +MALLOC_DEFINE(M_ZLIB, "zlib", "ZLIB Compressor"); + +void * +zcalloc_waitok(void *nil, u_int items, u_int size) +{ + + return mallocarray(items, size, M_ZLIB, M_WAITOK); +} + +void * +zcalloc_nowait(void *nil, u_int items, u_int size) +{ + + return mallocarray(items, size, M_ZLIB, M_NOWAIT); +} + +void * +zcalloc(void *nil, u_int items, u_int size) +{ + + return zcalloc_waitok(nil, items, size); +} + +void +zcfree(void *nil, void *ptr) +{ + + free(ptr, M_ZLIB); +} + +void * +kernz_malloc(size_t size) +{ + void *ptr; + + ptr = malloc(size, M_ZLIB, M_WAITOK); + return ptr; +} + +void +kernz_free(void *ptr) +{ + + free(ptr, M_ZLIB); +} Index: sys/dev/zlib/zlib_mod.c =================================================================== --- /dev/null +++ sys/dev/zlib/zlib_mod.c @@ -0,0 +1,26 @@ +#include +#include +#include +#include + +static int +zlib_modevent(module_t mod, int type, void *unused) +{ + switch (type) { + case MOD_LOAD: + return 0; + case MOD_UNLOAD: + return 0; + } + return EINVAL; +} + +static moduledata_t zlib_mod = { + "zlib", + zlib_modevent, + 0 +}; +DECLARE_MODULE(zlib, zlib_mod, SI_SUB_DRIVERS, SI_ORDER_FIRST); +MODULE_VERSION(zlib, 1); + +#include "../../contrib/zlib/crc32.c" /* avoid conflict with libkern/crc32.c */ Index: sys/libkern/zlib.c =================================================================== --- sys/libkern/zlib.c +++ sys/libkern/zlib.c @@ -65,8 +65,6 @@ #include #include #include -#include -#include # define HAVE_MEMCPY #else @@ -5390,25 +5388,3 @@ return (s2 << 16) | s1; } /* --- adler32.c */ - -#ifdef _KERNEL -static int -zlib_modevent(module_t mod, int type, void *unused) -{ - switch (type) { - case MOD_LOAD: - return 0; - case MOD_UNLOAD: - return 0; - } - return EINVAL; -} - -static moduledata_t zlib_mod = { - "zlib", - zlib_modevent, - 0 -}; -DECLARE_MODULE(zlib, zlib_mod, SI_SUB_DRIVERS, SI_ORDER_FIRST); -MODULE_VERSION(zlib, 1); -#endif /* _KERNEL */ Index: sys/modules/zlib/Makefile =================================================================== --- sys/modules/zlib/Makefile +++ sys/modules/zlib/Makefile @@ -1,8 +1,31 @@ # $FreeBSD$ .PATH: ${SRCTOP}/sys/libkern +.PATH: ${SRCTOP}/sys/dev/zlib +.PATH: ${SRCTOP}/sys/contrib/zlib KMOD= zlib +# legacy zlib - 1.0.4 SRCS= zlib.c +# newer zlib - 1.2.11 +SRCS+= zlib_mod.c +SRCS+= zcalloc.c +SRCS+= adler32.c +SRCS+= compress.c +SRCS+= deflate.c +SRCS+= inffast.c +SRCS+= inflate.c +SRCS+= inftrees.c +SRCS+= trees.c +SRCS+= uncompr.c +SRCS+= zutil.c + +CFLAGS+=${ZLIB_CFLAGS} +CFLAGS.zutil.c+=-DMY_ZCALLOC +CFLAGS.zutil.c+=-DHAVE_MEMCPY + +CWARNFLAGS.compress.c+=-Wno-cast-qual # compress:49 +CWARNFLAGS.deflate.c+=-Wno-cast-qual # deflate.c:415 +CWARNFLAGS.uncompr.c+=-Wno-cast-qual # uncompr:49 .include Index: sys/sys/zlib.h =================================================================== --- sys/sys/zlib.h +++ sys/sys/zlib.h @@ -72,40 +72,42 @@ * If you *really* need a unique prefix for all types and library functions, * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. */ -#ifdef Z_PREFIX -# define deflateInit_ z_deflateInit_ -# define deflate z_deflate -# define deflateEnd z_deflateEnd -# define inflateInit_ z_inflateInit_ -# define inflate z_inflate -# define inflateEnd z_inflateEnd -# define deflateInit2_ z_deflateInit2_ -# define deflateSetDictionary z_deflateSetDictionary -# define deflateCopy z_deflateCopy -# define deflateReset z_deflateReset -# define deflateParams z_deflateParams -# define inflateInit2_ z_inflateInit2_ -# define inflateSetDictionary z_inflateSetDictionary -# define inflateSync z_inflateSync -# define inflateReset z_inflateReset -# define compress z_compress -# define uncompress z_uncompress -# define adler32 z_adler32 +#ifdef _KERNEL +# define deflateInit_ _zlib104_deflateInit_ +# define deflate _zlib104_deflate +# define deflateEnd _zlib104_deflateEnd +# define inflateInit_ _zlib104_inflateInit_ +# define inflate _zlib104_inflate +# define inflateEnd _zlib104_inflateEnd +# define deflateInit2_ _zlib104_deflateInit2_ +# define deflateSetDictionary _zlib104_deflateSetDictionary +# define deflateCopy _zlib104_deflateCopy +# define deflateReset _zlib104_deflateReset +# define deflateParams _zlib104_deflateParams +# define inflateInit2_ _zlib104_inflateInit2_ +# define inflateSetDictionary _zlib104_inflateSetDictionary +# define inflateSync _zlib104_inflateSync +# define inflateReset _zlib104_inflateReset +# define compress _zlib104_compress +# define uncompress _zlib104_uncompress +# define adler32 _zlib104_adler32 #if 0 -# define crc32 z_crc32 -# define get_crc_table z_get_crc_table +# define crc32 _zlib104_crc32 +# define get_crc_table _zlib104_get_crc_table #endif +# define deflate_copyright _zlib104_deflate_copyright +# define inflate_copyright _zlib104_inflate_copyright -# define Byte z_Byte -# define uInt z_uInt -# define uLong z_uLong -# define Bytef z_Bytef -# define charf z_charf -# define intf z_intf -# define uIntf z_uIntf -# define uLongf z_uLongf -# define voidpf z_voidpf -# define voidp z_voidp +# define Byte _zlib104_Byte +# define uInt _zlib104_uInt +# define uLong _zlib104_uLong +# define Bytef _zlib104_Bytef +# define charf _zlib104_charf +# define intf _zlib104_intf +# define uIntf _zlib104_uIntf +# define uLongf _zlib104_uLongf +# define voidpf _zlib104_voidpf +# define voidp _zlib104_voidp #endif #if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)