VirtualBox

Changeset 47824 in vbox


Ignore:
Timestamp:
Aug 17, 2013 11:32:21 PM (11 years ago)
Author:
vboxsync
Message:

RTDbgDwarf: Read gcc 4.8.1 dwarf output.

File:
1 edited

Legend:

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

    r47332 r47824  
    142142#define DW_TAG_template_alias               UINT16_C(0x0043)
    143143#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)
    144146#define DW_TAG_hi_user                      UINT16_C(0xffff)
    145147/** @} */
     
    695697    uint8_t             fHaveLowAddress  : 1;
    696698    uint8_t             fHaveHighAddress : 1;
     699    uint8_t             fHaveHighIsAddress : 1;
    697700    uint8_t             fHaveRanges      : 1;
    698701} RTDWARFADDRRANGE;
     
    12001203
    12011204
     1205
    12021206/** @callback_method_impl{FNRTLDRENUMSEGS} */
    12031207static DECLCALLBACK(int) rtDbgModDwarfScanSegmentsCallback(RTLDRMOD hLdrMod, PCRTLDRSEG pSeg, void *pvUser)
     
    15001504    }
    15011505
    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);
    15041508}
    15051509
     
    31803184        }
    31813185        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
    31833195    }
    31843196    pRange->cAttrs++;
     
    32013213    switch (uForm)
    32023214    {
    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;
    32063219        default:
    32073220            AssertMsgFailedReturn(("%#x\n", uForm), VERR_DWARF_UNEXPECTED_FORM);
     
    38313844                            if (RT_SUCCESS(rc))
    38323845                            {
     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;
    38333851                                rc = RTDbgModSymbolAdd(pThis->hCnt,
    38343852                                                       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*/);
    38383854                                AssertMsg(RT_SUCCESS(rc) || rc == VERR_DBG_DUPLICATE_SYMBOL, ("%Rrc\n", rc));
    38393855                            }
     
    43134329            {
    43144330                pszName  = "<unknown>";
    4315                 pDieDesc = g_aTagDescs[0].pDesc;
     4331                pDieDesc = &g_CoreDieDesc;
    43164332            }
    43174333            Log4(("%08x: %*stag=%s (%#x, abbrev %u)%s\n", offLog, cDepth * 2, "", pszName,
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