mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-25 13:09:48 +00:00
* i386-nlmstub.c (handle_exception): Point the PC at _exit() to
kill the program being debugged. KillMe(), the undocumented call intended for this purpose, causes the server to hang.
This commit is contained in:
parent
284f4ee95b
commit
d375ce178d
@ -1,3 +1,9 @@
|
||||
Fri Aug 5 09:08:34 1994 J.T. Conklin (jtc@phishhead.cygnus.com)
|
||||
|
||||
* i386-nlmstub.c (handle_exception): Point the PC at _exit() to
|
||||
kill the program being debugged. KillMe(), the undocumented
|
||||
call intended for this purpose, causes the server to hang.
|
||||
|
||||
Thu Aug 4 16:26:06 1994 Steve Chamberlain (sac@jonny.cygnus.com)
|
||||
|
||||
* remote.c (read_frame): Calculate run length encoded checksum correctly.
|
||||
|
@ -627,6 +627,7 @@ handle_exception (frame)
|
||||
{
|
||||
int addr, length;
|
||||
char *ptr;
|
||||
static int killed = 0;
|
||||
static struct DBG_LoadDefinitionStructure *ldinfo = 0;
|
||||
static unsigned char first_insn[BREAKPOINT_SIZE]; /* The first instruction in the program. */
|
||||
|
||||
@ -660,6 +661,17 @@ handle_exception (frame)
|
||||
flush_i_cache ();
|
||||
return RETURN_TO_PROGRAM;
|
||||
|
||||
case TERMINATE_NLM_EVENT:
|
||||
if (!killed)
|
||||
{
|
||||
/* NetWare processes don't have an exit status so we
|
||||
generate our own */
|
||||
sprintf (remcomOutBuffer, "W%02x", 0);
|
||||
putpacket(remcomOutBuffer);
|
||||
}
|
||||
ResumeThread (mainthread);
|
||||
return RETURN_TO_PROGRAM;
|
||||
|
||||
case ENTER_DEBUGGER_EVENT:
|
||||
case KEYBOARD_BREAK_EVENT:
|
||||
/* Pass some events on to the next debugger, in case it will handle
|
||||
@ -717,11 +729,6 @@ handle_exception (frame)
|
||||
/* Random mem fault, report it */
|
||||
do_status (remcomOutBuffer, frame);
|
||||
break;
|
||||
|
||||
case TERMINATE_NLM_EVENT:
|
||||
/* There is no way to get the exit status. */
|
||||
sprintf (remcomOutBuffer, "W%02x", 0);
|
||||
break; /* We generate our own status */
|
||||
}
|
||||
|
||||
/* FIXME: How do we know that this exception has anything to do with
|
||||
@ -734,12 +741,6 @@ handle_exception (frame)
|
||||
if (! putpacket(remcomOutBuffer))
|
||||
return RETURN_TO_NEXT_DEBUGGER;
|
||||
|
||||
if (frame->ExceptionNumber == TERMINATE_NLM_EVENT)
|
||||
{
|
||||
ResumeThread (mainthread);
|
||||
return RETURN_TO_PROGRAM;
|
||||
}
|
||||
|
||||
while (1)
|
||||
{
|
||||
error = 0;
|
||||
@ -829,7 +830,7 @@ handle_exception (frame)
|
||||
if (hexToInt(&ptr,&addr))
|
||||
{
|
||||
/* registers[PC_REGNUM].lo = addr;*/
|
||||
fprintf (stderr, "Setting PC to 0x%x\n", addr);
|
||||
ConsolePrintf("Setting PC to 0x%x\n", addr);
|
||||
while (1);
|
||||
}
|
||||
|
||||
@ -840,9 +841,17 @@ handle_exception (frame)
|
||||
return RETURN_TO_PROGRAM;
|
||||
|
||||
case 'k':
|
||||
/* kill the program */
|
||||
KillMe (ldinfo);
|
||||
ResumeThread (mainthread);
|
||||
/* The undocumented netware call KillMe() is supposed to
|
||||
schedule the NLM to be killed when it next blocks. What
|
||||
really happens is that the server hangs as it tries to
|
||||
unload the NLM.
|
||||
|
||||
So, since netware won't cooperate, we just point the PC
|
||||
at the start of _exit() and continue, while noting that
|
||||
we've killed the process. */
|
||||
|
||||
killed = 1;
|
||||
frame->ExceptionPC = &_exit;
|
||||
return RETURN_TO_PROGRAM;
|
||||
|
||||
case 'q': /* Query message */
|
||||
|
Loading…
Reference in New Issue
Block a user