VirtualBox

Changeset 40777 in vbox


Ignore:
Timestamp:
Apr 5, 2012 3:18:37 PM (13 years ago)
Author:
vboxsync
Message:

SUPDrv: tracing infastructure coding...

Location:
trunk
Files:
1 added
9 edited
1 moved

Legend:

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

    r40769 r40777  
    15271527
    15281528SUPR0DECL(int)  SUPR0TracerRegisterImpl(void *hMod, PSUPDRVSESSION pSession, PCSUPDRVTRACERREG pReg, PCSUPDRVTRACERHLP *ppHlp);
    1529 SUPR0DECL(int)  SUPR0TracerDeregisterImpl(PSUPDRVSESSION pSession);
     1529SUPR0DECL(int)  SUPR0TracerDeregisterImpl(void *hMod, PSUPDRVSESSION pSession);
    15301530SUPR0DECL(int)  SUPR0TracerRegisterDrv(PSUPDRVSESSION pSession, struct VTGOBJHDR *pVtgHdr, const char *pszName);
    15311531SUPR0DECL(void) SUPR0TracerDeregisterDrv(PSUPDRVSESSION pSession);
  • trunk/src/VBox/HostDrivers/Support/Makefile.kmk

    r40759 r40777  
    319319 VBoxDrv_INST.darwin      = $(INST_VBOXDRV)Contents/MacOS/
    320320 VBoxDrv_DEFS            := IN_RT_R0 IN_SUP_R0 SUPDRV_WITH_RELEASE_LOGGER VBOX_SVN_REV=$(VBOX_SVN_REV)
    321  ifdef VBOX_WITH_SUPDRV_GENERIC_TRACER
    322   VBoxDrv_DEFS           += VBOX_WITH_SUPDRV_GENERIC_TRACER
    323  endif
    324321 ifdef VBOX_WITH_DTRACE_R0DRV
    325322  VBoxDrv_DEFS           += VBOX_WITH_DTRACE VBOX_WITH_DTRACE_R0DRV
     
    350347        SUPDrv.c \
    351348        SUPDrvSem.c \
     349        SUPDrvTracer.cpp \
    352350        SUPDrv.d
    353  ifdef VBOX_WITH_SUPDRV_GENERIC_TRACER
     351 ifn1of ($(KBUILD_TARGET), linux freebsd)
    354352  VBoxDrv_SOURCES        += \
    355         SUPDrv-tracer.cpp
     353        SUPDrvTracerA.asm
    356354 endif
    357355 ifdef VBOX_WITH_DTRACE_R0DRV
  • trunk/src/VBox/HostDrivers/Support/SUPDrv-dtrace.cpp

    r40763 r40777  
     1#error FIXME
    12/* $Id$ */
    23/** @file
  • trunk/src/VBox/HostDrivers/Support/SUPDrv.c

    r40770 r40777  
    1 /* $Revision$ */
     1/* $Id$ */
    22/** @file
    33 * VBoxDrv - The VirtualBox Support Driver - Common code.
     
    469469                        if (RT_SUCCESS(rc))
    470470                        {
    471 #ifdef VBOX_WITH_SUPDRV_GENERIC_TRACER
    472471                            rc = supdrvTracerInit(pDevExt);
    473 #elif defined(VBOX_WITH_DTRACE_R0DRV)
    474                             rc = supdrvVtgInit(pDevExt, &g_aFunctions[10]);
    475472                            if (RT_SUCCESS(rc))
    476 #endif
    477473                            {
    478474                                pDevExt->pLdrInitImage  = NULL;
     
    536532                            }
    537533
    538 #if defined(VBOX_WITH_SUPDRV_GENERIC_TRACER) || defined(VBOX_WITH_DTRACE_R0DRV)
    539534                            supdrvGipDestroy(pDevExt);
    540 #endif
    541535                        }
    542536
     
    636630    pDevExt->spinGip = NIL_RTSPINLOCK;
    637631
    638 #ifdef VBOX_WITH_SUPDRV_GENERIC_TRACER
    639632    supdrvTracerTerm(pDevExt);
    640 #elif defined(VBOX_WITH_DTRACE_R0DRV)
    641     supdrvVtgTerm(pDevExt);
    642 #endif
    643633
    644634#ifdef SUPDRV_WITH_RELEASE_LOGGER
     
    829819    Log2(("release objects - done\n"));
    830820
    831 #ifdef VBOX_WITH_SUPDRV_GENERIC_TRACER
    832821    /*
    833822     * Do tracer cleanups related to this session.
     
    836825    supdrvTracerCleanupSession(pDevExt, pSession);
    837826    Log2(("release tracer stuff - end\n"));
    838 #endif
    839827
    840828    /*
     
    36883676
    36893677
    3690 #if (!defined(VBOX_WITH_SUPDRV_GENERIC_TRACER) && !defined(VBOX_WITH_DTRACE_R0DRV)) \
    3691   || defined(RT_OS_SOLARIS)
    3692 /**
    3693  * Stub function.
    3694  */
    3695 SUPR0DECL(void) SUPR0TracerFireProbe(uint32_t idProbe, uintptr_t uArg0, uintptr_t uArg1, uintptr_t uArg2,
    3696                                      uintptr_t uArg3, uintptr_t uArg4)
    3697 {
    3698     NOREF(idProbe); NOREF(uArg0); NOREF(uArg1); NOREF(uArg2); NOREF(uArg3); NOREF(uArg4);
    3699 }
    3700 #endif
    3701 
    3702 #if !defined(VBOX_WITH_SUPDRV_GENERIC_TRACER) && !defined(VBOX_WITH_DTRACE_R0DRV)
    3703 /**
    3704  * Stub function.
    3705  */
    3706 SUPR0DECL(int) SUPR0TracerRegisterModule(void *hMod, struct VTGOBJHDR *pVtgHdr)
    3707 {
    3708     NOREF(hMod); NOREF(pVtgHdr);
    3709     return VINF_SUCCESS;
    3710 }
    3711 #endif
    3712 
    3713 
    37143678/**
    37153679 * Adds a memory object to the session.
     
    41744138    {
    41754139        /* Inform the tracing component in case ModuleInit registered TPs. */
    4176 #ifdef VBOX_WITH_SUPDRV_GENERIC_TRACER
    41774140        supdrvTracerModuleUnloading(pDevExt, pImage);
    4178 #elif defined(VBOX_WITH_DTRACE_R0DRV)
    4179         supdrvVtgModuleUnloading(pDevExt, pImage);
    4180 #endif
    41814141
    41824142        pImage->uState              = SUP_IOCTL_LDR_OPEN;
     
    46254585
    46264586    /* Inform the tracing component. */
    4627 #ifdef VBOX_WITH_SUPDRV_GENERIC_TRACER
    46284587    supdrvTracerModuleUnloading(pDevExt, pImage);
    4629 #elif defined(VBOX_WITH_DTRACE_R0DRV)
    4630     supdrvVtgModuleUnloading(pDevExt, pImage);
    4631 #endif
    46324588
    46334589    /* do native unload if appropriate. */
  • trunk/src/VBox/HostDrivers/Support/SUPDrvInternal.h

    r40769 r40777  
    436436     * This is NIL_RTR0PROCESS for kernel sessions and valid for user ones. */
    437437    RTR0PROCESS                     R0Process;
    438 #ifdef VBOX_WITH_SUPDRV_GENERIC_TRACER
    439438    /** Per session tracer specfic data. */
    440439    uintptr_t                       uTracerData;
    441 #endif
    442440#ifndef SUPDRV_AGNOSTIC
    443441# if defined(RT_OS_DARWIN)
     
    543541    PSUPDRVFACTORYREG               pComponentFactoryHead;
    544542
    545 #ifdef VBOX_WITH_SUPDRV_GENERIC_TRACER
    546543    /** Lock protecting The tracer members. */
    547544    RTSEMFASTMUTEX                  mtxTracer;
     
    561558    bool                            fTracerUnloading;
    562559
    563 #elif defined(VBOX_WITH_DTRACE_R0DRV)
    564     /** Lock protecting The DTrace members. */
    565     RTSEMFASTMUTEX                  mtxDTrace;
    566     /** List of DTrace providers (SUPDRVDTPROVIDER). */
    567     RTLISTANCHOR                    DtProviderList;
    568     /** List of zombie DTrace providers (SUPDRVDTPROVIDER). */
    569     RTLISTANCHOR                    DtProviderZombieList;
    570 #endif
    571 
    572560    /*
    573561     * Note! The non-agnostic bits must be a the very end of the structure!
     
    659647void VBOXCALL   supdrvCleanupSession(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession);
    660648
    661 #ifdef VBOX_WITH_DTRACE_R0DRV
    662 int  VBOXCALL   supdrvVtgInit(PSUPDRVDEVEXT pDevExt, PSUPFUNC pVtgFireProbe);
    663 void VBOXCALL   supdrvVtgTerm(PSUPDRVDEVEXT pDevExt);
    664 void VBOXCALL   supdrvVtgModuleUnloading(PSUPDRVDEVEXT pDevExt, PSUPDRVLDRIMAGE pImage);
    665 #endif
    666 
    667 #ifdef VBOX_WITH_SUPDRV_GENERIC_TRACER
    668649int  VBOXCALL   supdrvTracerInit(PSUPDRVDEVEXT pDevExt);
    669650void VBOXCALL   supdrvTracerTerm(PSUPDRVDEVEXT pDevExt);
    670651void VBOXCALL   supdrvTracerModuleUnloading(PSUPDRVDEVEXT pDevExt, PSUPDRVLDRIMAGE pImage);
    671652void VBOXCALL   supdrvTracerCleanupSession(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession);
    672 #endif
     653extern PFNRT    g_pfnSupdrvProbeFireKernel;
     654DECLASM(void)   supdrvTracerProbeFireStub(void);
    673655
    674656
  • trunk/src/VBox/HostDrivers/Support/SUPDrvTracer.cpp

    r40765 r40777  
    11/* $Id$ */
    22/** @file
    3  * VBoxDrv - The VirtualBox Support Driver - Generic Tracer Interface.
     3 * VBoxDrv - The VirtualBox Support Driver - Tracer Interface.
    44 */
    55
     
    9191*   Global Variables                                                           *
    9292*******************************************************************************/
     93/** The address of the current probe fire routine for kernel mode. */
     94PFNRT       g_pfnSupdrvProbeFireKernel = supdrvTracerProbeFireStub;
    9395
    9496
     
    366368        rc = VINF_SUCCESS;
    367369    else
    368         rc = pDevExt->pTracerOps->pfnDeregisterProvider(pDevExt->pTracerOps, &pProv->Core);
     370        rc = pDevExt->pTracerOps->pfnProviderDeregister(pDevExt->pTracerOps, &pProv->Core);
    369371    if (RT_SUCCESS(rc))
    370372    {
     
    392394    RTListForEachSafe(&pDevExt->TracerProviderZombieList, pProv, pProvNext, SUPDRVTPPROVIDER, ListEntry)
    393395    {
    394         int rc = pDevExt->pTracerOps->pfnDeregisterZombieProvider(pDevExt->pTracerOps, &pProv->Core);
     396        int rc = pDevExt->pTracerOps->pfnProviderDeregisterZombie(pDevExt->pTracerOps, &pProv->Core);
    395397        if (RT_SUCCESS(rc))
    396398        {
     
    443445
    444446            if (pDevExt->pTracerOps)
    445                 rc = pDevExt->pTracerOps->pfnDeregisterZombieProvider(pDevExt->pTracerOps, &pProv->Core);
     447                rc = pDevExt->pTracerOps->pfnProviderDeregisterZombie(pDevExt->pTracerOps, &pProv->Core);
    446448            else
    447449                rc = VINF_SUCCESS;
     
    551553            {
    552554                if (pDevExt->pTracerOps)
    553                     rc = pDevExt->pTracerOps->pfnRegisterProvider(pDevExt->pTracerOps, &pProv->Core);
     555                    rc = pDevExt->pTracerOps->pfnProviderRegister(pDevExt->pTracerOps, &pProv->Core);
    554556                else
    555557                {
     
    751753    }
    752754
    753     AssertPtrReturn(pReg->pfnRegisterProvider, VERR_INVALID_POINTER);
    754     AssertPtrReturn(pReg->pfnDeregisterProvider, VERR_INVALID_POINTER);
    755     AssertPtrReturn(pReg->pfnDeregisterZombieProvider, VERR_INVALID_POINTER);
     755    AssertPtrReturn(pReg->pfnProbeFireKernel, VERR_INVALID_POINTER);
     756    AssertPtrReturn(pReg->pfnProbeFireUser, VERR_INVALID_POINTER);
     757    AssertPtrReturn(pReg->pfnTracerOpen, VERR_INVALID_POINTER);
     758    AssertPtrReturn(pReg->pfnTracerIoCtl, VERR_INVALID_POINTER);
     759    AssertPtrReturn(pReg->pfnTracerClose, VERR_INVALID_POINTER);
     760    AssertPtrReturn(pReg->pfnProviderRegister, VERR_INVALID_POINTER);
     761    AssertPtrReturn(pReg->pfnProviderDeregister, VERR_INVALID_POINTER);
     762    AssertPtrReturn(pReg->pfnProviderDeregisterZombie, VERR_INVALID_POINTER);
    756763
    757764    /*
     
    781788
    782789/**
    783  * Deregister a tracer implementation associated with a ring-0 session.
     790 * Common tracer implementation deregistration code.
     791 *
     792 * The caller sets fTracerUnloading prior to calling this function.
     793 *
     794 * @param   pDevExt             The device extension structure.
     795 */
     796static void supdrvTracerCommonDeregisterImpl(PSUPDRVDEVEXT pDevExt)
     797{
     798    supdrvTracerRemoveAllProviders(pDevExt);
     799
     800    RTSemFastMutexRequest(pDevExt->mtxTracer);
     801    pDevExt->pTracerImage     = NULL;
     802    pDevExt->pTracerSession   = NULL;
     803    pDevExt->pTracerOps       = NULL;
     804    pDevExt->fTracerUnloading = false;
     805    RTSemFastMutexRelease(pDevExt->mtxTracer);
     806}
     807
     808
     809/**
     810 * Deregister a tracer implementation.
     811 *
     812 * This should be called from the ModuleTerm code or from a ring-0 session.
    784813 *
    785814 * @returns VBox status code.
     815 * @param   hMod                The module handle.
    786816 * @param   pSession            Ring-0 session handle.
    787817 */
    788 SUPR0DECL(int) SUPR0TracerDeregisterImpl(PSUPDRVSESSION pSession)
    789 {
     818SUPR0DECL(int) SUPR0TracerDeregisterImpl(void *hMod, PSUPDRVSESSION pSession)
     819{
     820    PSUPDRVLDRIMAGE pImage = (PSUPDRVLDRIMAGE)hMod;
    790821    PSUPDRVDEVEXT   pDevExt;
    791822    int             rc;
     
    794825     * Validate input and context.
    795826     */
    796     AssertReturn(SUP_IS_SESSION_VALID(pSession), VERR_INVALID_PARAMETER);
    797     AssertReturn(pSession->R0Process == NIL_RTR0PROCESS, VERR_INVALID_PARAMETER);
    798     pDevExt = pSession->pDevExt;
     827    if (pImage)
     828    {
     829        AssertPtrReturn(pImage, VERR_INVALID_POINTER);
     830        AssertReturn(pSession == NULL, VERR_INVALID_PARAMETER);
     831        pDevExt = pImage->pDevExt;
     832    }
     833    else
     834    {
     835        AssertReturn(SUP_IS_SESSION_VALID(pSession), VERR_INVALID_PARAMETER);
     836        AssertReturn(pSession->R0Process == NIL_RTR0PROCESS, VERR_INVALID_PARAMETER);
     837        pDevExt = pSession->pDevExt;
     838    }
    799839    AssertPtrReturn(pDevExt, VERR_INVALID_POINTER);
    800840
     
    805845    if (RT_SUCCESS(rc))
    806846    {
    807         if (pDevExt->pTracerSession == pSession)
     847        if (  pImage
     848            ? pDevExt->pTracerImage   == pImage
     849            : pDevExt->pTracerSession == pSession)
    808850        {
    809851            pDevExt->fTracerUnloading = true;
    810852            RTSemFastMutexRelease(pDevExt->mtxTracer);
    811 
    812             supdrvTracerRemoveAllProviders(pDevExt);
    813 
    814             RTSemFastMutexRequest(pDevExt->mtxTracer);
    815             pDevExt->pTracerImage     = NULL;
    816             pDevExt->pTracerSession   = NULL;
    817             pDevExt->pTracerOps       = NULL;
    818             pDevExt->fTracerUnloading = false;
     853            supdrvTracerCommonDeregisterImpl(pDevExt);
    819854        }
    820855        else
     856        {
    821857            rc = VERR_SUPDRV_TRACER_NOT_REGISTERED;
    822         RTSemFastMutexRelease(pDevExt->mtxTracer);
     858            RTSemFastMutexRelease(pDevExt->mtxTracer);
     859        }
    823860    }
    824861
    825862    return rc;
    826863}
     864
     865
     866/*
     867 * The probe function is a bit more fun since we need tail jump optimizating.
     868 *
     869 * Since we cannot ship yasm sources for linux and freebsd, owing to the cursed
     870 * rebuilding of the kernel module from scratch at install time, we have to
     871 * deploy some ugly gcc inline assembly here.
     872 */
     873#if defined(__GNUC__) && (defined(RT_OS_FREEBSD) || defined(RT_OS_LINUX))
     874# if 0 /* Need to check this out on linux (on mac now) */
     875/*DECLASM(void)   supdrvTracerProbeFireStub(void);*/
     876__asm__ __volatile__("\
     877    .pushsection .text                                                  \
     878                                                                        \
     879    .p2align 2,,3                                                       \
     880    .type supdrvTracerProbeFireStub,@function                           \
     881    .global supdrvTracerProbeFireStub                                   \
     882supdrvTracerProbeFireStub:                                              \
     883    ret                                                                 \
     884supdrvTracerProbeFireStub_End:                                          \
     885    .size supdrvTracerProbeFireStub_End - supdrvTracerProbeFireStub     \
     886                                                                        \
     887    .p2align 2,,3                                                       \
     888    .global SUPR0TracerFireProbe                                        \
     889SUPR0TracerFireProbe:                                                   \
     890");
     891# if   defined(RT_ARCH_AMD64)
     892__asm__ __volatile__("                                                  \
     893    mov     g_pfnSupdrvProbeFireKernel(%rip), %rax                      \
     894    jmp     *%rax                                                       \
     895");
     896# elif defined(RT_ARCH_X86)
     897__asm__ __volatile__("                                                  \
     898    mov     g_pfnSupdrvProbeFireKernel, %eax                            \
     899    jmp     *%eax                                                       \
     900");
     901# else
     902#  error "Which arch is this?"
     903#endif
     904__asm__ __volatile__("                                                  \
     905SUPR0TracerFireProbe_End:                                               \
     906    .size SUPR0TracerFireProbe_End - SUPR0TracerFireProbe               \
     907    .popsection                                                         \
     908");
     909
     910# else
     911SUPR0DECL(void) SUPR0TracerFireProbe(uint32_t idProbe, uintptr_t uArg0, uintptr_t uArg1, uintptr_t uArg2,
     912                                     uintptr_t uArg3, uintptr_t uArg4)
     913{
     914    return;
     915}
     916# endif
     917#endif
    827918
    828919
     
    847938        pDevExt->fTracerUnloading = true;
    848939        RTSemFastMutexRelease(pDevExt->mtxTracer);
    849 
    850         supdrvTracerRemoveAllProviders(pDevExt);
    851 
    852         RTSemFastMutexRequest(pDevExt->mtxTracer);
    853         pDevExt->pTracerImage     = NULL;
    854         pDevExt->pTracerSession   = NULL;
    855         pDevExt->pTracerOps       = NULL;
    856         pDevExt->fTracerUnloading = false;
    857         RTSemFastMutexRelease(pDevExt->mtxTracer);
     940        supdrvTracerCommonDeregisterImpl(pDevExt);
    858941    }
    859942    else
     
    894977    if (pSession->R0Process == NIL_RTR0PROCESS)
    895978    {
    896         SUPDRVTPPROVIDER *pNextProv;
     979        SUPDRVTPPROVIDER *pProvNext;
    897980        SUPDRVTPPROVIDER *pProv;
    898981
     
    908991        RTSemFastMutexRelease(pDevExt->mtxTracer);
    909992
    910         (void)SUPR0TracerDeregister(pSession);
     993        (void)SUPR0TracerDeregisterImpl(NULL, pSession);
    911994    }
    912995
     
    9191002        if (   pSession->uTracerData
    9201003            && pDevExt->pTracerOps)
    921             pSession->pTracerOps->pfnCloseTrace(pSession->pTracerOps, pSession, pSession->uTracerData);
     1004            pDevExt->pTracerOps->pfnTracerClose(pDevExt->pTracerOps, pSession, pSession->uTracerData);
    9221005        pSession->uTracerData = 0;
    9231006        RTSemFastMutexRelease(pDevExt->mtxTracer);
     
    9461029        RTListInit(&pDevExt->TracerProviderZombieList);
    9471030
     1031#ifdef VBOX_WITH_DTRACE_R0DRV
    9481032        rc = supdrvTracerRegisterVtgObj(pDevExt, &g_VTGObjHeader, _1M, NULL /*pImage*/, NULL /*pSession*/, "vboxdrv");
    9491033        if (RT_SUCCESS(rc))
     1034#endif
    9501035            return rc;
    9511036        RTSemFastMutexDestroy(pDevExt->mtxTracer);
  • trunk/src/VBox/HostDrivers/Support/freebsd/Makefile

    r37233 r40777  
    3939        SUPDrv.c \
    4040        SUPDrvSem.c \
     41        SUPDrvSemTracer.c \
    4142
    4243# Include needed interface headers so they are created during build
  • trunk/src/VBox/HostDrivers/Support/freebsd/files_vboxdrv

    r37955 r40777  
    7979    ${PATH_ROOT}/include/VBox/version.h=>include/VBox/version.h \
    8080    ${PATH_ROOT}/include/VBox/SUPDrvMangling.h=>include/VBox/SUPDrvMangling.h \
     81    ${PATH_ROOT}/include/VBox/VBoxTpG.h=>include/VBox/VBoxTpG.h \
    8182    ${PATH_ROOT}/include/VBox/vmm/hwacc_vmx.h=>include/VBox/vmm/hwacc_vmx.h \
    8283    ${PATH_ROOT}/include/VBox/vmm/hwacc_svm.h=>include/VBox/vmm/hwacc_svm.h \
     
    8485    ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDrv.c=>SUPDrv.c \
    8586    ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDrvSem.c=>SUPDrvSem.c \
     87    ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDrvTracer.cpp=>SUPDrvTracer.c \
    8688    ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDrvIDC.h=>SUPDrvIDC.h \
    8789    ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDrvIOC.h=>SUPDrvIOC.h \
  • trunk/src/VBox/HostDrivers/Support/linux/Makefile

    r39400 r40777  
    7474        SUPDrv.o \
    7575        SUPDrvSem.o \
     76        SUPDrvTracer.o \
    7677        r0drv/alloc-r0drv.o \
    7778        r0drv/initterm-r0drv.o \
  • trunk/src/VBox/HostDrivers/Support/linux/files_vboxdrv

    r37955 r40777  
    7373    ${PATH_ROOT}/include/VBox/types.h=>include/VBox/types.h \
    7474    ${PATH_ROOT}/include/VBox/SUPDrvMangling.h=>include/VBox/SUPDrvMangling.h \
     75    ${PATH_ROOT}/include/VBox/VBoxTpG.h=>include/VBox/VBoxTpG.h \
    7576    ${PATH_ROOT}/include/VBox/vmm/hwacc_vmx.h=>include/VBox/vmm/hwacc_vmx.h \
    7677    ${PATH_ROOT}/include/VBox/vmm/hwacc_svm.h=>include/VBox/vmm/hwacc_svm.h \
     
    7879    ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDrv.c=>SUPDrv.c \
    7980    ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDrvSem.c=>SUPDrvSem.c \
     81    ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDrvTracer.cpp=>SUPDrvTracer.c \
    8082    ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDrvIDC.h=>SUPDrvIDC.h \
    8183    ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDrvIOC.h=>SUPDrvIOC.h \
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette