[gnu.gdb.bug] function call broken in Sequent Symmetry gdb

jw@sics.se (Johan Widen) (03/25/89)

The following concerns gdb 3.1 on the Sequent Symmetry.

Assume that we are debugging a program which contains the following
declaration:

int foo(i)
int i;
{
 return i + 1;
}

Giving the following command to gdb, on the Sequent Symmetry

	(gdb) print foo(1)

results in a segmentation fault in the program.

The reason is that
	store_inferior_registers()
in symmetry-dep.c is broken. The following patch should correct this
problem. (I have also included a patch for m-symmetry.h. This patch is
only cosmetic.)

*** /tmp/,RCSt1a00267	Fri Mar 24 20:37:32 1989
--- m-symmetry.h	Fri Mar 24 20:32:55 1989
***************
*** 361,369 ****
  
  #define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, type)   \
  { \
! 	int from, to, delta, loc; \
! 	loc = (int)(read_register (SP_REGNUM) - CALL_DUMMY_LENGTH); \
! 	from = loc + 5; \
  	to = (int)(fun); \
  	delta = to - from; \
  	*(int *)((char *)(dummyname) + 1) = delta; \
--- 361,368 ----
  
  #define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, type)   \
  { \
! 	int from, to, delta; \
! 	from = (int)(pc) + 5; \
  	to = (int)(fun); \
  	delta = to - from; \
  	*(int *)((char *)(dummyname) + 1) = delta; \
*** /tmp/,RCSt1a00272	Fri Mar 24 20:37:43 1989
--- symmetry-dep.c	Fri Mar 24 20:31:54 1989
***************
*** 142,175 ****
        switch(regno)
          {
  	case 0:
! 	  pt_regset.pr_eax = regno;
  	  break;
  	case 1:
! 	  pt_regset.pr_ecx = regno;
  	  break;
  	case 2:
! 	  pt_regset.pr_edx = regno;
  	  break;
  	case 3:
! 	  pt_regset.pr_ebx = regno;
  	  break;
  	case 4:
! 	  pt_regset.pr_esp = regno;
  	  break;
  	case 5:
! 	  pt_regset.pr_ebp = regno;
  	  break;
  	case 6:
! 	  pt_regset.pr_esi = regno;
  	  break;
  	case 7:
! 	  pt_regset.pr_edi = regno;
  	  break;
  	case 8:
! 	  pt_regset.pr_eip = regno;
  	  break;
  	case 9:
! 	  pt_regset.pr_flags = regno;
  	  break;
  	}
      }
--- 142,175 ----
        switch(regno)
          {
  	case 0:
! 	  pt_regset.pr_eax = reg;
  	  break;
  	case 1:
! 	  pt_regset.pr_ecx = reg;
  	  break;
  	case 2:
! 	  pt_regset.pr_edx = reg;
  	  break;
  	case 3:
! 	  pt_regset.pr_ebx = reg;
  	  break;
  	case 4:
! 	  pt_regset.pr_esp = reg;
  	  break;
  	case 5:
! 	  pt_regset.pr_ebp = reg;
  	  break;
  	case 6:
! 	  pt_regset.pr_esi = reg;
  	  break;
  	case 7:
! 	  pt_regset.pr_edi = reg;
  	  break;
  	case 8:
! 	  pt_regset.pr_eip = reg;
  	  break;
  	case 9:
! 	  pt_regset.pr_flags = reg;
  	  break;
  	}
      }
--
Johan Widen
SICS, PO Box 1263, S-164 28 KISTA, SWEDEN	Internet: jw@sics.se
Tel: +46 8 752 15 32	Ttx: 812 61 54 SICS S	Fax: +46 8 751 72 30