162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (c) Facebook, Inc. 462306a36Sopenharmony_ci * All rights reserved. 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * This source code is licensed under both the BSD-style license (found in the 762306a36Sopenharmony_ci * LICENSE file in the root directory of this source tree) and the GPLv2 (found 862306a36Sopenharmony_ci * in the COPYING file in the root directory of this source tree). 962306a36Sopenharmony_ci * You may select, at your option, one of the above-listed licenses. 1062306a36Sopenharmony_ci */ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci/* 1362306a36Sopenharmony_ci * This file provides common libc dependencies that zstd requires. 1462306a36Sopenharmony_ci * The purpose is to allow replacing this file with a custom implementation 1562306a36Sopenharmony_ci * to compile zstd without libc support. 1662306a36Sopenharmony_ci */ 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci/* Need: 1962306a36Sopenharmony_ci * NULL 2062306a36Sopenharmony_ci * INT_MAX 2162306a36Sopenharmony_ci * UINT_MAX 2262306a36Sopenharmony_ci * ZSTD_memcpy() 2362306a36Sopenharmony_ci * ZSTD_memset() 2462306a36Sopenharmony_ci * ZSTD_memmove() 2562306a36Sopenharmony_ci */ 2662306a36Sopenharmony_ci#ifndef ZSTD_DEPS_COMMON 2762306a36Sopenharmony_ci#define ZSTD_DEPS_COMMON 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci#include <linux/limits.h> 3062306a36Sopenharmony_ci#include <linux/stddef.h> 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci#define ZSTD_memcpy(d,s,n) __builtin_memcpy((d),(s),(n)) 3362306a36Sopenharmony_ci#define ZSTD_memmove(d,s,n) __builtin_memmove((d),(s),(n)) 3462306a36Sopenharmony_ci#define ZSTD_memset(d,s,n) __builtin_memset((d),(s),(n)) 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci#endif /* ZSTD_DEPS_COMMON */ 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci/* 3962306a36Sopenharmony_ci * Define malloc as always failing. That means the user must 4062306a36Sopenharmony_ci * either use ZSTD_customMem or statically allocate memory. 4162306a36Sopenharmony_ci * Need: 4262306a36Sopenharmony_ci * ZSTD_malloc() 4362306a36Sopenharmony_ci * ZSTD_free() 4462306a36Sopenharmony_ci * ZSTD_calloc() 4562306a36Sopenharmony_ci */ 4662306a36Sopenharmony_ci#ifdef ZSTD_DEPS_NEED_MALLOC 4762306a36Sopenharmony_ci#ifndef ZSTD_DEPS_MALLOC 4862306a36Sopenharmony_ci#define ZSTD_DEPS_MALLOC 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci#define ZSTD_malloc(s) ({ (void)(s); NULL; }) 5162306a36Sopenharmony_ci#define ZSTD_free(p) ((void)(p)) 5262306a36Sopenharmony_ci#define ZSTD_calloc(n,s) ({ (void)(n); (void)(s); NULL; }) 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci#endif /* ZSTD_DEPS_MALLOC */ 5562306a36Sopenharmony_ci#endif /* ZSTD_DEPS_NEED_MALLOC */ 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci/* 5862306a36Sopenharmony_ci * Provides 64-bit math support. 5962306a36Sopenharmony_ci * Need: 6062306a36Sopenharmony_ci * U64 ZSTD_div64(U64 dividend, U32 divisor) 6162306a36Sopenharmony_ci */ 6262306a36Sopenharmony_ci#ifdef ZSTD_DEPS_NEED_MATH64 6362306a36Sopenharmony_ci#ifndef ZSTD_DEPS_MATH64 6462306a36Sopenharmony_ci#define ZSTD_DEPS_MATH64 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci#include <linux/math64.h> 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_cistatic uint64_t ZSTD_div64(uint64_t dividend, uint32_t divisor) { 6962306a36Sopenharmony_ci return div_u64(dividend, divisor); 7062306a36Sopenharmony_ci} 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci#endif /* ZSTD_DEPS_MATH64 */ 7362306a36Sopenharmony_ci#endif /* ZSTD_DEPS_NEED_MATH64 */ 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci/* 7662306a36Sopenharmony_ci * This is only requested when DEBUGLEVEL >= 1, meaning 7762306a36Sopenharmony_ci * it is disabled in production. 7862306a36Sopenharmony_ci * Need: 7962306a36Sopenharmony_ci * assert() 8062306a36Sopenharmony_ci */ 8162306a36Sopenharmony_ci#ifdef ZSTD_DEPS_NEED_ASSERT 8262306a36Sopenharmony_ci#ifndef ZSTD_DEPS_ASSERT 8362306a36Sopenharmony_ci#define ZSTD_DEPS_ASSERT 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci#include <linux/kernel.h> 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci#define assert(x) WARN_ON(!(x)) 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci#endif /* ZSTD_DEPS_ASSERT */ 9062306a36Sopenharmony_ci#endif /* ZSTD_DEPS_NEED_ASSERT */ 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci/* 9362306a36Sopenharmony_ci * This is only requested when DEBUGLEVEL >= 2, meaning 9462306a36Sopenharmony_ci * it is disabled in production. 9562306a36Sopenharmony_ci * Need: 9662306a36Sopenharmony_ci * ZSTD_DEBUG_PRINT() 9762306a36Sopenharmony_ci */ 9862306a36Sopenharmony_ci#ifdef ZSTD_DEPS_NEED_IO 9962306a36Sopenharmony_ci#ifndef ZSTD_DEPS_IO 10062306a36Sopenharmony_ci#define ZSTD_DEPS_IO 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci#include <linux/printk.h> 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ci#define ZSTD_DEBUG_PRINT(...) pr_debug(__VA_ARGS__) 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_ci#endif /* ZSTD_DEPS_IO */ 10762306a36Sopenharmony_ci#endif /* ZSTD_DEPS_NEED_IO */ 108