VirtualBox

Changeset 20744 in vbox for trunk/src/VBox/Runtime/common


Ignore:
Timestamp:
Jun 21, 2009 3:43:57 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
48860
Message:

IPRT: RTDbg coding.

Location:
trunk/src/VBox/Runtime/common/dbg
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/dbg/dbgas.cpp

    r20740 r20744  
    11481148 * @param   fFlags          Symbol flags.
    11491149 */
    1150 RTDECL(int) RTDbgAsSymbolAdd(RTDBGAS hDbgAs, const char *pszSymbol, RTUINTPTR Addr, RTUINTPTR cb, uint32_t fFlags)
     1150RTDECL(int) RTDbgAsSymbolAdd(RTDBGAS hDbgAs, const char *pszSymbol, RTUINTPTR Addr, RTUINTPTR cb, uint32_t fFlags, uint32_t *piOrdinal)
    11511151{
    11521152    /*
     
    11651165     * Forward the call.
    11661166     */
    1167     int rc = RTDbgModSymbolAdd(hMod, pszSymbol, iSeg, offSeg, cb, fFlags);
     1167    int rc = RTDbgModSymbolAdd(hMod, pszSymbol, iSeg, offSeg, cb, fFlags, piOrdinal);
    11681168    RTDbgModRelease(hMod);
    11691169    return rc;
     
    14641464 * @param   uLineNo         The line number.
    14651465 * @param   Addr            The address of the symbol.
    1466  */
    1467 RTDECL(int) RTDbgAsLineAdd(RTDBGAS hDbgAs, const char *pszFile, uint32_t uLineNo, RTUINTPTR Addr)
     1466 * @param   piOrdinal       Where to return the line number ordinal on success.
     1467 *                          If the interpreter doesn't do ordinals, this will be
     1468 *                          set to UINT32_MAX. Optional.
     1469 */
     1470RTDECL(int) RTDbgAsLineAdd(RTDBGAS hDbgAs, const char *pszFile, uint32_t uLineNo, RTUINTPTR Addr, uint32_t *piOrdinal)
    14681471{
    14691472    /*
     
    14821485     * Forward the call.
    14831486     */
    1484     int rc = RTDbgModLineAdd(hMod, pszFile, uLineNo, iSeg, offSeg);
     1487    int rc = RTDbgModLineAdd(hMod, pszFile, uLineNo, iSeg, offSeg, piOrdinal);
    14851488    RTDbgModRelease(hMod);
    14861489    return rc;
  • trunk/src/VBox/Runtime/common/dbg/dbgmod.cpp

    r20740 r20744  
    405405 * @param   cb              The size of the symbol.
    406406 * @param   fFlags          Symbol flags.
    407  */
    408 RTDECL(int) RTDbgModSymbolAdd(RTDBGMOD hDbgMod, const char *pszSymbol, RTDBGSEGIDX iSeg, RTUINTPTR off, RTUINTPTR cb, uint32_t fFlags)
     407 * @param   piOrdinal       Where to return the symbol ordinal on success. If
     408 *                          the interpreter doesn't do ordinals, this will be set to
     409 *                          UINT32_MAX. Optional
     410 */
     411RTDECL(int) RTDbgModSymbolAdd(RTDBGMOD hDbgMod, const char *pszSymbol, RTDBGSEGIDX iSeg, RTUINTPTR off, RTUINTPTR cb, uint32_t fFlags, uint32_t *piOrdinal)
    409412{
    410413    /*
     
    442445     * Get down to business.
    443446     */
    444     int rc = pDbgMod->pDbgVt->pfnSymbolAdd(pDbgMod, pszSymbol, cchSymbol, iSeg, off, cb, fFlags);
     447    int rc = pDbgMod->pDbgVt->pfnSymbolAdd(pDbgMod, pszSymbol, cchSymbol, iSeg, off, cb, fFlags, piOrdinal);
    445448
    446449    RTDBGMOD_UNLOCK(pDbgMod);
     
    498501 * @param   iSeg            The segment index.
    499502 * @param   off             The segment offset.
    500  */
    501 RTDECL(int) RTDbgModLineAdd(RTDBGMOD hDbgMod, const char *pszFile, uint32_t uLineNo, RTDBGSEGIDX iSeg, RTUINTPTR off)
     503 * @param   piOrdinal       Where to return the line number ordinal on success.
     504 *                          If the interpreter doesn't do ordinals, this will be
     505 *                          set to UINT32_MAX. Optional.
     506 */
     507RTDECL(int) RTDbgModLineAdd(RTDBGMOD hDbgMod, const char *pszFile, uint32_t uLineNo, RTDBGSEGIDX iSeg, RTUINTPTR off, uint32_t *piOrdinal)
    502508{
    503509    /*
     
    534540     * Get down to business.
    535541     */
    536     int rc = pDbgMod->pDbgVt->pfnLineAdd(pDbgMod, pszFile, cchFile, uLineNo, iSeg, off);
     542    int rc = pDbgMod->pDbgVt->pfnLineAdd(pDbgMod, pszFile, cchFile, uLineNo, iSeg, off, piOrdinal);
    537543
    538544    RTDBGMOD_UNLOCK(pDbgMod);
  • trunk/src/VBox/Runtime/common/dbg/dbgmodcontainer.cpp

    r20740 r20744  
    1919 * Symbol entry.
    2020 */
    21 typedef struct RTDBGMODCONTAINERSYMBOL
     21typedef struct RTDBGMODCTNSYMBOL
    2222{
    2323    /** The address core. */
     
    2525    /** The name space core. */
    2626    RTSTRSPACECORE              NameCore;
     27    /** The ordinal number core. */
     28    AVLU32NODECORE              OrdinalCore;
    2729    /** The segment index. */
    2830    RTDBGSEGIDX                 iSeg;
     
    3234     * This may be zero while the range in AddrCore indicates 0. */
    3335    RTUINTPTR                   cb;
    34 } RTDBGMODCONTAINERSYMBOL;
     36} RTDBGMODCTNSYMBOL;
    3537/** Pointer to a symbol entry in the debug info container. */
    36 typedef RTDBGMODCONTAINERSYMBOL *PRTDBGMODCONTAINERSYMBOL;
     38typedef RTDBGMODCTNSYMBOL *PRTDBGMODCTNSYMBOL;
    3739/** Pointer to a const symbol entry in the debug info container. */
    38 typedef RTDBGMODCONTAINERSYMBOL const *PCRTDBGMODCONTAINERSYMBOL;
     40typedef RTDBGMODCTNSYMBOL const *PCRTDBGMODCTNSYMBOL;
    3941
    4042/**
    4143 * Line number entry.
    4244 */
    43 typedef struct RTDBGMODCONTAINERLINE
     45typedef struct RTDBGMODCTNLINE
    4446{
    4547    /** The address core.
    4648     * The Key is the address of the line number. */
    47     AVLUINTPTRNODECORE  AddrCore;
     49    AVLUINTPTRNODECORE          AddrCore;
     50    /** The ordinal number core. */
     51    AVLU32NODECORE              OrdinalCore;
    4852    /** Pointer to the file name (in string cache). */
    49     const char         *pszFile;
     53    const char                 *pszFile;
    5054    /** The line number. */
    51     uint32_t            uLineNo;
    52 } RTDBGMODCONTAINERLINE;
     55    uint32_t                    uLineNo;
     56    /** The segment index. */
     57    RTDBGSEGIDX                 iSeg;
     58} RTDBGMODCTNLINE;
    5359/** Pointer to a line number entry. */
    54 typedef RTDBGMODCONTAINERLINE *PRTDBGMODCONTAINERLINE;
     60typedef RTDBGMODCTNLINE *PRTDBGMODCTNLINE;
    5561/** Pointer to const a line number entry. */
    56 typedef RTDBGMODCONTAINERLINE const *PCRTDBGMODCONTAINERLINE;
     62typedef RTDBGMODCTNLINE const *PCRTDBGMODCTNLINE;
    5763
    5864/**
    5965 * Segment entry.
    6066 */
    61 typedef struct RTDBGMODCONTAINERSEGMENT
     67typedef struct RTDBGMODCTNSEGMENT
    6268{
    6369    /** The symbol address space tree. */
     
    7177    /** The segment name. */
    7278    const char                 *pszName;
    73 } RTDBGMODCONTAINERSEGMENT;
     79} RTDBGMODCTNSEGMENT;
    7480/** Pointer to a segment entry in the debug info container. */
    75 typedef RTDBGMODCONTAINERSEGMENT *PRTDBGMODCONTAINERSEGMENT;
     81typedef RTDBGMODCTNSEGMENT *PRTDBGMODCTNSEGMENT;
    7682/** Pointer to a const segment entry in the debug info container. */
    77 typedef RTDBGMODCONTAINERSEGMENT const *PCRTDBGMODCONTAINERSEGMENT;
     83typedef RTDBGMODCTNSEGMENT const *PCRTDBGMODCTNSEGMENT;
    7884
    7985/**
    8086 * Instance data.
    8187 */
    82 typedef struct RTDBGMODCONTAINER
     88typedef struct RTDBGMODCTN
    8389{
    8490    /** The name space. */
     
    8692    /** Tree containing any absolute addresses. */
    8793    AVLRUINTPTRTREE             AbsAddrTree;
     94    /** Tree organizing the symbols by ordinal number. */
     95    AVLU32TREE                  SymbolOrdinalTree;
     96     /** Tree organizing the line numbers by ordinal number. */
     97    AVLU32TREE                  LineOrdinalTree;
    8898    /** Segment table. */
    89     PRTDBGMODCONTAINERSEGMENT   paSegs;
     99    PRTDBGMODCTNSEGMENT         paSegs;
    90100    /** The number of segments in the segment table. */
    91101    RTDBGSEGIDX                 cSegs;
    92102    /** The image size. 0 means unlimited. */
    93103    RTUINTPTR                   cb;
    94 } RTDBGMODCONTAINER;
     104    /** The next symbol ordinal. */
     105    uint32_t                    iNextSymbolOrdinal;
     106    /** The next line number ordinal. */
     107    uint32_t                    iNextLineOrdinal;
     108} RTDBGMODCTN;
    95109/** Pointer to instance data for the debug info container. */
    96 typedef RTDBGMODCONTAINER *PRTDBGMODCONTAINER;
     110typedef RTDBGMODCTN *PRTDBGMODCTN;
    97111
    98112
     
    104118 * @param   pExtSym         The external symbol representation.
    105119 */
    106 DECLINLINE(int) rtDbgModContainerReturnSymbol(PCRTDBGMODCONTAINERSYMBOL pMySym, PRTDBGSYMBOL pExtSym)
    107 {
    108     pExtSym->Value  = pMySym->AddrCore.Key;
    109     pExtSym->offSeg = pMySym->AddrCore.Key;
    110     pExtSym->iSeg   = pMySym->iSeg;
    111     pExtSym->fFlags = pMySym->fFlags;
    112     pExtSym->cb     = pMySym->cb;
     120DECLINLINE(int) rtDbgModContainerReturnSymbol(PCRTDBGMODCTNSYMBOL pMySym, PRTDBGSYMBOL pExtSym)
     121{
     122    pExtSym->Value    = pMySym->AddrCore.Key;
     123    pExtSym->offSeg   = pMySym->AddrCore.Key;
     124    pExtSym->iSeg     = pMySym->iSeg;
     125    pExtSym->fFlags   = pMySym->fFlags;
     126    pExtSym->cb       = pMySym->cb;
     127    pExtSym->iOrdinal = pMySym->OrdinalCore.Key;
    113128    Assert(pMySym->NameCore.cchString < sizeof(pExtSym->szName));
    114129    memcpy(pExtSym->szName, pMySym->NameCore.pszString, pMySym->NameCore.cchString + 1);
     
    122137                                                      PRTINTPTR poffDisp, PRTDBGLINE pLine)
    123138{
    124     PRTDBGMODCONTAINER pThis = (PRTDBGMODCONTAINER)pMod->pvDbgPriv;
     139    PRTDBGMODCTN pThis = (PRTDBGMODCTN)pMod->pvDbgPriv;
    125140
    126141    /*
     
    139154    PAVLUINTPTRNODECORE pAvlCore = RTAvlUIntPtrGetBestFit(&pThis->paSegs[iSeg].LineAddrTree, off, false /*fAbove*/);
    140155    if (!pAvlCore)
    141         return VERR_SYMBOL_NOT_FOUND;
    142     PCRTDBGMODCONTAINERLINE pMyLine = RT_FROM_MEMBER(pAvlCore, RTDBGMODCONTAINERLINE const, AddrCore);
    143     if (poffDisp)
    144         *poffDisp = off - pMyLine->AddrCore.Key;
     156        return pThis->iNextLineOrdinal
     157             ? VERR_DBG_LINE_NOT_FOUND
     158             : VERR_DBG_NO_LINE_NUMBERS;
     159    PCRTDBGMODCTNLINE pMyLine = RT_FROM_MEMBER(pAvlCore, RTDBGMODCTNLINE const, AddrCore);
    145160    pLine->Address = pMyLine->AddrCore.Key;
    146161    pLine->offSeg  = pMyLine->AddrCore.Key;
    147162    pLine->iSeg    = iSeg;
    148163    pLine->uLineNo = pMyLine->uLineNo;
     164    pLine->iOrdinal = pMyLine->OrdinalCore.Key;
     165    strcpy(pLine->szFilename, pMyLine->pszFile);
     166    if (poffDisp)
     167        *poffDisp = off - pMyLine->AddrCore.Key;
     168    return VINF_SUCCESS;
     169}
     170
     171
     172/** @copydoc RTDBGMODVTDBG::pfnLineByOrdinal */
     173static DECLCALLBACK(int) rtDbgModContainer_LineByOrdinal(PRTDBGMODINT pMod, uint32_t iOrdinal, PRTDBGLINE pLine)
     174{
     175    PRTDBGMODCTN pThis = (PRTDBGMODCTN)pMod->pvDbgPriv;
     176
     177    /*
     178     * Look it up.
     179     */
     180    if (iOrdinal >= pThis->iNextLineOrdinal)
     181        return pThis->iNextLineOrdinal
     182             ? VERR_DBG_LINE_NOT_FOUND
     183             : VERR_DBG_NO_LINE_NUMBERS;
     184    PAVLU32NODECORE pAvlCore = RTAvlU32Get(&pThis->LineOrdinalTree, iOrdinal);
     185    AssertReturn(pAvlCore, VERR_DBG_LINE_NOT_FOUND);
     186    PCRTDBGMODCTNLINE pMyLine = RT_FROM_MEMBER(pAvlCore, RTDBGMODCTNLINE const, OrdinalCore);
     187    pLine->Address  = pMyLine->AddrCore.Key;
     188    pLine->offSeg   = pMyLine->AddrCore.Key;
     189    pLine->iSeg     = pMyLine->iSeg;
     190    pLine->uLineNo  = pMyLine->uLineNo;
     191    pLine->iOrdinal = pMyLine->OrdinalCore.Key;
    149192    strcpy(pLine->szFilename, pMyLine->pszFile);
    150193    return VINF_SUCCESS;
     
    152195
    153196
     197/** @copydoc RTDBGMODVTDBG::pfnLineCount */
     198static DECLCALLBACK(uint32_t) rtDbgModContainer_LineCount(PRTDBGMODINT pMod)
     199{
     200    PRTDBGMODCTN pThis = (PRTDBGMODCTN)pMod->pvDbgPriv;
     201
     202    /* Note! The ordinal numbers are 0-based. */
     203    return pThis->iNextLineOrdinal;
     204}
     205
     206
    154207/** @copydoc RTDBGMODVTDBG::pfnLineAdd */
    155208static DECLCALLBACK(int) rtDbgModContainer_LineAdd(PRTDBGMODINT pMod, const char *pszFile, size_t cchFile, uint32_t uLineNo,
    156                                                    uint32_t iSeg, RTUINTPTR off)
    157 {
    158     PRTDBGMODCONTAINER pThis = (PRTDBGMODCONTAINER)pMod->pvDbgPriv;
     209                                                   uint32_t iSeg, RTUINTPTR off, uint32_t *piOrdinal)
     210{
     211    PRTDBGMODCTN pThis = (PRTDBGMODCTN)pMod->pvDbgPriv;
    159212
    160213    /*
     
    169222     * Create a new entry.
    170223     */
    171     PRTDBGMODCONTAINERLINE pLine = (PRTDBGMODCONTAINERLINE)RTMemAllocZ(sizeof(*pLine));
     224    PRTDBGMODCTNLINE pLine = (PRTDBGMODCTNLINE)RTMemAllocZ(sizeof(*pLine));
    172225    if (!pLine)
    173226        return VERR_NO_MEMORY;
    174     pLine->AddrCore.Key = off;
    175     pLine->uLineNo = uLineNo;
    176     pLine->pszFile = RTStrCacheEnterN(g_hDbgModStrCache, pszFile, cchFile);
     227    pLine->AddrCore.Key     = off;
     228    pLine->OrdinalCore.Key  = pThis->iNextLineOrdinal;
     229    pLine->uLineNo          = uLineNo;
     230    pLine->iSeg             = iSeg;
     231    pLine->pszFile          = RTStrCacheEnterN(g_hDbgModStrCache, pszFile, cchFile);
    177232    int rc;
    178233    if (pLine->pszFile)
    179234    {
    180235        if (RTAvlUIntPtrInsert(&pThis->paSegs[iSeg].LineAddrTree, &pLine->AddrCore))
    181             return VINF_SUCCESS;
     236        {
     237            if (RTAvlU32Insert(&pThis->LineOrdinalTree, &pLine->OrdinalCore))
     238            {
     239                if (piOrdinal)
     240                    *piOrdinal = pThis->iNextLineOrdinal;
     241                pThis->iNextLineOrdinal++;
     242                return VINF_SUCCESS;
     243            }
     244
     245            rc = VERR_INTERNAL_ERROR_5;
     246            RTAvlUIntPtrRemove(&pThis->paSegs[iSeg].LineAddrTree, pLine->AddrCore.Key);
     247        }
    182248
    183249        /* bail out */
     
    196262                                                        PRTINTPTR poffDisp, PRTDBGSYMBOL pSymbol)
    197263{
    198     PRTDBGMODCONTAINER pThis = (PRTDBGMODCONTAINER)pMod->pvDbgPriv;
     264    PRTDBGMODCTN pThis = (PRTDBGMODCTN)pMod->pvDbgPriv;
    199265
    200266    /*
     
    220286    if (!pAvlCore)
    221287        return VERR_SYMBOL_NOT_FOUND;
    222     PCRTDBGMODCONTAINERSYMBOL pMySym = RT_FROM_MEMBER(pAvlCore, RTDBGMODCONTAINERSYMBOL const, AddrCore);
     288    PCRTDBGMODCTNSYMBOL pMySym = RT_FROM_MEMBER(pAvlCore, RTDBGMODCTNSYMBOL const, AddrCore);
    223289    if (poffDisp)
    224290        *poffDisp = off - pMySym->AddrCore.Key;
     
    230296static DECLCALLBACK(int) rtDbgModContainer_SymbolByName(PRTDBGMODINT pMod, const char *pszSymbol, PRTDBGSYMBOL pSymbol)
    231297{
    232     PRTDBGMODCONTAINER pThis = (PRTDBGMODCONTAINER)pMod->pvDbgPriv;
     298    PRTDBGMODCTN pThis = (PRTDBGMODCTN)pMod->pvDbgPriv;
    233299
    234300    /*
     
    238304    if (!pStrCore)
    239305        return VERR_SYMBOL_NOT_FOUND;
    240     PCRTDBGMODCONTAINERSYMBOL pMySym = RT_FROM_MEMBER(pStrCore, RTDBGMODCONTAINERSYMBOL const, NameCore);
     306    PCRTDBGMODCTNSYMBOL pMySym = RT_FROM_MEMBER(pStrCore, RTDBGMODCTNSYMBOL const, NameCore);
    241307    return rtDbgModContainerReturnSymbol(pMySym, pSymbol);
     308}
     309
     310
     311/** @copydoc RTDBGMODVTDBG::pfnSymbolByOrdinal */
     312static DECLCALLBACK(int) rtDbgModContainer_SymbolByOrdinal(PRTDBGMODINT pMod, uint32_t iOrdinal, PRTDBGSYMBOL pSymbol)
     313{
     314    PRTDBGMODCTN pThis = (PRTDBGMODCTN)pMod->pvDbgPriv;
     315
     316    /*
     317     * Look it up in the ordinal tree.
     318     */
     319    if (iOrdinal >= pThis->iNextSymbolOrdinal)
     320        return pThis->iNextSymbolOrdinal
     321             ? VERR_DBG_NO_SYMBOLS
     322             : VERR_SYMBOL_NOT_FOUND;
     323    PAVLU32NODECORE pAvlCore = RTAvlU32Get(&pThis->SymbolOrdinalTree, iOrdinal);
     324    AssertReturn(pAvlCore, VERR_SYMBOL_NOT_FOUND);
     325    PCRTDBGMODCTNSYMBOL pMySym = RT_FROM_MEMBER(pAvlCore, RTDBGMODCTNSYMBOL const, OrdinalCore);
     326    return rtDbgModContainerReturnSymbol(pMySym, pSymbol);
     327}
     328
     329
     330/** @copydoc RTDBGMODVTDBG::pfnSymbolCount */
     331static DECLCALLBACK(uint32_t) rtDbgModContainer_SymbolCount(PRTDBGMODINT pMod)
     332{
     333    PRTDBGMODCTN pThis = (PRTDBGMODCTN)pMod->pvDbgPriv;
     334
     335    /* Note! The ordinal numbers are 0-based. */
     336    return pThis->iNextSymbolOrdinal;
    242337}
    243338
     
    245340/** @copydoc RTDBGMODVTDBG::pfnSymbolAdd */
    246341static DECLCALLBACK(int) rtDbgModContainer_SymbolAdd(PRTDBGMODINT pMod, const char *pszSymbol, size_t cchSymbol,
    247                                                      RTDBGSEGIDX iSeg, RTUINTPTR off, RTUINTPTR cb, uint32_t fFlags)
    248 {
    249     PRTDBGMODCONTAINER pThis = (PRTDBGMODCONTAINER)pMod->pvDbgPriv;
     342                                                     RTDBGSEGIDX iSeg, RTUINTPTR off, RTUINTPTR cb, uint32_t fFlags,
     343                                                     uint32_t *piOrdinal)
     344{
     345    PRTDBGMODCTN pThis = (PRTDBGMODCTN)pMod->pvDbgPriv;
    250346
    251347    /*
     
    264360     * Create a new entry.
    265361     */
    266     PRTDBGMODCONTAINERSYMBOL pSymbol = (PRTDBGMODCONTAINERSYMBOL)RTMemAllocZ(sizeof(*pSymbol));
     362    PRTDBGMODCTNSYMBOL pSymbol = (PRTDBGMODCTNSYMBOL)RTMemAllocZ(sizeof(*pSymbol));
    267363    if (!pSymbol)
    268364        return VERR_NO_MEMORY;
     
    270366    pSymbol->AddrCore.Key       = off;
    271367    pSymbol->AddrCore.KeyLast   = off + RT_MIN(cb, 1);
     368    pSymbol->OrdinalCore.Key    = pThis->iNextSymbolOrdinal;
    272369    pSymbol->iSeg               = iSeg;
    273370    pSymbol->cb                 = cb;
     
    279376        if (RTStrSpaceInsert(&pThis->Names, &pSymbol->NameCore))
    280377        {
    281             if (RTAvlrUIntPtrInsert(  iSeg == RTDBGSEGIDX_ABS
    282                                     ? &pThis->AbsAddrTree
    283                                     : &pThis->paSegs[iSeg].SymAddrTree,
    284                                     &pSymbol->AddrCore))
    285                 return VINF_SUCCESS;
    286 
    287             /* bail out */
    288             rc = VERR_DBG_ADDRESS_CONFLICT;
     378            PAVLRUINTPTRTREE pAddrTree = iSeg == RTDBGSEGIDX_ABS
     379                                       ? &pThis->AbsAddrTree
     380                                       : &pThis->paSegs[iSeg].SymAddrTree;
     381            if (RTAvlrUIntPtrInsert(pAddrTree, &pSymbol->AddrCore))
     382            {
     383                if (RTAvlU32Insert(&pThis->LineOrdinalTree, &pSymbol->OrdinalCore))
     384                {
     385                    if (piOrdinal)
     386                        *piOrdinal = pThis->iNextSymbolOrdinal;
     387                    pThis->iNextSymbolOrdinal++;
     388                    return VINF_SUCCESS;
     389                }
     390
     391                /* bail out */
     392                rc = VERR_INTERNAL_ERROR_5;
     393                RTAvlrUIntPtrRemove(pAddrTree, pSymbol->AddrCore.Key);
     394            }
     395            else
     396                rc = VERR_DBG_ADDRESS_CONFLICT;
    289397            RTStrSpaceRemove(&pThis->Names, pSymbol->NameCore.pszString);
    290398        }
     
    303411static DECLCALLBACK(RTDBGSEGIDX) rtDbgModContainer_RvaToSegOff(PRTDBGMODINT pMod, RTUINTPTR uRva, PRTUINTPTR poffSeg)
    304412{
    305     PRTDBGMODCONTAINER          pThis = (PRTDBGMODCONTAINER)pMod->pvDbgPriv;
    306     PCRTDBGMODCONTAINERSEGMENT  paSeg = pThis->paSegs;
     413    PRTDBGMODCTN          pThis = (PRTDBGMODCTN)pMod->pvDbgPriv;
     414    PCRTDBGMODCTNSEGMENT  paSeg = pThis->paSegs;
    307415    uint32_t const              cSegs = pThis->cSegs;
    308416    if (cSegs <= 7)
     
    366474static DECLCALLBACK(int)  rtDbgModContainer_DestroyTreeNode(PAVLRUINTPTRNODECORE pNode, void *pvUser)
    367475{
    368     PRTDBGMODCONTAINERSYMBOL pSym = RT_FROM_MEMBER(pNode, RTDBGMODCONTAINERSYMBOL, AddrCore);
     476    PRTDBGMODCTNSYMBOL pSym = RT_FROM_MEMBER(pNode, RTDBGMODCTNSYMBOL, AddrCore);
    369477    RTStrCacheRelease(g_hDbgModStrCache, pSym->NameCore.pszString);
    370478    pSym->NameCore.pszString = NULL;
     
    377485static DECLCALLBACK(int) rtDbgModContainer_Close(PRTDBGMODINT pMod)
    378486{
    379     PRTDBGMODCONTAINER pThis = (PRTDBGMODCONTAINER)pMod->pvDbgPriv;
     487    PRTDBGMODCTN pThis = (PRTDBGMODCTN)pMod->pvDbgPriv;
    380488
    381489    /*
     
    416524    /*.pfnClose = */            rtDbgModContainer_Close,
    417525    /*.pfnRvaToSegOff = */      rtDbgModContainer_RvaToSegOff,
     526
     527    /*.pfnSegmentAdd = */       NULL,//rtDbgModContainer_SegmentAdd,
     528    /*.pfnSegmentCount = */     NULL,//rtDbgModContainer_SegmentCount,
     529    /*.pfnSegmentByIndex = */   NULL,//rtDbgModContainer_SegmentByIndex,
     530
    418531    /*.pfnSymbolAdd = */        rtDbgModContainer_SymbolAdd,
     532    /*.pfnSymbolCount = */      rtDbgModContainer_SymbolCount,
     533    /*.pfnSymbolByOrdinal = */  rtDbgModContainer_SymbolByOrdinal,
    419534    /*.pfnSymbolByName = */     rtDbgModContainer_SymbolByName,
    420535    /*.pfnSymbolByAddr = */     rtDbgModContainer_SymbolByAddr,
     536
    421537    /*.pfnLineAdd = */          rtDbgModContainer_LineAdd,
     538    /*.pfnLineCount = */        rtDbgModContainer_LineCount,
     539    /*.pfnLineByOrdinal = */    rtDbgModContainer_LineByOrdinal,
    422540    /*.pfnLineByAddr = */       rtDbgModContainer_LineByAddr,
     541
    423542    /*.u32EndMagic = */         RTDBGMODVTDBG_MAGIC
    424543};
     
    435554int rtDbgModContainerCreate(PRTDBGMODINT pMod, RTUINTPTR cb)
    436555{
    437     PRTDBGMODCONTAINER pThis = (PRTDBGMODCONTAINER)RTMemAlloc(sizeof(*pThis));
     556    PRTDBGMODCTN pThis = (PRTDBGMODCTN)RTMemAlloc(sizeof(*pThis));
    438557    if (!pThis)
    439558        return VERR_NO_MEMORY;
     
    441560    pThis->Names = NULL;
    442561    pThis->AbsAddrTree = NULL;
     562    pThis->SymbolOrdinalTree = NULL;
     563    pThis->LineOrdinalTree = NULL;
    443564    pThis->paSegs = NULL;
    444565    pThis->cSegs = 0;
    445     pThis->cb = cb;
     566    pThis->cb = cb; /** @todo the module size stuff doesn't quite make sense yet. Need to look at segments first, I guess. */
     567    pThis->iNextSymbolOrdinal = 0;
     568    pThis->iNextLineOrdinal = 0;
    446569
    447570    pMod->pDbgVt = &g_rtDbgModVtDbgContainer;
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette