Xref: news2.mv.net comp.os.msdos.djgpp:3108 From: Robert Hoehne Newsgroups: comp.os.msdos.djgpp Subject: 'General Protection Fault' when profiling Date: Thu, 25 Apr 1996 15:19:02 +0200 Organization: TU Chemnitz-Zwickau Lines: 64 Message-ID: <317F7BC6.1007@Mathematik.tu-chemnitz.de> NNTP-Posting-Host: sisyphus.hrz.tu-chemnitz.de Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Because I wanted to profile RHIDE, I linked it with gcrt0.o (I added the -pg switch to gcc). But I think there is a problem with the timer interrupt handler, when memory is swapped out. When I run the program (linked with -pg) the follwing error was produced: General Protection Fault at eip=d95; flags=16 eax=00000030 ebx=00000000 ecx=0000000c edx=00000000 esi=00019904 edi=000a40f8 ebp=00000000 esp=00003954 cs=18 ds=38 es=ef fs=0 gs=0 ss=20 error=0000 Invalid TSS at eip=4068; flags=16 eax=00000030 ebx=00000000 ecx=0000000c edx=00000000 esi=00019904 edi=000a40f8 ebp=00000000 esp=000024d8 cs=2b ds=38 es=ef fs=0 gs=0 ss=33 error=00ec I checked it also with a little hack. At the beginning of the program a added the following, to force swapping out of memory: char *tmp = (char *)calloc(20*1024,1024); if (tmp == NULL) exit(-1); /* only to supress a warning */ And when I run RHIDE now, the following error was produced: General Protection Fault at eip=d95; flags=16 eax=00000030 ebx=00000000 ecx=0000000c edx=00000000 esi=000198f4 edi=000a40f8 ebp=00000000 esp=00003954 cs=18 ds=38 es=ef fs=0 gs=0 ss=20 error=0000 Invalid TSS in RMCB at eip=4b418; flags=3002 eax=00000001 ebx=00002398 ecx=00000000 edx=000090ac esi=00001a9e edi=00003464 ebp=00051e20 esp=000033b0 cs=e7 ds=3b es=33 fs=33 gs=bf ss=33 error=00e4 General Protection Fault in RMCB at eip=4095; flags=3002 eax=00000001 ebx=00002398 ecx=00000000 edx=000090ac esi=00001a9e edi=00003464 ebp=00051e20 esp=000033b0 cs=2b ds=3b es=33 fs=33 gs=bf ss=33 error=00e4 Now my question. Did I something wrong or is there a problem in the profiling functions? If there is something wrong in my code, how can I localize the problem? I'm working on 486 DX2/66 with 20Mb RAM and running DOS 6.0 and a 4 MB ramdisk and 4MB disk cache. go32-v2 without arguments prints: go32/v2 version 2.0 built Jan 23 1996 22:03:02 Usage: go32 coff-image [args] Rename this to go32.exe only if you need a go32 that can run v2 binaries as well as v1 binaries (old makefiles). Put ahead of the old go32 in your PATH. DPMI memory available: 11904 Kb DPMI swap space available: 31832 Kb Robert -- ***************************************************************** * Robert Hoehne, Fakultaet fuer Mathematik, TU-Chemnitz-Zwickau * * Post: Am Berg 3, D-09573 Dittmannsdorf * * e-Mail: Robert DOT Hoehne AT Mathematik DOT TU-Chemnitz DOT DE * * WWW: http://www.tu-chemnitz.de/~rho * *****************************************************************