Index: /trunk/src/VBox/HostDrivers/Support/darwin/SUPDrv-darwin.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/Support/darwin/SUPDrv-darwin.cpp	(revision 37969)
+++ /trunk/src/VBox/HostDrivers/Support/darwin/SUPDrv-darwin.cpp	(revision 37970)
@@ -815,15 +815,14 @@
 
 
-/** @todo move this to assembly where a simple "jmp printf" will to the trick. */
 RTDECL(int) SUPR0Printf(const char *pszFormat, ...)
 {
-    va_list     args;
+    va_list     va;
     char        szMsg[512];
 
-    va_start(args, pszFormat);
-    vsnprintf(szMsg, sizeof(szMsg) - 1, pszFormat, args);
-    va_end(args);
-
+    va_start(va, pszFormat);
+    RTStrPrintfV(szMsg, sizeof(szMsg) - 1, pszFormat, va);
+    va_end(va);
     szMsg[sizeof(szMsg) - 1] = '\0';
+
     printf("%s", szMsg);
     return 0;
Index: /trunk/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c
===================================================================
--- /trunk/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c	(revision 37969)
+++ /trunk/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c	(revision 37970)
@@ -782,20 +782,13 @@
 RTDECL(int) SUPR0Printf(const char *pszFormat, ...)
 {
-#if 1
-    va_list args;
+    va_list va;
     char    szMsg[512];
 
-    va_start(args, pszFormat);
-    vsnprintf(szMsg, sizeof(szMsg) - 1, pszFormat, args);
+    va_start(va, pszFormat);
+    SUPR0Printf(szMsg, sizeof(szMsg) - 1, pszFormat, va);
+    va_end(va);
     szMsg[sizeof(szMsg) - 1] = '\0';
+
     printk("%s", szMsg);
-    va_end(args);
-#else
-    /* forward to printf - needs some more GCC hacking to fix ebp... */
-    __asm__ __volatile__ ("mov %0, %esp\n\t"
-                          "jmp %1\n\t",
-                          :: "r" ((uintptr_t)&pszFormat - 4),
-                             "m" (printk));
-#endif
     return 0;
 }
