- Timestamp:
- Mar 30, 2023 4:11:16 PM (2 years ago)
- svn:sync-xref-src-repo-rev:
- 156624
- Location:
- trunk
- Files:
-
- 4 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/dis.h
r99232 r99241 42 42 #include <VBox/types.h> 43 43 #include <VBox/dis-x86-amd64.h> 44 #if defined(VBOX_DIS_WITH_ARMV8) 45 # include <VBox/dis-armv8.h> 46 #endif 44 47 #include <iprt/assert.h> 45 48 … … 245 248 /** x86/amd64 specific state. */ 246 249 DISOPPARAMX86 x86; 250 #if defined(VBOX_DIS_WITH_ARMV8) 251 /** ARMv8 specific state. */ 252 DISOPPARAMARMV8 armv8; 253 #endif 247 254 } arch; 248 255 … … 338 345 /** x86/amd64 specific state. */ 339 346 DISSTATEX86 x86; 347 #if defined(VBOX_DIS_WITH_ARMV8) 348 /** ARMv8 specific state. */ 349 DISSTATEARMV8 armv8; 350 #endif 340 351 } arch; 341 352 -
trunk/include/VBox/types.h
r99225 r99241 1214 1214 DISCPUMODE_32BIT, 1215 1215 DISCPUMODE_64BIT, 1216 1217 /** @name ARMv8 modes. 1218 * @{ */ 1219 /** AArch64 A64 instruction set. */ 1220 DISCPUMODE_ARMV8_A64, 1221 /** AArch32 A32 instruction set. */ 1222 DISCPUMODE_ARMV8_A32, 1223 /** AArch32 T32 (aka Thumb) instruction set. */ 1224 DISCPUMODE_ARMV8_T32, 1225 /** @} */ 1226 1216 1227 /** hack forcing the size of the enum to 32-bits. */ 1217 1228 DISCPUMODE_MAKE_32BIT_HACK = 0x7fffffff -
trunk/src/VBox/Disassembler/Disasm.cpp
r99239 r99241 307 307 RT_ZERO(*pDis); 308 308 309 #ifdef VBOX_STRICT 310 pDis->Param1.uValue = UINT64_C(0xb1b1b1b1b1b1b1b1); 311 pDis->Param2.uValue = UINT64_C(0xb2b2b2b2b2b2b2b2); 312 pDis->Param3.uValue = UINT64_C(0xb3b3b3b3b3b3b3b3); 313 #endif 314 309 315 pDis->rc = VINF_SUCCESS; 310 316 pDis->uInstrAddr = uInstrAddr; … … 312 318 pDis->pvUser = pvUser; 313 319 pDis->uCpuMode = (uint8_t)enmCpuMode; 320 321 switch (enmCpuMode) 322 { 323 case DISCPUMODE_16BIT: 324 case DISCPUMODE_32BIT: 325 case DISCPUMODE_64BIT: 314 326 #if defined(VBOX_DIS_WITH_X86_AMD64) 315 return disInitializeStateX86(pDis, enmCpuMode, fFilter); 316 #else 317 return VERR_NOT_SUPPORTED; 318 #endif 327 return disInitializeStateX86(pDis, enmCpuMode, fFilter); 328 #else 329 return NULL; 330 #endif 331 case DISCPUMODE_ARMV8_A64: 332 case DISCPUMODE_ARMV8_A32: 333 case DISCPUMODE_ARMV8_T32: 334 #if defined(VBOX_DIS_WITH_ARMV8) 335 return disInitializeStateArmV8(pDis, enmCpuMode, fFilter); 336 #else 337 return NULL; 338 #endif 339 default: 340 break; 341 } 342 343 AssertReleaseFailed(); /* Should never get here. */ 344 return NULL; 319 345 } 320 346 … … 341 367 PCDISOPCODE paOneByteMap = disInitializeState(pDis, uInstrAddr, enmCpuMode, fFilter, pfnReadBytes, pvUser); 342 368 disPrefetchBytes(pDis); 369 370 switch (enmCpuMode) 371 { 372 case DISCPUMODE_16BIT: 373 case DISCPUMODE_32BIT: 374 case DISCPUMODE_64BIT: 343 375 #if defined(VBOX_DIS_WITH_X86_AMD64) 344 return disInstrWorkerX86(pDis, paOneByteMap, pcbInstr); 345 #else 346 return VERR_NOT_SUPPORTED; 347 #endif 376 return disInstrWorkerX86(pDis, paOneByteMap, pcbInstr); 377 #else 378 return VERR_NOT_SUPPORTED; 379 #endif 380 case DISCPUMODE_ARMV8_A64: 381 case DISCPUMODE_ARMV8_A32: 382 case DISCPUMODE_ARMV8_T32: 383 #if defined(VBOX_DIS_WITH_ARMV8) 384 return disInstrWorkerArmV8(pDis, paOneByteMap, pcbInstr); 385 #else 386 return VERR_NOT_SUPPORTED; 387 #endif 388 default: 389 break; 390 } 391 392 AssertReleaseFailed(); /* Should never get here. */ 393 return VERR_INTERNAL_ERROR; 348 394 } 349 395 … … 390 436 } 391 437 438 switch (enmCpuMode) 439 { 440 case DISCPUMODE_16BIT: 441 case DISCPUMODE_32BIT: 442 case DISCPUMODE_64BIT: 392 443 #if defined(VBOX_DIS_WITH_X86_AMD64) 393 return disInstrWorkerX86(pDis, paOneByteMap, pcbInstr); 394 #else 395 return VERR_NOT_SUPPORTED; 396 #endif 444 return disInstrWorkerX86(pDis, paOneByteMap, pcbInstr); 445 #else 446 return VERR_NOT_SUPPORTED; 447 #endif 448 case DISCPUMODE_ARMV8_A64: 449 case DISCPUMODE_ARMV8_A32: 450 case DISCPUMODE_ARMV8_T32: 451 #if defined(VBOX_DIS_WITH_ARMV8) 452 return disInstrWorkerArmV8(pDis, paOneByteMap, pcbInstr); 453 #else 454 return VERR_NOT_SUPPORTED; 455 #endif 456 default: 457 break; 458 } 459 460 AssertReleaseFailed(); /* Should never get here. */ 461 return VERR_INTERNAL_ERROR; 397 462 } 398 463 -
trunk/src/VBox/Disassembler/DisasmInternal.h
r99239 r99241 208 208 DECLHIDDEN(int) disInstrWorkerX86(PDISSTATE pDis, PCDISOPCODE paOneByteMap, uint32_t *pcbInstr); 209 209 #endif 210 #if defined(VBOX_DIS_WITH_ARMV8) 211 /* x86/amd64 */ 212 DECLHIDDEN(PCDISOPCODE) disInitializeStateArmV8(PDISSTATE pDis, DISCPUMODE enmCpuMode, uint32_t fFilter); 213 DECLHIDDEN(int) disInstrWorkerArmV8(PDISSTATE pDis, PCDISOPCODE paOneByteMap, uint32_t *pcbInstr); 214 #endif 210 215 211 216 size_t disFormatBytes(PCDISSTATE pDis, char *pszDst, size_t cchDst, uint32_t fFlags); -
trunk/src/VBox/Disassembler/Makefile.kmk
r99239 r99241 51 51 DisasmR3Static_EXTENDS = DisasmR3 52 52 53 ifdef VBOX_WITH_VIRT_ARMV8 54 LIBRARIES += DisasmR3-armv8 55 DisasmR3-armv8_TEMPLATE = VBoxR3Dll 56 DisasmR3-armv8_DEFS = IN_DIS VBOX_DIS_WITH_ARMV8 57 DisasmR3-armv8_SOURCES = \ 58 Disasm.cpp \ 59 DisasmCore-armv8.cpp \ 60 DisasmFormatBytes.cpp 61 endif 62 53 63 ifndef VBOX_ONLY_VALIDATIONKIT 54 64
Note:
See TracChangeset
for help on using the changeset viewer.