- Timestamp:
- Aug 6, 2015 11:27:10 PM (10 years ago)
- svn:sync-xref-src-repo-rev:
- 101981
- 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 36 36 RTDECL(void) RTLogWriteDebugger(const char *pch, size_t cb) 37 37 { 38 IPRT_DARWIN_SAVE_EFL_AC(); 38 39 kprintf("%.*s", (int)cb, pch); 39 return;40 IPRT_DARWIN_RESTORE_EFL_AC(); 40 41 } 41 42 -
trunk/src/VBox/Runtime/r0drv/darwin/RTLogWriteStdOut-r0drv-darwin.cpp
r56290 r57228 36 36 RTDECL(void) RTLogWriteStdOut(const char *pch, size_t cb) 37 37 { 38 IPRT_DARWIN_SAVE_EFL_AC(); 38 39 printf("%.*s", (int)cb, pch); 39 return;40 IPRT_DARWIN_RESTORE_EFL_AC(); 40 41 } 41 42 -
trunk/src/VBox/Runtime/r0drv/darwin/alloc-r0drv-darwin.cpp
r57074 r57228 68 68 DECLHIDDEN(int) rtR0MemAllocEx(size_t cb, uint32_t fFlags, PRTMEMHDR *ppHdr) 69 69 { 70 IPRT_DARWIN_SAVE_EFL_AC(); 71 70 72 if (RT_UNLIKELY(fFlags & RTMEMHDR_FLAG_ANY_CTX)) 71 73 return VERR_NOT_SUPPORTED; … … 77 79 int rc = RTR0MemObjAllocPage(&hMemObj, cb + sizeof(RTMEMDARWINHDREX), true /*fExecutable*/); 78 80 if (RT_FAILURE(rc)) 81 { 82 IPRT_DARWIN_RESTORE_EFL_AC(); 79 83 return rc; 84 } 80 85 PRTMEMDARWINHDREX pExHdr = (PRTMEMDARWINHDREX)RTR0MemObjAddress(hMemObj); 81 86 pExHdr->hMemObj = hMemObj; … … 88 93 else 89 94 { 90 91 IPRT_DARWIN_SAVE_EFL_AC();92 95 pHdr = (PRTMEMHDR)IOMalloc(cb + sizeof(*pHdr)); 93 IPRT_DARWIN_RESTORE_EFL_AC();94 96 if (RT_UNLIKELY(!pHdr)) 95 97 { 96 98 printf("rtR0MemAllocEx(%#zx, %#x) failed\n", cb + sizeof(*pHdr), fFlags); 99 IPRT_DARWIN_RESTORE_EFL_AC(); 97 100 return VERR_NO_MEMORY; 98 101 } … … 103 106 pHdr->cb = cb; 104 107 pHdr->cbReq = cb; 105 *ppHdr = pHdr;; 108 *ppHdr = pHdr; 109 110 IPRT_DARWIN_RESTORE_EFL_AC(); 106 111 return VINF_SUCCESS; 107 112 } … … 113 118 DECLHIDDEN(void) rtR0MemFree(PRTMEMHDR pHdr) 114 119 { 120 IPRT_DARWIN_SAVE_EFL_AC(); 121 115 122 pHdr->u32Magic += 1; 116 123 if (pHdr->fFlags & RTMEMHDR_FLAG_EXEC) … … 121 128 } 122 129 else 123 {124 IPRT_DARWIN_SAVE_EFL_AC();125 130 IOFree(pHdr, pHdr->cb + sizeof(*pHdr)); 126 IPRT_DARWIN_RESTORE_EFL_AC(); 127 }131 132 IPRT_DARWIN_RESTORE_EFL_AC(); 128 133 } 129 134 -
trunk/src/VBox/Runtime/r0drv/darwin/assert-r0drv-darwin.cpp
r56290 r57228 43 43 DECLHIDDEN(void) rtR0AssertNativeMsg1(const char *pszExpr, unsigned uLine, const char *pszFile, const char *pszFunction) 44 44 { 45 IPRT_DARWIN_SAVE_EFL_AC(); 45 46 printf("\r\n!!Assertion Failed!!\r\n" 46 47 "Expression: %s\r\n" 47 48 "Location : %s(%u) %s\r\n", 48 49 pszExpr, pszFile, uLine, pszFunction); 50 IPRT_DARWIN_RESTORE_EFL_AC(); 49 51 } 50 52 … … 52 54 DECLHIDDEN(void) rtR0AssertNativeMsg2V(bool fInitial, const char *pszFormat, va_list va) 53 55 { 56 IPRT_DARWIN_SAVE_EFL_AC(); 54 57 char szMsg[256]; 55 58 … … 59 62 60 63 NOREF(fInitial); 64 IPRT_DARWIN_RESTORE_EFL_AC(); 61 65 } 62 66 -
trunk/src/VBox/Runtime/r0drv/darwin/spinlock-r0drv-darwin.cpp
r56290 r57228 70 70 { 71 71 RT_ASSERT_PREEMPTIBLE(); 72 IPRT_DARWIN_SAVE_EFL_AC(); 72 73 AssertReturn(fFlags == RTSPINLOCK_FLAGS_INTERRUPT_SAFE || fFlags == RTSPINLOCK_FLAGS_INTERRUPT_UNSAFE, VERR_INVALID_PARAMETER); 73 74 … … 77 78 AssertCompile(sizeof(RTSPINLOCKINTERNAL) > sizeof(void *)); 78 79 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 } 81 97 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 98 RTMemFree(pThis); 94 return VERR_NO_MEMORY;95 99 } 96 97 *pSpinlock = pThis; 98 return VINF_SUCCESS; 100 IPRT_DARWIN_RESTORE_EFL_AC(); 101 return VERR_NO_MEMORY; 99 102 } 100 103 … … 116 119 */ 117 120 ASMAtomicIncU32(&pThis->u32Magic); 121 IPRT_DARWIN_SAVE_EFL_AC(); 118 122 119 123 Assert(g_pDarwinLockGroup); … … 122 126 123 127 RTMemFree(pThis); 128 129 IPRT_DARWIN_RESTORE_EFL_AC(); 124 130 return VINF_SUCCESS; 125 131 } … … 138 144 lck_spin_lock(pThis->pSpinLock); 139 145 pThis->fIntSaved = fIntSaved; 146 IPRT_DARWIN_RESTORE_EFL_ONLY_AC_EX(fIntSaved); 140 147 } 141 148 else 149 { 150 IPRT_DARWIN_SAVE_EFL_AC(); 142 151 lck_spin_lock(pThis->pSpinLock); 152 IPRT_DARWIN_RESTORE_EFL_ONLY_AC(); 153 } 143 154 } 144 155 … … 158 169 } 159 170 else 171 { 172 IPRT_DARWIN_SAVE_EFL_AC(); 160 173 lck_spin_unlock(pThis->pSpinLock); 174 IPRT_DARWIN_RESTORE_EFL_ONLY_AC(); 175 } 161 176 } 162 177 -
trunk/src/VBox/Runtime/r0drv/darwin/the-darwin-kernel.h
r57077 r57228 97 97 #include <iprt/asm-amd64-x86.h> 98 98 #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) 102 103 /** @} */ 103 104
Note:
See TracChangeset
for help on using the changeset viewer.