Index: sys/conf/files =================================================================== --- sys/conf/files +++ sys/conf/files @@ -626,6 +626,23 @@ compile-with "${NORMAL_C} -I$S/contrib/ngatm" contrib/ngatm/netnatm/sig/sig_verify.c optional ngatm_uni \ compile-with "${NORMAL_C} -I$S/contrib/ngatm" +# Zstd +contrib/zstd/lib/common/zstd_common.c standard compile-with ${ZSTD_C} +contrib/zstd/lib/common/fse_decompress.c standard compile-with ${ZSTD_C} +contrib/zstd/lib/common/entropy_common.c standard compile-with ${ZSTD_C} +contrib/zstd/lib/common/error_private.c standard compile-with ${ZSTD_C} +contrib/zstd/lib/common/zstd_kmalloc.c standard compile-with ${ZSTD_C} +contrib/zstd/lib/common/xxhash.c standard compile-with ${ZSTD_C} +contrib/zstd/lib/compress/zstd_compress.c standard compile-with ${ZSTD_C} +contrib/zstd/lib/compress/fse_compress.c standard compile-with ${ZSTD_C} +contrib/zstd/lib/compress/huf_compress.c standard compile-with ${ZSTD_C} +contrib/zstd/lib/compress/zstd_double_fast.c standard compile-with ${ZSTD_C} +contrib/zstd/lib/compress/zstd_fast.c standard compile-with ${ZSTD_C} +contrib/zstd/lib/compress/zstd_lazy.c standard compile-with ${ZSTD_C} +contrib/zstd/lib/compress/zstd_ldm.c standard compile-with ${ZSTD_C} +contrib/zstd/lib/compress/zstd_opt.c standard compile-with ${ZSTD_C} +contrib/zstd/lib/decompress/zstd_decompress.c standard compile-with ${ZSTD_C} +contrib/zstd/lib/decompress/huf_decompress.c standard compile-with ${ZSTD_C} crypto/blowfish/bf_ecb.c optional ipsec | ipsec_support crypto/blowfish/bf_skey.c optional crypto | ipsec | ipsec_support crypto/camellia/camellia.c optional crypto | ipsec | ipsec_support Index: sys/conf/kern.pre.mk =================================================================== --- sys/conf/kern.pre.mk +++ sys/conf/kern.pre.mk @@ -132,6 +132,9 @@ NORMAL_FWO= ${LD} -b binary --no-warn-mismatch -d -warn-common -r \ -m ${LD_EMULATION} -o ${.TARGET} ${.ALLSRC:M*.fw} +# for ZSTD in the kernel +ZSTD_C= ${CC} -c ${CFLAGS} -DZSTD_HEAPMODE=1 -I$S/contrib/zstd/lib -I$S/contrib/zstd/lib/common ${WERROR} -Wno-missing-prototypes ${PROF} ${.IMPSRC} + # Common for dtrace / zfs CDDL_CFLAGS= -DFREEBSD_NAMECACHE -nostdinc -I$S/cddl/compat/opensolaris -I$S/cddl/contrib/opensolaris/uts/common -I$S -I$S/cddl/contrib/opensolaris/common ${CFLAGS} -Wno-unknown-pragmas -Wno-missing-prototypes -Wno-undef -Wno-strict-prototypes -Wno-cast-qual -Wno-parentheses -Wno-redundant-decls -Wno-missing-braces -Wno-uninitialized -Wno-unused -Wno-inline -Wno-switch -Wno-pointer-arith -Wno-unknown-pragmas CDDL_CFLAGS+= -include $S/cddl/compat/opensolaris/sys/debug_compat.h Index: sys/contrib/zstd/lib/common/bitstream.h =================================================================== --- sys/contrib/zstd/lib/common/bitstream.h +++ sys/contrib/zstd/lib/common/bitstream.h @@ -175,7 +175,7 @@ unsigned long r=0; _BitScanReverse ( &r, val ); return (unsigned) r; -# elif defined(__GNUC__) && (__GNUC__ >= 3) /* Use GCC Intrinsic */ +# elif defined(__GNUC__) && (__GNUC__ >= 3) && __has_builtin(__builtin_clz) /* Use GCC Intrinsic */ return 31 - __builtin_clz (val); # else /* Software version */ static const unsigned DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, Index: sys/contrib/zstd/lib/common/error_private.h =================================================================== --- sys/contrib/zstd/lib/common/error_private.h +++ sys/contrib/zstd/lib/common/error_private.h @@ -21,7 +21,11 @@ /* **************************************** * Dependencies ******************************************/ +#ifdef _KERNEL +#include "zstd_kfreebsd.h" +#else #include /* size_t */ +#endif #include "zstd_errors.h" /* enum list */ Index: sys/contrib/zstd/lib/common/fse.h =================================================================== --- sys/contrib/zstd/lib/common/fse.h +++ sys/contrib/zstd/lib/common/fse.h @@ -43,7 +43,11 @@ /*-***************************************** * Dependencies ******************************************/ +#ifdef _KERNEL +#include "zstd_kfreebsd.h" +#else #include /* size_t, ptrdiff_t */ +#endif /*-***************************************** Index: sys/contrib/zstd/lib/common/fse_decompress.c =================================================================== --- sys/contrib/zstd/lib/common/fse_decompress.c +++ sys/contrib/zstd/lib/common/fse_decompress.c @@ -36,8 +36,12 @@ /* ************************************************************** * Includes ****************************************************************/ +#ifdef _KERNEL +#include "zstd_kfreebsd.h" +#else #include /* malloc, free, qsort */ #include /* memcpy, memset */ +#endif #include "bitstream.h" #include "compiler.h" #define FSE_STATIC_LINKING_ONLY Index: sys/contrib/zstd/lib/common/huf.h =================================================================== --- sys/contrib/zstd/lib/common/huf.h +++ sys/contrib/zstd/lib/common/huf.h @@ -40,7 +40,11 @@ #define HUF_H_298734234 /* *** Dependencies *** */ +#ifdef _KERNEL +#include "zstd_kfreebsd.h" +#else #include /* size_t */ +#endif /* *** library symbols visibility *** */ Index: sys/contrib/zstd/lib/common/mem.h =================================================================== --- sys/contrib/zstd/lib/common/mem.h +++ sys/contrib/zstd/lib/common/mem.h @@ -18,8 +18,12 @@ /*-**************************************** * Dependencies ******************************************/ +#ifdef _KERNEL +#include "zstd_kfreebsd.h" +#else #include /* size_t, ptrdiff_t */ #include /* memcpy */ +#endif /*-**************************************** @@ -48,7 +52,9 @@ * Basic Types *****************************************************************/ #if !defined (__VMS) && (defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) +#ifndef _KERNEL # include +#endif typedef uint8_t BYTE; typedef uint16_t U16; typedef int16_t S16; Index: sys/contrib/zstd/lib/common/pool.h =================================================================== --- sys/contrib/zstd/lib/common/pool.h +++ sys/contrib/zstd/lib/common/pool.h @@ -16,7 +16,11 @@ #endif +#ifdef _KERNEL +#include "zstd_kfreebsd.h" +#else #include /* size_t */ +#endif #include "zstd_internal.h" /* ZSTD_customMem */ typedef struct POOL_ctx_s POOL_ctx; Index: sys/contrib/zstd/lib/common/xxhash.h =================================================================== --- sys/contrib/zstd/lib/common/xxhash.h +++ sys/contrib/zstd/lib/common/xxhash.h @@ -75,7 +75,11 @@ /* **************************** * Definitions ******************************/ +#ifdef _KERNEL +#include "zstd_kfreebsd.h" +#else #include /* size_t */ +#endif typedef enum { XXH_OK=0, XXH_ERROR } XXH_errorcode; Index: sys/contrib/zstd/lib/common/xxhash.c =================================================================== --- sys/contrib/zstd/lib/common/xxhash.c +++ sys/contrib/zstd/lib/common/xxhash.c @@ -97,11 +97,17 @@ ***************************************/ /* Modify the local functions below should you wish to use some other memory routines */ /* for malloc(), free() */ +#ifdef _KERNEL +#include "zstd_kfreebsd.h" +#else #include +#endif static void* XXH_malloc(size_t s) { return malloc(s); } static void XXH_free (void* p) { free(p); } +#ifndef _KERNEL /* for memcpy() */ #include +#endif static void* XXH_memcpy(void* dest, const void* src, size_t size) { return memcpy(dest,src,size); } #ifndef XXH_STATIC_LINKING_ONLY @@ -141,7 +147,9 @@ #ifndef MEM_MODULE # define MEM_MODULE # if !defined (__VMS) && (defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) +#ifndef _KERNEL # include +#endif typedef uint8_t BYTE; typedef uint16_t U16; typedef uint32_t U32; Index: sys/contrib/zstd/lib/common/zstd_common.c =================================================================== --- sys/contrib/zstd/lib/common/zstd_common.c +++ sys/contrib/zstd/lib/common/zstd_common.c @@ -13,8 +13,12 @@ /*-************************************* * Dependencies ***************************************/ +#ifdef _KERNEL +#include "zstd_kfreebsd.h" +#else #include /* malloc, calloc, free */ #include /* memset */ +#endif #include "error_private.h" #include "zstd_internal.h" Index: sys/contrib/zstd/lib/common/zstd_errors.h =================================================================== --- sys/contrib/zstd/lib/common/zstd_errors.h +++ sys/contrib/zstd/lib/common/zstd_errors.h @@ -16,7 +16,11 @@ #endif /*===== dependency =====*/ +#ifdef _KERNEL +#include "zstd_kfreebsd.h" +#else #include /* size_t */ +#endif /* ===== ZSTDERRORLIB_API : control library symbols visibility ===== */ Index: sys/contrib/zstd/lib/common/zstd_internal.h =================================================================== --- sys/contrib/zstd/lib/common/zstd_internal.h +++ sys/contrib/zstd/lib/common/zstd_internal.h @@ -327,7 +327,7 @@ unsigned long r=0; _BitScanReverse(&r, val); return (unsigned)r; -# elif defined(__GNUC__) && (__GNUC__ >= 3) /* GCC Intrinsic */ +# elif defined(__GNUC__) && (__GNUC__ >= 3) && __has_builtin(__builtin_clz) /* GCC Intrinsic */ return 31 - __builtin_clz(val); # else /* Software version */ static const int DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 }; Index: sys/contrib/zstd/lib/common/zstd_kfreebsd.h =================================================================== --- /dev/null +++ sys/contrib/zstd/lib/common/zstd_kfreebsd.h @@ -0,0 +1,55 @@ +/*- + * Copyright (c) 2014-2015 Allan Jude + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef ZSTD_KFREEBSD_H +#define ZSTD_KFREEBSD_H + +#if defined (__cplusplus) +extern "C" { +#endif + +#ifdef _KERNEL +#include /* u_int (systm.h) */ +#include /* size_t */ +#include /* memcpy, memset */ +#include /* ptrdiff_t */ + +#include +MALLOC_DECLARE(M_ZSTD); + +#define malloc(x) (malloc)((x), M_ZSTD, M_WAITOK) +#define free(x) (free)((x), M_ZSTD) +/* in zstd's use of calloc, a is always 1 */ +#define calloc(a,b) (malloc)((a)*(b), M_ZSTD, M_WAITOK | M_ZERO) +#endif + +#if defined (__cplusplus) +} +#endif + +#endif /* ZSTD_KFREEBSD_H */ Index: sys/contrib/zstd/lib/common/zstd_kmalloc.c =================================================================== --- /dev/null +++ sys/contrib/zstd/lib/common/zstd_kmalloc.c @@ -0,0 +1,33 @@ +/*- + * Copyright (c) 2016-2017 Allan Jude + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include "zstd_freebsd.h" +/* #i nclude */ +#include + +MALLOC_DEFINE(M_ZSTD, "zstd", "ZSTD Compressor"); Index: sys/contrib/zstd/lib/compress/fse_compress.c =================================================================== --- sys/contrib/zstd/lib/compress/fse_compress.c +++ sys/contrib/zstd/lib/compress/fse_compress.c @@ -35,9 +35,13 @@ /* ************************************************************** * Includes ****************************************************************/ +#ifdef _KERNEL +#include "zstd_kfreebsd.h" +#else #include /* malloc, free, qsort */ #include /* memcpy, memset */ #include /* printf (debug) */ +#endif #include "bitstream.h" #include "compiler.h" #define FSE_STATIC_LINKING_ONLY Index: sys/contrib/zstd/lib/compress/huf_compress.c =================================================================== --- sys/contrib/zstd/lib/compress/huf_compress.c +++ sys/contrib/zstd/lib/compress/huf_compress.c @@ -43,8 +43,12 @@ /* ************************************************************** * Includes ****************************************************************/ +#ifdef _KERNEL +#include "zstd_kfreebsd.h" +#else #include /* memcpy, memset */ #include /* printf (debug) */ +#endif #include "bitstream.h" #define FSE_STATIC_LINKING_ONLY /* FSE_optimalTableLog_internal */ #include "fse.h" /* header compression */ Index: sys/contrib/zstd/lib/compress/zstd_compress.h =================================================================== --- sys/contrib/zstd/lib/compress/zstd_compress.h +++ sys/contrib/zstd/lib/compress/zstd_compress.h @@ -203,7 +203,7 @@ unsigned long r = 0; _BitScanReverse64( &r, val ); return (unsigned)(r>>3); -# elif defined(__GNUC__) && (__GNUC__ >= 4) +# elif defined(__GNUC__) && (__GNUC__ >= 4) && __has_builtin(__builtin_clzll) return (__builtin_clzll(val) >> 3); # else unsigned r; @@ -218,7 +218,7 @@ unsigned long r = 0; _BitScanReverse( &r, (unsigned long)val ); return (unsigned)(r>>3); -# elif defined(__GNUC__) && (__GNUC__ >= 3) +# elif defined(__GNUC__) && (__GNUC__ >= 3) && __has_builtin(__builtin_clz) return (__builtin_clz((U32)val) >> 3); # else unsigned r; Index: sys/contrib/zstd/lib/compress/zstd_compress.c =================================================================== --- sys/contrib/zstd/lib/compress/zstd_compress.c +++ sys/contrib/zstd/lib/compress/zstd_compress.c @@ -20,7 +20,11 @@ /*-************************************* * Dependencies ***************************************/ +#ifdef _KERNEL +#include "zstd_kfreebsd.h" +#else #include /* memset */ +#endif #include "mem.h" #define FSE_STATIC_LINKING_ONLY /* FSE_encodeSymbol */ #include "fse.h" Index: sys/contrib/zstd/lib/decompress/huf_decompress.c =================================================================== --- sys/contrib/zstd/lib/decompress/huf_decompress.c +++ sys/contrib/zstd/lib/decompress/huf_decompress.c @@ -35,7 +35,11 @@ /* ************************************************************** * Dependencies ****************************************************************/ +#ifdef _KERNEL +#include "zstd_kfreebsd.h" +#else #include /* memcpy, memset */ +#endif #include "bitstream.h" /* BIT_* */ #include "compiler.h" #include "fse.h" /* header compression */ Index: sys/contrib/zstd/lib/decompress/zstd_decompress.c =================================================================== --- sys/contrib/zstd/lib/decompress/zstd_decompress.c +++ sys/contrib/zstd/lib/decompress/zstd_decompress.c @@ -42,7 +42,11 @@ /*-******************************************************* * Dependencies *********************************************************/ +#ifdef _KERNEL +#include "zstd_kfreebsd.h" +#else #include /* memcpy, memmove, memset */ +#endif #include "mem.h" /* low level memory routines */ #define FSE_STATIC_LINKING_ONLY #include "fse.h" Index: sys/contrib/zstd/lib/zstd.h =================================================================== --- sys/contrib/zstd/lib/zstd.h +++ sys/contrib/zstd/lib/zstd.h @@ -15,7 +15,11 @@ #define ZSTD_H_235446 /* ====== Dependency ======*/ +#ifdef _KERNEL +#include "zstd_kfreebsd.h" +#else #include /* size_t */ +#endif /* ===== ZSTDLIB_API : control library symbols visibility ===== */