diff --git a/src/core/hle/function_wrappers.h b/src/core/hle/function_wrappers.h
index 7875971ce3a75f71e0bb40c30efcb9af7c2e2abf..f6eb900f0a1d46078c60501073086d0ae89de0c5 100644
--- a/src/core/hle/function_wrappers.h
+++ b/src/core/hle/function_wrappers.h
@@ -256,9 +256,9 @@ void Wrap() {
     func(((s64)PARAM(1) << 32) | PARAM(0));
 }
 
-template <void func(const char*)>
+template <void func(const char*, int len)>
 void Wrap() {
-    func((char*)Memory::GetPointer(PARAM(0)));
+    func((char*)Memory::GetPointer(PARAM(0)), PARAM(1));
 }
 
 template <void func(u8)>
diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp
index 4e0c3fb8bc19ca65ec1ae488bee1a9fdf15f2883..2db823c61594db7b931a1966d3f60e0711b08a7a 100644
--- a/src/core/hle/svc.cpp
+++ b/src/core/hle/svc.cpp
@@ -467,8 +467,8 @@ static void Break(u8 break_reason) {
 }
 
 /// Used to output a message on a debug hardware unit - does nothing on a retail unit
-static void OutputDebugString(const char* string) {
-    LOG_DEBUG(Debug_Emulated, "%s", string);
+static void OutputDebugString(const char* string, int len) {
+    LOG_DEBUG(Debug_Emulated, "%.*s", len, string);
 }
 
 /// Get resource limit