VirtualBox

Ignore:
Timestamp:
Aug 26, 2011 12:58:47 PM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
73701
Message:

IPRT: More debug info hacking.

Location:
trunk/src/VBox/Runtime/common/ldr
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/ldr/ldrELFRelocatable.cpp.h

    r38515 r38547  
    696696
    697697
     698/** @copydoc RTLDROPS::pfnEnumSegments. */
     699static DECLCALLBACK(int) RTLDRELF_NAME(EnumSegments)(PRTLDRMODINTERNAL pMod, PFNRTLDRENUMSEGS pfnCallback, void *pvUser)
     700{
     701    PRTLDRMODELF pModElf = (PRTLDRMODELF)pMod;
     702
     703    return VERR_NOT_IMPLEMENTED;
     704}
     705
     706
     707
    698708/**
    699709 * The ELF module operations.
     
    716726    RTLDRELF_NAME(GetSymbolEx),
    717727    RTLDRELF_NAME(EnumDbgInfo),
     728    RTLDRELF_NAME(EnumSegments),
    718729    42
    719730};
  • trunk/src/VBox/Runtime/common/ldr/ldrEx.cpp

    r38515 r38547  
    209209 * @remark  Not supported for RTLdrLoad() images.
    210210 */
    211 RTDECL(int) RTLdrGetBits(RTLDRMOD hLdrMod, void *pvBits, RTUINTPTR BaseAddress, PFNRTLDRIMPORT pfnGetImport, void *pvUser)
     211RTDECL(int) RTLdrGetBits(RTLDRMOD hLdrMod, void *pvBits, RTLDRADDR BaseAddress, PFNRTLDRIMPORT pfnGetImport, void *pvUser)
    212212{
    213213    LogFlow(("RTLdrGetBits: hLdrMod=%RTldrm pvBits=%p BaseAddress=%RTptr pfnGetImport=%p pvUser=%p\n",
     
    247247 * @remark  Not supported for RTLdrLoad() images.
    248248 */
    249 RTDECL(int) RTLdrRelocate(RTLDRMOD hLdrMod, void *pvBits, RTUINTPTR NewBaseAddress, RTUINTPTR OldBaseAddress,
     249RTDECL(int) RTLdrRelocate(RTLDRMOD hLdrMod, void *pvBits, RTLDRADDR NewBaseAddress, RTLDRADDR OldBaseAddress,
    250250                          PFNRTLDRIMPORT pfnGetImport, void *pvUser)
    251251{
     
    289289 * @param   pValue          Where to store the symbol value.
    290290 */
    291 RTDECL(int) RTLdrGetSymbolEx(RTLDRMOD hLdrMod, const void *pvBits, RTUINTPTR BaseAddress, const char *pszSymbol, RTUINTPTR *pValue)
     291RTDECL(int) RTLdrGetSymbolEx(RTLDRMOD hLdrMod, const void *pvBits, RTLDRADDR BaseAddress, const char *pszSymbol,
     292                             PRTLDRADDR pValue)
    292293{
    293294    LogFlow(("RTLdrGetSymbolEx: hLdrMod=%RTldrm pvBits=%p BaseAddress=%RTptr pszSymbol=%p:{%s} pValue\n",
     
    338339 * @remark  Not supported for RTLdrLoad() images.
    339340 */
    340 RTDECL(int) RTLdrEnumSymbols(RTLDRMOD hLdrMod, unsigned fFlags, const void *pvBits, RTUINTPTR BaseAddress, PFNRTLDRENUMSYMS pfnCallback, void *pvUser)
     341RTDECL(int) RTLdrEnumSymbols(RTLDRMOD hLdrMod, unsigned fFlags, const void *pvBits, RTLDRADDR BaseAddress,
     342                             PFNRTLDRENUMSYMS pfnCallback, void *pvUser)
    341343{
    342344    LogFlow(("RTLdrEnumSymbols: hLdrMod=%RTldrm fFlags=%#x pvBits=%p BaseAddress=%RTptr pfnCallback=%p pvUser=%p\n",
     
    390392RT_EXPORT_SYMBOL(RTLdrEnumDbgInfo);
    391393
     394
     395RTDECL(int) RTLdrEnumSegments(RTLDRMOD hLdrMod, PFNRTLDRENUMSEGS pfnCallback, void *pvUser)
     396{
     397    LogFlow(("RTLdrEnumSegments: hLdrMod=%RTldrm pfnCallback=%p pvUser=%p\n",
     398             hLdrMod, pfnCallback, pvUser));
     399
     400    /*
     401     * Validate input.
     402     */
     403    AssertMsgReturn(rtldrIsValid(hLdrMod), ("hLdrMod=%p\n", hLdrMod), VERR_INVALID_HANDLE);
     404    AssertMsgReturn(RT_VALID_PTR(pfnCallback), ("pfnCallback=%p\n", pfnCallback), VERR_INVALID_PARAMETER);
     405    PRTLDRMODINTERNAL pMod = (PRTLDRMODINTERNAL)hLdrMod;
     406    //AssertMsgReturn(pMod->eState == LDR_STATE_OPENED, ("eState=%d\n", pMod->eState), VERR_WRONG_ORDER);
     407
     408    /*
     409     * Do it.
     410     */
     411    int rc;
     412    if (pMod->pOps->pfnEnumSegments)
     413        rc = pMod->pOps->pfnEnumSegments(pMod, pfnCallback, pvUser);
     414    else
     415        rc = VERR_NOT_SUPPORTED;
     416
     417    LogFlow(("RTLdrEnumSegments: returns %Rrc\n", rc));
     418    return rc;
     419
     420}
     421RT_EXPORT_SYMBOL(RTLdrEnumSegments);
     422
  • trunk/src/VBox/Runtime/common/ldr/ldrNative.cpp

    r38515 r38547  
    6969    rtldrNativeEnumSymbols,
    7070    /* ext: */
     71    NULL,
    7172    NULL,
    7273    NULL,
  • trunk/src/VBox/Runtime/common/ldr/ldrPE.cpp

    r38515 r38547  
    776776
    777777
     778/** @copydoc RTLDROPS::pfnEnumSegments. */
     779static DECLCALLBACK(int) rtldrPE_EnumSegments(PRTLDRMODINTERNAL pMod, PFNRTLDRENUMSEGS pfnCallback, void *pvUser)
     780{
     781    return VINF_NOT_SUPPORTED;
     782}
     783
     784
    778785/** @copydoc RTLDROPS::pfnDone */
    779786static DECLCALLBACK(int) rtldrPEDone(PRTLDRMODINTERNAL pMod)
     
    835842        rtldrPEGetSymbolEx,
    836843        rtldrPE_EnumDbgInfo,
     844        rtldrPE_EnumSegments,
    837845        42
    838846    },
     
    859867        rtldrPEGetSymbolEx,
    860868        rtldrPE_EnumDbgInfo,
     869        rtldrPE_EnumSegments,
    861870        42
    862871    },
  • trunk/src/VBox/Runtime/common/ldr/ldrkStuff.cpp

    r38531 r38547  
    629629
    630630
     631/** @copydoc RTLDROPS::pfnEnumSegments. */
     632static DECLCALLBACK(int) rtkldr_EnumSegments(PRTLDRMODINTERNAL pMod, PFNRTLDRENUMSEGS pfnCallback, void *pvUser)
     633{
     634    PRTLDRMODKLDR   pThis      = (PRTLDRMODKLDR)pMod;
     635    uint32_t const  cSegments  = pThis->pMod->cSegments;
     636    PCKLDRSEG       paSegments = &pThis->pMod->aSegments[0];
     637
     638    for (uint32_t iSeg = 0; iSeg < cSegments; iSeg++)
     639    {
     640        RTLDRSEG Seg;
     641
     642        Seg.pchName     = paSegments[iSeg].pchName;
     643        Seg.cchName     = paSegments[iSeg].cchName;
     644        Seg.SelFlat     = paSegments[iSeg].SelFlat;
     645        Seg.Sel16bit    = paSegments[iSeg].Sel16bit;
     646        Seg.fFlags      = paSegments[iSeg].fFlags;
     647        AssertCompile(KLDRSEG_FLAG_16BIT          == RTLDRSEG_FLAG_16BIT      );
     648        AssertCompile(KLDRSEG_FLAG_OS2_ALIAS16    == RTLDRSEG_FLAG_OS2_ALIAS16);
     649        AssertCompile(KLDRSEG_FLAG_OS2_CONFORM    == RTLDRSEG_FLAG_OS2_CONFORM);
     650        AssertCompile(KLDRSEG_FLAG_OS2_IOPL       == RTLDRSEG_FLAG_OS2_IOPL   );
     651
     652        switch (paSegments[iSeg].enmProt)
     653        {
     654            default:
     655                AssertMsgFailed(("%d\n", paSegments[iSeg].enmProt));
     656            case KPROT_NOACCESS:
     657                Seg.fProt = 0;
     658                break;
     659
     660            case KPROT_READONLY:            Seg.fProt = RTMEM_PROT_READ; break;
     661            case KPROT_READWRITE:           Seg.fProt = RTMEM_PROT_READ | RTMEM_PROT_WRITE; break;
     662            case KPROT_WRITECOPY:           Seg.fProt = RTMEM_PROT_WRITE; break;
     663            case KPROT_EXECUTE:             Seg.fProt = RTMEM_PROT_EXEC; break;
     664            case KPROT_EXECUTE_READ:        Seg.fProt = RTMEM_PROT_EXEC | RTMEM_PROT_READ; break;
     665            case KPROT_EXECUTE_READWRITE:   Seg.fProt = RTMEM_PROT_EXEC | RTMEM_PROT_READ | RTMEM_PROT_WRITE; break;
     666            case KPROT_EXECUTE_WRITECOPY:   Seg.fProt = RTMEM_PROT_EXEC | RTMEM_PROT_WRITE; break;
     667        }
     668        Seg.cb          = paSegments[iSeg].cb;
     669        Seg.Alignment   = paSegments[iSeg].Alignment;
     670        Seg.LinkAddress = paSegments[iSeg].LinkAddress;
     671        Seg.offFile     = paSegments[iSeg].offFile;
     672        Seg.cbFile      = paSegments[iSeg].cbFile;
     673        Seg.RVA         = paSegments[iSeg].RVA;
     674        Seg.cbMapped    = paSegments[iSeg].cbMapped;
     675
     676        int rc = pfnCallback(pMod, &Seg, pvUser);
     677        if (rc != VINF_SUCCESS)
     678            return rc;
     679    }
     680
     681    return VINF_SUCCESS;
     682}
     683
     684
    631685/**
    632686 * Operations for a kLdr module.
     
    645699    rtkldr_GetSymbolEx,
    646700    rtkldr_EnumDbgInfo,
     701    rtkldr_EnumSegments,
    647702    42
    648703};
Note: See TracChangeset for help on using the changeset viewer.

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