Changeset 2825 for trunk/kLdr/kLdrHlp.h


Ignore:
Timestamp:
Oct 22, 2006, 5:57:19 PM (19 years ago)
Author:
bird
Message:

heap and file provider.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kLdr/kLdrHlp.h

    r2824 r2825  
    2929#define __kLdrHlp_h__
    3030
     31/** @defgroup grp_kLdrHlp  kLdrHlp - Helper Functions
     32 * @internal
     33 * @{ */
    3134/** Get the minimum of two values. */
    3235#define KLDR_MIN(a, b) ((a) <= (b) ? (a) : (b))
    3336
    34 #ifdef __OS2__
     37/** Align a size_t value. */
     38#define KLDR_ALIGN_Z(val, align)    ( ((val) + ((align) - 1)) & ~(size_t)((align) - 1) )
     39/** Align a void * value. */
     40#define KLDR_ALIGN_P(pv, align)     ( (void *)( ((uintptr_t)(pv) + ((align) - 1)) & ~(uintptr_t)((align) - 1) ) )
     41
     42/*
     43 * Compiler specific helpers.
     44 * (I.e. operations that tend to have compiler intrinsic implementations).
     45 */
     46#ifdef __GNUC__
     47/** memcmp */
     48# define kLdrMemComp(a,b,c) __builtin_memcmp(a,b,c)
     49/** memcpy */
     50# define kLdrMemCopy(a,b,c) __builtin_memcpy(a,b,c)
     51/** memset */
     52# define kLdrMemSet(a,b,c)  __builtin_memset(a,b,c)
     53/** strlen */
     54# define kLdrStrLen(a)      __builtin_strlen(a)
     55/** alloca */
     56# define kLdrAllocA(a)      __builtin_alloca(a)
     57/** int3 */
     58# define kldrHlpBreakpoint() do { __asm__ __volatile__ ("int3\n\tnop"); } while (0)
     59/** NULL */
     60# ifndef NULL
     61#  define NULL 0
     62# endif
     63#endif
     64
     65#ifdef _MSC_VER
     66# include <string.h>
     67# include <malloc.h>
     68# pragma intrinsic(memcmp, memcpy, memset, strlen, __debugbreak)
     69/** memcmp */
     70# define kLdrMemComp(a,b,c) memcmp(a,b,c)
     71/** memcpy */
     72# define kLdrMemCopy(a,b,c) memcpy(a,b,c)
     73/** memset */
     74# define kLdrMemSet(a,b,c)  memset(a,b,c)
     75/** strlen */
     76# define kLdrStrLen(a)      strlen(a)
     77/** alloca */
     78# define kLdrAllocA(a)      alloca(a)
     79/** int3 */
     80# define kldrHlpBreakpoint() __debugbreak()
     81/** NULL */
     82# ifndef NULL
     83#  define NULL 0
     84# endif
     85#endif
     86
     87#if !defined(kLdrMemComp) \
     88 || !defined(kLdrMemCopy) \
     89 || !defined(kLdrMemSet) \
     90 || !defined(kLdrStrLen) \
     91 || !defined(kLdrAllocA) \
     92 || !defined(kldrHlpBreakpoint)
     93# error "Needs porting to your compiler."
     94#endif
     95
    3596
    3697int kldrSemInit(void);
     
    41102int kldrSemGlobalRelease(void);
    42103
    43 /** Loader file handle. */
    44 typedef unsigned long KLDRFILE;
    45 /** Pointer to a loader file handle. */
    46 typedef KLDRFILE *PKLDRFILE;
    47 
    48 int kldrFileOpen(const char *pszFilename, PKLDRFILE pFile);
    49 int kldrFileClose(KLDRFILE File);
    50 int kldrFileRead(KLDRFILE File, off_t off, void *pv, size_t cb);
    51 
    52 int kldrGetEnv(const char *pszVar, char *pszVar, size_t *pcchVar)
    53 
    54 void *kldrAlloc(size_t cb);
    55 void kldrFree(void *pv);
    56 
    57104int kldrPrivateAlloc(void *pv, size_t cb, unsigned fFlags, void **ppv);
    58105int kldrPrivateFree(void *pv, size_t cb);
    59 int kldrSharedAlloc(void *pv, size_t cb, unsigned fFlags, const char *pszFilename, KLDRFILE File, void **ppv);
     106int kldrSharedAlloc(void *pv, size_t cb, unsigned fFlags, const char *pszFilename, void *File, void **ppv);
    60107int kldrSharedFree(void *pv, size_t cb);
    61108
    62 void kldrExit(int rc);
     109int     kldrHlpHeapInit(void);
     110void    kldrHlpHeapTerm(void);
     111void    kldrHlpHeapDonate(void *pv, size_t cb);
     112void *  kldrHlpAlloc(size_t cb);
     113void    kldrHlpFree(void *pv);
    63114
    64 /* #elif __WIN__ */
     115int     kldrHlpGetEnv(const char *pszVar, char *pszVal, size_t *pcchVal);
     116void    kldrHlpExit(int rc);
     117void    kldrHlpAssertMsg(const char *pszExpr, const char *pszFile, unsigned iLine, const char *pszFunction);
    65118
    66 #else
     119/** Assertion macro.
     120 * Users should wrap it since this is ALWAYS compiled in. */
     121#define kldrHlpAssert(expr) \
     122    do { \
     123        if (!(expr)) \
     124        { \
     125            kldrHlpAssertMsg(#expr, __FILE__, __LINE__, __FUNCTION__); \
     126            kldrHlpBreakpoint(); \
     127        } \
     128    } while (0)
    67129
    68130
     131/** @} */
    69132
    70 #endif
    71 
    72 /*
    73  * Compiler specific helpers.
    74  * (I.e. operations that tend to have compiler intrinsic implementations).
    75  */
    76 #ifdef __GNUC__
    77 /** memcpy */
    78 # define kLdrMemCopy(a,b,c) __builtin_memcpy(a,b,c)
    79 /** memset */
    80 # define kLdrMemSet(a,b,c) __builtin_memset(a,b,c)
    81 #endif
    82 
    83 #ifndef kLdrMemCopy
    84 # error "Needs porting to your compiler."
    85 #endif
    86133
    87134#endif /* __kLdrHlp_h__ */
     135
Note: See TracChangeset for help on using the changeset viewer.