VirtualBox

Changeset 55452 in vbox


Ignore:
Timestamp:
Apr 27, 2015 1:56:14 PM (9 years ago)
Author:
vboxsync
Message:

CPUM: Dump supported extra state in the verbose edition of 'cpumguest' and 'cpumhyper'.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/CPUM.cpp

    r55229 r55452  
    16311631                /** @todo This isn't entirenly correct and needs more work! */
    16321632                pHlp->pfnPrintf(pHlp,
    1633                                 "%sST(%u)=%sFPR%u={%04RX16'%08RX32'%08RX32} t%d %c%u.%022llu ^ %u",
     1633                                "%sST(%u)=%sFPR%u={%04RX16'%08RX32'%08RX32} t%d %c%u.%022llu ^ %u (*)",
    16341634                                pszPrefix, iST, pszPrefix, iFPR,
    16351635                                pFpuCtx->aRegs[0].au16[4], pFpuCtx->aRegs[0].au32[1], pFpuCtx->aRegs[0].au32[0],
     
    16411641                    pHlp->pfnPrintf(pHlp, "\n");
    16421642            }
    1643             for (unsigned iXMM = 0; iXMM < RT_ELEMENTS(pFpuCtx->aXMM); iXMM++)
    1644                 pHlp->pfnPrintf(pHlp,
    1645                                 iXMM & 1
    1646                                 ? "%sXMM%u%s=%08RX32'%08RX32'%08RX32'%08RX32\n"
    1647                                 : "%sXMM%u%s=%08RX32'%08RX32'%08RX32'%08RX32  ",
    1648                                 pszPrefix, iXMM, iXMM < 10 ? " " : "",
    1649                                 pFpuCtx->aXMM[iXMM].au32[3],
    1650                                 pFpuCtx->aXMM[iXMM].au32[2],
    1651                                 pFpuCtx->aXMM[iXMM].au32[1],
    1652                                 pFpuCtx->aXMM[iXMM].au32[0]);
     1643
     1644            pHlp->pfnPrintf(pHlp, "%sXCR0=%016RX64 %sXCR1=%016RX64 %sXSS=%016RX64 (fXStateMask=%016RX64)\n",
     1645                            pszPrefix, pCtx->aXcr[0], pszPrefix, pCtx->aXcr[1],
     1646                            pszPrefix, UINT64_C(0) /** @todo XSS */, pCtx->fXStateMask);
     1647
     1648            /* XMM/YMM/ZMM registers. */
     1649            if (pCtx->fXStateMask & XSAVE_C_YMM)
     1650            {
     1651                PCX86XSAVEYMMHI pYmmHiCtx = (PCX86XSAVEYMMHI)((uint8_t *)pCtx->CTX_SUFF(pXState) + pCtx->aoffXState[XSAVE_C_YMM]);
     1652                if (!(pCtx->fXStateMask & XSAVE_C_ZMM_HI256))
     1653                    for (unsigned i = 0; i < RT_ELEMENTS(pFpuCtx->aXMM); i++)
     1654                        pHlp->pfnPrintf(pHlp, "%sYMM%u%s=%08RX32'%08RX32'%08RX32'%08RX32'%08RX32'%08RX32'%08RX32'%08RX32\n",
     1655                                        pszPrefix, i, i < 10 ? " " : "",
     1656                                        pYmmHiCtx->aYmmHi[i].au32[3],
     1657                                        pYmmHiCtx->aYmmHi[i].au32[2],
     1658                                        pYmmHiCtx->aYmmHi[i].au32[1],
     1659                                        pYmmHiCtx->aYmmHi[i].au32[0],
     1660                                        pFpuCtx->aXMM[i].au32[3],
     1661                                        pFpuCtx->aXMM[i].au32[2],
     1662                                        pFpuCtx->aXMM[i].au32[1],
     1663                                        pFpuCtx->aXMM[i].au32[0]);
     1664                else
     1665                {
     1666                    PCX86XSAVEZMMHI256 pZmmHi256;
     1667                    pZmmHi256 = (PCX86XSAVEZMMHI256)((uint8_t *)pCtx->CTX_SUFF(pXState) + pCtx->aoffXState[XSAVE_C_ZMM_HI256]);
     1668                    for (unsigned i = 0; i < RT_ELEMENTS(pFpuCtx->aXMM); i++)
     1669                        pHlp->pfnPrintf(pHlp,
     1670                                        "%sZMM%u%s=%08RX32'%08RX32'%08RX32'%08RX32'%08RX32'%08RX32'%08RX32'%08RX32''%08RX32'%08RX32'%08RX32'%08RX32'%08RX32'%08RX32'%08RX32'%08RX32\n",
     1671                                        pszPrefix, i, i < 10 ? " " : "",
     1672                                        pZmmHi256->aHi256Regs[i].au32[7],
     1673                                        pZmmHi256->aHi256Regs[i].au32[6],
     1674                                        pZmmHi256->aHi256Regs[i].au32[5],
     1675                                        pZmmHi256->aHi256Regs[i].au32[4],
     1676                                        pZmmHi256->aHi256Regs[i].au32[3],
     1677                                        pZmmHi256->aHi256Regs[i].au32[2],
     1678                                        pZmmHi256->aHi256Regs[i].au32[1],
     1679                                        pZmmHi256->aHi256Regs[i].au32[0],
     1680                                        pYmmHiCtx->aYmmHi[i].au32[3],
     1681                                        pYmmHiCtx->aYmmHi[i].au32[2],
     1682                                        pYmmHiCtx->aYmmHi[i].au32[1],
     1683                                        pYmmHiCtx->aYmmHi[i].au32[0],
     1684                                        pFpuCtx->aXMM[i].au32[3],
     1685                                        pFpuCtx->aXMM[i].au32[2],
     1686                                        pFpuCtx->aXMM[i].au32[1],
     1687                                        pFpuCtx->aXMM[i].au32[0]);
     1688
     1689                    PCX86XSAVEZMM16HI pZmm16Hi;
     1690                    pZmm16Hi = (PCX86XSAVEZMM16HI)((uint8_t *)pCtx->CTX_SUFF(pXState) + pCtx->aoffXState[XSAVE_C_ZMM_16HI]);
     1691                    for (unsigned i = 0; i < RT_ELEMENTS(pZmm16Hi->aRegs); i++)
     1692                        pHlp->pfnPrintf(pHlp,
     1693                                        "%sZMM%u=%08RX32'%08RX32'%08RX32'%08RX32'%08RX32'%08RX32'%08RX32'%08RX32''%08RX32'%08RX32'%08RX32'%08RX32'%08RX32'%08RX32'%08RX32'%08RX32\n",
     1694                                        pszPrefix, i + 16,
     1695                                        pZmm16Hi->aRegs[i].au32[15],
     1696                                        pZmm16Hi->aRegs[i].au32[14],
     1697                                        pZmm16Hi->aRegs[i].au32[13],
     1698                                        pZmm16Hi->aRegs[i].au32[12],
     1699                                        pZmm16Hi->aRegs[i].au32[11],
     1700                                        pZmm16Hi->aRegs[i].au32[10],
     1701                                        pZmm16Hi->aRegs[i].au32[9],
     1702                                        pZmm16Hi->aRegs[i].au32[8],
     1703                                        pZmm16Hi->aRegs[i].au32[7],
     1704                                        pZmm16Hi->aRegs[i].au32[6],
     1705                                        pZmm16Hi->aRegs[i].au32[5],
     1706                                        pZmm16Hi->aRegs[i].au32[4],
     1707                                        pZmm16Hi->aRegs[i].au32[3],
     1708                                        pZmm16Hi->aRegs[i].au32[2],
     1709                                        pZmm16Hi->aRegs[i].au32[1],
     1710                                        pZmm16Hi->aRegs[i].au32[0]);
     1711                }
     1712            }
     1713            else
     1714                for (unsigned i = 0; i < RT_ELEMENTS(pFpuCtx->aXMM); i++)
     1715                    pHlp->pfnPrintf(pHlp,
     1716                                    i & 1
     1717                                    ? "%sXMM%u%s=%08RX32'%08RX32'%08RX32'%08RX32\n"
     1718                                    : "%sXMM%u%s=%08RX32'%08RX32'%08RX32'%08RX32  ",
     1719                                    pszPrefix, i, i < 10 ? " " : "",
     1720                                    pFpuCtx->aXMM[i].au32[3],
     1721                                    pFpuCtx->aXMM[i].au32[2],
     1722                                    pFpuCtx->aXMM[i].au32[1],
     1723                                    pFpuCtx->aXMM[i].au32[0]);
     1724
     1725            if (pCtx->fXStateMask & XSAVE_C_OPMASK)
     1726            {
     1727                PCX86XSAVEOPMASK pOpMask;
     1728                pOpMask = (PCX86XSAVEOPMASK)((uint8_t *)pCtx->CTX_SUFF(pXState) + pCtx->aoffXState[XSAVE_C_OPMASK]);
     1729                for (unsigned i = 0; i < RT_ELEMENTS(pOpMask->aKRegs); i += 4)
     1730                    pHlp->pfnPrintf(pHlp, "%sK%u=%016RX64  %sK%u=%016RX64  %sK%u=%016RX64  %sK%u=%016RX64\n",
     1731                                    pszPrefix, i + 0, pOpMask->aKRegs[i + 0],
     1732                                    pszPrefix, i + 1, pOpMask->aKRegs[i + 1],
     1733                                    pszPrefix, i + 2, pOpMask->aKRegs[i + 2],
     1734                                    pszPrefix, i + 3, pOpMask->aKRegs[i + 3]);
     1735            }
     1736
     1737            if (pCtx->fXStateMask & XSAVE_C_BNDREGS)
     1738            {
     1739                PCX86XSAVEBNDREGS pBndRegs;
     1740                pBndRegs = (PCX86XSAVEBNDREGS)((uint8_t *)pCtx->CTX_SUFF(pXState) + pCtx->aoffXState[XSAVE_C_BNDREGS]);
     1741                for (unsigned i = 0; i < RT_ELEMENTS(pBndRegs->aRegs); i += 2)
     1742                    pHlp->pfnPrintf(pHlp, "%sBNDREG%u=%016RX64/%016RX64  %sBNDREG%u=%016RX64/%016RX64\n",
     1743                                    pszPrefix, i, pBndRegs->aRegs[i].uLowerBound, pBndRegs->aRegs[i].uUpperBound,
     1744                                    pszPrefix, i + 1, pBndRegs->aRegs[i + 1].uLowerBound, pBndRegs->aRegs[i + 1].uUpperBound);
     1745            }
     1746
     1747            if (pCtx->fXStateMask & XSAVE_C_BNDCSR)
     1748            {
     1749                PCX86XSAVEBNDCFG pBndCfg;
     1750                pBndCfg = (PCX86XSAVEBNDCFG)((uint8_t *)pCtx->CTX_SUFF(pXState) + pCtx->aoffXState[XSAVE_C_BNDCSR]);
     1751                pHlp->pfnPrintf(pHlp, "%sBNDCFG.CONFIG=%016RX64 %sBNDCFG.STATUS=%016RX64\n",
     1752                                pszPrefix, pBndCfg->fConfig, pszPrefix, pBndCfg->fStatus);
     1753            }
     1754
    16531755            for (unsigned i = 0; i < RT_ELEMENTS(pFpuCtx->au32RsrvdRest); i++)
    16541756                if (pFpuCtx->au32RsrvdRest[i])
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