From 0531f61376548c8a4d79eaee1dd5f4070ef009bf Mon Sep 17 00:00:00 2001 From: "Kuo, Ted" Date: Mon, 14 Mar 2022 10:32:42 +0800 Subject: [PATCH] IntelFsp2Pkg: BaseFspDebugLibSerialPort Support for X64 REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3833 Add BaseFspDebugLibSerialPort Support for X64. Cc: Chasel Chiu Cc: Nate DeSimone Cc: Star Zeng Cc: Ashraf Ali S Cc: Ted Kuo Signed-off-by: Ted Kuo Reviewed-by: Chasel Chiu --- .../BaseFspDebugLibSerialPort.inf | 5 ++- .../BaseFspDebugLibSerialPort/DebugLib.c | 39 ++++++++++++------- .../X64/FspDebug.nasm | 25 ++++++++++++ 3 files changed, 53 insertions(+), 16 deletions(-) create mode 100644 IntelFsp2Pkg/Library/BaseFspDebugLibSerialPort/X64/FspDebug.nasm diff --git a/IntelFsp2Pkg/Library/BaseFspDebugLibSerialPort/BaseFspDebugLibSerialPort.inf b/IntelFsp2Pkg/Library/BaseFspDebugLibSerialPort/BaseFspDebugLibSerialPort.inf index 14b1899e6c..395def57c3 100644 --- a/IntelFsp2Pkg/Library/BaseFspDebugLibSerialPort/BaseFspDebugLibSerialPort.inf +++ b/IntelFsp2Pkg/Library/BaseFspDebugLibSerialPort/BaseFspDebugLibSerialPort.inf @@ -16,7 +16,7 @@ LIBRARY_CLASS = DebugLib # -# VALID_ARCHITECTURES = IA32 +# VALID_ARCHITECTURES = IA32 X64 # [Sources] @@ -25,6 +25,9 @@ [Sources.Ia32] Ia32/FspDebug.nasm +[Sources.X64] + X64/FspDebug.nasm + [Packages] MdePkg/MdePkg.dec IntelFsp2Pkg/IntelFsp2Pkg.dec diff --git a/IntelFsp2Pkg/Library/BaseFspDebugLibSerialPort/DebugLib.c b/IntelFsp2Pkg/Library/BaseFspDebugLibSerialPort/DebugLib.c index c8824cde7f..cb2317bfb2 100644 --- a/IntelFsp2Pkg/Library/BaseFspDebugLibSerialPort/DebugLib.c +++ b/IntelFsp2Pkg/Library/BaseFspDebugLibSerialPort/DebugLib.c @@ -33,7 +33,7 @@ VA_LIST mVaListNull; @return StackFramePointer stack frame pointer of function call. **/ -UINT32 * +UINTN * EFIAPI GetStackFramePointer ( VOID @@ -193,13 +193,13 @@ DebugBPrint ( **/ VOID FillHex ( - UINT32 Value, + UINTN Value, CHAR8 *Buffer ) { INTN Idx; - for (Idx = 7; Idx >= 0; Idx--) { + for (Idx = (sizeof (UINTN) * 2) - 1; Idx >= 0; Idx--) { Buffer[Idx] = mHexTable[Value & 0x0F]; Value >>= 4; } @@ -228,26 +228,35 @@ DebugAssertInternal ( ) { CHAR8 Buffer[MAX_DEBUG_MESSAGE_LENGTH]; - UINT32 *Frame; + UINTN *Frame; - Frame = (UINT32 *)GetStackFramePointer (); + Frame = (UINTN *)GetStackFramePointer (); // // Generate the ASSERT() message in Ascii format // - AsciiStrnCpyS ( - Buffer, - sizeof (Buffer) / sizeof (CHAR8), - "-> EBP:0x00000000 EIP:0x00000000\n", - sizeof (Buffer) / sizeof (CHAR8) - 1 - ); + if (sizeof (UINTN) == sizeof (UINT32)) { + AsciiStrnCpyS ( + Buffer, + sizeof (Buffer) / sizeof (CHAR8), + "-> EBP:0x00000000 EIP:0x00000000\n", + sizeof (Buffer) / sizeof (CHAR8) - 1 + ); + } else { + AsciiStrnCpyS ( + Buffer, + sizeof (Buffer) / sizeof (CHAR8), + "-> RBP:0x0000000000000000 RIP:0x0000000000000000\n", + sizeof (Buffer) / sizeof (CHAR8) - 1 + ); + } SerialPortWrite ((UINT8 *)"ASSERT DUMP:\n", 13); while (Frame != NULL) { - FillHex ((UINT32)Frame, Buffer + 9); - FillHex (Frame[1], Buffer + 9 + 8 + 8); + FillHex ((UINTN)Frame, Buffer + 9); + FillHex (Frame[1], Buffer + 9 + (sizeof (UINTN) * 2) + 8); SerialPortWrite ((UINT8 *)Buffer, AsciiStrLen (Buffer)); - if ((Frame[0] > (UINT32)Frame) && (Frame[0] < (UINT32)Frame + 0x00100000)) { - Frame = (UINT32 *)Frame[0]; + if ((Frame[0] > (UINTN)Frame) && (Frame[0] < (UINTN)Frame + 0x00100000)) { + Frame = (UINTN *)Frame[0]; } else { Frame = NULL; } diff --git a/IntelFsp2Pkg/Library/BaseFspDebugLibSerialPort/X64/FspDebug.nasm b/IntelFsp2Pkg/Library/BaseFspDebugLibSerialPort/X64/FspDebug.nasm new file mode 100644 index 0000000000..6cf0f0af8b --- /dev/null +++ b/IntelFsp2Pkg/Library/BaseFspDebugLibSerialPort/X64/FspDebug.nasm @@ -0,0 +1,25 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2022, Intel Corporation. All rights reserved.
+; SPDX-License-Identifier: BSD-2-Clause-Patent +; +; Abstract: +; +; FSP Debug functions +; +;------------------------------------------------------------------------------ + + SECTION .text + +;------------------------------------------------------------------------------ +; UINT32 * +; EFIAPI +; GetStackFramePointer ( +; VOID +; ); +;------------------------------------------------------------------------------ +global ASM_PFX(GetStackFramePointer) +ASM_PFX(GetStackFramePointer): + mov rax, rbp + ret + -- 2.39.2