Changeset 106625 in vbox
- Timestamp:
- Oct 23, 2024 3:45:04 PM (5 months ago)
- svn:sync-xref-src-repo-rev:
- 165467
- Location:
- trunk
- Files:
-
- 6 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/asmdefs-arm.h
r106604 r106625 203 203 #elif defined(ASM_FORMAT_ELF) 204 204 .hidden NAME(\a_Name) 205 #elif defined(ASM_FORMAT_PE) 206 .def NAME(\a_Name) 207 .type 32 /* function */ 208 .endef 205 209 #endif 206 210 .globl NAME(\a_Name) … … 209 213 210 214 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) 234 NAME(\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 244 NAME(\a_Name)\()_EndProc: 245 .endm 246 247 211 248 /** @} */ 212 249 -
trunk/src/VBox/HostDrivers/Support/Makefile.kmk
r106061 r106625 783 783 VBoxDrv_SOURCES.win = \ 784 784 win/SUPDrv-win.cpp \ 785 win/SUPDrvA-win.asm \786 785 win/VBoxDrv.rc 786 VBoxDrv_SOURCES.win.x86 = \ 787 win/SUPDrvA-win.asm 788 VBoxDrv_SOURCES.win.amd64 = \ 789 win/SUPDrvA-win.asm 787 790 ifdef VBOX_WITH_HARDENING 788 791 VBoxDrv_SOURCES.win += \ … … 807 810 endif 808 811 ifn1of ($(KBUILD_TARGET), linux freebsd) 809 VBoxDrv_SOURCES 812 VBoxDrv_SOURCES.x86 += \ 810 813 SUPDrvTracerA.asm 814 VBoxDrv_SOURCES.amd64 += \ 815 SUPDrvTracerA.asm 816 VBoxDrv_SOURCES.arm64 += \ 817 SUPDrvTracerA-arm64.S 811 818 endif 812 819 -
trunk/src/VBox/HostDrivers/Support/SUPDrv.cpp
r106061 r106625 46 46 #endif 47 47 #include <iprt/asm.h> 48 #include <iprt/asm-amd64-x86.h>49 48 #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 50 56 #include <iprt/cpuset.h> 51 57 #if defined(RT_OS_DARWIN) || defined(RT_OS_SOLARIS) || defined(RT_OS_WINDOWS) … … 247 253 /* Entries with absolute addresses determined at runtime, fixup 248 254 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 */ 259 265 /* Normal function & data pointers: */ 260 266 SUPEXP_CUSTOM( 0, g_pSUPGlobalInfoPage, &g_pSUPGlobalInfoPage), /* SED: DATA */ … … 271 277 SUPEXP_STK_BACK( 5, SUPR0ContAlloc), 272 278 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 */ 275 281 SUPEXP_STK_OKAY( 1, SUPR0FpuBegin), 276 282 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 */ 280 286 SUPEXP_STK_OKAY( 0, SUPR0GetKernelFeatures), 281 SUPEXP_STK_BACK( 3, SUPR0GetHwvirtMsrs), 287 SUPEXP_STK_BACK( 3, SUPR0GetHwvirtMsrs), /* only-amd64, only-x86 */ 282 288 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 */ 286 292 SUPEXP_STK_BACK( 2, SUPR0LdrIsLockOwnerByMod), 287 293 SUPEXP_STK_BACK( 1, SUPR0LdrLock), … … 701 707 * here rather than distributing this to OS specific files. At least for now. 702 708 */ 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 705 712 if (SUPR0GetPagingMode() >= SUPPAGINGMODE_AMD64) 706 713 { … … 718 725 g_aFunctions[8].pfn = (void *)0x10; /* SUPR0AbsKernelFS - KERNEL_DS, seg.h */ 719 726 g_aFunctions[9].pfn = (void *)0x48; /* SUPR0AbsKernelGS - CPU_DATA_GS, seg.h */ 720 # else /* 64-bit darwin: */727 # else /* 64-bit darwin: */ 721 728 g_aFunctions[0].pfn = (void *)1; /* SUPR0AbsIs64bit */ 722 729 g_aFunctions[1].pfn = (void *)(uintptr_t)ASMGetCS(); /* SUPR0Abs64bitKernelCS */ … … 730 737 g_aFunctions[9].pfn = (void *)0; /* SUPR0AbsKernelGS */ 731 738 732 # endif733 # else /* !RT_OS_DARWIN */734 # if ARCH_BITS == 64739 # endif 740 # else /* !RT_OS_DARWIN */ 741 # if ARCH_BITS == 64 735 742 g_aFunctions[0].pfn = (void *)1; /* SUPR0AbsIs64bit */ 736 743 g_aFunctions[1].pfn = (void *)(uintptr_t)ASMGetCS(); /* SUPR0Abs64bitKernelCS */ 737 744 g_aFunctions[2].pfn = (void *)(uintptr_t)ASMGetSS(); /* SUPR0Abs64bitKernelSS */ 738 745 g_aFunctions[3].pfn = (void *)(uintptr_t)ASMGetDS(); /* SUPR0Abs64bitKernelDS */ 739 # else746 # else 740 747 g_aFunctions[0].pfn = g_aFunctions[1].pfn = g_aFunctions[2].pfn = g_aFunctions[3].pfn = (void *)0; 741 # endif748 # endif 742 749 g_aFunctions[4].pfn = (void *)(uintptr_t)ASMGetCS(); /* SUPR0AbsKernelCS */ 743 750 g_aFunctions[5].pfn = (void *)(uintptr_t)ASMGetSS(); /* SUPR0AbsKernelSS */ … … 746 753 g_aFunctions[8].pfn = (void *)(uintptr_t)ASMGetFS(); /* SUPR0AbsKernelFS */ 747 754 g_aFunctions[9].pfn = (void *)(uintptr_t)ASMGetGS(); /* SUPR0AbsKernelGS */ 748 #endif /* !RT_OS_DARWIN */ 755 # endif /* !RT_OS_DARWIN */ 756 #endif /* AMD64 || X86 */ 749 757 return VINF_SUCCESS; 750 758 } … … 4137 4145 SUPR0DECL(SUPPAGINGMODE) SUPR0GetPagingMode(void) 4138 4146 { 4147 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 4139 4148 SUPPAGINGMODE enmMode; 4140 4149 … … 4208 4217 } 4209 4218 return enmMode; 4219 #else 4220 /** @todo portme? */ 4221 return SUPPAGINGMODE_INVALID; 4222 #endif 4210 4223 } 4211 4224 SUPR0_EXPORT_SYMBOL(SUPR0GetPagingMode); … … 4228 4241 SUPR0DECL(RTCCUINTREG) SUPR0ChangeCR4(RTCCUINTREG fOrMask, RTCCUINTREG fAndMask) 4229 4242 { 4230 #ifdef RT_OS_LINUX 4243 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 4244 # ifdef RT_OS_LINUX 4231 4245 return supdrvOSChangeCR4(fOrMask, fAndMask); 4232 # else4246 # else 4233 4247 RTCCUINTREG uOld = ASMGetCR4(); 4234 4248 RTCCUINTREG uNew = (uOld & fAndMask) | fOrMask; … … 4236 4250 ASMSetCR4(uNew); 4237 4251 return uOld; 4252 # endif 4253 #else 4254 RT_NOREF(fOrMask, fAndMask); 4255 return RTCCUINTREG_MAX; 4238 4256 #endif 4239 4257 } … … 4252 4270 SUPR0DECL(int) SUPR0EnableVTx(bool fEnable) 4253 4271 { 4254 #if def RT_OS_DARWIN4272 #if defined(RT_OS_DARWIN) && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)) 4255 4273 return supdrvOSEnableVTx(fEnable); 4256 4274 #else … … 4271 4289 SUPR0DECL(bool) SUPR0SuspendVTxOnCpu(void) 4272 4290 { 4273 #if def RT_OS_DARWIN4291 #if defined(RT_OS_DARWIN) && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)) 4274 4292 return supdrvOSSuspendVTxOnCpu(); 4275 4293 #else … … 4289 4307 SUPR0DECL(void) SUPR0ResumeVTxOnCpu(bool fSuspended) 4290 4308 { 4291 #if def RT_OS_DARWIN4309 #if defined(RT_OS_DARWIN) && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)) 4292 4310 supdrvOSResumeVTxOnCpu(fSuspended); 4293 4311 #else … … 4301 4319 SUPR0DECL(int) SUPR0GetCurrentGdtRw(RTHCUINTPTR *pGdtRw) 4302 4320 { 4303 #if def RT_OS_LINUX4321 #if defined(RT_OS_LINUX) && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)) 4304 4322 return supdrvOSGetCurrentGdtRw(pGdtRw); 4305 4323 #else … … 4323 4341 *pfCaps = 0; 4324 4342 4343 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 4325 4344 /* Check if the CPU even supports CPUID (extremely ancient CPUs). */ 4326 4345 if (ASMHasCpuId()) … … 4373 4392 } 4374 4393 } 4394 #endif 4375 4395 return VERR_UNSUPPORTED_CPU; 4376 4396 } … … 4394 4414 SUPR0DECL(int) SUPR0GetVmxUsability(bool *pfIsSmxModeAmbiguous) 4395 4415 { 4416 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 4396 4417 uint64_t fFeatMsr; 4397 4418 bool fMaybeSmxMode; … … 4501 4522 4502 4523 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) */ 4503 4530 } 4504 4531 SUPR0_EXPORT_SYMBOL(SUPR0GetVmxUsability); … … 4515 4542 SUPR0DECL(int) SUPR0GetSvmUsability(bool fInitSvm) 4516 4543 { 4544 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 4517 4545 int rc; 4518 4546 uint64_t fVmCr; … … 4549 4577 rc = VERR_SVM_DISABLED; 4550 4578 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) */ 4551 4584 } 4552 4585 SUPR0_EXPORT_SYMBOL(SUPR0GetSvmUsability); 4553 4586 4554 4587 4588 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 4555 4589 /** 4556 4590 * Queries the AMD-V and VT-x capabilities of the calling CPU. … … 4638 4672 return rc; 4639 4673 } 4674 #endif /* !defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86) */ 4640 4675 4641 4676 … … 4666 4701 AssertPtrReturn(pfCaps, VERR_INVALID_POINTER); 4667 4702 4703 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 4668 4704 /* 4669 4705 * Call common worker. 4670 4706 */ 4671 4707 return supdrvQueryVTCapsInternal(pfCaps); 4708 #else 4709 return VERR_UNSUPPORTED_CPU; 4710 #endif 4672 4711 } 4673 4712 SUPR0_EXPORT_SYMBOL(SUPR0QueryVTCaps); 4674 4713 4675 4714 4715 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 4676 4716 /** 4677 4717 * Queries the CPU microcode revision. … … 4685 4725 static int VBOXCALL supdrvQueryUcodeRev(uint32_t *puRevision) 4686 4726 { 4687 int rc= VERR_UNSUPPORTED_CPU;4727 int rc = VERR_UNSUPPORTED_CPU; 4688 4728 RTTHREADPREEMPTSTATE PreemptState = RTTHREADPREEMPTSTATE_INITIALIZER; 4689 4729 … … 4740 4780 return rc; 4741 4781 } 4782 #endif /* !defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86) */ 4742 4783 4743 4784 … … 4763 4804 * Call common worker. 4764 4805 */ 4806 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 4765 4807 return supdrvQueryUcodeRev(puRevision); 4808 #else 4809 return VERR_UNSUPPORTED_CPU; 4810 #endif 4766 4811 } 4767 4812 SUPR0_EXPORT_SYMBOL(SUPR0QueryUcodeRev); … … 4780 4825 SUPR0DECL(int) SUPR0GetHwvirtMsrs(PSUPHWVIRTMSRS pMsrs, uint32_t fCaps, bool fForce) 4781 4826 { 4782 NOREF(fForce); 4783 4827 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 4784 4828 int rc; 4785 4829 RTTHREADPREEMPTSTATE PreemptState = RTTHREADPREEMPTSTATE_INITIALIZER; 4830 NOREF(fForce); 4786 4831 4787 4832 /* … … 4871 4916 4872 4917 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) */ 4873 4923 } 4874 4924 SUPR0_EXPORT_SYMBOL(SUPR0GetHwvirtMsrs); -
trunk/src/VBox/HostDrivers/Support/SUPDrvGip.cpp
r106061 r106625 46 46 #endif 47 47 #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 49 55 #include <iprt/asm-math.h> 50 56 #include <iprt/cpuset.h> … … 67 73 #endif 68 74 #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 70 80 71 81 #include <VBox/param.h> … … 189 199 * @returns APIC ID. 190 200 * @param pGip The GIP, for SUPGIPGETCPU_XXX. 201 * 202 * @note APIC ID == CPU ID on non-x86 platforms. 191 203 */ 192 204 DECLINLINE(uint32_t) supdrvGipGetApicId(PSUPGLOBALINFOPAGE pGip) 193 205 { 206 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 194 207 if (pGip->fGetGipCpu & SUPGIPGETCPU_APIC_ID_EXT_0B) 195 208 return ASMGetApicIdExt0B(); … … 197 210 return ASMGetApicIdExt8000001E(); 198 211 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 199 219 } 200 220 … … 202 222 /** 203 223 * Gets the APIC ID using the best available method, slow version. 224 * 225 * @note APIC ID == CPU ID on non-x86 platforms. 204 226 */ 205 227 static uint32_t supdrvGipGetApicIdSlow(void) 206 228 { 229 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 207 230 uint32_t const idApic = ASMGetApicId(); 208 231 … … 215 238 uint32_t uEcx = 0; 216 239 uint32_t uEdx = 0; 217 # if defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD)240 # if defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD) 218 241 ASMCpuId_Idx_ECX(0xb, 0, &uEax, &uEbx, &uEcx, &uEdx); 219 # else242 # else 220 243 ASMCpuIdExSlow(0xb, 0, 0, 0, &uEax, &uEbx, &uEcx, &uEdx); 221 # endif244 # endif 222 245 if ((uEcx >> 8) != 0) /* level type != invalid */ 223 246 { … … 238 261 } 239 262 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 241 271 242 272 … … 330 360 static DECLCALLBACK(void) supdrvGipDetectGetGipCpuCallback(RTCPUID idCpu, void *pvUser1, void *pvUser2) 331 361 { 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); 334 365 uint32_t fSupported = 0; 335 366 uint32_t idApic; 367 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 336 368 uint32_t uEax, uEbx, uEcx, uEdx; 337 int iCpuSet; 369 #else 370 uint32_t const uEax = 0; /* Dummy for LogRel. */ 371 #endif 338 372 NOREF(pGip); 339 373 340 374 AssertMsg(idCpu == RTMpCpuId(), ("idCpu=%#x RTMpCpuId()=%#x\n", idCpu, RTMpCpuId())); /* paranoia^3 */ 341 375 376 377 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 342 378 /* 343 379 * Check that the CPU ID and CPU set index are interchangable. 344 380 */ 345 iCpuSet = RTMpCpuIdToSetIndex(idCpu);346 381 if ((RTCPUID)iCpuSet == idCpu) 347 382 { … … 356 391 * Check whether the IDTR.LIMIT contains a CPU number. 357 392 */ 358 # ifdef RT_ARCH_X86393 # ifdef RT_ARCH_X86 359 394 uint16_t const cbIdt = sizeof(X86DESC64SYSTEM) * 256; 360 # else395 # else 361 396 uint16_t const cbIdt = sizeof(X86DESCGATE) * 256; 362 # endif397 # endif 363 398 RTIDTR Idtr; 364 399 ASMGetIDTR(&Idtr); … … 418 453 if (uEax >= UINT32_C(0xb) && RTX86IsValidStdRange(uEax)) 419 454 { 420 # if defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD)455 # if defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD) 421 456 ASMCpuId_Idx_ECX(0xb, 0, &uEax, &uEbx, &uEcx, &uEdx); 422 # else457 # else 423 458 ASMCpuIdExSlow(0xb, 0, 0, 0, &uEax, &uEbx, &uEcx, &uEdx); 424 # endif459 # endif 425 460 if ((uEcx >> 8) != 0) /* level type != invalid */ 426 461 { … … 442 477 if (uEax >= UINT32_C(0x8000001e) && RTX86IsValidExtRange(uEax)) 443 478 { 444 # if defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD)479 # if defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD) 445 480 ASMCpuId_Idx_ECX(UINT32_C(0x8000001e), 0, &uEax, &uEbx, &uEcx, &uEdx); 446 # else481 # else 447 482 ASMCpuIdExSlow(UINT32_C(0x8000001e), 0, 0, 0, &uEax, &uEbx, &uEcx, &uEdx); 448 # endif483 # endif 449 484 if (uEax || uEbx || uEcx || uEdx) 450 485 { … … 465 500 } 466 501 502 #else /* !defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86) */ 503 idApic = supdrvGipGetApicIdSlow(); 504 #endif /* !defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86) */ 505 467 506 /* 468 507 * Check that the APIC ID is unique. 469 508 */ 509 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 470 510 uEax = ASMGetApicId(); 471 511 if (RT_LIKELY( uEax < RT_ELEMENTS(pGip->aiCpuFromApicId) … … 477 517 fSupported |= SUPGIPGETCPU_APIC_ID; 478 518 } 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)) 482 524 { 483 525 AssertCompile(sizeof(pState->bmApicId) * 8 == RT_ELEMENTS(pGip->aiCpuFromApicId)); … … 1767 1809 static SUPGIPMODE supdrvGipInitDetermineTscMode(PSUPDRVDEVEXT pDevExt) 1768 1810 { 1811 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 1769 1812 uint64_t u64DiffCoresIgnored; 1770 1813 uint32_t uEAX, uEBX, uECX, uEDX; … … 1838 1881 1839 1882 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 1840 1891 } 1841 1892 … … 2968 3019 TSCDELTA_DBG_VARS(); 2969 3020 3021 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 2970 3022 *pfEFlags = X86_EFL_IF | X86_EFL_1; /* should shut up most nagging compilers. */ 3023 #else 3024 *pfEFlags = 0; 3025 #endif 2971 3026 2972 3027 /* … … 3998 4053 PSUPGIPCPU pGipCpuMaster; 3999 4054 uint32_t iGipCpuMaster; 4055 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 4000 4056 uint32_t u32Tmp; 4057 #endif 4001 4058 4002 4059 /* Validate input a bit. */ … … 4040 4097 AssertReturn(iGipCpuMaster < pGip->cCpus, VERR_INVALID_CPU_ID); 4041 4098 pGipCpuMaster = &pGip->aCPUs[iGipCpuMaster]; 4099 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 4042 4100 if ( ( (pGipCpuMaster->idApic & ~1) == (pGipCpuWorker->idApic & ~1) 4043 4101 && pGip->cOnlineCpus > 2 … … 4070 4128 } 4071 4129 } 4130 #endif /* defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) */ 4072 4131 4073 4132 if (RTCpuSetIsMemberByIndex(&pGip->OnlineCpuSet, pGipCpuWorker->iCpuSet)) -
trunk/src/VBox/HostDrivers/Support/SUPDrvInternal.h
r106061 r106625 352 352 */ 353 353 #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 355 357 #endif 356 358 -
trunk/src/VBox/HostDrivers/Support/SUPDrvTracerA-arm64.S
r106611 r106625 1 ; $Id$ 2 ;;@file3 ; VirtualBox Support Driver - Tracer Interface, Assembly bits.4 ; 1 /* $Id$ */ 2 /** @file 3 * VirtualBox Support Driver - Tracer Interface, Assembly bits, ARM64. 4 */ 5 5 6 ; 7 ;Copyright (C) 2012-2024 Oracle and/or its affiliates.8 ; 9 ;This file is part of VirtualBox base platform packages, as10 ;available from https://www.virtualbox.org.11 ; 12 ;This program is free software; you can redistribute it and/or13 ;modify it under the terms of the GNU General Public License14 ;as published by the Free Software Foundation, in version 3 of the15 ;License.16 ; 17 ;This program is distributed in the hope that it will be useful, but18 ;WITHOUT ANY WARRANTY; without even the implied warranty of19 ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU20 ;General Public License for more details.21 ; 22 ;You should have received a copy of the GNU General Public License23 ;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 terms26 ;of the Common Development and Distribution License Version 1.027 ;(CDDL), a copy of it is provided in the "COPYING.CDDL" file included28 ;in the VirtualBox distribution, in which case the provisions of the29 ;CDDL are applicable instead of those of the GPL.30 ; 31 ;You may elect to license modified versions of this file under the32 ;terms and conditions of either the GPL or the CDDL or both.33 ; 34 ;SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.035 ; 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 */ 36 36 37 ;*******************************************************************************38 ;* Header Files*39 ;******************************************************************************* 40 %include "iprt/asmdefs.mac"37 /********************************************************************************************************************************* 38 * Header Files * 39 *********************************************************************************************************************************/ 40 #include "iprt/asmdefs-arm.h" 41 41 42 42 43 ; External data. 44 extern NAME(g_pfnSupdrvProbeFireKernel)43 /* External data. */ 44 .extern NAME(g_pfnSupdrvProbeFireKernel) 45 45 46 46 47 47 BEGINCODE 48 48 49 ;; Dummy stub function that just returns. 49 /** Dummy stub function that just returns. */ 50 50 BEGINPROC supdrvTracerProbeFireStub 51 51 ret … … 53 53 54 54 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. */ 56 BEGINPROC_EXPORTED SUPR0TracerFireProbe 57 adrp x8, PAGE(NAME(g_pfnSupdrvProbeFireKernel)) 58 ldr x8, [x8, PAGEOFF(NAME(g_pfnSupdrvProbeFireKernel))] 59 br x8 64 60 ENDPROC SUPR0TracerFireProbe 65 61 -
trunk/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp
r106527 r106625 63 63 #include <VBox/err.h> 64 64 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 66 72 67 73 #ifdef VBOX_WITH_HARDENING
Note:
See TracChangeset
for help on using the changeset viewer.