www.delorie.com/djgpp/doc/libc/libc_667.html   search  
libc.a reference

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]



#include <debug/dbgcom.h>

void run_child (void);


This function starts or resumes the debugged program, via a longjmp to the debuggee's code. When the debuggee hits a breakpoint, or exits normally, the exception handler that is called to service the breakpoint exception will longjmp back to run_child, and it will then return to the caller.

After run_child returns, the debugger usually examines the a_tss variable to find out the reason the debuggee stopped. The a_tss variable is defined by the header `debug/tss.h' as follows:

typedef struct TSS {
	unsigned short tss_back_link;
	unsigned short res0;
	unsigned long  tss_esp0;
	unsigned short tss_ss0;
	unsigned short res1;
	unsigned long  tss_esp1;
	unsigned short tss_ss1;
	unsigned short res2;
	unsigned long  tss_esp2;
	unsigned short tss_ss2;
	unsigned short res3;
	unsigned long  tss_cr3;

	unsigned long  tss_eip;
	unsigned long  tss_eflags;
	unsigned long  tss_eax;
	unsigned long  tss_ecx;
	unsigned long  tss_edx;
	unsigned long  tss_ebx;
	unsigned long  tss_esp;
	unsigned long  tss_ebp;
	unsigned long  tss_esi;
	unsigned long  tss_edi;
	unsigned short tss_es;
	unsigned short res4;
	unsigned short tss_cs;
	unsigned short res5;
	unsigned short tss_ss;
	unsigned short res6;
	unsigned short tss_ds;
	unsigned short res7;
	unsigned short tss_fs;
	unsigned short res8;
	unsigned short tss_gs;
	unsigned short res9;
	unsigned short tss_ldt;
	unsigned short res10;
	unsigned short tss_trap;
	unsigned char  tss_iomap;
	unsigned char  tss_irqn;
	unsigned long  tss_error;
} TSS;

extern TSS a_tss;

See the example below for a typical tests after run_child returns.

Note that, generally, you'd need to save the standard handles before calling run_child and restore them after it returns. Otherwise, if the debuggee redirects one of its standard handles, the corresponding debugger's standard handle is redirected as well. See section redir_to_child, and see redir_to_debugger.




 save_npx ();
 run_child ();
 load_npx ();

 if (a_tss.tss_irqn == 0x21)
     status = DEBUGGEE_EXITED;
     exit_code = a_tss.tss_eax & 0xff;
     if (a_tss.tss_irqn == 0x75)
       signal_number = SIGINT;
     else if (a_tss.tss_irqn == 1 || a_tss.tss_irqn == 3)
       signal_number = SIGTRAP;  /* a breakpoint */

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

  webmaster   donations   bookstore     delorie software   privacy  
  Copyright 2004   by DJ Delorie     Updated Apr 2004