From c33613b2f89a9f2c9b37d4a0b0df1865c88c8ad2 Mon Sep 17 00:00:00 2001 From: Ben Vanik Date: Mon, 2 Feb 2015 22:33:15 -0800 Subject: [PATCH] assert_unhandled_case on ObReferenceObjectByHandle. --- src/alloy/backend/x64/x64_emitter.cc | 1 + src/xenia/kernel/xboxkrnl_ob.cc | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/alloy/backend/x64/x64_emitter.cc b/src/alloy/backend/x64/x64_emitter.cc index 77a661eda..19b550271 100644 --- a/src/alloy/backend/x64/x64_emitter.cc +++ b/src/alloy/backend/x64/x64_emitter.cc @@ -508,6 +508,7 @@ uint64_t ResolveFunctionAddress(void* raw_context, uint64_t target_address) { }; #pragma pack(pop) static_assert_size(Asm, kICSlotSize); + // TODO(benvanik): quick check table is full (so we don't have to enum slots) // The return address points to ReloadRCX work after the call. // To get the top of the table, look back a ways. uint64_t table_start = return_address - 12 - kICSlotSize * kICSlotCount; diff --git a/src/xenia/kernel/xboxkrnl_ob.cc b/src/xenia/kernel/xboxkrnl_ob.cc index 7aeb9a4d1..23b717165 100644 --- a/src/xenia/kernel/xboxkrnl_ob.cc +++ b/src/xenia/kernel/xboxkrnl_ob.cc @@ -35,13 +35,17 @@ SHIM_CALL ObReferenceObjectByHandle_shim(PPCContext* ppc_state, // TODO(benvanik): verify type with object_type_ptr // TODO(benvanik): get native value, if supported. - uint32_t native_ptr = 0xDEADF00D; + uint32_t native_ptr; switch (object_type_ptr) { case 0xD01BBEEF: // ExThreadObjectType { XThread* thread = (XThread*)object; native_ptr = thread->thread_state(); } break; + default: + assert_unhandled_case(object_type_ptr); + native_ptr = 0xDEADF00D; + break; } if (out_object_ptr) {