Sender: root AT delorie DOT com Message-ID: <386A109F.34C6272F@inti.gov.ar> Date: Wed, 29 Dec 1999 10:46:08 -0300 From: salvador Organization: INTI X-Mailer: Mozilla 4.6 [en] (X11; I; Linux 2.0.38 i686) X-Accept-Language: es-AR, en, es MIME-Version: 1.0 To: Eli Zaretskii CC: djgpp AT delorie DOT com Subject: Re: GDB, DOS 6.22, CWSDPMI and Interrupts References: Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Reply-To: djgpp AT delorie DOT com Eli Zaretskii wrote: > On Wed, 29 Dec 1999, salvador wrote: > > > > I have successfully run under GDB 4.18 programs that use setitimer, so > > > interrupts are not disabled in general under a debugger. > > > > Did your program call any real mode stuff between interrupts? > > Nothing except printf, I think. It was a simple test program. > > I'm not sure I understand how does real-mode code enter the equation > here. Are you telling that even a single mode switch is enough to > re-enable interrupts for the rest of the program? Nope, interrupts remains disabled. > Or are you telling > that the interrupts are deferred until the CPU switches to RM? Most probably that's the effect. > If the latter, then the timer tick will stop updating the system clock as > long as the program doesn't cause a mode switch, right? If you write a > test program that stays in PM for prolonged period of time, you should > see a huge time error in the system clock when the program exits. Is that > what happens under the debugger? The following program: #include #include #include int main(int argc, char *argv[]) { int rv; time_t tiempo; __asm__ __volatile__("pushf; popl %0" : "=g" (rv)); rv = (rv>>9) & 1; printf("%d\n",rv); //enable(); unsigned long cont; tiempo=time(0); for (cont=0;cont<0xfffffffe;cont++); tiempo=time(0)-tiempo; printf("Tiempo: %d\n",tiempo); return 0; } Gives 24 outside the debugger and 0 inside the debugger. Note: If I uncomment the enable() line the program works, but the real program doesn't (interrupts gets disabled automagically). > > > Also, SIGINT > > > uses the keyboard interrupt, so if your program gets SIGINT when run > > > under a debugger, interrupts are not disabled. > > > > No, I'm not getting SIGINT. > > So what *does* happen when you press Ctrl-C while the program runs under > a debugger? Just nothing, the machine seems to hang and I must reset the computer. In fact my first impression was that the progra,really hanged, until I put code to show activity. I tried it under DOS 7 and I get the same results. SET -- Salvador Eduardo Tropea (SET). (Electronics Engineer) Visit my home page: http://welcome.to/SetSoft or http://www.geocities.com/SiliconValley/Vista/6552/ Alternative e-mail: set-soft AT usa DOT net set AT computer DOT org set AT ieee DOT org set-soft AT bigfoot DOT com Address: Curapaligue 2124, Caseros, 3 de Febrero Buenos Aires, (1678), ARGENTINA Phone: +(5411) 4759 0013