Changeset 3525


Ignore:
Timestamp:
Aug 20, 2007, 12:14:55 AM (18 years ago)
Author:
bird
Message:

made the format headers usable externally.

Location:
trunk/kLdr
Files:
10 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/kLdr/kLdr.h

    r2974 r3525  
    2525 */
    2626
    27 #ifndef __kLdr_h__
    28 #define __kLdr_h__
     27#ifndef ___kLdr_h___
     28#define ___kLdr_h___
    2929
    3030#ifdef __cplusplus
     
    3333
    3434/*
    35  * kLdr depend on size_t, [u]intNN_t, [u]intptr_t and some related constants.
    36  * If KLDR_NO_KLDR_H_INCLUDES is defined, these has already been defined.
    37  */
    38 #ifndef KLDR_NO_KLDR_H_INCLUDES
    39 # include <sys/types.h>
    40 # include <stddef.h>
    41 # ifdef _MSC_VER
    42    typedef signed char          int8_t;
    43    typedef unsigned char        uint8_t;
    44    typedef signed short         int16_t;
    45    typedef unsigned short       uint16_t;
    46    typedef signed int           int32_t;
    47    typedef unsigned int         uint32_t;
    48    typedef signed __int64       int64_t;
    49    typedef unsigned __int64     uint64_t;
    50    typedef int64_t              intmax_t;
    51    typedef uint64_t             uintmax_t;
    52 #  define UINT8_C(c)            (c)
    53 #  define UINT16_C(c)           (c)
    54 #  define UINT32_C(c)           (c ## U)
    55 #  define UINT64_C(c)           (c ## ULL)
    56 #  define INT8_C(c)             (c)
    57 #  define INT16_C(c)            (c)
    58 #  define INT32_C(c)            (c)
    59 #  define INT64_C(c)            (c ## LL)
    60 #  define INT8_MIN              (INT8_C(-0x7f) - 1)
    61 #  define INT16_MIN             (INT16_C(-0x7fff) - 1)
    62 #  define INT32_MIN             (INT32_C(-0x7fffffff) - 1)
    63 #  define INT64_MIN             (INT64_C(-0x7fffffffffffffff) - 1)
    64 #  define INT8_MAX              INT8_C(0x7f)
    65 #  define INT16_MAX             INT16_C(0x7fff)
    66 #  define INT32_MAX             INT32_C(0x7fffffff)
    67 #  define INT64_MAX             INT64_C(0x7fffffffffffffff)
    68 #  define UINT8_MAX             UINT8_C(0xff)
    69 #  define UINT16_MAX            UINT16_C(0xffff)
    70 #  define UINT32_MAX            UINT32_C(0xffffffff)
    71 #  define UINT64_MAX            UINT64_C(0xffffffffffffffff)
    72 # else
    73 #  include <stdint.h>
    74 # endif
    75 #endif /* !KLDR_NO_KLDR_H_INCLUDES */
     35 * Include the base typedefs and macros.
     36 */
     37#include "kLdrBase.h"
    7638
    7739
     
    640602    KLDRENDIAN_32BIT_HACK = 0x7fffffff
    641603} KLDRENDIAN;
    642 
    643 
    644 /** @def KLDR_LITTLE_ENDIAN
    645  * The kLdr build is for a little endian target. */
    646 /** @def KLDR_BIG_ENDIAN
    647  * The kLdr build is for a big endian target. */
    648 #if !defined(KLDR_LITTLE_ENDIAN) && !defined(KLDR_BIG_ENDIAN)
    649 # define KLDR_LITTLE_ENDIAN
    650 #endif
    651 #ifdef __DOXYGEN__
    652 # define KLDR_BIG_ENDIAN
    653 #endif
    654604
    655605
  • trunk/kLdr/kLdrBase.h

    r3388 r3525  
    22/** @file
    33 *
    4  * kLdr - The Dynamic Loader, Helper Functions.
     4 * kLdr - The Dynamic Loader, Base Definitions and Typedefs.
    55 *
    6  * Copyright (c) 2006 knut st. osmundsen <bird@anduin.net>
     6 * Copyright (c) 2006-2007 knut st. osmundsen <bird@anduin.net>
    77 *
    88 *
     
    2525 */
    2626
     27#ifndef ___kLdrBase_h___
     28#define ___kLdrBase_h___
    2729
    28 #ifndef __kLdrHlp_h__
    29 #define __kLdrHlp_h__
    3030
    31 /** @defgroup grp_kLdrHlp  kLdrHlp - Helper Functions
    32  * @internal
     31/** @defgroup grp_kLdrBase  kLdrBase - Base Definitions And Typedefs
    3332 * @{ */
     33
     34/*
     35 * kLdr depend on size_t, [u]intNN_t, [u]intptr_t and some related constants.
     36 * If KLDR_ALREADY_INCLUDED_STD_TYPES is defined, these has already been defined.
     37 */
     38#ifndef KLDR_ALREADY_INCLUDED_STD_TYPES
     39# include <sys/types.h>
     40# include <stddef.h>
     41# ifdef _MSC_VER
     42   typedef signed char          int8_t;
     43   typedef unsigned char        uint8_t;
     44   typedef signed short         int16_t;
     45   typedef unsigned short       uint16_t;
     46   typedef signed int           int32_t;
     47   typedef unsigned int         uint32_t;
     48   typedef signed __int64       int64_t;
     49   typedef unsigned __int64     uint64_t;
     50   typedef int64_t              intmax_t;
     51   typedef uint64_t             uintmax_t;
     52#  define UINT8_C(c)            (c)
     53#  define UINT16_C(c)           (c)
     54#  define UINT32_C(c)           (c ## U)
     55#  define UINT64_C(c)           (c ## ULL)
     56#  define INT8_C(c)             (c)
     57#  define INT16_C(c)            (c)
     58#  define INT32_C(c)            (c)
     59#  define INT64_C(c)            (c ## LL)
     60#  define INT8_MIN              (INT8_C(-0x7f) - 1)
     61#  define INT16_MIN             (INT16_C(-0x7fff) - 1)
     62#  define INT32_MIN             (INT32_C(-0x7fffffff) - 1)
     63#  define INT64_MIN             (INT64_C(-0x7fffffffffffffff) - 1)
     64#  define INT8_MAX              INT8_C(0x7f)
     65#  define INT16_MAX             INT16_C(0x7fff)
     66#  define INT32_MAX             INT32_C(0x7fffffff)
     67#  define INT64_MAX             INT64_C(0x7fffffffffffffff)
     68#  define UINT8_MAX             UINT8_C(0xff)
     69#  define UINT16_MAX            UINT16_C(0xffff)
     70#  define UINT32_MAX            UINT32_C(0xffffffff)
     71#  define UINT64_MAX            UINT64_C(0xffffffffffffffff)
     72# else
     73#  include <stdint.h>
     74# endif
     75#endif /* !KLDR_ALREADY_INCLUDED_STD_TYPES */
     76
    3477
    3578/** Get the minimum of two values. */
     
    4992
    5093
     94/** @def KLDR_LITTLE_ENDIAN
     95 * The kLdr build is for a little endian target. */
     96/** @def KLDR_BIG_ENDIAN
     97 * The kLdr build is for a big endian target. */
     98#if !defined(KLDR_LITTLE_ENDIAN) && !defined(KLDR_BIG_ENDIAN)
     99# define KLDR_LITTLE_ENDIAN
     100#endif
     101#ifdef __DOXYGEN__
     102# define KLDR_BIG_ENDIAN
     103#endif
     104
     105
    51106/** @name Endian Conversion
    52107 * @{ */
    53108
    54 /** @def KLDRHLP_E2E_U16
     109/** @def KLDR_E2E_U16
    55110 * Convert the endian of an unsigned 16-bit value. */
    56 # define KLDRHLP_E2E_U16(u16)   ( (uint16_t) (((u16) >> 8) | ((u16) << 8)) )
    57 /** @def KLDRHLP_E2E_U32
     111# define KLDR_E2E_U16(u16)      ( (uint16_t) (((u16) >> 8) | ((u16) << 8)) )
     112/** @def KLDR_E2E_U32
    58113 * Convert the endian of an unsigned 32-bit value. */
    59 # define KLDRHLP_E2E_U32(u32)   (   ( ((u32) & UINT32_C(0xff000000)) >> 24 ) \
     114# define KLDR_E2E_U32(u32)      (   ( ((u32) & UINT32_C(0xff000000)) >> 24 ) \
    60115                                  | ( ((u32) & UINT32_C(0x00ff0000)) >>  8 ) \
    61116                                  | ( ((u32) & UINT32_C(0x0000ff00)) <<  8 ) \
    62117                                  | ( ((u32) & UINT32_C(0x000000ff)) << 24 ) \
    63118                                )
    64 /** @def KLDRHLP_E2E_U64
     119/** @def KLDR_E2E_U64
    65120 * Convert the endian of an unsigned 64-bit value. */
    66 # define KLDRHLP_E2E_U64(u64)   (   ( ((u64) & UINT64_C(0xff00000000000000)) >> 56 ) \
     121# define KLDR_E2E_U64(u64)      (   ( ((u64) & UINT64_C(0xff00000000000000)) >> 56 ) \
    67122                                  | ( ((u64) & UINT64_C(0x00ff000000000000)) >> 40 ) \
    68123                                  | ( ((u64) & UINT64_C(0x0000ff0000000000)) >> 24 ) \
     
    74129                                )
    75130
    76 /** @def KLDRHLP_LE2H_U16
     131/** @def KLDR_LE2H_U16
    77132 * Unsigned 16-bit little-endian to host endian. */
    78 /** @def KLDRHLP_LE2H_U32
     133/** @def KLDR_LE2H_U32
    79134 * Unsigned 32-bit little-endian to host endian. */
    80 /** @def KLDRHLP_LE2H_U64
     135/** @def KLDR_LE2H_U64
    81136 * Unsigned 64-bit little-endian to host endian. */
    82 /** @def KLDRHLP_BE2H_U16
     137/** @def KLDR_BE2H_U16
    83138 * Unsigned 16-bit big-endian to host endian. */
    84 /** @def KLDRHLP_BE2H_U32
     139/** @def KLDR_BE2H_U32
    85140 * Unsigned 32-bit big-endian to host endian. */
    86 /** @def KLDRHLP_BE2H_U64
     141/** @def KLDR_BE2H_U64
    87142 * Unsigned 64-bit big-endian to host endian. */
    88143#ifdef KLDR_LITTLE_ENDIAN
    89 # define KLDRHLP_LE2H_U16(u16)  ((uint16_t)(u16))
    90 # define KLDRHLP_LE2H_U32(u32)  ((uint32_t)(u32))
    91 # define KLDRHLP_LE2H_U64(u64)  ((uint32_t)(u32))
    92 # define KLDRHLP_BE2H_U16(u16)  KLDRHLP_E2E_U16(u16)
    93 # define KLDRHLP_BE2H_U32(u32)  KLDRHLP_E2E_U32(u32)
    94 # define KLDRHLP_BE2H_U64(u64)  KLDRHLP_E2E_U64(u64)
     144# define KLDR_LE2H_U16(u16)  ((uint16_t)(u16))
     145# define KLDR_LE2H_U32(u32)  ((uint32_t)(u32))
     146# define KLDR_LE2H_U64(u64)  ((uint32_t)(u32))
     147# define KLDR_BE2H_U16(u16)  KLDR_E2E_U16(u16)
     148# define KLDR_BE2H_U32(u32)  KLDR_E2E_U32(u32)
     149# define KLDR_BE2H_U64(u64)  KLDR_E2E_U64(u64)
    95150#elif defined(KLDR_BIG_ENDIAN)
    96 # define KLDRHLP_LE2H_U16(u16)  KLDRHLP_E2E_U16(u16)
    97 # define KLDRHLP_LE2H_U32(u32)  KLDRHLP_E2E_U32(u32)
    98 # define KLDRHLP_LE2H_U32(u64)  KLDRHLP_E2E_U64(u64)
    99 # define KLDRHLP_BE2H_U16(u16)  ((uint16_t)(u16))
    100 # define KLDRHLP_BE2H_U32(u32)  ((uint32_t)(u32))
    101 # define KLDRHLP_BE2H_U64(u64)  ((uint32_t)(u32))
     151# define KLDR_LE2H_U16(u16)  KLDR_E2E_U16(u16)
     152# define KLDR_LE2H_U32(u32)  KLDR_E2E_U32(u32)
     153# define KLDR_LE2H_U32(u64)  KLDR_E2E_U64(u64)
     154# define KLDR_BE2H_U16(u16)  ((uint16_t)(u16))
     155# define KLDR_BE2H_U32(u32)  ((uint32_t)(u32))
     156# define KLDR_BE2H_U64(u64)  ((uint32_t)(u32))
    102157#else
    103158# error "KLDR_BIG_ENDIAN or KLDR_LITTLE_ENDIAN is supposed to be defined."
     
    106161/** @} */
    107162
    108 
    109 /*
    110  * Compiler specific helpers / CRT.
    111  * (I.e. operations that tend to have compiler intrinsic implementations).
    112  */
    113 #ifndef KLDR_USE_CRT
    114 
    115 # ifdef __GNUC__
    116 /** memchr */
    117 #  define kLdrHlpMemChr(a,b,c)  __builtin_memchr(a,b,c)
    118 /** memcmp */
    119 #  define kLdrHlpMemComp(a,b,c) __builtin_memcmp(a,b,c)
    120 /** memcpy */
    121 #  define kLdrHlpMemCopy(a,b,c) __builtin_memcpy(a,b,c)
    122 /** memmove */
    123 /*# define kLdrHlpMemMove(a,b,c) __builtin_memmove(a,b,c)*/
    124 #  define kLdrHlpMemMove_needed
    125 /** memset */
    126 #  define kLdrHlpMemSet(a,b,c)  __builtin_memset(a,b,c)
    127 /** strchr */
    128 #  define kLdrHlpStrChr(a, b)   __builtin_strchr(a, b)
    129 /** strcmp */
    130 #  define kLdrHlpStrComp(a, b)  __builtin_strcmp(a, b)
    131 /** strncmp */
    132 #  define kLdrHlpStrNComp(a,b,c) __builtin_strncmp(a, b, c)
    133 /** strlen */
    134 #  define kLdrHlpStrLen(a)      __builtin_strlen(a)
    135 /** alloca */
    136 #  define kLdrHlpAllocA(a)      __builtin_alloca(a)
    137 /** int3 */
    138 #  define kldrHlpBreakpoint() do { __asm__ __volatile__ ("int3\n\tnop"); } while (0)
    139 /** NULL */
    140 #  ifndef NULL
    141 #   define NULL 0
    142 #  endif
    143 # endif
    144 
    145 # ifdef _MSC_VER
    146 #  include <string.h>
    147 #  include <malloc.h>
    148 #  pragma intrinsic(memcmp, memcpy, memset, strcmp, strlen, __debugbreak)
    149 /** memchr */
    150 #  define kLdrHlpMemChr_needed
    151 /** memcmp */
    152 #  define kLdrHlpMemComp(a,b,c) memcmp(a,b,c)
    153 /** memcpy */
    154 #  define kLdrHlpMemCopy(a,b,c) memcpy(a,b,c)
    155 /** memmove */
    156 #  define kLdrHlpMemMove_needed
    157 /** memset */
    158 #  define kLdrHlpMemSet(a,b,c)  memset(a,b,c)
    159 /** strcmp */
    160 #  define kLdrHlpStrComp(a, b)  strcmp(a, b)
    161 /** strncmp */
    162 #  define kLdrHlpStrNComp_needed
    163 /** strlen */
    164 #  define kLdrHlpStrLen(a)      strlen(a)
    165 /** strchr */
    166 #  define kLdrHlpStrChr_needed
    167 /** alloca */
    168 #  define kLdrHlpAllocA(a)      alloca(a)
    169 /** int3 */
    170 #  define kldrHlpBreakpoint() __debugbreak()
    171 /** NULL */
    172 #  ifndef NULL
    173 #   define NULL 0
    174 #  endif
    175 # endif
    176 
    177 # ifdef kLdrHlpStrChr_needed
    178 char   *kLdrHlpStrChr(const char *psz, int ch);
    179 # endif
    180 # ifdef kLdrHlpStrChr_needed
    181 int     kLdrHlpStrNComp(const char *psz1, const char *psz2, size_t cch);
    182 # endif
    183 # ifdef kLdrHlpMemChr_needed
    184 void   *kLdrHlpMemChr(const void *pv, int ch, size_t cb);
    185 # endif
    186 # ifdef kLdrHlpMemMove_needed
    187 void   *kLdrHlpMemMove(void *pv1, const void *pv2, size_t cb);
    188 # endif
    189 
    190 
    191 #else /* KLDR_USE_CRT */
    192 
    193 #  include <string.h>
    194 #  include <stdlib.h>
    195 #  ifdef _MSC_VER
    196 #   include <malloc.h>
    197 #  endif
    198 
    199 #  define kLdrHlpMemChr(a,b,c)  memchr(a,b,c)
    200 /** memcmp */
    201 #  define kLdrHlpMemComp(a,b,c) memcmp(a,b,c)
    202 /** memcpy */
    203 #  define kLdrHlpMemCopy(a,b,c) memcpy(a,b,c)
    204 /** memmove */
    205 #  define kLdrHlpMemMove(a,b,c) memmove(a,b,c)
    206 /** memset */
    207 #  define kLdrHlpMemSet(a,b,c)  memset(a,b,c)
    208 /** strchr */
    209 #  define kLdrHlpStrChr(a, b)   strchr(a, b)
    210 /** strcmp */
    211 #  define kLdrHlpStrComp(a, b)  strcmp(a, b)
    212 /** strncmp */
    213 #  define kLdrHlpStrNComp(a,b,c) strncmp(a, b, c)
    214 /** strlen */
    215 #  define kLdrHlpStrLen(a)      strlen(a)
    216 /** alloca */
    217 #  define kLdrHlpAllocA(a)      alloca(a)
    218 /** int3 */
    219 #  ifdef __GNUC__
    220 #   define kldrHlpBreakpoint() do { __asm__ __volatile__ ("int3\n\tnop"); } while (0)
    221 #  endif
    222 #  ifdef _MSC_VER
    223 #   define kldrHlpBreakpoint() __debugbreak()
    224 #  endif
     163/** @} */
    225164
    226165#endif
    227166
    228 #if (!defined(kLdrHlpMemChr) && !defined(kLdrHlpStrChr_needed))\
    229  || !defined(kLdrHlpMemComp) \
    230  || !defined(kLdrHlpMemCopy) \
    231  || !defined(kLdrHlpMemSet) \
    232  || (!defined(kLdrHlpStrChr) && !defined(kLdrHlpStrChr_needed)) \
    233  || !defined(kLdrHlpStrComp) \
    234  || (!defined(kLdrHlpStrNComp) && !defined(kLdrHlpStrNComp_needed)) \
    235  || !defined(kLdrHlpStrLen) \
    236  || !defined(kLdrHlpAllocA) \
    237  || !defined(kldrHlpBreakpoint)
    238 # error "Needs porting to your compiler."
    239 #endif
    240 
    241 #ifdef __cplusplus
    242 extern "C" {
    243 #endif
    244 
    245 size_t  kLdrHlpStrNLen(const char *psz, size_t cchMax);
    246 int     kLdrHlpMemIComp(const void *pv1, const void *pv2, size_t cb);
    247 int     kLdrHlpStrIComp(const char *pv1, const char *pv2);
    248 
    249 int     kldrHlpSemInit(void);
    250 void    kldrHlpSemTerm(void);
    251 int     kldrHlpSemRequest(void);
    252 void    kldrHlpSemRelease(void);
    253 
    254 int     kldrHlpPageAlloc(void **ppv, size_t cb, KLDRPROT enmProt, unsigned fFixed);
    255 int     kldrHlpPageProtect(void *pv, size_t cb, KLDRPROT enmProt);
    256 int     kldrHlpPageFree(void *pv, size_t cb);
    257 
    258 int     kldrHlpHeapInit(void);
    259 void    kldrHlpHeapTerm(void);
    260 void    kldrHlpHeapDonate(void *pv, size_t cb);
    261 void *  kldrHlpAlloc(size_t cb);
    262 void *  kldrHlpAllocZ(size_t cb);
    263 void    kldrHlpFree(void *pv);
    264 
    265 int     kldrHlpGetEnv(const char *pszVar, char *pszVal, size_t cchVal);
    266 int     kldrHlpGetEnvUZ(const char *pszVar, size_t *pcb);
    267 char   *kldrHlpGetFilename(const char *pszFilename);
    268 char   *kldrHlpGetSuff(const char *pszFilename);
    269 char   *kldrHlpGetExt(const char *pszFilename);
    270 int     kldrHlpIsFilenameOnly(const char *pszFilename);
    271 void    kldrHlpExit(int rc);
    272 void    kldrHlpSleep(unsigned cMillies);
    273 char   *kldrHlpInt2Ascii(char *psz, size_t cch, long lVal, unsigned iBase);
    274 void    kldrHlpAssertMsg(const char *pszExpr, const char *pszFile, unsigned iLine, const char *pszFunction);
    275 
    276 #ifdef __cplusplus
    277 }
    278 #endif
    279 
    280 
    281 /** Assertion macro.
    282  * Users should wrap it since this is ALWAYS compiled in. */
    283 #define kldrHlpAssert(expr) \
    284     do { \
    285         if (!(expr)) \
    286         { \
    287             kldrHlpAssertMsg(#expr, __FILE__, __LINE__, __FUNCTION__); \
    288             kldrHlpBreakpoint(); \
    289         } \
    290     } while (0)
    291 
    292 
    293 /** @name Parameter validation macros
    294  * @{ */
    295 
    296 /** Crash validation of a string argument. */
    297 #define KLDRHLP_VALIDATE_STRING(str) \
    298     do { kLdrHlpStrLen(str); } while (0)
    299 
    300 /** Crash validation of an optional string argument. */
    301 #define KLDRHLP_VALIDATE_OPTIONAL_STRING(str) \
    302     do { if (str) { KLDRHLP_VALIDATE_STRING(str); } } while (0)
    303 
    304 /** Return/Crash validation of an output buffer. */
    305 #define KLDRHLP_VALIDATE_BUFFER(buf, cb) \
    306     do { \
    307         if ((cb)) \
    308         { \
    309             uint8_t             __b; \
    310             uint8_t volatile *  __pb = (uint8_t volatile *)(buf); \
    311             size_t              __cbPage1 = 0x1000 - ((uintptr_t)(__pb) & 0xfff); /* ASSUMES page size! */ \
    312             __b = *__pb; *__pb = 0xff; *__pb = __b; \
    313             if ((cb) > __cbPage1) \
    314             { \
    315                 size_t  __cb = (cb) - __cbPage1; \
    316                 __pb -= __cbPage1; \
    317                 for (;;) \
    318                 { \
    319                     __b = *__pb; *__pb = 0xff; *__pb = __b; \
    320                     if (__cb < 0x1000) \
    321                         break; \
    322                     __pb += 0x1000; \
    323                     __cb -= 0x1000; \
    324                 } \
    325             } \
    326         } \
    327         else \
    328             return KLDR_ERR_INVALID_PARAMETER; \
    329     } while (0)
    330 
    331 /** Crash validation of an optional output buffer. */
    332 #define KLDRHLP_VALIDATE_OPTIONAL_BUFFER(buf, cb) \
    333     do { \
    334         if ((buf) != NULL && (cb) != 0) \
    335         { \
    336             KLDRHLP_VALIDATE_BUFFER(buf, cb); \
    337         } \
    338     } while (0)
    339 
    340 /** Return validation of an enum argument. */
    341 #define KLDRHLP_VALIDATE_ENUM(arg, enumname) \
    342     do { \
    343         if ((arg) <= enumname##_INVALID || (arg) >= enumname##_END) \
    344         {  \
    345             return KLDR_ERR_INVALID_PARAMETER; \
    346         } \
    347     } while (0)
    348 
    349 /** Return validation of a flags argument. */
    350 #define KLDRHLP_VALIDATE_FLAGS(arg, AllowedMask) \
    351     do { \
    352         if ((arg) & ~(AllowedMask)) \
    353         {  \
    354             return KLDR_ERR_INVALID_PARAMETER; \
    355         } \
    356     } while (0)
    357 
    358 /** @} */
    359 
    360 
    361 /** @} */
    362 
    363 #endif /* __kLdrHlp_h__ */
    364 
  • trunk/kLdr/kLdrHlp.h

    r2958 r3525  
    3232 * @internal
    3333 * @{ */
    34 
    35 /** Get the minimum of two values. */
    36 #define KLDR_MIN(a, b)              ((a) <= (b) ? (a) : (b))
    37 /** Get the maximum of two values. */
    38 #define KLDR_MAX(a, b)              ((a) >= (b) ? (a) : (b))
    39 /** Calculate the offset of a structure member. */
    40 #define KLDR_OFFSETOF(strct, memb)  ( (size_t)( &((strct *)0)->memb ) )
    41 /** Align a size_t value. */
    42 #define KLDR_ALIGN_Z(val, align)    ( ((val) + ((align) - 1)) & ~(size_t)((align) - 1) )
    43 /** Align a void * value. */
    44 #define KLDR_ALIGN_P(pv, align)     ( (void *)( ((uintptr_t)(pv) + ((align) - 1)) & ~(uintptr_t)((align) - 1) ) )
    45 /** Align a size_t value. */
    46 #define KLDR_ALIGN_ADDR(val, align) ( ((val) + ((align) - 1)) & ~(KLDRADDR)((align) - 1) )
    47 /** Number of elements in an array. */
    48 #define KLDR_ELEMENTS(a)            ( sizeof(a) / sizeof((a)[0]) )
    49 
    50 
    51 /** @name Endian Conversion
    52  * @{ */
    53 
    54 /** @def KLDRHLP_E2E_U16
    55  * Convert the endian of an unsigned 16-bit value. */
    56 # define KLDRHLP_E2E_U16(u16)   ( (uint16_t) (((u16) >> 8) | ((u16) << 8)) )
    57 /** @def KLDRHLP_E2E_U32
    58  * Convert the endian of an unsigned 32-bit value. */
    59 # define KLDRHLP_E2E_U32(u32)   (   ( ((u32) & UINT32_C(0xff000000)) >> 24 ) \
    60                                   | ( ((u32) & UINT32_C(0x00ff0000)) >>  8 ) \
    61                                   | ( ((u32) & UINT32_C(0x0000ff00)) <<  8 ) \
    62                                   | ( ((u32) & UINT32_C(0x000000ff)) << 24 ) \
    63                                 )
    64 /** @def KLDRHLP_E2E_U64
    65  * Convert the endian of an unsigned 64-bit value. */
    66 # define KLDRHLP_E2E_U64(u64)   (   ( ((u64) & UINT64_C(0xff00000000000000)) >> 56 ) \
    67                                   | ( ((u64) & UINT64_C(0x00ff000000000000)) >> 40 ) \
    68                                   | ( ((u64) & UINT64_C(0x0000ff0000000000)) >> 24 ) \
    69                                   | ( ((u64) & UINT64_C(0x000000ff00000000)) >>  8 ) \
    70                                   | ( ((u64) & UINT64_C(0x00000000ff000000)) <<  8 ) \
    71                                   | ( ((u64) & UINT64_C(0x0000000000ff0000)) << 24 ) \
    72                                   | ( ((u64) & UINT64_C(0x000000000000ff00)) << 40 ) \
    73                                   | ( ((u64) & UINT64_C(0x00000000000000ff)) << 56 ) \
    74                                 )
    75 
    76 /** @def KLDRHLP_LE2H_U16
    77  * Unsigned 16-bit little-endian to host endian. */
    78 /** @def KLDRHLP_LE2H_U32
    79  * Unsigned 32-bit little-endian to host endian. */
    80 /** @def KLDRHLP_LE2H_U64
    81  * Unsigned 64-bit little-endian to host endian. */
    82 /** @def KLDRHLP_BE2H_U16
    83  * Unsigned 16-bit big-endian to host endian. */
    84 /** @def KLDRHLP_BE2H_U32
    85  * Unsigned 32-bit big-endian to host endian. */
    86 /** @def KLDRHLP_BE2H_U64
    87  * Unsigned 64-bit big-endian to host endian. */
    88 #ifdef KLDR_LITTLE_ENDIAN
    89 # define KLDRHLP_LE2H_U16(u16)  ((uint16_t)(u16))
    90 # define KLDRHLP_LE2H_U32(u32)  ((uint32_t)(u32))
    91 # define KLDRHLP_LE2H_U64(u64)  ((uint32_t)(u32))
    92 # define KLDRHLP_BE2H_U16(u16)  KLDRHLP_E2E_U16(u16)
    93 # define KLDRHLP_BE2H_U32(u32)  KLDRHLP_E2E_U32(u32)
    94 # define KLDRHLP_BE2H_U64(u64)  KLDRHLP_E2E_U64(u64)
    95 #elif defined(KLDR_BIG_ENDIAN)
    96 # define KLDRHLP_LE2H_U16(u16)  KLDRHLP_E2E_U16(u16)
    97 # define KLDRHLP_LE2H_U32(u32)  KLDRHLP_E2E_U32(u32)
    98 # define KLDRHLP_LE2H_U32(u64)  KLDRHLP_E2E_U64(u64)
    99 # define KLDRHLP_BE2H_U16(u16)  ((uint16_t)(u16))
    100 # define KLDRHLP_BE2H_U32(u32)  ((uint32_t)(u32))
    101 # define KLDRHLP_BE2H_U64(u64)  ((uint32_t)(u32))
    102 #else
    103 # error "KLDR_BIG_ENDIAN or KLDR_LITTLE_ENDIAN is supposed to be defined."
    104 #endif
    105 
    106 /** @} */
    107 
    10834
    10935/*
  • trunk/kLdr/kLdrInternal.h

    r2954 r3525  
    5050 * @{ */
    5151/** ELF signature ("\x7fELF"). */
    52 #define IMAGE_ELF_SIGNATURE         KLDRHLP_LE2H_U32(0x7f | ('E' << 8) | ((uint32_t)'L' << 16) | ((uint32_t)'F' << 24))
     52#define IMAGE_ELF_SIGNATURE         KLDR_LE2H_U32(0x7f | ('E' << 8) | ((uint32_t)'L' << 16) | ((uint32_t)'F' << 24))
    5353/** PE signature ("PE\0\0"). */
    54 #define IMAGE_NT_SIGNATURE          KLDRHLP_LE2H_U32('P' | ('E' << 8))
     54#define IMAGE_NT_SIGNATURE          KLDR_LE2H_U32('P' | ('E' << 8))
    5555/** LX signature ("LX") */
    56 #define IMAGE_LX_SIGNATURE          KLDRHLP_LE2H_U16('L' | ('X' << 8))
     56#define IMAGE_LX_SIGNATURE          KLDR_LE2H_U16('L' | ('X' << 8))
    5757/** LE signature ("LE") */
    58 #define IMAGE_LE_SIGNATURE          KLDRHLP_LE2H_U16('L' | ('E' << 8))
     58#define IMAGE_LE_SIGNATURE          KLDR_LE2H_U16('L' | ('E' << 8))
    5959/** NE signature ("NE") */
    60 #define IMAGE_NE_SIGNATURE          KLDRHLP_LE2H_U16('N' | ('E' << 8))
     60#define IMAGE_NE_SIGNATURE          KLDR_LE2H_U16('N' | ('E' << 8))
    6161/** MZ signature ("MZ"). */
    62 #define IMAGE_DOS_SIGNATURE         KLDRHLP_LE2H_U16('M' | ('Z' << 8))
     62#define IMAGE_DOS_SIGNATURE         KLDR_LE2H_U16('M' | ('Z' << 8))
    6363/** The FAT signature (universal binaries). */
    6464#define IMAGE_FAT_SIGNATURE         UINT32_C(0xcafebabe)
  • trunk/kLdr/kLdrModELF32.h

    r2834 r3525  
    3030#define __kLdrModELF32_h__
    3131
     32#include "kLdrBase.h"
    3233#include "kLdrModELFCommon.h"
    3334
  • trunk/kLdr/kLdrModELF64.h

    r2834 r3525  
    3030#define __kLdrModELF64_h__
    3131
     32#include "kLdrBase.h"
    3233#include "kLdrModELFCommon.h"
    3334
  • trunk/kLdr/kLdrModLX.h

    r2889 r3525  
    44#define __kLdrModLX_h__
    55
     6#include "kLdrBase.h"
     7
    68
    79#ifndef IMAGE_OS2_SIGNATURE_LX
    810/** LX signature ("LX") */
    9 # define IMAGE_LX_SIGNATURE  KLDRHLP_LE2H_U16('L' | ('X' << 8))
     11# define IMAGE_LX_SIGNATURE  KLDR_LE2H_U16('L' | ('X' << 8))
    1012#endif
    1113
  • trunk/kLdr/kLdrModMZ.h

    r2834 r3525  
    33#ifndef __kLdrModMZ_h__
    44#define __kLdrModMZ_h__
     5
     6#include "kLdrBase.h"
    57
    68#pragma pack(1) /* not required */
     
    3133
    3234#ifndef IMAGE_DOS_SIGNATURE
    33 # define IMAGE_DOS_SIGNATURE KLDRHLP_LE2H_U16('M' | ('Z' << 8))
     35# define IMAGE_DOS_SIGNATURE KLDR_LE2H_U16('M' | ('Z' << 8))
    3436#endif
    3537
  • trunk/kLdr/kLdrModMachO.c

    r2977 r3525  
    470470        if (fConvertEndian)
    471471        {
    472             u.pLoadCmd->cmd = KLDRHLP_E2E_U32(u.pLoadCmd->cmd);
    473             u.pLoadCmd->cmdsize = KLDRHLP_E2E_U32(u.pLoadCmd->cmdsize);
     472            u.pLoadCmd->cmd = KLDR_E2E_U32(u.pLoadCmd->cmd);
     473            u.pLoadCmd->cmdsize = KLDR_E2E_U32(u.pLoadCmd->cmdsize);
    474474        }
    475475        if (u.pLoadCmd->cmdsize > cbLeft)
     
    497497                if (fConvertEndian)
    498498                {
    499                     u.pSeg32->vmaddr   = KLDRHLP_E2E_U32(u.pSeg32->vmaddr);
    500                     u.pSeg32->vmsize   = KLDRHLP_E2E_U32(u.pSeg32->vmsize);
    501                     u.pSeg32->fileoff  = KLDRHLP_E2E_U32(u.pSeg32->fileoff);
    502                     u.pSeg32->filesize = KLDRHLP_E2E_U32(u.pSeg32->filesize);
    503                     u.pSeg32->maxprot  = KLDRHLP_E2E_U32(u.pSeg32->maxprot);
    504                     u.pSeg32->initprot = KLDRHLP_E2E_U32(u.pSeg32->initprot);
    505                     u.pSeg32->nsects   = KLDRHLP_E2E_U32(u.pSeg32->nsects);
    506                     u.pSeg32->flags    = KLDRHLP_E2E_U32(u.pSeg32->flags);
     499                    u.pSeg32->vmaddr   = KLDR_E2E_U32(u.pSeg32->vmaddr);
     500                    u.pSeg32->vmsize   = KLDR_E2E_U32(u.pSeg32->vmsize);
     501                    u.pSeg32->fileoff  = KLDR_E2E_U32(u.pSeg32->fileoff);
     502                    u.pSeg32->filesize = KLDR_E2E_U32(u.pSeg32->filesize);
     503                    u.pSeg32->maxprot  = KLDR_E2E_U32(u.pSeg32->maxprot);
     504                    u.pSeg32->initprot = KLDR_E2E_U32(u.pSeg32->initprot);
     505                    u.pSeg32->nsects   = KLDR_E2E_U32(u.pSeg32->nsects);
     506                    u.pSeg32->flags    = KLDR_E2E_U32(u.pSeg32->flags);
    507507                }
    508508
     
    537537                    if (fConvertEndian)
    538538                    {
    539                         pSect->addr      = KLDRHLP_E2E_U32(pSect->addr);
    540                         pSect->size      = KLDRHLP_E2E_U32(pSect->size);
    541                         pSect->offset    = KLDRHLP_E2E_U32(pSect->offset);
    542                         pSect->align     = KLDRHLP_E2E_U32(pSect->align);
    543                         pSect->reloff    = KLDRHLP_E2E_U32(pSect->reloff);
    544                         pSect->nreloc    = KLDRHLP_E2E_U32(pSect->nreloc);
    545                         pSect->flags     = KLDRHLP_E2E_U32(pSect->flags);
    546                         pSect->reserved1 = KLDRHLP_E2E_U32(pSect->reserved1);
    547                         pSect->reserved2 = KLDRHLP_E2E_U32(pSect->reserved2);
     539                        pSect->addr      = KLDR_E2E_U32(pSect->addr);
     540                        pSect->size      = KLDR_E2E_U32(pSect->size);
     541                        pSect->offset    = KLDR_E2E_U32(pSect->offset);
     542                        pSect->align     = KLDR_E2E_U32(pSect->align);
     543                        pSect->reloff    = KLDR_E2E_U32(pSect->reloff);
     544                        pSect->nreloc    = KLDR_E2E_U32(pSect->nreloc);
     545                        pSect->flags     = KLDR_E2E_U32(pSect->flags);
     546                        pSect->reserved1 = KLDR_E2E_U32(pSect->reserved1);
     547                        pSect->reserved2 = KLDR_E2E_U32(pSect->reserved2);
    548548                    }
    549549
     
    659659                if (fConvertEndian)
    660660                {
    661                     u.pSymTab->symoff  = KLDRHLP_E2E_U32(u.pSymTab->symoff);
    662                     u.pSymTab->nsyms   = KLDRHLP_E2E_U32(u.pSymTab->nsyms);
    663                     u.pSymTab->stroff  = KLDRHLP_E2E_U32(u.pSymTab->stroff);
    664                     u.pSymTab->strsize = KLDRHLP_E2E_U32(u.pSymTab->strsize);
     661                    u.pSymTab->symoff  = KLDR_E2E_U32(u.pSymTab->symoff);
     662                    u.pSymTab->nsyms   = KLDR_E2E_U32(u.pSymTab->nsyms);
     663                    u.pSymTab->stroff  = KLDR_E2E_U32(u.pSymTab->stroff);
     664                    u.pSymTab->strsize = KLDR_E2E_U32(u.pSymTab->strsize);
    665665                }
    666666
     
    701701                    if (fConvertEndian)
    702702                    {
    703                         pu32[0] = KLDRHLP_E2E_U32(pu32[0]);
    704                         pu32[1] = KLDRHLP_E2E_U32(pu32[1]);
     703                        pu32[0] = KLDR_E2E_U32(pu32[0]);
     704                        pu32[1] = KLDR_E2E_U32(pu32[1]);
    705705                    }
    706706                    if (pu32[1] + 2 > cItemsLeft)
     
    21672167                        while (cLeft-- > 0)
    21682168                        {
    2169                             pSym->n_un.n_strx = KLDRHLP_E2E_U32(pSym->n_un.n_strx);
    2170                             pSym->n_desc = (int16_t)KLDRHLP_E2E_U16(pSym->n_desc);
    2171                             pSym->n_value = KLDRHLP_E2E_U32(pSym->n_value);
     2169                            pSym->n_un.n_strx = KLDR_E2E_U32(pSym->n_un.n_strx);
     2170                            pSym->n_desc = (int16_t)KLDR_E2E_U16(pSym->n_desc);
     2171                            pSym->n_value = KLDR_E2E_U32(pSym->n_value);
    21722172                            pSym++;
    21732173                        }
     
    21792179                        while (cLeft-- > 0)
    21802180                        {
    2181                             pSym->n_un.n_strx = KLDRHLP_E2E_U32(pSym->n_un.n_strx);
    2182                             pSym->n_desc = (int16_t)KLDRHLP_E2E_U16(pSym->n_desc);
    2183                             pSym->n_value = KLDRHLP_E2E_U64(pSym->n_value);
     2181                            pSym->n_un.n_strx = KLDR_E2E_U32(pSym->n_un.n_strx);
     2182                            pSym->n_desc = (int16_t)KLDR_E2E_U16(pSym->n_desc);
     2183                            pSym->n_value = KLDR_E2E_U64(pSym->n_value);
    21842184                            pSym++;
    21852185                        }
     
    22382238            {
    22392239                uint32_t *pu32 = (uint32_t *)&paFixups[iFixup];
    2240                 pu32[0] = KLDRHLP_E2E_U32(pu32[0]);
    2241                 pu32[1] = KLDRHLP_E2E_U32(pu32[1]);
     2240                pu32[0] = KLDR_E2E_U32(pu32[0]);
     2241                pu32[1] = KLDR_E2E_U32(pu32[1]);
    22422242            }
    22432243        }
  • trunk/kLdr/kLdrModMachO.h

    r2971 r3525  
    66#ifndef __kLdrModMachO_h__
    77#define __kLdrModMachO_h__
     8
     9#include "kLdrBase.h"
    810
    911/** @defgroup grp_mach_o    The Mach-O Structures, Types, and Defines.
  • trunk/kLdr/kLdrModPE.h

    r2857 r3525  
    33#ifndef __kLdrModPE_h__
    44#define __kLdrModPE_h__
     5
     6
     7/*******************************************************************************
     8*   Header Files                                                               *
     9*******************************************************************************/
     10#include "kLdrBase.h"
    511
    612
     
    915*******************************************************************************/
    1016#ifndef IMAGE_NT_SIGNATURE
    11 # define  IMAGE_NT_SIGNATURE KLDRHLP_LE2H_U32('P' | ('E' << 8))
     17# define  IMAGE_NT_SIGNATURE KLDR_LE2H_U32('P' | ('E' << 8))
    1218#endif
    1319
Note: See TracChangeset for help on using the changeset viewer.