Changeset 3541 for trunk/kStuff/include


Ignore:
Timestamp:
Aug 25, 2007, 5:46:14 AM (18 years ago)
Author:
bird
Message:

errors and stuff.

Location:
trunk/kStuff/include/k
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/kStuff/include/k/kDbg.h

    r3540 r3541  
    4141/** The max symbol name length used by the debug reader. */
    4242#define KDBG_SYMBOL_MAX     384
    43 
    44 /** @name   kDbg Status codes
    45  * (Success is indicated by the value 0.)
    46  * @{ */
    47 #define KDBG_ERR_BASE                                   430000
    48 
    49 /** An API was given an invalid parameter. */
    50 #define KDBG_ERR_INVALID_PARAMETER                      (KDBG_ERR_BASE + 0)
    51 /** A pointer argument is not valid. */
    52 #define KDBG_ERR_INVALID_POINTER                        (KDBG_ERR_BASE + 1)
    53 /** A handle argument is not valid. */
    54 #define KDBG_ERR_INVALID_HANDLE                         (KDBG_ERR_BASE + 2)
    55 /** A parameter is out of range. */
    56 #define KDBG_ERR_OUT_OF_RANGE                           (KDBG_ERR_BASE + 3)
    57 /** Out of memory. */
    58 #define KDBG_ERR_NO_MEMORY                              (KDBG_ERR_BASE + 4)
    59 /** The specified file was not found. */
    60 #define KDBG_ERR_FILE_NOT_FOUND                         (KDBG_ERR_BASE + 5)
    61 /** Hit some unimplemented functionality - feel free to implement it :-) . */
    62 #define KDBG_ERR_NOT_IMPLEMENTED                        (KDBG_ERR_BASE + 6)
    63 /** Generic error. */
    64 #define KDBG_ERR_GENERAL_FAILURE                        (KDBG_ERR_BASE + 9)
    65 
    66 /** The (module) format isn't known to use. */
    67 #define KDBG_ERR_UNKOWN_FORMAT                          (KDBG_ERR_BASE + 10)
    68 /** The (module) format isn't supported by this kDbg build. */
    69 #define KDBG_ERR_FORMAT_NOT_SUPPORTED                   (KDBG_ERR_BASE + 11)
    70 /** A specified address or an address found in the debug info is invalid. */
    71 #define KDBG_ERR_INVALID_ADDRESS                        (KDBG_ERR_BASE + 12)
    72 /** The dbghelp.dll is too old or something like that. */
    73 #define KDBG_ERR_DBGHLP_VERSION_MISMATCH                (KDBG_ERR_BASE + 13)
    74 /** Invalid executable format. */
    75 #define KDBG_ERR_BAD_EXE_FORMAT                         (KDBG_ERR_BASE + 14)
    76 
    77 /** @} */
    78 
    7943
    8044/** @name   Special Segments
     
    13195 *
    13296 * @returns VINF_SUCCESS on success.
    133  * @returns KDBG_ERR_INVALID_POINTER if a NULL pointer or an !KDBG_VALID_PTR() is passed in.
     97 * @returns KERR_INVALID_POINTER if a NULL pointer or an !KDBG_VALID_PTR() is passed in.
    13498 *
    13599 * @param   pLine       The line number to be freed.
     
    199163 *
    200164 * @returns VINF_SUCCESS on success.
    201  * @returns KDBG_ERR_INVALID_POINTER if a NULL pointer or an !KDBG_VALID_PTR() is passed in.
     165 * @returns KERR_INVALID_POINTER if a NULL pointer or an !KDBG_VALID_PTR() is passed in.
    202166 *
    203167 * @param   pSymbol     The symbol to be freed.
     
    206170
    207171
     172/** Pointer to a kDbgHlp file structure (abstract). */
     173typedef struct KDBGHLPFILE *PKDBGHLPFILE;
    208174
    209175/** A debug module handle. */
    210176typedef struct KDBGMOD *PKDBGMOD;
     177
     178/**
     179 * The debug module method table.
     180 */
     181typedef struct KDBGMODOPS
     182{
     183    /** The name of the reader. */
     184    const char *pszName;
     185
     186    /** Pointer to the next debug module readers.
     187     * This is only used for dynamically registered readers. */
     188    struct KDBGMODOPS  *pNext;
     189
     190    /**
     191     * Tries to open the module.
     192     *
     193     * @returns 0 on success, KDBG_ERR on failure.
     194     * @param   pFile           The file
     195     * @param   ppMod           Where to store the module that's been opened.
     196     * @param   off             The file offset of the debug info. This is 0 if there isn't
     197     *                          any specfic debug info section and the reader should start
     198     *                          looking for debug info at the start of the file.
     199     * @param   cb              The size of the debug info in the file. INT64_MAX if we don't
     200     *                          know or there isn't any particular debug info section in the file.
     201     * @param   pLdrMod         The associated loader module. This can be NULL.
     202     *
     203     * @remark  This is NULL for the builtin readers.
     204     */
     205    int (*pfnOpen)(PKDBGMOD *ppMod, PKDBGHLPFILE pFile, KFOFF off, KFOFF cb, struct KLDRMOD *pLdrMod);
     206
     207    /**
     208     * Closes the module.
     209     *
     210     * This should free all resources associated with the module
     211     * except the pMod which is freed by the caller.
     212     *
     213     * @returns IPRT status code.
     214     * @param   pMod        The module.
     215     */
     216    int (*pfnClose)(PKDBGMOD pMod);
     217
     218    /**
     219     * Gets a symbol by segment:offset.
     220     * This will be approximated to the nearest symbol if there is no exact match.
     221     *
     222     * @returns 0 on success. KLDR_ERR_* on failure.
     223     * @param   pMod        The module.
     224     * @param   iSegment    The segment this offset is relative to.
     225     *                      The -1 segment is special, it means that the addres is relative to
     226     *                      the image base. The image base is where the first bit of the image
     227     *                      is mapped during load.
     228     * @param   off         The offset into the segment.
     229     * @param   pSym        Where to store the symbol details.
     230     */
     231    int (*pfnQuerySymbol)(PKDBGMOD pMod, KI32 iSegment, KDBGADDR off, PKDBGSYMBOL pSym);
     232
     233    /**
     234     * Gets a line number entry by segment:offset.
     235     * This will be approximated to the nearest line number there is no exact match.
     236     *
     237     * @returns 0 on success. KLDR_ERR_* on failure.
     238     * @param   pMod        The module.
     239     * @param   iSegment    The segment this offset is relative to.
     240     *                      The -1 segment is special, it means that the addres is relative to
     241     *                      the image base. The image base is where the first bit of the image
     242     *                      is mapped during load.
     243     * @param   off         The offset into the segment.
     244     * @param   pLine       Where to store the line number details.
     245     */
     246    int (*pfnQueryLine)(PKDBGMOD pMod, KI32 iSegment, KDBGADDR uOffset, PKDBGLINE pLine);
     247
     248    /** This is just to make sure you've initialized all the fields.
     249     * Must be identical to pszName. */
     250    const char *pszName2;
     251} KDBGMODOPS;
     252/** Pointer to a module method table. */
     253typedef KDBGMODOPS *PKDBGMODOPS;
     254/** Pointer to a const module method table. */
     255typedef const KDBGMODOPS *PCKDBGMODOPS;
     256
     257/**
     258 * Register a debug module reader with the kDbgModule component.
     259 *
     260 * Dynamically registered readers are kept in FIFO order, and external
     261 * readers will be tried after the builtin ones.
     262 *
     263 * @returns 0 on success.
     264 * @returns KERR_INVALID_POINTER if pOps is missing bits.
     265 * @returns KERR_INVALID_PARAMETER if pOps is already in the list.
     266 * @param   pOps        The reader method table, kDbg takes owner ship of
     267 *                      this. This must be writeable as the pNext pointer
     268 *                      will be update. It must also stick around for as
     269 *                      long as kDbg is in use.
     270 */
     271KDBG_DECL(int) kDbgModuleRegisterReader(PKDBGMODOPS pOps)
     272;
     273
     274
     275
     276/**
     277 * Internal representation of a debug module.
     278 */
     279typedef struct KDBGMOD
     280{
     281    /** Magic value (KDBGMOD_MAGIC). */
     282    KI32            u32Magic;
     283    /** The handle to the module. (If closed, this is NIL_RTFILE.) */
     284    PKDBGHLPFILE    pFile;
     285    /** Pointer to the method table. */
     286    PCKDBGMODOPS    pOps;
     287} KDBGMOD;
     288
     289
     290/** The magic value for the debug module structure. (Some dead english writer) */
     291#define KDBGMOD_MAGIC      0x19200501
     292/** The magic value of a dead module structure. */
     293#define KDBGMOD_MAGIC_DEAD 0x19991231
     294
    211295
    212296/**
     
    240324 * @param   pSym        Where to store the symbol details.
    241325 */
    242 KDBG_DECL(int) kDbgModuleQuerySymbol(PKDBGMOD pMod, int32_t iSegment, KDBGADDR off, PKDBGSYMBOL pSym);
     326KDBG_DECL(int) kDbgModuleQuerySymbol(PKDBGMOD pMod, KI32 iSegment, KDBGADDR off, PKDBGSYMBOL pSym);
    243327
    244328/**
     
    256340 *                      Free the returned symbol using kDbgSymbolFree().
    257341 */
    258 KDBG_DECL(int) kDbgModuleQuerySymbolA(PKDBGMOD pMod, int32_t iSegment, KDBGADDR off, PPKDBGSYMBOL ppSym);
     342KDBG_DECL(int) kDbgModuleQuerySymbolA(PKDBGMOD pMod, KI32 iSegment, KDBGADDR off, PPKDBGSYMBOL ppSym);
    259343
    260344/**
     
    271355 * @param   pLine       Where to store the line number details.
    272356 */
    273 KDBG_DECL(int) kDbgModuleQueryLine(PKDBGMOD pMod, int32_t iSegment, KDBGADDR off, PKDBGLINE pLine);
     357KDBG_DECL(int) kDbgModuleQueryLine(PKDBGMOD pMod, KI32 iSegment, KDBGADDR off, PKDBGLINE pLine);
    274358
    275359/**
     
    287371 *                      Free the returned line number using kDbgLineFree().
    288372 */
    289 KDBG_DECL(int) kDbgModuleQueryLineA(PKDBGMOD pMod, int32_t iSegment, KDBGADDR off, PPKDBGLINE ppLine);
     373KDBG_DECL(int) kDbgModuleQueryLineA(PKDBGMOD pMod, KI32 iSegment, KDBGADDR off, PPKDBGLINE ppLine);
    290374
    291375
  • trunk/kStuff/include/k/kDefs.h

    r3538 r3541  
    371371#define K_ALIGN_P(pv, align)    ( (void *)( ((KUPTR)(pv) + ((align) - 1)) & ~(KUPTR)((align) - 1) ) )
    372372/** Number of elements in an array. */
    373 #define K_ELEMENTS(a)           ( sizeof(a) / sizeof((a)[
     373#define K_ELEMENTS(a)           ( sizeof(a) / sizeof((a)[0]) )
    374374/** Checks if the specified pointer is a valid address or not. */
    375375#define K_VALID_PTR(ptr)        ( (KUPTR)(ptr) + 0x1000U >= 0x2000U )
  • trunk/kStuff/include/k/kTypes.h

    r3538 r3541  
    77 *
    88 *
    9  * This file is part of k*.
    10  *
    11  * k* is free software; you can redistribute it and/or modify
     9 * This file is part of kStuff.
     10 *
     11 * kStuff is free software; you can redistribute it and/or modify
    1212 * it under the terms of the GNU Lesser General Public License as published
    1313 * by the Free Software Foundation; either version 2 of the License, or
    1414 * (at your option) any later version.
    1515 *
    16  * k* is distributed in the hope that it will be useful,
     16 * kStuff is distributed in the hope that it will be useful,
    1717 * but WITHOUT ANY WARRANTY; without even the implied warranty of
    1818 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     
    2020 *
    2121 * You should have received a copy of the GNU Lesser General Public License
    22  * along with k*; if not, write to the Free Software
     22 * along with kStuff; if not, write to the Free Software
    2323 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    2424 *
     
    3333 * @{
    3434 */
    35 
    3635
    3736/** @typedef KI64
     
    4544 * 64-bit unsigned integer constant.
    4645 * @param c         The constant value. */
     46/** @def KI64_PRI
     47 * 64-bit signed integer printf format. */
     48/** @def KU64_PRI
     49 * 64-bit unsigned integer printf format. */
     50/** @def KX64_PRI
     51 * 64-bit signed and unsigned integer hexadecimal printf format. */
    4752
    4853/** @typedef KI32
     
    5661 * 32-bit unsigned integer constant.
    5762 * @param c         The constant value. */
     63/** @def KI32_PRI
     64 * 32-bit signed integer printf format. */
     65/** @def KU32_PRI
     66 * 32-bit unsigned integer printf format. */
     67/** @def KX32_PRI
     68 * 32-bit signed and unsigned integer hexadecimal printf format. */
    5869
    5970/** @typedef KI16
     
    6778 * 16-bit unsigned integer constant.
    6879 * @param c         The value. */
     80/** @def KI16_PRI
     81 * 16-bit signed integer printf format. */
     82/** @def KU16_PRI
     83 * 16-bit unsigned integer printf format. */
     84/** @def KX16_PRI
     85 * 16-bit signed and unsigned integer hexadecimal printf format. */
    6986
    7087/** @typedef KI8
     
    7895 * 8-bit unsigned integer constant.
    7996 * @param c         The constant value. */
     97/** @def KI8_PRI
     98 * 8-bit signed integer printf format. */
     99/** @def KU8_PRI
     100 * 8-bit unsigned integer printf format. */
     101/** @def KX8_PRI
     102 * 8-bit signed and unsigned integer hexadecimal printf format. */
    80103
    81104/** @typedef KSIZE
     
    95118/** @def KSSIZE_MIN
    96119 * Memory size min constant.*/
     120/** @def KSIZE_PRI
     121 * Memory size printf format. */
     122/** @def KSSIZE_PRI
     123 * Memory size printf format. */
    97124
    98125/** @typedef KIPTR
     
    112139/** @def KUPTR_MAX
    113140 * Unsigned pointer max constant.*/
     141/** @def KIPTR_PRI
     142 * Signed pointer printf format. */
     143/** @def KUPTR_PRI
     144 * Unsigned pointer printf format. */
    114145
    115146
     
    119150typedef signed __int64          KI64;
    120151typedef unsigned __int64        KU64;
     152#define KI64_PRI                "I64d"
     153#define KU64_PRI                "I64u"
     154#define KX64_PRI                "I64x"
    121155# else
    122156typedef signed long long int    KI64;
    123157typedef unsigned long long int  KU64;
     158#define KI64_PRI                "lld"
     159#define KU64_PRI                "llu"
     160#define KX64_PRI                "llx"
    124161# endif
    125162typedef signed int              KI32;
     
    138175#define KU8_C(c)                (c)
    139176
     177#define KI32_PRI                "d"
     178#define KU32_PRI                "u"
     179#define KX32_PRI                "x"
     180#define KI16_PRI                "d"
     181#define KU16_PRI                "u"
     182#define KX16_PRI                "x"
     183#define KI8_PRI                 "d"
     184#define KU8_PRI                 "u"
     185#define KX8_PRI                 "x"
     186
    140187typedef KI32                    KSSIZE;
    141 typedef KU32                    KSIZE;
    142 typedef KI32                    KIPTR;
    143 typedef KU32                    KUPTR;
    144188#define KSSIZE(c)               KI32_C(c)
    145189#define KSSIZE_MAX              KI32_MAX
    146190#define KSSIZE_MIN              KI32_MIN
     191#define KSSIZE_PRI              KX32_PRI
     192
     193typedef KU32                    KSIZE;
    147194#define KSIZE_C(c)              KU32_C(c)
    148195#define KSIZE_MAX               KU32_MAX
     196#define KSIZE_PRI               KX32_PRI
    149197#define KIPTR_C(c)              KI32_C(c)
     198
     199typedef KI32                    KIPTR;
    150200#define KIPTR_MAX               KI32_MAX
    151201#define KIPTR_MIN               KI32_MIN
     202#define KIPTR_PRI               KX32_PRI
     203
     204typedef KU32                    KUPTR;
    152205#define KUPTR_C(c)              KU32_C(c)
    153206#define KUPTR_MAX               KU32_MAX
     207#define KUPTR_PRI               KX32_PRI
    154208
    155209
     
    160214typedef signed __int64          KI64;
    161215typedef unsigned __int64        KU64;
     216#   define KI64_PRI             "I64d"
     217#   define KU64_PRI             "I64u"
     218#   define KX64_PRI             "I64x"
    162219#  else
    163220typedef signed long long int    KI64;
    164221typedef unsigned long long int  KU64;
     222#   define KI64_PRI              "lld"
     223#   define KU64_PRI              "llu"
     224#   define KX64_PRI              "llx"
    165225#  endif
    166226#  define KI64_C(c)             (c ## ULL)
     
    169229typedef signed long int         KI64;
    170230typedef unsigned long int       KU64;
    171 # define KI64_C(c)              (c ## UL)
    172 # define KU64_C(c)              (c ## L)
     231#  define KI64_C(c)             (c ## UL)
     232#  define KU64_C(c)             (c ## L)
     233#  define KI64_PRI              "ld"
     234#  define KU64_PRI              "lu"
     235#  define KX64_PRI              "lx"
    173236# endif
    174237typedef signed int              KI32;
     
    185248#define KU8_C(c)                (c)
    186249
     250#define KI32_PRI                "d"
     251#define KU32_PRI                "u"
     252#define KX32_PRI                "x"
     253#define KI16_PRI                "d"
     254#define KU16_PRI                "u"
     255#define KX16_PRI                "x"
     256#define KI8_PRI                 "d"
     257#define KU8_PRI                 "u"
     258#define KX8_PRI                 "x"
     259
    187260typedef KI64                    KSSIZE;
    188 typedef KU64                    KSIZE;
    189 typedef KI64                    KIPTR;
    190 typedef KU64                    KUPTR;
    191261#define KSSIZE(c)               KI64_C(c)
    192262#define KSSIZE_MAX              KI64_MAX
    193263#define KSSIZE_MIN              KI64_MIN
     264#define KSSIZE_PRI              KX64_PRI
     265
     266typedef KU64                    KSIZE;
    194267#define KSIZE_C(c)              KU64_C(c)
    195268#define KSIZE_MAX               KU64_MAX
     269#define KSIZE_PRI               KX64_PRI
     270
     271typedef KI64                    KIPTR;
    196272#define KIPTR_C(c)              KI64_C(c)
    197273#define KIPTR_MAX               KI64_MAX
    198274#define KIPTR_MIN               KI64_MIN
     275#define KIPTR_PRI               KX64_PRI
     276
     277typedef KU64                    KUPTR;
    199278#define KUPTR_C(c)              KU64_C(c)
    200279#define KUPTR_MAX               KU64_MAX
     280#define KUPTR_PRI               KX64_PRI
    201281
    202282#else
     
    230310#define KU64_MAX                KU64_C(0xffffffffffffffff)
    231311
     312/** File offset. */
     313typedef KI64                    KFOFF;
     314/** Pointer a file offset. */
     315typedef KFOFF                  *PFOFF;
     316/** Pointer a const file offset. */
     317typedef KFOFF                  *PCFOFF;
     318/** The min value for the KFOFF type. */
     319#define KFOFF_MIN               KI64_MIN
     320/** The max value for the KFOFF type. */
     321#define KFOFF_MAX               KI64_MAX
     322/** File offset contstant.
     323 * @param c         The constant value. */
     324#define KFOFF_C(c)              KI64_C(c)
     325/** File offset printf format. */
     326#define KFOFF_PRI               KI64_PRI
     327
    232328/** @} */
    233329
Note: See TracChangeset for help on using the changeset viewer.