From 19cb13692b12d6442aecf45955bc896c845fccbe Mon Sep 17 00:00:00 2001 From: Ben Vanik Date: Mon, 1 Jun 2015 22:12:11 -0700 Subject: [PATCH] Fixing undefined export names. --- src/xenia/cpu/export_resolver.h | 10 ++++++---- src/xenia/kernel/objects/xuser_module.cc | 2 +- src/xenia/kernel/util/shim_utils.h | 6 +++--- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/xenia/cpu/export_resolver.h b/src/xenia/cpu/export_resolver.h index 2c0b64d2a..9895f278a 100644 --- a/src/xenia/cpu/export_resolver.h +++ b/src/xenia/cpu/export_resolver.h @@ -13,6 +13,7 @@ #include #include +#include "xenia/base/math.h" #include "xenia/cpu/frontend/ppc_context.h" namespace xe { @@ -58,18 +59,19 @@ class Export { kVariable = 1, }; - Export(uint16_t ordinal, Type type, std::string name, + Export(uint16_t ordinal, Type type, const char* name, ExportTag::type tags = 0) : ordinal(ordinal), type(type), - name(name), tags(tags), variable_ptr(0), - function_data({nullptr, nullptr, 0}) {} + function_data({nullptr, nullptr, 0}) { + std::strncpy(this->name, name, xe::countof(this->name)); + } uint16_t ordinal; Type type; - std::string name; + char name[96]; ExportTag::type tags; bool is_implemented() const { diff --git a/src/xenia/kernel/objects/xuser_module.cc b/src/xenia/kernel/objects/xuser_module.cc index 0142aed54..5b0b71041 100644 --- a/src/xenia/kernel/objects/xuser_module.cc +++ b/src/xenia/kernel/objects/xuser_module.cc @@ -389,7 +389,7 @@ void XUserModule::Dump() { kernel_export = export_resolver->GetExportByOrdinal(library->name, info->ordinal); if (kernel_export) { - name = kernel_export->name.c_str(); + name = kernel_export->name; implemented = kernel_export->is_implemented(); } } else { diff --git a/src/xenia/kernel/util/shim_utils.h b/src/xenia/kernel/util/shim_utils.h index 9c6ec880c..8c0aecfd2 100644 --- a/src/xenia/kernel/util/shim_utils.h +++ b/src/xenia/kernel/util/shim_utils.h @@ -388,7 +388,7 @@ auto KernelTrampoline(F&& f, Tuple&& t, std::index_sequence) { } template -xe::cpu::Export* RegisterExport(R (*fn)(Ps&...), std::string name, +xe::cpu::Export* RegisterExport(R (*fn)(Ps&...), const char* name, xe::cpu::ExportTag::type tags) { static const auto export = new cpu::Export(ORDINAL, xe::cpu::Export::Type::kFunction, name, @@ -418,7 +418,7 @@ xe::cpu::Export* RegisterExport(R (*fn)(Ps&...), std::string name, } template -xe::cpu::Export* RegisterExport(void (*fn)(Ps&...), std::string name, +xe::cpu::Export* RegisterExport(void (*fn)(Ps&...), const char* name, xe::cpu::ExportTag::type tags) { static const auto export = new cpu::Export(ORDINAL, xe::cpu::Export::Type::kFunction, name, @@ -450,7 +450,7 @@ using xe::cpu::ExportTag; const auto EXPORT_##module_name##_##name = \ RegisterExport_##module_name(xe::kernel::shim::RegisterExport< \ xe::kernel::shim::KernelModuleId::module_name, ordinals::##name>( \ - &name, std::string(#name), tags)); + &name, #name, tags)); #define DECLARE_XAM_EXPORT(name, tags) DECLARE_EXPORT(xam, name, tags) #define DECLARE_XBOXKRNL_EXPORT(name, tags) DECLARE_EXPORT(xboxkrnl, name, tags)