cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

zstd_deps.h (2850B)


      1/* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */
      2/*
      3 * Copyright (c) Facebook, Inc.
      4 * All rights reserved.
      5 *
      6 * This source code is licensed under both the BSD-style license (found in the
      7 * LICENSE file in the root directory of this source tree) and the GPLv2 (found
      8 * in the COPYING file in the root directory of this source tree).
      9 * You may select, at your option, one of the above-listed licenses.
     10 */
     11
     12/*
     13 * This file provides common libc dependencies that zstd requires.
     14 * The purpose is to allow replacing this file with a custom implementation
     15 * to compile zstd without libc support.
     16 */
     17
     18/* Need:
     19 * NULL
     20 * INT_MAX
     21 * UINT_MAX
     22 * ZSTD_memcpy()
     23 * ZSTD_memset()
     24 * ZSTD_memmove()
     25 */
     26#ifndef ZSTD_DEPS_COMMON
     27#define ZSTD_DEPS_COMMON
     28
     29#include <linux/limits.h>
     30#include <linux/stddef.h>
     31
     32#define ZSTD_memcpy(d,s,n) __builtin_memcpy((d),(s),(n))
     33#define ZSTD_memmove(d,s,n) __builtin_memmove((d),(s),(n))
     34#define ZSTD_memset(d,s,n) __builtin_memset((d),(s),(n))
     35
     36#endif /* ZSTD_DEPS_COMMON */
     37
     38/*
     39 * Define malloc as always failing. That means the user must
     40 * either use ZSTD_customMem or statically allocate memory.
     41 * Need:
     42 * ZSTD_malloc()
     43 * ZSTD_free()
     44 * ZSTD_calloc()
     45 */
     46#ifdef ZSTD_DEPS_NEED_MALLOC
     47#ifndef ZSTD_DEPS_MALLOC
     48#define ZSTD_DEPS_MALLOC
     49
     50#define ZSTD_malloc(s) ({ (void)(s); NULL; })
     51#define ZSTD_free(p) ((void)(p))
     52#define ZSTD_calloc(n,s) ({ (void)(n); (void)(s); NULL; })
     53
     54#endif /* ZSTD_DEPS_MALLOC */
     55#endif /* ZSTD_DEPS_NEED_MALLOC */
     56
     57/*
     58 * Provides 64-bit math support.
     59 * Need:
     60 * U64 ZSTD_div64(U64 dividend, U32 divisor)
     61 */
     62#ifdef ZSTD_DEPS_NEED_MATH64
     63#ifndef ZSTD_DEPS_MATH64
     64#define ZSTD_DEPS_MATH64
     65
     66#include <linux/math64.h>
     67
     68static uint64_t ZSTD_div64(uint64_t dividend, uint32_t divisor) {
     69  return div_u64(dividend, divisor);
     70}
     71
     72#endif /* ZSTD_DEPS_MATH64 */
     73#endif /* ZSTD_DEPS_NEED_MATH64 */
     74
     75/*
     76 * This is only requested when DEBUGLEVEL >= 1, meaning
     77 * it is disabled in production.
     78 * Need:
     79 * assert()
     80 */
     81#ifdef ZSTD_DEPS_NEED_ASSERT
     82#ifndef ZSTD_DEPS_ASSERT
     83#define ZSTD_DEPS_ASSERT
     84
     85#include <linux/kernel.h>
     86
     87#define assert(x) WARN_ON((x))
     88
     89#endif /* ZSTD_DEPS_ASSERT */
     90#endif /* ZSTD_DEPS_NEED_ASSERT */
     91
     92/*
     93 * This is only requested when DEBUGLEVEL >= 2, meaning
     94 * it is disabled in production.
     95 * Need:
     96 * ZSTD_DEBUG_PRINT()
     97 */
     98#ifdef ZSTD_DEPS_NEED_IO
     99#ifndef ZSTD_DEPS_IO
    100#define ZSTD_DEPS_IO
    101
    102#include <linux/printk.h>
    103
    104#define ZSTD_DEBUG_PRINT(...) pr_debug(__VA_ARGS__)
    105
    106#endif /* ZSTD_DEPS_IO */
    107#endif /* ZSTD_DEPS_NEED_IO */
    108
    109/*
    110 * Only requested when MSAN is enabled.
    111 * Need:
    112 * intptr_t
    113 */
    114#ifdef ZSTD_DEPS_NEED_STDINT
    115#ifndef ZSTD_DEPS_STDINT
    116#define ZSTD_DEPS_STDINT
    117
    118/*
    119 * The Linux Kernel doesn't provide intptr_t, only uintptr_t, which
    120 * is an unsigned long.
    121 */
    122typedef long intptr_t;
    123
    124#endif /* ZSTD_DEPS_STDINT */
    125#endif /* ZSTD_DEPS_NEED_STDINT */