VOID EFIAPI DebugPrint(IN UINTN ErrorLevel, IN CONST CHAR8 *Format, ...) { CHAR8 szBuf[256]; VA_LIST va; UINTN cch; RTCCUINTREG SavedFlags; /* No pool noise, please. */ if (ErrorLevel == DEBUG_POOL) return; VA_START(va, Format); cch = AsciiVSPrint(szBuf, sizeof(szBuf), Format, va); VA_END(va); /* make sure it's terminated and doesn't end with a newline */ if (cch >= sizeof(szBuf)) cch = sizeof(szBuf) - 1; while (cch > 0 && (szBuf[cch - 1] == '\n' || szBuf[cch - 1] == '\r')) cch--; szBuf[cch] = '\0'; SavedFlags = ASMIntDisableFlags(); VBoxPrintString("dbg/"); VBoxPrintHex(ErrorLevel, sizeof(ErrorLevel)); VBoxPrintChar(' '); VBoxPrintString(szBuf); VBoxPrintChar('\n'); ASMSetFlags(SavedFlags); }
/** * Our own log worker function, avoid the dbg/00000xxx prefix and makes it clear * which log statements we added.. * * @param pszFormat Format string. EFI style! * @param ... Argument referneced in the format string. */ VOID EFIAPI VBoxLogWorker(const char *pszFormat, ...) { CHAR8 szBuf[384]; VA_LIST va; RTCCUINTREG SavedFlags; /* Format it. */ VA_START(va, pszFormat); AsciiVSPrint(szBuf, sizeof(szBuf), pszFormat, va); VA_END(va); szBuf[sizeof(szBuf) - 1] = '\0'; /* Output the log string. */ SavedFlags = ASMIntDisableFlags(); VBoxPrintString(szBuf); VBoxPrintChar('\n'); ASMSetFlags(SavedFlags); }