VirtualBox

Changeset 99241 in vbox for trunk


Ignore:
Timestamp:
Mar 30, 2023 4:11:16 PM (2 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
156624
Message:

Disassembler: ARMv8 skeleton, bugref:10394

Location:
trunk
Files:
4 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/dis.h

    r99232 r99241  
    4242#include <VBox/types.h>
    4343#include <VBox/dis-x86-amd64.h>
     44#if defined(VBOX_DIS_WITH_ARMV8)
     45# include <VBox/dis-armv8.h>
     46#endif
    4447#include <iprt/assert.h>
    4548
     
    245248        /** x86/amd64 specific state. */
    246249        DISOPPARAMX86   x86;
     250#if defined(VBOX_DIS_WITH_ARMV8)
     251        /** ARMv8 specific state. */
     252        DISOPPARAMARMV8 armv8;
     253#endif
    247254    } arch;
    248255
     
    338345        /** x86/amd64 specific state. */
    339346        DISSTATEX86     x86;
     347#if defined(VBOX_DIS_WITH_ARMV8)
     348        /** ARMv8 specific state. */
     349        DISSTATEARMV8   armv8;
     350#endif
    340351    } arch;
    341352
  • trunk/include/VBox/types.h

    r99225 r99241  
    12141214    DISCPUMODE_32BIT,
    12151215    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
    12161227    /** hack forcing the size of the enum to 32-bits. */
    12171228    DISCPUMODE_MAKE_32BIT_HACK = 0x7fffffff
  • trunk/src/VBox/Disassembler/Disasm.cpp

    r99239 r99241  
    307307    RT_ZERO(*pDis);
    308308
     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
    309315    pDis->rc                = VINF_SUCCESS;
    310316    pDis->uInstrAddr        = uInstrAddr;
     
    312318    pDis->pvUser            = pvUser;
    313319    pDis->uCpuMode          = (uint8_t)enmCpuMode;
     320
     321    switch (enmCpuMode)
     322    {
     323        case DISCPUMODE_16BIT:
     324        case DISCPUMODE_32BIT:
     325        case DISCPUMODE_64BIT:
    314326#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;
    319345}
    320346
     
    341367    PCDISOPCODE paOneByteMap = disInitializeState(pDis, uInstrAddr, enmCpuMode, fFilter, pfnReadBytes, pvUser);
    342368    disPrefetchBytes(pDis);
     369
     370    switch (enmCpuMode)
     371    {
     372        case DISCPUMODE_16BIT:
     373        case DISCPUMODE_32BIT:
     374        case DISCPUMODE_64BIT:
    343375#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;
    348394}
    349395
     
    390436    }
    391437
     438    switch (enmCpuMode)
     439    {
     440        case DISCPUMODE_16BIT:
     441        case DISCPUMODE_32BIT:
     442        case DISCPUMODE_64BIT:
    392443#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;
    397462}
    398463
  • trunk/src/VBox/Disassembler/DisasmInternal.h

    r99239 r99241  
    208208DECLHIDDEN(int)         disInstrWorkerX86(PDISSTATE pDis, PCDISOPCODE paOneByteMap, uint32_t *pcbInstr);
    209209#endif
     210#if defined(VBOX_DIS_WITH_ARMV8)
     211/* x86/amd64 */
     212DECLHIDDEN(PCDISOPCODE) disInitializeStateArmV8(PDISSTATE pDis, DISCPUMODE enmCpuMode, uint32_t fFilter);
     213DECLHIDDEN(int)         disInstrWorkerArmV8(PDISSTATE pDis, PCDISOPCODE paOneByteMap, uint32_t *pcbInstr);
     214#endif
    210215
    211216size_t disFormatBytes(PCDISSTATE pDis, char *pszDst, size_t cchDst, uint32_t fFlags);
  • trunk/src/VBox/Disassembler/Makefile.kmk

    r99239 r99241  
    5151DisasmR3Static_EXTENDS  = DisasmR3
    5252
     53ifdef 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
     61endif
     62
    5363ifndef VBOX_ONLY_VALIDATIONKIT
    5464
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