mirror of https://github.com/acidanthera/audk.git
Fix the bug that debug output fails to print hex value to screen. Remove module internal SPrint() and use UnicodeSPrintAsciiFormat() in print library instead.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8057 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
c41c3e55d5
commit
f05b1c14ec
|
@ -543,88 +543,6 @@ DumpExceptionDataDebugOut (
|
|||
}
|
||||
#endif
|
||||
|
||||
UINTN
|
||||
SPrint (
|
||||
IN OUT CHAR16 *Buffer,
|
||||
IN CONST CHAR16 *Format,
|
||||
...
|
||||
)
|
||||
{
|
||||
VA_LIST Marker;
|
||||
UINTN Index;
|
||||
UINTN Flags;
|
||||
UINTN Width;
|
||||
UINT64 Value;
|
||||
|
||||
VA_START (Marker, Format);
|
||||
|
||||
//
|
||||
// Process the format string. Stop if Buffer is over run.
|
||||
//
|
||||
|
||||
for (Index = 0; *Format != 0; Format++) {
|
||||
if (*Format != L'%') {
|
||||
Buffer[Index++] = *Format;
|
||||
} else {
|
||||
|
||||
//
|
||||
// Now it's time to parse what follows after %
|
||||
// Support: % [ 0 width ] [ l ] x
|
||||
// width - fill 0, to ensure the width of x will be "width"
|
||||
// l - UINT64 instead of UINT32
|
||||
//
|
||||
Width = 0;
|
||||
Flags = 0;
|
||||
Format ++;
|
||||
|
||||
if (*Format == L'0') {
|
||||
Flags |= PREFIX_ZERO;
|
||||
do {
|
||||
Width += Width * 10 + (*Format - L'0');
|
||||
Format ++;
|
||||
} while (*Format >= L'1' && *Format <= L'9');
|
||||
}
|
||||
|
||||
if (*Format == L'l') {
|
||||
Flags |= LONG_TYPE;
|
||||
Format ++;
|
||||
}
|
||||
|
||||
|
||||
switch (*Format) {
|
||||
case 'X':
|
||||
Flags |= PREFIX_ZERO;
|
||||
Width = sizeof (UINT64) * 2;
|
||||
//
|
||||
// break skiped on purpose
|
||||
//
|
||||
case 'x':
|
||||
if ((Flags & LONG_TYPE) == LONG_TYPE) {
|
||||
Value = VA_ARG (Marker, UINT64);
|
||||
} else {
|
||||
Value = VA_ARG (Marker, UINTN);
|
||||
}
|
||||
|
||||
UnicodeValueToString (Buffer+Index, Flags, Value, Width);
|
||||
|
||||
for ( ; Buffer[Index] != L'\0'; Index ++) {
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
//
|
||||
// if the type is unknown print it to the screen
|
||||
//
|
||||
Buffer[Index++] = *Format;
|
||||
}
|
||||
}
|
||||
}
|
||||
Buffer[Index++] = '\0';
|
||||
|
||||
VA_END (Marker);
|
||||
return Index;
|
||||
}
|
||||
|
||||
VOID
|
||||
DumpExceptionDataVgaOut (
|
||||
|
@ -646,31 +564,35 @@ DumpExceptionDataVgaOut (
|
|||
VideoBuffer = (CHAR16 *) (UINTN) 0xb8000;
|
||||
|
||||
#ifdef EFI32
|
||||
SPrint (
|
||||
VideoBuffer,
|
||||
L"!!!! IA32 Exception Type - %08x !!!!",
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"!!!! IA32 Exception Type - %08x !!!!",
|
||||
InterruptType
|
||||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
SPrint (
|
||||
VideoBuffer,
|
||||
L"EIP - %08x, CS - %08x, EFLAGS - %08x",
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"EIP - %08x, CS - %08x, EFLAGS - %08x",
|
||||
SystemContext.SystemContextIa32->Eip,
|
||||
SystemContext.SystemContextIa32->Cs,
|
||||
SystemContext.SystemContextIa32->Eflags
|
||||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
if (ErrorCodeFlag & (1 << InterruptType)) {
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"ExceptionData - %08x",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"ExceptionData - %08x",
|
||||
SystemContext.SystemContextIa32->ExceptionData
|
||||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
}
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"EAX - %08x, ECX - %08x, EDX - %08x, EBX - %08x",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"EAX - %08x, ECX - %08x, EDX - %08x, EBX - %08x",
|
||||
SystemContext.SystemContextIa32->Eax,
|
||||
SystemContext.SystemContextIa32->Ecx,
|
||||
SystemContext.SystemContextIa32->Edx,
|
||||
|
@ -678,9 +600,10 @@ DumpExceptionDataVgaOut (
|
|||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"ESP - %08x, EBP - %08x, ESI - %08x, EDI - %08x",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"ESP - %08x, EBP - %08x, ESI - %08x, EDI - %08x",
|
||||
SystemContext.SystemContextIa32->Esp,
|
||||
SystemContext.SystemContextIa32->Ebp,
|
||||
SystemContext.SystemContextIa32->Esi,
|
||||
|
@ -688,9 +611,10 @@ DumpExceptionDataVgaOut (
|
|||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"DS - %08x, ES - %08x, FS - %08x, GS - %08x, SS - %08x",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"DS - %08x, ES - %08x, FS - %08x, GS - %08x, SS - %08x",
|
||||
SystemContext.SystemContextIa32->Ds,
|
||||
SystemContext.SystemContextIa32->Es,
|
||||
SystemContext.SystemContextIa32->Fs,
|
||||
|
@ -699,9 +623,10 @@ DumpExceptionDataVgaOut (
|
|||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"GDTR - %08x %08x, IDTR - %08x %08x",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"GDTR - %08x %08x, IDTR - %08x %08x",
|
||||
SystemContext.SystemContextIa32->Gdtr[0],
|
||||
SystemContext.SystemContextIa32->Gdtr[1],
|
||||
SystemContext.SystemContextIa32->Idtr[0],
|
||||
|
@ -709,17 +634,19 @@ DumpExceptionDataVgaOut (
|
|||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"LDTR - %08x, TR - %08x",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"LDTR - %08x, TR - %08x",
|
||||
SystemContext.SystemContextIa32->Ldtr,
|
||||
SystemContext.SystemContextIa32->Tr
|
||||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"CR0 - %08x, CR2 - %08x, CR3 - %08x, CR4 - %08x",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"CR0 - %08x, CR2 - %08x, CR3 - %08x, CR4 - %08x",
|
||||
SystemContext.SystemContextIa32->Cr0,
|
||||
SystemContext.SystemContextIa32->Cr2,
|
||||
SystemContext.SystemContextIa32->Cr3,
|
||||
|
@ -727,9 +654,10 @@ DumpExceptionDataVgaOut (
|
|||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"DR0 - %08x, DR1 - %08x, DR2 - %08x, DR3 - %08x",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"DR0 - %08x, DR1 - %08x, DR2 - %08x, DR3 - %08x",
|
||||
SystemContext.SystemContextIa32->Dr0,
|
||||
SystemContext.SystemContextIa32->Dr1,
|
||||
SystemContext.SystemContextIa32->Dr2,
|
||||
|
@ -737,24 +665,27 @@ DumpExceptionDataVgaOut (
|
|||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"DR6 - %08x, DR7 - %08x",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"DR6 - %08x, DR7 - %08x",
|
||||
SystemContext.SystemContextIa32->Dr6,
|
||||
SystemContext.SystemContextIa32->Dr7
|
||||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
#else
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"!!!! X64 Exception Type - %016lx !!!!",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"!!!! X64 Exception Type - %016lx !!!!",
|
||||
(UINT64)InterruptType
|
||||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"RIP - %016lx, CS - %016lx, RFLAGS - %016lx",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"RIP - %016lx, CS - %016lx, RFLAGS - %016lx",
|
||||
SystemContext.SystemContextX64->Rip,
|
||||
SystemContext.SystemContextX64->Cs,
|
||||
SystemContext.SystemContextX64->Rflags
|
||||
|
@ -762,130 +693,145 @@ DumpExceptionDataVgaOut (
|
|||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
if (ErrorCodeFlag & (1 << InterruptType)) {
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"ExceptionData - %016lx",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"ExceptionData - %016lx",
|
||||
SystemContext.SystemContextX64->ExceptionData
|
||||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
}
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"RAX - %016lx, RCX - %016lx, RDX - %016lx",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"RAX - %016lx, RCX - %016lx, RDX - %016lx",
|
||||
SystemContext.SystemContextX64->Rax,
|
||||
SystemContext.SystemContextX64->Rcx,
|
||||
SystemContext.SystemContextX64->Rdx
|
||||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"RBX - %016lx, RSP - %016lx, RBP - %016lx",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"RBX - %016lx, RSP - %016lx, RBP - %016lx",
|
||||
SystemContext.SystemContextX64->Rbx,
|
||||
SystemContext.SystemContextX64->Rsp,
|
||||
SystemContext.SystemContextX64->Rbp
|
||||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"RSI - %016lx, RDI - %016lx",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"RSI - %016lx, RDI - %016lx",
|
||||
SystemContext.SystemContextX64->Rsi,
|
||||
SystemContext.SystemContextX64->Rdi
|
||||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"R8 - %016lx, R9 - %016lx, R10 - %016lx",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"R8 - %016lx, R9 - %016lx, R10 - %016lx",
|
||||
SystemContext.SystemContextX64->R8,
|
||||
SystemContext.SystemContextX64->R9,
|
||||
SystemContext.SystemContextX64->R10
|
||||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"R11 - %016lx, R12 - %016lx, R13 - %016lx",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"R11 - %016lx, R12 - %016lx, R13 - %016lx",
|
||||
SystemContext.SystemContextX64->R11,
|
||||
SystemContext.SystemContextX64->R12,
|
||||
SystemContext.SystemContextX64->R13
|
||||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"R14 - %016lx, R15 - %016lx",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"R14 - %016lx, R15 - %016lx",
|
||||
SystemContext.SystemContextX64->R14,
|
||||
SystemContext.SystemContextX64->R15
|
||||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"DS - %016lx, ES - %016lx, FS - %016lx",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"DS - %016lx, ES - %016lx, FS - %016lx",
|
||||
SystemContext.SystemContextX64->Ds,
|
||||
SystemContext.SystemContextX64->Es,
|
||||
SystemContext.SystemContextX64->Fs
|
||||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"GS - %016lx, SS - %016lx",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"GS - %016lx, SS - %016lx",
|
||||
SystemContext.SystemContextX64->Gs,
|
||||
SystemContext.SystemContextX64->Ss
|
||||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"GDTR - %016lx %016lx, LDTR - %016lx",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"GDTR - %016lx %016lx, LDTR - %016lx",
|
||||
SystemContext.SystemContextX64->Gdtr[0],
|
||||
SystemContext.SystemContextX64->Gdtr[1],
|
||||
SystemContext.SystemContextX64->Ldtr
|
||||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"IDTR - %016lx %016lx, TR - %016lx",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"IDTR - %016lx %016lx, TR - %016lx",
|
||||
SystemContext.SystemContextX64->Idtr[0],
|
||||
SystemContext.SystemContextX64->Idtr[1],
|
||||
SystemContext.SystemContextX64->Tr
|
||||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"CR0 - %016lx, CR2 - %016lx, CR3 - %016lx",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"CR0 - %016lx, CR2 - %016lx, CR3 - %016lx",
|
||||
SystemContext.SystemContextX64->Cr0,
|
||||
SystemContext.SystemContextX64->Cr2,
|
||||
SystemContext.SystemContextX64->Cr3
|
||||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"CR4 - %016lx, CR8 - %016lx",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"CR4 - %016lx, CR8 - %016lx",
|
||||
SystemContext.SystemContextX64->Cr4,
|
||||
SystemContext.SystemContextX64->Cr8
|
||||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"DR0 - %016lx, DR1 - %016lx, DR2 - %016lx",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"DR0 - %016lx, DR1 - %016lx, DR2 - %016lx",
|
||||
SystemContext.SystemContextX64->Dr0,
|
||||
SystemContext.SystemContextX64->Dr1,
|
||||
SystemContext.SystemContextX64->Dr2
|
||||
);
|
||||
VideoBuffer += COLUMN_MAX;
|
||||
|
||||
SPrint (
|
||||
UnicodeSPrintAsciiFormat (
|
||||
VideoBuffer,
|
||||
L"DR3 - %016lx, DR6 - %016lx, DR7 - %016lx",
|
||||
COLUMN_MAX * sizeof (CHAR16),
|
||||
"DR3 - %016lx, DR6 - %016lx, DR7 - %016lx",
|
||||
SystemContext.SystemContextX64->Dr3,
|
||||
SystemContext.SystemContextX64->Dr6,
|
||||
SystemContext.SystemContextX64->Dr7
|
||||
|
|
Loading…
Reference in New Issue