On 2015-04-21 01:29:19, Jeff Fan wrote: > Clear EFLAGS.IF before executing Stepping command and save original value in > DEBUG_AGENT_FLAG. It could avoid pending interrupt issued during executing > Stepping command. > Restore EFLAGS.IF after Stepping command execution finished.
These commit message lines are too long: https://github.com/tianocore/tianocore.github.io/wiki/Commit-Message-Format > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Jeff Fan <jeff....@intel.com> > --- > .../DebugAgent/DebugAgentCommon/DebugAgent.c | 53 > ++++++++++++++++++---- > 1 file changed, 44 insertions(+), 9 deletions(-) > > diff --git > a/SourceLevelDebugPkg/Library/DebugAgent/DebugAgentCommon/DebugAgent.c > b/SourceLevelDebugPkg/Library/DebugAgent/DebugAgentCommon/DebugAgent.c > index f51ad4b..72309f3 100644 > --- a/SourceLevelDebugPkg/Library/DebugAgent/DebugAgentCommon/DebugAgent.c > +++ b/SourceLevelDebugPkg/Library/DebugAgent/DebugAgentCommon/DebugAgent.c > @@ -785,7 +785,7 @@ CommandGo ( > } > > /** > - Exectue Stepping command. > + Execute Stepping command. > > @param[in] CpuContext Pointer to saved CPU context. > > @@ -800,6 +800,39 @@ CommandStepping ( > Eflags = (IA32_EFLAGS32 *) &CpuContext->Eflags; > Eflags->Bits.TF = 1; > Eflags->Bits.RF = 1; > + // > + // Save and clear EFLAGS.IF to avoid interrupt happen when executing > Stepping > + // > + SetDebugFlag (DEBUG_AGENT_FLAG_INTERRUPT_FLAG, Eflags->Bits.IF); > + Eflags->Bits.IF = 0; > + // > + // Set Stepping Flag > + // > + SetDebugFlag (DEBUG_AGENT_FLAG_STEPPING, 1); > +} > + > +/** > + Do some cleanup after Stepping command done. > + > + @param[in] CpuContext Pointer to saved CPU context. > + > +**/ > +VOID > +CommandSteppingCleanup ( > + IN DEBUG_CPU_CONTEXT *CpuContext > + ) > +{ > + IA32_EFLAGS32 *Eflags; > + > + Eflags = (IA32_EFLAGS32 *) &CpuContext->Eflags; > + // > + // Restore EFLAGS.IF > + // > + Eflags->Bits.IF = GetDebugFlag (DEBUG_AGENT_FLAG_INTERRUPT_FLAG); > + // > + // Clear Stepping flag > + // > + SetDebugFlag (DEBUG_AGENT_FLAG_STEPPING, 0); > } > > /** > @@ -2066,10 +2099,6 @@ CommandCommunication ( > } > > mDebugMpContext.BreakAtCpuIndex = (UINT32) (-1); > - // > - // Set Stepping Flag > - // > - SetDebugFlag (DEBUG_AGENT_FLAG_STEPPING, 1); > ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock); > // > // Executing stepping command directly without sending ACK packet, > @@ -2405,11 +2434,11 @@ InterruptProcess ( > if (MultiProcessorDebugSupport()) { > mDebugMpContext.BreakAtCpuIndex = ProcessorIndex; > } > - SendAckPacket (DEBUG_COMMAND_OK); > // > - // Clear Stepping Flag > + // Clear Stepping Flag and restore EFLAGS.IF > // > - SetDebugFlag (DEBUG_AGENT_FLAG_STEPPING, 0); > + CommandSteppingCleanup (CpuContext); > + SendAckPacket (DEBUG_COMMAND_OK); > CommandCommunication (Vector, CpuContext, BreakReceived); > break; > > @@ -2577,11 +2606,17 @@ InterruptProcess ( > if (Vector <= DEBUG_EXCEPT_SIMD) { > if (BreakCause == DEBUG_DATA_BREAK_CAUSE_STEPPING) { > // > - // Stepping is finished, send Ack package. > + // If exception happened when executing Stepping, > + // Clear Stepping Flag and send Ack package. HOST consider > + // Stepping command was finished. I'm not sure if this comment needs a change. Is the comment before good enough? It is just before the code that re-enables the IF. -Jordan > // > if (MultiProcessorDebugSupport()) { > mDebugMpContext.BreakAtCpuIndex = ProcessorIndex; > } > + // > + // Clear Stepping flag and restore EFLAGS.IF > + // > + CommandSteppingCleanup (CpuContext); > SendAckPacket (DEBUG_COMMAND_OK); > } else { > // > -- > 1.9.5.msysgit.0 > > > > ------------------------------------------------------------------------------ > BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT > Develop your own process in accordance with the BPMN 2 standard > Learn Process modeling best practices with Bonita BPM through live exercises > http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_ > source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/edk2-devel ------------------------------------------------------------------------------ BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT Develop your own process in accordance with the BPMN 2 standard Learn Process modeling best practices with Bonita BPM through live exercises http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_ source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel