VirtualBox

Changeset 106625 in vbox


Ignore:
Timestamp:
Oct 23, 2024 3:45:04 PM (5 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
165467
Message:

SUPDrv: Making it build on win.arm64... jiraref:VBP-1253

Location:
trunk
Files:
6 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/include/iprt/asmdefs-arm.h

    r106604 r106625  
    203203#elif defined(ASM_FORMAT_ELF)
    204204        .hidden         NAME(\a_Name)
     205#elif defined(ASM_FORMAT_PE)
     206        .def            NAME(\a_Name)
     207        .type           32      /* function */
     208        .endef
    205209#endif
    206210        .globl          NAME(\a_Name)
     
    209213
    210214
     215/**
     216 * Starts an exported procedure.
     217 *
     218 * @param   a_Name      The unmangled symbol name.
     219 */
     220.macro BEGINPROC_EXPORTED, a_Name
     221#ifdef ASM_FORMAT_MACHO
     222        //.private_extern NAME(\a_Name)
     223#elif defined(ASM_FORMAT_ELF)
     224        //.hidden         NAME(\a_Name)
     225#elif defined(ASM_FORMAT_PE)
     226        .pushsection    .drectve
     227        .string "-export:\a_Name"
     228        .popsection
     229        .def            NAME(\a_Name)
     230        .type           32      /* function */
     231        .endef
     232#endif
     233        .globl          NAME(\a_Name)
     234NAME(\a_Name):
     235.endm
     236
     237
     238/**
     239 * Ends a procedure.
     240 *
     241 * @param   a_Name      The unmangled symbol name.
     242 */
     243.macro ENDPROC, a_Name
     244NAME(\a_Name)\()_EndProc:
     245.endm
     246
     247
    211248/** @} */
    212249
  • trunk/src/VBox/HostDrivers/Support/Makefile.kmk

    r106061 r106625  
    783783  VBoxDrv_SOURCES.win     = \
    784784        win/SUPDrv-win.cpp \
    785         win/SUPDrvA-win.asm \
    786785        win/VBoxDrv.rc
     786  VBoxDrv_SOURCES.win.x86 = \
     787        win/SUPDrvA-win.asm
     788  VBoxDrv_SOURCES.win.amd64 = \
     789        win/SUPDrvA-win.asm
    787790  ifdef VBOX_WITH_HARDENING
    788791   VBoxDrv_SOURCES.win   += \
     
    807810  endif
    808811  ifn1of ($(KBUILD_TARGET), linux freebsd)
    809    VBoxDrv_SOURCES       += \
     812   VBoxDrv_SOURCES.x86   += \
    810813        SUPDrvTracerA.asm
     814   VBoxDrv_SOURCES.amd64 += \
     815        SUPDrvTracerA.asm
     816   VBoxDrv_SOURCES.arm64 += \
     817        SUPDrvTracerA-arm64.S
    811818  endif
    812819
  • trunk/src/VBox/HostDrivers/Support/SUPDrv.cpp

    r106061 r106625  
    4646#endif
    4747#include <iprt/asm.h>
    48 #include <iprt/asm-amd64-x86.h>
    4948#include <iprt/asm-math.h>
     49#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
     50# include <iprt/asm-amd64-x86.h>
     51#elif defined(RT_ARCH_ARM64) || defined(RT_ARCH_ARM32)
     52# include <iprt/asm-arm.h>
     53#else
     54# error "Port me!"
     55#endif
    5056#include <iprt/cpuset.h>
    5157#if defined(RT_OS_DARWIN) || defined(RT_OS_SOLARIS) || defined(RT_OS_WINDOWS)
     
    247253        /* Entries with absolute addresses determined at runtime, fixup
    248254           code makes ugly ASSUMPTIONS about the order here: */
    249     SUPEXP_CUSTOM(      0,  SUPR0AbsIs64bit,          0),
    250     SUPEXP_CUSTOM(      0,  SUPR0Abs64bitKernelCS,    0),
    251     SUPEXP_CUSTOM(      0,  SUPR0Abs64bitKernelSS,    0),
    252     SUPEXP_CUSTOM(      0,  SUPR0Abs64bitKernelDS,    0),
    253     SUPEXP_CUSTOM(      0,  SUPR0AbsKernelCS,         0),
    254     SUPEXP_CUSTOM(      0,  SUPR0AbsKernelSS,         0),
    255     SUPEXP_CUSTOM(      0,  SUPR0AbsKernelDS,         0),
    256     SUPEXP_CUSTOM(      0,  SUPR0AbsKernelES,         0),
    257     SUPEXP_CUSTOM(      0,  SUPR0AbsKernelFS,         0),
    258     SUPEXP_CUSTOM(      0,  SUPR0AbsKernelGS,         0),
     255    SUPEXP_CUSTOM(      0,  SUPR0AbsIs64bit,          0),   /* only-amd64, only-x86 */
     256    SUPEXP_CUSTOM(      0,  SUPR0Abs64bitKernelCS,    0),   /* only-amd64, only-x86 */
     257    SUPEXP_CUSTOM(      0,  SUPR0Abs64bitKernelSS,    0),   /* only-amd64, only-x86 */
     258    SUPEXP_CUSTOM(      0,  SUPR0Abs64bitKernelDS,    0),   /* only-amd64, only-x86 */
     259    SUPEXP_CUSTOM(      0,  SUPR0AbsKernelCS,         0),   /* only-amd64, only-x86 */
     260    SUPEXP_CUSTOM(      0,  SUPR0AbsKernelSS,         0),   /* only-amd64, only-x86 */
     261    SUPEXP_CUSTOM(      0,  SUPR0AbsKernelDS,         0),   /* only-amd64, only-x86 */
     262    SUPEXP_CUSTOM(      0,  SUPR0AbsKernelES,         0),   /* only-amd64, only-x86 */
     263    SUPEXP_CUSTOM(      0,  SUPR0AbsKernelFS,         0),   /* only-amd64, only-x86 */
     264    SUPEXP_CUSTOM(      0,  SUPR0AbsKernelGS,         0),   /* only-amd64, only-x86 */
    259265        /* Normal function & data pointers: */
    260266    SUPEXP_CUSTOM(      0,  g_pSUPGlobalInfoPage,     &g_pSUPGlobalInfoPage),            /* SED: DATA */
     
    271277    SUPEXP_STK_BACK(    5,  SUPR0ContAlloc),
    272278    SUPEXP_STK_BACK(    2,  SUPR0ContFree),
    273     SUPEXP_STK_BACK(    2,  SUPR0ChangeCR4),
    274     SUPEXP_STK_BACK(    1,  SUPR0EnableVTx),
     279    SUPEXP_STK_BACK(    2,  SUPR0ChangeCR4),                /* only-amd64, only-x86 */
     280    SUPEXP_STK_BACK(    1,  SUPR0EnableVTx),                /* only-amd64, only-x86 */
    275281    SUPEXP_STK_OKAY(    1,  SUPR0FpuBegin),
    276282    SUPEXP_STK_OKAY(    1,  SUPR0FpuEnd),
    277     SUPEXP_STK_BACK(    0,  SUPR0SuspendVTxOnCpu),
    278     SUPEXP_STK_BACK(    1,  SUPR0ResumeVTxOnCpu),
    279     SUPEXP_STK_OKAY(    1,  SUPR0GetCurrentGdtRw),
     283    SUPEXP_STK_BACK(    0,  SUPR0SuspendVTxOnCpu),          /* only-amd64, only-x86 */
     284    SUPEXP_STK_BACK(    1,  SUPR0ResumeVTxOnCpu),           /* only-amd64, only-x86 */
     285    SUPEXP_STK_OKAY(    1,  SUPR0GetCurrentGdtRw),          /* only-amd64, only-x86 */
    280286    SUPEXP_STK_OKAY(    0,  SUPR0GetKernelFeatures),
    281     SUPEXP_STK_BACK(    3,  SUPR0GetHwvirtMsrs),
     287    SUPEXP_STK_BACK(    3,  SUPR0GetHwvirtMsrs),            /* only-amd64, only-x86 */
    282288    SUPEXP_STK_BACK(    0,  SUPR0GetPagingMode),
    283     SUPEXP_STK_BACK(    1,  SUPR0GetSvmUsability),
    284     SUPEXP_STK_BACK(    1,  SUPR0GetVTSupport),
    285     SUPEXP_STK_BACK(    1,  SUPR0GetVmxUsability),
     289    SUPEXP_STK_BACK(    1,  SUPR0GetSvmUsability),          /* only-amd64, only-x86 */
     290    SUPEXP_STK_BACK(    1,  SUPR0GetVTSupport),             /* only-amd64, only-x86 */
     291    SUPEXP_STK_BACK(    1,  SUPR0GetVmxUsability),          /* only-amd64, only-x86 */
    286292    SUPEXP_STK_BACK(    2,  SUPR0LdrIsLockOwnerByMod),
    287293    SUPEXP_STK_BACK(    1,  SUPR0LdrLock),
     
    701707                         * here rather than distributing this to OS specific files. At least for now.
    702708                         */
    703 #ifdef RT_OS_DARWIN
    704 # if ARCH_BITS == 32
     709#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
     710# ifdef RT_OS_DARWIN
     711#  if ARCH_BITS == 32
    705712                        if (SUPR0GetPagingMode() >= SUPPAGINGMODE_AMD64)
    706713                        {
     
    718725                        g_aFunctions[8].pfn = (void *)0x10;                     /* SUPR0AbsKernelFS - KERNEL_DS, seg.h */
    719726                        g_aFunctions[9].pfn = (void *)0x48;                     /* SUPR0AbsKernelGS - CPU_DATA_GS, seg.h */
    720 # else /* 64-bit darwin: */
     727#  else /* 64-bit darwin: */
    721728                        g_aFunctions[0].pfn = (void *)1;                        /* SUPR0AbsIs64bit */
    722729                        g_aFunctions[1].pfn = (void *)(uintptr_t)ASMGetCS();    /* SUPR0Abs64bitKernelCS */
     
    730737                        g_aFunctions[9].pfn = (void *)0;                        /* SUPR0AbsKernelGS */
    731738
    732 # endif
    733 #else  /* !RT_OS_DARWIN */
    734 # if ARCH_BITS == 64
     739#  endif
     740# else  /* !RT_OS_DARWIN */
     741#  if ARCH_BITS == 64
    735742                        g_aFunctions[0].pfn = (void *)1;                        /* SUPR0AbsIs64bit */
    736743                        g_aFunctions[1].pfn = (void *)(uintptr_t)ASMGetCS();    /* SUPR0Abs64bitKernelCS */
    737744                        g_aFunctions[2].pfn = (void *)(uintptr_t)ASMGetSS();    /* SUPR0Abs64bitKernelSS */
    738745                        g_aFunctions[3].pfn = (void *)(uintptr_t)ASMGetDS();    /* SUPR0Abs64bitKernelDS */
    739 # else
     746#  else
    740747                        g_aFunctions[0].pfn = g_aFunctions[1].pfn = g_aFunctions[2].pfn = g_aFunctions[3].pfn = (void *)0;
    741 # endif
     748#  endif
    742749                        g_aFunctions[4].pfn = (void *)(uintptr_t)ASMGetCS();    /* SUPR0AbsKernelCS */
    743750                        g_aFunctions[5].pfn = (void *)(uintptr_t)ASMGetSS();    /* SUPR0AbsKernelSS */
     
    746753                        g_aFunctions[8].pfn = (void *)(uintptr_t)ASMGetFS();    /* SUPR0AbsKernelFS */
    747754                        g_aFunctions[9].pfn = (void *)(uintptr_t)ASMGetGS();    /* SUPR0AbsKernelGS */
    748 #endif /* !RT_OS_DARWIN */
     755# endif /* !RT_OS_DARWIN */
     756#endif /* AMD64 || X86 */
    749757                        return VINF_SUCCESS;
    750758                    }
     
    41374145SUPR0DECL(SUPPAGINGMODE) SUPR0GetPagingMode(void)
    41384146{
     4147#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
    41394148    SUPPAGINGMODE enmMode;
    41404149
     
    42084217    }
    42094218    return enmMode;
     4219#else
     4220    /** @todo portme? */
     4221    return SUPPAGINGMODE_INVALID;
     4222#endif
    42104223}
    42114224SUPR0_EXPORT_SYMBOL(SUPR0GetPagingMode);
     
    42284241SUPR0DECL(RTCCUINTREG) SUPR0ChangeCR4(RTCCUINTREG fOrMask, RTCCUINTREG fAndMask)
    42294242{
    4230 #ifdef RT_OS_LINUX
     4243#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
     4244# ifdef RT_OS_LINUX
    42314245    return supdrvOSChangeCR4(fOrMask, fAndMask);
    4232 #else
     4246# else
    42334247    RTCCUINTREG uOld = ASMGetCR4();
    42344248    RTCCUINTREG uNew = (uOld & fAndMask) | fOrMask;
     
    42364250        ASMSetCR4(uNew);
    42374251    return uOld;
     4252# endif
     4253#else
     4254    RT_NOREF(fOrMask, fAndMask);
     4255    return RTCCUINTREG_MAX;
    42384256#endif
    42394257}
     
    42524270SUPR0DECL(int) SUPR0EnableVTx(bool fEnable)
    42534271{
    4254 #ifdef RT_OS_DARWIN
     4272#if defined(RT_OS_DARWIN) && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86))
    42554273    return supdrvOSEnableVTx(fEnable);
    42564274#else
     
    42714289SUPR0DECL(bool) SUPR0SuspendVTxOnCpu(void)
    42724290{
    4273 #ifdef RT_OS_DARWIN
     4291#if defined(RT_OS_DARWIN) && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86))
    42744292    return supdrvOSSuspendVTxOnCpu();
    42754293#else
     
    42894307SUPR0DECL(void) SUPR0ResumeVTxOnCpu(bool fSuspended)
    42904308{
    4291 #ifdef RT_OS_DARWIN
     4309#if defined(RT_OS_DARWIN) && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86))
    42924310    supdrvOSResumeVTxOnCpu(fSuspended);
    42934311#else
     
    43014319SUPR0DECL(int) SUPR0GetCurrentGdtRw(RTHCUINTPTR *pGdtRw)
    43024320{
    4303 #ifdef RT_OS_LINUX
     4321#if defined(RT_OS_LINUX) && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86))
    43044322    return supdrvOSGetCurrentGdtRw(pGdtRw);
    43054323#else
     
    43234341    *pfCaps = 0;
    43244342
     4343#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
    43254344    /* Check if the CPU even supports CPUID (extremely ancient CPUs). */
    43264345    if (ASMHasCpuId())
     
    43734392        }
    43744393    }
     4394#endif
    43754395    return VERR_UNSUPPORTED_CPU;
    43764396}
     
    43944414SUPR0DECL(int) SUPR0GetVmxUsability(bool *pfIsSmxModeAmbiguous)
    43954415{
     4416#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
    43964417    uint64_t   fFeatMsr;
    43974418    bool       fMaybeSmxMode;
     
    45014522
    45024523    return rc;
     4524
     4525#else  /* !defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86) */
     4526    if (pfIsSmxModeAmbiguous)
     4527        *pfIsSmxModeAmbiguous = false;
     4528    return VERR_UNSUPPORTED_CPU;
     4529#endif /* !defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86) */
    45034530}
    45044531SUPR0_EXPORT_SYMBOL(SUPR0GetVmxUsability);
     
    45154542SUPR0DECL(int) SUPR0GetSvmUsability(bool fInitSvm)
    45164543{
     4544#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
    45174545    int      rc;
    45184546    uint64_t fVmCr;
     
    45494577        rc = VERR_SVM_DISABLED;
    45504578    return rc;
     4579
     4580#else  /* !defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86) */
     4581    RT_NOREF(fInitSvm);
     4582    return VERR_UNSUPPORTED_CPU;
     4583#endif /* !defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86) */
    45514584}
    45524585SUPR0_EXPORT_SYMBOL(SUPR0GetSvmUsability);
    45534586
    45544587
     4588#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
    45554589/**
    45564590 * Queries the AMD-V and VT-x capabilities of the calling CPU.
     
    46384672    return rc;
    46394673}
     4674#endif /* !defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86) */
    46404675
    46414676
     
    46664701    AssertPtrReturn(pfCaps, VERR_INVALID_POINTER);
    46674702
     4703#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
    46684704    /*
    46694705     * Call common worker.
    46704706     */
    46714707    return supdrvQueryVTCapsInternal(pfCaps);
     4708#else
     4709    return VERR_UNSUPPORTED_CPU;
     4710#endif
    46724711}
    46734712SUPR0_EXPORT_SYMBOL(SUPR0QueryVTCaps);
    46744713
    46754714
     4715#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
    46764716/**
    46774717 * Queries the CPU microcode revision.
     
    46854725static int VBOXCALL supdrvQueryUcodeRev(uint32_t *puRevision)
    46864726{
    4687     int  rc = VERR_UNSUPPORTED_CPU;
     4727    int                  rc          = VERR_UNSUPPORTED_CPU;
    46884728    RTTHREADPREEMPTSTATE PreemptState = RTTHREADPREEMPTSTATE_INITIALIZER;
    46894729
     
    47404780    return rc;
    47414781}
     4782#endif /* !defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86) */
    47424783
    47434784
     
    47634804     * Call common worker.
    47644805     */
     4806#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
    47654807    return supdrvQueryUcodeRev(puRevision);
     4808#else
     4809    return VERR_UNSUPPORTED_CPU;
     4810#endif
    47664811}
    47674812SUPR0_EXPORT_SYMBOL(SUPR0QueryUcodeRev);
     
    47804825SUPR0DECL(int) SUPR0GetHwvirtMsrs(PSUPHWVIRTMSRS pMsrs, uint32_t fCaps, bool fForce)
    47814826{
    4782     NOREF(fForce);
    4783 
     4827#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
    47844828    int rc;
    47854829    RTTHREADPREEMPTSTATE PreemptState = RTTHREADPREEMPTSTATE_INITIALIZER;
     4830    NOREF(fForce);
    47864831
    47874832    /*
     
    48714916
    48724917    return rc;
     4918
     4919#else  /* !defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86) */
     4920    RT_NOREF(pMsrs, fCaps, fForce);
     4921    return VERR_UNSUPPORTED_CPU;
     4922#endif /* !defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86) */
    48734923}
    48744924SUPR0_EXPORT_SYMBOL(SUPR0GetHwvirtMsrs);
  • trunk/src/VBox/HostDrivers/Support/SUPDrvGip.cpp

    r106061 r106625  
    4646#endif
    4747#include <iprt/asm.h>
    48 #include <iprt/asm-amd64-x86.h>
     48#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
     49# include <iprt/asm-amd64-x86.h>
     50#elif defined(RT_ARCH_ARM64) || defined(RT_ARCH_ARM32)
     51# include <iprt/asm-arm.h>
     52#else
     53# error "Port me!"
     54#endif
    4955#include <iprt/asm-math.h>
    5056#include <iprt/cpuset.h>
     
    6773#endif
    6874#include <iprt/uint128.h>
    69 #include <iprt/x86.h>
     75#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
     76# include <iprt/x86.h>
     77#elif defined(RT_ARCH_ARM64)
     78# include <iprt/armv8.h>
     79#endif
    7080
    7181#include <VBox/param.h>
     
    189199 * @returns APIC ID.
    190200 * @param   pGip                The GIP, for SUPGIPGETCPU_XXX.
     201 *
     202 * @note    APIC ID == CPU ID on non-x86 platforms.
    191203 */
    192204DECLINLINE(uint32_t) supdrvGipGetApicId(PSUPGLOBALINFOPAGE pGip)
    193205{
     206#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
    194207    if (pGip->fGetGipCpu & SUPGIPGETCPU_APIC_ID_EXT_0B)
    195208        return ASMGetApicIdExt0B();
     
    197210        return ASMGetApicIdExt8000001E();
    198211    return ASMGetApicId();
     212
     213#elif defined(RT_ARCH_ARM64) && defined(RT_OS_WINDOWS)
     214    RT_NOREF(pGip);
     215    return (uint32_t)ASMGetThreadIdRoEL0();
     216#else
     217# error "port me"
     218#endif
    199219}
    200220
     
    202222/**
    203223 * Gets the APIC ID using the best available method, slow version.
     224 *
     225 * @note    APIC ID == CPU ID on non-x86 platforms.
    204226 */
    205227static uint32_t supdrvGipGetApicIdSlow(void)
    206228{
     229#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
    207230    uint32_t const idApic = ASMGetApicId();
    208231
     
    215238        uint32_t uEcx = 0;
    216239        uint32_t uEdx = 0;
    217 #if defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD)
     240# if defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD)
    218241        ASMCpuId_Idx_ECX(0xb, 0, &uEax, &uEbx, &uEcx, &uEdx);
    219 #else
     242# else
    220243        ASMCpuIdExSlow(0xb, 0, 0, 0, &uEax, &uEbx, &uEcx, &uEdx);
    221 #endif
     244# endif
    222245        if ((uEcx >> 8) != 0) /* level type != invalid */
    223246        {
     
    238261    }
    239262    return idApic;
    240 }
     263
     264#elif defined(RT_ARCH_ARM64) && defined(RT_OS_WINDOWS)
     265    return (uint32_t)ASMGetThreadIdRoEL0();
     266#else
     267# error "port me"
     268#endif
     269}
     270
    241271
    242272
     
    330360static DECLCALLBACK(void) supdrvGipDetectGetGipCpuCallback(RTCPUID idCpu, void *pvUser1, void *pvUser2)
    331361{
    332     PSUPDRVGIPDETECTGETCPU  pState = (PSUPDRVGIPDETECTGETCPU)pvUser1;
    333     PSUPGLOBALINFOPAGE      pGip   = (PSUPGLOBALINFOPAGE)pvUser2;
     362    PSUPDRVGIPDETECTGETCPU  pState  = (PSUPDRVGIPDETECTGETCPU)pvUser1;
     363    PSUPGLOBALINFOPAGE      pGip    = (PSUPGLOBALINFOPAGE)pvUser2;
     364    int const               iCpuSet = RTMpCpuIdToSetIndex(idCpu);
    334365    uint32_t                fSupported = 0;
    335366    uint32_t                idApic;
     367#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
    336368    uint32_t                uEax, uEbx, uEcx, uEdx;
    337     int                     iCpuSet;
     369#else
     370    uint32_t const          uEax = 0; /* Dummy for LogRel. */
     371#endif
    338372    NOREF(pGip);
    339373
    340374    AssertMsg(idCpu == RTMpCpuId(), ("idCpu=%#x RTMpCpuId()=%#x\n", idCpu, RTMpCpuId())); /* paranoia^3 */
    341375
     376
     377#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
    342378    /*
    343379     * Check that the CPU ID and CPU set index are interchangable.
    344380     */
    345     iCpuSet = RTMpCpuIdToSetIndex(idCpu);
    346381    if ((RTCPUID)iCpuSet == idCpu)
    347382    {
     
    356391             * Check whether the IDTR.LIMIT contains a CPU number.
    357392             */
    358 #ifdef RT_ARCH_X86
     393# ifdef RT_ARCH_X86
    359394            uint16_t const  cbIdt = sizeof(X86DESC64SYSTEM) * 256;
    360 #else
     395# else
    361396            uint16_t const  cbIdt = sizeof(X86DESCGATE)     * 256;
    362 #endif
     397# endif
    363398            RTIDTR          Idtr;
    364399            ASMGetIDTR(&Idtr);
     
    418453    if (uEax >= UINT32_C(0xb) && RTX86IsValidStdRange(uEax))
    419454    {
    420 #if defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD)
     455# if defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD)
    421456        ASMCpuId_Idx_ECX(0xb, 0, &uEax, &uEbx, &uEcx, &uEdx);
    422 #else
     457# else
    423458        ASMCpuIdExSlow(0xb, 0, 0, 0, &uEax, &uEbx, &uEcx, &uEdx);
    424 #endif
     459# endif
    425460        if ((uEcx >> 8) != 0) /* level type != invalid */
    426461        {
     
    442477    if (uEax >= UINT32_C(0x8000001e) && RTX86IsValidExtRange(uEax))
    443478    {
    444 #if defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD)
     479# if defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD)
    445480        ASMCpuId_Idx_ECX(UINT32_C(0x8000001e), 0, &uEax, &uEbx, &uEcx, &uEdx);
    446 #else
     481# else
    447482        ASMCpuIdExSlow(UINT32_C(0x8000001e), 0, 0, 0, &uEax, &uEbx, &uEcx, &uEdx);
    448 #endif
     483# endif
    449484        if (uEax || uEbx || uEcx || uEdx)
    450485        {
     
    465500    }
    466501
     502#else  /* !defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86) */
     503    idApic = supdrvGipGetApicIdSlow();
     504#endif /* !defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86) */
     505
    467506    /*
    468507     * Check that the APIC ID is unique.
    469508     */
     509#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
    470510    uEax = ASMGetApicId();
    471511    if (RT_LIKELY(   uEax < RT_ELEMENTS(pGip->aiCpuFromApicId)
     
    477517        fSupported |= SUPGIPGETCPU_APIC_ID;
    478518    }
    479     else if (   idApic == UINT32_MAX
    480              || idApic >= RT_ELEMENTS(pGip->aiCpuFromApicId) /* parnaoia */
    481              || ASMAtomicBitTestAndSet(pState->bmApicId, idApic))
     519    else
     520#endif /* defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) */
     521    if (   idApic == UINT32_MAX
     522        || idApic >= RT_ELEMENTS(pGip->aiCpuFromApicId) /* parnaoia */
     523        || ASMAtomicBitTestAndSet(pState->bmApicId, idApic))
    482524    {
    483525        AssertCompile(sizeof(pState->bmApicId) * 8 == RT_ELEMENTS(pGip->aiCpuFromApicId));
     
    17671809static SUPGIPMODE supdrvGipInitDetermineTscMode(PSUPDRVDEVEXT pDevExt)
    17681810{
     1811#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
    17691812    uint64_t u64DiffCoresIgnored;
    17701813    uint32_t uEAX, uEBX, uECX, uEDX;
     
    18381881
    18391882    return SUPGIPMODE_SYNC_TSC;
     1883
     1884#elif defined(RT_ARCH_ARM64)
     1885    RT_NOREF(pDevExt);
     1886    return SUPGIPMODE_INVARIANT_TSC;
     1887
     1888#else
     1889# error "Port me"
     1890#endif
    18401891}
    18411892
     
    29683019    TSCDELTA_DBG_VARS();
    29693020
     3021#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
    29703022    *pfEFlags = X86_EFL_IF | X86_EFL_1; /* should shut up most nagging compilers. */
     3023#else
     3024    *pfEFlags = 0;
     3025#endif
    29713026
    29723027    /*
     
    39984053    PSUPGIPCPU          pGipCpuMaster;
    39994054    uint32_t            iGipCpuMaster;
     4055#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
    40004056    uint32_t            u32Tmp;
     4057#endif
    40014058
    40024059    /* Validate input a bit. */
     
    40404097    AssertReturn(iGipCpuMaster < pGip->cCpus, VERR_INVALID_CPU_ID);
    40414098    pGipCpuMaster = &pGip->aCPUs[iGipCpuMaster];
     4099#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
    40424100    if (   (   (pGipCpuMaster->idApic & ~1) == (pGipCpuWorker->idApic & ~1)
    40434101            && pGip->cOnlineCpus > 2
     
    40704128            }
    40714129    }
     4130#endif /* defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) */
    40724131
    40734132    if (RTCpuSetIsMemberByIndex(&pGip->OnlineCpuSet, pGipCpuWorker->iCpuSet))
  • trunk/src/VBox/HostDrivers/Support/SUPDrvInternal.h

    r106061 r106625  
    352352 */
    353353#if defined(DEBUG) && !defined(SUPDRV_WITH_MSR_PROBER) && !defined(SUPDRV_WITHOUT_MSR_PROBER)
    354 # define SUPDRV_WITH_MSR_PROBER
     354# if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
     355#  define SUPDRV_WITH_MSR_PROBER
     356# endif
    355357#endif
    356358
  • trunk/src/VBox/HostDrivers/Support/SUPDrvTracerA-arm64.S

    r106611 r106625  
    1 ; $Id$
    2 ;; @file
    3 ; VirtualBox Support Driver - Tracer Interface, Assembly bits.
    4 ;
     1/* $Id$ */
     2/** @file
     3 * VirtualBox Support Driver - Tracer Interface, Assembly bits, ARM64.
     4 */
    55
    6 ;
    7 ; Copyright (C) 2012-2024 Oracle and/or its affiliates.
    8 ;
    9 ; This file is part of VirtualBox base platform packages, as
    10 ; available from https://www.virtualbox.org.
    11 ;
    12 ; This program is free software; you can redistribute it and/or
    13 ; modify it under the terms of the GNU General Public License
    14 ; as published by the Free Software Foundation, in version 3 of the
    15 ; License.
    16 ;
    17 ; This program is distributed in the hope that it will be useful, but
    18 ; WITHOUT ANY WARRANTY; without even the implied warranty of
    19 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    20 ; General Public License for more details.
    21 ;
    22 ; You should have received a copy of the GNU General Public License
    23 ; along with this program; if not, see <https://www.gnu.org/licenses>.
    24 ;
    25 ; The contents of this file may alternatively be used under the terms
    26 ; of the Common Development and Distribution License Version 1.0
    27 ; (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
    28 ; in the VirtualBox distribution, in which case the provisions of the
    29 ; CDDL are applicable instead of those of the GPL.
    30 ;
    31 ; You may elect to license modified versions of this file under the
    32 ; terms and conditions of either the GPL or the CDDL or both.
    33 ;
    34 ; SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
    35 ;
     6/*
     7 * Copyright (C) 2012-2024 Oracle and/or its affiliates.
     8 *
     9 * This file is part of VirtualBox base platform packages, as
     10 * available from https://www.virtualbox.org.
     11 *
     12 * This program is free software; you can redistribute it and/or
     13 * modify it under the terms of the GNU General Public License
     14 * as published by the Free Software Foundation, in version 3 of the
     15 * License.
     16 *
     17 * This program is distributed in the hope that it will be useful, but
     18 * WITHOUT ANY WARRANTY; without even the implied warranty of
     19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     20 * General Public License for more details.
     21 *
     22 * You should have received a copy of the GNU General Public License
     23 * along with this program; if not, see <https://www.gnu.org/licenses>.
     24 *
     25 * The contents of this file may alternatively be used under the terms
     26 * of the Common Development and Distribution License Version 1.0
     27 * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
     28 * in the VirtualBox distribution, in which case the provisions of the
     29 * CDDL are applicable instead of those of the GPL.
     30 *
     31 * You may elect to license modified versions of this file under the
     32 * terms and conditions of either the GPL or the CDDL or both.
     33 *
     34 * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
     35 */
    3636
    37 ;*******************************************************************************
    38 ;* Header Files                                                                *
    39 ;*******************************************************************************
    40 %include "iprt/asmdefs.mac"
     37/*********************************************************************************************************************************
     38*   Header Files                                                                                                                 *
     39*********************************************************************************************************************************/
     40#include "iprt/asmdefs-arm.h"
    4141
    4242
    43 ; External data.
    44 extern NAME(g_pfnSupdrvProbeFireKernel)
     43/* External data. */
     44.extern NAME(g_pfnSupdrvProbeFireKernel)
    4545
    4646
    4747BEGINCODE
    4848
    49 ;; Dummy stub function that just returns.
     49/** Dummy stub function that just returns. */
    5050BEGINPROC supdrvTracerProbeFireStub
    5151        ret
     
    5353
    5454
    55 ;; Tail jump function.
    56 EXPORTEDNAME SUPR0TracerFireProbe
    57 %ifdef RT_ARCH_AMD64
    58         mov     rax, [NAME(g_pfnSupdrvProbeFireKernel) wrt rip]
    59         jmp     rax
    60 %else
    61         mov     eax, [NAME(g_pfnSupdrvProbeFireKernel)]
    62         jmp     eax
    63 %endif
     55/** Tail jump function. */
     56BEGINPROC_EXPORTED SUPR0TracerFireProbe
     57        adrp    x8, PAGE(NAME(g_pfnSupdrvProbeFireKernel))
     58        ldr     x8, [x8, PAGEOFF(NAME(g_pfnSupdrvProbeFireKernel))]
     59        br      x8
    6460ENDPROC SUPR0TracerFireProbe
    6561
  • trunk/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp

    r106527 r106625  
    6363#include <VBox/err.h>
    6464
    65 #include <iprt/asm-amd64-x86.h>
     65#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
     66# include <iprt/asm-amd64-x86.h>
     67#elif defined(RT_ARCH_ARM64) || defined(RT_ARCH_ARM32)
     68# include <iprt/asm-arm.h>
     69#else
     70# error "Port me!"
     71#endif
    6672
    6773#ifdef VBOX_WITH_HARDENING
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