Files
Xenia-Canary/src/xenia/kernel/objects/xkernel_module.cc
Ben Vanik 3439641101 Removing cpu.h.
Part of #296.
2015-06-27 08:58:45 -07:00

69 lines
2.1 KiB
C++

/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2013 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "xenia/kernel/objects/xkernel_module.h"
#include "xenia/base/logging.h"
#include "xenia/emulator.h"
#include "xenia/kernel/objects/xthread.h"
namespace xe {
namespace kernel {
XKernelModule::XKernelModule(KernelState* kernel_state, const char* path)
: XModule(kernel_state, ModuleType::kKernelModule, path) {
emulator_ = kernel_state->emulator();
memory_ = emulator_->memory();
export_resolver_ = kernel_state->emulator()->export_resolver();
OnLoad();
}
XKernelModule::~XKernelModule() {}
uint32_t XKernelModule::GetProcAddressByOrdinal(uint16_t ordinal) {
auto export = export_resolver_->GetExportByOrdinal(name(), ordinal);
if (!export) {
// Export (or its parent library) not found.
return 0;
}
if (export->type == cpu::Export::Type::kVariable) {
if (export->variable_ptr) {
return export->variable_ptr;
} else {
XELOGW(
"ERROR: var export referenced GetProcAddressByOrdinal(%.4X(%s)) is "
"not implemented",
ordinal, export->name);
return 0;
}
} else {
if (export->function_data.shim) {
// Implemented. Dynamically generate trampoline.
XELOGE("GetProcAddressByOrdinal not implemented");
return 0;
} else {
// Not implemented.
XELOGW(
"ERROR: fn export referenced GetProcAddressByOrdinal(%.4X(%s)) is "
"not implemented",
ordinal, export->name);
return 0;
}
}
}
uint32_t XKernelModule::GetProcAddressByName(const char* name) {
XELOGE("GetProcAddressByName not implemented");
return 0;
}
} // namespace kernel
} // namespace xe