Changeset 3525
- Timestamp:
- Aug 20, 2007, 12:14:55 AM (18 years ago)
- Location:
- trunk/kLdr
- Files:
-
- 10 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/kLdr/kLdr.h
r2974 r3525 25 25 */ 26 26 27 #ifndef __ kLdr_h__28 #define __ kLdr_h__27 #ifndef ___kLdr_h___ 28 #define ___kLdr_h___ 29 29 30 30 #ifdef __cplusplus … … 33 33 34 34 /* 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" 76 38 77 39 … … 640 602 KLDRENDIAN_32BIT_HACK = 0x7fffffff 641 603 } KLDRENDIAN; 642 643 644 /** @def KLDR_LITTLE_ENDIAN645 * The kLdr build is for a little endian target. */646 /** @def KLDR_BIG_ENDIAN647 * The kLdr build is for a big endian target. */648 #if !defined(KLDR_LITTLE_ENDIAN) && !defined(KLDR_BIG_ENDIAN)649 # define KLDR_LITTLE_ENDIAN650 #endif651 #ifdef __DOXYGEN__652 # define KLDR_BIG_ENDIAN653 #endif654 604 655 605 -
trunk/kLdr/kLdrBase.h
r3388 r3525 2 2 /** @file 3 3 * 4 * kLdr - The Dynamic Loader, Helper Functions.4 * kLdr - The Dynamic Loader, Base Definitions and Typedefs. 5 5 * 6 * Copyright (c) 2006 knut st. osmundsen <bird@anduin.net>6 * Copyright (c) 2006-2007 knut st. osmundsen <bird@anduin.net> 7 7 * 8 8 * … … 25 25 */ 26 26 27 #ifndef ___kLdrBase_h___ 28 #define ___kLdrBase_h___ 27 29 28 #ifndef __kLdrHlp_h__29 #define __kLdrHlp_h__30 30 31 /** @defgroup grp_kLdrHlp kLdrHlp - Helper Functions 32 * @internal 31 /** @defgroup grp_kLdrBase kLdrBase - Base Definitions And Typedefs 33 32 * @{ */ 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 34 77 35 78 /** Get the minimum of two values. */ … … 49 92 50 93 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 51 106 /** @name Endian Conversion 52 107 * @{ */ 53 108 54 /** @def KLDR HLP_E2E_U16109 /** @def KLDR_E2E_U16 55 110 * Convert the endian of an unsigned 16-bit value. */ 56 # define KLDR HLP_E2E_U16(u16)( (uint16_t) (((u16) >> 8) | ((u16) << 8)) )57 /** @def KLDR HLP_E2E_U32111 # define KLDR_E2E_U16(u16) ( (uint16_t) (((u16) >> 8) | ((u16) << 8)) ) 112 /** @def KLDR_E2E_U32 58 113 * Convert the endian of an unsigned 32-bit value. */ 59 # define KLDR HLP_E2E_U32(u32)( ( ((u32) & UINT32_C(0xff000000)) >> 24 ) \114 # define KLDR_E2E_U32(u32) ( ( ((u32) & UINT32_C(0xff000000)) >> 24 ) \ 60 115 | ( ((u32) & UINT32_C(0x00ff0000)) >> 8 ) \ 61 116 | ( ((u32) & UINT32_C(0x0000ff00)) << 8 ) \ 62 117 | ( ((u32) & UINT32_C(0x000000ff)) << 24 ) \ 63 118 ) 64 /** @def KLDR HLP_E2E_U64119 /** @def KLDR_E2E_U64 65 120 * Convert the endian of an unsigned 64-bit value. */ 66 # define KLDR HLP_E2E_U64(u64)( ( ((u64) & UINT64_C(0xff00000000000000)) >> 56 ) \121 # define KLDR_E2E_U64(u64) ( ( ((u64) & UINT64_C(0xff00000000000000)) >> 56 ) \ 67 122 | ( ((u64) & UINT64_C(0x00ff000000000000)) >> 40 ) \ 68 123 | ( ((u64) & UINT64_C(0x0000ff0000000000)) >> 24 ) \ … … 74 129 ) 75 130 76 /** @def KLDR HLP_LE2H_U16131 /** @def KLDR_LE2H_U16 77 132 * Unsigned 16-bit little-endian to host endian. */ 78 /** @def KLDR HLP_LE2H_U32133 /** @def KLDR_LE2H_U32 79 134 * Unsigned 32-bit little-endian to host endian. */ 80 /** @def KLDR HLP_LE2H_U64135 /** @def KLDR_LE2H_U64 81 136 * Unsigned 64-bit little-endian to host endian. */ 82 /** @def KLDR HLP_BE2H_U16137 /** @def KLDR_BE2H_U16 83 138 * Unsigned 16-bit big-endian to host endian. */ 84 /** @def KLDR HLP_BE2H_U32139 /** @def KLDR_BE2H_U32 85 140 * Unsigned 32-bit big-endian to host endian. */ 86 /** @def KLDR HLP_BE2H_U64141 /** @def KLDR_BE2H_U64 87 142 * Unsigned 64-bit big-endian to host endian. */ 88 143 #ifdef KLDR_LITTLE_ENDIAN 89 # define KLDR HLP_LE2H_U16(u16) ((uint16_t)(u16))90 # define KLDR HLP_LE2H_U32(u32) ((uint32_t)(u32))91 # define KLDR HLP_LE2H_U64(u64) ((uint32_t)(u32))92 # define KLDR HLP_BE2H_U16(u16) KLDRHLP_E2E_U16(u16)93 # define KLDR HLP_BE2H_U32(u32) KLDRHLP_E2E_U32(u32)94 # define KLDR HLP_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) 95 150 #elif defined(KLDR_BIG_ENDIAN) 96 # define KLDR HLP_LE2H_U16(u16) KLDRHLP_E2E_U16(u16)97 # define KLDR HLP_LE2H_U32(u32) KLDRHLP_E2E_U32(u32)98 # define KLDR HLP_LE2H_U32(u64) KLDRHLP_E2E_U64(u64)99 # define KLDR HLP_BE2H_U16(u16) ((uint16_t)(u16))100 # define KLDR HLP_BE2H_U32(u32) ((uint32_t)(u32))101 # define KLDR HLP_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)) 102 157 #else 103 158 # error "KLDR_BIG_ENDIAN or KLDR_LITTLE_ENDIAN is supposed to be defined." … … 106 161 /** @} */ 107 162 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 /** @} */ 225 164 226 165 #endif 227 166 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 #endif240 241 #ifdef __cplusplus242 extern "C" {243 #endif244 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 __cplusplus277 }278 #endif279 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 macros294 * @{ */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 32 32 * @internal 33 33 * @{ */ 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 Conversion52 * @{ */53 54 /** @def KLDRHLP_E2E_U1655 * 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_U3258 * 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_U6465 * 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_U1677 * Unsigned 16-bit little-endian to host endian. */78 /** @def KLDRHLP_LE2H_U3279 * Unsigned 32-bit little-endian to host endian. */80 /** @def KLDRHLP_LE2H_U6481 * Unsigned 64-bit little-endian to host endian. */82 /** @def KLDRHLP_BE2H_U1683 * Unsigned 16-bit big-endian to host endian. */84 /** @def KLDRHLP_BE2H_U3285 * Unsigned 32-bit big-endian to host endian. */86 /** @def KLDRHLP_BE2H_U6487 * Unsigned 64-bit big-endian to host endian. */88 #ifdef KLDR_LITTLE_ENDIAN89 # 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 #else103 # error "KLDR_BIG_ENDIAN or KLDR_LITTLE_ENDIAN is supposed to be defined."104 #endif105 106 /** @} */107 108 34 109 35 /* -
trunk/kLdr/kLdrInternal.h
r2954 r3525 50 50 * @{ */ 51 51 /** ELF signature ("\x7fELF"). */ 52 #define IMAGE_ELF_SIGNATURE KLDR HLP_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)) 53 53 /** PE signature ("PE\0\0"). */ 54 #define IMAGE_NT_SIGNATURE KLDR HLP_LE2H_U32('P' | ('E' << 8))54 #define IMAGE_NT_SIGNATURE KLDR_LE2H_U32('P' | ('E' << 8)) 55 55 /** LX signature ("LX") */ 56 #define IMAGE_LX_SIGNATURE KLDR HLP_LE2H_U16('L' | ('X' << 8))56 #define IMAGE_LX_SIGNATURE KLDR_LE2H_U16('L' | ('X' << 8)) 57 57 /** LE signature ("LE") */ 58 #define IMAGE_LE_SIGNATURE KLDR HLP_LE2H_U16('L' | ('E' << 8))58 #define IMAGE_LE_SIGNATURE KLDR_LE2H_U16('L' | ('E' << 8)) 59 59 /** NE signature ("NE") */ 60 #define IMAGE_NE_SIGNATURE KLDR HLP_LE2H_U16('N' | ('E' << 8))60 #define IMAGE_NE_SIGNATURE KLDR_LE2H_U16('N' | ('E' << 8)) 61 61 /** MZ signature ("MZ"). */ 62 #define IMAGE_DOS_SIGNATURE KLDR HLP_LE2H_U16('M' | ('Z' << 8))62 #define IMAGE_DOS_SIGNATURE KLDR_LE2H_U16('M' | ('Z' << 8)) 63 63 /** The FAT signature (universal binaries). */ 64 64 #define IMAGE_FAT_SIGNATURE UINT32_C(0xcafebabe) -
trunk/kLdr/kLdrModELF32.h
r2834 r3525 30 30 #define __kLdrModELF32_h__ 31 31 32 #include "kLdrBase.h" 32 33 #include "kLdrModELFCommon.h" 33 34 -
trunk/kLdr/kLdrModELF64.h
r2834 r3525 30 30 #define __kLdrModELF64_h__ 31 31 32 #include "kLdrBase.h" 32 33 #include "kLdrModELFCommon.h" 33 34 -
trunk/kLdr/kLdrModLX.h
r2889 r3525 4 4 #define __kLdrModLX_h__ 5 5 6 #include "kLdrBase.h" 7 6 8 7 9 #ifndef IMAGE_OS2_SIGNATURE_LX 8 10 /** LX signature ("LX") */ 9 # define IMAGE_LX_SIGNATURE KLDR HLP_LE2H_U16('L' | ('X' << 8))11 # define IMAGE_LX_SIGNATURE KLDR_LE2H_U16('L' | ('X' << 8)) 10 12 #endif 11 13 -
trunk/kLdr/kLdrModMZ.h
r2834 r3525 3 3 #ifndef __kLdrModMZ_h__ 4 4 #define __kLdrModMZ_h__ 5 6 #include "kLdrBase.h" 5 7 6 8 #pragma pack(1) /* not required */ … … 31 33 32 34 #ifndef IMAGE_DOS_SIGNATURE 33 # define IMAGE_DOS_SIGNATURE KLDR HLP_LE2H_U16('M' | ('Z' << 8))35 # define IMAGE_DOS_SIGNATURE KLDR_LE2H_U16('M' | ('Z' << 8)) 34 36 #endif 35 37 -
trunk/kLdr/kLdrModMachO.c
r2977 r3525 470 470 if (fConvertEndian) 471 471 { 472 u.pLoadCmd->cmd = KLDR HLP_E2E_U32(u.pLoadCmd->cmd);473 u.pLoadCmd->cmdsize = KLDR HLP_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); 474 474 } 475 475 if (u.pLoadCmd->cmdsize > cbLeft) … … 497 497 if (fConvertEndian) 498 498 { 499 u.pSeg32->vmaddr = KLDR HLP_E2E_U32(u.pSeg32->vmaddr);500 u.pSeg32->vmsize = KLDR HLP_E2E_U32(u.pSeg32->vmsize);501 u.pSeg32->fileoff = KLDR HLP_E2E_U32(u.pSeg32->fileoff);502 u.pSeg32->filesize = KLDR HLP_E2E_U32(u.pSeg32->filesize);503 u.pSeg32->maxprot = KLDR HLP_E2E_U32(u.pSeg32->maxprot);504 u.pSeg32->initprot = KLDR HLP_E2E_U32(u.pSeg32->initprot);505 u.pSeg32->nsects = KLDR HLP_E2E_U32(u.pSeg32->nsects);506 u.pSeg32->flags = KLDR HLP_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); 507 507 } 508 508 … … 537 537 if (fConvertEndian) 538 538 { 539 pSect->addr = KLDR HLP_E2E_U32(pSect->addr);540 pSect->size = KLDR HLP_E2E_U32(pSect->size);541 pSect->offset = KLDR HLP_E2E_U32(pSect->offset);542 pSect->align = KLDR HLP_E2E_U32(pSect->align);543 pSect->reloff = KLDR HLP_E2E_U32(pSect->reloff);544 pSect->nreloc = KLDR HLP_E2E_U32(pSect->nreloc);545 pSect->flags = KLDR HLP_E2E_U32(pSect->flags);546 pSect->reserved1 = KLDR HLP_E2E_U32(pSect->reserved1);547 pSect->reserved2 = KLDR HLP_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); 548 548 } 549 549 … … 659 659 if (fConvertEndian) 660 660 { 661 u.pSymTab->symoff = KLDR HLP_E2E_U32(u.pSymTab->symoff);662 u.pSymTab->nsyms = KLDR HLP_E2E_U32(u.pSymTab->nsyms);663 u.pSymTab->stroff = KLDR HLP_E2E_U32(u.pSymTab->stroff);664 u.pSymTab->strsize = KLDR HLP_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); 665 665 } 666 666 … … 701 701 if (fConvertEndian) 702 702 { 703 pu32[0] = KLDR HLP_E2E_U32(pu32[0]);704 pu32[1] = KLDR HLP_E2E_U32(pu32[1]);703 pu32[0] = KLDR_E2E_U32(pu32[0]); 704 pu32[1] = KLDR_E2E_U32(pu32[1]); 705 705 } 706 706 if (pu32[1] + 2 > cItemsLeft) … … 2167 2167 while (cLeft-- > 0) 2168 2168 { 2169 pSym->n_un.n_strx = KLDR HLP_E2E_U32(pSym->n_un.n_strx);2170 pSym->n_desc = (int16_t)KLDR HLP_E2E_U16(pSym->n_desc);2171 pSym->n_value = KLDR HLP_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); 2172 2172 pSym++; 2173 2173 } … … 2179 2179 while (cLeft-- > 0) 2180 2180 { 2181 pSym->n_un.n_strx = KLDR HLP_E2E_U32(pSym->n_un.n_strx);2182 pSym->n_desc = (int16_t)KLDR HLP_E2E_U16(pSym->n_desc);2183 pSym->n_value = KLDR HLP_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); 2184 2184 pSym++; 2185 2185 } … … 2238 2238 { 2239 2239 uint32_t *pu32 = (uint32_t *)&paFixups[iFixup]; 2240 pu32[0] = KLDR HLP_E2E_U32(pu32[0]);2241 pu32[1] = KLDR HLP_E2E_U32(pu32[1]);2240 pu32[0] = KLDR_E2E_U32(pu32[0]); 2241 pu32[1] = KLDR_E2E_U32(pu32[1]); 2242 2242 } 2243 2243 } -
trunk/kLdr/kLdrModMachO.h
r2971 r3525 6 6 #ifndef __kLdrModMachO_h__ 7 7 #define __kLdrModMachO_h__ 8 9 #include "kLdrBase.h" 8 10 9 11 /** @defgroup grp_mach_o The Mach-O Structures, Types, and Defines. -
trunk/kLdr/kLdrModPE.h
r2857 r3525 3 3 #ifndef __kLdrModPE_h__ 4 4 #define __kLdrModPE_h__ 5 6 7 /******************************************************************************* 8 * Header Files * 9 *******************************************************************************/ 10 #include "kLdrBase.h" 5 11 6 12 … … 9 15 *******************************************************************************/ 10 16 #ifndef IMAGE_NT_SIGNATURE 11 # define IMAGE_NT_SIGNATURE KLDR HLP_LE2H_U32('P' | ('E' << 8))17 # define IMAGE_NT_SIGNATURE KLDR_LE2H_U32('P' | ('E' << 8)) 12 18 #endif 13 19
Note:
See TracChangeset
for help on using the changeset viewer.