os/kernelhwsrv/kernel/eka/include/gcc.h
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     1 // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     4 // under the terms of the License "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 //
     8 // Initial Contributors:
     9 // Nokia Corporation - initial contribution.
    10 //
    11 // Contributors:
    12 //
    13 // Description:
    14 // e32\include\gcc.h
    15 // This is a preinclude file for GCC compilers. Currently only tested with GCC 3.4.4.
    16 // 
    17 //
    18 
    19 /**
    20  @file
    21  @internalAll
    22 */
    23 
    24 // Check this header is being used as anticipated
    25 #ifndef __GCC32__
    26 #error Unexpected include of GCC header
    27 #endif
    28 #ifndef __X86__
    29 #error GCC header untested on non-X86 platforms
    30 #endif
    31 
    32 // Do product include if not done already
    33 #ifdef PRODUCT_INCLUDE
    34 #include PRODUCT_INCLUDE
    35 #endif
    36 
    37 // Visibility
    38 #define IMPORT_C
    39 #define IMPORT_D __attribute__((dllimport))
    40 #define EXPORT_C __attribute__((dllexport))
    41 #define EXPORT_D 
    42 #ifdef GCC4_OR_LATER // this would be nice... use in conjunction with -fvisibility=hidden
    43 #undef  EXPORT_C
    44 #define EXPORT_C __attribute__((visibility("default")))
    45 #endif
    46 
    47 // Varargs
    48 typedef __builtin_va_list va_list;
    49 #define va_start(v, l) __builtin_va_start(v, l)
    50 #define va_arg(v, l) __builtin_va_arg(v, l)
    51 #define va_end(v) __builtin_va_end(v)
    52 #define VA_LIST va_list
    53 #define _VA_LIST_DEFINED //To deal with stdarg.h
    54 #define __VA_LIST_defined //To deal with e32def.h
    55 #define VA_START(ap,pn) va_start(ap, pn)
    56 #define VA_ARG(ap,type) va_arg(ap,type)
    57 #define VA_END(ap)      va_end(ap)
    58 
    59 // Stdlib/OpenEnv support
    60 // This should prevent /stdlib/linc/stdarg.h from doing damage.
    61 #define _STDARG_H
    62 // now deal with stdarg_e.h
    63 typedef va_list __e32_va_list;
    64 #define _STDARG_E_H
    65 // wchar_t is a primtive type for C++ on GCC
    66 #ifdef __cplusplus
    67 #define __wchar_t_defined
    68 #endif
    69 
    70 // General
    71 #define __NO_CLASS_CONSTS__
    72 #define	I64LIT(x)	x##LL
    73 #define	UI64LIT(x)	x##ULL
    74 #define __SOFTFP
    75 #define __NORETURN__  __attribute__ ((noreturn))
    76 #define NONSHARABLE_CLASS(x) class /*__attribute__(notshared)*/ x
    77 #define NONSHARABLE_STRUCT(x) struct /*__attribute__(notshared)*/ x
    78 #define __NO_THROW //throw ()
    79 #define __THROW(t) //throw (t)
    80 #define TEMPLATE_SPECIALIZATION template<>
    81 
    82 #ifndef __cdecl
    83 #define __cdecl __attribute__((cdecl))
    84 #endif
    85 #ifndef __fastcall
    86 #define __fastcall __attribute__((fastcall))
    87 #endif
    88 #ifndef __stdcall
    89 #define __stdcall __attribute__((stdcall))
    90 #endif
    91 
    92 // These are built-in defines during compilation stage but are also required (and not defined) during makmake stage
    93 #ifndef __GNUC__
    94 #define __GNUC__ 3
    95 #endif
    96 
    97 #ifndef __i386
    98 #define __i386
    99 #endif
   100