VirtualBox

Changeset 57228 in vbox for trunk/src


Ignore:
Timestamp:
Aug 6, 2015 11:27:10 PM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
101981
Message:

IPRT/r0drv/darwin: More EFLAGS.AC paranoia.

Location:
trunk/src/VBox/Runtime/r0drv/darwin
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/r0drv/darwin/RTLogWriteDebugger-r0drv-darwin.cpp

    r56290 r57228  
    3636RTDECL(void) RTLogWriteDebugger(const char *pch, size_t cb)
    3737{
     38    IPRT_DARWIN_SAVE_EFL_AC();
    3839    kprintf("%.*s", (int)cb, pch);
    39     return;
     40    IPRT_DARWIN_RESTORE_EFL_AC();
    4041}
    4142
  • trunk/src/VBox/Runtime/r0drv/darwin/RTLogWriteStdOut-r0drv-darwin.cpp

    r56290 r57228  
    3636RTDECL(void) RTLogWriteStdOut(const char *pch, size_t cb)
    3737{
     38    IPRT_DARWIN_SAVE_EFL_AC();
    3839    printf("%.*s", (int)cb, pch);
    39     return;
     40    IPRT_DARWIN_RESTORE_EFL_AC();
    4041}
    4142
  • trunk/src/VBox/Runtime/r0drv/darwin/alloc-r0drv-darwin.cpp

    r57074 r57228  
    6868DECLHIDDEN(int) rtR0MemAllocEx(size_t cb, uint32_t fFlags, PRTMEMHDR *ppHdr)
    6969{
     70    IPRT_DARWIN_SAVE_EFL_AC();
     71
    7072    if (RT_UNLIKELY(fFlags & RTMEMHDR_FLAG_ANY_CTX))
    7173        return VERR_NOT_SUPPORTED;
     
    7779        int rc = RTR0MemObjAllocPage(&hMemObj, cb + sizeof(RTMEMDARWINHDREX), true /*fExecutable*/);
    7880        if (RT_FAILURE(rc))
     81        {
     82            IPRT_DARWIN_RESTORE_EFL_AC();
    7983            return rc;
     84        }
    8085        PRTMEMDARWINHDREX pExHdr = (PRTMEMDARWINHDREX)RTR0MemObjAddress(hMemObj);
    8186        pExHdr->hMemObj = hMemObj;
     
    8893    else
    8994    {
    90 
    91         IPRT_DARWIN_SAVE_EFL_AC();
    9295        pHdr = (PRTMEMHDR)IOMalloc(cb + sizeof(*pHdr));
    93         IPRT_DARWIN_RESTORE_EFL_AC();
    9496        if (RT_UNLIKELY(!pHdr))
    9597        {
    9698            printf("rtR0MemAllocEx(%#zx, %#x) failed\n", cb + sizeof(*pHdr), fFlags);
     99            IPRT_DARWIN_RESTORE_EFL_AC();
    97100            return VERR_NO_MEMORY;
    98101        }
     
    103106    pHdr->cb        = cb;
    104107    pHdr->cbReq     = cb;
    105     *ppHdr = pHdr;;
     108    *ppHdr = pHdr;
     109
     110    IPRT_DARWIN_RESTORE_EFL_AC();
    106111    return VINF_SUCCESS;
    107112}
     
    113118DECLHIDDEN(void) rtR0MemFree(PRTMEMHDR pHdr)
    114119{
     120    IPRT_DARWIN_SAVE_EFL_AC();
     121
    115122    pHdr->u32Magic += 1;
    116123    if (pHdr->fFlags & RTMEMHDR_FLAG_EXEC)
     
    121128    }
    122129    else
    123     {
    124         IPRT_DARWIN_SAVE_EFL_AC();
    125130        IOFree(pHdr, pHdr->cb + sizeof(*pHdr));
    126         IPRT_DARWIN_RESTORE_EFL_AC();
    127     }
     131
     132    IPRT_DARWIN_RESTORE_EFL_AC();
    128133}
    129134
  • trunk/src/VBox/Runtime/r0drv/darwin/assert-r0drv-darwin.cpp

    r56290 r57228  
    4343DECLHIDDEN(void) rtR0AssertNativeMsg1(const char *pszExpr, unsigned uLine, const char *pszFile, const char *pszFunction)
    4444{
     45    IPRT_DARWIN_SAVE_EFL_AC();
    4546    printf("\r\n!!Assertion Failed!!\r\n"
    4647           "Expression: %s\r\n"
    4748           "Location  : %s(%u) %s\r\n",
    4849           pszExpr, pszFile, uLine, pszFunction);
     50    IPRT_DARWIN_RESTORE_EFL_AC();
    4951}
    5052
     
    5254DECLHIDDEN(void) rtR0AssertNativeMsg2V(bool fInitial, const char *pszFormat, va_list va)
    5355{
     56    IPRT_DARWIN_SAVE_EFL_AC();
    5457    char szMsg[256];
    5558
     
    5962
    6063    NOREF(fInitial);
     64    IPRT_DARWIN_RESTORE_EFL_AC();
    6165}
    6266
  • trunk/src/VBox/Runtime/r0drv/darwin/spinlock-r0drv-darwin.cpp

    r56290 r57228  
    7070{
    7171    RT_ASSERT_PREEMPTIBLE();
     72    IPRT_DARWIN_SAVE_EFL_AC();
    7273    AssertReturn(fFlags == RTSPINLOCK_FLAGS_INTERRUPT_SAFE || fFlags == RTSPINLOCK_FLAGS_INTERRUPT_UNSAFE, VERR_INVALID_PARAMETER);
    7374
     
    7778    AssertCompile(sizeof(RTSPINLOCKINTERNAL) > sizeof(void *));
    7879    PRTSPINLOCKINTERNAL pThis = (PRTSPINLOCKINTERNAL)RTMemAlloc(sizeof(*pThis));
    79     if (!pThis)
    80         return VERR_NO_MEMORY;
     80    if (pThis)
     81    {
     82        /*
     83         * Initialize & return.
     84         */
     85        pThis->u32Magic  = RTSPINLOCK_MAGIC;
     86        pThis->fIntSaved = 0;
     87        pThis->fFlags    = fFlags;
     88        pThis->pszName   = pszName;
     89        Assert(g_pDarwinLockGroup);
     90        pThis->pSpinLock = lck_spin_alloc_init(g_pDarwinLockGroup, LCK_ATTR_NULL);
     91        if (pThis->pSpinLock)
     92        {
     93            *pSpinlock = pThis;
     94            IPRT_DARWIN_RESTORE_EFL_AC();
     95            return VINF_SUCCESS;
     96        }
    8197
    82     /*
    83      * Initialize & return.
    84      */
    85     pThis->u32Magic  = RTSPINLOCK_MAGIC;
    86     pThis->fIntSaved = 0;
    87     pThis->fFlags    = fFlags;
    88     pThis->pszName   = pszName;
    89     Assert(g_pDarwinLockGroup);
    90     pThis->pSpinLock = lck_spin_alloc_init(g_pDarwinLockGroup, LCK_ATTR_NULL);
    91     if (!pThis->pSpinLock)
    92     {
    9398        RTMemFree(pThis);
    94         return VERR_NO_MEMORY;
    9599    }
    96 
    97     *pSpinlock = pThis;
    98     return VINF_SUCCESS;
     100    IPRT_DARWIN_RESTORE_EFL_AC();
     101    return VERR_NO_MEMORY;
    99102}
    100103
     
    116119     */
    117120    ASMAtomicIncU32(&pThis->u32Magic);
     121    IPRT_DARWIN_SAVE_EFL_AC();
    118122
    119123    Assert(g_pDarwinLockGroup);
     
    122126
    123127    RTMemFree(pThis);
     128
     129    IPRT_DARWIN_RESTORE_EFL_AC();
    124130    return VINF_SUCCESS;
    125131}
     
    138144        lck_spin_lock(pThis->pSpinLock);
    139145        pThis->fIntSaved = fIntSaved;
     146        IPRT_DARWIN_RESTORE_EFL_ONLY_AC_EX(fIntSaved);
    140147    }
    141148    else
     149    {
     150        IPRT_DARWIN_SAVE_EFL_AC();
    142151        lck_spin_lock(pThis->pSpinLock);
     152        IPRT_DARWIN_RESTORE_EFL_ONLY_AC();
     153    }
    143154}
    144155
     
    158169    }
    159170    else
     171    {
     172        IPRT_DARWIN_SAVE_EFL_AC();
    160173        lck_spin_unlock(pThis->pSpinLock);
     174        IPRT_DARWIN_RESTORE_EFL_ONLY_AC();
     175    }
    161176}
    162177
  • trunk/src/VBox/Runtime/r0drv/darwin/the-darwin-kernel.h

    r57077 r57228  
    9797#include <iprt/asm-amd64-x86.h>
    9898#include <iprt/x86.h>
    99 #define IPRT_DARWIN_SAVE_EFL_AC()           RTCCUINTREG fSavedEfl = ASMGetFlags();
    100 #define IPRT_DARWIN_RESTORE_EFL_AC()        ASMSetFlags(fSavedEfl)
    101 #define IPRT_DARWIN_RESTORE_EFL_ONLY_AC()   ASMSetFlags((ASMGetFlags() & ~X86_EFL_AC) | (fSavedEfl & X86_EFL_AC))
     99#define IPRT_DARWIN_SAVE_EFL_AC()                       RTCCUINTREG const fSavedEfl = ASMGetFlags();
     100#define IPRT_DARWIN_RESTORE_EFL_AC()                    ASMSetFlags(fSavedEfl)
     101#define IPRT_DARWIN_RESTORE_EFL_ONLY_AC()               ASMChangeFlags(~X86_EFL_AC, fSavedEfl & X86_EFL_AC)
     102#define IPRT_DARWIN_RESTORE_EFL_ONLY_AC_EX(a_fSavedEfl) ASMChangeFlags(~X86_EFL_AC, (a_fSavedEfl) & X86_EFL_AC)
    102103/** @} */
    103104
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