/* Parameters for execution on a Sun, for GDB, the GNU debugger.
   Copyright 1986, 1987, 1989, 1992, 1993, 1994, 1996, 2000
   Free Software Foundation, Inc.

   This file is part of GDB.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place - Suite 330,
   Boston, MA 02111-1307, USA.  */

#ifndef TM_SUN3_H
#define TM_SUN3_H

/* Sun3 status includes fpflags, which shows whether the FPU has been used
   by the process, and whether the FPU was done with an instruction or 
   was interrupted in the middle of a long instruction.  See
   <machine/reg.h>.  */
/*                      a&d, pc,sr, fp, fpstat, fpflags   */

#define REGISTER_BYTES (16*4 + 8 + 8*12 + 3*4 + 4)

#define NUM_REGS 31

#define REGISTER_BYTES_OK(b) \
     ((b) == REGISTER_BYTES \
      || (b) == REGISTER_BYTES_FP \
      || (b) == REGISTER_BYTES_NOFP)

/* If PC contains this instruction, then we know what we are in a system
   call stub, and the return PC is is at SP+4, instead of SP. */

#define SYSCALL_TRAP 0x4e40	/* trap #0 */
#define SYSCALL_TRAP_OFFSET 0	/* PC points at trap instruction */

#include "m68k/tm-m68k.h"

/* Disable alternate breakpoint mechanism needed by 68k stub. */
#undef REMOTE_BREAKPOINT

/* Offsets (in target ints) into jmp_buf.  Not defined by Sun, but at least
   documented in a comment in <machine/setjmp.h>! */

#define JB_ELEMENT_SIZE 4

#define JB_ONSSTACK 0
#define JB_SIGMASK 1
#define JB_SP 2
#define JB_PC 3
#define JB_PSL 4
#define JB_D2 5
#define JB_D3 6
#define JB_D4 7
#define JB_D5 8
#define JB_D6 9
#define JB_D7 10
#define JB_A2 11
#define JB_A3 12
#define JB_A4 13
#define JB_A5 14
#define JB_A6 15

/* Figure out where the longjmp will land.  Slurp the args out of the stack.
   We expect the first arg to be a pointer to the jmp_buf structure from which
   we extract the pc (JB_PC) that we will land at.  The pc is copied into ADDR.
   This routine returns true on success */

#define GET_LONGJMP_TARGET(ADDR) m68k_get_longjmp_target(ADDR)

/* If sun3 pcc says that a parameter is a short, it's a short.  */
#define BELIEVE_PCC_PROMOTION_TYPE 1

/* Can't define BELIEVE_PCC_PROMOTION for SunOS /bin/cc of SunOS 4.1.1.
   Apparently Sun fixed this for the sparc but not the sun3.  */

/* The code which tries to deal with this bug is never harmful on a sun3.  */
#define SUN_FIXED_LBRAC_BUG (0)

/* On the sun3 the kernel pushes a sigcontext on the user stack and
   then `calls' _sigtramp in user code. _sigtramp saves the floating
   point status on the stack and calls the signal handler
   function. The stack does not contain enough information to allow a
   normal backtrace, but sigcontext contains the saved user
   pc/sp. DEPRECATED_FRAME_CHAIN and friends in tm-m68k.h and
   m68k_find_saved_regs deal with this situation by manufacturing a
   fake frame for _sigtramp.  SIG_PC_FP_OFFSET is the offset from the
   signal handler frame to the saved pc in sigcontext.
   SIG_SP_FP_OFFSET is the offset from the signal handler frame to the
   end of sigcontext which is identical to the saved sp at
   SIG_PC_FP_OFFSET - 4.

   Please note that it is impossible to correctly backtrace from a breakpoint
   in _sigtramp as _sigtramp modifies the stack pointer a few times.  */

#undef SIG_PC_FP_OFFSET
#define SIG_PC_FP_OFFSET 324
#define SIG_SP_FP_OFFSET 332

#endif /* TM_SUN3_H */
