Changeset 103847 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Mar 14, 2024 11:29:54 AM (11 months ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompiler.cpp
r103839 r103847 8495 8495 8496 8496 8497 /**8498 * Formats TB flags (IEM_F_XXX and IEMTB_F_XXX) to string.8499 * @returns pszBuf.8500 * @param fFlags The flags.8501 * @param pszBuf The output buffer.8502 * @param cbBuf The output buffer size. At least 32 bytes.8503 */8504 DECLHIDDEN(const char *) iemTbFlagsToString(uint32_t fFlags, char *pszBuf, size_t cbBuf) RT_NOEXCEPT8505 {8506 Assert(cbBuf >= 32);8507 static RTSTRTUPLE const s_aModes[] =8508 {8509 /* [00] = */ { RT_STR_TUPLE("16BIT") },8510 /* [01] = */ { RT_STR_TUPLE("32BIT") },8511 /* [02] = */ { RT_STR_TUPLE("!2!") },8512 /* [03] = */ { RT_STR_TUPLE("!3!") },8513 /* [04] = */ { RT_STR_TUPLE("16BIT_PRE_386") },8514 /* [05] = */ { RT_STR_TUPLE("32BIT_FLAT") },8515 /* [06] = */ { RT_STR_TUPLE("!6!") },8516 /* [07] = */ { RT_STR_TUPLE("!7!") },8517 /* [08] = */ { RT_STR_TUPLE("16BIT_PROT") },8518 /* [09] = */ { RT_STR_TUPLE("32BIT_PROT") },8519 /* [0a] = */ { RT_STR_TUPLE("64BIT") },8520 /* [0b] = */ { RT_STR_TUPLE("!b!") },8521 /* [0c] = */ { RT_STR_TUPLE("16BIT_PROT_PRE_386") },8522 /* [0d] = */ { RT_STR_TUPLE("32BIT_PROT_FLAT") },8523 /* [0e] = */ { RT_STR_TUPLE("!e!") },8524 /* [0f] = */ { RT_STR_TUPLE("!f!") },8525 /* [10] = */ { RT_STR_TUPLE("!10!") },8526 /* [11] = */ { RT_STR_TUPLE("!11!") },8527 /* [12] = */ { RT_STR_TUPLE("!12!") },8528 /* [13] = */ { RT_STR_TUPLE("!13!") },8529 /* [14] = */ { RT_STR_TUPLE("!14!") },8530 /* [15] = */ { RT_STR_TUPLE("!15!") },8531 /* [16] = */ { RT_STR_TUPLE("!16!") },8532 /* [17] = */ { RT_STR_TUPLE("!17!") },8533 /* [18] = */ { RT_STR_TUPLE("16BIT_PROT_V86") },8534 /* [19] = */ { RT_STR_TUPLE("32BIT_PROT_V86") },8535 /* [1a] = */ { RT_STR_TUPLE("!1a!") },8536 /* [1b] = */ { RT_STR_TUPLE("!1b!") },8537 /* [1c] = */ { RT_STR_TUPLE("!1c!") },8538 /* [1d] = */ { RT_STR_TUPLE("!1d!") },8539 /* [1e] = */ { RT_STR_TUPLE("!1e!") },8540 /* [1f] = */ { RT_STR_TUPLE("!1f!") },8541 };8542 AssertCompile(RT_ELEMENTS(s_aModes) == IEM_F_MODE_MASK + 1);8543 memcpy(pszBuf, s_aModes[fFlags & IEM_F_MODE_MASK].psz, s_aModes[fFlags & IEM_F_MODE_MASK].cch);8544 size_t off = s_aModes[fFlags & IEM_F_MODE_MASK].cch;8545 8546 pszBuf[off++] = ' ';8547 pszBuf[off++] = 'C';8548 pszBuf[off++] = 'P';8549 pszBuf[off++] = 'L';8550 pszBuf[off++] = '0' + ((fFlags >> IEM_F_X86_CPL_SHIFT) & IEM_F_X86_CPL_SMASK);8551 Assert(off < 32);8552 8553 fFlags &= ~(IEM_F_MODE_MASK | IEM_F_X86_CPL_SMASK);8554 8555 static struct { const char *pszName; uint32_t cchName; uint32_t fFlag; } const s_aFlags[] =8556 {8557 { RT_STR_TUPLE("BYPASS_HANDLERS"), IEM_F_BYPASS_HANDLERS },8558 { RT_STR_TUPLE("PENDING_BRK_INSTR"), IEM_F_PENDING_BRK_INSTR },8559 { RT_STR_TUPLE("PENDING_BRK_DATA"), IEM_F_PENDING_BRK_DATA },8560 { RT_STR_TUPLE("PENDING_BRK_X86_IO"), IEM_F_PENDING_BRK_X86_IO },8561 { RT_STR_TUPLE("X86_DISREGARD_LOCK"), IEM_F_X86_DISREGARD_LOCK },8562 { RT_STR_TUPLE("X86_CTX_VMX"), IEM_F_X86_CTX_VMX },8563 { RT_STR_TUPLE("X86_CTX_SVM"), IEM_F_X86_CTX_SVM },8564 { RT_STR_TUPLE("X86_CTX_IN_GUEST"), IEM_F_X86_CTX_IN_GUEST },8565 { RT_STR_TUPLE("X86_CTX_SMM"), IEM_F_X86_CTX_SMM },8566 { RT_STR_TUPLE("INHIBIT_SHADOW"), IEMTB_F_INHIBIT_SHADOW },8567 { RT_STR_TUPLE("INHIBIT_NMI"), IEMTB_F_INHIBIT_NMI },8568 { RT_STR_TUPLE("CS_LIM_CHECKS"), IEMTB_F_CS_LIM_CHECKS },8569 { RT_STR_TUPLE("TYPE_THREADED"), IEMTB_F_TYPE_THREADED },8570 { RT_STR_TUPLE("TYPE_NATIVE"), IEMTB_F_TYPE_NATIVE },8571 };8572 if (fFlags)8573 for (unsigned i = 0; i < RT_ELEMENTS(s_aFlags); i++)8574 if (s_aFlags[i].fFlag & fFlags)8575 {8576 AssertReturnStmt(off + 1 + s_aFlags[i].cchName + 1 <= cbBuf, pszBuf[off] = '\0', pszBuf);8577 pszBuf[off++] = ' ';8578 memcpy(&pszBuf[off], s_aFlags[i].pszName, s_aFlags[i].cchName);8579 off += s_aFlags[i].cchName;8580 fFlags &= ~s_aFlags[i].fFlag;8581 if (!fFlags)8582 break;8583 }8584 pszBuf[off] = '\0';8585 8586 return pszBuf;8587 }8588 8589 8590 8497 DECLHIDDEN(void) iemNativeDisassembleTb(PCIEMTB pTb, PCDBGFINFOHLP pHlp) RT_NOEXCEPT 8591 8498 { -
trunk/src/VBox/VMM/VMMAll/IEMAllThrdRecompiler.cpp
r103828 r103847 1277 1277 * Threaded Recompiler Core * 1278 1278 *********************************************************************************************************************************/ 1279 /** 1280 * Formats TB flags (IEM_F_XXX and IEMTB_F_XXX) to string. 1281 * @returns pszBuf. 1282 * @param fFlags The flags. 1283 * @param pszBuf The output buffer. 1284 * @param cbBuf The output buffer size. At least 32 bytes. 1285 */ 1286 DECLEXPORT(const char *) iemTbFlagsToString(uint32_t fFlags, char *pszBuf, size_t cbBuf) RT_NOEXCEPT 1287 { 1288 Assert(cbBuf >= 32); 1289 static RTSTRTUPLE const s_aModes[] = 1290 { 1291 /* [00] = */ { RT_STR_TUPLE("16BIT") }, 1292 /* [01] = */ { RT_STR_TUPLE("32BIT") }, 1293 /* [02] = */ { RT_STR_TUPLE("!2!") }, 1294 /* [03] = */ { RT_STR_TUPLE("!3!") }, 1295 /* [04] = */ { RT_STR_TUPLE("16BIT_PRE_386") }, 1296 /* [05] = */ { RT_STR_TUPLE("32BIT_FLAT") }, 1297 /* [06] = */ { RT_STR_TUPLE("!6!") }, 1298 /* [07] = */ { RT_STR_TUPLE("!7!") }, 1299 /* [08] = */ { RT_STR_TUPLE("16BIT_PROT") }, 1300 /* [09] = */ { RT_STR_TUPLE("32BIT_PROT") }, 1301 /* [0a] = */ { RT_STR_TUPLE("64BIT") }, 1302 /* [0b] = */ { RT_STR_TUPLE("!b!") }, 1303 /* [0c] = */ { RT_STR_TUPLE("16BIT_PROT_PRE_386") }, 1304 /* [0d] = */ { RT_STR_TUPLE("32BIT_PROT_FLAT") }, 1305 /* [0e] = */ { RT_STR_TUPLE("!e!") }, 1306 /* [0f] = */ { RT_STR_TUPLE("!f!") }, 1307 /* [10] = */ { RT_STR_TUPLE("!10!") }, 1308 /* [11] = */ { RT_STR_TUPLE("!11!") }, 1309 /* [12] = */ { RT_STR_TUPLE("!12!") }, 1310 /* [13] = */ { RT_STR_TUPLE("!13!") }, 1311 /* [14] = */ { RT_STR_TUPLE("!14!") }, 1312 /* [15] = */ { RT_STR_TUPLE("!15!") }, 1313 /* [16] = */ { RT_STR_TUPLE("!16!") }, 1314 /* [17] = */ { RT_STR_TUPLE("!17!") }, 1315 /* [18] = */ { RT_STR_TUPLE("16BIT_PROT_V86") }, 1316 /* [19] = */ { RT_STR_TUPLE("32BIT_PROT_V86") }, 1317 /* [1a] = */ { RT_STR_TUPLE("!1a!") }, 1318 /* [1b] = */ { RT_STR_TUPLE("!1b!") }, 1319 /* [1c] = */ { RT_STR_TUPLE("!1c!") }, 1320 /* [1d] = */ { RT_STR_TUPLE("!1d!") }, 1321 /* [1e] = */ { RT_STR_TUPLE("!1e!") }, 1322 /* [1f] = */ { RT_STR_TUPLE("!1f!") }, 1323 }; 1324 AssertCompile(RT_ELEMENTS(s_aModes) == IEM_F_MODE_MASK + 1); 1325 memcpy(pszBuf, s_aModes[fFlags & IEM_F_MODE_MASK].psz, s_aModes[fFlags & IEM_F_MODE_MASK].cch); 1326 size_t off = s_aModes[fFlags & IEM_F_MODE_MASK].cch; 1327 1328 pszBuf[off++] = ' '; 1329 pszBuf[off++] = 'C'; 1330 pszBuf[off++] = 'P'; 1331 pszBuf[off++] = 'L'; 1332 pszBuf[off++] = '0' + ((fFlags >> IEM_F_X86_CPL_SHIFT) & IEM_F_X86_CPL_SMASK); 1333 Assert(off < 32); 1334 1335 fFlags &= ~(IEM_F_MODE_MASK | IEM_F_X86_CPL_SMASK); 1336 1337 static struct { const char *pszName; uint32_t cchName; uint32_t fFlag; } const s_aFlags[] = 1338 { 1339 { RT_STR_TUPLE("BYPASS_HANDLERS"), IEM_F_BYPASS_HANDLERS }, 1340 { RT_STR_TUPLE("PENDING_BRK_INSTR"), IEM_F_PENDING_BRK_INSTR }, 1341 { RT_STR_TUPLE("PENDING_BRK_DATA"), IEM_F_PENDING_BRK_DATA }, 1342 { RT_STR_TUPLE("PENDING_BRK_X86_IO"), IEM_F_PENDING_BRK_X86_IO }, 1343 { RT_STR_TUPLE("X86_DISREGARD_LOCK"), IEM_F_X86_DISREGARD_LOCK }, 1344 { RT_STR_TUPLE("X86_CTX_VMX"), IEM_F_X86_CTX_VMX }, 1345 { RT_STR_TUPLE("X86_CTX_SVM"), IEM_F_X86_CTX_SVM }, 1346 { RT_STR_TUPLE("X86_CTX_IN_GUEST"), IEM_F_X86_CTX_IN_GUEST }, 1347 { RT_STR_TUPLE("X86_CTX_SMM"), IEM_F_X86_CTX_SMM }, 1348 { RT_STR_TUPLE("INHIBIT_SHADOW"), IEMTB_F_INHIBIT_SHADOW }, 1349 { RT_STR_TUPLE("INHIBIT_NMI"), IEMTB_F_INHIBIT_NMI }, 1350 { RT_STR_TUPLE("CS_LIM_CHECKS"), IEMTB_F_CS_LIM_CHECKS }, 1351 { RT_STR_TUPLE("TYPE_THREADED"), IEMTB_F_TYPE_THREADED }, 1352 { RT_STR_TUPLE("TYPE_NATIVE"), IEMTB_F_TYPE_NATIVE }, 1353 }; 1354 if (fFlags) 1355 for (unsigned i = 0; i < RT_ELEMENTS(s_aFlags); i++) 1356 if (s_aFlags[i].fFlag & fFlags) 1357 { 1358 AssertReturnStmt(off + 1 + s_aFlags[i].cchName + 1 <= cbBuf, pszBuf[off] = '\0', pszBuf); 1359 pszBuf[off++] = ' '; 1360 memcpy(&pszBuf[off], s_aFlags[i].pszName, s_aFlags[i].cchName); 1361 off += s_aFlags[i].cchName; 1362 fFlags &= ~s_aFlags[i].fFlag; 1363 if (!fFlags) 1364 break; 1365 } 1366 pszBuf[off] = '\0'; 1367 1368 return pszBuf; 1369 } 1370 1279 1371 1280 1372 /** @callback_method_impl{FNDISREADBYTES, Dummy.} */
Note:
See TracChangeset
for help on using the changeset viewer.