VirtualBox

Changeset 106635 in vbox


Ignore:
Timestamp:
Oct 23, 2024 9:30:37 PM (7 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
165477
Message:

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

Location:
trunk
Files:
4 edited

Legend:

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

    r106061 r106635  
    780780
    781781
    782 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) || defined(RT_ARCH_ARM64) ||defined(RT_ARCH_ARM32)
     782#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) || defined(RT_ARCH_ARM64) || defined(RT_ARCH_ARM32)
    783783
    784784/** @internal */
     
    793793DECLINLINE(uint64_t) SUPReadTsc(void)
    794794{
    795 # if defined(RT_ARCH_ARM64) || defined(RT_ARCH_ARM32)  /** @todo portme: ring-0 arm. */
    796     return ASMReadTSC();
    797 # else
    798795    PSUPGLOBALINFOPAGE pGip = g_pSUPGlobalInfoPage;
    799796    if (!pGip || pGip->enmUseTscDelta <= SUPGIPUSETSCDELTA_ROUGHLY_ZERO)
    800797        return ASMReadTSC();
    801798    return SUPReadTscWithDelta(pGip);
    802 # endif
    803799}
    804800
    805 #endif /* X86 || AMD64 || ARM */
     801#endif /* X86 || AMD64 || ARM64 || ARM32 */
    806802
    807803/** @internal */
  • trunk/src/VBox/HostDrivers/Support/Makefile.kmk

    r106634 r106635  
    764764        $(PATH_SDK_$(VBOX_WINDDK)_LIB)/BufferOverflowK.lib
    765765  endif
     766  VBoxDrv_LIBS.win.arm64  = \
     767        $(PATH_SDK_$(VBOX_WINDDK)_LIB)/BufferOverflowFastFailK.lib
    766768
    767769  #VBoxDrv_LDFLAGS.darwin   = -Wl,-sectcreate,__TEXT,__info_plist,$(VBoxDrv.kext_0_OUTDIR)/Info.plist
  • trunk/src/VBox/HostDrivers/Support/SUPLibAll.cpp

    r106061 r106635  
    4949#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
    5050# include <iprt/asm-amd64-x86.h>
     51#elif defined(RT_ARCH_ARM64) || defined(RT_ARCH_ARM32)
     52# include <iprt/asm-arm.h>
    5153#endif
    5254#include <iprt/errcore.h>
     
    5759
    5860
    59 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
     61#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) || defined(RT_ARCH_ARM64) || defined(RT_ARCH_ARM32)
    6062/**
    6163 * The slow case for SUPReadTsc where we need to apply deltas.
     
    8385     * Read the TSC and get the corresponding aCPUs index.
    8486     */
    85 #ifdef IN_RING3
     87# ifdef IN_RING3
     88#  if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
    8689    if (pGip->fGetGipCpu & SUPGIPGETCPU_RDTSCP_MASK_MAX_SET_CPUS)
    8790    {
     
    163166        for (;;)
    164167        {
    165             uint8_t idApic = ASMGetApicId();
     168            uint8_t const idApic = ASMGetApicId();
    166169            uTsc = ASMReadTSC();
    167170            if (RT_LIKELY(ASMGetApicId() == idApic))
     
    178181        }
    179182    }
     183
     184#  else /* !AMD64 || !X86 */
     185#   if defined(RT_OS_WINDOWS)
     186    /* Use TPIDRRO_EL0 (=cpu number) before and after reading the TSC. */
     187    uint32_t cTries = 0;
     188    for (;;)
     189    {
     190        RTCCUINTREG const idApic = ASMGetThreadIdRoEL0();
     191        uTsc = ASMReadTSC();
     192        if (RT_LIKELY(ASMGetThreadIdRoEL0() == idApic))
     193        {
     194            AssertBreakStmt(idApic < RT_ELEMENTS(pGip->aiCpuFromApicId), iGipCpu = UINT16_MAX);
     195            iGipCpu = pGip->aiCpuFromApicId[idApic & 0xffff];
     196            break;
     197        }
     198        if (cTries >= 16)
     199        {
     200            iGipCpu = UINT16_MAX;
     201            break;
     202        }
     203        cTries++;
     204    }
     205#   else
     206    /* Use RTMpCpuId before and after reading the TSC. */
     207    uint32_t cTries = 0;
     208    for (;;)
     209    {
     210        RTCPUID const idCpu = RTMpCpuId();
     211        uTsc = ASMReadTSC();
     212        if (RT_LIKELY(RTMpCpuId() == idCpu))
     213        {
     214            int const iCpuSet = RTMpCpuIdToSetIndex(idCpu);
     215            iGipCpu = pGip->aiCpuFromCpuSetIdx[iCpuSet];
     216            break;
     217        }
     218        if (cTries >= 16)
     219        {
     220            iGipCpu = UINT16_MAX;
     221            break;
     222        }
     223        cTries++;
     224    }
     225#   endif
     226#  endif /* !AMD64 || !X86 */
     227
    180228#elif defined(IN_RING0)
    181229    /* Ring-0: Use use RTMpCpuId(), no loops. */
     
    234282SUPR0_EXPORT_SYMBOL(SUPReadTscWithDelta);
    235283# endif
    236 #endif /* RT_ARCH_AMD64 || RT_ARCH_X86 */
     284#endif /* defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) || defined(RT_ARCH_ARM64) || defined(RT_ARCH_ARM32) */
    237285
    238286
  • trunk/src/VBox/Runtime/Makefile.kmk

    r106614 r106635  
    37123712        VBox/RTLogWriteVmm-amd64-x86.asm
    37133713RuntimeR0Drv_SOURCES.arm32 += \
    3714         common/string/RTStrEnd.cpp
     3714        common/string/RTStrEnd.cpp \
     3715        common/asm/ASMMultU64ByU32DivByU32-generic.cpp
    37153716RuntimeR0Drv_SOURCES.arm64 += \
    3716         common/string/RTStrEnd.cpp
     3717        common/string/RTStrEnd.cpp \
     3718        common/asm/ASMMultU64ByU32DivByU32-generic.cpp
    37173719RuntimeR0Drv_SOURCES.sparc32 += \
    3718         common/string/RTStrEnd.cpp
     3720        common/string/RTStrEnd.cpp \
     3721        common/asm/ASMMultU64ByU32DivByU32-generic.cpp
    37193722RuntimeR0Drv_SOURCES.sparc64 += \
    3720         common/string/RTStrEnd.cpp
     3723        common/string/RTStrEnd.cpp \
     3724        common/asm/ASMMultU64ByU32DivByU32-generic.cpp
    37213725
    37223726RuntimeR0Drv_SOURCES.linux = \
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