* config/mips/tm-mips.h (GDB_TARGET_IS_MIPS64): If not already

defined, define as 0.
	(FIX_CALL_DUMMY): Rewrite to remove presumption that host and
	target are similar.
	* config/mips/tm-idt.h (TARGET_BYTE_ORDER_SELECTABLE): Define.
	* config/mips/tm-idtl.h (TARGET_BYTE_ORDER_SELECTABLE): Define.
	* config/mips/tm-idt64.h (TARGET_BYTE_ORDER_SELECTABLE): Define.
	(BREAKPOINT): Remove definition.
	* config/mips/tm-idtl64.h (TARGET_BYTE_ORDER_SELECTABLE): Define.
	(BREAKPOINT): Remove definition.
	* config/mips/tm-mips64.h (GDB_TARGET_IS_MIPS64): Define with a
	value of 1, rather than without a value.
	* config/mips/tm-bigmips64.h (GDB_TARGET_IS_MIPS64): Likewise.
This commit is contained in:
Ian Lance Taylor 1994-10-06 16:43:40 +00:00
parent 1a406ce8c4
commit 97d3151a59
7 changed files with 59 additions and 52 deletions

View File

@ -18,7 +18,7 @@ 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., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define GDB_TARGET_IS_MIPS64
#define GDB_TARGET_IS_MIPS64 1
/* force LONGEST to be long long in gdb */
#define FORCE_LONG_LONG

View File

@ -16,4 +16,6 @@ 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., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define TARGET_BYTE_ORDER_SELECTABLE
#include "mips/tm-bigmips.h"

View File

@ -16,10 +16,6 @@ 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., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define TARGET_BYTE_ORDER_SELECTABLE
#include "mips/tm-bigmips64.h"
/* The IDT board uses an unusual breakpoint value, and sometimes gets
confused when it sees the usual MIPS breakpoint instruction. */
#undef BREAKPOINT
#define BREAKPOINT {0, 0, 0x0a, 0x0d}

View File

@ -16,4 +16,6 @@ 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., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define TARGET_BYTE_ORDER_SELECTABLE
#include "mips/tm-mips.h"

View File

@ -16,10 +16,6 @@ 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., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define TARGET_BYTE_ORDER_SELECTABLE
#include "mips/tm-mips64.h"
/* The IDT board uses an unusual breakpoint value, and sometimes gets
confused when it sees the usual MIPS breakpoint instruction. */
#undef BREAKPOINT
#define BREAKPOINT {0x0d, 0x0a, 0, 0}

View File

@ -27,6 +27,10 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define TARGET_BYTE_ORDER LITTLE_ENDIAN
#endif
#if !defined (GDB_TARGET_IS_MIPS64)
#define GDB_TARGET_IS_MIPS64 0
#endif
/* Floating point is IEEE compliant */
#define IEEE_FLOAT
@ -344,50 +348,57 @@ extern int in_sigtramp PARAMS ((CORE_ADDR, char *));
/* Insert the specified number of args and function address
into a call sequence of the above form stored at DUMMYNAME. */
#if TARGET_BYTE_ORDER == BIG_ENDIAN && ! defined (GDB_TARGET_IS_MIPS64)
/* For big endian mips machines we need to switch the order of the
words with a floating-point value (it was already coerced to a double
by mips_push_arguments). */
#define FIX_CALL_DUMMY(dummyname, start_sp, fun, nargs, args, rettype, gcc_p) \
do { \
((int*)(dummyname))[11] |= ((unsigned long)(fun)) >> 16; \
((int*)(dummyname))[12] |= (unsigned short)(fun); \
if (! mips_fpu) { \
((int *) (dummyname))[3] = 0; ((int *) (dummyname))[4] = 0; \
((int *) (dummyname))[5] = 0; ((int *) (dummyname))[6] = 0; \
} else { \
if (nargs > 0 && \
TYPE_CODE(VALUE_TYPE(args[0])) == TYPE_CODE_FLT) { \
if (TYPE_LENGTH(VALUE_TYPE(args[0])) > 8) \
error ("Can't pass floating point value of more than 8 bytes to a function"); \
((int *) (dummyname))[3] = MK_OP(OP_LDFPR,SP_REGNUM,12,4); \
((int *) (dummyname))[4] = MK_OP(OP_LDFPR,SP_REGNUM,13,0); \
} \
if (nargs > 1 && \
TYPE_CODE(VALUE_TYPE(args[1])) == TYPE_CODE_FLT) { \
if (TYPE_LENGTH(VALUE_TYPE(args[1])) > 8) \
error ("Can't pass floating point value of more than 8 bytes to a function"); \
((int *) (dummyname))[5] = MK_OP(OP_LDFPR,SP_REGNUM,14,12); \
((int *) (dummyname))[6] = MK_OP(OP_LDFPR,SP_REGNUM,15,8); \
} \
do \
{ \
store_unsigned_integer \
(dummyname + 11 * 4, 4, \
(extract_unsigned_integer (dummyname + 11 * 4, 4) \
| (((fun) >> 16) & 0xffff))); \
store_unsigned_integer \
(dummyname + 12 * 4, 4, \
(extract_unsigned_integer (dummyname + 12 * 4, 4) \
| ((fun) & 0xffff))); \
if (! mips_fpu) \
{ \
store_unsigned_integer (dummyname + 3 * 4, 4, \
(unsigned LONGEST) 0); \
store_unsigned_integer (dummyname + 4 * 4, 4, \
(unsigned LONGEST) 0); \
store_unsigned_integer (dummyname + 5 * 4, 4, \
(unsigned LONGEST) 0); \
store_unsigned_integer (dummyname + 6 * 4, 4, \
(unsigned LONGEST) 0); \
} \
else if (TARGET_BYTE_ORDER == BIG_ENDIAN \
&& ! GDB_TARGET_IS_MIPS64) \
{ \
if (nargs > 0 \
&& TYPE_CODE (VALUE_TYPE (args[0])) == TYPE_CODE_FLT) \
{ \
if (TYPE_LENGTH (VALUE_TYPE (args[0])) > 8) \
error ("floating point value too large to pass to function");\
store_unsigned_integer \
(dummyname + 3 * 4, 4, MK_OP (OP_LDFPR, SP_REGNUM, 12, 4));\
store_unsigned_integer \
(dummyname + 4 * 4, 4, MK_OP (OP_LDFPR, SP_REGNUM, 13, 0));\
} \
if (nargs > 1 \
&& TYPE_CODE (VALUE_TYPE (args[1])) == TYPE_CODE_FLT) \
{ \
if (TYPE_LENGTH (VALUE_TYPE (args[1])) > 8) \
error ("floating point value too large to pass to function");\
store_unsigned_integer \
(dummyname + 5 * 4, 4, MK_OP (OP_LDFPR, SP_REGNUM, 14, 12));\
store_unsigned_integer \
(dummyname + 6 * 4, 4, MK_OP (OP_LDFPR, SP_REGNUM, 15, 8));\
} \
} \
} \
} while (0)
#else
#define FIX_CALL_DUMMY(dummyname, start_sp, fun, nargs, args, rettype, gcc_p)\
do \
{ \
((int*)(dummyname))[11] |= ((unsigned long)(fun)) >> 16; \
((int*)(dummyname))[12] |= (unsigned short)(fun); \
if (! mips_fpu) \
{ \
((int *) (dummyname))[3] = 0; \
((int *) (dummyname))[4] = 0; \
((int *) (dummyname))[5] = 0; \
((int *) (dummyname))[6] = 0; \
} \
} \
while (0)
#endif
/* There's a mess in stack frame creation. See comments in blockframe.c
near reference to INIT_FRAME_PC_FIRST. */

View File

@ -18,7 +18,7 @@ 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., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define GDB_TARGET_IS_MIPS64
#define GDB_TARGET_IS_MIPS64 1
/* force LONGEST to be long long in gdb */
#define FORCE_LONG_LONG