123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- /* xz_config.h - Private includes and definitions for userspace use */
- /*
- * GRUB -- GRand Unified Bootloader
- * Copyright (C) 2010 Free Software Foundation, Inc.
- *
- * GRUB is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GRUB is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
- */
- /*
- * This file is based on code from XZ embedded project
- * http://tukaani.org/xz/embedded.html
- */
- #ifndef XZ_CONFIG_H
- #define XZ_CONFIG_H
- /* Enable BCJ filter decoders. */
- #ifndef GRUB_EMBED_DECOMPRESSOR
- #define XZ_DEC_X86
- #define XZ_DEC_POWERPC
- #define XZ_DEC_IA64
- #define XZ_DEC_ARM
- #define XZ_DEC_ARMTHUMB
- #define XZ_DEC_SPARC
- #else
- #if defined(__i386__) || defined(__x86_64__)
- #define XZ_DEC_X86
- #endif
- #ifdef __powerpc__
- #define XZ_DEC_POWERPC
- #endif
- #ifdef __ia64__
- #define XZ_DEC_IA64
- #endif
- #ifdef __arm__
- #define XZ_DEC_ARM
- #endif
- #ifdef __arm__
- #define XZ_DEC_ARMTHUMB
- #endif
- #ifdef __sparc__
- #define XZ_DEC_SPARC
- #endif
- #endif
- #include "xz.h"
- #include <stdlib.h>
- #define kmalloc(size, flags) malloc(size)
- #define kfree(ptr) free(ptr)
- #define vmalloc(size) malloc(size)
- #define vfree(ptr) free(ptr)
- #define memeq(a, b, size) (memcmp(a, b, size) == 0)
- #define memzero(buf, size) memset(buf, 0, size)
- #define min(x, y) ((x) < (y) ? (x) : (y))
- #define min_t(type, x, y) min(x, y)
- /*
- * Some functions have been marked with __always_inline to keep the
- * performance reasonable even when the compiler is optimizing for
- * small code size. You may be able to save a few bytes by #defining
- * __always_inline to plain inline, but don't complain if the code
- * becomes slow.
- *
- * NOTE: System headers on GNU/Linux may #define this macro already,
- * so if you want to change it, it you need to #undef it first.
- */
- #ifndef __always_inline
- # ifdef __GNUC__
- # define __always_inline \
- inline __attribute__((__always_inline__))
- # else
- # define __always_inline inline
- # endif
- #endif
- /*
- * Some functions are marked to never be inlined to reduce stack usage.
- * If you don't care about stack usage, you may want to modify this so
- * that noinline_for_stack is #defined to be empty even when using GCC.
- * Doing so may save a few bytes in binary size.
- */
- #ifndef noinline_for_stack
- # ifdef __GNUC__
- # define noinline_for_stack __attribute__((__noinline__))
- # else
- # define noinline_for_stack
- # endif
- #endif
- /* Inline functions to access unaligned unsigned 32-bit integers */
- static inline uint32_t get_unaligned_le32(const uint8_t *buf)
- {
- return (uint32_t)buf[0]
- | ((uint32_t)buf[1] << 8)
- | ((uint32_t)buf[2] << 16)
- | ((uint32_t)buf[3] << 24);
- }
- static inline uint32_t get_unaligned_be32(const uint8_t *buf)
- {
- return (uint32_t)(buf[0] << 24)
- | ((uint32_t)buf[1] << 16)
- | ((uint32_t)buf[2] << 8)
- | (uint32_t)buf[3];
- }
- static inline void put_unaligned_le32(uint32_t val, uint8_t *buf)
- {
- buf[0] = (uint8_t)val;
- buf[1] = (uint8_t)(val >> 8);
- buf[2] = (uint8_t)(val >> 16);
- buf[3] = (uint8_t)(val >> 24);
- }
- static inline void put_unaligned_be32(uint32_t val, uint8_t *buf)
- {
- buf[0] = (uint8_t)(val >> 24);
- buf[1] = (uint8_t)(val >> 16);
- buf[2] = (uint8_t)(val >> 8);
- buf[3] = (uint8_t)val;
- }
- /*
- * Use get_unaligned_le32() also for aligned access for simplicity. On
- * little endian systems, #define get_le32(ptr) (*(const uint32_t *)(ptr))
- * could save a few bytes in code size.
- */
- #define get_le32 get_unaligned_le32
- #endif
|