[CPU/Kernel] Cleanup and rework of how kernel exports are declared.

This commit is contained in:
gibbed
2018-11-20 11:01:25 -06:00
parent 613be1425e
commit 394105d359
31 changed files with 399 additions and 502 deletions

View File

@@ -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) {