Reordered the formatting exports in the order of their ordinal.
This commit is contained in:
parent
b402fb76e1
commit
58b1059a23
|
@ -787,6 +787,28 @@ class WideCountFormatData : public FormatData {
|
||||||
int32_t count_;
|
int32_t count_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
SHIM_CALL DbgPrint_shim(PPCContext* ppc_context, KernelState* kernel_state) {
|
||||||
|
uint32_t format_ptr = SHIM_GET_ARG_32(0);
|
||||||
|
if (!format_ptr) {
|
||||||
|
SHIM_SET_RETURN_32(X_STATUS_INVALID_PARAMETER);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
auto format = (const uint8_t*)SHIM_MEM_ADDR(format_ptr);
|
||||||
|
|
||||||
|
StackArgList args(ppc_context);
|
||||||
|
StringFormatData data(format);
|
||||||
|
|
||||||
|
int32_t count = format_core(ppc_context, data, args, false);
|
||||||
|
if (count <= 0) {
|
||||||
|
SHIM_SET_RETURN_32(X_STATUS_SUCCESS);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
XELOGD("(DbgPrint) %s", data.str().c_str());
|
||||||
|
|
||||||
|
SHIM_SET_RETURN_32(X_STATUS_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
// https://msdn.microsoft.com/en-us/library/ybk95axf.aspx
|
// https://msdn.microsoft.com/en-us/library/ybk95axf.aspx
|
||||||
SHIM_CALL sprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) {
|
SHIM_CALL sprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) {
|
||||||
uint32_t buffer_ptr = SHIM_GET_ARG_32(0);
|
uint32_t buffer_ptr = SHIM_GET_ARG_32(0);
|
||||||
|
@ -815,35 +837,6 @@ SHIM_CALL sprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) {
|
||||||
SHIM_SET_RETURN_32(count);
|
SHIM_SET_RETURN_32(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://msdn.microsoft.com/en-us/library/28d5ce15.aspx
|
|
||||||
SHIM_CALL vsprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) {
|
|
||||||
uint32_t buffer_ptr = SHIM_GET_ARG_32(0);
|
|
||||||
uint32_t format_ptr = SHIM_GET_ARG_32(1);
|
|
||||||
uint32_t arg_ptr = SHIM_GET_ARG_32(2);
|
|
||||||
|
|
||||||
XELOGD("vsprintf(%08X, %08X, %08X)", buffer_ptr, format_ptr, arg_ptr);
|
|
||||||
|
|
||||||
if (buffer_ptr == 0 || format_ptr == 0) {
|
|
||||||
SHIM_SET_RETURN_32(-1);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto buffer = (uint8_t*)SHIM_MEM_ADDR(buffer_ptr);
|
|
||||||
auto format = (const uint8_t*)SHIM_MEM_ADDR(format_ptr);
|
|
||||||
|
|
||||||
ArrayArgList args(ppc_context, arg_ptr);
|
|
||||||
StringFormatData data(format);
|
|
||||||
|
|
||||||
int32_t count = format_core(ppc_context, data, args, false);
|
|
||||||
if (count <= 0) {
|
|
||||||
buffer[0] = '\0';
|
|
||||||
} else {
|
|
||||||
std::memcpy(buffer, data.str().c_str(), count);
|
|
||||||
buffer[count] = '\0';
|
|
||||||
}
|
|
||||||
SHIM_SET_RETURN_32(count);
|
|
||||||
}
|
|
||||||
|
|
||||||
// https://msdn.microsoft.com/en-us/library/1kt27hek.aspx
|
// https://msdn.microsoft.com/en-us/library/1kt27hek.aspx
|
||||||
SHIM_CALL _vsnprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) {
|
SHIM_CALL _vsnprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) {
|
||||||
uint32_t buffer_ptr = SHIM_GET_ARG_32(0);
|
uint32_t buffer_ptr = SHIM_GET_ARG_32(0);
|
||||||
|
@ -882,6 +875,57 @@ SHIM_CALL _vsnprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) {
|
||||||
SHIM_SET_RETURN_32(count);
|
SHIM_SET_RETURN_32(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://msdn.microsoft.com/en-us/library/28d5ce15.aspx
|
||||||
|
SHIM_CALL vsprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) {
|
||||||
|
uint32_t buffer_ptr = SHIM_GET_ARG_32(0);
|
||||||
|
uint32_t format_ptr = SHIM_GET_ARG_32(1);
|
||||||
|
uint32_t arg_ptr = SHIM_GET_ARG_32(2);
|
||||||
|
|
||||||
|
XELOGD("vsprintf(%08X, %08X, %08X)", buffer_ptr, format_ptr, arg_ptr);
|
||||||
|
|
||||||
|
if (buffer_ptr == 0 || format_ptr == 0) {
|
||||||
|
SHIM_SET_RETURN_32(-1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto buffer = (uint8_t*)SHIM_MEM_ADDR(buffer_ptr);
|
||||||
|
auto format = (const uint8_t*)SHIM_MEM_ADDR(format_ptr);
|
||||||
|
|
||||||
|
ArrayArgList args(ppc_context, arg_ptr);
|
||||||
|
StringFormatData data(format);
|
||||||
|
|
||||||
|
int32_t count = format_core(ppc_context, data, args, false);
|
||||||
|
if (count <= 0) {
|
||||||
|
buffer[0] = '\0';
|
||||||
|
} else {
|
||||||
|
std::memcpy(buffer, data.str().c_str(), count);
|
||||||
|
buffer[count] = '\0';
|
||||||
|
}
|
||||||
|
SHIM_SET_RETURN_32(count);
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://msdn.microsoft.com/en-us/library/w05tbk72.aspx
|
||||||
|
SHIM_CALL _vscwprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) {
|
||||||
|
uint32_t format_ptr = SHIM_GET_ARG_32(0);
|
||||||
|
uint32_t arg_ptr = SHIM_GET_ARG_32(1);
|
||||||
|
|
||||||
|
XELOGD("_vscwprintf(%08X, %08X)", format_ptr, arg_ptr);
|
||||||
|
|
||||||
|
if (format_ptr == 0) {
|
||||||
|
SHIM_SET_RETURN_32(-1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto format = (const uint16_t*)SHIM_MEM_ADDR(format_ptr);
|
||||||
|
|
||||||
|
ArrayArgList args(ppc_context, arg_ptr);
|
||||||
|
WideCountFormatData data(format);
|
||||||
|
|
||||||
|
int32_t count = format_core(ppc_context, data, args, true);
|
||||||
|
assert_true(count < 0 || data.count() == count);
|
||||||
|
SHIM_SET_RETURN_32(count);
|
||||||
|
}
|
||||||
|
|
||||||
// https://msdn.microsoft.com/en-us/library/28d5ce15.aspx
|
// https://msdn.microsoft.com/en-us/library/28d5ce15.aspx
|
||||||
SHIM_CALL vswprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) {
|
SHIM_CALL vswprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) {
|
||||||
uint32_t buffer_ptr = SHIM_GET_ARG_32(0);
|
uint32_t buffer_ptr = SHIM_GET_ARG_32(0);
|
||||||
|
@ -911,59 +955,15 @@ SHIM_CALL vswprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) {
|
||||||
SHIM_SET_RETURN_32(count);
|
SHIM_SET_RETURN_32(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://msdn.microsoft.com/en-us/library/w05tbk72.aspx
|
|
||||||
SHIM_CALL _vscwprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) {
|
|
||||||
uint32_t format_ptr = SHIM_GET_ARG_32(0);
|
|
||||||
uint32_t arg_ptr = SHIM_GET_ARG_32(1);
|
|
||||||
|
|
||||||
XELOGD("_vscwprintf(%08X, %08X)", format_ptr, arg_ptr);
|
|
||||||
|
|
||||||
if (format_ptr == 0) {
|
|
||||||
SHIM_SET_RETURN_32(-1);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto format = (const uint16_t*)SHIM_MEM_ADDR(format_ptr);
|
|
||||||
|
|
||||||
ArrayArgList args(ppc_context, arg_ptr);
|
|
||||||
WideCountFormatData data(format);
|
|
||||||
|
|
||||||
int32_t count = format_core(ppc_context, data, args, true);
|
|
||||||
assert_true(count < 0 || data.count() == count);
|
|
||||||
SHIM_SET_RETURN_32(count);
|
|
||||||
}
|
|
||||||
|
|
||||||
SHIM_CALL DbgPrint_shim(PPCContext* ppc_context, KernelState* kernel_state) {
|
|
||||||
uint32_t format_ptr = SHIM_GET_ARG_32(0);
|
|
||||||
if (!format_ptr) {
|
|
||||||
SHIM_SET_RETURN_32(X_STATUS_INVALID_PARAMETER);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
auto format = (const uint8_t*)SHIM_MEM_ADDR(format_ptr);
|
|
||||||
|
|
||||||
StackArgList args(ppc_context);
|
|
||||||
StringFormatData data(format);
|
|
||||||
|
|
||||||
int32_t count = format_core(ppc_context, data, args, false);
|
|
||||||
if (count <= 0) {
|
|
||||||
SHIM_SET_RETURN_32(X_STATUS_SUCCESS);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
XELOGD("(DbgPrint) %s", data.str().c_str());
|
|
||||||
|
|
||||||
SHIM_SET_RETURN_32(X_STATUS_SUCCESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace kernel
|
} // namespace kernel
|
||||||
} // namespace xe
|
} // namespace xe
|
||||||
|
|
||||||
void xe::kernel::xboxkrnl::RegisterStringExports(
|
void xe::kernel::xboxkrnl::RegisterStringExports(
|
||||||
xe::cpu::ExportResolver* export_resolver, KernelState* state) {
|
xe::cpu::ExportResolver* export_resolver, KernelState* state) {
|
||||||
SHIM_SET_MAPPING("xboxkrnl.exe", sprintf, state);
|
|
||||||
SHIM_SET_MAPPING("xboxkrnl.exe", vsprintf, state);
|
|
||||||
SHIM_SET_MAPPING("xboxkrnl.exe", _vsnprintf, state);
|
|
||||||
SHIM_SET_MAPPING("xboxkrnl.exe", vswprintf, state);
|
|
||||||
SHIM_SET_MAPPING("xboxkrnl.exe", _vscwprintf, state);
|
|
||||||
SHIM_SET_MAPPING("xboxkrnl.exe", DbgPrint, state);
|
SHIM_SET_MAPPING("xboxkrnl.exe", DbgPrint, state);
|
||||||
|
SHIM_SET_MAPPING("xboxkrnl.exe", sprintf, state);
|
||||||
|
SHIM_SET_MAPPING("xboxkrnl.exe", _vsnprintf, state);
|
||||||
|
SHIM_SET_MAPPING("xboxkrnl.exe", vsprintf, state);
|
||||||
|
SHIM_SET_MAPPING("xboxkrnl.exe", _vscwprintf, state);
|
||||||
|
SHIM_SET_MAPPING("xboxkrnl.exe", vswprintf, state);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue