Changeset 47824 in vbox
- Timestamp:
- Aug 17, 2013 11:32:21 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/common/dbg/dbgmoddwarf.cpp
r47332 r47824 142 142 #define DW_TAG_template_alias UINT16_C(0x0043) 143 143 #define DW_TAG_lo_user UINT16_C(0x4080) 144 #define DW_TAG_GNU_call_site UINT16_C(0x4109) 145 #define DW_TAG_GNU_call_site_parameter UINT16_C(0x410a) 144 146 #define DW_TAG_hi_user UINT16_C(0xffff) 145 147 /** @} */ … … 695 697 uint8_t fHaveLowAddress : 1; 696 698 uint8_t fHaveHighAddress : 1; 699 uint8_t fHaveHighIsAddress : 1; 697 700 uint8_t fHaveRanges : 1; 698 701 } RTDWARFADDRRANGE; … … 1200 1203 1201 1204 1205 1202 1206 /** @callback_method_impl{FNRTLDRENUMSEGS} */ 1203 1207 static DECLCALLBACK(int) rtDbgModDwarfScanSegmentsCallback(RTLDRMOD hLdrMod, PCRTLDRSEG pSeg, void *pvUser) … … 1500 1504 } 1501 1505 1502 //return pThis->pImgMod->pImgVt->pfnRvaToSegOffset(pThis->pImgMod, LinkAddress, piSeg, poffSeg);1503 return pThis->pImgMod->pImgVt->pfnLinkAddressToSegOffset(pThis->pImgMod, LinkAddress, piSeg, poffSeg);1506 return pThis->pImgMod->pImgVt->pfnRvaToSegOffset(pThis->pImgMod, LinkAddress, piSeg, poffSeg); 1507 //return pThis->pImgMod->pImgVt->pfnLinkAddressToSegOffset(pThis->pImgMod, LinkAddress, piSeg, poffSeg); 1504 1508 } 1505 1509 … … 3180 3184 } 3181 3185 pRange->fHaveHighAddress = true; 3182 pRange->uHighAddress = uAddr; 3186 pRange->fHaveHighIsAddress = uForm == DW_FORM_addr; 3187 if (!pRange->fHaveHighIsAddress && pRange->fHaveLowAddress) 3188 { 3189 pRange->fHaveHighIsAddress = true; 3190 pRange->uHighAddress = uAddr + pRange->uLowAddress; 3191 } 3192 else 3193 pRange->uHighAddress = uAddr; 3194 3183 3195 } 3184 3196 pRange->cAttrs++; … … 3201 3213 switch (uForm) 3202 3214 { 3203 case DW_FORM_addr: off = rtDwarfCursor_GetNativeUOff(pCursor, 0); break; 3204 case DW_FORM_data4: off = rtDwarfCursor_GetU32(pCursor, 0); break; 3205 case DW_FORM_data8: off = rtDwarfCursor_GetU64(pCursor, 0); break; 3215 case DW_FORM_addr: off = rtDwarfCursor_GetNativeUOff(pCursor, 0); break; 3216 case DW_FORM_data4: off = rtDwarfCursor_GetU32(pCursor, 0); break; 3217 case DW_FORM_data8: off = rtDwarfCursor_GetU64(pCursor, 0); break; 3218 case DW_FORM_sec_offset: off = rtDwarfCursor_GetUOff(pCursor, 0); break; 3206 3219 default: 3207 3220 AssertMsgFailedReturn(("%#x\n", uForm), VERR_DWARF_UNEXPECTED_FORM); … … 3831 3844 if (RT_SUCCESS(rc)) 3832 3845 { 3846 uint64_t cb; 3847 if (pSubProgram->PcRange.uHighAddress >= pSubProgram->PcRange.uLowAddress) 3848 cb = pSubProgram->PcRange.uHighAddress - pSubProgram->PcRange.uLowAddress; 3849 else 3850 cb = 1; 3833 3851 rc = RTDbgModSymbolAdd(pThis->hCnt, 3834 3852 rtDwarfInfo_SelectName(pSubProgram->pszName, pSubProgram->pszLinkageName), 3835 iSeg, offSeg, 3836 pSubProgram->PcRange.uHighAddress - pSubProgram->PcRange.uLowAddress, 3837 0 /*fFlags*/, NULL /*piOrdinal*/); 3853 iSeg, offSeg, cb, 0 /*fFlags*/, NULL /*piOrdinal*/); 3838 3854 AssertMsg(RT_SUCCESS(rc) || rc == VERR_DBG_DUPLICATE_SYMBOL, ("%Rrc\n", rc)); 3839 3855 } … … 4313 4329 { 4314 4330 pszName = "<unknown>"; 4315 pDieDesc = g_aTagDescs[0].pDesc;4331 pDieDesc = &g_CoreDieDesc; 4316 4332 } 4317 4333 Log4(("%08x: %*stag=%s (%#x, abbrev %u)%s\n", offLog, cDepth * 2, "", pszName,
Note:
See TracChangeset
for help on using the changeset viewer.