diff options
author | Ian Lance Taylor <ian@airs.com> | 1994-10-06 16:43:40 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 1994-10-06 16:43:40 +0000 |
commit | 97d3151a59022d8d76fd29100052645bd8d99c6b (patch) | |
tree | 727b73d5b197ddec90dd9fc2666b78813f4e2a3a /gdb/config | |
parent | 1a406ce8c419273e124e5ab1c580a03c24ce056b (diff) | |
download | gdb-97d3151a59022d8d76fd29100052645bd8d99c6b.zip gdb-97d3151a59022d8d76fd29100052645bd8d99c6b.tar.gz gdb-97d3151a59022d8d76fd29100052645bd8d99c6b.tar.bz2 |
* 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.
Diffstat (limited to 'gdb/config')
-rw-r--r-- | gdb/config/mips/tm-bigmips64.h | 2 | ||||
-rw-r--r-- | gdb/config/mips/tm-idt.h | 2 | ||||
-rw-r--r-- | gdb/config/mips/tm-idt64.h | 8 | ||||
-rw-r--r-- | gdb/config/mips/tm-idtl.h | 2 | ||||
-rw-r--r-- | gdb/config/mips/tm-idtl64.h | 8 | ||||
-rw-r--r-- | gdb/config/mips/tm-mips.h | 87 | ||||
-rw-r--r-- | gdb/config/mips/tm-mips64.h | 2 |
7 files changed, 59 insertions, 52 deletions
diff --git a/gdb/config/mips/tm-bigmips64.h b/gdb/config/mips/tm-bigmips64.h index a9161d8..1f45b18 100644 --- a/gdb/config/mips/tm-bigmips64.h +++ b/gdb/config/mips/tm-bigmips64.h @@ -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 diff --git a/gdb/config/mips/tm-idt.h b/gdb/config/mips/tm-idt.h index bb4697d..e53e5e7 100644 --- a/gdb/config/mips/tm-idt.h +++ b/gdb/config/mips/tm-idt.h @@ -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" diff --git a/gdb/config/mips/tm-idt64.h b/gdb/config/mips/tm-idt64.h index 4f60ae4..51f0cd8 100644 --- a/gdb/config/mips/tm-idt64.h +++ b/gdb/config/mips/tm-idt64.h @@ -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. */ -#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. */ +#define TARGET_BYTE_ORDER_SELECTABLE -#undef BREAKPOINT -#define BREAKPOINT {0, 0, 0x0a, 0x0d} +#include "mips/tm-bigmips64.h" diff --git a/gdb/config/mips/tm-idtl.h b/gdb/config/mips/tm-idtl.h index 3410bca..d00bb04 100644 --- a/gdb/config/mips/tm-idtl.h +++ b/gdb/config/mips/tm-idtl.h @@ -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" diff --git a/gdb/config/mips/tm-idtl64.h b/gdb/config/mips/tm-idtl64.h index dbe4eb5..73aa621 100644 --- a/gdb/config/mips/tm-idtl64.h +++ b/gdb/config/mips/tm-idtl64.h @@ -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. */ -#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. */ +#define TARGET_BYTE_ORDER_SELECTABLE -#undef BREAKPOINT -#define BREAKPOINT {0x0d, 0x0a, 0, 0} +#include "mips/tm-mips64.h" diff --git a/gdb/config/mips/tm-mips.h b/gdb/config/mips/tm-mips.h index 3deb7b6..87fbfe6 100644 --- a/gdb/config/mips/tm-mips.h +++ b/gdb/config/mips/tm-mips.h @@ -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. */ diff --git a/gdb/config/mips/tm-mips64.h b/gdb/config/mips/tm-mips64.h index 87afc21..10384f6 100644 --- a/gdb/config/mips/tm-mips64.h +++ b/gdb/config/mips/tm-mips64.h @@ -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 |