ray@MAXWELL.PHYSICS.PURDUE.EDU (Ray Moody) (03/26/89)
Gdb 3.1 does not work on 4.3BSD ISI machines. First of all, m-isi.h must be patched or else REGISTER_U_ADDR is not able to correctly compute the address of certain registers (namely D2-D7). (This hasn't been tested on a 4.2BSD ISI machine....) ------------------------------------------------------------------------------- RCS file: m-isi.h,v retrieving revision 1.1 retrieving revision 1.2 diff -c -r1.1 -r1.2 *** /tmp/,RCSt1006852 Fri Mar 24 21:44:53 1989 --- /tmp/,RCSt2006852 Fri Mar 24 21:44:55 1989 *************** *** 181,186 #define FP0_REGNUM 18 /* Floating point register 0 */ #define FPC_REGNUM 26 /* 68881 control register */ #ifdef BSD43_ISI40D #define BLOCKFUDGE 0x400000 #else --- 181,187 ----- #define FP0_REGNUM 18 /* Floating point register 0 */ #define FPC_REGNUM 26 /* 68881 control register */ + #include <machine/reg.h> #ifdef BSD43_ISI40D #define BLOCKFUDGE 0x400000 #else *************** *** 186,203 #else #define BLOCKFUDGE 0 #endif ! #define REGISTER_U_ADDR(addr, blockend, regno) \ ! { blockend -= BLOCKFUDGE; \ ! if (regno < 2) addr = blockend - 0x18 + regno * 4; \ ! else if (regno < 8) addr = blockend - 0x54 + regno * 4; \ ! else if (regno < 10) addr = blockend - 0x30 + regno * 4;\ ! else if (regno < 15) addr = blockend - 0x5c + regno * 4;\ ! else if (regno < 16) addr = blockend - 0x1c; \ ! else if (regno < 18) addr = blockend - 0x44 + regno * 4;\ ! else if (regno < 26) addr = (int) ((struct user *)0)->u_68881_regs \ ! + (regno - 18) * 12; \ ! else if (regno < 29) addr = (int) ((struct user *)0)->u_68881_regs \ ! + 8 * 12 + (regno - 26) * 4; \ } /* Total amount of space needed to store our copies of the machine's --- 187,210 ----- #else #define BLOCKFUDGE 0 #endif ! #define REGISTER_U_ADDR(addr, blockend, regno) \ ! { \ ! static int r[] = {D0, D1, D2, D3, D4, D5, D6, D7, \ ! A0, A1, A2, A3, A4, A5, A6, A7, \ ! PS, PC}; \ ! \ ! if (regno < 18) \ ! { \ ! addr = blockend - BLOCKFUDGE + r[regno]*4; \ ! } \ ! else if (regno < 26) \ ! { \ ! addr = (int) ((struct user *)0)->u_68881_regs + (regno-18)*12; \ ! } \ ! else \ ! { \ ! addr = (int) ((struct user *)0)->u_68881_regs + 8*12 + (regno-26)*4; \ ! } \ } /* Total amount of space needed to store our copies of the machine's ------------------------------------------------------------------------------- Next, default-dep.c should probably be changed so that it does not include <fcntl.h>. This is really a workaround for an ISI bug. It is not possible to include both <sys/file.h> and <fcntl.h> in the same source file! Warning messages to the effect "/usr/include/fcntl.h: 13: O_RDONLY redefined" result. I can't find anything in default-dep.c that actually uses <fcntl.h>. ------------------------------------------------------------------------------- RCS file: default-dep.c,v retrieving revision 1.1 retrieving revision 1.2 diff -c -r1.1 -r1.2 *** /tmp/,RCSt1007014 Fri Mar 24 21:55:09 1989 --- /tmp/,RCSt2007014 Fri Mar 24 21:55:10 1989 *************** *** 33,39 #include <signal.h> #include <sys/user.h> #include <sys/ioctl.h> - #include <fcntl.h> #ifdef COFF_ENCAPSULATE #include "a.out.encap.h" --- 33,38 ----- #include <signal.h> #include <sys/user.h> #include <sys/ioctl.h> #ifdef COFF_ENCAPSULATE #include "a.out.encap.h" ------------------------------------------------------------------------------- Finally, a comment in the Makefile about -DBSD43_ISI40D really should be added. I spend much time looking through source that I really didn't want to read before I discovered this was required for our machines. ------------------------------------------------------------------------------- RCS file: Makefile,v retrieving revision 1.1 retrieving revision 1.2 diff -r1.1 -r1.2 20a21,23 > # On ISI machines, make sure to compile gdb with -DBSD43_ISI40D if you run > # 4.3BSD. > ------------------------------------------------------------------------------- Ok. That about does it. Keep up the good work guys. This is the most marvelous debugger that I have seen in my life!!!! Ray