This is the mail archive of the gdb-patches@sourceware.cygnus.com mailing list for the GDB project. See the GDB home page for more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: ["John Rigby" <JRIGBY@novell.com>] Patch for Alpha target and 32 bit host



> The following patch fixes a problem in the dummy stackframe
> pushing/popping code in alpha-tdep.c.  The original code (ab)uses
> the field iopt in the PDR struct from ../include/coff/sym.h to
> save away the fake fp.  The problem is that this is a long (only a 32 bits
> on a 32 bit host).  This means the vfp is hosed after returning
> from a "call" command.
> 
> If we (ab)use cbLineOffet which is of type bfd_vma then things work
> better.

Thanks; I've committed this change.

1999-05-04  Jim Blandy  <jimb@zwingli.cygnus.com>

	Fix from John Rigby.  Richard Henderson says it seems okay.
	* alpha-tdep.c (PROC_DUMMY_FRAME): As long as we're abusing fields
	of (proc)->pdr, we ought to at least abuse one large enough to
	hold the value we're trying to store in it.  iopt is only 32 bits
	wide; cbLineOffset is a bfd_vma.

Index: alpha-tdep.c
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/alpha-tdep.c,v
retrieving revision 2.41
diff -c -c -b -F'^(' -r2.41 alpha-tdep.c
*** alpha-tdep.c	1999/03/12 17:14:22	2.41
--- alpha-tdep.c	1999/05/04 18:48:33
***************
*** 108,115 ****
  */
  
  #define PROC_LOW_ADDR(proc) ((proc)->pdr.adr) /* least address */
  #define PROC_HIGH_ADDR(proc) ((proc)->pdr.iline) /* upper address bound */
! #define PROC_DUMMY_FRAME(proc) ((proc)->pdr.iopt) /* frame for CALL_DUMMY */
  #define PROC_FRAME_OFFSET(proc) ((proc)->pdr.frameoffset)
  #define PROC_FRAME_REG(proc) ((proc)->pdr.framereg)
  #define PROC_REG_MASK(proc) ((proc)->pdr.regmask)
--- 108,118 ----
  */
  
  #define PROC_LOW_ADDR(proc) ((proc)->pdr.adr) /* least address */
+ /* These next two fields are kind of being hijacked.  I wonder if
+    iline is too small for the values it needs to hold, if GDB is
+    running on a 32-bit host.  */
  #define PROC_HIGH_ADDR(proc) ((proc)->pdr.iline) /* upper address bound */
! #define PROC_DUMMY_FRAME(proc) ((proc)->pdr.cbLineOffset) /*CALL_DUMMY frame */
  #define PROC_FRAME_OFFSET(proc) ((proc)->pdr.frameoffset)
  #define PROC_FRAME_REG(proc) ((proc)->pdr.framereg)
  #define PROC_REG_MASK(proc) ((proc)->pdr.regmask)