Revision: 17877
http://sourceforge.net/p/edk2/code/17877
Author: vanjeff
Date: 2015-07-08 05:45:10 +0000 (Wed, 08 Jul 2015)
Log Message:
-----------
UefiCpuPkg/Library/CpuExceptionHandlerLib: Add exception type decoder
Add exception type decoder to print exception name string beside print
exception type value. The exception names are from IA32 SDM.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jeff Fan <[email protected]>
Reviewed-by: Feng Tian <[email protected]>
Modified Paths:
--------------
trunk/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.c
trunk/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.h
trunk/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib/Ia32/ArchExceptionHandler.c
trunk/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ArchExceptionHandler.c
Modified:
trunk/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.c
===================================================================
--- trunk/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.c
2015-07-08 05:43:22 UTC (rev 17876)
+++ trunk/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.c
2015-07-08 05:45:10 UTC (rev 17877)
@@ -1,7 +1,7 @@
/** @file
CPU Exception Handler Library common functions.
- Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2012 - 2015, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD
License
which accompanies this distribution. The full text of the license may be
found at
@@ -24,15 +24,61 @@
RESERVED_VECTORS_DATA *mReservedVectors = NULL;
//
-// Define the maximum message length
+// Define the maximum message length
//
#define MAX_DEBUG_MESSAGE_LENGTH 0x100
+CONST CHAR8 mExceptionReservedStr[] = "Reserved";
+CONST CHAR8 *mExceptionNameStr[] = {
+ "#DE - Divide Error",
+ "#DB - Debug",
+ "NMI Interrupt",
+ "#BP - Breakpoint",
+ "#OF - Overflow",
+ "#BR - BOUND Range Exceeded",
+ "#UD - Invalid Opcode",
+ "#NM - Device Not Available",
+ "#DF - Double Fault",
+ "Coprocessor Segment Overrun",
+ "#TS - Invalid TSS",
+ "#NP - Segment Not Present",
+ "#SS - Stack Fault Fault",
+ "#GP - General Protection",
+ "#PF - Page-Fault",
+ "Reserved",
+ "#MF - x87 FPU Floating-Point Error",
+ "#AC - Alignment Check",
+ "#MC - Machine-Check",
+ "#XM - SIMD floating-point",
+ "#VE - Virtualization"
+};
+
+#define EXCEPTION_KNOWN_NAME_NUM (sizeof (mExceptionNameStr) / sizeof (CHAR8
*))
+
/**
+ Get ASCII format string exception name by exception type.
+
+ @param ExceptionType Exception type.
+
+ @return ASCII format string exception name.
+**/
+CONST CHAR8 *
+GetExceptionNameStr (
+ IN EFI_EXCEPTION_TYPE ExceptionType
+ )
+{
+ if ((UINTN) ExceptionType < EXCEPTION_KNOWN_NAME_NUM) {
+ return mExceptionNameStr[ExceptionType];
+ } else {
+ return mExceptionReservedStr;
+ }
+}
+
+/**
Prints a message to the serial port.
@param Format Format string for the message to print.
- @param ... Variable argument list whose contents are accessed
+ @param ... Variable argument list whose contents are accessed
based on the format string specified by Format.
**/
@@ -54,21 +100,21 @@
VA_END (Marker);
//
- // Send the print string to a Serial Port
+ // Send the print string to a Serial Port
//
SerialPortWrite ((UINT8 *)Buffer, AsciiStrLen (Buffer));
}
/**
Find and display image base address and return image base and its entry
point.
-
+
@param CurrentEip Current instruction pointer.
@param EntryPoint Return module entry point if module header is found.
-
+
@return !0 Image base address.
@return 0 Image header cannot be found.
**/
-UINTN
+UINTN
FindModuleImageBase (
IN UINTN CurrentEip,
OUT UINTN *EntryPoint
@@ -121,7 +167,7 @@
//
// Not found the image base, check the previous aligned address
- //
+ //
Pe32Data -= mImageAlignSize;
}
@@ -141,11 +187,11 @@
/**
Read and save reserved vector information
-
+
@param[in] VectorInfo Pointer to reserved vector list.
@param[out] ReservedVector Pointer to reserved vector data buffer.
@param[in] VectorCount Vector number to be updated.
-
+
@return EFI_SUCCESS Read and save vector info successfully.
@retval EFI_INVALID_PARAMETER VectorInfo includes the invalid content if
VectorInfo is not NULL.
Modified:
trunk/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.h
===================================================================
--- trunk/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.h
2015-07-08 05:43:22 UTC (rev 17876)
+++ trunk/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.h
2015-07-08 05:45:10 UTC (rev 17877)
@@ -1,7 +1,7 @@
/** @file
Common header file for CPU Exception Handler Library.
- Copyright (c) 2012 - 2013, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2012 - 2015, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD
License
which accompanies this distribution. The full text of the license may be
found at
@@ -237,5 +237,17 @@
IN UINTN VectorCount
);
+/**
+ Get ASCII format string exception name by exception type.
+
+ @param ExceptionType Exception type.
+
+ @return ASCII format string exception name.
+**/
+CONST CHAR8 *
+GetExceptionNameStr (
+ IN EFI_EXCEPTION_TYPE ExceptionType
+ );
+
#endif
Modified:
trunk/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib/Ia32/ArchExceptionHandler.c
===================================================================
---
trunk/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib/Ia32/ArchExceptionHandler.c
2015-07-08 05:43:22 UTC (rev 17876)
+++
trunk/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib/Ia32/ArchExceptionHandler.c
2015-07-08 05:45:10 UTC (rev 17877)
@@ -1,7 +1,7 @@
/** @file
IA32 CPU Exception Handler functons.
- Copyright (c) 2012 - 2013, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2012 - 2015, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD
License
which accompanies this distribution. The full text of the license may be
found at
@@ -114,10 +114,12 @@
UINTN EntryPoint;
InternalPrintMessage (
- "!!!! IA32 Exception Type - %08x CPU Apic ID - %08x !!!!\n",
+ "!!!! IA32 Exception Type - %02x(%a) CPU Apic ID - %08x !!!!\n",
ExceptionType,
+ GetExceptionNameStr (ExceptionType),
GetApicId ()
);
+
InternalPrintMessage (
"EIP - %08x, CS - %08x, EFLAGS - %08x\n",
SystemContext.SystemContextIa32->Eip,
Modified:
trunk/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ArchExceptionHandler.c
===================================================================
---
trunk/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ArchExceptionHandler.c
2015-07-08 05:43:22 UTC (rev 17876)
+++
trunk/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ArchExceptionHandler.c
2015-07-08 05:45:10 UTC (rev 17877)
@@ -1,7 +1,7 @@
/** @file
x64 CPU Exception Handler.
- Copyright (c) 2012 - 2013, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2012 - 2015, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD
License
which accompanies this distribution. The full text of the license may be
found at
@@ -118,10 +118,12 @@
UINTN EntryPoint;
InternalPrintMessage (
- "!!!! X64 Exception Type - %016lx CPU Apic ID - %08x !!!!\n",
+ "!!!! X64 Exception Type - %02x(%a) CPU Apic ID - %08x !!!!\n",
ExceptionType,
+ GetExceptionNameStr (ExceptionType),
GetApicId ()
);
+
InternalPrintMessage (
"RIP - %016lx, CS - %016lx, RFLAGS - %016lx\n",
SystemContext.SystemContextX64->Rip,
------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits