[CPU/Kernel] Cleanup and rework of how kernel exports are declared.
This commit is contained in:
@@ -243,8 +243,7 @@ void KeSetCurrentStackPointers(lpvoid_t stack_ptr,
|
||||
|
||||
// TODO: Do we need to set the stack info on cur_thread?
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(KeSetCurrentStackPointers,
|
||||
ExportTag::kThreading | ExportTag::kImplemented);
|
||||
DECLARE_XBOXKRNL_EXPORT1(KeSetCurrentStackPointers, kThreading, kImplemented);
|
||||
|
||||
SHIM_CALL KeSetAffinityThread_shim(PPCContext* ppc_context,
|
||||
KernelState* kernel_state) {
|
||||
@@ -352,9 +351,8 @@ dword_result_t KeDelayExecutionThread(dword_t processor_mode, dword_t alertable,
|
||||
|
||||
return result;
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(KeDelayExecutionThread,
|
||||
ExportTag::kImplemented | ExportTag::kThreading |
|
||||
ExportTag::kHighFrequency | ExportTag::kBlocking);
|
||||
DECLARE_XBOXKRNL_EXPORT3(KeDelayExecutionThread, kThreading, kImplemented,
|
||||
kBlocking, kHighFrequency);
|
||||
|
||||
SHIM_CALL NtYieldExecution_shim(PPCContext* ppc_context,
|
||||
KernelState* kernel_state) {
|
||||
@@ -383,7 +381,7 @@ dword_result_t KeTlsAlloc() {
|
||||
|
||||
return slot;
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(KeTlsAlloc, ExportTag::kImplemented);
|
||||
DECLARE_XBOXKRNL_EXPORT1(KeTlsAlloc, kThreading, kImplemented);
|
||||
|
||||
// http://msdn.microsoft.com/en-us/library/ms686804
|
||||
dword_result_t KeTlsFree(dword_t tls_index) {
|
||||
@@ -394,7 +392,7 @@ dword_result_t KeTlsFree(dword_t tls_index) {
|
||||
kernel_state()->FreeTLS(tls_index);
|
||||
return 1;
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(KeTlsFree, ExportTag::kImplemented);
|
||||
DECLARE_XBOXKRNL_EXPORT1(KeTlsFree, kThreading, kImplemented);
|
||||
|
||||
// http://msdn.microsoft.com/en-us/library/ms686812
|
||||
dword_result_t KeTlsGetValue(dword_t tls_index) {
|
||||
@@ -407,8 +405,8 @@ dword_result_t KeTlsGetValue(dword_t tls_index) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(KeTlsGetValue,
|
||||
ExportTag::kImplemented | ExportTag::kHighFrequency);
|
||||
DECLARE_XBOXKRNL_EXPORT2(KeTlsGetValue, kThreading, kImplemented,
|
||||
kHighFrequency);
|
||||
|
||||
// http://msdn.microsoft.com/en-us/library/ms686818
|
||||
dword_result_t KeTlsSetValue(dword_t tls_index, dword_t tls_value) {
|
||||
@@ -420,7 +418,7 @@ dword_result_t KeTlsSetValue(dword_t tls_index, dword_t tls_value) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(KeTlsSetValue, ExportTag::kImplemented);
|
||||
DECLARE_XBOXKRNL_EXPORT1(KeTlsSetValue, kThreading, kImplemented);
|
||||
|
||||
void KeInitializeEvent(pointer_t<X_KEVENT> event_ptr, dword_t event_type,
|
||||
dword_t initial_state) {
|
||||
@@ -434,8 +432,7 @@ void KeInitializeEvent(pointer_t<X_KEVENT> event_ptr, dword_t event_type,
|
||||
return;
|
||||
}
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(KeInitializeEvent,
|
||||
ExportTag::kImplemented | ExportTag::kThreading);
|
||||
DECLARE_XBOXKRNL_EXPORT1(KeInitializeEvent, kThreading, kImplemented);
|
||||
|
||||
dword_result_t KeSetEvent(pointer_t<X_KEVENT> event_ptr, dword_t increment,
|
||||
dword_t wait) {
|
||||
@@ -447,9 +444,7 @@ dword_result_t KeSetEvent(pointer_t<X_KEVENT> event_ptr, dword_t increment,
|
||||
|
||||
return ev->Set(increment, !!wait);
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(KeSetEvent, ExportTag::kImplemented |
|
||||
ExportTag::kThreading |
|
||||
ExportTag::kHighFrequency);
|
||||
DECLARE_XBOXKRNL_EXPORT2(KeSetEvent, kThreading, kImplemented, kHighFrequency);
|
||||
|
||||
dword_result_t KePulseEvent(pointer_t<X_KEVENT> event_ptr, dword_t increment,
|
||||
dword_t wait) {
|
||||
@@ -461,9 +456,8 @@ dword_result_t KePulseEvent(pointer_t<X_KEVENT> event_ptr, dword_t increment,
|
||||
|
||||
return ev->Pulse(increment, !!wait);
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(KePulseEvent, ExportTag::kImplemented |
|
||||
ExportTag::kThreading |
|
||||
ExportTag::kHighFrequency);
|
||||
DECLARE_XBOXKRNL_EXPORT2(KePulseEvent, kThreading, kImplemented,
|
||||
kHighFrequency);
|
||||
|
||||
dword_result_t KeResetEvent(pointer_t<X_KEVENT> event_ptr) {
|
||||
auto ev = XObject::GetNativeObject<XEvent>(kernel_state(), event_ptr);
|
||||
@@ -474,8 +468,7 @@ dword_result_t KeResetEvent(pointer_t<X_KEVENT> event_ptr) {
|
||||
|
||||
return ev->Reset();
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(KeResetEvent,
|
||||
ExportTag::kImplemented | ExportTag::kThreading);
|
||||
DECLARE_XBOXKRNL_EXPORT1(KeResetEvent, kThreading, kImplemented);
|
||||
|
||||
dword_result_t NtCreateEvent(lpdword_t handle_ptr,
|
||||
pointer_t<X_OBJECT_ATTRIBUTES> obj_attributes_ptr,
|
||||
@@ -508,8 +501,7 @@ dword_result_t NtCreateEvent(lpdword_t handle_ptr,
|
||||
}
|
||||
return X_STATUS_SUCCESS;
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(NtCreateEvent,
|
||||
ExportTag::kImplemented | ExportTag::kThreading);
|
||||
DECLARE_XBOXKRNL_EXPORT1(NtCreateEvent, kThreading, kImplemented);
|
||||
|
||||
dword_result_t NtSetEvent(dword_t handle, lpdword_t previous_state_ptr) {
|
||||
X_STATUS result = X_STATUS_SUCCESS;
|
||||
@@ -526,9 +518,7 @@ dword_result_t NtSetEvent(dword_t handle, lpdword_t previous_state_ptr) {
|
||||
|
||||
return result;
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(NtSetEvent, ExportTag::kImplemented |
|
||||
ExportTag::kThreading |
|
||||
ExportTag::kHighFrequency);
|
||||
DECLARE_XBOXKRNL_EXPORT2(NtSetEvent, kThreading, kImplemented, kHighFrequency);
|
||||
|
||||
dword_result_t NtPulseEvent(dword_t handle, lpdword_t previous_state_ptr) {
|
||||
X_STATUS result = X_STATUS_SUCCESS;
|
||||
@@ -545,9 +535,8 @@ dword_result_t NtPulseEvent(dword_t handle, lpdword_t previous_state_ptr) {
|
||||
|
||||
return result;
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(NtPulseEvent, ExportTag::kImplemented |
|
||||
ExportTag::kThreading |
|
||||
ExportTag::kHighFrequency);
|
||||
DECLARE_XBOXKRNL_EXPORT2(NtPulseEvent, kThreading, kImplemented,
|
||||
kHighFrequency);
|
||||
|
||||
dword_result_t NtClearEvent(dword_t handle) {
|
||||
X_STATUS result = X_STATUS_SUCCESS;
|
||||
@@ -561,9 +550,8 @@ dword_result_t NtClearEvent(dword_t handle) {
|
||||
|
||||
return result;
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(NtClearEvent, ExportTag::kImplemented |
|
||||
ExportTag::kThreading |
|
||||
ExportTag::kHighFrequency);
|
||||
DECLARE_XBOXKRNL_EXPORT2(NtClearEvent, kThreading, kImplemented,
|
||||
kHighFrequency);
|
||||
|
||||
// https://msdn.microsoft.com/en-us/library/windows/hardware/ff552150(v=vs.85).aspx
|
||||
void KeInitializeSemaphore(pointer_t<X_KSEMAPHORE> semaphore_ptr, dword_t count,
|
||||
@@ -579,8 +567,7 @@ void KeInitializeSemaphore(pointer_t<X_KSEMAPHORE> semaphore_ptr, dword_t count,
|
||||
return;
|
||||
}
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(KeInitializeSemaphore,
|
||||
ExportTag::kImplemented | ExportTag::kThreading);
|
||||
DECLARE_XBOXKRNL_EXPORT1(KeInitializeSemaphore, kThreading, kImplemented);
|
||||
|
||||
dword_result_t KeReleaseSemaphore(pointer_t<X_KSEMAPHORE> semaphore_ptr,
|
||||
dword_t increment, dword_t adjustment,
|
||||
@@ -597,8 +584,7 @@ dword_result_t KeReleaseSemaphore(pointer_t<X_KSEMAPHORE> semaphore_ptr,
|
||||
|
||||
return sem->ReleaseSemaphore(adjustment);
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(KeReleaseSemaphore,
|
||||
ExportTag::kImplemented | ExportTag::kThreading);
|
||||
DECLARE_XBOXKRNL_EXPORT1(KeReleaseSemaphore, kThreading, kImplemented);
|
||||
|
||||
SHIM_CALL NtCreateSemaphore_shim(PPCContext* ppc_context,
|
||||
KernelState* kernel_state) {
|
||||
@@ -698,7 +684,7 @@ dword_result_t NtCreateMutant(lpdword_t handle_out,
|
||||
|
||||
return X_STATUS_SUCCESS;
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(NtCreateMutant, ExportTag::kImplemented);
|
||||
DECLARE_XBOXKRNL_EXPORT1(NtCreateMutant, kThreading, kImplemented);
|
||||
|
||||
SHIM_CALL NtReleaseMutant_shim(PPCContext* ppc_context,
|
||||
KernelState* kernel_state) {
|
||||
@@ -844,9 +830,8 @@ dword_result_t KeWaitForSingleObject(lpvoid_t object_ptr, dword_t wait_reason,
|
||||
|
||||
return result;
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(KeWaitForSingleObject,
|
||||
ExportTag::kImplemented | ExportTag::kThreading |
|
||||
ExportTag::kBlocking | ExportTag::kHighFrequency);
|
||||
DECLARE_XBOXKRNL_EXPORT3(KeWaitForSingleObject, kThreading, kImplemented,
|
||||
kBlocking, kHighFrequency);
|
||||
|
||||
dword_result_t NtWaitForSingleObjectEx(dword_t object_handle, dword_t wait_mode,
|
||||
dword_t alertable,
|
||||
@@ -865,9 +850,8 @@ dword_result_t NtWaitForSingleObjectEx(dword_t object_handle, dword_t wait_mode,
|
||||
|
||||
return result;
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(NtWaitForSingleObjectEx,
|
||||
ExportTag::kImplemented | ExportTag::kThreading |
|
||||
ExportTag::kBlocking | ExportTag::kHighFrequency);
|
||||
DECLARE_XBOXKRNL_EXPORT3(NtWaitForSingleObjectEx, kThreading, kImplemented,
|
||||
kBlocking, kHighFrequency);
|
||||
|
||||
dword_result_t KeWaitForMultipleObjects(dword_t count, lpdword_t objects_ptr,
|
||||
dword_t wait_type, dword_t wait_reason,
|
||||
@@ -899,9 +883,8 @@ dword_result_t KeWaitForMultipleObjects(dword_t count, lpdword_t objects_ptr,
|
||||
|
||||
return result;
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(KeWaitForMultipleObjects,
|
||||
ExportTag::kImplemented | ExportTag::kThreading |
|
||||
ExportTag::kBlocking | ExportTag::kHighFrequency);
|
||||
DECLARE_XBOXKRNL_EXPORT3(KeWaitForMultipleObjects, kThreading, kImplemented,
|
||||
kBlocking, kHighFrequency);
|
||||
|
||||
dword_result_t NtWaitForMultipleObjectsEx(dword_t count, lpdword_t handles,
|
||||
dword_t wait_type, dword_t wait_mode,
|
||||
@@ -928,9 +911,8 @@ dword_result_t NtWaitForMultipleObjectsEx(dword_t count, lpdword_t handles,
|
||||
|
||||
return result;
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(NtWaitForMultipleObjectsEx,
|
||||
ExportTag::kImplemented | ExportTag::kThreading |
|
||||
ExportTag::kBlocking | ExportTag::kHighFrequency);
|
||||
DECLARE_XBOXKRNL_EXPORT3(NtWaitForMultipleObjectsEx, kThreading, kImplemented,
|
||||
kBlocking, kHighFrequency);
|
||||
|
||||
dword_result_t NtSignalAndWaitForSingleObjectEx(dword_t signal_handle,
|
||||
dword_t wait_handle,
|
||||
@@ -953,9 +935,8 @@ dword_result_t NtSignalAndWaitForSingleObjectEx(dword_t signal_handle,
|
||||
|
||||
return result;
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(NtSignalAndWaitForSingleObjectEx,
|
||||
ExportTag::kImplemented | ExportTag::kThreading |
|
||||
ExportTag::kBlocking | ExportTag::kHighFrequency);
|
||||
DECLARE_XBOXKRNL_EXPORT3(NtSignalAndWaitForSingleObjectEx, kThreading,
|
||||
kImplemented, kBlocking, kHighFrequency);
|
||||
|
||||
dword_result_t KfAcquireSpinLock(lpdword_t lock_ptr) {
|
||||
// XELOGD(
|
||||
@@ -976,9 +957,8 @@ dword_result_t KfAcquireSpinLock(lpdword_t lock_ptr) {
|
||||
|
||||
return old_irql;
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(KfAcquireSpinLock,
|
||||
ExportTag::kImplemented | ExportTag::kThreading |
|
||||
ExportTag::kHighFrequency | ExportTag::kBlocking);
|
||||
DECLARE_XBOXKRNL_EXPORT3(KfAcquireSpinLock, kThreading, kImplemented, kBlocking,
|
||||
kHighFrequency);
|
||||
|
||||
void KfReleaseSpinLock(lpdword_t lock_ptr, dword_t old_irql) {
|
||||
// Restore IRQL.
|
||||
@@ -989,9 +969,8 @@ void KfReleaseSpinLock(lpdword_t lock_ptr, dword_t old_irql) {
|
||||
auto lock = reinterpret_cast<uint32_t*>(lock_ptr.host_address());
|
||||
xe::atomic_dec(lock);
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(KfReleaseSpinLock, ExportTag::kImplemented |
|
||||
ExportTag::kThreading |
|
||||
ExportTag::kHighFrequency);
|
||||
DECLARE_XBOXKRNL_EXPORT2(KfReleaseSpinLock, kThreading, kImplemented,
|
||||
kHighFrequency);
|
||||
|
||||
void KeAcquireSpinLockAtRaisedIrql(lpdword_t lock_ptr) {
|
||||
// Lock.
|
||||
@@ -1001,18 +980,16 @@ void KeAcquireSpinLockAtRaisedIrql(lpdword_t lock_ptr) {
|
||||
// TODO(benvanik): error on deadlock?
|
||||
}
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(KeAcquireSpinLockAtRaisedIrql,
|
||||
ExportTag::kImplemented | ExportTag::kThreading |
|
||||
ExportTag::kHighFrequency | ExportTag::kBlocking);
|
||||
DECLARE_XBOXKRNL_EXPORT3(KeAcquireSpinLockAtRaisedIrql, kThreading,
|
||||
kImplemented, kBlocking, kHighFrequency);
|
||||
|
||||
void KeReleaseSpinLockFromRaisedIrql(lpdword_t lock_ptr) {
|
||||
// Unlock.
|
||||
auto lock = reinterpret_cast<uint32_t*>(lock_ptr.host_address());
|
||||
xe::atomic_dec(lock);
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(KeReleaseSpinLockFromRaisedIrql,
|
||||
ExportTag::kImplemented | ExportTag::kThreading |
|
||||
ExportTag::kHighFrequency);
|
||||
DECLARE_XBOXKRNL_EXPORT2(KeReleaseSpinLockFromRaisedIrql, kThreading,
|
||||
kImplemented, kHighFrequency);
|
||||
|
||||
SHIM_CALL KeEnterCriticalRegion_shim(PPCContext* ppc_context,
|
||||
KernelState* kernel_state) {
|
||||
@@ -1270,8 +1247,7 @@ void ExInitializeReadWriteLock(pointer_t<X_ERWLOCK> lock_ptr) {
|
||||
KeInitializeEvent(&lock_ptr->writer_event, 1, 0);
|
||||
KeInitializeSemaphore(&lock_ptr->reader_semaphore, 0, 0x7FFFFFFF);
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(ExInitializeReadWriteLock,
|
||||
ExportTag::kThreading | ExportTag::kImplemented);
|
||||
DECLARE_XBOXKRNL_EXPORT1(ExInitializeReadWriteLock, kThreading, kImplemented);
|
||||
|
||||
// NOTE: This function is very commonly inlined, and probably won't be called!
|
||||
pointer_result_t InterlockedPushEntrySList(
|
||||
@@ -1296,8 +1272,8 @@ pointer_result_t InterlockedPushEntrySList(
|
||||
|
||||
return old_head;
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(InterlockedPushEntrySList,
|
||||
ExportTag::kImplemented | ExportTag::kHighFrequency);
|
||||
DECLARE_XBOXKRNL_EXPORT2(InterlockedPushEntrySList, kThreading, kImplemented,
|
||||
kHighFrequency);
|
||||
|
||||
pointer_result_t InterlockedPopEntrySList(pointer_t<X_SLIST_HEADER> plist_ptr) {
|
||||
assert_not_null(plist_ptr);
|
||||
@@ -1323,8 +1299,8 @@ pointer_result_t InterlockedPopEntrySList(pointer_t<X_SLIST_HEADER> plist_ptr) {
|
||||
|
||||
return popped;
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(InterlockedPopEntrySList,
|
||||
ExportTag::kImplemented | ExportTag::kHighFrequency);
|
||||
DECLARE_XBOXKRNL_EXPORT2(InterlockedPopEntrySList, kThreading, kImplemented,
|
||||
kHighFrequency);
|
||||
|
||||
pointer_result_t InterlockedFlushSList(pointer_t<X_SLIST_HEADER> plist_ptr) {
|
||||
assert_not_null(plist_ptr);
|
||||
@@ -1344,7 +1320,7 @@ pointer_result_t InterlockedFlushSList(pointer_t<X_SLIST_HEADER> plist_ptr) {
|
||||
|
||||
return first;
|
||||
}
|
||||
DECLARE_XBOXKRNL_EXPORT(InterlockedFlushSList, ExportTag::kImplemented);
|
||||
DECLARE_XBOXKRNL_EXPORT1(InterlockedFlushSList, kThreading, kImplemented);
|
||||
|
||||
void RegisterThreadingExports(xe::cpu::ExportResolver* export_resolver,
|
||||
KernelState* kernel_state) {
|
||||
|
||||
Reference in New Issue
Block a user