43 lines
1.4 KiB
C
43 lines
1.4 KiB
C
/*
|
|
* lib_common.h - internal header included by all library code
|
|
*/
|
|
|
|
#ifndef LIB_LIB_COMMON_H
|
|
#define LIB_LIB_COMMON_H
|
|
|
|
#if defined(LIBDEFLATE_DLL) && (defined(_WIN32) || defined(__CYGWIN__))
|
|
# define LIBDEFLATE_EXPORT_SYM __declspec(dllexport)
|
|
#elif defined(__GNUC__)
|
|
# define LIBDEFLATE_EXPORT_SYM __attribute__((visibility("default")))
|
|
#else
|
|
# define LIBDEFLATE_EXPORT_SYM
|
|
#endif
|
|
|
|
/*
|
|
* On i386, gcc assumes that the stack is 16-byte aligned at function entry.
|
|
* However, some compilers (e.g. MSVC) and programming languages (e.g. Delphi)
|
|
* only guarantee 4-byte alignment when calling functions. This is mainly an
|
|
* issue on Windows, but it has been seen on Linux too. Work around this ABI
|
|
* incompatibility by realigning the stack pointer when entering libdeflate.
|
|
* This prevents crashes in SSE/AVX code.
|
|
*/
|
|
#if defined(__GNUC__) && defined(__i386__)
|
|
# define LIBDEFLATE_ALIGN_STACK __attribute__((force_align_arg_pointer))
|
|
#else
|
|
# define LIBDEFLATE_ALIGN_STACK
|
|
#endif
|
|
|
|
#define LIBDEFLATEAPI LIBDEFLATE_EXPORT_SYM LIBDEFLATE_ALIGN_STACK
|
|
|
|
#include "common_defs.h"
|
|
#include "libdeflate.h"
|
|
#include "wasm.h"
|
|
|
|
void *libdeflate_aligned_malloc(size_t alignment, size_t size);
|
|
void libdeflate_aligned_free(void *ptr);
|
|
|
|
#define ASSERT(expr) (void)(expr)
|
|
#define CONCAT_IMPL(a, b) a##b
|
|
#define CONCAT(a, b) CONCAT_IMPL(a, b)
|
|
#define ADD_SUFFIX(name) CONCAT(name, SUFFIX)
|
|
#endif /* LIB_LIB_COMMON_H */
|