Debug output cleanup.

svn path=/trunk/; revision=2579
This commit is contained in:
Eugene Ingerman 2002-01-30 20:42:04 +00:00
parent 23b672891b
commit 8d8acf54de
7 changed files with 75 additions and 70 deletions

View file

@ -245,23 +245,23 @@ BOOLEAN InstallSWBreakpoint(ULONG ulAddress,BOOLEAN bPermanent,void (*SWBreakpoi
// TODO: must also check if it's a writable page // TODO: must also check if it's a writable page
if(IsAddressValid(ulAddress) ) if(IsAddressValid(ulAddress) )
{ {
DPRINT((2,"InstallSWBreakpoint(): %.8X is valid, writable? %d\n",ulAddress,IsAddressWriteable(ulAddress))); DPRINT((0,"InstallSWBreakpoint(): %.8X is valid, writable? %d\n",ulAddress,IsAddressWriteable(ulAddress)));
DPRINT((2,"pde: %x, pte: %x\n", *(ADDR_TO_PDE(ulAddress)), *(ADDR_TO_PTE(ulAddress)))); DPRINT((0,"pde: %x, pte: %x\n", *(ADDR_TO_PDE(ulAddress)), *(ADDR_TO_PTE(ulAddress))));
if((p = FindSwBp(ulAddress))==NULL) if((p = FindSwBp(ulAddress))==NULL)
{ {
DPRINT((2,"InstallSWBreakpoint(): %.8X is free\n",ulAddress)); DPRINT((0,"InstallSWBreakpoint(): %.8X is free\n",ulAddress));
if( (p=FindEmptySwBpSlot()) ) if( (p=FindEmptySwBpSlot()) )
{ {
BOOLEAN isWriteable; BOOLEAN isWriteable;
DPRINT((2,"InstallSWBreakpoint(): found empty slot\n")); DPRINT((0,"InstallSWBreakpoint(): found empty slot\n"));
DPRINT((2,"InstallSWBreakpoint(): %x value: %x", ulAddress, *(PUCHAR)ulAddress)); DPRINT((0,"InstallSWBreakpoint(): %x value: %x", ulAddress, *(PUCHAR)ulAddress));
p->ucOriginalOpcode = *(PUCHAR)ulAddress; p->ucOriginalOpcode = *(PUCHAR)ulAddress;
//allow writing to page //allow writing to page
if( !( isWriteable = IsAddressWriteable(ulAddress) ) ) if( !( isWriteable = IsAddressWriteable(ulAddress) ) )
SetAddressWriteable(ulAddress,TRUE); SetAddressWriteable(ulAddress,TRUE);
DPRINT((2,"writing breakpoint\n")); DPRINT((0,"writing breakpoint\n"));
*(PUCHAR)ulAddress = 0xCC; *(PUCHAR)ulAddress = 0xCC;
DPRINT((2,"restoring page access\n")); DPRINT((0,"restoring page access\n"));
if( !isWriteable ) if( !isWriteable )
SetAddressWriteable(ulAddress,FALSE); SetAddressWriteable(ulAddress,FALSE);
p->bUsed = TRUE; p->bUsed = TRUE;

View file

@ -74,8 +74,8 @@ VOID Pice_dprintf(ULONG DebugLevel, PCHAR DebugMessage, ...)
cli(); cli();
PICE_vsprintf(tempDebug, DebugMessage, ap); PICE_vsprintf(tempDebug, DebugMessage, ap);
//ei DebugSendString(tempDebug); //ei DebugSendString(tempDebug);
//Print(OUTPUT_WINDOW, tempDebug); Print(OUTPUT_WINDOW, tempDebug);
DbgPrint("%s", tempDebug); //DbgPrint("%s", tempDebug);
restore_flags(ulDebugFlags); restore_flags(ulDebugFlags);
} }
va_end(ap); va_end(ap);

View file

@ -52,7 +52,7 @@ char tempGP[1024];
//************************************************************************* //*************************************************************************
void HandleGPFault(FRAME* ptr) void HandleGPFault(FRAME* ptr)
{ {
DPRINT((2,"HandleGPFault(): ptr = %x at eip: %x\n",ptr, ptr->eip)); DPRINT((0,"HandleGPFault(): ptr = %x at eip: %x\n",ptr, ptr->eip));
} }
//************************************************************************* //*************************************************************************

View file

@ -152,25 +152,25 @@ void PrintkCallback(void)
ULONG countArgs,i,len; ULONG countArgs,i,len;
PANSI_STRING temp; PANSI_STRING temp;
DPRINT((2,"In PrintkCallback:1\n")); DPRINT((0,"In PrintkCallback:1\n"));
bInPrintk = TRUE; bInPrintk = TRUE;
DPRINT((2,"In PrintkCallback:2\n")); DPRINT((0,"In PrintkCallback:2\n"));
// get the linear address of stack where string resides // get the linear address of stack where string resides
ulAddress = GetLinearAddress(CurrentSS,CurrentESP); ulAddress = GetLinearAddress(CurrentSS,CurrentESP);
if(ulAddress) if(ulAddress)
{ {
DPRINT((2,"In PrintkCallback: ulAddress: %x\n", ulAddress)); DPRINT((0,"In PrintkCallback: ulAddress: %x\n", ulAddress));
if(IsAddressValid(ulAddress+sizeof(char *)) ) if(IsAddressValid(ulAddress+sizeof(char *)) )
{ {
//KdpPrintString has PANSI_STRING as a parameter //KdpPrintString has PANSI_STRING as a parameter
temp = (PANSI_STRING)*(PULONG)(ulAddress+sizeof(char *)); temp = (PANSI_STRING)*(PULONG)(ulAddress+sizeof(char *));
DPRINT((2,"temp: %x\n", temp)); DPRINT((0,"temp: %x\n", temp));
fmt = temp->Buffer; fmt = temp->Buffer;
Print(OUTPUT_WINDOW,fmt); Print(OUTPUT_WINDOW,fmt);
DPRINT((2,"%s\n", fmt)); DPRINT((0,"%s\n", fmt));
CurrentEIP = (ULONG)PICE_KdpPrintString; CurrentEIP = (ULONG)PICE_KdpPrintString;
} }
} }
@ -247,8 +247,7 @@ void InstallPrintkHook(void)
{ {
ENTER_FUNC(); ENTER_FUNC();
//ei disabled for now
return;
if( bIsPrintkPatched ) if( bIsPrintkPatched )
return; return;
@ -272,7 +271,8 @@ void InstallPrintkHook(void)
void DeInstallPrintkHook(void) void DeInstallPrintkHook(void)
{ {
ENTER_FUNC(); ENTER_FUNC();
DPRINT((0,"enter DeInstallPrintkHook()\n"));
DPRINT((0,"enter DeInstallPrintkHook()\n"));
if(bIsPrintkPatched && ulPrintk) if(bIsPrintkPatched && ulPrintk)
{ {
// will be done on exit debugger // will be done on exit debugger

View file

@ -460,6 +460,8 @@ COMMAND_PROTOTYPE(StepOver)
ENTER_FUNC(); ENTER_FUNC();
DPRINT((0,"StepOver():\n"));
// only no arguments supplied // only no arguments supplied
// when we have source and current disassembly mod is SOURCE // when we have source and current disassembly mod is SOURCE
// we have to analyse the code block for the source line // we have to analyse the code block for the source line
@ -505,7 +507,8 @@ proceed_as_normal:
} }
else else
{ {
// modify trace flag DPRINT((0,"no call at breakpoint\n"));
// modify trace flag
CurrentEFL|=0x100; // set trace flag (TF) CurrentEFL|=0x100; // set trace flag (TF)
bSingleStep=TRUE; bSingleStep=TRUE;
@ -2481,7 +2484,7 @@ COMMAND_PROTOTYPE(SwitchTables)
pCurrentSymbols = (PICE_SYMBOLFILE_HEADER*)pArgs->Value[0]; pCurrentSymbols = (PICE_SYMBOLFILE_HEADER*)pArgs->Value[0];
CopyWideToAnsi( temp, pCurrentSymbols->name ); CopyWideToAnsi( temp, pCurrentSymbols->name );
DPRINT((2,"TableSwitchSym: pCurrentSymbols: %x, Name: %s\n", pCurrentSymbols, temp)); DPRINT((0,"TableSwitchSym: pCurrentSymbols: %x, Name: %s\n", pCurrentSymbols, temp));
pTempMod = IsModuleLoaded(temp); pTempMod = IsModuleLoaded(temp);
if( pTempMod ) if( pTempMod )

View file

@ -220,7 +220,7 @@ ULONG HandlePageFault(FRAME* ptr)
current->Type == MEMORY_AREA_PAGED_POOL || current->Type == MEMORY_AREA_PAGED_POOL ||
current->Type == MEMORY_AREA_SHARED_DATA current->Type == MEMORY_AREA_SHARED_DATA
){ ){
Print(OUTPUT_WINDOW,"pICE: VMA Pageable Section.\n"); //ei too much output Print(OUTPUT_WINDOW,"pICE: VMA Pageable Section.\n");
//ei DPRINT((2,"return 0 1\n")); //ei DPRINT((2,"return 0 1\n"));
return 0; //let the system handle this return 0; //let the system handle this
} }
@ -271,7 +271,7 @@ ULONG HandlePageFault(FRAME* ptr)
*/ */
// let the system handle it // let the system handle it
DPRINT((2,"return 0 5\n")); //DPRINT((0,"return 0 5\n"));
return 0; return 0;
} }
} }
@ -279,8 +279,8 @@ ULONG HandlePageFault(FRAME* ptr)
} }
Print(OUTPUT_WINDOW,"pICE: no virtual memory arena at this address!\n"); Print(OUTPUT_WINDOW,"pICE: no virtual memory arena at this address!\n");
DPRINT((2,"return 0 6\n")); DPRINT((0,"return 0 6\n"));
return 0; return 1;
// let the system handle it // let the system handle it
// return 0; // return 0;
@ -378,7 +378,7 @@ void InstallIntEHook(void)
OldIntEHandler=SetGlobalInt(0x0E,(ULONG)LocalIntEHandler); OldIntEHandler=SetGlobalInt(0x0E,(ULONG)LocalIntEHandler);
} }
UnmaskIrqs(); UnmaskIrqs();
DPRINT((2,"OldIntE @ %x\n", OldIntEHandler)); DPRINT((0,"OldIntE @ %x\n", OldIntEHandler));
LEAVE_FUNC(); LEAVE_FUNC();
} }

View file

@ -1017,7 +1017,7 @@ void DebuggerShell(void)
//************************************************************************* //*************************************************************************
void RealIsr(ULONG dwReasonForBreak) void RealIsr(ULONG dwReasonForBreak)
{ {
DPRINT((0,"#################################################################\n")); DPRINT((0,"reason: %u#################################################################\n", dwReasonForBreak));
ENTER_FUNC(); ENTER_FUNC();
// in handler // in handler
@ -1048,12 +1048,12 @@ void RealIsr(ULONG dwReasonForBreak)
{ {
ULONG ulAddress,ulAddressCurrent; ULONG ulAddress,ulAddressCurrent;
DPRINT((2,"REASON_SINGLESTEP\n")); DPRINT((0,"REASON_SINGLESTEP: bSingleStep: %u\n", bSingleStep));
if(!bSingleStep) if(!bSingleStep)
{ {
DPRINT((2,"no single step requested!\n"));
dwCallOldInt1Handler = 1; dwCallOldInt1Handler = 1;
DPRINT((0,"no single step requested: %u!\n", dwCallOldInt1Handler));
goto common_return_point; goto common_return_point;
} }
@ -1065,7 +1065,7 @@ void RealIsr(ULONG dwReasonForBreak)
// simply restart the system. // simply restart the system.
if(NeedToReInstallSWBreakpoints(ulAddress,TRUE) ) if(NeedToReInstallSWBreakpoints(ulAddress,TRUE) )
{ {
DPRINT((2,"reinstalling INT3 @ %.4X:%.8X\n",OldCS,OldEIP)); DPRINT((0,"reinstalling INT3 @ %.4X:%.8X\n",OldCS,OldEIP));
ReInstallSWBreakpoint(ulAddress); ReInstallSWBreakpoint(ulAddress);
@ -1084,7 +1084,7 @@ void RealIsr(ULONG dwReasonForBreak)
} }
LEAVE_FUNC(); LEAVE_FUNC();
DPRINT((2,"-----------------------------------------------------------------\n")); DPRINT((0,"singlestep-----------------------------------------------------------------\n"));
return; return;
} }
bPreviousCommandWasGo = FALSE; bPreviousCommandWasGo = FALSE;
@ -1099,7 +1099,7 @@ void RealIsr(ULONG dwReasonForBreak)
ULONG ulLineNumber; ULONG ulLineNumber;
LPSTR pSrc,pFileName; LPSTR pSrc,pFileName;
DPRINT((2,"RealIsr(): stepping through source!\n")); DPRINT((0,"RealIsr(): stepping through source!\n"));
// look up the corresponding source line // look up the corresponding source line
// if there isn't any or the source line number has changed // if there isn't any or the source line number has changed
@ -1108,12 +1108,12 @@ void RealIsr(ULONG dwReasonForBreak)
pSrc = FindSourceLineForAddress(ulAddressCurrent,&ulLineNumber,NULL,NULL,&pFileName); pSrc = FindSourceLineForAddress(ulAddressCurrent,&ulLineNumber,NULL,NULL,&pFileName);
else pSrc = NULL; else pSrc = NULL;
DPRINT((2,"RealIsr(): line #%u pSrc=%x (old line #%u)\n",ulLineNumber,(ULONG)pSrc,g_ulLineNumberStart)); DPRINT((0,"RealIsr(): line #%u pSrc=%x (old line #%u)\n",ulLineNumber,(ULONG)pSrc,g_ulLineNumberStart));
// if we have found a source line there // if we have found a source line there
if(pSrc && ulLineNumber==g_ulLineNumberStart) if(pSrc && ulLineNumber==g_ulLineNumberStart)
{ {
DPRINT((2,"RealIsr(): stepping through line #%u in file = %s!\n",ulLineNumber,pFileName)); DPRINT((0,"RealIsr(): stepping through line #%u in file = %s!\n",ulLineNumber,pFileName));
if(bStepInto) if(bStepInto)
StepInto(NULL); StepInto(NULL);
@ -1122,7 +1122,7 @@ void RealIsr(ULONG dwReasonForBreak)
bInDebuggerShell = FALSE; bInDebuggerShell = FALSE;
LEAVE_FUNC(); LEAVE_FUNC();
DPRINT((2,"-----------------------------------------------------------------\n")); DPRINT((0,"singstep-----------------------------------------------------------------\n"));
return; return;
} }
bStepThroughSource = FALSE; bStepThroughSource = FALSE;
@ -1135,7 +1135,7 @@ void RealIsr(ULONG dwReasonForBreak)
{ {
ULONG ulReason; ULONG ulReason;
DPRINT((2,"REASON_HARDWARE_BP\n")); DPRINT((0,"REASON_HARDWARE_BP\n"));
// disable HW breakpoints // disable HW breakpoints
__asm__(" __asm__("
@ -1149,7 +1149,7 @@ void RealIsr(ULONG dwReasonForBreak)
:"eax" :"eax"
); );
DPRINT((2,"REASON_HARDWARE_BP: %x\n",(ulReason&0xF))); DPRINT((0,"REASON_HARDWARE_BP: %x\n",(ulReason&0xF)));
// HW breakpoint DR1 (skip: only used in init_module detection) // HW breakpoint DR1 (skip: only used in init_module detection)
if(ulReason&0x2) if(ulReason&0x2)
@ -1183,12 +1183,12 @@ void RealIsr(ULONG dwReasonForBreak)
else else
pSrc = NULL; pSrc = NULL;
DPRINT((2,"RealIsr(): line #%u pSrc=%x (old line #%u) [2]\n",ulLineNumber,(ULONG)pSrc,g_ulLineNumberStart)); DPRINT((0,"RealIsr(): line #%u pSrc=%x (old line #%u) [2]\n",ulLineNumber,(ULONG)pSrc,g_ulLineNumberStart));
// if we have found a source line there // if we have found a source line there
if(pSrc && ulLineNumber==g_ulLineNumberStart) if(pSrc && ulLineNumber==g_ulLineNumberStart)
{ {
DPRINT((2,"RealIsr(): stepping through line #%u in file = %s! [2]\n",ulLineNumber,pFileName)); DPRINT((0,"RealIsr(): stepping through line #%u in file = %s! [2]\n",ulLineNumber,pFileName));
if(bStepInto) if(bStepInto)
StepInto(NULL); StepInto(NULL);
@ -1197,7 +1197,7 @@ void RealIsr(ULONG dwReasonForBreak)
bInDebuggerShell = FALSE; bInDebuggerShell = FALSE;
LEAVE_FUNC(); LEAVE_FUNC();
DPRINT((0,"-----------------------------------------------------------------\n")); DPRINT((0,"rrr-----------------------------------------------------------------\n"));
return; return;
} }
bNotifyToExit = FALSE; bNotifyToExit = FALSE;
@ -1210,7 +1210,7 @@ void RealIsr(ULONG dwReasonForBreak)
{ {
ULONG ulAddress; ULONG ulAddress;
DPRINT((2,"REASON_INT3\n")); DPRINT((0,"REASON_INT3\n"));
// must subtract one cause INT3s are generated after instructions execution // must subtract one cause INT3s are generated after instructions execution
CurrentEIP--; CurrentEIP--;
@ -1218,26 +1218,26 @@ void RealIsr(ULONG dwReasonForBreak)
// make a flat address // make a flat address
ulAddress = GetLinearAddress(CurrentCS,CurrentEIP); ulAddress = GetLinearAddress(CurrentCS,CurrentEIP);
DPRINT((2,"INT3 @ %.8X\n",ulAddress)); DPRINT((0,"INT3 @ %.8X\n",ulAddress));
// if there's a breakpoint installed at current EIP remove it // if there's a breakpoint installed at current EIP remove it
if(DeInstallSWBreakpoint(ulAddress) ) if(DeInstallSWBreakpoint(ulAddress) )
{ {
PSW_BP p; PSW_BP p;
DPRINT((2,"INT3 @ %.8X removed\n",ulAddress)); DPRINT((0,"INT3 @ %.8X removed\n",ulAddress));
// if it's permanent (must be Printk() ) skip the DebuggerShell() and // if it's permanent (must be Printk() ) skip the DebuggerShell() and
// do a callback // do a callback
if( (p = IsPermanentSWBreakpoint(ulAddress)) ) if( (p = IsPermanentSWBreakpoint(ulAddress)) )
{ {
DPRINT((2,"permanent breakpoint\n")); DPRINT((0,"permanent breakpoint\n"));
OldCS = CurrentCS; OldCS = CurrentCS;
OldEIP = CurrentEIP; OldEIP = CurrentEIP;
bSkipMainLoop = TRUE; bSkipMainLoop = TRUE;
DPRINT((2,"callback at %x\n",p->Callback)); DPRINT((0,"callback at %x\n",p->Callback));
if(p->Callback) if(p->Callback)
p->Callback(); p->Callback();
} }
@ -1261,7 +1261,7 @@ void RealIsr(ULONG dwReasonForBreak)
LPSTR pFind; LPSTR pFind;
PEPROCESS my_current = IoGetCurrentProcess(); PEPROCESS my_current = IoGetCurrentProcess();
DPRINT((2,"can't deinstall, somebody else's breakpoint\n")); DPRINT((0,"can't deinstall, somebody else's breakpoint\n"));
// if no other debugger is running on this process and the address is // if no other debugger is running on this process and the address is
@ -1324,7 +1324,7 @@ void RealIsr(ULONG dwReasonForBreak)
{ {
LPSTR pSymbolName; LPSTR pSymbolName;
DPRINT((2,"REASON_PAGEFAULT\n")); DPRINT((0,"REASON_PAGEFAULT\n"));
if( ScanExportsByAddress(&pSymbolName,GetLinearAddress(CurrentCS,CurrentEIP)) ) if( ScanExportsByAddress(&pSymbolName,GetLinearAddress(CurrentCS,CurrentEIP)) )
{ {
@ -1343,7 +1343,7 @@ void RealIsr(ULONG dwReasonForBreak)
{ {
LPSTR pSymbolName; LPSTR pSymbolName;
DPRINT((2,"REASON_GPFAULT\n")); DPRINT((0,"REASON_GPFAULT\n"));
if( ScanExportsByAddress(&pSymbolName,GetLinearAddress(CurrentCS,CurrentEIP)) ) if( ScanExportsByAddress(&pSymbolName,GetLinearAddress(CurrentCS,CurrentEIP)) )
{ {
@ -1358,19 +1358,19 @@ void RealIsr(ULONG dwReasonForBreak)
} }
else if(dwReasonForBreak == REASON_CTRLF) else if(dwReasonForBreak == REASON_CTRLF)
{ {
DPRINT((2,"REASON_CTRLF\n")); DPRINT((0,"REASON_CTRLF\n"));
// nothing to do // nothing to do
} }
else if(dwReasonForBreak == REASON_DOUBLE_FAULT) else if(dwReasonForBreak == REASON_DOUBLE_FAULT)
{ {
DPRINT((2,"REASON_DOUBLE_FAULT\n")); DPRINT((0,"REASON_DOUBLE_FAULT\n"));
PICE_sprintf(tempShell,"pICE: Breakpoint due to double fault at %.4X:%.8X\n",CurrentCS,CurrentEIP); PICE_sprintf(tempShell,"pICE: Breakpoint due to double fault at %.4X:%.8X\n",CurrentCS,CurrentEIP);
Print(OUTPUT_WINDOW,tempShell); Print(OUTPUT_WINDOW,tempShell);
} }
else if(dwReasonForBreak == REASON_INTERNAL_ERROR) else if(dwReasonForBreak == REASON_INTERNAL_ERROR)
{ {
DPRINT((2,"REASON_INTERNAL_ERROR\n")); DPRINT((0,"REASON_INTERNAL_ERROR\n"));
Print(OUTPUT_WINDOW,"pICE: Please report this error to klauspg@diamondmm.com!\n"); Print(OUTPUT_WINDOW,"pICE: Please report this error to klauspg@diamondmm.com!\n");
// Print(OUTPUT_WINDOW,"pICE: !!! SYSTEM HALTED !!!\n"); // Print(OUTPUT_WINDOW,"pICE: !!! SYSTEM HALTED !!!\n");
@ -1378,7 +1378,7 @@ void RealIsr(ULONG dwReasonForBreak)
} }
else else
{ {
DPRINT((2,"REASON_UNKNOWN\n")); DPRINT((0,"REASON_UNKNOWN\n"));
PICE_sprintf(tempShell,"pICE: Breakpoint due to unknown reason at %.4X:%.8X (code %x)\n",CurrentCS,CurrentEIP,dwReasonForBreak); PICE_sprintf(tempShell,"pICE: Breakpoint due to unknown reason at %.4X:%.8X (code %x)\n",CurrentCS,CurrentEIP,dwReasonForBreak);
Print(OUTPUT_WINDOW,tempShell); Print(OUTPUT_WINDOW,tempShell);
@ -1388,21 +1388,21 @@ void RealIsr(ULONG dwReasonForBreak)
} }
// we don't single-step yet // we don't single-step yet
DPRINT((2,"RealIsr(): not stepping yet\n")); DPRINT((0,"RealIsr(): not stepping yet\n"));
bSingleStep=FALSE; bSingleStep=FALSE;
// process commands // process commands
if(bSkipMainLoop == FALSE) if(bSkipMainLoop == FALSE)
{ {
DPRINT((2,"RealIsr(): saving registers\n")); DPRINT((0,"RealIsr(): saving registers\n"));
// save the extended regs // save the extended regs
__asm__ __volatile__ __asm__ __volatile__
(" ("
pushl %eax pushl %eax
movw %es,%ax movw %es,%ax
movw %ax,_CurrentES movw %ax,_CurrentES
movw %fs,%ax //movw %fs,%ax
movw %ax,_CurrentFS //movw %ax,_CurrentFS
movw %gs,%ax movw %gs,%ax
movw %ax,_CurrentGS movw %ax,_CurrentGS
movl %dr0,%eax movl %dr0,%eax
@ -1426,17 +1426,18 @@ void RealIsr(ULONG dwReasonForBreak)
popl %eax" popl %eax"
); );
DPRINT((2,"RealIsr(): adding colon to output()\n")); CurrentFS = OLD_PCR;
DPRINT((0,"RealIsr(): adding colon to output()\n"));
Print(OUTPUT_WINDOW,":"); Print(OUTPUT_WINDOW,":");
DPRINT((2,"RealIsr(): calling DebuggerShell()\n")); DPRINT((0,"RealIsr(): calling DebuggerShell()\n"));
DebuggerShell(); DebuggerShell();
} }
// if there was a SW breakpoint at CS:EIP // if there was a SW breakpoint at CS:EIP
if(NeedToReInstallSWBreakpoints(GetLinearAddress(CurrentCS,CurrentEIP),TRUE)) if(NeedToReInstallSWBreakpoints(GetLinearAddress(CurrentCS,CurrentEIP),TRUE))
{ {
DPRINT((2,"need to reinstall INT3\n")); DPRINT((0,"need to reinstall INT3\n"));
// remember how we restarted last time // remember how we restarted last time
bPreviousCommandWasGo = !bSingleStep; bPreviousCommandWasGo = !bSingleStep;
// do a single step to reinstall breakpoint // do a single step to reinstall breakpoint
@ -1457,9 +1458,10 @@ common_return_point:
bInDebuggerShell = FALSE; bInDebuggerShell = FALSE;
LEAVE_FUNC(); LEAVE_FUNC();
DPRINT((2,"common return-----------------------------------------------------------------\n")); DPRINT((0,"common return-----------------------------------------------------------------\n"));
} }
__asm__(".global NewInt31Handler __asm__(".global NewInt31Handler
NewInt31Handler: NewInt31Handler:
cli cli
@ -1495,7 +1497,7 @@ notV86:
cmpw $" STR(GLOBAL_CODE_SEGMENT) ",%ax cmpw $" STR(GLOBAL_CODE_SEGMENT) ",%ax
je notswitched je notswitched
// switched stack // switched stack
movl 6*4(%esp),%eax movl 6*4(%esp),%eax
mov %eax,_CurrentESP mov %eax,_CurrentESP
mov 7*4(%esp),%eax mov 7*4(%esp),%eax
@ -1584,12 +1586,12 @@ afterswitch:
// do we need to call old INT1 handler // do we need to call old INT1 handler
.byte 0x2e .byte 0x2e
cmp $0,_dwCallOldInt1Handler cmp $0,_dwCallOldInt1Handler
je do_iret2 je do_iret2
// call INT3 handler // call INT3 handler
.byte 0x2e .byte 0x2e
jmp *_OldInt1Handler jmp *_OldInt1Handler
do_iret2: do_iret2:
// do we need to call old INT3 handler // do we need to call old INT3 handler