1. DebugAgentLib will install reserved vector table to persist vectors.
2. Update PeCoffExtraActionLib to detect if debug agent initialized or not by checking each IDT entry instead of whole IDT table. Signed-off-by: Jeff Fan <jeff.fan@intel.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14886 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -80,18 +80,21 @@ PeCoffLoaderExtraActionCommon (
|
||||
IdtEntryHooked = FALSE;
|
||||
LoadImageMethod = PcdGet8 (PcdDebugLoadImageMethod);
|
||||
AsmReadIdtr (&IdtDescriptor);
|
||||
if (!CheckDebugAgentHandler (&IdtDescriptor)) {
|
||||
if (LoadImageMethod == DEBUG_LOAD_IMAGE_METHOD_SOFT_INT3) {
|
||||
if (LoadImageMethod == DEBUG_LOAD_IMAGE_METHOD_SOFT_INT3) {
|
||||
if (!CheckDebugAgentHandler (&IdtDescriptor, SOFT_INT_VECTOR_NUM)) {
|
||||
//
|
||||
// Do not trigger INT3 if Debug Agent did not setup IDT entries.
|
||||
//
|
||||
return;
|
||||
}
|
||||
//
|
||||
// Save and update IDT entry for INT1
|
||||
//
|
||||
SaveAndUpdateIdtEntry1 (&IdtDescriptor, &OriginalIdtEntry);
|
||||
IdtEntryHooked = TRUE;
|
||||
} else {
|
||||
if (!CheckDebugAgentHandler (&IdtDescriptor, IO_HW_BREAKPOINT_VECTOR_NUM)) {
|
||||
//
|
||||
// Save and update IDT entry for INT1
|
||||
//
|
||||
SaveAndUpdateIdtEntry1 (&IdtDescriptor, &OriginalIdtEntry);
|
||||
IdtEntryHooked = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
Reference in New Issue
Block a user