VirtualBox

Changeset 12822 in vbox


Ignore:
Timestamp:
Sep 30, 2008 7:50:05 AM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
37178
Message:

The hypervisor dump is not relevant when we're in VT-x/AMD-V mode.

Location:
trunk/src/VBox/VMM
Files:
2 edited

Legend:

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

    r12675 r12822  
    25122512                                uEIP);
    25132513
    2514             /*
    2515              * Try figure out where eip is.
    2516              */
    2517             /** @todo make query call for core code or move this function to VMM. */
    2518             /* core code? */
    2519             //if (uEIP - (RTGCUINTPTR)pVM->vmm.s.pvGCCoreCode < pVM->vmm.s.cbCoreCode)
    2520             //    pHlp->pfnPrintf(pHlp,
    2521             //                "!! EIP is in CoreCode, offset %#x\n",
    2522             //                uEIP - (RTGCUINTPTR)pVM->vmm.s.pvGCCoreCode);
    2523             //else
    2524             {   /* ask PDM */
    2525                 /** @todo ask DBGFR3Sym later. */
    2526                 char        szModName[64];
    2527                 RTGCPTR     GCPtrMod;
    2528                 char        szNearSym1[260];
    2529                 RTGCPTR     GCPtrNearSym1;
    2530                 char        szNearSym2[260];
    2531                 RTGCPTR     GCPtrNearSym2;
    2532                 int rc = PDMR3QueryModFromEIP(pVM, uEIP,
    2533                                               &szModName[0],  sizeof(szModName),  &GCPtrMod,
    2534                                               &szNearSym1[0], sizeof(szNearSym1), &GCPtrNearSym1,
    2535                                               &szNearSym2[0], sizeof(szNearSym2), &GCPtrNearSym2);
    2536                 if (VBOX_SUCCESS(rc))
     2514            /* The hypervisor dump is not relevant when we're in VT-x/AMD-V mode. */
     2515            if (!HWACCMR3IsActive(pVM))
     2516            {
     2517                /*
     2518                * Try figure out where eip is.
     2519                */
     2520                /** @todo make query call for core code or move this function to VMM. */
     2521                /* core code? */
     2522                //if (uEIP - (RTGCUINTPTR)pVM->vmm.s.pvGCCoreCode < pVM->vmm.s.cbCoreCode)
     2523                //    pHlp->pfnPrintf(pHlp,
     2524                //                "!! EIP is in CoreCode, offset %#x\n",
     2525                //                uEIP - (RTGCUINTPTR)pVM->vmm.s.pvGCCoreCode);
     2526                //else
     2527                {   /* ask PDM */
     2528                    /** @todo ask DBGFR3Sym later. */
     2529                    char        szModName[64];
     2530                    RTGCPTR     GCPtrMod;
     2531                    char        szNearSym1[260];
     2532                    RTGCPTR     GCPtrNearSym1;
     2533                    char        szNearSym2[260];
     2534                    RTGCPTR     GCPtrNearSym2;
     2535                    int rc = PDMR3QueryModFromEIP(pVM, uEIP,
     2536                                                &szModName[0],  sizeof(szModName),  &GCPtrMod,
     2537                                                &szNearSym1[0], sizeof(szNearSym1), &GCPtrNearSym1,
     2538                                                &szNearSym2[0], sizeof(szNearSym2), &GCPtrNearSym2);
     2539                    if (VBOX_SUCCESS(rc))
     2540                    {
     2541                        pHlp->pfnPrintf(pHlp,
     2542                                        "!! EIP in %s (%VGv) at rva %x near symbols:\n"
     2543                                        "!!    %VGv rva %VGv off %08x  %s\n"
     2544                                        "!!    %VGv rva %VGv off -%08x %s\n",
     2545                                        szModName,  GCPtrMod, (unsigned)(uEIP - GCPtrMod),
     2546                                        GCPtrNearSym1, GCPtrNearSym1 - GCPtrMod, (unsigned)(uEIP - GCPtrNearSym1), szNearSym1,
     2547                                        GCPtrNearSym2, GCPtrNearSym2 - GCPtrMod, (unsigned)(GCPtrNearSym2 - uEIP), szNearSym2);
     2548                    }
     2549                    else
     2550                        pHlp->pfnPrintf(pHlp,
     2551                                        "!! EIP is not in any code known to VMM!\n");
     2552                }
     2553
     2554                /* Disassemble the instruction. */
     2555                char szInstr[256];
     2556                rc2 = DBGFR3DisasInstrEx(pVM, 0, 0, DBGF_DISAS_FLAGS_CURRENT_HYPER, &szInstr[0], sizeof(szInstr), NULL);
     2557                if (VBOX_SUCCESS(rc2))
     2558                    pHlp->pfnPrintf(pHlp,
     2559                                    "!! %s\n", szInstr);
     2560
     2561                /* Dump the hypervisor cpu state. */
     2562                pHlp->pfnPrintf(pHlp,
     2563                                "!!\n"
     2564                                "!!\n"
     2565                                "!!\n");
     2566                rc2 = DBGFR3Info(pVM, "cpumhyper", "verbose", pHlp);
     2567                fDoneHyper = true;
     2568
     2569                /* Callstack. */
     2570                DBGFSTACKFRAME Frame = {0};
     2571                rc2 = DBGFR3StackWalkBeginHyper(pVM, &Frame);
     2572                if (VBOX_SUCCESS(rc2))
    25372573                {
    25382574                    pHlp->pfnPrintf(pHlp,
    2539                                     "!! EIP in %s (%VGv) at rva %x near symbols:\n"
    2540                                     "!!    %VGv rva %VGv off %08x  %s\n"
    2541                                     "!!    %VGv rva %VGv off -%08x %s\n",
    2542                                     szModName,  GCPtrMod, (unsigned)(uEIP - GCPtrMod),
    2543                                     GCPtrNearSym1, GCPtrNearSym1 - GCPtrMod, (unsigned)(uEIP - GCPtrNearSym1), szNearSym1,
    2544                                     GCPtrNearSym2, GCPtrNearSym2 - GCPtrMod, (unsigned)(GCPtrNearSym2 - uEIP), szNearSym2);
     2575                                    "!!\n"
     2576                                    "!! Call Stack:\n"
     2577                                    "!!\n"
     2578                                    "EBP      Ret EBP  Ret CS:EIP    Arg0     Arg1     Arg2     Arg3     CS:EIP        Symbol [line]\n");
     2579                    do
     2580                    {
     2581                        pHlp->pfnPrintf(pHlp,
     2582                                        "%08RX32 %08RX32 %04RX32:%08RX32 %08RX32 %08RX32 %08RX32 %08RX32",
     2583                                        (uint32_t)Frame.AddrFrame.off,
     2584                                        (uint32_t)Frame.AddrReturnFrame.off,
     2585                                        (uint32_t)Frame.AddrReturnPC.Sel,
     2586                                        (uint32_t)Frame.AddrReturnPC.off,
     2587                                        Frame.Args.au32[0],
     2588                                        Frame.Args.au32[1],
     2589                                        Frame.Args.au32[2],
     2590                                        Frame.Args.au32[3]);
     2591                        pHlp->pfnPrintf(pHlp, " %RTsel:%08RGv", Frame.AddrPC.Sel, Frame.AddrPC.off);
     2592                        if (Frame.pSymPC)
     2593                        {
     2594                            RTGCINTPTR offDisp = Frame.AddrPC.FlatPtr - Frame.pSymPC->Value;
     2595                            if (offDisp > 0)
     2596                                pHlp->pfnPrintf(pHlp, " %s+%llx", Frame.pSymPC->szName, (int64_t)offDisp);
     2597                            else if (offDisp < 0)
     2598                                pHlp->pfnPrintf(pHlp, " %s-%llx", Frame.pSymPC->szName, -(int64_t)offDisp);
     2599                            else
     2600                                pHlp->pfnPrintf(pHlp, " %s", Frame.pSymPC->szName);
     2601                        }
     2602                        if (Frame.pLinePC)
     2603                            pHlp->pfnPrintf(pHlp, " [%s @ 0i%d]", Frame.pLinePC->szFilename, Frame.pLinePC->uLineNo);
     2604                        pHlp->pfnPrintf(pHlp, "\n");
     2605
     2606                        /* next */
     2607                        rc2 = DBGFR3StackWalkNext(pVM, &Frame);
     2608                    } while (VBOX_SUCCESS(rc2));
     2609                    DBGFR3StackWalkEnd(pVM, &Frame);
    25452610                }
    2546                 else
    2547                     pHlp->pfnPrintf(pHlp,
    2548                                     "!! EIP is not in any code known to VMM!\n");
    2549             }
    2550 
    2551             /* Disassemble the instruction. */
    2552             char szInstr[256];
    2553             rc2 = DBGFR3DisasInstrEx(pVM, 0, 0, DBGF_DISAS_FLAGS_CURRENT_HYPER, &szInstr[0], sizeof(szInstr), NULL);
    2554             if (VBOX_SUCCESS(rc2))
    2555                 pHlp->pfnPrintf(pHlp,
    2556                                 "!! %s\n", szInstr);
    2557 
    2558             /* Dump the hypervisor cpu state. */
    2559             pHlp->pfnPrintf(pHlp,
    2560                             "!!\n"
    2561                             "!!\n"
    2562                             "!!\n");
    2563             rc2 = DBGFR3Info(pVM, "cpumhyper", "verbose", pHlp);
    2564             fDoneHyper = true;
    2565 
    2566             /* Callstack. */
    2567             DBGFSTACKFRAME Frame = {0};
    2568             rc2 = DBGFR3StackWalkBeginHyper(pVM, &Frame);
    2569             if (VBOX_SUCCESS(rc2))
    2570             {
     2611
     2612                /* raw stack */
    25712613                pHlp->pfnPrintf(pHlp,
    25722614                                "!!\n"
    2573                                 "!! Call Stack:\n"
     2615                                "!! Raw stack (mind the direction).\n"
    25742616                                "!!\n"
    2575                                 "EBP      Ret EBP  Ret CS:EIP    Arg0     Arg1     Arg2     Arg3     CS:EIP        Symbol [line]\n");
    2576                 do
    2577                 {
    2578                     pHlp->pfnPrintf(pHlp,
    2579                                     "%08RX32 %08RX32 %04RX32:%08RX32 %08RX32 %08RX32 %08RX32 %08RX32",
    2580                                     (uint32_t)Frame.AddrFrame.off,
    2581                                     (uint32_t)Frame.AddrReturnFrame.off,
    2582                                     (uint32_t)Frame.AddrReturnPC.Sel,
    2583                                     (uint32_t)Frame.AddrReturnPC.off,
    2584                                     Frame.Args.au32[0],
    2585                                     Frame.Args.au32[1],
    2586                                     Frame.Args.au32[2],
    2587                                     Frame.Args.au32[3]);
    2588                     pHlp->pfnPrintf(pHlp, " %RTsel:%08RGv", Frame.AddrPC.Sel, Frame.AddrPC.off);
    2589                     if (Frame.pSymPC)
    2590                     {
    2591                         RTGCINTPTR offDisp = Frame.AddrPC.FlatPtr - Frame.pSymPC->Value;
    2592                         if (offDisp > 0)
    2593                             pHlp->pfnPrintf(pHlp, " %s+%llx", Frame.pSymPC->szName, (int64_t)offDisp);
    2594                         else if (offDisp < 0)
    2595                             pHlp->pfnPrintf(pHlp, " %s-%llx", Frame.pSymPC->szName, -(int64_t)offDisp);
    2596                         else
    2597                             pHlp->pfnPrintf(pHlp, " %s", Frame.pSymPC->szName);
    2598                     }
    2599                     if (Frame.pLinePC)
    2600                         pHlp->pfnPrintf(pHlp, " [%s @ 0i%d]", Frame.pLinePC->szFilename, Frame.pLinePC->uLineNo);
    2601                     pHlp->pfnPrintf(pHlp, "\n");
    2602 
    2603                     /* next */
    2604                     rc2 = DBGFR3StackWalkNext(pVM, &Frame);
    2605                 } while (VBOX_SUCCESS(rc2));
    2606                 DBGFR3StackWalkEnd(pVM, &Frame);
    2607             }
    2608 
    2609             /* raw stack */
    2610             pHlp->pfnPrintf(pHlp,
    2611                             "!!\n"
    2612                             "!! Raw stack (mind the direction).\n"
    2613                             "!!\n"
    2614                             "%.*Vhxd\n",
    2615                             VMM_STACK_SIZE, (char *)pVM->vmm.s.pbHCStack);
     2617                                "%.*Vhxd\n",
     2618                                VMM_STACK_SIZE, (char *)pVM->vmm.s.pbHCStack);
     2619            }
    26162620            break;
    26172621        }
  • trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp

    r12795 r12822  
    476476    if (CPUMIsGuestInRealModeEx(pCtx))
    477477    {
    478         /* Injecting events doens't work right with real mode emulation. 
     478        /* Injecting events doesn't work right with real mode emulation. 
    479479         * (#GP if we try to inject external hardware interrupts)
    480480         * Fake an 'int x' instruction. Note that we need to take special precautions when
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette