From 31020498a02f977f3b57ea5a76f251ad133afb49 Mon Sep 17 00:00:00 2001 Message-Id: <31020498a02f977f3b57ea5a76f251ad133afb49.1606170836.git.m.a.young@xxxxxxxxxxxx> In-Reply-To: <1d4d76a9971fbc358875d95543d6aa7d8e727ba4.1606170834.git.m.a.young@xxxxxxxxxxxx> References: <1d4d76a9971fbc358875d95543d6aa7d8e727ba4.1606170834.git.m.a.young@xxxxxxxxxxxx> From: Michael Young Date: Mon, 23 Nov 2020 19:17:07 +0000 Subject: [XEN PATCH 2/2] adapt kernel code for use in xen (dom0 only so far) --- xen/common/Makefile | 2 +- xen/common/decompress.c | 3 + xen/common/{decompress_unzstd.c => unzstd.c} | 69 +++---- xen/common/xxhash.c | 50 ++---- xen/common/zstd/decompress.c | 180 +++++++------------ xen/common/zstd/entropy_common.c | 10 +- xen/common/zstd/error_private.h | 4 +- xen/common/zstd/fse.h | 2 +- xen/common/zstd/fse_decompress.c | 16 +- xen/common/zstd/huf.h | 2 +- xen/common/zstd/huf_decompress.c | 58 +++--- xen/common/zstd/mem.h | 6 +- xen/common/zstd/private.h | 105 +++++++++++ xen/common/zstd/zstd_common.c | 13 +- xen/common/zstd/zstd_internal.h | 14 +- xen/include/xen/decompress.h | 2 +- xen/include/xen/xxhash.h | 2 +- xen/include/xen/zstd.h | 2 +- 18 files changed, 282 insertions(+), 258 deletions(-) rename xen/common/{decompress_unzstd.c => unzstd.c} (86%) create mode 100644 xen/common/zstd/private.h diff --git a/xen/common/Makefile b/xen/common/Makefile index d109f279a4..5ba09f04ac 100644 --- a/xen/common/Makefile +++ b/xen/common/Makefile @@ -59,7 +59,7 @@ obj-bin-y += warning.init.o obj-$(CONFIG_XENOPROF) += xenoprof.o obj-y += xmalloc_tlsf.o -obj-bin-$(CONFIG_X86) += $(foreach n,decompress bunzip2 unxz unlzma lzo unlzo unlz4 earlycpio,$(n).init.o) +obj-bin-$(CONFIG_X86) += $(foreach n,decompress bunzip2 unxz unlzma lzo unlzo unlz4 unzstd earlycpio,$(n).init.o) obj-$(CONFIG_COMPAT) += $(addprefix compat/,domain.o kernel.o memory.o multicall.o xlat.o) diff --git a/xen/common/decompress.c b/xen/common/decompress.c index 9d6e0c4ab0..0da27b0ab6 100644 --- a/xen/common/decompress.c +++ b/xen/common/decompress.c @@ -31,5 +31,8 @@ int __init decompress(void *inbuf, unsigned int len, void *outbuf) if ( len >= 2 && !memcmp(inbuf, "\x02\x21", 2) ) return unlz4(inbuf, len, NULL, NULL, outbuf, NULL, error); + if ( len >= 4 && !memcmp(inbuf, "\050\265\057\375", 4) ) + return unzstd(inbuf, len, NULL, NULL, outbuf, NULL, error); + return 1; } diff --git a/xen/common/decompress_unzstd.c b/xen/common/unzstd.c similarity index 86% rename from xen/common/decompress_unzstd.c rename to xen/common/unzstd.c index 0ad2c15479..a2c382fddc 100644 --- a/xen/common/decompress_unzstd.c +++ b/xen/common/unzstd.c @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: GPL-2.0 - /* * Important notes about in-place decompression * @@ -51,6 +49,10 @@ * * safety_margin = 22 + uncompressed_size * 3 / 131072 + 131072 * <= 22 + (uncompressed_size >> 15) + 131072 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. */ /* @@ -65,19 +67,16 @@ * Define __DISABLE_EXPORTS in preboot environments to prevent symbols * from xxhash and zstd from being exported by the EXPORT_SYMBOL macro. */ -#ifdef STATIC -# define UNZSTD_PREBOOT -# include "xxhash.c" -# include "zstd/entropy_common.c" -# include "zstd/fse_decompress.c" -# include "zstd/huf_decompress.c" -# include "zstd/zstd_common.c" -# include "zstd/decompress.c" -#endif -#include -#include -#include +#include "decompress.h" +#include "xxhash.c" +#include "zstd/entropy_common.c" +#include "zstd/fse_decompress.c" +#include "zstd/huf_decompress.c" +#include "zstd/zstd_common.c" +#include "zstd/decompress.c" + +#include /* 128MB is the maximum window size supported by zstd. */ #define ZSTD_WINDOWSIZE_MAX (1 << ZSTD_WINDOWLOG_MAX) @@ -89,7 +88,7 @@ */ #define ZSTD_IOBUF_SIZE (1 << 17) -static int INIT handle_zstd_error(size_t ret, void (*error)(char *x)) +static int INIT handle_zstd_error(size_t ret, void (*error)(const char *x)) { const int err = ZSTD_getErrorCode(ret); @@ -120,9 +119,9 @@ static int INIT handle_zstd_error(size_t ret, void (*error)(char *x)) * We can allocate less memory (no circular buffer for the sliding window), * and avoid some memcpy() calls. */ -static int INIT decompress_single(const u8 *in_buf, long in_len, u8 *out_buf, - long out_len, long *in_pos, - void (*error)(char *x)) +static int INIT decompress_single(const u8 *in_buf, unsigned int in_len, u8 *out_buf, + long out_len, unsigned int *in_pos, + void (*error)(const char *x)) { const size_t wksp_size = ZSTD_DCtxWorkspaceBound(); void *wksp = large_malloc(wksp_size); @@ -160,12 +159,12 @@ out: return err; } -static int INIT __unzstd(unsigned char *in_buf, long in_len, - long (*fill)(void*, unsigned long), - long (*flush)(void*, unsigned long), +static int INIT __unzstd(unsigned char *in_buf, unsigned int in_len, + int (*fill)(void*, unsigned int), + int (*flush)(void*, unsigned int), unsigned char *out_buf, long out_len, - long *in_pos, - void (*error)(char *x)) + unsigned int *in_pos, + void (*error)(const char *x)) { ZSTD_inBuffer in; ZSTD_outBuffer out; @@ -179,7 +178,7 @@ static int INIT __unzstd(unsigned char *in_buf, long in_len, size_t ret; if (out_len == 0) - out_len = LONG_MAX; /* no limit */ + out_len = INT_MAX; /* no limit */ if (fill == NULL && flush == NULL) /* @@ -322,24 +321,12 @@ out: return err; } -#ifndef UNZSTD_PREBOOT -STATIC int INIT unzstd(unsigned char *buf, long len, - long (*fill)(void*, unsigned long), - long (*flush)(void*, unsigned long), +STATIC int INIT unzstd(unsigned char *buf, unsigned int len, + int (*fill)(void*, unsigned int), + int (*flush)(void*, unsigned int), unsigned char *out_buf, - long *pos, - void (*error)(char *x)) + unsigned int *pos, + void (*error)(const char *x)) { return __unzstd(buf, len, fill, flush, out_buf, 0, pos, error); } -#else -STATIC int INIT __decompress(unsigned char *buf, long len, - long (*fill)(void*, unsigned long), - long (*flush)(void*, unsigned long), - unsigned char *out_buf, long out_len, - long *pos, - void (*error)(char *x)) -{ - return __unzstd(buf, len, fill, flush, out_buf, out_len, pos, error); -} -#endif diff --git a/xen/common/xxhash.c b/xen/common/xxhash.c index d5bb9ff106..3ab3e01859 100644 --- a/xen/common/xxhash.c +++ b/xen/common/xxhash.c @@ -38,13 +38,10 @@ * - xxHash source repository: https://github.com/Cyan4973/xxHash */ -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include "zstd/private.h" /*-************************************* * Macros @@ -76,22 +73,20 @@ static const uint64_t PRIME64_5 = 2870177450012600261ULL; /*-************************** * Utils ***************************/ -void xxh32_copy_state(struct xxh32_state *dst, const struct xxh32_state *src) +void INIT xxh32_copy_state(struct xxh32_state *dst, const struct xxh32_state *src) { memcpy(dst, src, sizeof(*dst)); } -EXPORT_SYMBOL(xxh32_copy_state); -void xxh64_copy_state(struct xxh64_state *dst, const struct xxh64_state *src) +void INIT xxh64_copy_state(struct xxh64_state *dst, const struct xxh64_state *src) { memcpy(dst, src, sizeof(*dst)); } -EXPORT_SYMBOL(xxh64_copy_state); /*-*************************** * Simple Hash Functions ****************************/ -static uint32_t xxh32_round(uint32_t seed, const uint32_t input) +static uint32_t INIT xxh32_round(uint32_t seed, const uint32_t input) { seed += input * PRIME32_2; seed = xxh_rotl32(seed, 13); @@ -99,7 +94,7 @@ static uint32_t xxh32_round(uint32_t seed, const uint32_t input) return seed; } -uint32_t xxh32(const void *input, const size_t len, const uint32_t seed) +uint32_t INIT xxh32(const void *input, const size_t len, const uint32_t seed) { const uint8_t *p = (const uint8_t *)input; const uint8_t *b_end = p + len; @@ -151,9 +146,8 @@ uint32_t xxh32(const void *input, const size_t len, const uint32_t seed) return h32; } -EXPORT_SYMBOL(xxh32); -static uint64_t xxh64_round(uint64_t acc, const uint64_t input) +static uint64_t INIT xxh64_round(uint64_t acc, const uint64_t input) { acc += input * PRIME64_2; acc = xxh_rotl64(acc, 31); @@ -161,7 +155,7 @@ static uint64_t xxh64_round(uint64_t acc, const uint64_t input) return acc; } -static uint64_t xxh64_merge_round(uint64_t acc, uint64_t val) +static uint64_t INIT xxh64_merge_round(uint64_t acc, uint64_t val) { val = xxh64_round(0, val); acc ^= val; @@ -169,7 +163,7 @@ static uint64_t xxh64_merge_round(uint64_t acc, uint64_t val) return acc; } -uint64_t xxh64(const void *input, const size_t len, const uint64_t seed) +uint64_t INIT xxh64(const void *input, const size_t len, const uint64_t seed) { const uint8_t *p = (const uint8_t *)input; const uint8_t *const b_end = p + len; @@ -234,12 +228,11 @@ uint64_t xxh64(const void *input, const size_t len, const uint64_t seed) return h64; } -EXPORT_SYMBOL(xxh64); /*-************************************************** * Advanced Hash Functions ***************************************************/ -void xxh32_reset(struct xxh32_state *statePtr, const uint32_t seed) +void INIT xxh32_reset(struct xxh32_state *statePtr, const uint32_t seed) { /* use a local state for memcpy() to avoid strict-aliasing warnings */ struct xxh32_state state; @@ -251,9 +244,8 @@ void xxh32_reset(struct xxh32_state *statePtr, const uint32_t seed) state.v4 = seed - PRIME32_1; memcpy(statePtr, &state, sizeof(state)); } -EXPORT_SYMBOL(xxh32_reset); -void xxh64_reset(struct xxh64_state *statePtr, const uint64_t seed) +void INIT xxh64_reset(struct xxh64_state *statePtr, const uint64_t seed) { /* use a local state for memcpy() to avoid strict-aliasing warnings */ struct xxh64_state state; @@ -265,9 +257,8 @@ void xxh64_reset(struct xxh64_state *statePtr, const uint64_t seed) state.v4 = seed - PRIME64_1; memcpy(statePtr, &state, sizeof(state)); } -EXPORT_SYMBOL(xxh64_reset); -int xxh32_update(struct xxh32_state *state, const void *input, const size_t len) +int INIT xxh32_update(struct xxh32_state *state, const void *input, const size_t len) { const uint8_t *p = (const uint8_t *)input; const uint8_t *const b_end = p + len; @@ -334,9 +325,8 @@ int xxh32_update(struct xxh32_state *state, const void *input, const size_t len) return 0; } -EXPORT_SYMBOL(xxh32_update); -uint32_t xxh32_digest(const struct xxh32_state *state) +uint32_t INIT xxh32_digest(const struct xxh32_state *state) { const uint8_t *p = (const uint8_t *)state->mem32; const uint8_t *const b_end = (const uint8_t *)(state->mem32) + @@ -372,9 +362,8 @@ uint32_t xxh32_digest(const struct xxh32_state *state) return h32; } -EXPORT_SYMBOL(xxh32_digest); -int xxh64_update(struct xxh64_state *state, const void *input, const size_t len) +int INIT xxh64_update(struct xxh64_state *state, const void *input, const size_t len) { const uint8_t *p = (const uint8_t *)input; const uint8_t *const b_end = p + len; @@ -439,9 +428,8 @@ int xxh64_update(struct xxh64_state *state, const void *input, const size_t len) return 0; } -EXPORT_SYMBOL(xxh64_update); -uint64_t xxh64_digest(const struct xxh64_state *state) +uint64_t INIT xxh64_digest(const struct xxh64_state *state) { const uint8_t *p = (const uint8_t *)state->mem64; const uint8_t *const b_end = (const uint8_t *)state->mem64 + @@ -494,7 +482,3 @@ uint64_t xxh64_digest(const struct xxh64_state *state) return h64; } -EXPORT_SYMBOL(xxh64_digest); - -MODULE_LICENSE("Dual BSD/GPL"); -MODULE_DESCRIPTION("xxHash"); diff --git a/xen/common/zstd/decompress.c b/xen/common/zstd/decompress.c index db6761ea4d..8e627d881a 100644 --- a/xen/common/zstd/decompress.c +++ b/xen/common/zstd/decompress.c @@ -33,9 +33,7 @@ #include "huf.h" #include "mem.h" /* low level memory routines */ #include "zstd_internal.h" -#include -#include -#include /* memcpy, memmove, memset */ +#include /* memcpy, memmove, memset */ #define ZSTD_PREFETCH(ptr) __builtin_prefetch(ptr, 0, 0) @@ -49,7 +47,7 @@ /*_******************************************************* * Memory operations **********************************************************/ -static void ZSTD_copy4(void *dst, const void *src) { memcpy(dst, src, 4); } +static void INIT ZSTD_copy4(void *dst, const void *src) { memcpy(dst, src, 4); } /*-************************************************************* * Context management @@ -101,9 +99,9 @@ struct ZSTD_DCtx_s { BYTE headerBuffer[ZSTD_FRAMEHEADERSIZE_MAX]; }; /* typedef'd to ZSTD_DCtx within "zstd.h" */ -size_t ZSTD_DCtxWorkspaceBound(void) { return ZSTD_ALIGN(sizeof(ZSTD_stack)) + ZSTD_ALIGN(sizeof(ZSTD_DCtx)); } +size_t INIT ZSTD_DCtxWorkspaceBound(void) { return ZSTD_ALIGN(sizeof(ZSTD_stack)) + ZSTD_ALIGN(sizeof(ZSTD_DCtx)); } -size_t ZSTD_decompressBegin(ZSTD_DCtx *dctx) +size_t INIT ZSTD_decompressBegin(ZSTD_DCtx *dctx) { dctx->expected = ZSTD_frameHeaderSize_prefix; dctx->stage = ZSTDds_getFrameHeaderSize; @@ -123,7 +121,7 @@ size_t ZSTD_decompressBegin(ZSTD_DCtx *dctx) return 0; } -ZSTD_DCtx *ZSTD_createDCtx_advanced(ZSTD_customMem customMem) +ZSTD_DCtx INIT *ZSTD_createDCtx_advanced(ZSTD_customMem customMem) { ZSTD_DCtx *dctx; @@ -138,13 +136,13 @@ ZSTD_DCtx *ZSTD_createDCtx_advanced(ZSTD_customMem customMem) return dctx; } -ZSTD_DCtx *ZSTD_initDCtx(void *workspace, size_t workspaceSize) +ZSTD_DCtx INIT *ZSTD_initDCtx(void *workspace, size_t workspaceSize) { ZSTD_customMem const stackMem = ZSTD_initStack(workspace, workspaceSize); return ZSTD_createDCtx_advanced(stackMem); } -size_t ZSTD_freeDCtx(ZSTD_DCtx *dctx) +size_t INIT ZSTD_freeDCtx(ZSTD_DCtx *dctx) { if (dctx == NULL) return 0; /* support free on NULL */ @@ -152,13 +150,13 @@ size_t ZSTD_freeDCtx(ZSTD_DCtx *dctx) return 0; /* reserved as a potential error code in the future */ } -void ZSTD_copyDCtx(ZSTD_DCtx *dstDCtx, const ZSTD_DCtx *srcDCtx) +void INIT ZSTD_copyDCtx(ZSTD_DCtx *dstDCtx, const ZSTD_DCtx *srcDCtx) { size_t const workSpaceSize = (ZSTD_BLOCKSIZE_ABSOLUTEMAX + WILDCOPY_OVERLENGTH) + ZSTD_frameHeaderSize_max; memcpy(dstDCtx, srcDCtx, sizeof(ZSTD_DCtx) - workSpaceSize); /* no need to copy workspace */ } -static void ZSTD_refDDict(ZSTD_DCtx *dstDCtx, const ZSTD_DDict *ddict); +static void INIT ZSTD_refDDict(ZSTD_DCtx *dstDCtx, const ZSTD_DDict *ddict); /*-************************************************************* * Decompression section @@ -169,7 +167,7 @@ static void ZSTD_refDDict(ZSTD_DCtx *dstDCtx, const ZSTD_DDict *ddict); * Note : Frame Identifier is 4 bytes. If `size < 4`, @return will always be 0. * Note 2 : Legacy Frame Identifiers are considered valid only if Legacy Support is enabled. * Note 3 : Skippable Frame Identifiers are considered valid. */ -unsigned ZSTD_isFrame(const void *buffer, size_t size) +unsigned INIT ZSTD_isFrame(const void *buffer, size_t size) { if (size < 4) return 0; @@ -186,7 +184,7 @@ unsigned ZSTD_isFrame(const void *buffer, size_t size) /** ZSTD_frameHeaderSize() : * srcSize must be >= ZSTD_frameHeaderSize_prefix. * @return : size of the Frame Header */ -static size_t ZSTD_frameHeaderSize(const void *src, size_t srcSize) +static size_t INIT ZSTD_frameHeaderSize(const void *src, size_t srcSize) { if (srcSize < ZSTD_frameHeaderSize_prefix) return ERROR(srcSize_wrong); @@ -204,7 +202,7 @@ static size_t ZSTD_frameHeaderSize(const void *src, size_t srcSize) * @return : 0, `fparamsPtr` is correctly filled, * >0, `srcSize` is too small, result is expected `srcSize`, * or an error code, which can be tested using ZSTD_isError() */ -size_t ZSTD_getFrameParams(ZSTD_frameParams *fparamsPtr, const void *src, size_t srcSize) +size_t INIT ZSTD_getFrameParams(ZSTD_frameParams *fparamsPtr, const void *src, size_t srcSize) { const BYTE *ip = (const BYTE *)src; @@ -294,7 +292,7 @@ size_t ZSTD_getFrameParams(ZSTD_frameParams *fparamsPtr, const void *src, size_t * @return : decompressed size of the single frame pointed to be `src` if known, otherwise * - ZSTD_CONTENTSIZE_UNKNOWN if the size cannot be determined * - ZSTD_CONTENTSIZE_ERROR if an error occurred (e.g. invalid magic number, srcSize too small) */ -unsigned long long ZSTD_getFrameContentSize(const void *src, size_t srcSize) +unsigned long long INIT ZSTD_getFrameContentSize(const void *src, size_t srcSize) { { ZSTD_frameParams fParams; @@ -316,7 +314,7 @@ unsigned long long ZSTD_getFrameContentSize(const void *src, size_t srcSize) * `srcSize` must be the exact length of some number of ZSTD compressed and/or * skippable frames * @return : decompressed size of the frames contained */ -unsigned long long ZSTD_findDecompressedSize(const void *src, size_t srcSize) +unsigned long long INIT ZSTD_findDecompressedSize(const void *src, size_t srcSize) { { unsigned long long totalDstSize = 0; @@ -369,7 +367,7 @@ unsigned long long ZSTD_findDecompressedSize(const void *src, size_t srcSize) /** ZSTD_decodeFrameHeader() : * `headerSize` must be the size provided by ZSTD_frameHeaderSize(). * @return : 0 if success, or an error code, which can be tested using ZSTD_isError() */ -static size_t ZSTD_decodeFrameHeader(ZSTD_DCtx *dctx, const void *src, size_t headerSize) +static size_t INIT ZSTD_decodeFrameHeader(ZSTD_DCtx *dctx, const void *src, size_t headerSize) { size_t const result = ZSTD_getFrameParams(&(dctx->fParams), src, headerSize); if (ZSTD_isError(result)) @@ -391,7 +389,7 @@ typedef struct { /*! ZSTD_getcBlockSize() : * Provides the size of compressed block from block header `src` */ -size_t ZSTD_getcBlockSize(const void *src, size_t srcSize, blockProperties_t *bpPtr) +size_t INIT ZSTD_getcBlockSize(const void *src, size_t srcSize, blockProperties_t *bpPtr) { if (srcSize < ZSTD_blockHeaderSize) return ERROR(srcSize_wrong); @@ -409,7 +407,7 @@ size_t ZSTD_getcBlockSize(const void *src, size_t srcSize, blockProperties_t *bp } } -static size_t ZSTD_copyRawBlock(void *dst, size_t dstCapacity, const void *src, size_t srcSize) +static size_t INIT ZSTD_copyRawBlock(void *dst, size_t dstCapacity, const void *src, size_t srcSize) { if (srcSize > dstCapacity) return ERROR(dstSize_tooSmall); @@ -417,7 +415,7 @@ static size_t ZSTD_copyRawBlock(void *dst, size_t dstCapacity, const void *src, return srcSize; } -static size_t ZSTD_setRleBlock(void *dst, size_t dstCapacity, const void *src, size_t srcSize, size_t regenSize) +static size_t INIT ZSTD_setRleBlock(void *dst, size_t dstCapacity, const void *src, size_t srcSize, size_t regenSize) { if (srcSize != 1) return ERROR(srcSize_wrong); @@ -429,7 +427,7 @@ static size_t ZSTD_setRleBlock(void *dst, size_t dstCapacity, const void *src, s /*! ZSTD_decodeLiteralsBlock() : @return : nb of bytes read from src (< srcSize ) */ -size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx *dctx, const void *src, size_t srcSize) /* note : srcSize < BLOCKSIZE */ +size_t INIT ZSTD_decodeLiteralsBlock(ZSTD_DCtx *dctx, const void *src, size_t srcSize) /* note : srcSize < BLOCKSIZE */ { if (srcSize < MIN_CBLOCK_SIZE) return ERROR(corruption_detected); @@ -749,7 +747,7 @@ static const FSE_decode_t4 OF_defaultDTable[(1 << OF_DEFAULTNORMLOG) + 1] = { @return : nb bytes read from src, or an error code if it fails, testable with ZSTD_isError() */ -static size_t ZSTD_buildSeqTable(FSE_DTable *DTableSpace, const FSE_DTable **DTablePtr, symbolEncodingType_e type, U32 max, U32 maxLog, const void *src, +static size_t INIT ZSTD_buildSeqTable(FSE_DTable *DTableSpace, const FSE_DTable **DTablePtr, symbolEncodingType_e type, U32 max, U32 maxLog, const void *src, size_t srcSize, const FSE_decode_t4 *defaultTable, U32 flagRepeatTable, void *workspace, size_t workspaceSize) { const void *const tmpPtr = defaultTable; /* bypass strict aliasing */ @@ -791,7 +789,7 @@ static size_t ZSTD_buildSeqTable(FSE_DTable *DTableSpace, const FSE_DTable **DTa } } -size_t ZSTD_decodeSeqHeaders(ZSTD_DCtx *dctx, int *nbSeqPtr, const void *src, size_t srcSize) +size_t INIT ZSTD_decodeSeqHeaders(ZSTD_DCtx *dctx, int *nbSeqPtr, const void *src, size_t srcSize) { const BYTE *const istart = (const BYTE *const)src; const BYTE *const iend = istart + srcSize; @@ -877,7 +875,7 @@ typedef struct { } seqState_t; FORCE_NOINLINE -size_t ZSTD_execSequenceLast7(BYTE *op, BYTE *const oend, seq_t sequence, const BYTE **litPtr, const BYTE *const litLimit, const BYTE *const base, +size_t INIT ZSTD_execSequenceLast7(BYTE *op, BYTE *const oend, seq_t sequence, const BYTE **litPtr, const BYTE *const litLimit, const BYTE *const base, const BYTE *const vBase, const BYTE *const dictEnd) { BYTE *const oLitEnd = op + sequence.litLength; @@ -928,7 +926,7 @@ size_t ZSTD_execSequenceLast7(BYTE *op, BYTE *const oend, seq_t sequence, const return sequenceLength; } -static seq_t ZSTD_decodeSequence(seqState_t *seqState) +static seq_t INIT ZSTD_decodeSequence(seqState_t *seqState) { seq_t seq; @@ -1090,7 +1088,7 @@ size_t ZSTD_execSequence(BYTE *op, BYTE *const oend, seq_t sequence, const BYTE return sequenceLength; } -static size_t ZSTD_decompressSequences(ZSTD_DCtx *dctx, void *dst, size_t maxDstSize, const void *seqStart, size_t seqSize) +static size_t INIT ZSTD_decompressSequences(ZSTD_DCtx *dctx, void *dst, size_t maxDstSize, const void *seqStart, size_t seqSize) { const BYTE *ip = (const BYTE *)seqStart; const BYTE *const iend = ip + seqSize; @@ -1160,7 +1158,7 @@ static size_t ZSTD_decompressSequences(ZSTD_DCtx *dctx, void *dst, size_t maxDst return op - ostart; } -FORCE_INLINE seq_t ZSTD_decodeSequenceLong_generic(seqState_t *seqState, int const longOffsets) +FORCE_INLINE seq_t INIT ZSTD_decodeSequenceLong_generic(seqState_t *seqState, int const longOffsets) { seq_t seq; @@ -1250,7 +1248,7 @@ FORCE_INLINE seq_t ZSTD_decodeSequenceLong_generic(seqState_t *seqState, int con return seq; } -static seq_t ZSTD_decodeSequenceLong(seqState_t *seqState, unsigned const windowSize) +static seq_t INIT ZSTD_decodeSequenceLong(seqState_t *seqState, unsigned const windowSize) { if (ZSTD_highbit32(windowSize) > STREAM_ACCUMULATOR_MIN) { return ZSTD_decodeSequenceLong_generic(seqState, 1); @@ -1345,7 +1343,7 @@ size_t ZSTD_execSequenceLong(BYTE *op, BYTE *const oend, seq_t sequence, const B return sequenceLength; } -static size_t ZSTD_decompressSequencesLong(ZSTD_DCtx *dctx, void *dst, size_t maxDstSize, const void *seqStart, size_t seqSize) +static size_t INIT ZSTD_decompressSequencesLong(ZSTD_DCtx *dctx, void *dst, size_t maxDstSize, const void *seqStart, size_t seqSize) { const BYTE *ip = (const BYTE *)seqStart; const BYTE *const iend = ip + seqSize; @@ -1442,7 +1440,7 @@ static size_t ZSTD_decompressSequencesLong(ZSTD_DCtx *dctx, void *dst, size_t ma return op - ostart; } -static size_t ZSTD_decompressBlock_internal(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize) +static size_t INIT ZSTD_decompressBlock_internal(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize) { /* blockType == blockCompressed */ const BYTE *ip = (const BYTE *)src; @@ -1466,7 +1464,7 @@ static size_t ZSTD_decompressBlock_internal(ZSTD_DCtx *dctx, void *dst, size_t d return ZSTD_decompressSequences(dctx, dst, dstCapacity, ip, srcSize); } -static void ZSTD_checkContinuity(ZSTD_DCtx *dctx, const void *dst) +static void INIT ZSTD_checkContinuity(ZSTD_DCtx *dctx, const void *dst) { if (dst != dctx->previousDstEnd) { /* not contiguous */ dctx->dictEnd = dctx->previousDstEnd; @@ -1476,7 +1474,7 @@ static void ZSTD_checkContinuity(ZSTD_DCtx *dctx, const void *dst) } } -size_t ZSTD_decompressBlock(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize) +size_t INIT ZSTD_decompressBlock(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize) { size_t dSize; ZSTD_checkContinuity(dctx, dst); @@ -1487,14 +1485,14 @@ size_t ZSTD_decompressBlock(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, cons /** ZSTD_insertBlock() : insert `src` block into `dctx` history. Useful to track uncompressed blocks. */ -size_t ZSTD_insertBlock(ZSTD_DCtx *dctx, const void *blockStart, size_t blockSize) +size_t INIT ZSTD_insertBlock(ZSTD_DCtx *dctx, const void *blockStart, size_t blockSize) { ZSTD_checkContinuity(dctx, blockStart); dctx->previousDstEnd = (const char *)blockStart + blockSize; return blockSize; } -size_t ZSTD_generateNxBytes(void *dst, size_t dstCapacity, BYTE byte, size_t length) +size_t INIT ZSTD_generateNxBytes(void *dst, size_t dstCapacity, BYTE byte, size_t length) { if (length > dstCapacity) return ERROR(dstSize_tooSmall); @@ -1507,7 +1505,7 @@ size_t ZSTD_generateNxBytes(void *dst, size_t dstCapacity, BYTE byte, size_t len * `src` must point to the start of a ZSTD frame, ZSTD legacy frame, or skippable frame * `srcSize` must be at least as large as the frame contained * @return : the compressed size of the frame starting at `src` */ -size_t ZSTD_findFrameCompressedSize(const void *src, size_t srcSize) +size_t INIT ZSTD_findFrameCompressedSize(const void *src, size_t srcSize) { if (srcSize >= ZSTD_skippableHeaderSize && (ZSTD_readLE32(src) & 0xFFFFFFF0U) == ZSTD_MAGIC_SKIPPABLE_START) { return ZSTD_skippableHeaderSize + ZSTD_readLE32((const BYTE *)src + 4); @@ -1563,7 +1561,7 @@ size_t ZSTD_findFrameCompressedSize(const void *src, size_t srcSize) /*! ZSTD_decompressFrame() : * @dctx must be properly initialized */ -static size_t ZSTD_decompressFrame(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void **srcPtr, size_t *srcSizePtr) +static size_t INIT ZSTD_decompressFrame(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void **srcPtr, size_t *srcSizePtr) { const BYTE *ip = (const BYTE *)(*srcPtr); BYTE *const ostart = (BYTE * const)dst; @@ -1637,10 +1635,10 @@ static size_t ZSTD_decompressFrame(ZSTD_DCtx *dctx, void *dst, size_t dstCapacit return op - ostart; } -static const void *ZSTD_DDictDictContent(const ZSTD_DDict *ddict); -static size_t ZSTD_DDictDictSize(const ZSTD_DDict *ddict); +static const void INIT *ZSTD_DDictDictContent(const ZSTD_DDict *ddict); +static size_t INIT ZSTD_DDictDictSize(const ZSTD_DDict *ddict); -static size_t ZSTD_decompressMultiFrame(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize, const void *dict, size_t dictSize, +static size_t INIT ZSTD_decompressMultiFrame(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize, const void *dict, size_t dictSize, const ZSTD_DDict *ddict) { void *const dststart = dst; @@ -1704,12 +1702,12 @@ static size_t ZSTD_decompressMultiFrame(ZSTD_DCtx *dctx, void *dst, size_t dstCa return (BYTE *)dst - (BYTE *)dststart; } -size_t ZSTD_decompress_usingDict(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize, const void *dict, size_t dictSize) +size_t INIT ZSTD_decompress_usingDict(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize, const void *dict, size_t dictSize) { return ZSTD_decompressMultiFrame(dctx, dst, dstCapacity, src, srcSize, dict, dictSize, NULL); } -size_t ZSTD_decompressDCtx(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize) +size_t INIT ZSTD_decompressDCtx(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize) { return ZSTD_decompress_usingDict(dctx, dst, dstCapacity, src, srcSize, NULL, 0); } @@ -1718,9 +1716,9 @@ size_t ZSTD_decompressDCtx(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const * Advanced Streaming Decompression API * Bufferless and synchronous ****************************************/ -size_t ZSTD_nextSrcSizeToDecompress(ZSTD_DCtx *dctx) { return dctx->expected; } +size_t INIT ZSTD_nextSrcSizeToDecompress(ZSTD_DCtx *dctx) { return dctx->expected; } -ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx *dctx) +ZSTD_nextInputType_e INIT ZSTD_nextInputType(ZSTD_DCtx *dctx) { switch (dctx->stage) { default: /* should not happen */ @@ -1735,12 +1733,12 @@ ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx *dctx) } } -int ZSTD_isSkipFrame(ZSTD_DCtx *dctx) { return dctx->stage == ZSTDds_skipFrame; } /* for zbuff */ +int INIT ZSTD_isSkipFrame(ZSTD_DCtx *dctx) { return dctx->stage == ZSTDds_skipFrame; } /* for zbuff */ /** ZSTD_decompressContinue() : * @return : nb of bytes generated into `dst` (necessarily <= `dstCapacity) * or an error code, which can be tested using ZSTD_isError() */ -size_t ZSTD_decompressContinue(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize) +size_t INIT ZSTD_decompressContinue(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize) { /* Sanity check */ if (srcSize != dctx->expected) @@ -1859,7 +1857,7 @@ size_t ZSTD_decompressContinue(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, c } } -static size_t ZSTD_refDictContent(ZSTD_DCtx *dctx, const void *dict, size_t dictSize) +static size_t INIT ZSTD_refDictContent(ZSTD_DCtx *dctx, const void *dict, size_t dictSize) { dctx->dictEnd = dctx->previousDstEnd; dctx->vBase = (const char *)dict - ((const char *)(dctx->previousDstEnd) - (const char *)(dctx->base)); @@ -1871,7 +1869,7 @@ static size_t ZSTD_refDictContent(ZSTD_DCtx *dctx, const void *dict, size_t dict /* ZSTD_loadEntropy() : * dict : must point at beginning of a valid zstd dictionary * @return : size of entropy tables read */ -static size_t ZSTD_loadEntropy(ZSTD_entropyTables_t *entropy, const void *const dict, size_t const dictSize) +static size_t INIT ZSTD_loadEntropy(ZSTD_entropyTables_t *entropy, const void *const dict, size_t const dictSize) { const BYTE *dictPtr = (const BYTE *)dict; const BYTE *const dictEnd = dictPtr + dictSize; @@ -1940,7 +1938,7 @@ static size_t ZSTD_loadEntropy(ZSTD_entropyTables_t *entropy, const void *const return dictPtr - (const BYTE *)dict; } -static size_t ZSTD_decompress_insertDictionary(ZSTD_DCtx *dctx, const void *dict, size_t dictSize) +static size_t INIT ZSTD_decompress_insertDictionary(ZSTD_DCtx *dctx, const void *dict, size_t dictSize) { if (dictSize < 8) return ZSTD_refDictContent(dctx, dict, dictSize); @@ -1966,7 +1964,7 @@ static size_t ZSTD_decompress_insertDictionary(ZSTD_DCtx *dctx, const void *dict return ZSTD_refDictContent(dctx, dict, dictSize); } -size_t ZSTD_decompressBegin_usingDict(ZSTD_DCtx *dctx, const void *dict, size_t dictSize) +size_t INIT ZSTD_decompressBegin_usingDict(ZSTD_DCtx *dctx, const void *dict, size_t dictSize) { CHECK_F(ZSTD_decompressBegin(dctx)); if (dict && dictSize) @@ -1986,13 +1984,13 @@ struct ZSTD_DDict_s { ZSTD_customMem cMem; }; /* typedef'd to ZSTD_DDict within "zstd.h" */ -size_t ZSTD_DDictWorkspaceBound(void) { return ZSTD_ALIGN(sizeof(ZSTD_stack)) + ZSTD_ALIGN(sizeof(ZSTD_DDict)); } +size_t INIT ZSTD_DDictWorkspaceBound(void) { return ZSTD_ALIGN(sizeof(ZSTD_stack)) + ZSTD_ALIGN(sizeof(ZSTD_DDict)); } -static const void *ZSTD_DDictDictContent(const ZSTD_DDict *ddict) { return ddict->dictContent; } +static const void INIT *ZSTD_DDictDictContent(const ZSTD_DDict *ddict) { return ddict->dictContent; } -static size_t ZSTD_DDictDictSize(const ZSTD_DDict *ddict) { return ddict->dictSize; } +static size_t INIT ZSTD_DDictDictSize(const ZSTD_DDict *ddict) { return ddict->dictSize; } -static void ZSTD_refDDict(ZSTD_DCtx *dstDCtx, const ZSTD_DDict *ddict) +static void INIT ZSTD_refDDict(ZSTD_DCtx *dstDCtx, const ZSTD_DDict *ddict) { ZSTD_decompressBegin(dstDCtx); /* init */ if (ddict) { /* support refDDict on NULL */ @@ -2018,7 +2016,7 @@ static void ZSTD_refDDict(ZSTD_DCtx *dstDCtx, const ZSTD_DDict *ddict) } } -static size_t ZSTD_loadEntropy_inDDict(ZSTD_DDict *ddict) +static size_t INIT ZSTD_loadEntropy_inDDict(ZSTD_DDict *ddict) { ddict->dictID = 0; ddict->entropyPresent = 0; @@ -2037,7 +2035,7 @@ static size_t ZSTD_loadEntropy_inDDict(ZSTD_DDict *ddict) return 0; } -static ZSTD_DDict *ZSTD_createDDict_advanced(const void *dict, size_t dictSize, unsigned byReference, ZSTD_customMem customMem) +static ZSTD_DDict INIT *ZSTD_createDDict_advanced(const void *dict, size_t dictSize, unsigned byReference, ZSTD_customMem customMem) { if (!customMem.customAlloc || !customMem.customFree) return NULL; @@ -2080,13 +2078,13 @@ static ZSTD_DDict *ZSTD_createDDict_advanced(const void *dict, size_t dictSize, * Create a digested dictionary, to start decompression without startup delay. * `dict` content is copied inside DDict. * Consequently, `dict` can be released after `ZSTD_DDict` creation */ -ZSTD_DDict *ZSTD_initDDict(const void *dict, size_t dictSize, void *workspace, size_t workspaceSize) +ZSTD_DDict INIT *ZSTD_initDDict(const void *dict, size_t dictSize, void *workspace, size_t workspaceSize) { ZSTD_customMem const stackMem = ZSTD_initStack(workspace, workspaceSize); return ZSTD_createDDict_advanced(dict, dictSize, 1, stackMem); } -size_t ZSTD_freeDDict(ZSTD_DDict *ddict) +size_t INIT ZSTD_freeDDict(ZSTD_DDict *ddict) { if (ddict == NULL) return 0; /* support free on NULL */ @@ -2102,7 +2100,7 @@ size_t ZSTD_freeDDict(ZSTD_DDict *ddict) * Provides the dictID stored within dictionary. * if @return == 0, the dictionary is not conformant with Zstandard specification. * It can still be loaded, but as a content-only dictionary. */ -unsigned ZSTD_getDictID_fromDict(const void *dict, size_t dictSize) +unsigned INIT ZSTD_getDictID_fromDict(const void *dict, size_t dictSize) { if (dictSize < 8) return 0; @@ -2115,7 +2113,7 @@ unsigned ZSTD_getDictID_fromDict(const void *dict, size_t dictSize) * Provides the dictID of the dictionary loaded into `ddict`. * If @return == 0, the dictionary is not conformant to Zstandard specification, or empty. * Non-conformant dictionaries can still be loaded, but as content-only dictionaries. */ -unsigned ZSTD_getDictID_fromDDict(const ZSTD_DDict *ddict) +unsigned INIT ZSTD_getDictID_fromDDict(const ZSTD_DDict *ddict) { if (ddict == NULL) return 0; @@ -2132,7 +2130,7 @@ unsigned ZSTD_getDictID_fromDDict(const ZSTD_DDict *ddict) * - `srcSize` is too small, and as a result, the frame header could not be decoded (only possible if `srcSize < ZSTD_FRAMEHEADERSIZE_MAX`). * - This is not a Zstandard frame. * When identifying the exact failure cause, it's possible to used ZSTD_getFrameParams(), which will provide a more precise error code. */ -unsigned ZSTD_getDictID_fromFrame(const void *src, size_t srcSize) +unsigned INIT ZSTD_getDictID_fromFrame(const void *src, size_t srcSize) { ZSTD_frameParams zfp = {0, 0, 0, 0}; size_t const hError = ZSTD_getFrameParams(&zfp, src, srcSize); @@ -2144,7 +2142,7 @@ unsigned ZSTD_getDictID_fromFrame(const void *src, size_t srcSize) /*! ZSTD_decompress_usingDDict() : * Decompression using a pre-digested Dictionary * Use dictionary without significant overhead. */ -size_t ZSTD_decompress_usingDDict(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize, const ZSTD_DDict *ddict) +size_t INIT ZSTD_decompress_usingDDict(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize, const ZSTD_DDict *ddict) { /* pass content and size in case legacy frames are encountered */ return ZSTD_decompressMultiFrame(dctx, dst, dstCapacity, src, srcSize, NULL, 0, ddict); @@ -2181,7 +2179,7 @@ struct ZSTD_DStream_s { U32 hostageByte; }; /* typedef'd to ZSTD_DStream within "zstd.h" */ -size_t ZSTD_DStreamWorkspaceBound(size_t maxWindowSize) +size_t INIT ZSTD_DStreamWorkspaceBound(size_t maxWindowSize) { size_t const blockSize = MIN(maxWindowSize, ZSTD_BLOCKSIZE_ABSOLUTEMAX); size_t const inBuffSize = blockSize; @@ -2189,7 +2187,7 @@ size_t ZSTD_DStreamWorkspaceBound(size_t maxWindowSize) return ZSTD_DCtxWorkspaceBound() + ZSTD_ALIGN(sizeof(ZSTD_DStream)) + ZSTD_ALIGN(inBuffSize) + ZSTD_ALIGN(outBuffSize); } -static ZSTD_DStream *ZSTD_createDStream_advanced(ZSTD_customMem customMem) +static ZSTD_DStream INIT *ZSTD_createDStream_advanced(ZSTD_customMem customMem) { ZSTD_DStream *zds; @@ -2211,7 +2209,7 @@ static ZSTD_DStream *ZSTD_createDStream_advanced(ZSTD_customMem customMem) return zds; } -ZSTD_DStream *ZSTD_initDStream(size_t maxWindowSize, void *workspace, size_t workspaceSize) +ZSTD_DStream INIT *ZSTD_initDStream(size_t maxWindowSize, void *workspace, size_t workspaceSize) { ZSTD_customMem const stackMem = ZSTD_initStack(workspace, workspaceSize); ZSTD_DStream *zds = ZSTD_createDStream_advanced(stackMem); @@ -2244,7 +2242,7 @@ ZSTD_DStream *ZSTD_initDStream(size_t maxWindowSize, void *workspace, size_t wor return zds; } -ZSTD_DStream *ZSTD_initDStream_usingDDict(size_t maxWindowSize, const ZSTD_DDict *ddict, void *workspace, size_t workspaceSize) +ZSTD_DStream INIT *ZSTD_initDStream_usingDDict(size_t maxWindowSize, const ZSTD_DDict *ddict, void *workspace, size_t workspaceSize) { ZSTD_DStream *zds = ZSTD_initDStream(maxWindowSize, workspace, workspaceSize); if (zds) { @@ -2253,7 +2251,7 @@ ZSTD_DStream *ZSTD_initDStream_usingDDict(size_t maxWindowSize, const ZSTD_DDict return zds; } -size_t ZSTD_freeDStream(ZSTD_DStream *zds) +size_t INIT ZSTD_freeDStream(ZSTD_DStream *zds) { if (zds == NULL) return 0; /* support free on null */ @@ -2274,10 +2272,10 @@ size_t ZSTD_freeDStream(ZSTD_DStream *zds) /* *** Initialization *** */ -size_t ZSTD_DStreamInSize(void) { return ZSTD_BLOCKSIZE_ABSOLUTEMAX + ZSTD_blockHeaderSize; } -size_t ZSTD_DStreamOutSize(void) { return ZSTD_BLOCKSIZE_ABSOLUTEMAX; } +size_t INIT ZSTD_DStreamInSize(void) { return ZSTD_BLOCKSIZE_ABSOLUTEMAX + ZSTD_blockHeaderSize; } +size_t INIT ZSTD_DStreamOutSize(void) { return ZSTD_BLOCKSIZE_ABSOLUTEMAX; } -size_t ZSTD_resetDStream(ZSTD_DStream *zds) +size_t INIT ZSTD_resetDStream(ZSTD_DStream *zds) { zds->stage = zdss_loadHeader; zds->lhSize = zds->inPos = zds->outStart = zds->outEnd = 0; @@ -2288,14 +2286,14 @@ size_t ZSTD_resetDStream(ZSTD_DStream *zds) /* ***** Decompression ***** */ -ZSTD_STATIC size_t ZSTD_limitCopy(void *dst, size_t dstCapacity, const void *src, size_t srcSize) +ZSTD_STATIC size_t INIT ZSTD_limitCopy(void *dst, size_t dstCapacity, const void *src, size_t srcSize) { size_t const length = MIN(dstCapacity, srcSize); memcpy(dst, src, length); return length; } -size_t ZSTD_decompressStream(ZSTD_DStream *zds, ZSTD_outBuffer *output, ZSTD_inBuffer *input) +size_t INIT ZSTD_decompressStream(ZSTD_DStream *zds, ZSTD_outBuffer *output, ZSTD_inBuffer *input) { const char *const istart = (const char *)(input->src) + input->pos; const char *const iend = (const char *)(input->src) + input->size; @@ -2489,43 +2487,3 @@ size_t ZSTD_decompressStream(ZSTD_DStream *zds, ZSTD_outBuffer *output, ZSTD_inB return nextSrcSizeHint; } } - -EXPORT_SYMBOL(ZSTD_DCtxWorkspaceBound); -EXPORT_SYMBOL(ZSTD_initDCtx); -EXPORT_SYMBOL(ZSTD_decompressDCtx); -EXPORT_SYMBOL(ZSTD_decompress_usingDict); - -EXPORT_SYMBOL(ZSTD_DDictWorkspaceBound); -EXPORT_SYMBOL(ZSTD_initDDict); -EXPORT_SYMBOL(ZSTD_decompress_usingDDict); - -EXPORT_SYMBOL(ZSTD_DStreamWorkspaceBound); -EXPORT_SYMBOL(ZSTD_initDStream); -EXPORT_SYMBOL(ZSTD_initDStream_usingDDict); -EXPORT_SYMBOL(ZSTD_resetDStream); -EXPORT_SYMBOL(ZSTD_decompressStream); -EXPORT_SYMBOL(ZSTD_DStreamInSize); -EXPORT_SYMBOL(ZSTD_DStreamOutSize); - -EXPORT_SYMBOL(ZSTD_findFrameCompressedSize); -EXPORT_SYMBOL(ZSTD_getFrameContentSize); -EXPORT_SYMBOL(ZSTD_findDecompressedSize); - -EXPORT_SYMBOL(ZSTD_isFrame); -EXPORT_SYMBOL(ZSTD_getDictID_fromDict); -EXPORT_SYMBOL(ZSTD_getDictID_fromDDict); -EXPORT_SYMBOL(ZSTD_getDictID_fromFrame); - -EXPORT_SYMBOL(ZSTD_getFrameParams); -EXPORT_SYMBOL(ZSTD_decompressBegin); -EXPORT_SYMBOL(ZSTD_decompressBegin_usingDict); -EXPORT_SYMBOL(ZSTD_copyDCtx); -EXPORT_SYMBOL(ZSTD_nextSrcSizeToDecompress); -EXPORT_SYMBOL(ZSTD_decompressContinue); -EXPORT_SYMBOL(ZSTD_nextInputType); - -EXPORT_SYMBOL(ZSTD_decompressBlock); -EXPORT_SYMBOL(ZSTD_insertBlock); - -MODULE_LICENSE("Dual BSD/GPL"); -MODULE_DESCRIPTION("Zstd Decompressor"); diff --git a/xen/common/zstd/entropy_common.c b/xen/common/zstd/entropy_common.c index 2b0a643c32..bcdb57982b 100644 --- a/xen/common/zstd/entropy_common.c +++ b/xen/common/zstd/entropy_common.c @@ -46,17 +46,17 @@ #include "mem.h" /*=== Version ===*/ -unsigned FSE_versionNumber(void) { return FSE_VERSION_NUMBER; } +unsigned INIT FSE_versionNumber(void) { return FSE_VERSION_NUMBER; } /*=== Error Management ===*/ -unsigned FSE_isError(size_t code) { return ERR_isError(code); } +unsigned INIT FSE_isError(size_t code) { return ERR_isError(code); } -unsigned HUF_isError(size_t code) { return ERR_isError(code); } +unsigned INIT HUF_isError(size_t code) { return ERR_isError(code); } /*-************************************************************** * FSE NCount encoding-decoding ****************************************************************/ -size_t FSE_readNCount(short *normalizedCounter, unsigned *maxSVPtr, unsigned *tableLogPtr, const void *headerBuffer, size_t hbSize) +size_t INIT FSE_readNCount(short *normalizedCounter, unsigned *maxSVPtr, unsigned *tableLogPtr, const void *headerBuffer, size_t hbSize) { const BYTE *const istart = (const BYTE *)headerBuffer; const BYTE *const iend = istart + hbSize; @@ -164,7 +164,7 @@ size_t FSE_readNCount(short *normalizedCounter, unsigned *maxSVPtr, unsigned *ta @return : size read from `src` , or an error Code . Note : Needed by HUF_readCTable() and HUF_readDTableX?() . */ -size_t HUF_readStats_wksp(BYTE *huffWeight, size_t hwSize, U32 *rankStats, U32 *nbSymbolsPtr, U32 *tableLogPtr, const void *src, size_t srcSize, void *workspace, size_t workspaceSize) +size_t INIT HUF_readStats_wksp(BYTE *huffWeight, size_t hwSize, U32 *rankStats, U32 *nbSymbolsPtr, U32 *tableLogPtr, const void *src, size_t srcSize, void *workspace, size_t workspaceSize) { U32 weightTotal; const BYTE *ip = (const BYTE *)src; diff --git a/xen/common/zstd/error_private.h b/xen/common/zstd/error_private.h index 1a60b31f70..ecbfe51dfb 100644 --- a/xen/common/zstd/error_private.h +++ b/xen/common/zstd/error_private.h @@ -22,8 +22,8 @@ /* **************************************** * Dependencies ******************************************/ -#include /* size_t */ -#include /* enum list */ +#include /* size_t */ +#include /* enum list */ /* **************************************** * Compiler-specific diff --git a/xen/common/zstd/fse.h b/xen/common/zstd/fse.h index 7460ab04b1..b86717c34d 100644 --- a/xen/common/zstd/fse.h +++ b/xen/common/zstd/fse.h @@ -43,7 +43,7 @@ /*-***************************************** * Dependencies ******************************************/ -#include /* size_t, ptrdiff_t */ +#include /* size_t, ptrdiff_t */ /*-***************************************** * FSE_PUBLIC_API : control library symbols visibility diff --git a/xen/common/zstd/fse_decompress.c b/xen/common/zstd/fse_decompress.c index 0b353530fb..041a5a1f0a 100644 --- a/xen/common/zstd/fse_decompress.c +++ b/xen/common/zstd/fse_decompress.c @@ -40,7 +40,7 @@ /* ************************************************************** * Compiler specifics ****************************************************************/ -#define FORCE_INLINE static __always_inline +#define FORCE_INLINE static always_inline /* ************************************************************** * Includes @@ -48,9 +48,7 @@ #include "bitstream.h" #include "fse.h" #include "zstd_internal.h" -#include -#include -#include /* memcpy, memset */ +#include /* memcpy, memset */ /* ************************************************************** * Error Management @@ -85,7 +83,7 @@ /* Function templates */ -size_t FSE_buildDTable_wksp(FSE_DTable *dt, const short *normalizedCounter, unsigned maxSymbolValue, unsigned tableLog, void *workspace, size_t workspaceSize) +size_t INIT FSE_buildDTable_wksp(FSE_DTable *dt, const short *normalizedCounter, unsigned maxSymbolValue, unsigned tableLog, void *workspace, size_t workspaceSize) { void *const tdPtr = dt + 1; /* because *dt is unsigned, 32-bits aligned on 32-bits */ FSE_DECODE_TYPE *const tableDecode = (FSE_DECODE_TYPE *)(tdPtr); @@ -160,7 +158,7 @@ size_t FSE_buildDTable_wksp(FSE_DTable *dt, const short *normalizedCounter, unsi /*-******************************************************* * Decompression (Byte symbols) *********************************************************/ -size_t FSE_buildDTable_rle(FSE_DTable *dt, BYTE symbolValue) +size_t INIT FSE_buildDTable_rle(FSE_DTable *dt, BYTE symbolValue) { void *ptr = dt; FSE_DTableHeader *const DTableH = (FSE_DTableHeader *)ptr; @@ -177,7 +175,7 @@ size_t FSE_buildDTable_rle(FSE_DTable *dt, BYTE symbolValue) return 0; } -size_t FSE_buildDTable_raw(FSE_DTable *dt, unsigned nbBits) +size_t INIT FSE_buildDTable_raw(FSE_DTable *dt, unsigned nbBits) { void *ptr = dt; FSE_DTableHeader *const DTableH = (FSE_DTableHeader *)ptr; @@ -272,7 +270,7 @@ FORCE_INLINE size_t FSE_decompress_usingDTable_generic(void *dst, size_t maxDstS return op - ostart; } -size_t FSE_decompress_usingDTable(void *dst, size_t originalSize, const void *cSrc, size_t cSrcSize, const FSE_DTable *dt) +size_t INIT FSE_decompress_usingDTable(void *dst, size_t originalSize, const void *cSrc, size_t cSrcSize, const FSE_DTable *dt) { const void *ptr = dt; const FSE_DTableHeader *DTableH = (const FSE_DTableHeader *)ptr; @@ -284,7 +282,7 @@ size_t FSE_decompress_usingDTable(void *dst, size_t originalSize, const void *cS return FSE_decompress_usingDTable_generic(dst, originalSize, cSrc, cSrcSize, dt, 0); } -size_t FSE_decompress_wksp(void *dst, size_t dstCapacity, const void *cSrc, size_t cSrcSize, unsigned maxLog, void *workspace, size_t workspaceSize) +size_t INIT FSE_decompress_wksp(void *dst, size_t dstCapacity, const void *cSrc, size_t cSrcSize, unsigned maxLog, void *workspace, size_t workspaceSize) { const BYTE *const istart = (const BYTE *)cSrc; const BYTE *ip = istart; diff --git a/xen/common/zstd/huf.h b/xen/common/zstd/huf.h index 2143da28d9..a9d522c7bb 100644 --- a/xen/common/zstd/huf.h +++ b/xen/common/zstd/huf.h @@ -41,7 +41,7 @@ #define HUF_H_298734234 /* *** Dependencies *** */ -#include /* size_t */ +#include /* size_t */ /* *** Tool functions *** */ #define HUF_BLOCKSIZE_MAX (128 * 1024) /**< maximum input size for a single block compressed with HUF_compress */ diff --git a/xen/common/zstd/huf_decompress.c b/xen/common/zstd/huf_decompress.c index 6526482047..f79603a12f 100644 --- a/xen/common/zstd/huf_decompress.c +++ b/xen/common/zstd/huf_decompress.c @@ -40,7 +40,7 @@ /* ************************************************************** * Compiler specifics ****************************************************************/ -#define FORCE_INLINE static __always_inline +#define FORCE_INLINE static always_inline /* ************************************************************** * Dependencies @@ -48,9 +48,7 @@ #include "bitstream.h" /* BIT_* */ #include "fse.h" /* header compression */ #include "huf.h" -#include -#include -#include /* memcpy, memset */ +#include /* memcpy, memset */ /* ************************************************************** * Error Management @@ -71,7 +69,7 @@ typedef struct { BYTE reserved; } DTableDesc; -static DTableDesc HUF_getDTableDesc(const HUF_DTable *table) +static DTableDesc INIT HUF_getDTableDesc(const HUF_DTable *table) { DTableDesc dtd; memcpy(&dtd, table, sizeof(dtd)); @@ -87,7 +85,7 @@ typedef struct { BYTE nbBits; } HUF_DEltX2; /* single-symbol decoding */ -size_t HUF_readDTableX2_wksp(HUF_DTable *DTable, const void *src, size_t srcSize, void *workspace, size_t workspaceSize) +size_t INIT HUF_readDTableX2_wksp(HUF_DTable *DTable, const void *src, size_t srcSize, void *workspace, size_t workspaceSize) { U32 tableLog = 0; U32 nbSymbols = 0; @@ -155,7 +153,7 @@ size_t HUF_readDTableX2_wksp(HUF_DTable *DTable, const void *src, size_t srcSize return iSize; } -static BYTE HUF_decodeSymbolX2(BIT_DStream_t *Dstream, const HUF_DEltX2 *dt, const U32 dtLog) +static BYTE INIT HUF_decodeSymbolX2(BIT_DStream_t *Dstream, const HUF_DEltX2 *dt, const U32 dtLog) { size_t const val = BIT_lookBitsFast(Dstream, dtLog); /* note : dtLog >= 1 */ BYTE const c = dt[val].byte; @@ -196,7 +194,7 @@ FORCE_INLINE size_t HUF_decodeStreamX2(BYTE *p, BIT_DStream_t *const bitDPtr, BY return pEnd - pStart; } -static size_t HUF_decompress1X2_usingDTable_internal(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable) +static size_t INIT HUF_decompress1X2_usingDTable_internal(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable) { BYTE *op = (BYTE *)dst; BYTE *const oend = op + dstSize; @@ -221,7 +219,7 @@ static size_t HUF_decompress1X2_usingDTable_internal(void *dst, size_t dstSize, return dstSize; } -size_t HUF_decompress1X2_usingDTable(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable) +size_t INIT HUF_decompress1X2_usingDTable(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable) { DTableDesc dtd = HUF_getDTableDesc(DTable); if (dtd.tableType != 0) @@ -229,7 +227,7 @@ size_t HUF_decompress1X2_usingDTable(void *dst, size_t dstSize, const void *cSrc return HUF_decompress1X2_usingDTable_internal(dst, dstSize, cSrc, cSrcSize, DTable); } -size_t HUF_decompress1X2_DCtx_wksp(HUF_DTable *DCtx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize) +size_t INIT HUF_decompress1X2_DCtx_wksp(HUF_DTable *DCtx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize) { const BYTE *ip = (const BYTE *)cSrc; @@ -244,7 +242,7 @@ size_t HUF_decompress1X2_DCtx_wksp(HUF_DTable *DCtx, void *dst, size_t dstSize, return HUF_decompress1X2_usingDTable_internal(dst, dstSize, ip, cSrcSize, DCtx); } -static size_t HUF_decompress4X2_usingDTable_internal(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable) +static size_t INIT HUF_decompress4X2_usingDTable_internal(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable) { /* Check */ if (cSrcSize < 10) @@ -352,7 +350,7 @@ static size_t HUF_decompress4X2_usingDTable_internal(void *dst, size_t dstSize, } } -size_t HUF_decompress4X2_usingDTable(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable) +size_t INIT HUF_decompress4X2_usingDTable(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable) { DTableDesc dtd = HUF_getDTableDesc(DTable); if (dtd.tableType != 0) @@ -360,7 +358,7 @@ size_t HUF_decompress4X2_usingDTable(void *dst, size_t dstSize, const void *cSrc return HUF_decompress4X2_usingDTable_internal(dst, dstSize, cSrc, cSrcSize, DTable); } -size_t HUF_decompress4X2_DCtx_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize) +size_t INIT HUF_decompress4X2_DCtx_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize) { const BYTE *ip = (const BYTE *)cSrc; @@ -391,7 +389,7 @@ typedef struct { /* HUF_fillDTableX4Level2() : * `rankValOrigin` must be a table of at least (HUF_TABLELOG_MAX + 1) U32 */ -static void HUF_fillDTableX4Level2(HUF_DEltX4 *DTable, U32 sizeLog, const U32 consumed, const U32 *rankValOrigin, const int minWeight, +static void INIT HUF_fillDTableX4Level2(HUF_DEltX4 *DTable, U32 sizeLog, const U32 consumed, const U32 *rankValOrigin, const int minWeight, const sortedSymbol_t *sortedSymbols, const U32 sortedListSize, U32 nbBitsBaseline, U16 baseSeq) { HUF_DEltX4 DElt; @@ -437,7 +435,7 @@ static void HUF_fillDTableX4Level2(HUF_DEltX4 *DTable, U32 sizeLog, const U32 co typedef U32 rankVal_t[HUF_TABLELOG_MAX][HUF_TABLELOG_MAX + 1]; typedef U32 rankValCol_t[HUF_TABLELOG_MAX + 1]; -static void HUF_fillDTableX4(HUF_DEltX4 *DTable, const U32 targetLog, const sortedSymbol_t *sortedList, const U32 sortedListSize, const U32 *rankStart, +static void INIT HUF_fillDTableX4(HUF_DEltX4 *DTable, const U32 targetLog, const sortedSymbol_t *sortedList, const U32 sortedListSize, const U32 *rankStart, rankVal_t rankValOrigin, const U32 maxWeight, const U32 nbBitsBaseline) { U32 rankVal[HUF_TABLELOG_MAX + 1]; @@ -479,7 +477,7 @@ static void HUF_fillDTableX4(HUF_DEltX4 *DTable, const U32 targetLog, const sort } } -size_t HUF_readDTableX4_wksp(HUF_DTable *DTable, const void *src, size_t srcSize, void *workspace, size_t workspaceSize) +size_t INIT HUF_readDTableX4_wksp(HUF_DTable *DTable, const void *src, size_t srcSize, void *workspace, size_t workspaceSize) { U32 tableLog, maxW, sizeOfSort, nbSymbols; DTableDesc dtd = HUF_getDTableDesc(DTable); @@ -592,7 +590,7 @@ size_t HUF_readDTableX4_wksp(HUF_DTable *DTable, const void *src, size_t srcSize return iSize; } -static U32 HUF_decodeSymbolX4(void *op, BIT_DStream_t *DStream, const HUF_DEltX4 *dt, const U32 dtLog) +static U32 INIT HUF_decodeSymbolX4(void *op, BIT_DStream_t *DStream, const HUF_DEltX4 *dt, const U32 dtLog) { size_t const val = BIT_lookBitsFast(DStream, dtLog); /* note : dtLog >= 1 */ memcpy(op, dt + val, 2); @@ -600,7 +598,7 @@ static U32 HUF_decodeSymbolX4(void *op, BIT_DStream_t *DStream, const HUF_DEltX4 return dt[val].length; } -static U32 HUF_decodeLastSymbolX4(void *op, BIT_DStream_t *DStream, const HUF_DEltX4 *dt, const U32 dtLog) +static U32 INIT HUF_decodeLastSymbolX4(void *op, BIT_DStream_t *DStream, const HUF_DEltX4 *dt, const U32 dtLog) { size_t const val = BIT_lookBitsFast(DStream, dtLog); /* note : dtLog >= 1 */ memcpy(op, dt + val, 1); @@ -652,7 +650,7 @@ FORCE_INLINE size_t HUF_decodeStreamX4(BYTE *p, BIT_DStream_t *bitDPtr, BYTE *co return p - pStart; } -static size_t HUF_decompress1X4_usingDTable_internal(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable) +static size_t INIT HUF_decompress1X4_usingDTable_internal(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable) { BIT_DStream_t bitD; @@ -681,7 +679,7 @@ static size_t HUF_decompress1X4_usingDTable_internal(void *dst, size_t dstSize, return dstSize; } -size_t HUF_decompress1X4_usingDTable(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable) +size_t INIT HUF_decompress1X4_usingDTable(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable) { DTableDesc dtd = HUF_getDTableDesc(DTable); if (dtd.tableType != 1) @@ -689,7 +687,7 @@ size_t HUF_decompress1X4_usingDTable(void *dst, size_t dstSize, const void *cSrc return HUF_decompress1X4_usingDTable_internal(dst, dstSize, cSrc, cSrcSize, DTable); } -size_t HUF_decompress1X4_DCtx_wksp(HUF_DTable *DCtx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize) +size_t INIT HUF_decompress1X4_DCtx_wksp(HUF_DTable *DCtx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize) { const BYTE *ip = (const BYTE *)cSrc; @@ -704,7 +702,7 @@ size_t HUF_decompress1X4_DCtx_wksp(HUF_DTable *DCtx, void *dst, size_t dstSize, return HUF_decompress1X4_usingDTable_internal(dst, dstSize, ip, cSrcSize, DCtx); } -static size_t HUF_decompress4X4_usingDTable_internal(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable) +static size_t INIT HUF_decompress4X4_usingDTable_internal(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable) { if (cSrcSize < 10) return ERROR(corruption_detected); /* strict minimum : jump table + 1 byte per stream */ @@ -814,7 +812,7 @@ static size_t HUF_decompress4X4_usingDTable_internal(void *dst, size_t dstSize, } } -size_t HUF_decompress4X4_usingDTable(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable) +size_t INIT HUF_decompress4X4_usingDTable(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable) { DTableDesc dtd = HUF_getDTableDesc(DTable); if (dtd.tableType != 1) @@ -822,7 +820,7 @@ size_t HUF_decompress4X4_usingDTable(void *dst, size_t dstSize, const void *cSrc return HUF_decompress4X4_usingDTable_internal(dst, dstSize, cSrc, cSrcSize, DTable); } -size_t HUF_decompress4X4_DCtx_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize) +size_t INIT HUF_decompress4X4_DCtx_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize) { const BYTE *ip = (const BYTE *)cSrc; @@ -841,14 +839,14 @@ size_t HUF_decompress4X4_DCtx_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, /* Generic decompression selector */ /* ********************************/ -size_t HUF_decompress1X_usingDTable(void *dst, size_t maxDstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable) +size_t INIT HUF_decompress1X_usingDTable(void *dst, size_t maxDstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable) { DTableDesc const dtd = HUF_getDTableDesc(DTable); return dtd.tableType ? HUF_decompress1X4_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable) : HUF_decompress1X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable); } -size_t HUF_decompress4X_usingDTable(void *dst, size_t maxDstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable) +size_t INIT HUF_decompress4X_usingDTable(void *dst, size_t maxDstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable) { DTableDesc const dtd = HUF_getDTableDesc(DTable); return dtd.tableType ? HUF_decompress4X4_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable) @@ -884,7 +882,7 @@ static const algo_time_t algoTime[16 /* Quantization */][3 /* single, double, qu * based on a set of pre-determined metrics. * @return : 0==HUF_decompress4X2, 1==HUF_decompress4X4 . * Assumption : 0 < cSrcSize < dstSize <= 128 KB */ -U32 HUF_selectDecoder(size_t dstSize, size_t cSrcSize) +U32 INIT HUF_selectDecoder(size_t dstSize, size_t cSrcSize) { /* decoder timing evaluation */ U32 const Q = (U32)(cSrcSize * 16 / dstSize); /* Q < 16 since dstSize > cSrcSize */ @@ -898,7 +896,7 @@ U32 HUF_selectDecoder(size_t dstSize, size_t cSrcSize) typedef size_t (*decompressionAlgo)(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize); -size_t HUF_decompress4X_DCtx_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize) +size_t INIT HUF_decompress4X_DCtx_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize) { /* validation checks */ if (dstSize == 0) @@ -921,7 +919,7 @@ size_t HUF_decompress4X_DCtx_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, c } } -size_t HUF_decompress4X_hufOnly_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize) +size_t INIT HUF_decompress4X_hufOnly_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize) { /* validation checks */ if (dstSize == 0) @@ -936,7 +934,7 @@ size_t HUF_decompress4X_hufOnly_wksp(HUF_DTable *dctx, void *dst, size_t dstSize } } -size_t HUF_decompress1X_DCtx_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize) +size_t INIT HUF_decompress1X_DCtx_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize) { /* validation checks */ if (dstSize == 0) diff --git a/xen/common/zstd/mem.h b/xen/common/zstd/mem.h index 93d7a2c377..d2fa444687 100644 --- a/xen/common/zstd/mem.h +++ b/xen/common/zstd/mem.h @@ -20,9 +20,9 @@ /*-**************************************** * Dependencies ******************************************/ -#include -#include /* memcpy */ -#include /* size_t, ptrdiff_t */ +#include /* memcpy */ +#include /* size_t, ptrdiff_t */ +#include "private.h" /*-**************************************** * Compiler specifics diff --git a/xen/common/zstd/private.h b/xen/common/zstd/private.h new file mode 100644 index 0000000000..fac4d3c095 --- /dev/null +++ b/xen/common/zstd/private.h @@ -0,0 +1,105 @@ +#ifndef ZSTD_PRIVATE_H +#define ZSTD_PRIVATE_H + +#include +#include +#include + +typedef ssize_t __attribute__((__mode__(__pointer__))) ptrdiff_t; + +/* from kernel include/linux/unaligned/access_ok.h */ + +static always_inline u16 get_unaligned_le16(const void *p) +{ + return le16_to_cpup((__le16 *)p); +} + +static always_inline u32 get_unaligned_le32(const void *p) +{ + return le32_to_cpup((__le32 *)p); +} + +static always_inline u64 get_unaligned_le64(const void *p) +{ + return le64_to_cpup((__le64 *)p); +} + +static always_inline u32 get_unaligned_be32(const void *p) +{ + return be32_to_cpup((__be32 *)p); +} + +static always_inline u64 get_unaligned_be64(const void *p) +{ + return be64_to_cpup((__be64 *)p); +} + +static always_inline void put_unaligned_le16(u16 val, void *p) +{ + *((__le16 *)p) = cpu_to_le16(val); +} + +static always_inline void put_unaligned_le32(u32 val, void *p) +{ + *((__le32 *)p) = cpu_to_le32(val); +} + +static always_inline void put_unaligned_le64(u64 val, void *p) +{ + *((__le64 *)p) = cpu_to_le64(val); +} + +static always_inline void put_unaligned_be32(u32 val, void *p) +{ + *((__be32 *)p) = cpu_to_be32(val); +} + +static always_inline void put_unaligned_be64(u64 val, void *p) +{ + *((__be64 *)p) = cpu_to_be64(val); +} + + +/* from kernel include/asm-generic/unaligned.h with linux/unaligned/generic.h + assuming little endian */ + +extern void __bad_unaligned_access_size(void); + +#define get_unaligned(ptr) ((__force typeof(*(ptr)))({ \ + __builtin_choose_expr(sizeof(*(ptr)) == 1, *(ptr), \ + __builtin_choose_expr(sizeof(*(ptr)) == 2, get_unaligned_le16((ptr)), \ + __builtin_choose_expr(sizeof(*(ptr)) == 4, get_unaligned_le32((ptr)), \ + __builtin_choose_expr(sizeof(*(ptr)) == 8, get_unaligned_le64((ptr)), \ + __bad_unaligned_access_size())))); \ + })) + +#define put_unaligned(val, ptr) ({ \ + void *__gu_p = (ptr); \ + switch (sizeof(*(ptr))) { \ + case 1: \ + *(u8 *)__gu_p = (__force u8)(val); \ + break; \ + case 2: \ + put_unaligned_le16((__force u16)(val), __gu_p); \ + break; \ + case 4: \ + put_unaligned_le32((__force u32)(val), __gu_p); \ + break; \ + case 8: \ + put_unaligned_le64((__force u64)(val), __gu_p); \ + break; \ + default: \ + __bad_unaligned_access_size(); \ + break; \ + } \ + (void)0; }) + + +/* from kernel linux/kernel.h and uapi/linux/kernel.h */ + +#define __ALIGN_KERNEL(x, a) __ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1) +#define __ALIGN_KERNEL_MASK(x, mask) (((x) + (mask)) & ~(mask)) +#define ALIGN(x, a) __ALIGN_KERNEL((x), (a)) +#define PTR_ALIGN(p, a) ((typeof(p))ALIGN((unsigned long)(p), (a))) + +#endif /* ZSTD_PRIVATE_H */ diff --git a/xen/common/zstd/zstd_common.c b/xen/common/zstd/zstd_common.c index a282624ee1..1b13903538 100644 --- a/xen/common/zstd/zstd_common.c +++ b/xen/common/zstd/zstd_common.c @@ -19,7 +19,6 @@ ***************************************/ #include "error_private.h" #include "zstd_internal.h" /* declaration of ZSTD_isError, ZSTD_getErrorName, ZSTD_getErrorCode, ZSTD_getErrorString, ZSTD_versionNumber */ -#include /*=************************************************************** * Custom allocator @@ -32,7 +31,7 @@ (stack)->ptr <= (stack)->end ? ptr : NULL; \ }) -ZSTD_customMem ZSTD_initStack(void *workspace, size_t workspaceSize) +ZSTD_customMem INIT ZSTD_initStack(void *workspace, size_t workspaceSize) { ZSTD_customMem stackMem = {ZSTD_stackAlloc, ZSTD_stackFree, workspace}; ZSTD_stack *stack = (ZSTD_stack *)workspace; @@ -48,27 +47,27 @@ ZSTD_customMem ZSTD_initStack(void *workspace, size_t workspaceSize) return stackMem; } -void *ZSTD_stackAllocAll(void *opaque, size_t *size) +void INIT *ZSTD_stackAllocAll(void *opaque, size_t *size) { ZSTD_stack *stack = (ZSTD_stack *)opaque; *size = (BYTE const *)stack->end - (BYTE *)ZSTD_PTR_ALIGN(stack->ptr); return stack_push(stack, *size); } -void *ZSTD_stackAlloc(void *opaque, size_t size) +void INIT *ZSTD_stackAlloc(void *opaque, size_t size) { ZSTD_stack *stack = (ZSTD_stack *)opaque; return stack_push(stack, size); } -void ZSTD_stackFree(void *opaque, void *address) +void INIT ZSTD_stackFree(void *opaque, void *address) { (void)opaque; (void)address; } -void *ZSTD_malloc(size_t size, ZSTD_customMem customMem) { return customMem.customAlloc(customMem.opaque, size); } +void INIT *ZSTD_malloc(size_t size, ZSTD_customMem customMem) { return customMem.customAlloc(customMem.opaque, size); } -void ZSTD_free(void *ptr, ZSTD_customMem customMem) +void INIT ZSTD_free(void *ptr, ZSTD_customMem customMem) { if (ptr != NULL) customMem.customFree(customMem.opaque, ptr); diff --git a/xen/common/zstd/zstd_internal.h b/xen/common/zstd/zstd_internal.h index dac753397f..1b13840c44 100644 --- a/xen/common/zstd/zstd_internal.h +++ b/xen/common/zstd/zstd_internal.h @@ -20,7 +20,7 @@ /*-******************************************************* * Compiler specifics *********************************************************/ -#define FORCE_INLINE static __always_inline +#define FORCE_INLINE static always_inline #define FORCE_NOINLINE static noinline /*-************************************* @@ -28,16 +28,12 @@ ***************************************/ #include "error_private.h" #include "mem.h" -#include -#include -#include -#include +#include +#include /*-************************************* * shared macros ***************************************/ -#define MIN(a, b) ((a) < (b) ? (a) : (b)) -#define MAX(a, b) ((a) > (b) ? (a) : (b)) #define CHECK_F(f) \ { \ size_t const errcod = f; \ @@ -67,10 +63,6 @@ #define ZSTD_REP_MOVE_OPT (ZSTD_REP_NUM) static const U32 repStartValue[ZSTD_REP_NUM] = {1, 4, 8}; -#define KB *(1 << 10) -#define MB *(1 << 20) -#define GB *(1U << 30) - #define BIT7 128 #define BIT6 64 #define BIT5 32 diff --git a/xen/include/xen/decompress.h b/xen/include/xen/decompress.h index b2955faa4b..f5bc17f2b6 100644 --- a/xen/include/xen/decompress.h +++ b/xen/include/xen/decompress.h @@ -31,7 +31,7 @@ typedef int decompress_fn(unsigned char *inbuf, unsigned int len, * dependent). */ -decompress_fn bunzip2, unxz, unlzma, unlzo, unlz4; +decompress_fn bunzip2, unxz, unlzma, unlzo, unlz4, unzstd; int decompress(void *inbuf, unsigned int len, void *outbuf); diff --git a/xen/include/xen/xxhash.h b/xen/include/xen/xxhash.h index df42511438..13ddc616d1 100644 --- a/xen/include/xen/xxhash.h +++ b/xen/include/xen/xxhash.h @@ -75,7 +75,7 @@ #ifndef XXHASH_H #define XXHASH_H -#include +#include /*-**************************** * Simple Hash Functions diff --git a/xen/include/xen/zstd.h b/xen/include/xen/zstd.h index 249575e248..eb33582a18 100644 --- a/xen/include/xen/zstd.h +++ b/xen/include/xen/zstd.h @@ -18,7 +18,7 @@ #define ZSTD_H /* ====== Dependency ======*/ -#include /* size_t */ +#include /* size_t */ /*-***************************************************************************** -- 2.26.2