summaryrefslogtreecommitdiff
path: root/StdLib/Include/sys/EfiCdefs.h
diff options
context:
space:
mode:
Diffstat (limited to 'StdLib/Include/sys/EfiCdefs.h')
-rw-r--r--StdLib/Include/sys/EfiCdefs.h376
1 files changed, 0 insertions, 376 deletions
diff --git a/StdLib/Include/sys/EfiCdefs.h b/StdLib/Include/sys/EfiCdefs.h
deleted file mode 100644
index 2fa7ba6ae5..0000000000
--- a/StdLib/Include/sys/EfiCdefs.h
+++ /dev/null
@@ -1,376 +0,0 @@
-/** @file
- Common declarations and definitions for Standard C Library headers.
-
- This header consolidates definitions and declarations for compiler specific
- features in one place in order to assist in making the remainder of the
- library as compiler independent as possible.
-
- Certain macro and type definitions are required to be provided by several
- different headers. In order to avoid having multiple definitions, and the
- attendant risk of having the definitions get out of sync, they are defined in
- this header.
-
- Note that MdePkg/Include/Base.h is automatically included and will bring
- processor architecture specific definitions along with it.
-
- Throughout the library, the following macros are used instead of keywords so
- that the library can be easily tuned for different compilers.
- __inline Defined to the appropriate keyword or not defined.
- __func__ Defined to __FUNC__, __FUNCTION__, or NULL as appropriate.
- __restrict Defined to nothing for VC++ or to restrict for GCC and C99 compliant compilers.
-
- This file and its contents are inspired by the <sys/cdefs.h> files in Berkeley
- Unix. They have been re-implemented to be specific to the EFI environment.
-
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Portions Copyright (c) 1991, 1993
- The Regents of the University of California. All rights reserved.
-
- Portions of this code are derived from software contributed to Berkeley by
- Berkeley Software Design, Inc.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-**/
-#ifndef _EFI_CDEFS_H
-#define _EFI_CDEFS_H
-
-/*
-* Macro to test if we're using a GNU C compiler of a specific vintage
-* or later, for e.g. features that appeared in a particular version
-* of GNU C. Usage:
-*
-* #if __GNUC_PREREQ__(major, minor)
-* ...cool feature...
-* #else
-* ...delete feature...
-* #endif
-*/
-#ifdef __GNUC__
-#define __GNUC_PREREQ__(x, y) \
-((__GNUC__ == (x) && __GNUC_MINOR__ >= (y)) || \
- (__GNUC__ > (x)))
-
-#define DONT_USE_STRONG_WEAK_ALIAS 1
-
-#else
-#define __GNUC_PREREQ__(x, y) 0
-#endif
-
-#include <sys/featuretest.h>
-//#include <machine/_EfiCdefs.h>
-#ifdef __PE32__
-#include <sys/_EfiCdefs_PE32.h>
-#else
-#include <sys/cdefs_aout.h>
-#endif
-
-/* NULL is defined by the automatic inclusion of Base.h by the build tools. */
-
-#ifdef __GNUC__
- #define _EFI_SIZE_T_ __SIZE_TYPE__ /* sizeof() */
- #define _EFI_WCHAR_T __WCHAR_TYPE__
- #define _EFI_WINT_T __WINT_TYPE__
- //#define _EFI_WINT_MIN (0)
- //#define _EFI_WINT_MAX (0xFFFF)
- #define _EFI_PTRDIFF_T_ __PTRDIFF_TYPE__ /* ptr1 - ptr2 --- Must be same size as size_t */
-
-#else
-#define _EFI_SIZE_T_ UINTN /* sizeof() */
-#define _EFI_WCHAR_T UINT16
-#define _EFI_WINT_T INT32
- //#define _EFI_WINT_MIN (-2147483647) /* wint_t */
- //#define _EFI_WINT_MAX ( 2147483647) /* wint_t */
- #define _EFI_PTRDIFF_T_ INTN /* ptr1 - ptr2 --- Must be same size as size_t */
-#endif /* __GNUC__ */
-
-#define _EFI_CLOCK_T UINT64
-#define _EFI_TIME_T INT32
-
-#if defined(__cplusplus)
-#define __BEGIN_DECLS extern "C" {
-#define __END_DECLS }
-#define __static_cast(x,y) static_cast<x>(y)
-#else
-#define __BEGIN_DECLS
-#define __END_DECLS
-#define __static_cast(x,y) (x)y
-#endif
-
- /*
- * The __CONCAT macro is used to concatenate parts of symbol names, e.g.
- * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
- * The __CONCAT macro is a bit tricky -- make sure you don't put spaces
- * in between its arguments. __CONCAT can also concatenate double-quoted
- * strings produced by the __STRING macro, but this only works with ANSI C.
- */
-
-#define ___STRING(x) __STRING(x)
-#define ___CONCAT(x,y) __CONCAT(x,y)
-#define __CONCAT(x,y) x ## y
-#define __STRING(x) #x
-
-#define __const CONST
-#define __signed signed
-#define __volatile volatile
-
-#if __STDC__ || defined(__cplusplus)
- #if defined(__cplusplus)
- #define __inline inline /* convert to C++ keyword */
- #else
- #if defined(_MSC_VER) || (!defined(__GNUC__) && !defined(__lint__))
- #define __inline /* delete C99 keyword */
- #endif /* !__GNUC__ && !__lint__ */
- #endif /* !__cplusplus */
-#endif /* !(__STDC__ || __cplusplus) */
-
-/* Used in NetBSD for internal auditing of the source tree. */
-#define __aconst
-
- /*
- * The following macro is used to remove const cast-away warnings
- * from gcc -Wcast-qual; it should be used with caution because it
- * can hide valid errors; in particular most valid uses are in
- * situations where the API requires it, not to cast away string
- * constants. We don't use *intptr_t on purpose here and we are
- * explicit about unsigned long so that we don't have additional
- * dependencies.
- */
-#define __UNCONST(a) ((void *)(a))
-//#define __UNCONST(a) ((void *)(PHYSICAL_ADDRESS)(const void *)(a))
-
- /*
- * The following macro is used to remove the volatile cast-away warnings
- * from gcc -Wcast-qual; as above it should be used with caution
- * because it can hide valid errors or warnings. Valid uses include
- * making it possible to pass a volatile pointer to memset().
- * For the same reasons as above, we use unsigned long and not intptr_t.
- */
-#define __UNVOLATILE(a) ((void *)(PHYSICAL_ADDRESS)(volatile void *)(a))
-
- /*
- * GCC2 provides __extension__ to suppress warnings for various GNU C
- * language extensions under "-ansi -pedantic".
- */
-#if !__GNUC_PREREQ__(2, 0)
-#define __extension__ /* delete __extension__ if non-gcc or gcc1 */
-#endif
-
- /*
- * GCC1 and some versions of GCC2 declare dead (non-returning) and
- * pure (no side effects) functions using "volatile" and "const";
- * unfortunately, these then cause warnings under "-ansi -pedantic".
- * GCC2 uses a new, peculiar __attribute__((attrs)) style. All of
- * these work for GNU C++ (modulo a slight glitch in the C++ grammar
- * in the distribution version of 2.5.5).
- */
-#if !__GNUC_PREREQ__(2, 5)
-#define __attribute__(x) /* delete __attribute__ if non-gcc or gcc1 */
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
-#define __dead __volatile
-#define __pure __const
-#endif
-#endif
-
- /* Delete pseudo-keywords wherever they are not available or needed. */
-#ifndef __dead
-#define __dead
-#define __pure
-#endif
-
-#if __GNUC_PREREQ__(2, 7)
-#define __unused __attribute__((__unused__))
-#define __noreturn __attribute__((__noreturn__))
-#else
-#define __unused /* delete */
-#define __noreturn /* delete */
-#endif
-
-#if __GNUC_PREREQ__(3, 1)
-#define __used __attribute__((__used__))
-#else
-#define __used __unused
-#endif
-
-#if __GNUC_PREREQ__(2, 7)
-#define __packed __attribute__((__packed__))
-#define __aligned(x) __attribute__((__aligned__(x)))
-#define __section(x) __attribute__((__section__(x)))
-#elif defined(__lint__)
-#define __packed /* delete */
-#define __aligned(x) /* delete */
-#define __section(x) /* delete */
-#else
-#define __packed error: no __packed for this compiler
-#define __aligned(x) error: no __aligned for this compiler
-#define __section(x) error: no __section for this compiler
-#endif
-
-/*
-* C99 defines the restrict type qualifier keyword, which was made available
-* in GCC 2.92.
-*/
-#if __STDC_VERSION__ >= 199901L
- #define __restrict restrict
-#else
- #if defined(_MSC_VER) || !__GNUC_PREREQ__(2, 92)
- #define __restrict /* delete __restrict when not supported */
- #endif
-#endif
-
-/*
-* C99 defines __func__ predefined identifier, which was made available
-* in GCC 2.95.
-*/
-#if !(__STDC_VERSION__ >= 199901L)
- #if defined(_MSC_VER)
- #define __func__ __FUNCTION__ /* Use the MS-specific predefined macro */
- #elif __GNUC_PREREQ__(2, 6)
- #define __func__ __PRETTY_FUNCTION__
- #elif __GNUC_PREREQ__(2, 4)
- #define __func__ __FUNCTION__
- #else
- #define __func__ ""
- #endif
-#endif /* !(__STDC_VERSION__ >= 199901L) */
-
-#define __RENAME(x)
-
- /*
- * A barrier to stop the optimizer from moving code or assume live
- * register values. This is gcc specific, the version is more or less
- * arbitrary, might work with older compilers.
- */
-#if __GNUC_PREREQ__(2, 95)
-#define __insn_barrier() __asm __volatile("":::"memory")
-#else
-#define __insn_barrier() /* */
-#endif
-
- /*
- * GNU C version 2.96 adds explicit branch prediction so that
- * the CPU back-end can hint the processor and also so that
- * code blocks can be reordered such that the predicted path
- * sees a more linear flow, thus improving cache behavior, etc.
- *
- * The following two macros provide us with a way to use this
- * compiler feature. Use __predict_true() if you expect the expression
- * to evaluate to true, and __predict_false() if you expect the
- * expression to evaluate to false.
- *
- * A few notes about usage:
- *
- * * Generally, __predict_false() error condition checks (unless
- * you have some _strong_ reason to do otherwise, in which case
- * document it), and/or __predict_true() `no-error' condition
- * checks, assuming you want to optimize for the no-error case.
- *
- * * Other than that, if you don't know the likelihood of a test
- * succeeding from empirical or other `hard' evidence, don't
- * make predictions.
- *
- * * These are meant to be used in places that are run `a lot'.
- * It is wasteful to make predictions in code that is run
- * seldomly (e.g. at subsystem initialization time) as the
- * basic block reordering that this affects can often generate
- * larger code.
- */
-#if __GNUC_PREREQ__(2, 96)
-#define __predict_true(exp) __builtin_expect((exp) != 0, 1)
-#define __predict_false(exp) __builtin_expect((exp) != 0, 0)
-#else
-#define __predict_true(exp) (exp)
-#define __predict_false(exp) (exp)
-#endif
-
-/* find least significant bit that is set */
-#define __LOWEST_SET_BIT(__mask) ((((__mask) - 1) & (__mask)) ^ (__mask))
-
-#define __SHIFTOUT(__x, __mask) (((__x) & (__mask)) / __LOWEST_SET_BIT(__mask))
-#define __SHIFTIN(__x, __mask) ((__x) * __LOWEST_SET_BIT(__mask))
-#define __SHIFTOUT_MASK(__mask) __SHIFTOUT((__mask), (__mask))
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
-
- /* VC++, by default, defines wchar_t as an intrinsic type, equivalent to
- unsigned short. This conflicts which Standard C Library
- implementations which try to define wchar_t.
- Make sure that this behavior has been turned off by using
- /Zc:wchar_t- on the command line.
- */
- #ifdef _NATIVE_WCHAR_T_DEFINED
- #error You must specify /Zc:wchar_t- to the compiler to turn off intrinsic wchar_t.
- #endif
-
- /* Get rid of pre-defined macros that are misleading in this environment. */
- #undef _WIN32
- #undef _WIN64
-
- // Keep compiler quiet about casting from smaller to larger types
- #pragma warning ( disable : 4306 )
-
- #define __STDC__ 1
- #define __STDC_VERSION__ 199409L
- #define __STDC_HOSTED__ 1
-
-#endif /* defined(_MSC_VER) */
-extern int _fltused; // VC++ requires this if you use floating point. KEEP for all compilers.
-
-#define _Bool BOOLEAN
-#define _DIAGASSERT(e)
-
-// Types used to replace long so that it will have constant length regardless of compiler.
-typedef INT32 LONG32;
-typedef UINT32 ULONG32;
-typedef INT64 LONG64;
-typedef UINT64 ULONG64;
-
-typedef INTN EFI_LONG_T;
-typedef UINTN EFI_ULONG_T;
-
-/* These types reflect the compiler's size for long */
-#if defined(__GNUC__)
- #if __GNUC_PREREQ__(4,4)
- /* GCC 4.4 or later */
- typedef INTN LONGN;
- typedef UINTN ULONGN;
- #else
- /* minGW gcc variant */
- typedef INT32 LONGN;
- typedef UINT32 ULONGN;
- #endif /* __GNUC_PREREQ__(4,4) */
-#else /* NOT GCC */
- /* Microsoft or Intel compilers */
- typedef INT32 LONGN;
- typedef UINT32 ULONGN;
-#endif /* defined(__GNUC__) */
-
-#endif /* _EFI_CDEFS_H */