VirtualBox

Changeset 84690 in vbox for trunk/src/VBox/Debugger


Ignore:
Timestamp:
Jun 5, 2020 10:54:19 AM (5 years ago)
Author:
vboxsync
Message:

Debugger/GdbRemoteStub: Implement detach request and fix querying registers

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Debugger/DBGCGdbRemoteStub.cpp

    r84660 r84690  
    984984                   cchStr = RTStrPrintf2(pachXmlCur, cbLeft,
    985985                                         "<reg name=\"%s\" bitsize=\"%u\" regnum=\"%u\" type=\"%s\" group=\"%s\"/>\n",
    986                                          pReg->pszName, pReg->cBits, pReg->enmReg, pReg->pszType, pReg->pszGroup);
     986                                         pReg->pszName, pReg->cBits, i, pReg->pszType, pReg->pszGroup);
    987987                else
    988988                   cchStr = RTStrPrintf2(pachXmlCur, cbLeft,
    989989                                         "<reg name=\"%s\" bitsize=\"%u\" regnum=\"%u\" type=\"%s\"/>\n",
    990                                          pReg->pszName, pReg->cBits, pReg->enmReg, pReg->pszType);
     990                                         pReg->pszName, pReg->cBits, i, pReg->pszType);
    991991
    992992                if (cchStr > 0)
     
    10181018 * @param   enmReg              The register to look for.
    10191019 */
    1020 static const GDBREGDESC *dbgcGdbStubRegGet(DBGFREG enmReg)
    1021 {
    1022     for (uint32_t i = 0; i < RT_ELEMENTS(g_aGdbRegs); i++)
    1023     {
    1024         const struct GDBREGDESC *pReg = &g_aGdbRegs[i];
    1025 
    1026         if (pReg->enmReg == enmReg)
    1027             return pReg;
    1028     }
     1020static const GDBREGDESC *dbgcGdbStubRegGet(uint32_t idxReg)
     1021{
     1022    if (RT_LIKELY(idxReg < RT_ELEMENTS(g_aGdbRegs)))
     1023        return &g_aGdbRegs[idxReg];
    10291024
    10301025    return NULL;
     
    14961491                    DBGFREGVAL RegVal;
    14971492                    DBGFREGVALTYPE enmType;
    1498                     DBGFREG enmReg = (DBGFREG)uReg;
    1499                     const GDBREGDESC *pReg = dbgcGdbStubRegGet(enmReg);
     1493                    const GDBREGDESC *pReg = dbgcGdbStubRegGet(uReg);
    15001494                    if (RT_LIKELY(pReg))
    15011495                    {
     
    15371531                if (RT_SUCCESS(rc))
    15381532                {
    1539                     DBGFREG enmReg = (DBGFREG)uReg;
    1540                     const GDBREGDESC *pReg = dbgcGdbStubRegGet(enmReg);
     1533                    const GDBREGDESC *pReg = dbgcGdbStubRegGet(uReg);
    15411534
    15421535                    if (pReg)
     
    16731666                for (;;)
    16741667                    exit(126);
     1668                break;
     1669            }
     1670            case 'D': /* Detach */
     1671            {
     1672                rc = dbgcGdbStubCtxReplySendOk(pThis);
     1673                if (RT_SUCCESS(rc))
     1674                    rc = VERR_DBGC_QUIT;
    16751675                break;
    16761676            }
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