]> git.proxmox.com Git - mirror_edk2.git/blobdiff - SourceLevelDebugPkg/Library/PeCoffExtraActionLibDebug/X64/IntHandlerFuncs.c
1. DebugAgentLib will install reserved vector table to persist vectors.
[mirror_edk2.git] / SourceLevelDebugPkg / Library / PeCoffExtraActionLibDebug / X64 / IntHandlerFuncs.c
index c9041de765c7e9f621c559bba2683b563957df36..5431187d0674c6eda59f8e17b67e13bd9c8cef34 100644 (file)
@@ -18,6 +18,7 @@
   Read IDT entry to check if IDT entries are setup by Debug Agent.\r
 \r
   @param[in]  IdtDescriptor      Pointer to IDT Descriptor.\r
+  @param[in]  InterruptType      Interrupt type.\r
 \r
   @retval  TRUE     IDT entries were setup by Debug Agent.\r
   @retval  FALSE    IDT entries were not setuo by Debug Agent.\r
@@ -25,7 +26,8 @@
 **/\r
 BOOLEAN \r
 CheckDebugAgentHandler (\r
-  IN  IA32_DESCRIPTOR            *IdtDescriptor\r
+  IN  IA32_DESCRIPTOR            *IdtDescriptor,\r
+  IN  UINTN                      InterruptType\r
   )\r
 {\r
   IA32_IDT_GATE_DESCRIPTOR   *IdtEntry;\r
@@ -36,9 +38,10 @@ CheckDebugAgentHandler (
     return FALSE;\r
   }\r
 \r
-  InterruptHandler = IdtEntry[0].Bits.OffsetLow + (((UINTN)IdtEntry[0].Bits.OffsetHigh) << 16) + \r
-                     (((UINTN)IdtEntry[0].Bits.OffsetUpper) << 32);\r
-  if (InterruptHandler >= 4 &&  *(UINT32 *)(InterruptHandler - 4) == AGENT_HANDLER_SIGNATURE) {\r
+  InterruptHandler = IdtEntry[InterruptType].Bits.OffsetLow +\r
+                    (((UINTN)IdtEntry[InterruptType].Bits.OffsetHigh) << 16) + \r
+                    (((UINTN)IdtEntry[InterruptType].Bits.OffsetUpper) << 32);\r
+  if (InterruptHandler >= sizeof (UINT32) &&  *(UINT32 *)(InterruptHandler - sizeof (UINT32)) == AGENT_HANDLER_SIGNATURE) {\r
     return TRUE;\r
   } else {\r
     return FALSE;\r