- Timestamp:
- Sep 21, 2022 1:23:31 PM (2 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 23 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/Makefile.kmk
r96407 r96811 2108 2108 $(SED) -f include/VBox/various.sed --output include/VBox/param.mac include/VBox/param.h 2109 2109 $(SED) -f include/VBox/various.sed --output include/VBox/VMMDevTesting.mac include/VBox/VMMDevTesting.h 2110 $(SED) -f include/VBox/various.sed --output include/VBox/vmm/cpuidcall.mac include/VBox/vmm/cpuidcall.h 2110 2111 2111 2112 -
trunk/include/VBox/vmm/vm.h
r96435 r96811 1452 1452 struct IEM s; 1453 1453 #endif 1454 uint8_t padding[ 8]; /* multiple of 8 */1454 uint8_t padding[16]; /* multiple of 8 */ 1455 1455 } iem; 1456 1456 … … 1478 1478 1479 1479 /** Padding for aligning the structure size on a page boundrary. */ 1480 uint8_t abAlignment2[88 80- sizeof(PVMCPUR3) * VMM_MAX_CPU_COUNT];1480 uint8_t abAlignment2[8872 - sizeof(PVMCPUR3) * VMM_MAX_CPU_COUNT]; 1481 1481 1482 1482 /* ---- end small stuff ---- */ -
trunk/include/VBox/vmm/vm.mac
r96435 r96811 173 173 .vm resb 32 174 174 .cfgm resb 8 175 .iem resb 8175 .iem resb 16 176 176 .R0Stats resb 64 177 177 .gcm resb 32 -
trunk/include/iprt/log.h
r96448 r96811 545 545 /** Log a memory ring buffer. */ 546 546 RTLOGDEST_RINGBUF = 0x00000020, 547 /** The parent VMM debug log. */ 548 RTLOGDEST_VMM = 0x00000040, 549 /** The parent VMM release log. */ 550 RTLOGDEST_VMM_REL = 0x00000080, 547 551 /** Open files with no deny (share read, write, delete) on Windows. */ 548 552 RTLOGDEST_F_NO_DENY = 0x00010000, … … 560 564 } RTLOGDEST; 561 565 /** Valid log destinations. */ 562 #define RTLOG_DST_VALID_MASK UINT32_C(0x630300 3f)566 #define RTLOG_DST_VALID_MASK UINT32_C(0x630300ff) 563 567 /** Log destinations that can be changed via RTLogChangeDestinations. */ 564 #define RTLOG_DST_CHANGE_MASK UINT32_C(0x400000 1e)568 #define RTLOG_DST_CHANGE_MASK UINT32_C(0x400000de) 565 569 566 570 … … 2526 2530 2527 2531 /** 2532 * Write/copy bulk log data from a nested VM logger. 2533 * 2534 * This is used for 2535 * 2536 * @returns IRPT status code. 2537 * @param pLogger The logger instance (NULL for default logger). 2538 * @param pch Pointer to the block of bulk log text to write. 2539 * @param cch Size of the block of bulk log text to write. 2540 * @param pszInfix String to put after the line prefixes and the 2541 * line content. 2542 */ 2543 RTDECL(int) RTLogBulkNestedWrite(PRTLOGGER pLogger, const char *pch, size_t cch, const char *pszInfix); 2544 2545 /** 2528 2546 * Flushes the specified logger. 2529 2547 * … … 2789 2807 2790 2808 /** 2809 * Write log buffer to a parent VMM (hypervisor). 2810 * 2811 * @param pach What to write. 2812 * @param cb How much to write. 2813 * @param fRelease Set if targeting the release log, clear if debug log. 2814 * 2815 * @note Currently only available on AMD64 and x86. 2816 */ 2817 RTDECL(void) RTLogWriteVmm(const char *pach, size_t cb, bool fRelease); 2818 2819 /** 2791 2820 * Write log buffer to stdout (RTLOGDEST_STDOUT). 2792 2821 * -
trunk/include/iprt/mangling.h
r96622 r96811 1453 1453 # define RTLogBulkUpdate RT_MANGLER(RTLogBulkUpdate) 1454 1454 # define RTLogBulkWrite RT_MANGLER(RTLogBulkWrite) 1455 # define RTLogBulkNestedWrite RT_MANGLER(RTLogBulkNestedWrite) 1455 1456 # define RTLogChangeDestinations RT_MANGLER(RTLogChangeDestinations) 1456 1457 # define RTLogChangeFlags RT_MANGLER(RTLogChangeFlags) -
trunk/src/VBox/Additions/common/VBoxGuest/freebsd/Makefile
r96407 r96811 150 150 RTLogWriteStdOut-stub-generic.c \ 151 151 RTLogWriteStdErr-stub-generic.c \ 152 RTLogWriteVmm-stub-generic.c \ 152 153 RTRandAdvCreateSystemFaster-generic.c \ 153 154 RTRandAdvCreateSystemTruer-generic.c \ -
trunk/src/VBox/Additions/common/VBoxGuest/freebsd/files_vboxguest
r96407 r96811 187 187 ${PATH_ROOT}/src/VBox/Runtime/generic/RTLogWriteStdOut-stub-generic.cpp=>generic/RTLogWriteStdOut-stub-generic.c \ 188 188 ${PATH_ROOT}/src/VBox/Runtime/generic/RTLogWriteDebugger-generic.cpp=>generic/RTLogWriteDebugger-generic.c \ 189 ${PATH_ROOT}/src/VBox/Runtime/generic/RTLogWriteVmm-stub-generic.cpp=>generic/RTLogWriteVmm-stub-generic.c \ 189 190 ${PATH_ROOT}/src/VBox/Runtime/generic/RTRandAdvCreateSystemFaster-generic.cpp=>generic/RTRandAdvCreateSystemFaster-generic.c \ 190 191 ${PATH_ROOT}/src/VBox/Runtime/generic/RTRandAdvCreateSystemTruer-generic.cpp=>generic/RTRandAdvCreateSystemTruer-generic.c \ -
trunk/src/VBox/Additions/common/VBoxGuest/linux/Makefile
r96407 r96811 130 130 generic/RTLogWriteStdErr-stub-generic.o \ 131 131 generic/RTLogWriteStdOut-stub-generic.o \ 132 generic/RTLogWriteVmm-stub-generic.o \ 132 133 generic/RTMpGetCoreCount-generic.o \ 133 134 generic/RTSemEventWait-2-ex-generic.o \ -
trunk/src/VBox/Additions/common/VBoxGuest/linux/files_vboxguest
r96407 r96811 186 186 ${PATH_ROOT}/src/VBox/Runtime/generic/RTLogWriteStdErr-stub-generic.cpp=>generic/RTLogWriteStdErr-stub-generic.c \ 187 187 ${PATH_ROOT}/src/VBox/Runtime/generic/RTLogWriteStdOut-stub-generic.cpp=>generic/RTLogWriteStdOut-stub-generic.c \ 188 ${PATH_ROOT}/src/VBox/Runtime/generic/RTLogWriteVmm-stub-generic.cpp=>generic/RTLogWriteVmm-stub-generic.c \ 188 189 ${PATH_ROOT}/src/VBox/Runtime/generic/RTMpGetCoreCount-generic.cpp=>generic/RTMpGetCoreCount-generic.c \ 189 190 ${PATH_ROOT}/src/VBox/Runtime/generic/RTSemEventWait-2-ex-generic.cpp=>generic/RTSemEventWait-2-ex-generic.c \ -
trunk/src/VBox/HostDrivers/Support/SUPDrv.cpp
r96407 r96811 377 377 SUPEXP_STK_BACK( 3, RTHandleTableFreeWithCtx), 378 378 SUPEXP_STK_BACK( 3, RTHandleTableLookupWithCtx), 379 SUPEXP_STK_BACK( 4, RTLogBulkNestedWrite), 379 380 SUPEXP_STK_BACK( 5, RTLogBulkUpdate), 380 381 SUPEXP_STK_BACK( 2, RTLogCheckGroupFlags), -
trunk/src/VBox/HostDrivers/Support/SUPDrvIOC.h
r96407 r96811 233 233 * - nothing 234 234 */ 235 #define SUPDRV_IOC_VERSION 0x0033000 2235 #define SUPDRV_IOC_VERSION 0x00330003 236 236 237 237 /** SUP_IOCTL_COOKIE. */ -
trunk/src/VBox/HostDrivers/Support/SUPLib.cpp
r96407 r96811 299 299 CookieReq.u.In.u32ReqVersion = SUPDRV_IOC_VERSION; 300 300 const uint32_t uMinVersion = (SUPDRV_IOC_VERSION & 0xffff0000) == 0x00330000 301 ? 0x0033000 2301 ? 0x00330003 302 302 : SUPDRV_IOC_VERSION & 0xffff0000; 303 303 CookieReq.u.In.u32MinVersion = uMinVersion; -
trunk/src/VBox/HostDrivers/Support/freebsd/Makefile
r96407 r96811 152 152 RTLogWriteStdErr-stub-generic.c \ 153 153 RTLogWriteUser-generic.c \ 154 RTLogWriteVmm-stub-generic.c \ 154 155 RTMpGetArraySize-generic.c \ 155 156 RTMpOnPair-generic.c \ -
trunk/src/VBox/HostDrivers/Support/freebsd/files_vboxdrv
r96407 r96811 188 188 ${PATH_ROOT}/src/VBox/Runtime/generic/RTLogWriteUser-generic.cpp=>generic/RTLogWriteUser-generic.c \ 189 189 ${PATH_ROOT}/src/VBox/Runtime/generic/RTLogWriteDebugger-generic.cpp=>generic/RTLogWriteDebugger-generic.c \ 190 ${PATH_ROOT}/src/VBox/Runtime/generic/RTLogWriteVmm-stub-generic.cpp=>generic/RTLogWriteVmm-stub-generic.c \ 190 191 ${PATH_ROOT}/src/VBox/Runtime/generic/RTRandAdvCreateSystemFaster-generic.cpp=>generic/RTRandAdvCreateSystemFaster-generic.c \ 191 192 ${PATH_ROOT}/src/VBox/Runtime/generic/RTRandAdvCreateSystemTruer-generic.cpp=>generic/RTRandAdvCreateSystemTruer-generic.c \ -
trunk/src/VBox/HostDrivers/Support/linux/Makefile
r96407 r96811 131 131 generic/RTLogWriteStdOut-stub-generic.o \ 132 132 generic/RTLogWriteUser-generic.o \ 133 generic/RTLogWriteVmm-stub-generic.o \ 133 134 generic/RTMpGetArraySize-generic.o \ 134 135 generic/RTMpGetCoreCount-generic.o \ -
trunk/src/VBox/HostDrivers/Support/linux/files_vboxdrv
r96407 r96811 188 188 ${PATH_ROOT}/src/VBox/Runtime/generic/RTLogWriteStdOut-stub-generic.cpp=>generic/RTLogWriteStdOut-stub-generic.c \ 189 189 ${PATH_ROOT}/src/VBox/Runtime/generic/RTLogWriteUser-generic.cpp=>generic/RTLogWriteUser-generic.c \ 190 ${PATH_ROOT}/src/VBox/Runtime/generic/RTLogWriteVmm-stub-generic.cpp=>generic/RTLogWriteVmm-stub-generic.c \ 190 191 ${PATH_ROOT}/src/VBox/Runtime/generic/RTMpGetArraySize-generic.cpp=>generic/RTMpGetArraySize-generic.c \ 191 192 ${PATH_ROOT}/src/VBox/Runtime/generic/RTMpGetCoreCount-generic.cpp=>generic/RTMpGetCoreCount-generic.c \ -
trunk/src/VBox/Runtime/Makefile.kmk
r96753 r96811 825 825 common/misc/zero.asm \ 826 826 common/misc/RTSystemIsInsideVM-amd64-x86.cpp \ 827 common/string/RTStrMemFind32.asm 827 common/string/RTStrMemFind32.asm \ 828 VBox/RTLogWriteVmm-amd64-x86.asm 828 829 RuntimeBaseR3_SOURCES.amd64 += \ 829 830 generic/RTMpGetDescription-generic.cpp \ 830 831 common/misc/zero.asm \ 831 832 common/misc/RTSystemIsInsideVM-amd64-x86.cpp \ 832 common/string/RTStrMemFind32.asm 833 common/string/RTStrMemFind32.asm \ 834 VBox/RTLogWriteVmm-amd64-x86.asm 833 835 RuntimeBaseR3_SOURCES.arm32 := \ 834 836 common/asm/ASMBitFirstClear-generic.cpp \ … … 2472 2474 generic/RTLogWriteStdOut-generic.cpp \ 2473 2475 generic/RTLogWriteUser-generic.cpp \ 2476 generic/RTLogWriteVmm-stub-generic.cpp \ 2474 2477 generic/RTPathIsSame-generic.cpp \ 2475 2478 generic/RTPathGetCurrentDrive-generic.cpp \ … … 3596 3599 common/math/RTUInt128MulByU64.asm \ 3597 3600 common/math/RTUInt128MulByU64Ex.asm \ 3598 common/string/RTStrEnd.asm 3601 common/string/RTStrEnd.asm \ 3602 VBox/RTLogWriteVmm-amd64-x86.asm 3599 3603 RuntimeR0Drv_SOURCES.x86 = \ 3600 3604 common/asm/ASMCpuIdExSlow.asm \ … … 3603 3607 common/asm/ASMWrMsrEx.asm \ 3604 3608 common/math/bignum-amd64-x86.asm \ 3605 common/string/RTStrEnd.asm 3609 common/string/RTStrEnd.asm \ 3610 VBox/RTLogWriteVmm-amd64-x86.asm 3606 3611 RuntimeR0Drv_SOURCES.arm32 += \ 3607 3612 common/string/RTStrEnd.cpp -
trunk/src/VBox/Runtime/VBox/RTLogWriteVmm-amd64-x86.asm
r96803 r96811 1 1 ; $Id$ 2 2 ;; @file 3 ; IPRT - ASMCpuIdExSlow().3 ; IPRT - RTLogWriteVmm - AMD64 & X86 for VBox. 4 4 ; 5 5 … … 38 38 ;* Header Files * 39 39 ;******************************************************************************* 40 %define RT_ASM_WITH_SEH64 40 41 %include "iprt/asmdefs.mac" 42 %include "VBox/vmm/cpuidcall.mac" 41 43 42 44 BEGINCODE … … 45 47 ; CPUID with EAX and ECX inputs, returning ALL output registers. 46 48 ; 47 ; @param uOperator x86:ebp+8 gcc:rdi msc:rcx 48 ; @param uInitEBX x86:ebp+c gcc:rsi msc:rdx 49 ; @param uInitECX x86:ebp+10 gcc:rdx msc:r8 50 ; @param uInitEDX x86:ebp+14 gcc:rcx msc:r9 51 ; @param pvEAX x86:ebp+18 gcc:r8 msc:rbp+30h 52 ; @param pvEBX x86:ebp+1c gcc:r9 msc:rbp+38h 53 ; @param pvECX x86:ebp+20 gcc:rbp+10h msc:rbp+40h 54 ; @param pvEDX x86:ebp+24 gcc:rbp+18h msc:rbp+48h 49 ; @param pch x86:ebp+8 gcc:rdi msc:rcx 50 ; @param cch x86:ebp+c gcc:esi msc:edx 51 ; @param fRelease x86:ebp+10 gcc:edx msc:r8d 55 52 ; 56 53 ; @returns EAX 57 54 ; 58 RT_BEGINPROC ASMCpuIdExSlow55 RT_BEGINPROC RTLogWriteVmm 59 56 push xBP 57 SEH64_PUSH_xBP 60 58 mov xBP, xSP 59 SEH64_SET_FRAME_xBP 0 61 60 push xBX 62 %if ARCH_BITS == 32 63 push edi 64 %elif ARCH_BITS == 16 65 push di 66 push es 61 SEH64_PUSH_GREG xBX 62 %ifndef ASM_CALL64_GCC 63 push xSI 64 SEH64_PUSH_GREG xSI 67 65 %endif 66 SEH64_END_PROLOGUE 68 67 69 68 %ifdef ASM_CALL64_MSC … … 71 70 %error ARCH_BITS mismatch? 72 71 %endif 73 mov eax, ecx 74 mov ebx, edx 75 mov ecx, r8d 76 mov edx, r9d 77 mov r8, [rbp + 30h] 78 mov r9, [rbp + 38h] 79 mov r10, [rbp + 40h] 80 mov r11, [rbp + 48h] 72 mov rsi, rcx ; pch 73 mov ebx, r8d ; fRelease; cch is the right register already. 81 74 %elifdef ASM_CALL64_GCC 82 mov eax, edi 83 mov ebx, esi 84 xchg ecx, edx 85 mov r10, [rbp + 10h] 86 mov r11, [rbp + 18h] 75 mov ebx, edx ; fRelease 76 mov edx, esi ; cch 77 mov rsi, rdi ; pch 87 78 %elif ARCH_BITS == 32 88 mov eax, [xBP + 08h] 89 mov ebx, [xBP + 0ch] 90 mov ecx, [xBP + 10h] 91 mov edx, [xBP + 14h] 92 mov edi, [xBP + 18h] 93 %elif ARCH_BITS == 16 94 mov eax, [xBP + 08h - 4] 95 mov ebx, [xBP + 0ch - 4] 96 mov ecx, [xBP + 10h - 4] 97 mov edx, [xBP + 14h - 4] 79 mov esi, [xBP + 08h] ; pch 80 mov edx, [xBP + 0ch] ; cch 81 movzx ebx, byte [xBP + 10h] ; fRelease 98 82 %else 99 83 %error unsupported arch 100 84 %endif 85 mov eax, VBOX_CPUID_REQ_EAX_FIXED 86 mov ecx, VBOX_CPUID_REQ_ECX_FIXED | VBOX_CPUID_FN_LOG 101 87 102 88 cpuid 103 89 104 %ifdef RT_ARCH_AMD64 105 test r8, r8 106 jz .store_ebx 107 mov [r8], eax 108 %elif ARCH_BITS == 32 109 test edi, edi 110 jz .store_ebx 111 mov [edi], eax 112 %else 113 cmp dword [bp + 18h - 4], 0 114 je .store_ebx 115 les di, [bp + 18h - 4] 116 mov [es:di], eax 117 %endif 118 .store_ebx: 119 120 %ifdef RT_ARCH_AMD64 121 test r9, r9 122 jz .store_ecx 123 mov [r9], ebx 124 %elif ARCH_BITS == 32 125 mov edi, [ebp + 1ch] 126 test edi, edi 127 jz .store_ecx 128 mov [edi], ebx 129 %else 130 cmp dword [bp + 1ch - 4], 0 131 je .store_ecx 132 les di, [bp + 1ch - 4] 133 mov [es:di], ebx 134 %endif 135 .store_ecx: 136 137 %ifdef RT_ARCH_AMD64 138 test r10, r10 139 jz .store_edx 140 mov [r10], ecx 141 %elif ARCH_BITS == 32 142 mov edi, [ebp + 20h] 143 test edi, edi 144 jz .store_edx 145 mov [edi], ecx 146 %else 147 cmp dword [bp + 20h - 4], 0 148 je .store_edx 149 les di, [bp + 20h - 4] 150 mov [es:di], ecx 151 %endif 152 .store_edx: 153 154 %ifdef RT_ARCH_AMD64 155 test r11, r11 156 jz .done 157 mov [r11], edx 158 %elif ARCH_BITS == 32 159 mov edi, [ebp + 24h] 160 test edi, edi 161 jz .done 162 mov [edi], edx 163 %else 164 cmp dword [bp + 24h - 4], 0 165 je .done 166 les di, [bp + 24h - 4] 167 mov [es:di], edx 168 %endif 169 .done: 170 171 %if ARCH_BITS == 32 172 pop edi 173 %elif ARCH_BITS == 16 174 pop es 175 pop di 90 %ifndef ASM_CALL64_GCC 91 pop xSI 176 92 %endif 177 93 pop xBX 178 94 leave 179 95 ret 180 ENDPROC ASMCpuIdExSlow96 ENDPROC RTLogWriteVmm 181 97 -
trunk/src/VBox/Runtime/common/log/log.cpp
r96810 r96811 281 281 /** The group. (used for prefixing.) */ 282 282 unsigned iGroup; 283 /** Used by RTLogBulkNestedWrite. */ 284 const char *pszInfix; 283 285 } RTLOGOUTPUTPREFIXEDARGS, *PRTLOGOUTPUTPREFIXEDARGS; 284 286 … … 297 299 static FNRTLOGPHASEMSG rtlogPhaseMsgNormal; 298 300 #endif 301 static DECLCALLBACK(size_t) rtLogOutputPrefixed(void *pv, const char *pachChars, size_t cbChars); 299 302 static void rtlogLoggerExFLocked(PRTLOGGERINTERNAL pLoggerInt, unsigned fFlags, unsigned iGroup, const char *pszFormat, ...); 300 303 … … 405 408 { RT_STR_TUPLE("com"), RTLOGDEST_COM }, 406 409 { RT_STR_TUPLE("nodeny"), RTLOGDEST_F_NO_DENY }, 410 { RT_STR_TUPLE("vmmrel"), RTLOGDEST_VMM_REL }, /* before vmm */ 411 { RT_STR_TUPLE("vmm"), RTLOGDEST_VMM }, 407 412 { RT_STR_TUPLE("user"), RTLOGDEST_USER }, 408 413 /* The RTLOGDEST_FIXED_XXX flags are omitted on purpose. */ … … 544 549 uint16_t const iGroup = RT_HI_U16(fFlagsAndGroup); 545 550 if ( iGroup != UINT16_MAX 546 547 551 && ( (pLoggerInt->afGroups[iGroup < pLoggerInt->cGroups ? iGroup : 0] & (fFlags | RTLOGGRPFLAGS_ENABLED)) 552 != (fFlags | RTLOGGRPFLAGS_ENABLED))) 548 553 pLoggerInt = NULL; 549 554 } … … 1085 1090 RTLogWriteUser(pszSecond, cchSecond); 1086 1091 } 1092 1093 # if defined(RT_ARCH_X86) || defined(RT_ARCH_AMD64) 1094 if (pLoggerInt->fDestFlags & RTLOGDEST_VMM) 1095 { 1096 if (cchPreamble) 1097 RTLogWriteVmm(pszPreamble, cchPreamble, false /*fReleaseLog*/); 1098 if (cchFirst) 1099 RTLogWriteVmm(pszFirst, cchFirst, false /*fReleaseLog*/); 1100 if (cchSecond) 1101 RTLogWriteVmm(pszSecond, cchSecond, false /*fReleaseLog*/); 1102 } 1103 1104 if (pLoggerInt->fDestFlags & RTLOGDEST_VMM_REL) 1105 { 1106 if (cchPreamble) 1107 RTLogWriteVmm(pszPreamble, cchPreamble, true /*fReleaseLog*/); 1108 if (cchFirst) 1109 RTLogWriteVmm(pszFirst, cchFirst, true /*fReleaseLog*/); 1110 if (cchSecond) 1111 RTLogWriteVmm(pszSecond, cchSecond, true /*fReleaseLog*/); 1112 } 1113 # endif 1087 1114 1088 1115 if (pLoggerInt->fDestFlags & RTLOGDEST_DEBUGGER) … … 2436 2463 for (i = 0; i < RT_ELEMENTS(g_aLogDst); i++) 2437 2464 { 2438 size_t cchInstr = strlen(g_aLogDst[i].pszInstr); 2439 if (!strncmp(pszValue, g_aLogDst[i].pszInstr, cchInstr)) 2465 if (!strncmp(pszValue, g_aLogDst[i].pszInstr, g_aLogDst[i].cchInstr)) 2440 2466 { 2441 2467 if (!fNo) … … 2443 2469 else 2444 2470 pLoggerInt->fDestFlags &= ~g_aLogDst[i].fFlag; 2445 pszValue += cchInstr;2471 pszValue += g_aLogDst[i].cchInstr; 2446 2472 2447 2473 /* check for value. */ … … 3216 3242 3217 3243 3244 /** 3245 * Write/copy bulk log data from a nested VM logger. 3246 * 3247 * This is used for 3248 * 3249 * @returns IRPT status code. 3250 * @param pLogger The logger instance (NULL for default logger). 3251 * @param pch Pointer to the block of bulk log text to write. 3252 * @param cch Size of the block of bulk log text to write. 3253 * @param pszInfix String to put after the line prefixes and the 3254 * line content. 3255 */ 3256 RTDECL(int) RTLogBulkNestedWrite(PRTLOGGER pLogger, const char *pch, size_t cch, const char *pszInfix) 3257 { 3258 if (cch > 0) 3259 { 3260 PRTLOGGERINTERNAL pLoggerInt = (PRTLOGGERINTERNAL)pLogger; 3261 RTLOG_RESOLVE_DEFAULT_RET(pLoggerInt, VINF_LOG_NO_LOGGER); 3262 3263 /* 3264 * Lock and validate it. 3265 */ 3266 int rc = rtlogLock(pLoggerInt); 3267 if (RT_SUCCESS(rc)) 3268 { 3269 /* 3270 * If we've got an auxilary descriptor, check if the buffer was flushed. 3271 */ 3272 PRTLOGBUFFERDESC pBufDesc = pLoggerInt->pBufDesc; 3273 PRTLOGBUFFERAUXDESC pAuxDesc = pBufDesc->pAux; 3274 if (!pAuxDesc || !pAuxDesc->fFlushedIndicator) 3275 { /* likely, except maybe for ring-0 */ } 3276 else 3277 { 3278 pAuxDesc->fFlushedIndicator = false; 3279 pBufDesc->offBuf = 0; 3280 } 3281 3282 /* 3283 * Write the stuff. 3284 */ 3285 RTLOGOUTPUTPREFIXEDARGS Args; 3286 Args.pLoggerInt = pLoggerInt; 3287 Args.fFlags = 0; 3288 Args.iGroup = ~0U; 3289 Args.pszInfix = pszInfix; 3290 rtLogOutputPrefixed(&Args, pch, cch); 3291 rtLogOutputPrefixed(&Args, pch, 0); /* termination call */ 3292 3293 /* 3294 * Maybe flush the buffer and update the auxiliary descriptor if there is one. 3295 */ 3296 pBufDesc = pLoggerInt->pBufDesc; /* (the descriptor may have changed) */ 3297 if ( !(pLoggerInt->fFlags & RTLOGFLAGS_BUFFERED) 3298 && pBufDesc->offBuf) 3299 rtlogFlush(pLoggerInt, false /*fNeedSpace*/); 3300 else 3301 { 3302 pAuxDesc = pBufDesc->pAux; 3303 if (pAuxDesc) 3304 pAuxDesc->offBuf = pBufDesc->offBuf; 3305 } 3306 3307 rtlogUnlock(pLoggerInt); 3308 } 3309 return rc; 3310 } 3311 return VINF_SUCCESS; 3312 } 3313 RT_EXPORT_SYMBOL(RTLogBulkNestedWrite); 3314 3315 3218 3316 /********************************************************************************************************************************* 3219 3317 * Flushing * … … 3326 3424 if (pLoggerInt->fDestFlags & RTLOGDEST_USER) 3327 3425 RTLogWriteUser(pchToFlush, cchToFlush); 3426 3427 #if defined(RT_ARCH_X86) || defined(RT_ARCH_AMD64) 3428 if (pLoggerInt->fDestFlags & RTLOGDEST_VMM) 3429 RTLogWriteVmm(pchToFlush, cchToFlush, false /*fReleaseLog*/); 3430 3431 if (pLoggerInt->fDestFlags & RTLOGDEST_VMM_REL) 3432 RTLogWriteVmm(pchToFlush, cchToFlush, true /*fReleaseLog*/); 3433 #endif 3328 3434 3329 3435 if (pLoggerInt->fDestFlags & RTLOGDEST_DEBUGGER) … … 3471 3577 RTLogWriteUser(pThis->achScratch, pThis->offScratch); 3472 3578 3579 # if defined(RT_ARCH_X86) || defined(RT_ARCH_AMD64) 3580 if (pThis->fDestFlags & RTLOGDEST_VMM) 3581 RTLogWriteVmm(pThis->achScratch, pThis->offScratch, false /*fReleaseLog*/); 3582 3583 if (pThis->fDestFlags & RTLOGDEST_VMM_REL) 3584 RTLogWriteVmm(pThis->achScratch, pThis->offScratch, true /*fReleaseLog*/); 3585 # endif 3586 3473 3587 if (pThis->fDestFlags & RTLOGDEST_DEBUGGER) 3474 3588 RTLogWriteDebugger(pThis->achScratch, pThis->offScratch); … … 3758 3872 if (cbChars) 3759 3873 { 3760 size_t cbRet = 0; 3874 uint64_t const fFlags = pLoggerInt->fFlags; 3875 size_t cbRet = 0; 3761 3876 for (;;) 3762 3877 { … … 3791 3906 /* 3792 3907 * Flush the buffer if there isn't enough room for the maximum prefix config. 3793 * Max is 2 56, add a couple of extra bytes. See CCH_PREFIX check way below.3908 * Max is 265, add a couple of extra bytes. See CCH_PREFIX check way below. 3794 3909 */ 3795 if (cb >= 2 56+ 16)3910 if (cb >= 265 + 16) 3796 3911 pLoggerInt->fPendingPrefix = false; 3797 3912 else … … 3806 3921 */ 3807 3922 psz = &pchBuf[offBuf]; 3808 if ( pLoggerInt->fFlags & RTLOGFLAGS_PREFIX_TS)3923 if (fFlags & RTLOGFLAGS_PREFIX_TS) 3809 3924 { 3810 uint64_t u64 = RTTimeNanoTS();3811 int iBase = 16;3812 unsigned int f Flags = RTSTR_F_ZEROPAD;3813 if ( pLoggerInt->fFlags & RTLOGFLAGS_DECIMAL_TS)3925 uint64_t u64 = RTTimeNanoTS(); 3926 int iBase = 16; 3927 unsigned int fStrFlags = RTSTR_F_ZEROPAD; 3928 if (fFlags & RTLOGFLAGS_DECIMAL_TS) 3814 3929 { 3815 iBase = 10;3816 f Flags = 0;3930 iBase = 10; 3931 fStrFlags = 0; 3817 3932 } 3818 if ( pLoggerInt->fFlags & RTLOGFLAGS_REL_TS)3933 if (fFlags & RTLOGFLAGS_REL_TS) 3819 3934 { 3820 3935 static volatile uint64_t s_u64LastTs; … … 3827 3942 } 3828 3943 /* 1E15 nanoseconds = 11 days */ 3829 psz += RTStrFormatNumber(psz, u64, iBase, 16, 0, f Flags);3944 psz += RTStrFormatNumber(psz, u64, iBase, 16, 0, fStrFlags); 3830 3945 *psz++ = ' '; 3831 3946 } 3832 3947 #define CCH_PREFIX_01 0 + 17 3833 3948 3834 if ( pLoggerInt->fFlags & RTLOGFLAGS_PREFIX_TSC)3949 if (fFlags & RTLOGFLAGS_PREFIX_TSC) 3835 3950 { 3836 3951 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 3837 uint64_t u64 = ASMReadTSC();3952 uint64_t u64 = ASMReadTSC(); 3838 3953 #else 3839 uint64_t u64 = RTTimeNanoTS();3954 uint64_t u64 = RTTimeNanoTS(); 3840 3955 #endif 3841 int iBase = 16;3842 unsigned int f Flags = RTSTR_F_ZEROPAD;3843 if ( pLoggerInt->fFlags & RTLOGFLAGS_DECIMAL_TS)3956 int iBase = 16; 3957 unsigned int fStrFlags = RTSTR_F_ZEROPAD; 3958 if (fFlags & RTLOGFLAGS_DECIMAL_TS) 3844 3959 { 3845 iBase = 10;3846 f Flags = 0;3960 iBase = 10; 3961 fStrFlags = 0; 3847 3962 } 3848 if ( pLoggerInt->fFlags & RTLOGFLAGS_REL_TS)3963 if (fFlags & RTLOGFLAGS_REL_TS) 3849 3964 { 3850 3965 static volatile uint64_t s_u64LastTsc; … … 3857 3972 } 3858 3973 /* 1E15 ticks at 4GHz = 69 hours */ 3859 psz += RTStrFormatNumber(psz, u64, iBase, 16, 0, f Flags);3974 psz += RTStrFormatNumber(psz, u64, iBase, 16, 0, fStrFlags); 3860 3975 *psz++ = ' '; 3861 3976 } 3862 3977 #define CCH_PREFIX_02 CCH_PREFIX_01 + 17 3863 3978 3864 if ( pLoggerInt->fFlags & RTLOGFLAGS_PREFIX_MS_PROG)3979 if (fFlags & RTLOGFLAGS_PREFIX_MS_PROG) 3865 3980 { 3866 3981 #ifndef IN_RING0 … … 3875 3990 #define CCH_PREFIX_03 CCH_PREFIX_02 + 21 3876 3991 3877 if ( pLoggerInt->fFlags & RTLOGFLAGS_PREFIX_TIME)3992 if (fFlags & RTLOGFLAGS_PREFIX_TIME) 3878 3993 { 3879 3994 #if defined(IN_RING3) || defined(IN_RING0) … … 3896 4011 #define CCH_PREFIX_04 CCH_PREFIX_03 + (3+1+3+1+3+1+7+1) 3897 4012 3898 if ( pLoggerInt->fFlags & RTLOGFLAGS_PREFIX_TIME_PROG)4013 if (fFlags & RTLOGFLAGS_PREFIX_TIME_PROG) 3899 4014 { 3900 4015 … … 3920 4035 3921 4036 # if 0 3922 if ( pLoggerInt->fFlags & RTLOGFLAGS_PREFIX_DATETIME)4037 if (fFlags & RTLOGFLAGS_PREFIX_DATETIME) 3923 4038 { 3924 4039 char szDate[32]; … … 3935 4050 # endif 3936 4051 3937 if ( pLoggerInt->fFlags & RTLOGFLAGS_PREFIX_PID)4052 if (fFlags & RTLOGFLAGS_PREFIX_PID) 3938 4053 { 3939 4054 RTPROCESS Process = RTProcSelf(); … … 3943 4058 #define CCH_PREFIX_07 CCH_PREFIX_06 + 9 3944 4059 3945 if ( pLoggerInt->fFlags & RTLOGFLAGS_PREFIX_TID)4060 if (fFlags & RTLOGFLAGS_PREFIX_TID) 3946 4061 { 3947 4062 RTNATIVETHREAD Thread = RTThreadNativeSelf(); … … 3951 4066 #define CCH_PREFIX_08 CCH_PREFIX_07 + 17 3952 4067 3953 if ( pLoggerInt->fFlags & RTLOGFLAGS_PREFIX_THREAD)4068 if (fFlags & RTLOGFLAGS_PREFIX_THREAD) 3954 4069 { 3955 4070 #ifdef IN_RING3 … … 3964 4079 #define CCH_PREFIX_09 CCH_PREFIX_08 + 17 3965 4080 3966 if ( pLoggerInt->fFlags & RTLOGFLAGS_PREFIX_CPUID)4081 if (fFlags & RTLOGFLAGS_PREFIX_CPUID) 3967 4082 { 3968 4083 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) … … 3976 4091 #define CCH_PREFIX_10 CCH_PREFIX_09 + 17 3977 4092 3978 if ( ( pLoggerInt->fFlags & RTLOGFLAGS_PREFIX_CUSTOM)4093 if ( (fFlags & RTLOGFLAGS_PREFIX_CUSTOM) 3979 4094 && pLoggerInt->pfnPrefix) 3980 4095 { … … 3984 4099 #define CCH_PREFIX_11 CCH_PREFIX_10 + 32 3985 4100 3986 if ( pLoggerInt->fFlags & RTLOGFLAGS_PREFIX_LOCK_COUNTS)4101 if (fFlags & RTLOGFLAGS_PREFIX_LOCK_COUNTS) 3987 4102 { 3988 4103 #ifdef IN_RING3 /** @todo implement these counters in ring-0 too? */ … … 4009 4124 #define CCH_PREFIX_12 CCH_PREFIX_11 + 8 4010 4125 4011 if ( pLoggerInt->fFlags & RTLOGFLAGS_PREFIX_FLAG_NO)4126 if (fFlags & RTLOGFLAGS_PREFIX_FLAG_NO) 4012 4127 { 4013 4128 psz += RTStrFormatNumber(psz, pArgs->fFlags, 16, 8, 0, RTSTR_F_ZEROPAD); … … 4016 4131 #define CCH_PREFIX_13 CCH_PREFIX_12 + 9 4017 4132 4018 if ( pLoggerInt->fFlags & RTLOGFLAGS_PREFIX_FLAG)4133 if (fFlags & RTLOGFLAGS_PREFIX_FLAG) 4019 4134 { 4020 4135 #ifdef IN_RING3 … … 4027 4142 #define CCH_PREFIX_14 CCH_PREFIX_13 + 17 4028 4143 4029 if ( pLoggerInt->fFlags & RTLOGFLAGS_PREFIX_GROUP_NO)4144 if (fFlags & RTLOGFLAGS_PREFIX_GROUP_NO) 4030 4145 { 4031 4146 if (pArgs->iGroup != ~0U) … … 4042 4157 #define CCH_PREFIX_15 CCH_PREFIX_14 + 9 4043 4158 4044 if ( pLoggerInt->fFlags & RTLOGFLAGS_PREFIX_GROUP)4159 if (fFlags & RTLOGFLAGS_PREFIX_GROUP) 4045 4160 { 4046 4161 const unsigned fGrp = pLoggerInt->afGroups[pArgs->iGroup != ~0U ? pArgs->iGroup : 0]; … … 4071 4186 #define CCH_PREFIX_16 CCH_PREFIX_15 + 17 4072 4187 4073 #define CCH_PREFIX ( CCH_PREFIX_16 ) 4074 { AssertCompile(CCH_PREFIX < 256); } 4188 if (pArgs->pszInfix) 4189 { 4190 size_t cchInfix = strlen(pArgs->pszInfix); 4191 psz = rtLogStPNCpyPad2(psz, pArgs->pszInfix, RT_MIN(cchInfix, 8), 1); 4192 } 4193 #define CCH_PREFIX_17 CCH_PREFIX_16 + 9 4194 4195 4196 #define CCH_PREFIX ( CCH_PREFIX_17 ) 4197 { AssertCompile(CCH_PREFIX < 265); } 4075 4198 4076 4199 /* … … 4078 4201 */ 4079 4202 AssertMsg(psz - &pchBuf[offBuf] <= 223, 4080 ("%#zx (%zd) - fFlags=%#x\n", psz - &pchBuf[offBuf], psz - &pchBuf[offBuf], pLoggerInt->fFlags));4203 ("%#zx (%zd) - fFlags=%#x\n", psz - &pchBuf[offBuf], psz - &pchBuf[offBuf], fFlags)); 4081 4204 pBufDesc->offBuf = offBuf = (uint32_t)(psz - pchBuf); 4082 4205 cb = cbBuf - offBuf - 1; … … 4101 4224 { 4102 4225 cb = pszNewLine - pachChars; 4103 if (!( pLoggerInt->fFlags & RTLOGFLAGS_USECRLF))4226 if (!(fFlags & RTLOGFLAGS_USECRLF)) 4104 4227 { 4105 4228 cb += 1; … … 4191 4314 OutputArgs.iGroup = iGroup; 4192 4315 OutputArgs.fFlags = fFlags; 4316 OutputArgs.pszInfix = NULL; 4193 4317 RTLogFormatV(rtLogOutputPrefixed, &OutputArgs, pszFormat, args); 4194 4318 } -
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r96745 r96811 5933 5933 * Check the input and figure out which mapping entry to use. 5934 5934 */ 5935 Assert(cbMem <= 64 || cbMem == 512 || cbMem == 256 || cbMem == 108 || cbMem == 104 || cbMem == 102 || cbMem == 94); /* 512 is the max! */ 5935 Assert(cbMem <= sizeof(pVCpu->iem.s.aBounceBuffers[0])); 5936 Assert( cbMem <= 64 || cbMem == 512 || cbMem == 256 || cbMem == 108 || cbMem == 104 || cbMem == 102 || cbMem == 94 5937 || (iSegReg == UINT8_MAX && uAlignCtl == 0 && fAccess == IEM_ACCESS_DATA_R /* for the CPUID logging interface */) ); 5936 5938 Assert(~(fAccess & ~(IEM_ACCESS_TYPE_MASK | IEM_ACCESS_WHAT_MASK))); 5937 5939 Assert(pVCpu->iem.s.cActiveMappings < RT_ELEMENTS(pVCpu->iem.s.aMemMappings)); -
trunk/src/VBox/VMM/VMMAll/IEMAllCImpl.cpp
r96637 r96811 48 48 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX 49 49 # include <VBox/vmm/hmvmxinline.h> 50 #endif 51 #ifndef VBOX_WITHOUT_CPUID_HOST_CALL 52 # include <VBox/vmm/cpuidcall.h> 50 53 #endif 51 54 #include <VBox/vmm/tm.h> … … 7755 7758 7756 7759 7760 #ifndef VBOX_WITHOUT_CPUID_HOST_CALL 7761 /** 7762 * Handles a CPUID call. 7763 */ 7764 static VBOXSTRICTRC iemCpuIdVBoxCall(PVMCPUCC pVCpu, uint32_t iFunction, 7765 uint32_t *pEax, uint32_t *pEbx, uint32_t *pEcx, uint32_t *pEdx) 7766 { 7767 switch (iFunction) 7768 { 7769 case VBOX_CPUID_FN_ID: 7770 LogFlow(("iemCpuIdVBoxCall: VBOX_CPUID_FN_ID\n")); 7771 *pEax = VBOX_CPUID_RESP_ID_EAX; 7772 *pEbx = VBOX_CPUID_RESP_ID_EBX; 7773 *pEcx = VBOX_CPUID_RESP_ID_ECX; 7774 *pEdx = VBOX_CPUID_RESP_ID_EDX; 7775 break; 7776 7777 case VBOX_CPUID_FN_LOG: 7778 { 7779 CPUM_IMPORT_EXTRN_RET(pVCpu, CPUMCTX_EXTRN_RDX | CPUMCTX_EXTRN_RBX | CPUMCTX_EXTRN_RSI 7780 | IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK); 7781 7782 /* Validate input. */ 7783 uint32_t cchToLog = *pEdx; 7784 if (cchToLog <= _2M) 7785 { 7786 uint32_t const uLogPicker = *pEbx; 7787 if (uLogPicker <= 1) 7788 { 7789 /* Resolve the logger. */ 7790 PRTLOGGER const pLogger = !uLogPicker 7791 ? RTLogDefaultInstanceEx(UINT32_MAX) : RTLogRelGetDefaultInstanceEx(UINT32_MAX); 7792 if (pLogger) 7793 { 7794 /* Copy over the data: */ 7795 RTGCPTR GCPtrSrc = pVCpu->cpum.GstCtx.rsi; 7796 while (cchToLog > 0) 7797 { 7798 uint32_t cbToMap = GUEST_PAGE_SIZE - (GCPtrSrc & GUEST_PAGE_OFFSET_MASK); 7799 if (cbToMap > cchToLog) 7800 cbToMap = cchToLog; 7801 /** @todo Extend iemMemMap to allowing page size accessing and avoid 7 7802 * unnecessary calls & iterations per pages. */ 7803 if (cbToMap > 512) 7804 cbToMap = 512; 7805 void *pvSrc = NULL; 7806 VBOXSTRICTRC rcStrict = iemMemMap(pVCpu, &pvSrc, cbToMap, UINT8_MAX, GCPtrSrc, IEM_ACCESS_DATA_R, 0); 7807 if (rcStrict == VINF_SUCCESS) 7808 { 7809 RTLogBulkNestedWrite(pLogger, (const char *)pvSrc, cbToMap, "Gst:"); 7810 rcStrict = iemMemCommitAndUnmap(pVCpu, pvSrc, IEM_ACCESS_DATA_R); 7811 AssertRCSuccessReturn(VBOXSTRICTRC_VAL(rcStrict), rcStrict); 7812 } 7813 else 7814 { 7815 Log(("iemCpuIdVBoxCall: %Rrc at %RGp LB %#x\n", VBOXSTRICTRC_VAL(rcStrict), GCPtrSrc, cbToMap)); 7816 return rcStrict; 7817 } 7818 7819 /* Advance. */ 7820 pVCpu->cpum.GstCtx.rsi = GCPtrSrc += cbToMap; 7821 *pEdx = cchToLog -= cbToMap; 7822 } 7823 *pEax = VINF_SUCCESS; 7824 } 7825 else 7826 *pEax = (uint32_t)VERR_NOT_FOUND; 7827 } 7828 else 7829 *pEax = (uint32_t)VERR_NOT_FOUND; 7830 } 7831 else 7832 *pEax = (uint32_t)VERR_TOO_MUCH_DATA; 7833 *pEdx = VBOX_CPUID_RESP_GEN_EDX; 7834 *pEcx = VBOX_CPUID_RESP_GEN_ECX; 7835 *pEbx = VBOX_CPUID_RESP_GEN_EBX; 7836 break; 7837 } 7838 7839 default: 7840 LogFlow(("iemCpuIdVBoxCall: Invalid function %#x (%#x, %#x)\n", iFunction, *pEbx, *pEdx)); 7841 *pEax = (uint32_t)VERR_INVALID_FUNCTION; 7842 *pEbx = (uint32_t)VERR_INVALID_FUNCTION; 7843 *pEcx = (uint32_t)VERR_INVALID_FUNCTION; 7844 *pEdx = (uint32_t)VERR_INVALID_FUNCTION; 7845 break; 7846 } 7847 return VINF_SUCCESS; 7848 } 7849 #endif /* VBOX_WITHOUT_CPUID_HOST_CALL */ 7850 7757 7851 /** 7758 7852 * Implements 'CPUID'. … … 7773 7867 } 7774 7868 7775 CPUMGetGuestCpuId(pVCpu, pVCpu->cpum.GstCtx.eax, pVCpu->cpum.GstCtx.ecx, pVCpu->cpum.GstCtx.cs.Attr.n.u1Long, 7776 &pVCpu->cpum.GstCtx.eax, &pVCpu->cpum.GstCtx.ebx, &pVCpu->cpum.GstCtx.ecx, &pVCpu->cpum.GstCtx.edx); 7869 7870 uint32_t const uEax = pVCpu->cpum.GstCtx.eax; 7871 uint32_t const uEcx = pVCpu->cpum.GstCtx.ecx; 7872 7873 #ifndef VBOX_WITHOUT_CPUID_HOST_CALL 7874 /* 7875 * CPUID host call backdoor. 7876 */ 7877 if ( uEax == VBOX_CPUID_REQ_EAX_FIXED 7878 && (uEcx & VBOX_CPUID_REQ_ECX_FIXED_MASK) == VBOX_CPUID_REQ_ECX_FIXED 7879 && pVCpu->CTX_SUFF(pVM)->iem.s.fCpuIdHostCall) 7880 { 7881 VBOXSTRICTRC rcStrict = iemCpuIdVBoxCall(pVCpu, uEcx & VBOX_CPUID_REQ_ECX_FN_MASK, 7882 &pVCpu->cpum.GstCtx.eax, &pVCpu->cpum.GstCtx.ebx, 7883 &pVCpu->cpum.GstCtx.ecx, &pVCpu->cpum.GstCtx.edx); 7884 if (rcStrict != VINF_SUCCESS) 7885 return rcStrict; 7886 } 7887 /* 7888 * Regular CPUID. 7889 */ 7890 else 7891 #endif 7892 CPUMGetGuestCpuId(pVCpu, uEax, uEcx, pVCpu->cpum.GstCtx.cs.Attr.n.u1Long, 7893 &pVCpu->cpum.GstCtx.eax, &pVCpu->cpum.GstCtx.ebx, &pVCpu->cpum.GstCtx.ecx, &pVCpu->cpum.GstCtx.edx); 7894 7777 7895 pVCpu->cpum.GstCtx.rax &= UINT32_C(0xffffffff); 7778 7896 pVCpu->cpum.GstCtx.rbx &= UINT32_C(0xffffffff); -
trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp
r96407 r96811 6939 6939 if (rcStrict == VINF_IEM_RAISED_XCPT) 6940 6940 { 6941 CPUM_ASSERT_NOT_EXTRN(pVCpu, IEM_CPUMCTX_EXTRN_XCPT_MASK); 6941 6942 ASMAtomicUoOrU64(&pVCpu->hm.s.fCtxChanged, HM_CHANGED_RAISED_XCPT_MASK); 6942 6943 rcStrict = VINF_SUCCESS; -
trunk/src/VBox/VMM/VMMR3/IEMR3.cpp
r96407 r96811 89 89 VMMR3DECL(int) IEMR3Init(PVM pVM) 90 90 { 91 int rc; 92 93 /* 94 * Read configuration. 95 */ 96 PCFGMNODE pIem = CFGMR3GetChild(CFGMR3GetRoot(pVM), "IEM"); 97 98 #ifndef VBOX_WITHOUT_CPUID_HOST_CALL 99 /** @cfgm{/IEM/CpuIdHostCall, boolean, false} 100 * Controls whether the custom VBox specific CPUID host call interface is 101 * enabled or not. */ 102 # ifdef DEBUG_bird 103 rc = CFGMR3QueryBoolDef(pIem, "CpuIdHostCall", &pVM->iem.s.fCpuIdHostCall, true); 104 # else 105 rc = CFGMR3QueryBoolDef(pIem, "CpuIdHostCall", &pVM->iem.s.fCpuIdHostCall, false); 106 # endif 107 AssertLogRelRCReturn(rc, rc); 108 #endif 109 110 /* 111 * Initialize per-CPU data and register statistics. 112 */ 91 113 uint64_t const uInitialTlbRevision = UINT64_C(0) - (IEMTLB_REVISION_INCR * 200U); 92 114 uint64_t const uInitialTlbPhysRev = UINT64_C(0) - (IEMTLB_PHYS_REV_INCR * 100U); … … 224 246 if (pVM->cpum.ro.GuestFeatures.fVmx) 225 247 { 226 intrc = PGMR3HandlerPhysicalTypeRegister(pVM, PGMPHYSHANDLERKIND_ALL, 0 /*fFlags*/,227 228 248 rc = PGMR3HandlerPhysicalTypeRegister(pVM, PGMPHYSHANDLERKIND_ALL, 0 /*fFlags*/, 249 iemVmxApicAccessPageHandler, 250 "VMX APIC-access page", &pVM->iem.s.hVmxApicAccessPage); 229 251 AssertLogRelRCReturn(rc, rc); 230 252 } -
trunk/src/VBox/VMM/include/IEMInternal.h
r96796 r96811 863 863 /** The VMX APIC-access page handler type. */ 864 864 PGMPHYSHANDLERTYPE hVmxApicAccessPage; 865 #ifndef VBOX_WITHOUT_CPUID_HOST_CALL 866 /** Set if the CPUID host call functionality is enabled. */ 867 bool fCpuIdHostCall; 868 #endif 865 869 } IEM; 866 870
Note:
See TracChangeset
for help on using the changeset viewer.