/** * Creates a generic debug info container and associates it with the module. * * @returns IPRT status code. * @param pMod The module instance. * @param cbSeg The size of the initial segment. 0 if segments are to be * created manually later on. */ int rtDbgModContainerCreate(PRTDBGMODINT pMod, RTUINTPTR cbSeg) { PRTDBGMODCTN pThis = (PRTDBGMODCTN)RTMemAlloc(sizeof(*pThis)); if (!pThis) return VERR_NO_MEMORY; pThis->Names = NULL; pThis->AbsAddrTree = NULL; pThis->SymbolOrdinalTree = NULL; pThis->LineOrdinalTree = NULL; pThis->paSegs = NULL; pThis->cSegs = 0; pThis->cb = 0; pThis->iNextSymbolOrdinal = 0; pThis->iNextLineOrdinal = 0; pMod->pDbgVt = &g_rtDbgModVtDbgContainer; pMod->pvDbgPriv = pThis; #ifdef RTDBGMODCNT_WITH_MEM_CACHE int rc = RTMemCacheCreate(&pThis->hLineNumAllocator, sizeof(RTDBGMODCTNLINE), sizeof(void *), UINT32_MAX, NULL /*pfnCtor*/, NULL /*pfnDtor*/, NULL /*pvUser*/, 0 /*fFlags*/); #else int rc = VINF_SUCCESS; #endif if (RT_SUCCESS(rc)) { /* * Add the initial segment. */ if (cbSeg) rc = rtDbgModContainer_SegmentAdd(pMod, 0, cbSeg, "default", sizeof("default") - 1, 0, NULL); if (RT_SUCCESS(rc)) return rc; #ifdef RTDBGMODCNT_WITH_MEM_CACHE RTMemCacheDestroy(pThis->hLineNumAllocator); #endif } RTMemFree(pThis); pMod->pDbgVt = NULL; pMod->pvDbgPriv = NULL; return rc; }
/** * Creates a generic debug info container and associates it with the module. * * @returns IPRT status code. * @param pMod The module instance. * @param cbSeg The size of the initial segment. 0 if segments are to be * created manually later on. */ int rtDbgModContainerCreate(PRTDBGMODINT pMod, RTUINTPTR cbSeg) { PRTDBGMODCTN pThis = (PRTDBGMODCTN)RTMemAlloc(sizeof(*pThis)); if (!pThis) return VERR_NO_MEMORY; pThis->Names = NULL; pThis->AbsAddrTree = NULL; pThis->SymbolOrdinalTree = NULL; pThis->LineOrdinalTree = NULL; pThis->paSegs = NULL; pThis->cSegs = 0; pThis->cb = 0; pThis->iNextSymbolOrdinal = 0; pThis->iNextLineOrdinal = 0; pMod->pDbgVt = &g_rtDbgModVtDbgContainer; pMod->pvDbgPriv = pThis; /* * Add the initial segment. */ if (cbSeg) { int rc = rtDbgModContainer_SegmentAdd(pMod, 0, cbSeg, "default", sizeof("default") - 1, 0, NULL); if (RT_FAILURE(rc)) { RTMemFree(pThis); pMod->pDbgVt = NULL; pMod->pvDbgPriv = NULL; return rc; } } return VINF_SUCCESS; }